diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 69db3489dae34cace52ea0cacacf759b002f7a9b..63dcaaafe3c24d3e9cd59ed15296156016a12cee 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,41 +1,119 @@ --- +image: mathiwr/amdis-base:debian9 + cache: + key: "$CI_BUILD_REF_NAME" + untracked: true paths: - - install/boost - - install/petsc + - install/ + +stages: + - build + - demo + - test -before_script: - - tools/install_boost.sh - - tools/install_petsc.sh +# compile amdis build:9-debug-gcc: stage: build - image: duneci/base:9 script: - - tools/build_amdis.sh Debug + - tools/build_amdis.sh --stage build --config Debug only: - master build:9-release-gcc: stage: build - image: duneci/base:9 script: - - tools/build_amdis.sh Release + - tools/build_amdis.sh --stage build --config Release only: - master build:9-parallel-debug-gcc: stage: build - image: duneci/base:9 script: - - tools/build_parallel_amdis.sh Debug + - tools/build_amdis.sh --stage build --config Debug --parallel only: - master build:9-parallel-release-gcc: stage: build - image: duneci/base:9 script: - - tools/build_parallel_amdis.sh Release + - tools/build_amdis.sh --stage build --config Release --parallel + only: + - master + + +# compile the demos +demo:9-debug-gcc: + stage: demo + script: + - tools/build_amdis.sh --stage demo --config Debug + dependencies: + - build:9-debug-gcc + only: + - master + +demo:9-release-gcc: + stage: demo + script: + - tools/build_amdis.sh --stage demo --config Release + dependencies: + - build:9-release-gcc + only: + - master + +demo:9-parallel-debug-gcc: + stage: demo + script: + - tools/build_amdis.sh --stage demo --config Debug --parallel + dependencies: + - build:9-parallel-debug-gcc + only: + - master + +demo:9-parallel-release-gcc: + stage: demo + script: + - tools/build_amdis.sh --stage demo --config Release --parallel + dependencies: + - build:9-parallel-release-gcc + only: + - master + + +# compiel and run the tests +test:9-debug-gcc: + stage: test + script: + - tools/build_amdis.sh --stage test --config Debug + dependencies: + - build:9-debug-gcc + only: + - master + +test:9-release-gcc: + stage: test + script: + - tools/build_amdis.sh --stage test --config Release + dependencies: + - build:9-release-gcc + only: + - master + +test:9-parallel-debug-gcc: + stage: test + script: + - tools/build_amdis.sh --stage test --config Debug --parallel + dependencies: + - build:9-parallel-debug-gcc + only: + - master + +test:9-parallel-release-gcc: + stage: test + script: + - tools/build_amdis.sh --stage test --config Release --parallel + dependencies: + - build:9-parallel-release-gcc only: - master diff --git a/AMDiS/CMakeLists.txt b/AMDiS/CMakeLists.txt index b0adce4093aa48d6674ddf5484f67117f64bb836..2e4f39a81d7a80d56f7ca77c5b4f53fe020904df 100644 --- a/AMDiS/CMakeLists.txt +++ b/AMDiS/CMakeLists.txt @@ -2,9 +2,68 @@ set(CMAKE_LEGACY_CYGWIN_WIN32 0) cmake_minimum_required(VERSION 2.8 FATAL_ERROR) project(AMDiS) -if (${CMAKE_VERSION} VERSION_GREATER "3.2") - include(${AMDiS_SOURCE_DIR}/cmake3/CMakeLists.txt) +set(AMDiS_VERSION "1.1.0") + +set(BASE_DIR ${AMDiS_SOURCE_DIR}) +set(SOURCE_DIR ${BASE_DIR}/src) + +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Debug CACHE STRING + "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." + FORCE) +endif () + +# ------------------------------------------------------------------------------ + +# some options to control the build process +option(ENABLE_PARALLEL_DOMAIN "Use parallel domain decomposition" false) +option(ENABLE_UMFPACK "Enable support for the UMFPACK solver" true) +option(ENABLE_EXTENSIONS "Use extensions for AMDiS" false) +option(ENABLE_HYPRE "Use HYPRE AMG solver" false) +option(ENABLE_PNG "Use png reader/writer" false) +option(ENABLE_SEQ_PETSC "Use sequential PETSc solvers" false) + +# enable/disable some more features +option(ENABLE_COMPRESSION "Use output compression for vtu and arh files" true) +mark_as_advanced(ENABLE_COMPRESSION) + +option(ENABLE_REINIT "Compile reinit library" true) +mark_as_advanced(ENABLE_REINIT) + +option(ENABLE_COMPOSITE_FEM "Compile compositeFEM library" true) +mark_as_advanced(ENABLE_COMPOSITE_FEM) + +option(BUILD_SHARED_LIBS "Build all libraries as shared or static, default: shared" true) +mark_as_advanced(BUILD_SHARED_LIBS) + +if (MSVC) + set(BUILD_SHARED_LIBS false) + mark_as_advanced(BUILD_SHARED_LIBS) + message(WARNING "Currently we can only build static libraries with Visual Studio") +endif (MSVC) + +# parallel of sequential version +if (ENABLE_PARALLEL_DOMAIN) + set(POSTFIX "-p") else () + set(POSTFIX "-s") +endif () + +# ------------------------------------------------------------------------------ + +if (${CMAKE_VERSION} VERSION_LESS "3.2") # Fallback to classical CMakeLists file include(${AMDiS_SOURCE_DIR}/cmake/CMakeLists.txt) +else () + include(${AMDiS_SOURCE_DIR}/cmake3/CMakeLists.txt) endif () + +# ------------------------------------------------------------------------------ + +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + ${AMDiS_BINARY_DIR}/AMDISConfigVersion.cmake + VERSION ${AMDiS_VERSION} + COMPATIBILITY SameMajorVersion +) +install(FILES ${AMDiS_BINARY_DIR}/AMDISConfigVersion.cmake DESTINATION share/amdis/) diff --git a/AMDiS/CTestConfig.cmake b/AMDiS/CTestConfig.cmake deleted file mode 100644 index 3a83a9275bbbc03f117631358a4d93c13c0bb661..0000000000000000000000000000000000000000 --- a/AMDiS/CTestConfig.cmake +++ /dev/null @@ -1,16 +0,0 @@ -## This file should be placed in the root directory of your project. -## Then modify the CMakeLists.txt file in the root directory of your -## project to incorporate the testing dashboard. -## -## # The following are required to submit to the CDash dashboard: -## ENABLE_TESTING() -## INCLUDE(CTest) - -set(CTEST_PROJECT_NAME "AMDiS") -set(CTEST_NIGHTLY_START_TIME "00:00:00 EST") - -set(CTEST_DROP_METHOD "http") -set(CTEST_DROP_SITE "my.cdash.org") -set(CTEST_DROP_LOCATION "/submit.php?project=AMDiS") -set(CTEST_DROP_SITE_CDASH TRUE) -# set(CTEST_USE_LAUNCHERS 1) \ No newline at end of file diff --git a/AMDiS/HOWTO_cmake.html b/AMDiS/HOWTO_cmake.html deleted file mode 100644 index 94fbdcafcdaeaed8989cf4295154dc5960b141ee..0000000000000000000000000000000000000000 --- a/AMDiS/HOWTO_cmake.html +++ /dev/null @@ -1,96 +0,0 @@ - - - Using AMDiS with cmake - - - -

Using AMDiS with cmake

-With this short page, I will show you, how to use the cmake buildsystem with AMDiS. The introduction consists of two main parts: -
    -
  1. compiling and installing AMDiS with CMake
  2. -
  3. using the cmake installed AMDiS in your project
  4. -
  5. some frequently asked questions
  6. -
- -

Compiling and installing AMDiS with CMake

-

configure

-There are 3 different configure tools for CMake: - - -

I will use the cmake and ccmake. The autoconf/automake implementation was used directly inside the AMDiS source directory (i.e. the directory you get through svn). To use the CMake buildsystem, I recommend a different directory structure for building and compiling AMDiS. The script getamdis_cmake.sh, which can be found on https://fusionforge.zih.tu-dresden.de, creates such a directory structure.

-Assume, you have AMDiS downloaded in the directory -
-${HOME}/work/ 
-, the AMDiS source directory is -
-${HOME}/work/amdis/AMDiS 
-. To configure and compile AMDiS I recommend using out of source builds. This means, you should create a directory amdis_build -
-mkdir ${HOME}/work/amdis_build 
-and do the remaining work from there. -
-cd ${HOME}/work/amdis_build 
- The simplest configuration of AMDiS, i.e. without umfpack and parallelization, only sets the install destination to the directory "${HOME}/programs/". To do this, you have to call cmake with your install destination and the AMDiS source directory as commandline arguments -
-cmake -DCMAKE_INSTALL_PREFIX=${HOME}/programs/ ../amdis/AMDiS
- -Compilation and installation is the same as with automake/autoconf: -
-make && make install 
-The last command will install AMDiS to ${HOME}/programs - -

Using the cmake installed AMDiS in your project

-A cmake-project consists of the source files and a file CMakeLists.txt, which contains a description of needed libraries, headers and programs. If you have a simple project with one program "fooProg", which have to compile only one source file "src/foo.cc", your CMakeLists.txt consist of the following lines: -
-project(projectName) 
-cmake_minimum_required(VERSION 2.8)

- -find_package(AMDIS REQUIRED)
-if(AMDIS_FOUND)
- include(${AMDIS_USE_FILE})
- add_executable(fooProg src/foo.cc)
- target_link_libraries(fooProg ${AMDIS_LIBRARIES})
-endif(AMDIS_FOUND)
-
- -The first two lines -
-project(projectName) 
-cmake_minimum_required(VERSION 2.8) -
-tell cmake the name of your project and that you whish to use only cmake versions newer than 2.8.
-The line -
-find_package(AMDIS REQUIRED)
-
-tells cmake, that you want to use AMDiS and it should complain if AMDiS was not found. CMake will print an error message, bu will not stop the execution! With the command -
-	include(${AMDIS_USE_FILE})
-
-we read an AMDiS specific configuration file, which sets some compilerflags and adds the include directorys. The program is added with -
-	add_executable(fooProg src/foo.cc)
-
-and we have to tell cmake, that we need the library amdis and each library amdis depends on. This is done with the command -
-	target_link_libraries(fooProg ${AMDIS_LIBRARIES})
-
- -If cmake does not find AMDiS, you have to set the variable AMDIS_DIR to the directory containing the file AMDiSConfig.cmake. This file resides in -
-  ${CMAKE_INSTALL_PREFIX}/share/amdis/
-
- where CMAKE_INSTALL_PREFIX is the directory you choose during installation of amdis. - -

Frequently asked questions

-

Boost

-If you have different boost versions on your system and you do not want to use the standard version in /usr/lib and /usr/include, you should set the environment variable BOOST_ROOT to your boost-installation. - -

I will not set the AMDIS_DIR in every project.

-If you always use the same AMDiS directory, you can add the directory to your PATH variable. - - diff --git a/AMDiS/cmake/AMDIS.cmake.in b/AMDiS/cmake/AMDIS.cmake.in new file mode 100644 index 0000000000000000000000000000000000000000..41930471494863b49c5c130eae290c1c6e6cfe21 --- /dev/null +++ b/AMDiS/cmake/AMDIS.cmake.in @@ -0,0 +1,186 @@ +set(AMDIS_NEED_CXX11 @ENABLE_CXX11@) +set(AMDIS_NEED_UMFPACK @ENABLE_UMFPACK@) +set(AMDIS_NEED_COMPRESSION @ENABLE_COMPRESSION@) +set(AMDIS_NEED_EXTENSIONS @ENABLE_EXTENSIONS@) +set(AMDIS_NEED_BASE_PROBLEMS @ENABLE_BASE_PROBLEMS@) +set(AMDIS_NEED_REINIT @ENABLE_REINIT@) +set(AMDIS_NEED_COMPOSITE_FEM @ENABLE_COMPOSITE_FEM@) +set(AMDIS_NEED_ZOLTAN @ENABLE_ZOLTAN@) +set(AMDIS_NEED_BDDCML @ENABLE_BDDCML@) +set(AMDIS_NEED_HYPRE @ENABLE_HYPRE@) +set(AMDIS_NEED_PNG @ENABLE_PNG@) +set(AMDIS_NEED_SEQ_PETSC @ENABLE_SEQ_PETSC@) + +set(BUILD_SHARED_LIBS @BUILD_SHARED_LIBS@) +set(CMAKE_BUILD_TYPE @CMAKE_BUILD_TYPE@) + +set(AMDIS_COMPILEFLAGS "") +set(AMDIS_INCLUDE_DIRS "") +set(AMDIS_LIBRARIES "") + + +if (AMDIS_NEED_CXX11) + enable_cxx11(AMDIS_NEED_CXX11 AMDIS_COMPILEFLAGS) + if (NOT AMDIS_NEED_CXX11) + message(FATAL_ERROR "AMDiS was compiled with c++11 support, but the current compiler does not support this feature!") + endif (NOT AMDIS_NEED_CXX11) + list(APPEND AMDIS_COMPILEFLAGS "-DHAS_CXX11=1") +else () + list(APPEND AMDIS_COMPILEFLAGS "-DHAS_CXX11=0") +endif (AMDIS_NEED_CXX11) + + +# try to detect the AMDiS include directory +# ------------------------------------------- +find_file(_AMDIS_H AMDiS.h PATHS ${AMDIS_DIR}/../../include/amdis/) +if (_AMDIS_H) + get_filename_component(AMDIS_INCLUDE_DIR ${_AMDIS_H} PATH CACHE) + list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}) +else () + message(ERROR "Could not detect the AMDiS include directory. Please set the variable AMDIS_INCLUDE_DIR to the directory containing the AMDiS headers.") +endif () +unset(_AMDIS_H CACHE) + + +# MTL4 libraries +# -------------------- +enable_mtl4(AMDIS_COMPILEFLAGS AMDIS_INCLUDE_DIRS AMDIS_LIBRARIES ON) + + +# AMDiS base libraries +# -------------------- +find_library(_AMDIS_LIB amdis${POSTFIX} PATHS ${AMDIS_DIR}/../../lib/amdis/) +if (_AMDIS_LIB) + list(APPEND AMDIS_LIBRARIES optimized ${_AMDIS_LIB} debug ${_AMDIS_LIB}d) +else () + message(ERROR "Could not detect the AMDiS${POSTFIX} library. Please set the variable _AMDIS_LIB to the AMDiS${POSTFIX} library.") +endif () +unset(_AMDIS_LIB CACHE) + + +# Boost libraries +# --------------- +if (NOT BOOST_ROOT) + set(BOOST_ROOT @BOOST_ROOT@) +endif (NOT BOOST_ROOT) +if (NOT BOOST_LIBRARYDIR) + set(BOOST_LIBRARYDIR @BOOST_LIBRARYDIR@) +endif (NOT BOOST_LIBRARYDIR) +enable_boost(AMDIS_COMPILEFLAGS AMDIS_INCLUDE_DIRS AMDIS_LIBRARIES ON) + + +# umfpack library +# -------------------- +if (AMDIS_NEED_UMFPACK) + set(AMDIS_SuiteSparse_DIR @SuiteSparse_DIR@) + set(AMDIS_UMFPACK_INCLUDE_DIR @UMFPACK_INCLUDE_DIRS@) + set(AMDIS_UMFPACK_LIB_DIR ${AMDIS_UMFPACK_INCLUDE_DIR}/../include) + enable_umfpack(AMDIS_COMPILEFLAGS AMDIS_INCLUDE_DIRS AMDIS_LIBRARIES ON) +endif (AMDIS_NEED_UMFPACK) + + +# amdis extensions +# ---------------- +if (AMDIS_NEED_EXTENSIONS) + find_library(_EXTENSIONS_LIB amdisextensions${POSTFIX} PATHS ${AMDIS_DIR}/../../lib/amdis/) + if (_EXTENSIONS_LIB) + list(APPEND AMDIS_INCLUDE_DIRS + ${AMDIS_INCLUDE_DIR}/extensions + ${AMDIS_INCLUDE_DIR}/extensions/nanoflann + ${AMDIS_INCLUDE_DIR}/extensions/pugixml + ${AMDIS_INCLUDE_DIR}/extensions/time) + list(APPEND AMDIS_COMPILEFLAGS "-DHAVE_EXTENSIONS=1") + list(APPEND AMDIS_LIBRARIES optimized ${_EXTENSIONS_LIB} debug ${_EXTENSIONS_LIB}d) + if (AMDIS_NEED_BASE_PROBLEMS) + list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}/extensions/base_problems) + endif (AMDIS_NEED_BASE_PROBLEMS) + else () + message(FATAL_ERROR "Extensions library not found") + endif () + unset(_EXTENSIONS_LIB CACHE) +endif (AMDIS_NEED_EXTENSIONS) + + +# reinit library +# -------------- +if (AMDIS_NEED_REINIT) + find_library(_REINIT_LIB amdisreinit${POSTFIX} PATHS ${AMDIS_DIR}/../../lib/amdis/) + if (_REINIT_LIB) + list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}/reinit) + list(APPEND AMDIS_LIBRARIES optimized ${_REINIT_LIB} debug ${_REINIT_LIB}d) + else () + message(FATAL_ERROR "Reinit library not found") + endif () + unset(_REINIT_LIB CACHE) +endif (AMDIS_NEED_REINIT) + + +# compositeFEM library +# -------------------- +if (AMDIS_NEED_COMPOSITE_FEM) + find_library(_COMPOSITE_FEM_LIB amdiscompositefem${POSTFIX} PATHS ${AMDIS_DIR}/../../lib/amdis/) + if (_COMPOSITE_FEM_LIB) + list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}/compositeFEM) + list(APPEND AMDIS_LIBRARIES optimized ${_COMPOSITE_FEM_LIB} debug ${_COMPOSITE_FEM_LIB}d) + else () + message(FATAL_ERROR "CompositeFEM library not found") + endif () + unset(_COMPOSITE_FEM_LIB CACHE) +endif (AMDIS_NEED_COMPOSITE_FEM) + + +# muparser library +# -------------------- +find_library(_MUPARSER_LIB muparser PATHS ${AMDIS_DIR}/../../lib/amdis/) +if (_MUPARSER_LIB) + list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}/muparser) + list(APPEND AMDIS_LIBRARIES ${_MUPARSER_LIB}) +else () + message(ERROR "MuParser library not found") +endif () +unset(_MUPARSER_LIB CACHE) + + +# Additional libraries +# ================================================================================================== + +if (AMDIS_HAS_PARALLEL_DOMAIN) + enable_mpi(AMDIS_COMPILEFLAGS AMDIS_INCLUDE_DIRS AMDIS_LIBRARIES ON) + enable_petsc(AMDIS_COMPILEFLAGS AMDIS_INCLUDE_DIRS AMDIS_LIBRARIES ON) + list(APPEND AMDIS_COMPILEFLAGS "-DHAVE_PARALLEL_DOMAIN_AMDIS=1") +endif (AMDIS_HAS_PARALLEL_DOMAIN) + +# Zoltan library +# -------------- +if (AMDIS_NEED_ZOLTAN) + enable_zoltan(AMDIS_COMPILEFLAGS AMDIS_INCLUDE_DIRS AMDIS_LIBRARIES ON) +endif () + + +# BDDCML library +# -------------- +if (AMDIS_NEED_BDDCML) + enable_bddcml(AMDIS_COMPILEFLAGS AMDIS_INCLUDE_DIRS AMDIS_LIBRARIES ON) +endif () + + +# Hypre library +# -------------- +if (AMDIS_NEED_HYPRE) + enable_hypre(AMDIS_COMPILEFLAGS AMDIS_INCLUDE_DIRS AMDIS_LIBRARIES ON) +endif () + + +# PNG library +# -------------- +if (AMDIS_NEED_PNG) + enable_png(AMDIS_COMPILEFLAGS AMDIS_INCLUDE_DIRS AMDIS_LIBRARIES ON) +endif () + +# Sequential PETSc library +# -------------- +if (AMDIS_NEED_SEQ_PETSC AND NOT AMDIS_HAS_PARALLEL_DOMAIN) + enable_mpi(AMDIS_COMPILEFLAGS AMDIS_INCLUDE_DIRS AMDIS_LIBRARIES ON) + enable_petsc(AMDIS_COMPILEFLAGS AMDIS_INCLUDE_DIRS AMDIS_LIBRARIES ON) + list(APPEND COMPILEFLAGS "-DHAVE_SEQ_PETSC=1") +endif () diff --git a/AMDiS/cmake/AMDISConfig.cmake.in b/AMDiS/cmake/AMDISConfig.cmake.in index 31aaee1a1f8c819cca16e2381434db34d2c6942e..1fa1fc216cbcf71f3a4ba00df6365d8d6c6c4820 100644 --- a/AMDiS/cmake/AMDISConfig.cmake.in +++ b/AMDiS/cmake/AMDISConfig.cmake.in @@ -1,491 +1,67 @@ -#This configuration file is shipped with the great FEM-Toolbox AMDiS. -#It simplifies the configure of different amdis-version and sets some variables. -#We set the following variables: -# AMDIS_INCLUDE_DIR the amdis-directory only -# AMDIS_INCLUDE_DIRS all include directories (mtl, umfpack, parmetis, metis, ...) -# AMDIS_LIBRARIES the needed libraries -# AMDIS_LIBRARY_DIRS the link directories -# AMDiS_COMPILEFLAGS some compile flags for amdis +# This configuration file is shipped with the FEM-Toolbox AMDiS. +# It simplifies the configure of different amdis-versions. # +# We set the following variables: +# AMDIS_INCLUDE_DIRS all include directories (mtl, umfpack, parmetis, metis, ...) +# AMDIS_LIBRARIES the needed libraries +# AMDiS_COMPILEFLAGS some compile flags for amdis # -# For a fast start, you use this package in the following way -# simply look for it, possibly set the AMDiS directory -# find_package(AMDiS ) -# include(${AMDIS_USE_FILE}) -# add_executable(yourTarget ) -# target_link_libraries(yourTarget ${AMDIS_LIBRARIES}) +# Use this package in the following way: # +# find_package(AMDiS REQUIRED [PARALLEL|SEQUENTIAL]) +# add_executable(yourTarget ) +# include_directories(${AMDIS_INCLUDE_DIRS}) +# compile_definitions(${AMDIS_COMPILEFLAGS}) +# target_link_libraries(yourTarget ${AMDIS_LIBRARIES}) # -#The AMDIS_USE_FILE adds the include and link-directories for amdis to cmake. +# The default component for this package is SEQUENTIAL. # -#If you use the parallel amdis-version, the AMDIS_USE_FILE also trys to detect -#the mpi and petsc configuration. If those versions don't fit your needs, -#you can change the corresponding directories, or simply do this work at your own -#and omit the AMDIS_USE_FILE. Then you also have to set the flags, include -#and library directories. -################## ONLY WORKAROUND AND WARNING ################### -#if(NOT "$ENV{LIBRARY_PATH}" STREQUAL "") -# message(WARNING "the environment variable LIBRARY_PATH is set. this can lead to problems during linking. \n You can unset it in your CMakeLists.txt with the command unset(ENV{LIBRARY_PATH}).\n") -#endif() -################################################################## +if (${CMAKE_VERSION} VERSION_LESS "2.8.10") + message(FATAL_ERROR "The Configuration file was created for CMake version >= 2.8.10") +endif () -# try to detect the AMDiS include directory -# ------------------------------------------- -find_file(_AMDIS_H AMDiS.h PATHS ${AMDIS_INCLUDE_DIR} ${AMDIS_DIR}/../../include/amdis/ /usr/include/amdis/) -if(_AMDIS_H) - get_filename_component(AMDIS_INCLUDE_DIR ${_AMDIS_H} PATH CACHE) - set(AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}) -else() - message(ERROR "could not detect the AMDiS include directory. Please set the variable AMDIS_INCLUDE_DIR to the directory containing the AMDiS headers.") -endif() -unset(_AMDIS_H CACHE) -# set(MTL_DIR @MTL_INCLUDE_DIR@ CACHE PATH "the mtl directory") -list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}/mtl4) +list(APPEND CMAKE_MODULE_PATH ${AMDIS_DIR}) -# AMDiS base libraries -# -------------------- -find_library(_AMDIS_LIB amdis PATHS ${AMDIS_LIBRARY_DIR} ${AMDIS_DIR}/../../lib/amdis/ /usr/include/amdis) -if(_AMDIS_LIB) - get_filename_component(AMDIS_LIBRARY_DIR ${_AMDIS_LIB} PATH CACHE) - set(AMDIS_LIBRARY_DIRS ${AMDIS_LIBRARY_DIR}) - set(AMDIS_LIBRARIES "${_AMDIS_LIB}" CACHE STRING "amdis libraries") -else() - message(ERROR "could not detect the AMDiS library directory. Please set the variable AMDIS_LIBRARY_DIR to the directory containg the AMDiS library") -endif() -unset(_AMDIS_LIB CACHE) +set(IS_AMDISCONFIG true) - -# Boost libraries -# --------------- -set(AMDIS_HAS_PARALLEL_DOMAIN @ENABLE_PARALLEL_DOMAIN@) -set(AMDIS_NEED_COMPRESSION @ENABLE_COMPRESSION@) - -set(BOOST_LIBS_REQUIRED system iostreams filesystem program_options date_time) -if(WIN32) - list(APPEND BOOST_LIBS_REQUIRED zlib) - if (AMDIS_NEED_COMPRESSION) - list(APPEND BOOST_LIBS_REQUIRED bzip2) - endif () -endif() - -set(BOOST_VERSION "1.42") -if(AMDIS_HAS_PARALLEL_DOMAIN) - set(BOOST_VERSION "1.48") -endif(AMDIS_HAS_PARALLEL_DOMAIN) - -if(WIN32) - set(Boost_USE_STATIC_LIBS ON) - find_package(Boost ${BOOST_VERSION} REQUIRED ${BOOST_LIBS_REQUIRED}) -else() - set(Boost_USE_STATIC_LIBS OFF) - find_package(Boost ${BOOST_VERSION} REQUIRED ${BOOST_LIBS_REQUIRED}) -endif() -if(Boost_FOUND) - list(APPEND AMDIS_LIBRARIES ${Boost_LIBRARIES}) - list(APPEND AMDIS_LIBRARY_DIRS ${Boost_LIBRARY_DIRS}) - list(APPEND AMDIS_INCLUDE_DIRS ${Boost_INCLUDE_DIR}) -else() - message(ERROR "Boost libraries not found") -endif(Boost_FOUND) - -# more libraries and include-directories added by default -# ------------------------------------------------------- -list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}/reinit) -list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}/compositeFEM) -list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}/muparser) - -# ------------------------------------------------------------------ - -set(AMDIS_NEED_ZOLTAN @ENABLE_ZOLTAN@) -set(AMDIS_OPENMP @ENABLE_OPENMP@) -set(AMDIS_NEED_CXX11 @ENABLE_CXX11@) -set(AMDIS_NEED_UMFPACK @ENABLE_UMFPACK@) -set(AMDIS_NEED_HYPRE @ENABLE_HYPRE@) -set(AMDIS_NEED_SEQ_PETSC @ENABLE_SEQ_PETSC@) -set(AMDIS_NEED_PNG @ENABLE_PNG@) -set(AMDIS_NEED_BDDCML @ENABLE_BDDCML@) -set(AMDIS_NEED_MKL @ENABLE_MKL@) -set(AMDIS_NEED_EXTENSIONS @ENABLE_EXTENSIONS@) -set(AMDIS_NEED_BASE_PROBLEMS @ENABLE_BASE_PROBLEMS@) set(AMDIS_USE_FILE ${AMDIS_DIR}/AMDISUse.cmake) -set(AMDIS_COMPILEFLAGS "@COMPILEFLAGS@") -set(AMDIS_VERSION @CurrentRevision@) -set(AMDIS_MAJOR_VERSION @AMDIS_MAJOR@) -set(AMDIS_MINOR_VERSION @AMDIS_MINOR@) -set(AMDIS_SUB_MINOR_VERSION @AMDIS_SUB_MINOR@) - -if(CMAKE_BUILD_TYPE STREQUAL "") - set(CMAKE_BUILD_TYPE "Release") -endif() -if (AMDIS_NEED_CXX11) - list(APPEND AMDIS_COMPILEFLAGS "-DHAS_CXX11=1") - if (${CMAKE_VERSION} VERSION_GREATER "3.0") - set(CMAKE_CXX_STANDARD 11) - set(CMAKE_CXX_STANDARD_REQUIRED ON) - else() - if (CMAKE_COMPILER_IS_GNUCXX) - set(GXX_MIN_VER "4.8") - if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS GXX_MIN_VER) - message (FATAL_ERROR "For C++11-Features the G++ Compiler must be at least version $GXX_MIN_VER") - endif () - list(APPEND AMDIS_COMPILEFLAGS "-std=gnu++11") - elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set(CLANG_MIN_VER "3.0") - if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS CLANG_MIN_VER) - message (FATAL_ERROR "For C++11-Features the Clang Compiler must be at least version $CLANG_MIN_VER") - endif () - list(APPEND AMDIS_COMPILEFLAGS "-std=c++11") - elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") - set(INTEL_MIN_VER "12.1") - if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS INTEL_MIN_VER) - message (FATAL_ERROR "For C++11-Features the Intel C++ Compiler must be at least version $INTEL_MIN_VER") - endif () - list(APPEND AMDIS_COMPILEFLAGS "-std=c++11") - elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") - set(MSVC_MIN_VER "12.0") - if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS MSVC_MIN_VER) - message (FATAL_ERROR "For C++11-Features the MSVC C++ Compiler must be at least version $MSVC_MIN_VER") - endif () - endif () - endif() +# Include macros +include(enable_cxx11) +include(enable_mtl4) +include(enable_boost) +include(enable_umfpack) +include(enable_petsc) +include(enable_zoltan) +include(enable_bddcml) +include(enable_hypre) +include(enable_png) + +# enable components +# ----------------- + +if (AMDIS_FIND_REQUIRED_PARALLEL AND AMDIS_FIND_REQUIRED_SEQUENTIAL) + message(WARNING "Choose either SEQUENTIAL or PARALLEL as component, not both! Falling back to the default SEQUENTIAL.") + set(AMDIS_FIND_REQUIRED_PARALLEL OFF) +endif () + +set(AMDIS_CONFIGURATION "") + +# parallel of sequential version +if (AMDIS_FIND_REQUIRED_PARALLEL) + set(AMDIS_HAS_PARALLEL_DOMAIN ON) + set(POSTFIX "-p") + list(APPEND AMDIS_CONFIGURATION "PARALLEL") else () - list(APPEND AMDIS_COMPILEFLAGS "-DHAS_CXX11=0") -endif (AMDIS_NEED_CXX11) - -#load mpi-compiler for use with parmetis and parallel_domain -if(AMDIS_HAS_PARALLEL_DOMAIN) - find_package(MPI REQUIRED) - if(MPI_FOUND) - list(APPEND AMDIS_LIBRARIES ${MPI_LIBRARIES}) - list(APPEND AMDIS_COMPILEFLAGS ${MPI_COMPILE_FLAGS}) - list(APPEND AMDIS_INCLUDE_DIRS ${MPI_INCLUDE_PATH}) - endif(MPI_FOUND) - if(AMDIS_HAS_PARALLEL_DOMAIN STREQUAL "PETSC") - set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${AMDIS_DIR}) - set(PETSC_EXECUTABLE_RUNS ON) - find_package(PETSc REQUIRED) - if(PETSC_FOUND) - list(APPEND AMDIS_LIBRARIES ${PETSC_LIBRARY_SYS} ${PETSC_LIBRARIES}) - list(APPEND AMDIS_INCLUDE_DIRS ${PETSC_INCLUDES}) - else() - message(FATAL_ERROR "Could not find PETSc!") - endif(PETSC_FOUND) - elseif(AMDIS_HAS_PARALLEL_DOMAIN STREQUAL "PMTL") - find_package(MTL REQUIRED) - list(APPEND AMDIS_LIBRARIES ${MTL_LIBRARIES}) - find_library(PARMETIS_LIB parmetis) - if(PARMETIS_LIB) - list(APPEND AMDIS_LIBRARIES ${PARMETIS_LIB}) - else(PARMETIS_LIB) - message(FATAL_ERROR "could not find the parmetis libraries needed by amdis") - endif(PARMETIS_LIB) - find_library(METIS_LIB metis) - if(METIS_LIB) - list(APPEND AMDIS_LIBRARIES ${METIS_LIB}) - else(METIS_LIB) - message(FATAL_ERROR "could not find the metis libraries needed by amdis") - endif(METIS_LIB) - endif() - -elseif(AMDIS_NEED_SEQ_PETSC) - find_package(MPI REQUIRED) - if(MPI_FOUND) - list(APPEND AMDIS_LIBRARIES ${MPI_LIBRARIES}) - list(APPEND AMDIS_COMPILEFLAGS ${MPI_COMPILE_FLAGS}) - list(APPEND AMDIS_INCLUDE_DIRS ${MPI_INCLUDE_PATH}) - endif(MPI_FOUND) - - set(CMAKE_MODULE_PATH ${AMDIS_DIR}) - set(PETSC_EXECUTABLE_RUNS ON) - find_package(PETSc REQUIRED) - if(PETSC_FOUND) - list(APPEND AMDIS_LIBRARIES ${PETSC_LIBRARY_SYS} ${PETSC_LIBRARIES}) - list(APPEND AMDIS_INCLUDE_DIRS ${PETSC_INCLUDES}) - else() - message(FATAL_ERROR "Could not find PETSc!") - endif(PETSC_FOUND) -endif() - -if(AMDIS_NEED_HYPRE) - find_package(HYPRE REQUIRED HINTS ${AMDIS_DIR}) - if(HAVE_HYPRE) - if(NOT MPI_FOUND) - find_package(MPI REQUIRED) - if(MPI_FOUND) - list(APPEND AMDIS_LIBRARIES ${MPI_LIBRARIES}) - list(APPEND AMDIS_COMPILEFLAGS ${MPI_COMPILE_FLAGS}) - list(APPEND AMDIS_INCLUDE_DIRS ${MPI_INCLUDE_PATH}) - endif() - endif() - list(APPEND AMDIS_INCLUDE_DIRS ${HYPRE_INCLUDE_DIRECTORIES}) - list(APPEND AMDIS_COMPILEFLAGS "-DMTL_HAS_HYPRE") - list(APPEND AMDIS_LIBRARIES ${HYPRE_LIBRARIES} ) - endif() -endif(AMDIS_NEED_HYPRE) - -if(AMDIS_OPENMP) - if(CMAKE_CXX_COMPILER MATCHES ".*icpc") - list(APPEND AMDIS_COMPILEFLAGS "-openmp") - list(APPEND AMDIS_LIBRARIES "-openmp") - else() - list(APPEND AMDIS_COMPILEFLAGS "-fopenmp") - list(APPEND AMDIS_LIBRARIES "-fopenmp") - endif() -endif(AMDIS_OPENMP) - - -# AMDiS-Extensions library -# ------------------------ -if(AMDIS_NEED_EXTENSIONS) - list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}/extensions) - list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}/extensions/time) - list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}/extensions/nanoflann) - list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}/extensions/pugixml) - - find_library(_EXTENSIONS_LIB extensions PATHS ${AMDIS_LIBRARY_DIR} ${AMDIS_DIR}/../../lib/amdis/) - if(_EXTENSIONS_LIB) - list(APPEND AMDIS_LIBRARIES ${_EXTENSIONS_LIB}) - endif() - unset(_EXTENSIONS_LIB CACHE) -endif(AMDIS_NEED_EXTENSIONS) - -# AMDiS BaseProblems libraries -# ---------------------------- -if(AMDIS_NEED_BASE_PROBLEMS) - list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_INCLUDE_DIR}/base_problems) - - find_library(_BASE_PROBLEMS_LIB base_problems PATHS ${AMDIS_LIBRARY_DIR} ${AMDIS_DIR}/../../lib/amdis/) - if(_BASE_PROBLEMS_LIB) - list(APPEND AMDIS_LIBRARIES ${_BASE_PROBLEMS_LIB}) - endif() - unset(_BASE_PROBLEMS_LIB CACHE) -endif(AMDIS_NEED_BASE_PROBLEMS) - -# ---------------------------- - -find_library(_REINIT_LIB reinit PATHS ${AMDIS_LIBRARY_DIR} ${AMDIS_DIR}/../../lib/amdis/) -find_library(_COMPOSITE_FEM_LIB compositeFEM PATHS ${AMDIS_LIBRARY_DIR} ${AMDIS_DIR}/../../lib/amdis/) -find_library(_MUPARSER_LIB muparser PATHS ${AMDIS_LIBRARY_DIR} ${AMDIS_DIR}/../../lib/amdis/) - -if(_REINIT_LIB) - list(APPEND AMDIS_LIBRARIES ${_REINIT_LIB}) -else() - message(ERROR "Reinit library not found") -endif() -unset(_REINIT_LIB CACHE) -if(_COMPOSITE_FEM_LIB) - list(APPEND AMDIS_LIBRARIES ${_COMPOSITE_FEM_LIB}) -else() - message(ERROR "CompositeFEM library not found") -endif() -unset(_COMPOSITE_FEM_LIB CACHE) -if(_MUPARSER_LIB) - list(APPEND AMDIS_LIBRARIES ${_MUPARSER_LIB}) -else() - message(ERROR "MuParser library not found") -endif() -unset(_MUPARSER_LIB CACHE) - -# ---------------------------- - -if(AMDIS_NEED_UMFPACK) - if (WIN32) - set(SuiteSparse_USE_LAPACK_BLAS ON) - endif (WIN32) - find_package(SuiteSparse QUIET) - - if (SuiteSparse_FOUND) - include(${USE_SuiteSparse}) - list(APPEND AMDIS_LIBRARIES ${SuiteSparse_LIBRARIES}) - list(APPEND AMDIS_INCLUDE_DIRS ${SuiteSparse_INCLUDE_DIR} ${SuiteSparse_METIS_INCLUDE_DIR}) - message("AMDIS_INCLUDE_DIRS = ${AMDIS_INCLUDE_DIRS}") - else (SuiteSparse_FOUND) - - set(AMDIS_UMFPACK_PATH @UMFPACK_PATH@) - list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_UMFPACK_PATH}) - find_library(UMFPACK_LIB umfpack - HINTS ENV LIBRARY_PATH - DOC "The UMFPACK library") - if(UMFPACK_LIB) - list(APPEND AMDIS_LIBRARIES ${UMFPACK_LIB}) - else() - message(FATAL_ERROR "Could not find the UMFPACK library") - endif() - if("$ENV{BLA_VENDOR}" STREQUAL "ACML") - find_library(ACML_LIBRARY acml HINTS ENV ACML_LIB) - if(ACML_LIBRARY) - list(APPEND AMDIS_LIBRARIES ${ACML_LIBRARY}) #fortran ffio m rt) #needed for open64 - else() - message(FATAL_ERROR "could not find the acml libraries, required by acml blas") - endif(ACML_LIBRARY) - else() - find_library(BLAS_LIBRARY NAMES "blas" "goto" "mkl" - HINTS ENV MKL_LIB - DOC "The BLAS library") - if(BLAS_LIBRARY) - list(APPEND AMDIS_LIBRARIES ${BLAS_LIBRARY}) - list(APPEND AMDIS_LIBRARY_DIRS ${BLAS_LIBRARY_DIR}) - else() - find_package(BLAS) - if(BLAS_FOUND) - list(APPEND AMDIS_LIBRARIES ${BLAS_LIBRARIES}) - else() - message(STATUS "Could not find the BLAS library. Please set the variable BLAS_LIBRARY to the blas library with full path") - endif() - endif() - endif("$ENV{BLA_VENDOR}" STREQUAL "ACML") - - find_library(AMD_LIB amd - HINTS ENV LIBRARY_PATH - DOC "The AMD library") - if(AMD_LIB) - list(APPEND AMDIS_LIBRARIES ${AMD_LIB}) - else() - message(FATAL_ERROR "Could not find the AMD library.") - endif() - #check for if we need cholmod - set(_CHOLMOD_TEST_DIR ${CMAKE_BINARY_DIR}/CMakeFiles/cholmodTest/) - file(WRITE ${_CHOLMOD_TEST_DIR}/CMakeLists.txt "project(cholmodTest) - cmake_minimum_required(VERSION 2.8) - include_directories(${AMDIS_INCLUDE_DIRS}) - add_executable(cholmodTest cholmodTest.cpp) - target_link_libraries(cholmodTest ${AMDIS_LIBRARIES})") - file(WRITE ${_CHOLMOD_TEST_DIR}/cholmodTest.cpp "#include - - #include \"umfpack.h\" - - int n = 5 ; - - int Ap [ ] = {0, 2, 5, 9, 10, 12} ; - - int Ai [ ] = { 0, 1, 0, 2, 4, 1, 2, 3, 4, 2, 1, 4} ; - - double Ax [ ] = {2., 3., 3., -1., 4., 4., -3., 1., 2., 2., 6., 1.} ; - - double b [ ] = {8., 45., -3., 3., 19.} ; - - double x [5] ; - - int main (void) - - { - - double *null = (double *) NULL ; - - int i ; - - void *Symbolic, *Numeric ; - - double stats [2]; - umfpack_tic (stats); - - (void) umfpack_di_symbolic (n, n, Ap, Ai, Ax, &Symbolic, null, null) ; - - (void) umfpack_di_numeric (Ap, Ai, Ax, Symbolic, &Numeric, null, null) ; - - umfpack_di_free_symbolic (&Symbolic) ; - - (void) umfpack_di_solve (UMFPACK_A, Ap, Ai, Ax, x, b, Numeric, null, null) ; - - umfpack_di_free_numeric (&Numeric) ; - - umfpack_toc (stats); - - - return (0) ; - - }") - # "#include - # int main(int , char* argv[]) { double c[UMFPACK_CONTROL]; umfpack_dl_defaults(c); return 0;}") - try_compile(CHOLMOD_TEST ${_CHOLMOD_TEST_DIR}/build ${_CHOLMOD_TEST_DIR} cholmodTest - OUTPUT_VARIABLE CHOLMOD_OUT) - if(NOT CHOLMOD_TEST) - file(APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log "cholmodTest-output: \n ${CHOLMOD_OUT}") - find_library(CHOLMOD_LIB cholmod) - find_library(COLAMD_LIB colamd) - - if(CHOLMOD_LIB) - list(APPEND AMDIS_LIBRARIES ${CHOLMOD_LIB}) - else() - message(FATAL_ERROR "your umfpack seems to need cholmod, but cmake could not find it") - endif() - if(COLAMD_LIB) - list(APPEND AMDIS_LIBRARIES ${COLAMD_LIB}) - else() - message(FATAL_ERROR "your umfpack seems to need colamd, but cmake could not find it") - endif() - - #test with cholmod and colamd.. - file(WRITE ${_CHOLMOD_TEST_DIR}/CMakeLists.txt "project(cholmodTest) - cmake_minimum_required(VERSION 2.8) - include_directories(${AMDIS_INCLUDE_DIRS}) - add_executable(cholmodTest cholmodTest.cpp) - target_link_libraries(cholmodTest ${AMDIS_LIBRARIES})") - try_compile(CHOLMOD_TEST2 ${_CHOLMOD_TEST_DIR}/build ${_CHOLMOD_TEST_DIR} cholmodTest - OUTPUT_VARIABLE CHOLMOD_OUT) - if(NOT CHOLMOD_TEST2) - file(APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log "cholmodTest2-output: \n ${CHOLMOD_OUT}") - find_library(SUITESPARSECONFIG_LIB suitesparseconfig) - if(SUITESPARSECONFIG_LIB) - list(APPEND AMDIS_LIBRARIES ${SUITESPARSECONFIG_LIB}) - else() - message(STATUS "your umfpack seems to need suitesparseconfig, but cmake could not find it") - endif() - endif() - - endif() - endif () -endif(AMDIS_NEED_UMFPACK) - -# PNG library -# ----------- -if(AMDIS_NEED_PNG) - set(AMDIS_PNG_PATH @PNG_PATH@) - list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_PNG_PATH}) - - find_library(PNG_LIB png - HINTS ENV LIBRARY_PATH - DOC "The PNG library") - if(PNG_LIB) - list(APPEND AMDIS_LIBRARIES ${PNG_LIB}) - else() - message(FATAL_ERROR "Could not find the PNG library") - endif() -endif(AMDIS_NEED_PNG) - -# BDDCML-library -# -------------- -if(AMDIS_NEED_BDDCML) - set(AMDIS_BDDCML_PATH @BDDCML_PATH@) - list(APPEND AMDIS_INCLUDE_DIRS ${AMDIS_BDDCML_PATH}) - - set(AMDIS_BDDCML_LIB @BDDCML_LIB@) - list(APPEND AMDIS_LIBRARIES ${AMDIS_BDDCML_LIB}) - - set(AMDIS_BDDCML_LINK_LIST @BDDCML_LINK_LIST@) - list(APPEND AMDIS_LIBRARIES ${AMDIS_BDDCML_LINK_LIST}) -endif(AMDIS_NEED_BDDCML) - -# Zoltan library -# -------------- -if(AMDIS_NEED_ZOLTAN) - find_library(ZOLTAN_LIB zoltan - HINTS ENV LIBRARY_PATH - DOC "full path to the zoltan library") - - if(ZOLTAN_LIB) - list(APPEND AMDIS_LIBRARIES ${ZOLTAN_LIB}) - else() - message(FATAL_ERROR "Could not find zoltan library!") - endif() -endif() + set(AMDIS_HAS_PARALLEL_DOMAIN OFF) + set(POSTFIX "-s") + list(APPEND AMDIS_CONFIGURATION "SEQUENTIAL") +endif () +if (NOT EXISTS ${AMDIS_DIR}/AMDIS${POSTFIX}.cmake) + message(FATAL_ERROR "Configuration ${AMDIS_CONFIGURATION} can not be found in ${AMDIS_DIR}.") +endif () -if(${AMDIS_FIND_COMPONENTS} MATCHES umfpack ) - if(NOT AMDIS_NEED_UMFPACK) - set(AMDIS_umfpack_FOUND FALSE) - message(SEND_ERROR "The selected amdis was not compiled with umfpack") - endif() -endif() +# include component configuration +include(AMDIS${POSTFIX}) diff --git a/AMDiS/cmake/AMDISUse.cmake b/AMDiS/cmake/AMDISUse.cmake index a80f9c805c0764a4080fde33cd20d93932e71401..b8f70ce059c49125d973cdbec4e31b352e4803d1 100644 --- a/AMDiS/cmake/AMDISUse.cmake +++ b/AMDiS/cmake/AMDISUse.cmake @@ -1,4 +1,3 @@ -# globally add compile options and include directories +# globally add compile options and include directories add_definitions(${AMDIS_COMPILEFLAGS}) include_directories(${AMDIS_INCLUDE_DIRS}) - diff --git a/AMDiS/cmake/CMakeLists.txt b/AMDiS/cmake/CMakeLists.txt index 2f38932565b75ee9479ac2108feb6c4def1aec64..9765114acce9804b711994888097de0cd6f468a5 100644 --- a/AMDiS/cmake/CMakeLists.txt +++ b/AMDiS/cmake/CMakeLists.txt @@ -1,550 +1,280 @@ -cmake_minimum_required(VERSION 2.8.10) -project(AMDIS) +cmake_minimum_required(VERSION 2.8.10 FATAL_ERROR) +if(POLICY CMP0048) + cmake_policy(SET CMP0048 OLD) +endif() +project(AMDiS) + +# set some policies cmake_policy(SET CMP0017 OLD) if(POLICY CMP0042) - cmake_policy(SET CMP0042 NEW) + cmake_policy(SET CMP0042 NEW) endif() if(POLICY CMP0054) - cmake_policy(SET CMP0054 NEW) -endif() - -SET(LIB_DIR ${AMDIS_SOURCE_DIR}/lib) -SET(SOURCE_DIR ${AMDIS_SOURCE_DIR}/src) - -#define the build type, empty can be everything and nothing -if(CMAKE_BUILD_TYPE STREQUAL "") - set(CMAKE_BUILD_TYPE "Release") -endif() - -#TODO: use the cmake build type -SET(MTL_INCLUDE_DIR ${LIB_DIR}/mtl4/ CACHE PATH "mtl4 directory") - -# set global compile_definitions for all target, depending on build-type -set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS - $<$:DEBUG=1> - $<$:DEBUG=0>) - -# find_package(Subversion QUIET) -# if(Subversion_FOUND) -# Subversion_WC_INFO(${CMAKE_CURRENT_SOURCE_DIR} svn_info) -# #message("svn-rev: ${svn_info_WC_REVISION}") -# set(AMDIS_SUB_MINOR "${svn_info_WC_REVISION}") -# endif() -set(CurrentRevision "1.1") -if(NOT AMDIS_MAJOR) - set(AMDIS_MAJOR "1") -endif() -if(NOT AMDIS_MINOR) - set(AMDIS_MINOR "1") -endif() -list(APPEND COMPILEFLAGS "-DAMDIS_VERSION=${CurrentRevision}") - - -if(CMAKE_CXX_COMPILER MATCHES ".*icpc") - Message("Compiler: Intel") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -diag-disable 654 -diag-disable 858") + cmake_policy(SET CMP0054 NEW) endif() +list(APPEND CMAKE_MODULE_PATH ${BASE_DIR}/cmake) + +# Include macros +include(enable_cxx11) +include(enable_mtl4) +include(enable_boost) +include(enable_umfpack) +include(enable_petsc) +include(enable_zoltan) +include(enable_bddcml) +include(enable_hypre) +include(enable_png) + +# ------------------------------------------------------------------------------ + +include_directories(${SOURCE_DIR}) +set(AMDIS_INCLUDE_DIRS "") +set(COMPILEFLAGS "") + +enable_cxx11(ENABLE_CXX11 COMPILEFLAGS) +if (ENABLE_CXX11) + list(APPEND COMPILEFLAGS "-DHAS_CXX11=1") +else () + list(APPEND COMPILEFLAGS "-DHAS_CXX11=0") +endif (ENABLE_CXX11) + +enable_mtl4(COMPILEFLAGS AMDIS_INCLUDE_DIRS _) +enable_boost(COMPILEFLAGS AMDIS_INCLUDE_DIRS _) + +if (ENABLE_UMFPACK) + enable_umfpack(COMPILEFLAGS AMDIS_INCLUDE_DIRS _) +endif (ENABLE_UMFPACK) + +if (ENABLE_PNG) + enable_png(COMPILEFLAGS AMDIS_INCLUDE_DIRS _) +endif (ENABLE_PNG) + +# ------------------------------------------------------------------------------ + +set(AMDIS_SRC "") +list(APPEND AMDIS_SRC + ${SOURCE_DIR}/AdaptBase.cc + ${SOURCE_DIR}/AdaptInfo.cc + ${SOURCE_DIR}/AdaptInstationary.cc + ${SOURCE_DIR}/AdaptStationary.cc + ${SOURCE_DIR}/AMDiS.cc + ${SOURCE_DIR}/Assembler.cc + ${SOURCE_DIR}/BasisFunction.cc + ${SOURCE_DIR}/Boundary.cc + ${SOURCE_DIR}/BoundaryManager.cc + ${SOURCE_DIR}/BoundaryObject.cc + ${SOURCE_DIR}/Bubble.cc + ${SOURCE_DIR}/Cholesky.cc + ${SOURCE_DIR}/CoarseningManager.cc + ${SOURCE_DIR}/CoarseningManager1d.cc + ${SOURCE_DIR}/CoarseningManager2d.cc + ${SOURCE_DIR}/CoarseningManager3d.cc + ${SOURCE_DIR}/ComponentTraverseInfo.cc + ${SOURCE_DIR}/CouplingIterationInterface.cc + ${SOURCE_DIR}/CreatorMap.cc + ${SOURCE_DIR}/DOFAdmin.cc + ${SOURCE_DIR}/DOFIndexed.cc + ${SOURCE_DIR}/DOFMatrix.cc + ${SOURCE_DIR}/DOFVector.cc + ${SOURCE_DIR}/DirichletBC.cc + ${SOURCE_DIR}/DualTraverse.cc + ${SOURCE_DIR}/ElInfo.cc + ${SOURCE_DIR}/ElInfo1d.cc + ${SOURCE_DIR}/ElInfo2d.cc + ${SOURCE_DIR}/ElInfo3d.cc + ${SOURCE_DIR}/ElInfoStack.cc + ${SOURCE_DIR}/Element.cc + ${SOURCE_DIR}/ElementData.cc + ${SOURCE_DIR}/ElementDofIterator.cc + ${SOURCE_DIR}/ElementRegion_ED.cc + ${SOURCE_DIR}/FiniteElemSpace.cc + ${SOURCE_DIR}/FirstOrderAssembler.cc + ${SOURCE_DIR}/FirstOrderTerm.cc + ${SOURCE_DIR}/FixVec.cc + ${SOURCE_DIR}/Global.cc + ${SOURCE_DIR}/Initfile.cc + ${SOURCE_DIR}/Lagrange.cc + ${SOURCE_DIR}/LeafData.cc + ${SOURCE_DIR}/Line.cc + ${SOURCE_DIR}/MacroElement.cc + ${SOURCE_DIR}/Marker.cc + ${SOURCE_DIR}/MatrixVector.cc + ${SOURCE_DIR}/Mesh.cc + ${SOURCE_DIR}/MeshStructure.cc + ${SOURCE_DIR}/Operator.cc + ${SOURCE_DIR}/OperatorTerm.cc + ${SOURCE_DIR}/Parametric.cc + ${SOURCE_DIR}/PeriodicBC.cc + ${SOURCE_DIR}/ProblemInstat.cc + ${SOURCE_DIR}/ProblemInterpol.cc + ${SOURCE_DIR}/ProblemStat.cc + ${SOURCE_DIR}/Projection.cc + ${SOURCE_DIR}/QPInfo.cc + ${SOURCE_DIR}/QPsiPhi.cc + ${SOURCE_DIR}/Quadrature.cc + ${SOURCE_DIR}/RCNeighbourList.cc + ${SOURCE_DIR}/Recovery.cc + ${SOURCE_DIR}/RefinementManager.cc + ${SOURCE_DIR}/RefinementManager1d.cc + ${SOURCE_DIR}/RefinementManager2d.cc + ${SOURCE_DIR}/RefinementManager3d.cc + ${SOURCE_DIR}/RobinBC.cc + ${SOURCE_DIR}/ScalableQuadrature.cc + ${SOURCE_DIR}/SecondOrderAssembler.cc + ${SOURCE_DIR}/SecondOrderTerm.cc + ${SOURCE_DIR}/Serializer.cc + ${SOURCE_DIR}/StandardProblemIteration.cc + ${SOURCE_DIR}/SubAssembler.cc + ${SOURCE_DIR}/SubElInfo.cc + ${SOURCE_DIR}/SubQuadrature.cc + ${SOURCE_DIR}/SurfaceQuadrature.cc + ${SOURCE_DIR}/SurfaceRegion_ED.cc + ${SOURCE_DIR}/SystemVector.cc + ${SOURCE_DIR}/Tetrahedron.cc + ${SOURCE_DIR}/Timer.cc + ${SOURCE_DIR}/Traverse.cc + ${SOURCE_DIR}/Triangle.cc + ${SOURCE_DIR}/VertexVector.cc + ${SOURCE_DIR}/ZeroOrderAssembler.cc + ${SOURCE_DIR}/ZeroOrderTerm.cc + ${SOURCE_DIR}/est/Estimator.cc + ${SOURCE_DIR}/est/RecoveryEstimator.cc + ${SOURCE_DIR}/est/ResidualEstimator.cc + ${SOURCE_DIR}/est/SimpleResidualEstimator.cc + ${SOURCE_DIR}/io/ArhReader.cc + ${SOURCE_DIR}/io/detail/ArhReader.cc + ${SOURCE_DIR}/io/Arh2Reader.cc + ${SOURCE_DIR}/io/Arh2Writer.cc + ${SOURCE_DIR}/io/Arh3Reader.cc + ${SOURCE_DIR}/io/Arh3Writer.cc + ${SOURCE_DIR}/io/detail/Arh2Reader.cc + ${SOURCE_DIR}/io/detail/ArhWriter.cc + ${SOURCE_DIR}/io/detail/Arh2Writer.cc + ${SOURCE_DIR}/io/detail/Arh3Reader.cc + ${SOURCE_DIR}/io/detail/Arh3Writer.cc + ${SOURCE_DIR}/io/DofWriter.cc + ${SOURCE_DIR}/io/ElementFileWriter.cc + ${SOURCE_DIR}/io/FileWriterInterface.cc + ${SOURCE_DIR}/io/FileWriter.cc + ${SOURCE_DIR}/io/GNUPlotWriter.cc + ${SOURCE_DIR}/io/MacroInfo.cc + ${SOURCE_DIR}/io/MacroReader.cc + ${SOURCE_DIR}/io/MacroWriter.cc + ${SOURCE_DIR}/io/PngReader.cc + ${SOURCE_DIR}/io/PngWriter.cc + ${SOURCE_DIR}/io/PovrayWriter.cc + ${SOURCE_DIR}/io/Spreadsheet.cc + ${SOURCE_DIR}/io/ValueReader.cc + ${SOURCE_DIR}/io/ValueWriter.cc + ${SOURCE_DIR}/io/VtkWriter.cc + ${SOURCE_DIR}/io/VtkVectorWriter.cc + ${SOURCE_DIR}/io/detail/VtkWriter.cc + ${SOURCE_DIR}/nonlin/ProblemNonLin.cc + ${SOURCE_DIR}/solver/SolverMatrix.cc + ${SOURCE_DIR}/time/RosenbrockAdaptInstationary.cc + ${SOURCE_DIR}/time/RosenbrockMethod.cc + ${SOURCE_DIR}/time/RosenbrockStationary.cc +# debugging files + ${SOURCE_DIR}/Debug.cc + ${SOURCE_DIR}/GlobalDOFNumbering.cc # not used by any other class + ${SOURCE_DIR}/GlobalElementNumbering.cc # not used by any other class + ${SOURCE_DIR}/ProblemStatDbg.cc +) + +include(amdis_parallel) +include(muparser) + +# ------------------------------------------------------------------------------ + +if (ENABLE_COMPRESSION) + list(APPEND COMPILEFLAGS "-DHAVE_COMPRESSION=1") +endif (ENABLE_COMPRESSION) + +if (ENABLE_EXTENSIONS) + include(amdis_extensions) + add_library(amdis_extensions ${EXTENSIONS_SRC}) + + set_target_properties(amdis_extensions PROPERTIES OUTPUT_NAME amdisextensions${POSTFIX} + DEBUG_OUTPUT_NAME amdisextensions${POSTFIX}d) + install(TARGETS amdis_extensions DESTINATION lib/amdis/ ) +endif (ENABLE_EXTENSIONS) + +if (ENABLE_REINIT) + include(amdis_reinit) + add_library(amdis_reinit ${REINIT_SRC}) + + set_target_properties(amdis_reinit PROPERTIES OUTPUT_NAME amdisreinit${POSTFIX} + DEBUG_OUTPUT_NAME amdisreinit${POSTFIX}d) + install(TARGETS amdis_reinit DESTINATION lib/amdis/ ) +endif (ENABLE_REINIT) + +if (ENABLE_COMPOSITE_FEM) + include(amdis_compositeFEM) + add_library(amdis_compositeFEM ${COMPOSITE_FEM_SRC}) + + set_target_properties(amdis_compositeFEM PROPERTIES OUTPUT_NAME amdiscompositefem${POSTFIX} + DEBUG_OUTPUT_NAME amdiscompositefem${POSTFIX}d) + install(TARGETS amdis_compositeFEM DESTINATION lib/amdis/ ) +endif (ENABLE_COMPOSITE_FEM) + +if (ENABLE_SEQ_PETSC) + include(amdis_seq_petsc) +endif (ENABLE_SEQ_PETSC) + +if (MSVC) + list(APPEND COMPILEFLAGS "-D_SCL_SECURE_NO_WARNINGS" "-D_CRT_SECURE_NO_WARNINGS") +endif (MSVC) + +# ------------------------------------------------------------------------------ -SET(ENABLE_PARALLEL_DOMAIN "OFF" CACHE STRING "use parallel domain decomposition. please set to one of: PMTL, PETSC, OFF" ) -option(ENABLE_CXX11 "Enable C++11 compiler features" false) -option(ENABLE_SEQ_PETSC "Use sequential PETSc solvers" false) -option(ENABLE_UMFPACK "Use of UMFPACK solver" false) -option(ENABLE_HYPRE "Use HYPRE AMG solver" false) -option(ENABLE_PNG "use png reader/writer" false) -option(ENABLE_BDDCML "Use of BDDCML library" false) -mark_as_advanced(ENABLE_BDDCML) -option(ENABLE_EXTENSIONS "Use extensions" false) -option(ENABLE_OPENMP "Use OpenMP" false) -option(ENABLE_COMPRESSION "Use output compression" false) -option(ENABLE_OUTPUT "AMDiS output printing, disable only for debugging!" true) -mark_as_advanced(ENABLE_OUTPUT) - - -find_package(Boost 1.44 REQUIRED) -if (Boost_FOUND) - list(APPEND AMDIS_INCLUDE_DIRS ${Boost_INCLUDE_DIR}) - message("boost lib-dirs: ${Boost_LIBRARY_DIRS}") - message("use the boost dir: ${Boost_INCLUDE_DIR}") - #if (WIN32) - #message("the windows find_boost does not set the boost library paths, please set it") - #SET(Boost_LIBRARY_DIRS CACHE PATH "The directory containing the boost libraries") - #endif (WIN32) - list(APPEND AMDIS_LINK_DIRS ${Boost_LIBRARY_DIRS}) -endif (Boost_FOUND) - - -SET(AMDIS_SRC ${SOURCE_DIR}/AdaptBase.cc - ${SOURCE_DIR}/AdaptInfo.cc - ${SOURCE_DIR}/AdaptInstationary.cc - ${SOURCE_DIR}/AdaptStationary.cc - ${SOURCE_DIR}/AMDiS.cc - ${SOURCE_DIR}/Assembler.cc - ${SOURCE_DIR}/BasisFunction.cc - ${SOURCE_DIR}/Boundary.cc - ${SOURCE_DIR}/BoundaryManager.cc - ${SOURCE_DIR}/BoundaryObject.cc - ${SOURCE_DIR}/Bubble.cc - ${SOURCE_DIR}/Cholesky.cc - ${SOURCE_DIR}/CoarseningManager.cc - ${SOURCE_DIR}/CoarseningManager1d.cc - ${SOURCE_DIR}/CoarseningManager2d.cc - ${SOURCE_DIR}/CoarseningManager3d.cc - ${SOURCE_DIR}/ComponentTraverseInfo.cc - ${SOURCE_DIR}/CouplingIterationInterface.cc - ${SOURCE_DIR}/CreatorMap.cc - ${SOURCE_DIR}/DOFAdmin.cc - ${SOURCE_DIR}/DOFIndexed.cc - ${SOURCE_DIR}/DOFMatrix.cc - ${SOURCE_DIR}/DOFVector.cc - ${SOURCE_DIR}/Debug.cc - ${SOURCE_DIR}/DirichletBC.cc - ${SOURCE_DIR}/DualTraverse.cc - ${SOURCE_DIR}/ElInfo.cc - ${SOURCE_DIR}/ElInfo1d.cc - ${SOURCE_DIR}/ElInfo2d.cc - ${SOURCE_DIR}/ElInfo3d.cc - ${SOURCE_DIR}/ElInfoStack.cc - ${SOURCE_DIR}/Element.cc - ${SOURCE_DIR}/ElementData.cc - ${SOURCE_DIR}/ElementDofIterator.cc - ${SOURCE_DIR}/ElementRegion_ED.cc - ${SOURCE_DIR}/FiniteElemSpace.cc - ${SOURCE_DIR}/FirstOrderAssembler.cc - ${SOURCE_DIR}/FirstOrderTerm.cc - ${SOURCE_DIR}/FixVec.cc - ${SOURCE_DIR}/Global.cc - ${SOURCE_DIR}/GlobalDOFNumbering.cc - ${SOURCE_DIR}/GlobalElementNumbering.cc - ${SOURCE_DIR}/Initfile.cc - ${SOURCE_DIR}/Lagrange.cc - ${SOURCE_DIR}/LeafData.cc - ${SOURCE_DIR}/Line.cc - ${SOURCE_DIR}/MacroElement.cc - ${SOURCE_DIR}/Marker.cc - ${SOURCE_DIR}/MatrixVector.cc - ${SOURCE_DIR}/Mesh.cc - ${SOURCE_DIR}/MeshStructure.cc - ${SOURCE_DIR}/Operator.cc - ${SOURCE_DIR}/OperatorTerm.cc - ${SOURCE_DIR}/Parametric.cc - ${SOURCE_DIR}/PeriodicBC.cc - ${SOURCE_DIR}/ProblemInstat.cc - ${SOURCE_DIR}/ProblemInterpol.cc - ${SOURCE_DIR}/ProblemStat.cc - ${SOURCE_DIR}/ProblemStatDbg.cc - ${SOURCE_DIR}/Projection.cc - ${SOURCE_DIR}/QPInfo.cc - ${SOURCE_DIR}/QPsiPhi.cc - ${SOURCE_DIR}/Quadrature.cc - ${SOURCE_DIR}/RCNeighbourList.cc - ${SOURCE_DIR}/Recovery.cc - ${SOURCE_DIR}/RefinementManager.cc - ${SOURCE_DIR}/RefinementManager1d.cc - ${SOURCE_DIR}/RefinementManager2d.cc - ${SOURCE_DIR}/RefinementManager3d.cc - ${SOURCE_DIR}/RobinBC.cc - ${SOURCE_DIR}/ScalableQuadrature.cc - ${SOURCE_DIR}/SecondOrderAssembler.cc - ${SOURCE_DIR}/SecondOrderTerm.cc - ${SOURCE_DIR}/Serializer.cc - ${SOURCE_DIR}/StandardProblemIteration.cc - ${SOURCE_DIR}/SubAssembler.cc - ${SOURCE_DIR}/SubElInfo.cc - ${SOURCE_DIR}/SubQuadrature.cc - ${SOURCE_DIR}/SurfaceQuadrature.cc - ${SOURCE_DIR}/SurfaceRegion_ED.cc - ${SOURCE_DIR}/SystemVector.cc - ${SOURCE_DIR}/Tetrahedron.cc - ${SOURCE_DIR}/Timer.cc - ${SOURCE_DIR}/Traverse.cc - ${SOURCE_DIR}/Triangle.cc - ${SOURCE_DIR}/VertexVector.cc - ${SOURCE_DIR}/ZeroOrderAssembler.cc - ${SOURCE_DIR}/ZeroOrderTerm.cc - ${SOURCE_DIR}/est/Estimator.cc - ${SOURCE_DIR}/est/RecoveryEstimator.cc - ${SOURCE_DIR}/est/ResidualEstimator.cc - ${SOURCE_DIR}/est/SimpleResidualEstimator.cc - ${SOURCE_DIR}/io/ArhReader.cc - ${SOURCE_DIR}/io/detail/ArhReader.cc - ${SOURCE_DIR}/io/Arh2Reader.cc - ${SOURCE_DIR}/io/Arh2Writer.cc - ${SOURCE_DIR}/io/Arh3Reader.cc - ${SOURCE_DIR}/io/Arh3Writer.cc - ${SOURCE_DIR}/io/detail/Arh2Reader.cc - ${SOURCE_DIR}/io/detail/ArhWriter.cc - ${SOURCE_DIR}/io/detail/Arh2Writer.cc - ${SOURCE_DIR}/io/detail/Arh3Reader.cc - ${SOURCE_DIR}/io/detail/Arh3Writer.cc - ${SOURCE_DIR}/io/DofWriter.cc - ${SOURCE_DIR}/io/ElementFileWriter.cc - ${SOURCE_DIR}/io/FileWriterInterface.cc - ${SOURCE_DIR}/io/FileWriter.cc - ${SOURCE_DIR}/io/GNUPlotWriter.cc - ${SOURCE_DIR}/io/MacroInfo.cc - ${SOURCE_DIR}/io/MacroReader.cc - ${SOURCE_DIR}/io/MacroWriter.cc - ${SOURCE_DIR}/io/PngReader.cc - ${SOURCE_DIR}/io/PngWriter.cc - ${SOURCE_DIR}/io/PovrayWriter.cc - ${SOURCE_DIR}/io/Spreadsheet.cc - ${SOURCE_DIR}/io/ValueReader.cc - ${SOURCE_DIR}/io/ValueWriter.cc - ${SOURCE_DIR}/io/VtkWriter.cc - ${SOURCE_DIR}/io/VtkVectorWriter.cc - ${SOURCE_DIR}/io/detail/VtkWriter.cc - ${SOURCE_DIR}/nonlin/ProblemNonLin.cc - ${SOURCE_DIR}/solver/SolverMatrix.cc - ${SOURCE_DIR}/time/RosenbrockAdaptInstationary.cc - ${SOURCE_DIR}/time/RosenbrockMethod.cc - ${SOURCE_DIR}/time/RosenbrockStationary.cc - ) - - -include(cmake/enable_cxx11.cmake) -include(cmake/enable_parallel_domain.cmake) -include(cmake/enable_seq_petsc.cmake) -include(cmake/enable_umfpack.cmake) -include(cmake/enable_hypre.cmake) -include(cmake/enable_png.cmake) -include(cmake/enable_bddcml.cmake) -include(cmake/enable_extensions.cmake) -include(cmake/enable_openmp.cmake) -include(cmake/SetSubMinorRevision.cmake) - -if(ENABLE_COMPRESSION) - list(APPEND COMPILEFLAGS "-DHAVE_COMPRESSION=1") -endif(ENABLE_COMPRESSION) - -if(NOT ENABLE_OUTPUT) - message(WARNING "AMDiS cout output disabled!") - list(APPEND COMPILEFLAGS "-DSUPPRESS_OUTPUT") -endif(NOT ENABLE_OUTPUT) - -if(ENABLE_MARMOT) - Message("please set marmotcc manually") -endif(ENABLE_MARMOT) - -# TODO: make composidte-fem and reinit a subproject -# add_subdirectory(${SOURCE_DIR}/compositeFEM [binarydir]) - -# composite fem includes -SET(COMPOSITE_SOURCE_DIR ${SOURCE_DIR}/compositeFEM) -SET(COMPOSITE_FEM_SRC ${COMPOSITE_SOURCE_DIR}/CFE_Integration.cc - ${COMPOSITE_SOURCE_DIR}/CFE_NormAndErrorFcts.cc - ${COMPOSITE_SOURCE_DIR}/CompositeFEMMethods.cc - ${COMPOSITE_SOURCE_DIR}/CompositeFEMOperator.cc - ${COMPOSITE_SOURCE_DIR}/LevelSetAdaptMesh.cc - ${COMPOSITE_SOURCE_DIR}/PenaltyOperator.cc - ${COMPOSITE_SOURCE_DIR}/ElementLevelSet.cc - ${COMPOSITE_SOURCE_DIR}/SubPolytope.cc - ${COMPOSITE_SOURCE_DIR}/SubElementAssembler.cc ) - -# reinit includes -set(REINIT_SOURCE_DIR ${SOURCE_DIR}/reinit) -file(GLOB REINIT_SRC ${REINIT_SOURCE_DIR}/*.cc) -list(APPEND AMDIS_INCLUDE_DIRS ${REINIT_SOURCE_DIR}) - -# muparser includes -set(MUPARSER_SOURCE_DIR ${AMDIS_SOURCE_DIR}/lib/muparser_v134) -file(GLOB MUPARSER_SRC ${MUPARSER_SOURCE_DIR}/src/*.cpp) -list(APPEND AMDIS_INCLUDE_DIRS ${MUPARSER_SOURCE_DIR}/include) - -# mtl4 includes -list(APPEND AMDIS_INCLUDE_DIRS ${MTL_INCLUDE_DIR}) -list(APPEND AMDIS_INCLUDE_DIRS ${SOURCE_DIR}) +include_directories(${AMDIS_INCLUDE_DIRS}) +add_definitions(${COMPILEFLAGS}) +add_library(amdis ${AMDIS_SRC} ${PARALLEL_DOMAIN_AMDIS_SRC}) -include_directories(${AMDIS_INCLUDE_DIRS}) -if(WIN32) - add_library(amdis STATIC ${AMDIS_SRC} ${PARALLEL_DOMAIN_AMDIS_SRC}) - add_library(compositeFEM STATIC ${COMPOSITE_FEM_SRC}) - add_library(reinit STATIC ${REINIT_SRC}) - add_library(muparser STATIC ${MUPARSER_SRC}) -else() - add_library(amdis SHARED ${AMDIS_SRC} ${PARALLEL_DOMAIN_AMDIS_SRC}) - add_library(compositeFEM SHARED ${COMPOSITE_FEM_SRC}) - add_library(reinit SHARED ${REINIT_SRC}) - add_library(muparser SHARED ${MUPARSER_SRC}) -endif() +# specify how to install this target: +# ----------------------------------- +set(INSTALL_SUBDIRS . config nonlin est expressions operations traits + utility time solver solver/details solver/itl io io/detail) -list(APPEND AMDIS_LIBS amdis ${Boost_LIBRARIES}) +foreach (SUBDIR ${INSTALL_SUBDIRS}) + file(GLOB HEADERS "${SOURCE_DIR}/${SUBDIR}/*.h*") + install(FILES ${HEADERS} DESTINATION include/amdis/${SUBDIR}/) +endforeach () -# some special treatements for Windows systems -# -------------------------------------------- -if(WIN32) - list(APPEND COMPILEFLAGS "-D_SCL_SECURE_NO_WARNINGS" "-D_CRT_SECURE_NO_WARNINGS") -endif(WIN32) +file(GLOB CMAKE_MACROS "${BASE_DIR}/cmake/enable_*.cmake") +install(FILES ${CMAKE_MACROS} DESTINATION share/amdis/) -# some special treatements for MacOS Systems -# ------------------------------------------ -if(CMAKE_SYSTEM_NAME MATCHES Darwin) - if(CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang) - SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS} -flat_namespace -single_module -undefined dynamic_lookup") - SET(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS} -flat_namespace -single_module -undefined dynamic_lookup") +install(DIRECTORY ${BASE_DIR}/lib/mtl4/ DESTINATION include/amdis/mtl4/ + FILES_MATCHING PATTERN "*.hpp" + PATTERN ".svn" EXCLUDE + PATTERN ".svn/*" EXCLUDE + PATTERN "mtl4/libs" EXCLUDE + PATTERN "mtl4/extern" EXCLUDE) - set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -bind_at_load -m64") - set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -bind_at_load -m64") - endif() -endif() +set_target_properties(amdis PROPERTIES OUTPUT_NAME amdis${POSTFIX} + DEBUG_OUTPUT_NAME amdis${POSTFIX}d) +install(TARGETS amdis DESTINATION lib/amdis/ ) -message("compileflags: ${COMPILEFLAGS}") -add_definitions(${COMPILEFLAGS}) +# generate configuration file: +# ---------------------------- -#dont change this destination. the GUI depends on it to guess the buildsystem - -FILE(GLOB HEADERS "${SOURCE_DIR}/*.h") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/) -list(APPEND deb_add_dirs "include/amdis") - -FILE(GLOB HEADERS "${SOURCE_DIR}/config/*.h*") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/config/) -list(APPEND deb_add_dirs "include/amdis/config") - -FILE(GLOB HEADERS "${SOURCE_DIR}/*.hh") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/) - -FILE(GLOB HEADERS "${SOURCE_DIR}/*.hpp") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/) - -FILE(GLOB HEADERS "${SOURCE_DIR}/parallel/*.h") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/parallel/) -list(APPEND deb_add_dirs "include/amdis/parallel") - -FILE(GLOB HEADERS "${SOURCE_DIR}/nonlin/*.h") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/nonlin/) -list(APPEND deb_add_dirs "include/amdis/nonlin") - -FILE(GLOB HEADERS "${SOURCE_DIR}/est/*.h") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/est/) -list(APPEND deb_add_dirs "include/amdis/est") - -FILE(GLOB HEADERS "${SOURCE_DIR}/expressions/*.h*") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/expressions/) -list(APPEND deb_add_dirs "include/amdis/expressions") - -FILE(GLOB HEADERS "${SOURCE_DIR}/operations/*.h*") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/operations/) -list(APPEND deb_add_dirs "include/amdis/operations") - -FILE(GLOB HEADERS "${SOURCE_DIR}/traits/*.h*") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/traits/) -list(APPEND deb_add_dirs "include/amdis/traits") - -FILE(GLOB HEADERS "${SOURCE_DIR}/utility/*.h*") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/utility/) -list(APPEND deb_add_dirs "include/amdis/utility") - -FILE(GLOB HEADERS "${SOURCE_DIR}/time/*.h") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/time/) -list(APPEND deb_add_dirs "include/amdis/time") - -FILE(GLOB HEADERS "${SOURCE_DIR}/traits/*.h*") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/traits/) -list(APPEND deb_add_dirs "include/amdis/traits") - -FILE(GLOB HEADERS "${SOURCE_DIR}/solver/*.h") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/solver) -list(APPEND deb_add_dirs "include/amdis/solver") - -FILE(GLOB HEADERS "${SOURCE_DIR}/solver/*.hh") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/solver) -list(APPEND deb_add_dirs "include/amdis/solver") - -FILE(GLOB HEADERS "${SOURCE_DIR}/solver/details/*.h") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/solver/details) -list(APPEND deb_add_dirs "include/amdis/solver/details") - -FILE(GLOB HEADERS "${SOURCE_DIR}/solver/itl/*.hpp") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/solver/itl) -list(APPEND deb_add_dirs "include/amdis/solver/itl") - -FILE(GLOB HEADERS "${SOURCE_DIR}/solver/details/*.h") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/solver/details) -list(APPEND deb_add_dirs "include/amdis/solver/details") - - -FILE(GLOB HEADERS "${SOURCE_DIR}/io/*.h") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/io) -list(APPEND deb_add_dirs "include/amdis/io") - -FILE(GLOB HEADERS "${SOURCE_DIR}/io/*.hh") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/io) - -FILE(GLOB HEADERS "${SOURCE_DIR}/io/detail/*h") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/io/detail) -list(APPEND deb_add_dirs "include/amdis/io/detail") - -FILE(GLOB HEADERS "${REINIT_SOURCE_DIR}/*.h") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/reinit) -list(APPEND deb_add_dirs "include/amdis/reinit") - -FILE(GLOB HEADERS "${COMPOSITE_SOURCE_DIR}/*.h") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/compositeFEM) -list(APPEND deb_add_dirs "include/amdis/compositeFEM") - -FILE(GLOB HEADERS "${MUPARSER_SOURCE_DIR}/include/*.h") -INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/muparser) -list(APPEND deb_add_dirs "include/amdis/muparser") - -list(APPEND deb_add_dirs "lib/amdis") -install(TARGETS amdis compositeFEM reinit muparser - DESTINATION lib/amdis/ ) - -configure_file(${AMDIS_SOURCE_DIR}/cmake/AMDISConfig.cmake.in - ${AMDIS_BINARY_DIR}/AMDISConfig.cmake - @ONLY - ) - -INSTALL(FILES ${AMDIS_BINARY_DIR}/AMDISConfig.cmake - DESTINATION share/amdis/) -list(APPEND deb_add_dirs "share/amdis/") - -FILE(GLOB CMAKE_FILES "${AMDIS_SOURCE_DIR}/cmake/*.cmake") -INSTALL(FILES ${CMAKE_FILES} - DESTINATION share/amdis/) - -#install mtl -INSTALL(DIRECTORY ${AMDIS_SOURCE_DIR}/lib/mtl4/ - DESTINATION include/amdis/mtl4/ - FILES_MATCHING PATTERN "*.hpp" - PATTERN ".svn" EXCLUDE - PATTERN ".svn/*" EXCLUDE - PATTERN "mtl4/libs" EXCLUDE - PATTERN "mtl4/extern" EXCLUDE - ) -FILE(GLOB_RECURSE mtl4_files - RELATIVE ${AMDIS_SOURCE_DIR}/lib/mtl4/boost/ - ${AMDIS_SOURCE_DIR}/lib/mtl4/boost/*.hpp) -foreach(mtl4_file in ${mtl4_files}) - get_filename_component(mtl4File_path ${mtl4_file} PATH) - list(APPEND deb_add_dirs "include/amdis/mtl4/boost/${mtl4File_path}") -endforeach(mtl4_file) - -#install documentation -FILE(GLOB DOCS "${AMDIS_SOURCE_DIR}/doc/*.pdf") -INSTALL(FILES ${DOCS} DESTINATION share/amdis/doc) -list(APPEND deb_add_dirs "share/amdis/doc") - -list(REMOVE_DUPLICATES deb_add_dirs) - -ENABLE_TESTING() -INCLUDE(CTest) -INCLUDE(Dart) -if(NOT CTEST_MODEL) - set(CTEST_MODEL "Experimental") -endif() -if( NOT N_TEST_PROC) - set(N_TEST_PROC "8") -endif() -configure_file(cmake/myMake.sh.in myMake.sh @ONLY) -configure_file(cmake/CTestScript.cmake.in CTestScript.cmake @ONLY) - - -# PACKAGES -# ======================================================== -set(CPACK_PACKAGE_NAME "AMDIS") -set(CPACK_PACKAGE_CONTACT "Andreas.Naumann@tu-dresden.de") -set(CPACK_PACKAGE_VERSION "${CurrentRevision}") -set(CPACK_GENERATOR "RPM" "DEB" "TGZ") -set(CPACK_INSTALL_PREFIX "/usr/") -set(CPACK_RESOURCE_FILE_LICENSE "${AMDIS_SOURCE_DIR}/license.opensource.txt") - -# library depends on boost, but boost libraries have version-number in name on some systems. -# so we have to find a workaround to enforce allowed boost versions -set(boost_ver ${Boost_MINOR_VERSION}) -math(EXPR boost_ver_start "${Boost_MINOR_VERSION}+1") -math(EXPR boost_ver_stop "${Boost_MINOR_VERSION}+10") - -set(boost_depends "libboost${Boost_MAJOR_VERSION}.${boost_ver}-dev (>= ${Boost_MAJOR_VERSION}.${boost_ver})") -set(boost_iostreams_depends "libboost-iostreams${Boost_MAJOR_VERSION}.${boost_ver}-dev (>= ${Boost_MAJOR_VERSION}.${boost_ver})") -set(boost_system_depends "libboost-system${Boost_MAJOR_VERSION}.${boost_ver}-dev (>= ${Boost_MAJOR_VERSION}.${boost_ver})") -set(boost_filesystem_depends "libboost-filesystem${Boost_MAJOR_VERSION}.${boost_ver}-dev (>= ${Boost_MAJOR_VERSION}.${boost_ver})") - -foreach(boost_ver RANGE ${boost_ver_start} ${boost_ver_stop}) - set(boost_depends "${boost_depends} | libboost${Boost_MAJOR_VERSION}.${boost_ver}-dev (>= ${Boost_MAJOR_VERSION}.${boost_ver})") - set(boost_iostreams_depends "${boost_iostreams_depends} | libboost-iostreams${Boost_MAJOR_VERSION}.${boost_ver}-dev (>= ${Boost_MAJOR_VERSION}.${boost_ver})") - set(boost_system_depends "${boost_system_depends} | libboost-system${Boost_MAJOR_VERSION}.${boost_ver}-dev (>= ${Boost_MAJOR_VERSION}.${boost_ver})") - set(boost_filesystem_depends "${boost_filesystem_depends} | libboost-filesystem${Boost_MAJOR_VERSION}.${boost_ver}-dev (>= ${Boost_MAJOR_VERSION}.${boost_ver})") -endforeach(boost_ver) - -configure_file(${AMDIS_SOURCE_DIR}/cmake/preinst.in - ${AMDIS_BINARY_DIR}/preinst - @ONLY) - -configure_file(${AMDIS_SOURCE_DIR}/cmake/postrm.in - ${AMDIS_BINARY_DIR}/postrm - @ONLY) - -#----Test if clang setup works---------------------------------------------------------------------- -set(COMPILER_VERSION "") -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - exec_program(${CMAKE_C_COMPILER} ARGS "-v" OUTPUT_VARIABLE _clang_version_info) - string(REGEX REPLACE "^.*[ ]([0-9]+)\\.[0-9].*$" "\\1" CLANG_MAJOR "${_clang_version_info}") - string(REGEX REPLACE "^.*[ ][0-9]+\\.([0-9]).*$" "\\1" CLANG_MINOR "${_clang_version_info}") - set(COMPILER_VERSION "clang ${CLANG_MAJOR}.${CLANG_MINOR}") -endif() +# global configuration +configure_file(${BASE_DIR}/cmake/AMDISConfig.cmake.in + ${AMDiS_BINARY_DIR}/AMDISConfig.cmake + @ONLY +) -#---Obtain the major and minor version of the GNU compiler------------------------------------------- -if (CMAKE_COMPILER_IS_GNUCXX) - exec_program(${CMAKE_C_COMPILER} ARGS "-dumpversion" OUTPUT_VARIABLE _gcc_version_info) - string(REGEX REPLACE "^([0-9]+).*$" "\\1" GCC_MAJOR ${_gcc_version_info}) - string(REGEX REPLACE "^[0-9]+\\.([0-9]+).*$" "\\1" GCC_MINOR ${_gcc_version_info}) - string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" GCC_PATCH ${_gcc_version_info}) - - if(GCC_PATCH MATCHES "\\.+") - set(GCC_PATCH "") - endif() - if(GCC_MINOR MATCHES "\\.+") - set(GCC_MINOR "") - endif() - if(GCC_MAJOR MATCHES "\\.+") - set(GCC_MAJOR "") - endif() - set(COMPILER_VERSION "gcc ${_gcc_version_info}") -endif() +# component configuration +configure_file(${BASE_DIR}/cmake/AMDIS.cmake.in + ${AMDiS_BINARY_DIR}/AMDIS${POSTFIX}.cmake + @ONLY +) -set(CPACK_RPM_PACKAGE_REQUIRES "boost-devel >= ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}, ${RPM_DEPEND_STR}") -set(CPACK_DEBIAN_PACKAGE_DEPENDS "${boost_depends},\\n ${boost_iostreams_depends},\\n ${boost_system_depends},\\n ${boost_filesystem_depends}") -set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "AMDiS (Adaptive Multi-Dimensional Simulations) - a C++ library to solve partial differential equations using adaptive finite elements. The main features of AMDiS are: - . - - full adaptive meshes in 1D, 2D and 3D - - adaptive time stepping strategies for time dependent equations - - uses high performance Krylov subspace solvers from MTL4 and the direct solvers UMFPACK and Intel's Pardiso - - parallelization of the overall finite element method with excelent scaling up to several thounds of processors - - uses PETSc for solving parallel distributed linear systems - - easy to use interface, no additional effort to run code in parallel! - . - The library is compiled with ${COMPILER_VERSION} and compiled/linked with boost ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}.") - -set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${AMDIS_BINARY_DIR}/preinst" "${AMDIS_BINARY_DIR}/postrm") - -include(CPack) +install(FILES ${AMDiS_BINARY_DIR}/AMDISConfig.cmake DESTINATION share/amdis/) +install(FILES ${AMDiS_BINARY_DIR}/AMDIS${POSTFIX}.cmake DESTINATION share/amdis/) +install(FILES ${BASE_DIR}/cmake3/AMDISUse.cmake DESTINATION share/amdis/) diff --git a/AMDiS/cmake/CTestScript.cmake.in b/AMDiS/cmake/CTestScript.cmake.in deleted file mode 100644 index 7f7f2d221ee19f3729e6a7a965b1a948fbd26d87..0000000000000000000000000000000000000000 --- a/AMDiS/cmake/CTestScript.cmake.in +++ /dev/null @@ -1,12 +0,0 @@ -SET (CTEST_SOURCE_DIRECTORY @CMAKE_CURRENT_SOURCE_DIR@) -SET (CTEST_BINARY_DIRECTORY @CMAKE_CURRENT_BINARY_DIR@) -SET (CTEST_COMMAND "${CMAKE_CTEST_COMMAND}") -SET (CTEST_BUILD_COMMAND ${CTEST_BINARY_DIRECTORY}/myMake.sh) -set(CTEST_UPDATE_COMMAND ${CTEST_SOURCE_DIRECTORY}/MySvn.sh) -#set(CTEST_UPDATE_OPTIONS "--username studentiwr --password iwr_ws09") -set(CTEST_SITE @SITE@) -set(CTEST_BUILD_NAME @BUILDNAME@) - -ctest_start(@CTEST_MODEL@) -ctest_build() -ctest_submit() diff --git a/AMDiS/cmake/CompilerTest.cmake b/AMDiS/cmake/CompilerTest.cmake deleted file mode 100644 index 02275e0a7d0d56ec751371b1dd4716df341922e0..0000000000000000000000000000000000000000 --- a/AMDiS/cmake/CompilerTest.cmake +++ /dev/null @@ -1,93 +0,0 @@ - -set(COMPILER_TEST_DIR ${CMAKE_BINARY_DIR}/CMakeFiles/compilerTest) -file(WRITE ${COMPILER_TEST_DIR}/CMakeLists.txt - "project(compilerTest) - cmake_minimum_required(VERSION 2.8) - add_definitions(-std=c++11) -# VARIADIC CLASS_TEMPLATES - add_executable(test_variadic_templ_class test_variadic_templ_class.cpp) - target_link_libraries(test_variadic_templ_class) -# VARIADIC FUNCTION TEMPLATES - add_executable(test_variadic_templ_fct test_variadic_templ_fct.cpp) - target_link_libraries(test_variadic_templ_fct) -# ALIAS TEMPLATES - add_executable(test_alias_templates test_alias_templates.cpp) - target_link_libraries(test_alias_templates) -# DECLTYPE - add_executable(test_decltype test_decltype.cpp) - target_link_libraries(test_decltype) -# AUTO SPECIFIER - add_executable(test_auto test_auto.cpp) - target_link_libraries(test_auto) -# CONSTEXPR - add_executable(test_constexpr test_constexpr.cpp) - target_link_libraries(test_constexpr) -# DELEGATING CONSTRUCTORS - add_executable(test_delegating_constructors test_delegating_constructors.cpp) - target_link_libraries(test_delegating_constructors) -# RANGE-BASED FOR LOOPS - add_executable(test_range_based_for test_range_based_for.cpp) - target_link_libraries(test_range_based_for)") - -file(WRITE ${COMPILER_TEST_DIR}/test_variadic_templ_class.cpp - "template struct A{}; int main(){A a;}") -file(WRITE ${COMPILER_TEST_DIR}/test_variadic_templ_fct.cpp - "template void foo(Ts... ts){}; int main(){foo(1, 2.0, 3.0f);}") -file(WRITE ${COMPILER_TEST_DIR}/test_alias_templates.cpp - "template struct A{}; template using B=A; int main(){B b;}") -file(WRITE ${COMPILER_TEST_DIR}/test_decltype.cpp - "int main(){decltype(1) a = 1;}") -file(WRITE ${COMPILER_TEST_DIR}/test_auto.cpp - "int main(){auto a = 1;}") -file(WRITE ${COMPILER_TEST_DIR}/test_constexpr.cpp - "constexpr int foo(){return 1;}; int main(){static constexpr int f = foo();}") -file(WRITE ${COMPILER_TEST_DIR}/test_delegating_constructors.cpp - "struct A{ A(){} A(int) : A(){} }; int main(){ A a(1);}") -file(WRITE ${COMPILER_TEST_DIR}/test_range_based_for.cpp - "int main(){ int vec[10]; for (int& elem : vec) { elem = 1; } }") - - -set(COMPILER_CXX11_FEATURES "") - -try_compile(TEST_VARIADIC_TEMPL_CLASS ${COMPILER_TEST_DIR} ${COMPILER_TEST_DIR} compilerTest test_variadic_templ_class) -try_compile(TEST_VARIADIC_TEMPL_FCT ${COMPILER_TEST_DIR} ${COMPILER_TEST_DIR} compilerTest test_variadic_templ_fct) -if (TEST_VARIADIC_TEMPL_CLASS AND TEST_VARIADIC_TEMPL_FCT) - message("Compiler supports variadic class/ function templates") - list(APPEND COMPILER_CXX11_FEATURES "-DHAS_VARIADIC_TEMPLATES=1") -endif() - -try_compile(TEST_ALIAS_TEMPLATES ${COMPILER_TEST_DIR} ${COMPILER_TEST_DIR} compilerTest test_alias_templates) -if (TEST_ALIAS_TEMPLATES) - message("Compiler supports alias-templates") - list(APPEND COMPILER_CXX11_FEATURES "-DHAS_ALIAS_TEMPLATES=1") -endif() - -try_compile(TEST_DECLTYPE ${COMPILER_TEST_DIR} ${COMPILER_TEST_DIR} compilerTest test_decltype) -if (TEST_DECLTYPE) - message("Compiler supports decltype") - list(APPEND COMPILER_CXX11_FEATURES "-DHAS_DECLTYPE=1") -endif() - -try_compile(TEST_AUTO_SPECIFIER ${COMPILER_TEST_DIR} ${COMPILER_TEST_DIR} compilerTest test_auto) -if (TEST_AUTO_SPECIFIER) - message("Compiler supports auto") - list(APPEND COMPILER_CXX11_FEATURES "-DHAS_AUTO=1") -endif() - -try_compile(TEST_CONSTEXPR ${COMPILER_TEST_DIR} ${COMPILER_TEST_DIR} compilerTest test_constexpr) -if (TEST_CONSTEXPR) - message("Compiler supports constexpr") - list(APPEND COMPILER_CXX11_FEATURES "-DHAS_CONSTEXPR=1") -endif() - -try_compile(TEST_DELEGATING_CONSTRUCTORS ${COMPILER_TEST_DIR} ${COMPILER_TEST_DIR} compilerTest test_delegating_constructors) -if (TEST_DELEGATING_CONSTRUCTORS) - message("Compiler supports delegating constructors") - list(APPEND COMPILER_CXX11_FEATURES "-DHAS_DELEGATING_CONSTRUCTORS=1") -endif() - -try_compile(TEST_RANGED_BASED_FOR ${COMPILER_TEST_DIR} ${COMPILER_TEST_DIR} compilerTest test_range_based_for) -if (TEST_RANGED_BASED_FOR) - message("Compiler supports range-based for loops") - list(APPEND COMPILER_CXX11_FEATURES "-DHAS_RANGE_BASED_FOR=1") -endif() \ No newline at end of file diff --git a/AMDiS/cmake/CorrectWindowsPaths.cmake b/AMDiS/cmake/CorrectWindowsPaths.cmake new file mode 100644 index 0000000000000000000000000000000000000000..09bcdd67dcd04fd001d2b7acbd904b5014ebe42b --- /dev/null +++ b/AMDiS/cmake/CorrectWindowsPaths.cmake @@ -0,0 +1,14 @@ +# CorrectWindowsPaths - this module defines one macro +# +# CONVERT_CYGWIN_PATH( PATH ) +# This uses the command cygpath (provided by cygwin) to convert +# unix-style paths into paths useable by cmake on windows + +macro (CONVERT_CYGWIN_PATH _path) + if (WIN32) + EXECUTE_PROCESS(COMMAND cygpath.exe -m ${${_path}} + OUTPUT_VARIABLE ${_path}) + string (STRIP ${${_path}} ${_path}) + endif (WIN32) +endmacro (CONVERT_CYGWIN_PATH) + diff --git a/AMDiS/cmake/FindPETSc.cmake b/AMDiS/cmake/FindPETSc.cmake index 5a7483612d64cb27dee4f35025f897c610496a5a..2be7d1484ea5dbe6bee9a7d9c414588f4eb12039 100644 --- a/AMDiS/cmake/FindPETSc.cmake +++ b/AMDiS/cmake/FindPETSc.cmake @@ -1,6 +1,5 @@ # - Try to find PETSc # Once done this will define -# source: https://github.com/jedbrown/cmake-modules/blob/master/FindPETSc.cmake # # PETSC_FOUND - system has PETSc # PETSC_INCLUDES - the PETSc include directories @@ -10,8 +9,10 @@ # PETSC_MPIEXEC - Executable for running MPI programs # PETSC_VERSION - Version string (MAJOR.MINOR.SUBMINOR) # -# Hack: PETSC_VERSION currently decides on the version based on the -# layout. Otherwise we need to run C code to determine the version. +# Usage: +# find_package(PETSc COMPONENTS CXX) - required if build --with-clanguage=C++ --with-c-support=0 +# find_package(PETSc COMPONENTS C) - standard behavior of checking build using a C compiler +# find_package(PETSc) - same as above # # Setting these changes the behavior of the search # PETSC_DIR - directory in which PETSc resides @@ -21,6 +22,31 @@ # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # +set(PETSC_VALID_COMPONENTS + C + CXX) + +if(NOT PETSc_FIND_COMPONENTS) + set(PETSC_LANGUAGE_BINDINGS "C") +else() + # Right now, this is designed for compatability with the --with-clanguage option, so + # only allow one item in the components list. + list(LENGTH ${PETSc_FIND_COMPONENTS} components_length) + if(${components_length} GREATER 1) + message(FATAL_ERROR "Only one component for PETSc is allowed to be specified") + endif() + # This is a stub for allowing multiple components should that time ever come. Perhaps + # to also test Fortran bindings? + foreach(component ${PETSc_FIND_COMPONENTS}) + list(FIND PETSC_VALID_COMPONENTS ${component} component_location) + if(${component_location} EQUAL -1) + message(FATAL_ERROR "\"${component}\" is not a valid PETSc component.") + else() + list(APPEND PETSC_LANGUAGE_BINDINGS ${component}) + endif() + endforeach() +endif() + function (petsc_get_version) if (EXISTS "${PETSC_DIR}/include/petscversion.h") file (STRINGS "${PETSC_DIR}/include/petscversion.h" vstrings REGEX "#define PETSC_VERSION_(RELEASE|MAJOR|MINOR|SUBMINOR|PATCH) ") @@ -43,12 +69,20 @@ function (petsc_get_version) endfunction () find_path (PETSC_DIR include/petsc.h - HINTS ENV PETSC_DIR + HINTS /usr/lib/petsc ENV PETSC_DIR PATHS - /usr/lib/petscdir/3.1 /usr/lib/petscdir/3.0.0 /usr/lib/petscdir/2.3.3 /usr/lib/petscdir/2.3.2 # Debian + # Debian paths + /usr/lib/petscdir/3.5.1 /usr/lib/petscdir/3.5 + /usr/lib/petscdir/3.4.2 /usr/lib/petscdir/3.4 + /usr/lib/petscdir/3.3 /usr/lib/petscdir/3.2 /usr/lib/petscdir/3.1 + /usr/lib/petscdir/3.0.0 /usr/lib/petscdir/2.3.3 /usr/lib/petscdir/2.3.2 + # MacPorts path + /opt/local/lib/petsc $ENV{HOME}/petsc DOC "PETSc Directory") +find_program (MAKE_EXECUTABLE NAMES make gmake) + if (PETSC_DIR AND NOT PETSC_ARCH) set (_petsc_arches $ENV{PETSC_ARCH} # If set, use environment variable first @@ -58,11 +92,11 @@ if (PETSC_DIR AND NOT PETSC_ARCH) foreach (arch ${_petsc_arches}) if (NOT PETSC_ARCH) find_path (petscconf petscconf.h - HINTS ${PETSC_DIR} - PATH_SUFFIXES ${arch}/include bmake/${arch} - NO_DEFAULT_PATH) + HINTS ${PETSC_DIR} + PATH_SUFFIXES ${arch}/include bmake/${arch} + NO_DEFAULT_PATH) if (petscconf) - set (PETSC_ARCH "${arch}" CACHE STRING "PETSc build architecture") + set (PETSC_ARCH "${arch}" CACHE STRING "PETSc build architecture") endif (petscconf) endif (NOT PETSC_ARCH) endforeach (arch) @@ -78,7 +112,10 @@ find_package_multipass (PETSc petsc_config_current # Determine whether the PETSc layout is old-style (through 2.3.3) or # new-style (>= 3.0.0) -if (EXISTS "${PETSC_DIR}/${PETSC_ARCH}/include/petscconf.h") # > 2.3.3 +if (EXISTS "${PETSC_DIR}/${PETSC_ARCH}/lib/petsc/conf/petscvariables") # > 3.5 + set (petsc_conf_rules "${PETSC_DIR}/lib/petsc/conf/rules") + set (petsc_conf_variables "${PETSC_DIR}/lib/petsc/conf/variables") +elseif (EXISTS "${PETSC_DIR}/${PETSC_ARCH}/include/petscconf.h") # > 2.3.3 set (petsc_conf_rules "${PETSC_DIR}/conf/rules") set (petsc_conf_variables "${PETSC_DIR}/conf/variables") elseif (EXISTS "${PETSC_DIR}/bmake/${PETSC_ARCH}/petscconf.h") # <= 2.3.3 @@ -87,9 +124,10 @@ elseif (EXISTS "${PETSC_DIR}/bmake/${PETSC_ARCH}/petscconf.h") # <= 2.3.3 elseif (PETSC_DIR) message (SEND_ERROR "The pair PETSC_DIR=${PETSC_DIR} PETSC_ARCH=${PETSC_ARCH} do not specify a valid PETSc installation") endif () -petsc_get_version() if (petsc_conf_rules AND petsc_conf_variables AND NOT petsc_config_current) + petsc_get_version() + # Put variables into environment since they are needed to get # configuration (petscvariables) in the PETSc makefile set (ENV{PETSC_DIR} "${PETSC_DIR}") @@ -104,12 +142,12 @@ if (petsc_conf_rules AND petsc_conf_variables AND NOT petsc_config_current) include ${petsc_conf_rules} include ${petsc_conf_variables} show : - -@echo -n \${\${VARIABLE}} +\t-@echo -n \${\${VARIABLE}} ") macro (PETSC_GET_VARIABLE name var) set (${var} "NOTFOUND" CACHE INTERNAL "Cleared" FORCE) - execute_process (COMMAND ${CMAKE_MAKE_PROGRAM} --no-print-directory -f ${petsc_config_makefile} show VARIABLE=${name} + execute_process (COMMAND ${MAKE_EXECUTABLE} --no-print-directory -f ${petsc_config_makefile} show VARIABLE=${name} OUTPUT_VARIABLE ${var} RESULT_VARIABLE petsc_return) endmacro (PETSC_GET_VARIABLE) @@ -118,6 +156,7 @@ show : petsc_get_variable (PETSC_CCPPFLAGS petsc_cpp_line) petsc_get_variable (PETSC_INCLUDE petsc_include) petsc_get_variable (PCC petsc_cc) + petsc_get_variable (PCC_FLAGS petsc_cc_flags) petsc_get_variable (MPIEXEC petsc_mpiexec) # We are done with the temporary Makefile, calling PETSC_GET_VARIABLE after this point is invalid! file (REMOVE ${petsc_config_makefile}) @@ -126,11 +165,39 @@ show : # Extract include paths and libraries from compile command line resolve_includes (petsc_includes_all "${petsc_cpp_line}") + #on windows we need to make sure we're linking against the right + #runtime library + if (WIN32) + if (petsc_cc_flags MATCHES "-MT") + set(using_md False) + foreach(flag_var + CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE + CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) + if(${flag_var} MATCHES "/MD") + set(using_md True) + endif(${flag_var} MATCHES "/MD") + endforeach(flag_var) + if(${using_md} MATCHES "True") + message(WARNING "PETSc was built with /MT, but /MD is currently set. + See http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_build_my_MSVC_application_with_a_static_runtime.3F") + endif(${using_md} MATCHES "True") + endif (petsc_cc_flags MATCHES "-MT") + endif (WIN32) + + include (CorrectWindowsPaths) + convert_cygwin_path(petsc_lib_dir) message (STATUS "petsc_lib_dir ${petsc_lib_dir}") macro (PETSC_FIND_LIBRARY suffix name) set (PETSC_LIBRARY_${suffix} "NOTFOUND" CACHE INTERNAL "Cleared" FORCE) # Clear any stale value, if we got here, we need to find it again - find_library (PETSC_LIBRARY_${suffix} NAMES ${name} HINTS ${petsc_lib_dir} NO_DEFAULT_PATH) + if (WIN32) + set (libname lib${name}) #windows expects "libfoo", linux expects "foo" + else (WIN32) + set (libname ${name}) + endif (WIN32) + find_library (PETSC_LIBRARY_${suffix} NAMES ${libname} HINTS ${petsc_lib_dir} NO_DEFAULT_PATH) set (PETSC_LIBRARIES_${suffix} "${PETSC_LIBRARY_${suffix}}") mark_as_advanced (PETSC_LIBRARY_${suffix}) endmacro (PETSC_FIND_LIBRARY suffix name) @@ -167,29 +234,42 @@ show : message (STATUS "Recognized PETSc install with single library for all packages") endif () - include (CheckCSourceRuns) + include(Check${PETSC_LANGUAGE_BINDINGS}SourceRuns) macro (PETSC_TEST_RUNS includes libraries runs) - multipass_c_source_runs ("${includes}" "${libraries}" " + if(${PETSC_LANGUAGE_BINDINGS} STREQUAL "C") + set(_PETSC_ERR_FUNC "CHKERRQ(ierr)") + elseif(${PETSC_LANGUAGE_BINDINGS} STREQUAL "CXX") + set(_PETSC_ERR_FUNC "CHKERRXX(ierr)") + endif() + if (PETSC_VERSION VERSION_GREATER 3.1) + set (_PETSC_TSDestroy "TSDestroy(&ts)") + else () + set (_PETSC_TSDestroy "TSDestroy(ts)") + endif () + + set(_PETSC_TEST_SOURCE " static const char help[] = \"PETSc test program.\"; -#include \"petscts.h\" +#include int main(int argc,char *argv[]) { PetscErrorCode ierr; TS ts; - ierr = PetscInitialize(&argc,&argv,0,help);CHKERRQ(ierr); - ierr = TSCreate(PETSC_COMM_WORLD,&ts);CHKERRQ(ierr); - ierr = TSSetFromOptions(ts);CHKERRQ(ierr); - ierr = TSDestroy(ts);CHKERRQ(ierr); - ierr = PetscFinalize();CHKERRQ(ierr); + ierr = PetscInitialize(&argc,&argv,0,help);${_PETSC_ERR_FUNC}; + ierr = TSCreate(PETSC_COMM_WORLD,&ts);${_PETSC_ERR_FUNC}; + ierr = TSSetFromOptions(ts);${_PETSC_ERR_FUNC}; + ierr = ${_PETSC_TSDestroy};${_PETSC_ERR_FUNC}; + ierr = PetscFinalize();${_PETSC_ERR_FUNC}; return 0; } -" ${runs}) +") + multipass_source_runs ("${includes}" "${libraries}" "${_PETSC_TEST_SOURCE}" ${runs} "${PETSC_LANGUAGE_BINDINGS}") if (${${runs}}) set (PETSC_EXECUTABLE_RUNS "YES" CACHE BOOL - "Can the system successfully run a PETSc executable? This variable can be manually set to \"YES\" to force CMake to accept a given PETSc configuration, but this will almost always result in a broken build. If you change PETSC_DIR, PETSC_ARCH, or PETSC_CURRENT you would have to reset this variable." FORCE) + "Can the system successfully run a PETSc executable? This variable can be manually set to \"YES\" to force CMake to accept a given PETSc configuration, but this will almost always result in a broken build. If you change PETSC_DIR, PETSC_ARCH, or PETSC_CURRENT you would have to reset this variable." FORCE) endif (${${runs}}) endmacro (PETSC_TEST_RUNS) + find_path (PETSC_INCLUDE_DIR petscts.h HINTS "${PETSC_DIR}" PATH_SUFFIXES include NO_DEFAULT_PATH) find_path (PETSC_INCLUDE_CONF petscconf.h HINTS "${PETSC_DIR}" PATH_SUFFIXES "${PETSC_ARCH}/include" "bmake/${PETSC_ARCH}" NO_DEFAULT_PATH) mark_as_advanced (PETSC_INCLUDE_DIR PETSC_INCLUDE_CONF) @@ -199,7 +279,7 @@ int main(int argc,char *argv[]) { if (petsc_works_minimal) message (STATUS "Minimal PETSc includes and libraries work. This probably means we are building with shared libs.") set (petsc_includes_needed "${petsc_includes_minimal}") - else (petsc_works_minimal) # Minimal includes fail, see if just adding full includes fixes it + else (petsc_works_minimal) # Minimal includes fail, see if just adding full includes fixes it petsc_test_runs ("${petsc_includes_all}" "${PETSC_LIBRARIES_TS}" petsc_works_allincludes) if (petsc_works_allincludes) # It does, we just need all the includes ( message (STATUS "PETSc requires extra include paths, but links correctly with only interface libraries. This is an unexpected configuration (but it seems to work fine).") @@ -207,21 +287,21 @@ int main(int argc,char *argv[]) { else (petsc_works_allincludes) # We are going to need to link the external libs explicitly resolve_libraries (petsc_libraries_external "${petsc_libs_external}") foreach (pkg SYS VEC MAT DM KSP SNES TS ALL) - list (APPEND PETSC_LIBRARIES_${pkg} ${petsc_libraries_external}) + list (APPEND PETSC_LIBRARIES_${pkg} ${petsc_libraries_external}) endforeach (pkg) petsc_test_runs ("${petsc_includes_minimal}" "${PETSC_LIBRARIES_TS}" petsc_works_alllibraries) if (petsc_works_alllibraries) - message (STATUS "PETSc only need minimal includes, but requires explicit linking to all dependencies. This is expected when PETSc is built with static libraries.") - set (petsc_includes_needed ${petsc_includes_minimal}) + message (STATUS "PETSc only need minimal includes, but requires explicit linking to all dependencies. This is expected when PETSc is built with static libraries.") + set (petsc_includes_needed ${petsc_includes_minimal}) else (petsc_works_alllibraries) - # It looks like we really need everything, should have listened to Matt - set (petsc_includes_needed ${petsc_includes_all}) - petsc_test_runs ("${petsc_includes_all}" "${PETSC_LIBRARIES_TS}" petsc_works_all) - if (petsc_works_all) # We fail anyways - message (STATUS "PETSc requires extra include paths and explicit linking to all dependencies. This probably means you have static libraries and something unexpected in PETSc headers.") - else (petsc_works_all) # We fail anyways - message (STATUS "PETSc could not be used, maybe the install is broken.") - endif (petsc_works_all) + # It looks like we really need everything, should have listened to Matt + set (petsc_includes_needed ${petsc_includes_all}) + petsc_test_runs ("${petsc_includes_all}" "${PETSC_LIBRARIES_TS}" petsc_works_all) + if (petsc_works_all) # We fail anyways + message (STATUS "PETSc requires extra include paths and explicit linking to all dependencies. This probably means you have static libraries and something unexpected in PETSc headers.") + else (petsc_works_all) # We fail anyways + message (STATUS "PETSc could not be used, maybe the install is broken.") + endif (petsc_works_all) endif (petsc_works_alllibraries) endif (petsc_works_allincludes) endif (petsc_works_minimal) diff --git a/AMDiS/cmake/FindPackageMultipass.cmake b/AMDiS/cmake/FindPackageMultipass.cmake index 7199e026db92465e81d2e730a4720a722fce4ff4..fbf06a7f0fc3aa20a0387f091eac4f74e7ffdab2 100644 --- a/AMDiS/cmake/FindPackageMultipass.cmake +++ b/AMDiS/cmake/FindPackageMultipass.cmake @@ -21,7 +21,14 @@ # # Make temporary files, run programs, etc, to determine FOO_INCLUDES and FOO_LIBRARIES # endif (NOT foo_current) # +# MULTIPASS_SOURCE_RUNS (Name INCLUDES LIBRARIES SOURCE RUNS LANGUAGE) +# Always runs the given test, use this when you need to re-run tests +# because parent variables have made old cache entries stale. The LANGUAGE +# variable is either C or CXX indicating which compiler the test should +# use. # MULTIPASS_C_SOURCE_RUNS (Name INCLUDES LIBRARIES SOURCE RUNS) +# DEPRECATED! This is only included for backwards compatability. Use +# the more general MULTIPASS_SOURCE_RUNS instead. # Always runs the given test, use this when you need to re-run tests # because parent variables have made old cache entries stale. @@ -39,7 +46,7 @@ macro (FIND_PACKAGE_MULTIPASS _name _current) # The name of the stored value for the given state set (_stored_var PACKAGE_MULTIPASS_${_NAME}_${_state}) if (NOT "${${_stored_var}}" STREQUAL "${${_NAME}_${_state}}") - set (_states_current "NO") + set (_states_current "NO") endif (NOT "${${_stored_var}}" STREQUAL "${${_NAME}_${_state}}") set (${_stored_var} "${${_NAME}_${_state}}" CACHE INTERNAL "Stored state for ${_name}." FORCE) list (REMOVE_AT _args 0) @@ -61,7 +68,7 @@ macro (FIND_PACKAGE_MULTIPASS _name _current) if (_cmd STREQUAL "DEPENDENTS") list (REMOVE_AT _args 0) foreach (dep ${_args}) - set (${_NAME}_${dep} "NOTFOUND" CACHE INTERNAL "Cleared" FORCE) + set (${_NAME}_${dep} "NOTFOUND" CACHE INTERNAL "Cleared" FORCE) endforeach (dep) endif (_cmd STREQUAL "DEPENDENTS") set (${_NAME}_FOUND "NOTFOUND" CACHE INTERNAL "Cleared" FORCE) @@ -70,9 +77,9 @@ macro (FIND_PACKAGE_MULTIPASS _name _current) endmacro (FIND_PACKAGE_MULTIPASS) -macro (MULTIPASS_C_SOURCE_RUNS includes libraries source runs) - include (CheckCSourceRuns) - # This is a ridiculous hack. CHECK_C_SOURCE_* thinks that if the +macro (MULTIPASS_SOURCE_RUNS includes libraries source runs language) + include (Check${language}SourceRuns) + # This is a ridiculous hack. CHECK_${language}_SOURCE_* thinks that if the # *name* of the return variable doesn't change, then the test does # not need to be re-run. We keep an internal count which we # increment to guarantee that every test name is unique. If we've @@ -86,6 +93,14 @@ macro (MULTIPASS_C_SOURCE_RUNS includes libraries source runs) set (testname MULTIPASS_TEST_${MULTIPASS_TEST_COUNT}_${runs}) set (CMAKE_REQUIRED_INCLUDES ${includes}) set (CMAKE_REQUIRED_LIBRARIES ${libraries}) - check_c_source_runs ("${source}" ${testname}) + if(${language} STREQUAL "C") + check_c_source_runs ("${source}" ${testname}) + elseif(${language} STREQUAL "CXX") + check_cxx_source_runs ("${source}" ${testname}) + endif() set (${runs} "${${testname}}") +endmacro (MULTIPASS_SOURCE_RUNS) + +macro (MULTIPASS_C_SOURCE_RUNS includes libraries source runs) + multipass_source_runs("${includes}" "${libraries}" "${source}" ${runs} "C") endmacro (MULTIPASS_C_SOURCE_RUNS) diff --git a/AMDiS/cmake/HYPREConfig.cmake b/AMDiS/cmake/HYPREConfig.cmake deleted file mode 100644 index 6520d6e3013a992dbb752f0d827e6a224d0107c9..0000000000000000000000000000000000000000 --- a/AMDiS/cmake/HYPREConfig.cmake +++ /dev/null @@ -1,21 +0,0 @@ -find_file(HYPRE_H HYPRE.h) -find_library(HYPRE_LIB HYPRE) -if(HYPRE_H AND HYPRE_LIB) - set(HAVE_HYPRE ON) - find_package(MPI REQUIRED) - #append each library in the hypre_lib directory beginning with HYPRE to the list of hypre libraries - get_filename_component(HLIB_PATH ${HYPRE_LIB} PATH) - file(GLOB HYPRE_OTHER ${HLIB_PATH}/${CMAKE_SHARED_LIBRARY_PREFIX}HYPRE*${CMAKE_SHARED_LIBRARY_SUFFIX}) - find_library(LAPACK_LIB lapack) - set(HYPRE_LIBRARIES ${MPI_LIBRARIES} ${HYPRE_LIB} ${HYPRE_OTHER} ${LAPACK_LIB}) - message("hypre libraries: ${HYPRE_LIBRARIES}") - get_filename_component(HYPRE_INCLUDE_DIRECTORIES ${HYPRE_H} PATH) - list(APPEND HYPRE_INCLUDE_DIRECTORIES ${MPI_CXX_INCLUDE_PATH}) -else() - if(HAVE_HYPRE) - message("could not find hypre:") - message("library: ${HYPRE_LIB}") - message("header: ${HYPRE_H}") - endif() - set(HAVE_HYPRE FALSE) -endif() diff --git a/AMDiS/cmake/ResolveCompilerPaths.cmake b/AMDiS/cmake/ResolveCompilerPaths.cmake index b398025e95518511f4e06ba218dcef386a4e8eaa..54787fa38ffa50136414e6c788c50fb3c63746b8 100644 --- a/AMDiS/cmake/ResolveCompilerPaths.cmake +++ b/AMDiS/cmake/ResolveCompilerPaths.cmake @@ -38,23 +38,34 @@ # # assuming both directories exist. # Note: as currently implemented, the -I/string will be picked up mistakenly (cry, cry) +include (CorrectWindowsPaths) macro (RESOLVE_LIBRARIES LIBS LINK_LINE) - string (REGEX MATCHALL "((-L|-l|-Wl)([^\" ]+|\"[^\"]+\")|/[^\" ]+(a|so|dll))" _all_tokens "${LINK_LINE}") - set (_libs_found) - set (_directory_list) + string (REGEX MATCHALL "((-L|-l|-Wl)([^\" ]+|\"[^\"]+\")|[^\" ]+\\.(a|so|dll|lib))" _all_tokens "${LINK_LINE}") + set (_libs_found "") + set (_directory_list "") foreach (token ${_all_tokens}) if (token MATCHES "-L([^\" ]+|\"[^\"]+\")") # If it's a library path, add it to the list string (REGEX REPLACE "^-L" "" token ${token}) string (REGEX REPLACE "//" "/" token ${token}) + convert_cygwin_path(token) list (APPEND _directory_list ${token}) - elseif (token MATCHES "^(-l([^\" ]+|\"[^\"]+\")|/[^\" ]+(a|so|dll))") + elseif (token MATCHES "^(-l([^\" ]+|\"[^\"]+\")|[^\" ]+\\.(a|so|dll|lib))") # It's a library, resolve the path by looking in the list and then (by default) in system directories - string (REGEX REPLACE "^-l" "" token ${token}) - set (_root) - if (token MATCHES "^/") # We have an absolute path, add root to the search path - set (_root "/") + if (WIN32) #windows expects "libfoo", linux expects "foo" + string (REGEX REPLACE "^-l" "lib" token ${token}) + else (WIN32) + string (REGEX REPLACE "^-l" "" token ${token}) + endif (WIN32) + set (_root "") + if (token MATCHES "^/") # We have an absolute path + #separate into a path and a library name: + string (REGEX MATCH "[^/]*\\.(a|so|dll|lib)$" libname ${token}) + string (REGEX MATCH ".*[^${libname}$]" libpath ${token}) + convert_cygwin_path(libpath) + set (_directory_list ${_directory_list} ${libpath}) + set (token ${libname}) endif (token MATCHES "^/") set (_lib "NOTFOUND" CACHE FILEPATH "Cleared" FORCE) find_library (_lib ${token} HINTS ${_directory_list} ${_root}) @@ -78,10 +89,11 @@ endmacro (RESOLVE_LIBRARIES) macro (RESOLVE_INCLUDES INCS COMPILE_LINE) string (REGEX MATCHALL "-I([^\" ]+|\"[^\"]+\")" _all_tokens "${COMPILE_LINE}") - set (_incs_found) + set (_incs_found "") foreach (token ${_all_tokens}) string (REGEX REPLACE "^-I" "" token ${token}) string (REGEX REPLACE "//" "/" token ${token}) + convert_cygwin_path(token) if (EXISTS ${token}) list (APPEND _incs_found ${token}) else (EXISTS ${token}) diff --git a/AMDiS/cmake/SetSubMinorRevision.cmake b/AMDiS/cmake/SetSubMinorRevision.cmake deleted file mode 100644 index a57d46753624e32e0e274f6c4bf7ed52ee52a4a8..0000000000000000000000000000000000000000 --- a/AMDiS/cmake/SetSubMinorRevision.cmake +++ /dev/null @@ -1,33 +0,0 @@ -#this files sets the cmake variable AMDIS_SUB_MINOR to the subversion global revision -#if the global revision could not be determined, the variable remains empty -#TODO: git compatibility - - -macro(Subversion_CHECK_WC dir prefix) - set(_Subversion_SAVED_LC_ALL "$ENV{LC_ALL}") - set(ENV{LC_ALL} C) - execute_process(COMMAND ${Subversion_SVN_EXECUTABLE} info ${dir} - OUTPUT_VARIABLE ${prefix}_WC_INFO - ERROR_VARIABLE Subversion_svn_info_error - RESULT_VARIABLE Subversion_svn_info_result - OUTPUT_STRIP_TRAILING_WHITESPACE) - - if(${Subversion_svn_info_result} EQUAL 0) - set(${prefix} TRUE) - #message(SEND_ERROR "Command \"${Subversion_SVN_EXECUTABLE} info ${dir}\" failed with output:\n${Subversion_svn_info_error}") - else() - set(${prefix} FALSE) - endif() - # restore the previous LC_ALL - set(ENV{LC_ALL} ${_Subversion_SAVED_LC_ALL}) - endmacro() -find_package(Subversion) -if(Subversion_FOUND) -#CMake Version 3.5.2: fatal error in Subversion_WC_INFO if CMAKE_CURRENT_SOURCE_DIR is not a working directory - Subversion_CHECK_WC(${CMAKE_CURRENT_SOURCE_DIR} svn_check) - if(svn_check) - Subversion_WC_INFO(${CMAKE_CURRENT_SOURCE_DIR} svn_info) - #message("svn-rev: ${svn_info_WC_REVISION}") - set(AMDIS_SUB_MINOR "${svn_info_WC_REVISION}") - endif() - endif() diff --git a/AMDiS/cmake/amdis_compositeFEM.cmake b/AMDiS/cmake/amdis_compositeFEM.cmake new file mode 100644 index 0000000000000000000000000000000000000000..e0b4c5c28131e0bd6aa5bb77f41858adc4bba5d6 --- /dev/null +++ b/AMDiS/cmake/amdis_compositeFEM.cmake @@ -0,0 +1,23 @@ +# specify the target and requirements for the composite fem library + +set(COMPOSITE_SOURCE_DIR ${SOURCE_DIR}/compositeFEM) +list(APPEND COMPOSITE_FEM_SRC + ${COMPOSITE_SOURCE_DIR}/CFE_Integration.cc + ${COMPOSITE_SOURCE_DIR}/CFE_NormAndErrorFcts.cc + ${COMPOSITE_SOURCE_DIR}/CompositeFEMMethods.cc + ${COMPOSITE_SOURCE_DIR}/CompositeFEMOperator.cc + ${COMPOSITE_SOURCE_DIR}/LevelSetAdaptMesh.cc + ${COMPOSITE_SOURCE_DIR}/PenaltyOperator.cc + ${COMPOSITE_SOURCE_DIR}/ElementLevelSet.cc + ${COMPOSITE_SOURCE_DIR}/SubPolytope.cc + ${COMPOSITE_SOURCE_DIR}/SubElementAssembler.cc) + +list(APPEND COMPILEFLAGS "-DHAVE_COMPOSITE_FEM=1") +list(APPEND AMDIS_INCLUDE_DIRS ${COMPOSITE_SOURCE_DIR}) + +# specify how to install this target: +# ----------------------------------- + +file(GLOB COMPOSITE_HEADERS "${COMPOSITE_SOURCE_DIR}/*.h*") +install(FILES ${COMPOSITE_HEADERS} DESTINATION include/amdis/compositeFEM) + diff --git a/AMDiS/cmake/amdis_extensions.cmake b/AMDiS/cmake/amdis_extensions.cmake new file mode 100644 index 0000000000000000000000000000000000000000..0830d68b4a2e9f50a970ca60f27ea99696703329 --- /dev/null +++ b/AMDiS/cmake/amdis_extensions.cmake @@ -0,0 +1,92 @@ +option(ENABLE_BASE_PROBLEMS "Use base_problems" true) +mark_as_advanced(ENABLE_BASE_PROBLEMS) + +find_path(EXTENSIONS_DIR NAMES Helpers.h + HINTS ${BASE_DIR}/../extensions + DOC "Path to AMDiS extensions.") +if (EXTENSIONS_DIR) + if (NOT EXISTS ${EXTENSIONS_DIR}/Helpers.h OR NOT EXISTS ${EXTENSIONS_DIR}/ExtendedProblemStat.h) + message(FATAL_ERROR "Wrong extensions directory! Directory must contain the files 'Helpers.h' and 'ExtendedProblemStat.h'") + endif () + + list(APPEND EXTENSIONS_SRC + ${EXTENSIONS_DIR}/Helpers.cc + ${EXTENSIONS_DIR}/BackgroundMesh.cc + ${EXTENSIONS_DIR}/GeometryTools.cc + ${EXTENSIONS_DIR}/POperators.cc + ${EXTENSIONS_DIR}/SingularDirichletBC2.cc + ${EXTENSIONS_DIR}/time/ExtendedRosenbrockStationary.cc + ${EXTENSIONS_DIR}/pugixml/src/pugixml.cpp + ) + + list(APPEND COMPILEFLAGS "-DHAVE_EXTENSIONS=1") + list(APPEND AMDIS_INCLUDE_DIRS + ${EXTENSIONS_DIR} + ${EXTENSIONS_DIR}/time + ${EXTENSIONS_DIR}/nanoflann + ${EXTENSIONS_DIR}/pugixml/src + ) + + set(INSTALL_SUBDIRS . time preconditioner nanoflann) + + if (ENABLE_SEQ_PETSC) + list(APPEND EXTENSIONS_SRC + ${EXTENSIONS_DIR}/preconditioner/PetscPreconPfc.cc + ${EXTENSIONS_DIR}/preconditioner/PetscPreconPfcDiag.cc + ${EXTENSIONS_DIR}/preconditioner/PetscPreconCahnHilliard.cc) + endif (ENABLE_SEQ_PETSC) + + if (ENABLE_PARALLEL_DOMAIN) + list(APPEND EXTENSIONS_SRC + ${EXTENSIONS_DIR}/preconditioner/PetscSolverPfc.cc + ${EXTENSIONS_DIR}/preconditioner/PetscSolverPfc_diag.cc) + endif (ENABLE_PARALLEL_DOMAIN) + + if (ENABLE_BASE_PROBLEMS) + if (ENABLE_REINIT) + list(APPEND EXTENSIONS_SRC + ${EXTENSIONS_DIR}/base_problems/CahnHilliard.cc + ${EXTENSIONS_DIR}/base_problems/CahnHilliard_RB.cc + ${EXTENSIONS_DIR}/base_problems/CahnHilliardNavierStokes.cc + ${EXTENSIONS_DIR}/base_problems/CahnHilliardNavierStokes_RB.cc + ${EXTENSIONS_DIR}/base_problems/CahnHilliardNavierStokes_TwoPhase.cc + ${EXTENSIONS_DIR}/base_problems/CahnHilliardNavierStokes_TwoPhase_RB.cc) + endif (ENABLE_REINIT) + list(APPEND EXTENSIONS_SRC + ${EXTENSIONS_DIR}/base_problems/DiffuseDomainFsi.cc + ${EXTENSIONS_DIR}/base_problems/LinearElasticity.cc + ${EXTENSIONS_DIR}/base_problems/LinearElasticityPhase.cc + ${EXTENSIONS_DIR}/base_problems/NavierStokesCahnHilliard.cc + ${EXTENSIONS_DIR}/base_problems/NavierStokesPhase_TaylorHood.cc + ${EXTENSIONS_DIR}/base_problems/NavierStokes_TaylorHood.cc + ${EXTENSIONS_DIR}/base_problems/NavierStokes_TaylorHood_RB.cc + ${EXTENSIONS_DIR}/base_problems/NavierStokes_TH_MultiPhase.cc + ${EXTENSIONS_DIR}/base_problems/NavierStokes_TH_MultiPhase_RB.cc + ${EXTENSIONS_DIR}/base_problems/PhaseFieldCrystal.cc + ${EXTENSIONS_DIR}/base_problems/PhaseFieldCrystal_Phase.cc + ${EXTENSIONS_DIR}/base_problems/PhaseFieldCrystal_RB.cc + ${EXTENSIONS_DIR}/base_problems/PolarizationField.cc + ${EXTENSIONS_DIR}/base_problems/QuasiCrystal.cc + ${EXTENSIONS_DIR}/base_problems/QuasiCrystal_RB.cc) + # ${EXTENSIONS_DIR}/base_problems/NavierStokes_Chorin.cc + # ${EXTENSIONS_DIR}/base_problems/NavierStokesPhase_Chorin.cc + # ${EXTENSIONS_DIR}/base_problems/VacancyPhaseFieldCrystal.cc + + list(APPEND COMPILEFLAGS "-DHAVE_BASE_PROBLEMS=1") + list(APPEND AMDIS_INCLUDE_DIRS ${EXTENSIONS_DIR}/base_problems) + + list(APPEND INSTALL_SUBDIRS base_problems) + endif (ENABLE_BASE_PROBLEMS) + + # specify how to install this target: + # ----------------------------------- + + foreach (SUBDIR ${INSTALL_SUBDIRS}) + file(GLOB HEADERS "${EXTENSIONS_DIR}/${SUBDIR}/*.h*") + install(FILES ${HEADERS} DESTINATION include/amdis/extensions/${SUBDIR}/) + endforeach () + + file(GLOB HEADERS "${EXTENSIONS_DIR}/pugixml/src/*.hpp") + install(FILES ${HEADERS} DESTINATION include/amdis/extensions/pugixml/) + +endif (EXTENSIONS_DIR) diff --git a/AMDiS/cmake/amdis_parallel.cmake b/AMDiS/cmake/amdis_parallel.cmake new file mode 100644 index 0000000000000000000000000000000000000000..c5ea733b2d7d8ead3c2eb21941399c3f9f9d7df6 --- /dev/null +++ b/AMDiS/cmake/amdis_parallel.cmake @@ -0,0 +1,84 @@ +if (ENABLE_PARALLEL_DOMAIN) + option(ENABLE_ZOLTAN "Add support for the Parallel Partitioning suite Zoltan" false) + option(ENABLE_PARALLEL_SOLVERS "Add some problem dependent solver, e.g. Feti, Navier-Stokes and Cahn-Hilliard" true) + option(ENABLE_BDDCML "Add support for the BDDCML library" false) + mark_as_advanced(ENABLE_PARALLEL_SOLVERS) + mark_as_advanced(ENABLE_BDDCML) + + set(PARALLEL_DOMAIN_AMDIS_SRC + ${SOURCE_DIR}/parallel/DofComm.cc + ${SOURCE_DIR}/parallel/CheckerPartitioner.cc + ${SOURCE_DIR}/parallel/ElementObjectDatabase.cc + ${SOURCE_DIR}/parallel/InteriorBoundary.cc + ${SOURCE_DIR}/parallel/MeshDistributor.cc + ${SOURCE_DIR}/parallel/MeshLevelData.cc + ${SOURCE_DIR}/parallel/MeshManipulation.cc + ${SOURCE_DIR}/parallel/MeshPartitioner.cc + ${SOURCE_DIR}/parallel/MpiHelper.cc + ${SOURCE_DIR}/parallel/ParallelDebug.cc + ${SOURCE_DIR}/parallel/ParallelDofMapping.cc + ${SOURCE_DIR}/parallel/ParallelProblemStat.cc + ${SOURCE_DIR}/parallel/ParallelSolver.cc + ${SOURCE_DIR}/parallel/PeriodicMap.cc + ${SOURCE_DIR}/parallel/ParMetisPartitioner.cc + ${SOURCE_DIR}/parallel/StdMpi.cc + ) + + list(APPEND COMPILEFLAGS "-DHAVE_PARALLEL_DOMAIN_AMDIS=1") + + enable_mpi(COMPILEFLAGS AMDIS_INCLUDE_DIRS _) + enable_petsc(COMPILEFLAGS AMDIS_INCLUDE_DIRS _) + + # add support for the zoltan library + if (ENABLE_ZOLTAN) + enable_zoltan(COMPILEFLAGS AMDIS_INCLUDE_DIRS _) + list(APPEND PARALLEL_DOMAIN_AMDIS_SRC + ${SOURCE_DIR}/parallel/ZoltanPartitioner.cc) + endif (ENABLE_ZOLTAN) + + if (ENABLE_BDDCML) + enable_bddcml(COMPILEFLAGS AMDIS_INCLUDE_DIRS _) + list(APPEND PARALLEL_DOMAIN_AMDIS_SRC + ${SOURCE_DIR}/parallel/BddcMlSolver.cc) + endif (ENABLE_BDDCML) + + # add some more source-files that need petsc + list(APPEND PARALLEL_DOMAIN_AMDIS_SRC + ${SOURCE_DIR}/parallel/MatrixNnzStructure.cc + ${SOURCE_DIR}/parallel/ParallelCoarseSpaceSolver.cc + ${SOURCE_DIR}/parallel/PetscHelper.cc + ${SOURCE_DIR}/parallel/PetscSolver.cc + ${SOURCE_DIR}/parallel/PetscSolverGlobalMatrix.cc + ${SOURCE_DIR}/parallel/PetscSolverGlobalBlockMatrix.cc + ${SOURCE_DIR}/solver/PetscTypes.cc + ) + + if (ENABLE_PARALLEL_SOLVERS) + list(APPEND PARALLEL_DOMAIN_AMDIS_SRC + ${SOURCE_DIR}/parallel/PetscSolverFeti.cc + ${SOURCE_DIR}/parallel/PetscSolverFetiDebug.cc + ${SOURCE_DIR}/parallel/PetscSolverFetiMonitor.cc + ${SOURCE_DIR}/parallel/PetscSolverFetiOperators.cc + ${SOURCE_DIR}/parallel/PetscSolverFetiTimings.cc + ${SOURCE_DIR}/parallel/PetscSolverNavierStokes.cc + ${SOURCE_DIR}/parallel/PetscSolverNSCH.cc + ${SOURCE_DIR}/parallel/PetscSolverCahnHilliard2.cc + ${SOURCE_DIR}/parallel/PetscSolverCahnHilliard.cc + ${SOURCE_DIR}/parallel/PetscSolverSchur.cc + ) + list(APPEND COMPILEFLAGS "-DHAVE_PARALLEL_SOLVERS=1") + endif (ENABLE_PARALLEL_SOLVERS) + + # specify how to install this target: + # ----------------------------------- + + file(GLOB AMDIS_PARALLEL_HEADERS "${SOURCE_DIR}/parallel/*.h") + install(FILES ${AMDIS_PARALLEL_HEADERS} DESTINATION include/amdis/parallel/) + + install(FILES + ${BASE_DIR}/cmake/ResolveCompilerPaths.cmake + ${BASE_DIR}/cmake/FindPackageMultipass.cmake + ${BASE_DIR}/cmake/CorrectWindowsPaths.cmake + ${BASE_DIR}/cmake/FindPETSc.cmake + DESTINATION share/amdis/) +endif (ENABLE_PARALLEL_DOMAIN) diff --git a/AMDiS/cmake/amdis_reinit.cmake b/AMDiS/cmake/amdis_reinit.cmake new file mode 100644 index 0000000000000000000000000000000000000000..3a1972ff0500493a9763c387ba174bf5ad2d74bc --- /dev/null +++ b/AMDiS/cmake/amdis_reinit.cmake @@ -0,0 +1,13 @@ +# specify the target and requirements for the reinit library + +set(REINIT_SOURCE_DIR ${SOURCE_DIR}/reinit) +file(GLOB REINIT_SRC ${REINIT_SOURCE_DIR}/*.cc) + +list(APPEND COMPILEFLAGS "-DHAVE_REINIT=1") +list(APPEND AMDIS_INCLUDE_DIRS ${REINIT_SOURCE_DIR}) + +# specify how to install this target: +# ----------------------------------- + +file(GLOB RINIT_HEADERS "${REINIT_SOURCE_DIR}/*.h*") +install(FILES ${RINIT_HEADERS} DESTINATION include/amdis/reinit) diff --git a/AMDiS/cmake/amdis_seq_petsc.cmake b/AMDiS/cmake/amdis_seq_petsc.cmake new file mode 100644 index 0000000000000000000000000000000000000000..71d949b0bd061a0ab601431fa724aa3907a0d025 --- /dev/null +++ b/AMDiS/cmake/amdis_seq_petsc.cmake @@ -0,0 +1,10 @@ +if (ENABLE_SEQ_PETSC) + enable_mpi(COMPILEFLAGS AMDIS_INCLUDE_DIRS _) + enable_petsc(COMPILEFLAGS AMDIS_INCLUDE_DIRS _) + + list(APPEND COMPILEFLAGS "-DHAVE_SEQ_PETSC=1") + + list(APPEND AMDIS_SRC + ${SOURCE_DIR}/solver/PetscSolver.cc + ${SOURCE_DIR}/solver/PetscTypes.cc) +endif (ENABLE_SEQ_PETSC) diff --git a/AMDiS/cmake/dummy.cc b/AMDiS/cmake/dummy.cc deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/AMDiS/cmake/enable_bddcml.cmake b/AMDiS/cmake/enable_bddcml.cmake index ecdbe778dc43fe92f90d3fc20a180118b3cadf4e..54e5959144355d473a0dc58f239ac51376780cf6 100644 --- a/AMDiS/cmake/enable_bddcml.cmake +++ b/AMDiS/cmake/enable_bddcml.cmake @@ -1,32 +1,35 @@ +macro(enable_bddcml _FLAGS_ _INC_DIRS_ _LIBS_) + if (${ARGC} GREATER 3) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () -if (ENABLE_BDDCML) - SET(BDDCML_LINK_LIST "" CACHE STRING "Further libraries to be linked with BDDCML") + SET(BDDCML_LINK_LIST "" CACHE STRING "Further libraries to be linked with BDDCML") - find_file(BDDCML_H bddcml_interface_c.h - HINTS ENV CPATH - DOC "Header bddcml_interface_c.h for the BDDCML library.") + find_file(BDDCML_H bddcml_interface_c.h + HINTS ENV CPATH + DOC "Header bddcml_interface_c.h for the BDDCML library.") - if(BDDCML_H) - get_filename_component(BDDCML_PATH ${BDDCML_H} PATH) - include_directories(${BDDCML_PATH}) - list(APPEND COMPILEFLAGS "-DHAVE_BDDC_ML=1") - list(APPEND COMPILEFLAGS "-DAdd_") - else() - message(FATAL_ERROR "Could not find BDDCML headers.") - endif() + if (BDDCML_H) + get_filename_component(BDDCML_PATH ${BDDCML_H} PATH) + list(APPEND ${_INC_DIRS_} ${BDDCML_PATH}) + list(APPEND ${_FLAGS_} "-DHAVE_BDDC_ML=1" "-DAdd_") + else() + message(FATAL_ERROR "Could not find BDDCML headers.") + endif() - find_library(BDDCML_LIB bddcml - HINTS ENV LIBRARY_PATH - DOC "BDDCML library") + if (LINK_EXECUTABLE) + find_library(BDDCML_LIB bddcml + HINTS ENV LIBRARY_PATH + DOC "BDDCML library") - if(BDDCML_LIB) - list(APPEND AMDIS_LIBS ${BDDCML_LIB}) - else() - message(FATAL_ERROR "Could not find the BDDCML library") - endif() + if(BDDCML_LIB) + list(APPEND ${_LIBS_} ${BDDCML_LIB}) + else() + message(FATAL_ERROR "Could not find the BDDCML library") + endif() + endif (LINK_EXECUTABLE) - - find_file(BLOPEX_PATH blopex - HINTS ENV CPATH - DOC "Path to BLOPEX library.") -endif (ENABLE_BDDCML) + list(APPEND ${_FLAGS_} "-DHAVE_BDDCML=1") +endmacro(enable_bddcml) diff --git a/AMDiS/cmake/enable_boost.cmake b/AMDiS/cmake/enable_boost.cmake new file mode 100644 index 0000000000000000000000000000000000000000..9e729c944daeda830c590db70f9d3db71f4acf7a --- /dev/null +++ b/AMDiS/cmake/enable_boost.cmake @@ -0,0 +1,40 @@ +macro(enable_boost _FLAGS_ _INC_DIRS_ _LIBS_) + if (${ARGC} GREATER 3) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () + + if (BOOST_ROOT) + file(TO_CMAKE_PATH ${BOOST_ROOT} BOOST_ROOT) + endif (BOOST_ROOT) + if (BOOST_LIBRARYDIR) + file(TO_CMAKE_PATH ${BOOST_LIBRARYDIR} BOOST_LIBRARYDIR) + endif (BOOST_LIBRARYDIR) + + set(BOOST_VERSION "1.48") + set(BOOST_LIBS_REQUIRED system iostreams filesystem program_options date_time) + if (WIN32) + list(APPEND BOOST_LIBS_REQUIRED zlib) + if (ENABLE_COMPRESSION OR AMDIS_NEED_COMPRESSION) + list(APPEND BOOST_LIBS_REQUIRED bzip2) + endif (ENABLE_COMPRESSION OR AMDIS_NEED_COMPRESSION) + endif (WIN32) + + if (NOT BUILD_SHARED_LIBS) + set(Boost_USE_STATIC_LIBS ON) + endif (NOT BUILD_SHARED_LIBS) + + find_package(Boost ${BOOST_VERSION} REQUIRED ${BOOST_LIBS_REQUIRED}) + list(APPEND ${_INC_DIRS_} ${Boost_INCLUDE_DIR}) + + if (LINK_EXECUTABLE) + list(APPEND ${_LIBS_} ${Boost_LIBRARIES}) + endif (LINK_EXECUTABLE) + + if (MSVC_SHARED_LIBS AND LINK_EXECUTABLE) + link_directories(${Boost_LIBRARY_DIRS}) + list(APPEND ${_FLAGS_} ${Boost_LIB_DIAGNOSTIC_DEFINITIONS}) + endif (MSVC_SHARED_LIBS AND LINK_EXECUTABLE) + +endmacro(enable_boost) diff --git a/AMDiS/cmake/enable_cxx11.cmake b/AMDiS/cmake/enable_cxx11.cmake index 8b628c469950c0ad83e8bc80e5e7df1c4b7e5435..2f8a59a04f0895fa9014286340973e834261af78 100644 --- a/AMDiS/cmake/enable_cxx11.cmake +++ b/AMDiS/cmake/enable_cxx11.cmake @@ -1,8 +1,7 @@ include(CheckCXXCompilerFlag) include(CheckCXXSourceCompiles) -include(CheckIncludeFileCXX) -if (ENABLE_CXX11) +macro(enable_cxx11 _RESULT_ _FLAGS_) check_cxx_compiler_flag("-std=c++11" COMPILER_SUPPORTS_CXX11_FLAG) set(CXX11_CODE " @@ -21,16 +20,15 @@ if (ENABLE_CXX11) endif () if (COMPILER_SUPPORTS_CXX11_FLAG AND CXX11_COMPILES_WITH_CXX11_FLAG) - add_definitions("-std=c++11") + list(APPEND ${_FLAGS_} "-std=c++11") + set(${_RESULT_} true CACHE BOOL "Enable C++11 compiler features" FORCE) else () check_cxx_source_compiles("${CXX11_CODE}" CXX11_COMPILES) - if (NOT CXX11_COMPILES) - message (FATAL_ERROR "Compiler does not support C++11.") + if (CXX11_COMPILES) + set(${_RESULT_} true CACHE BOOL "Enable C++11 compiler features" FORCE) + else () + set(${_RESULT_} false CACHE BOOL "Enable C++11 compiler features" FORCE) endif () endif () - - list(APPEND COMPILEFLAGS "-DHAS_CXX11=1") -else () - list(APPEND COMPILEFLAGS "-DHAS_CXX11=0") -endif (ENABLE_CXX11) +endmacro(enable_cxx11) diff --git a/AMDiS/cmake/enable_extensions.cmake b/AMDiS/cmake/enable_extensions.cmake deleted file mode 100644 index 16d9d077e654b8e8cf3ceb213b792194af945796..0000000000000000000000000000000000000000 --- a/AMDiS/cmake/enable_extensions.cmake +++ /dev/null @@ -1,143 +0,0 @@ - -# TODO: make extensions a subproject -# add_subdirectory(${SOURCE_DIR}/compositeFEM [binarydir]) - -if (ENABLE_EXTENSIONS) - option(ENABLE_BASE_PROBLEMS "Use base_problems" true) - find_path(EXTENSIONS_DIR NAMES Helpers.h - HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../extensions - DOC "Path to AMDiS extensions.") - if (EXTENSIONS_DIR) - if (NOT EXISTS ${EXTENSIONS_DIR}/Helpers.h OR NOT EXISTS ${EXTENSIONS_DIR}/base_problems/BaseProblem.h) - message(FATAL_ERROR "Wrong extensions directory! Directory must contain the 'Helpers.h' and the subdirectory 'base_problems'") - else() - - SET(EXTENSIONS_SRC - ${EXTENSIONS_DIR}/Helpers.cc - ${EXTENSIONS_DIR}/BackgroundMesh.cc - ${EXTENSIONS_DIR}/GeometryTools.cc - ${EXTENSIONS_DIR}/POperators.cc - ${EXTENSIONS_DIR}/SingularDirichletBC2.cc - ${EXTENSIONS_DIR}/time/ExtendedRosenbrockStationary.cc - ${EXTENSIONS_DIR}/pugixml/src/pugixml.cpp) - - if(ENABLE_SEQ_PETSC) - list(APPEND EXTENSIONS_SRC - ${EXTENSIONS_DIR}/preconditioner/PetscPreconPfc.cc - ${EXTENSIONS_DIR}/preconditioner/PetscPreconPfcDiag.cc - ${EXTENSIONS_DIR}/preconditioner/PetscPreconCahnHilliard.cc) - endif(ENABLE_SEQ_PETSC) - - if(ENABLE_PARALLEL_DOMAIN) - list(APPEND EXTENSIONS_SRC -# ${EXTENSIONS_DIR}/preconditioner/PetscSolverNavierStokes2.cc - ${EXTENSIONS_DIR}/preconditioner/PetscSolverPfc.cc - ${EXTENSIONS_DIR}/preconditioner/PetscSolverPfc_diag.cc) - endif(ENABLE_PARALLEL_DOMAIN) - - list(APPEND COMPILEFLAGS "-DHAVE_EXTENSIONS=1") - list(APPEND AMDIS_INCLUDE_DIRS ${EXTENSIONS_DIR}) - list(APPEND AMDIS_INCLUDE_DIRS ${EXTENSIONS_DIR}/time) - list(APPEND AMDIS_INCLUDE_DIRS ${EXTENSIONS_DIR}/nanoflann) - list(APPEND AMDIS_INCLUDE_DIRS ${EXTENSIONS_DIR}/pugixml/src) - if(WIN32) - add_library(extensions STATIC ${EXTENSIONS_SRC}) - else() - add_library(extensions SHARED ${EXTENSIONS_SRC}) - endif() - list(APPEND AMDIS_LIBS extensions) - - FILE(GLOB HEADERS "${EXTENSIONS_DIR}/*.h") - INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/extensions/) - FILE(GLOB HEADERS "${EXTENSIONS_DIR}/*.hh") - INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/extensions/) - - list(APPEND deb_add_dirs "include/amdis/extensions") - - FILE(GLOB HEADERS "${EXTENSIONS_DIR}/time/*.h") - INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/extensions/time/) - FILE(GLOB HEADERS "${EXTENSIONS_DIR}/time/*.hh") - INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/extensions/time/) - - FILE(GLOB HEADERS "${EXTENSIONS_DIR}/preconditioner/*.h") - INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/extensions/preconditioner/) - FILE(GLOB HEADERS "${EXTENSIONS_DIR}/preconditioner/*.hh") - INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/extensions/preconditioner/) - - list(APPEND deb_add_dirs "include/amdis/extensions/time") - - FILE(GLOB HEADERS "${EXTENSIONS_DIR}/nanoflann/*.hpp") - INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/extensions/nanoflann/) - - list(APPEND deb_add_dirs "include/amdis/extensions/nanoflann") - - FILE(GLOB HEADERS "${EXTENSIONS_DIR}/pugixml/src/*.hpp") - INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/extensions/pugixml/) - - list(APPEND deb_add_dirs "include/amdis/extensions/pugixml") - - install(TARGETS extensions - DESTINATION lib/amdis/ ) - -# === baseProblems ==================================================================== - - if(ENABLE_BASE_PROBLEMS) - SET(BASE_PROBLEMS_SRC - ${EXTENSIONS_DIR}/base_problems/CahnHilliard.cc - ${EXTENSIONS_DIR}/base_problems/CahnHilliard_RB.cc - ${EXTENSIONS_DIR}/base_problems/CahnHilliardNavierStokes.cc - ${EXTENSIONS_DIR}/base_problems/CahnHilliardNavierStokes_RB.cc - ${EXTENSIONS_DIR}/base_problems/CahnHilliardNavierStokes_TwoPhase.cc - ${EXTENSIONS_DIR}/base_problems/CahnHilliardNavierStokes_TwoPhase_RB.cc - ${EXTENSIONS_DIR}/base_problems/DiffuseDomainFsi.cc - ${EXTENSIONS_DIR}/base_problems/LinearElasticity.cc - ${EXTENSIONS_DIR}/base_problems/LinearElasticityPhase.cc -# ${EXTENSIONS_DIR}/base_problems/NavierStokes_Chorin.cc - ${EXTENSIONS_DIR}/base_problems/NavierStokesCahnHilliard.cc -# ${EXTENSIONS_DIR}/base_problems/NavierStokesPhase_Chorin.cc - ${EXTENSIONS_DIR}/base_problems/NavierStokesPhase_TaylorHood.cc - ${EXTENSIONS_DIR}/base_problems/NavierStokes_TaylorHood.cc - ${EXTENSIONS_DIR}/base_problems/NavierStokes_TaylorHood_RB.cc - ${EXTENSIONS_DIR}/base_problems/NavierStokes_TH_MultiPhase.cc - ${EXTENSIONS_DIR}/base_problems/NavierStokes_TH_MultiPhase_RB.cc - ${EXTENSIONS_DIR}/base_problems/PhaseFieldCrystal.cc - ${EXTENSIONS_DIR}/base_problems/PhaseFieldCrystal_Phase.cc - ${EXTENSIONS_DIR}/base_problems/PhaseFieldCrystal_RB.cc - ${EXTENSIONS_DIR}/base_problems/PolarizationField.cc - ${EXTENSIONS_DIR}/base_problems/QuasiCrystal.cc - ${EXTENSIONS_DIR}/base_problems/QuasiCrystal_RB.cc -# ${EXTENSIONS_DIR}/base_problems/VacancyPhaseFieldCrystal.cc - ) - list(APPEND COMPILEFLAGS "-DHAVE_BASE_PROBLEMS=1") - list(APPEND AMDIS_INCLUDE_DIRS ${EXTENSIONS_DIR}/base_problems) - if(WIN32) - add_library(base_problems STATIC ${BASE_PROBLEMS_SRC}) - else() - add_library(base_problems SHARED ${BASE_PROBLEMS_SRC}) - endif() - list(APPEND AMDIS_LIBS base_problems) - - FILE(GLOB HEADERS "${EXTENSIONS_DIR}/base_problems/*.h") - INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/base_problems/) - FILE(GLOB HEADERS "${EXTENSIONS_DIR}/base_problems/*.hh") - INSTALL(FILES ${HEADERS} - DESTINATION include/amdis/base_problems/) - - list(APPEND deb_add_dirs "include/amdis/base_problems") - - install(TARGETS base_problems - DESTINATION lib/amdis/ ) - - endif(ENABLE_BASE_PROBLEMS) - endif() - endif() -endif (ENABLE_EXTENSIONS) diff --git a/AMDiS/cmake/enable_hypre.cmake b/AMDiS/cmake/enable_hypre.cmake index 640c536c87cc7d00d1bbf17991929e1133c3c3cf..7bd469630f3a086c6064673df301a5fc3264b404 100644 --- a/AMDiS/cmake/enable_hypre.cmake +++ b/AMDiS/cmake/enable_hypre.cmake @@ -1,17 +1,54 @@ +macro(enable_hypre _FLAGS_ _INC_DIRS_ _LIBS_) + if (${ARGC} GREATER 3) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () -if (ENABLE_HYPRE) - include(cmake/HYPREConfig.cmake) - message("have hypre: ${HAVE_HYPRE}") - if (HAVE_HYPRE) - if (NOT MPI_FOUND) - find_package(MPI REQUIRED) - if (MPI_FOUND) - list(APPEND COMPILEFLAGS "${MPI_COMPILE_FLAGS}") - include_directories(${MPI_INCLUDE_PATH}) - endif() - endif() - include_directories(${HYPRE_INCLUDE_DIRECTORIES}) - list(APPEND COMPILEFLAGS "-DMTL_HAS_HYPRE") - list(APPEND MYLIBS ${HYPRE_LIBRARIES} ) - endif() -endif (ENABLE_HYPRE) + # MPI is required + if (LINK_EXECUTABLE) + enable_mpi(${_FLAGS_} ${_INC_DIRS_} ${_LIBS_} ON) + else () + enable_mpi(${_FLAGS_} ${_INC_DIRS_} ${_LIBS_}) + endif (LINK_EXECUTABLE) + + + find_file(_HYPRE_H HYPRE.h + HINTS ${PETSC_INCLUDE_DIRS}) + + if (_HYPRE_H) + get_filename_component(HYPRE_INCLUDE_DIRECTORIES ${HYPRE_H} PATH) + list(APPEND ${_INC_DIRS_} ${HYPRE_INCLUDE_DIRECTORIES}) + endif (_HYPRE_H) + + if (LINK_EXECUTABLE) + find_library(_HYPRE_LIB HYPRE + HINTS ${PETSC_LIBRARY_DIRS}) + + if(_HYPRE_LIB) + get_filename_component(HLIB_PATH ${_HYPRE_LIB} PATH) + file(GLOB HYPRE_OTHER ${HLIB_PATH}/${CMAKE_SHARED_LIBRARY_PREFIX}HYPRE*${CMAKE_SHARED_LIBRARY_SUFFIX}) + list(APPEND ${_LIBS_} ${_HYPRE_LIB} ${HYPRE_OTHER}) + endif (_HYPRE_LIB) + + # lapack library is required + find_library(LAPACK_LIB + NAMES lapack flapack + HINTS ${LAPACK_DIR}/lib ${PETSC_LIBRARY_DIRS} ${PETSC_DIR}/lib) + if (LAPACK_LIB) + set(LAPACK_LIBRARIES ${LAPACK_LIB}) + else (LAPACK_LIB) + find_package(LAPACK REQUIRED) + endif (LAPACK_LIB) + list(APPEND ${_LIBS_} ${LAPACK_LIBRARIES}) + endif (LINK_EXECUTABLE) + + + if (_HYPRE_H AND (NOT LINK_EXECUTABLE OR _HYPRE_LIB)) + set(HAVE_HYPRE ON) + list(APPEND ${_FLAGS_} "-DMTL_HAS_HYPRE") + else () + set(HAVE_HYPRE OFF) + endif () + +endmacro(enable_hypre) diff --git a/AMDiS/cmake/enable_mtl4.cmake b/AMDiS/cmake/enable_mtl4.cmake new file mode 100644 index 0000000000000000000000000000000000000000..ae2b3e3d97e11df2ca814c7080c333475ef5e9a2 --- /dev/null +++ b/AMDiS/cmake/enable_mtl4.cmake @@ -0,0 +1,33 @@ +macro(enable_mtl4 _FLAGS_ _INC_DIRS_ _LIBS_) + if (${ARGC} GREATER 3) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () + + if (LINK_EXECUTABLE) + list(APPEND ${_INC_DIRS_} ${AMDIS_INCLUDE_DIR}/mtl4) + else () + list(APPEND ${_INC_DIRS_} ${BASE_DIR}/lib/mtl4) + endif (LINK_EXECUTABLE) + list(APPEND ${_FLAGS_} "-DMTL_ASSERT_FOR_THROW=1") + + + if (ENABLE_CXX11 OR AMDIS_NEED_CXX11) + set (CXX_ELEVEN_FEATURE_LIST "MOVE" "AUTO" "RANGEDFOR" "INITLIST" "STATICASSERT" "DEFAULTIMPL") + foreach (feature ${CXX_ELEVEN_FEATURE_LIST}) + list(APPEND ${_FLAGS_} "-DMTL_WITH_${feature}") + endforeach () + endif () + + + if (ENABLE_OPENMP) + find_package(OpenMP REQUIRED) + if (OPENMP_FOUND) + list(APPEND ${_FLAGS_} "-DMTL_WITH_OPENMP" ${OpenMP_CXX_FLAGS}) + else () + message(FATAL_ERROR "OpenMP not found") + endif (OPENMP_FOUND) + endif (ENABLE_OPENMP) + +endmacro(enable_mtl4) diff --git a/AMDiS/cmake/enable_openmp.cmake b/AMDiS/cmake/enable_openmp.cmake deleted file mode 100644 index 99bd6f568f87277cc79dcbfb1db4aba1609c2af9..0000000000000000000000000000000000000000 --- a/AMDiS/cmake/enable_openmp.cmake +++ /dev/null @@ -1,8 +0,0 @@ - -if (ENABLE_OPENMP) - if(CMAKE_CXX_COMPILER MATCHES ".*icpc") - list(APPEND COMPILEFLAGS "-openmp") - else() - list(APPEND COMPILEFLAGS "-fopenmp") - endif() -endif (ENABLE_OPENMP) diff --git a/AMDiS/cmake/enable_parallel_domain.cmake b/AMDiS/cmake/enable_parallel_domain.cmake deleted file mode 100644 index 035ed4548e9d82e22902f82aa0ef714e896df52e..0000000000000000000000000000000000000000 --- a/AMDiS/cmake/enable_parallel_domain.cmake +++ /dev/null @@ -1,116 +0,0 @@ - -if (ENABLE_PARALLEL_DOMAIN) - option(USE_PETSC_DEV false) - mark_as_advanced(USE_PETSC_DEV) - option(ENABLE_ZOLTAN false) - - ### Search for MPI compiler and get compile flags and include paths. ### - - find_package(MPI REQUIRED) - if(MPI_FOUND) - list(APPEND COMPILEFLAGS "${MPI_COMPILE_FLAGS}") - include_directories(${MPI_INCLUDE_PATH}) - endif(MPI_FOUND) - - - - ### Search for ParMetis ### - - find_file(PARMETIS_HEADER_FILE "parmetis.h" PATH ENV CPATH) - if(PARMETIS_HEADER_FILE) - get_filename_component(PARMETIS_INCLUDE_PATH "${PARMETIS_HEADER_FILE}" PATH CACHE) - include_directories(${PARMETIS_INCLUDE_PATH}) - else() - message(FATAL_ERROR "Could not find ParMetis header file!") - endif(PARMETIS_HEADER_FILE) - -# find_file(PARMETIS_LIB_FILE "libparmetis.a" PATH ENV LIBRARY_PATH) -# if(PARMETIS_LIB_FILE) -# get_filename_component(PARMETIS_LINK_PATH "${PARMETIS_LIB_FILE}" PATH CACHE) -# link_directories(${PARMETIS_LINK_PATH}) -# else() -# message(FATAL_ERROR "Could not find ParMetis library file!") -# endif(PARMETIS_LIB_FILE) - - - - ### Search for Zoltan ### - - if(ENABLE_ZOLTAN) - find_file(ZOLTAN_HEADER_FILE "zoltan_cpp.h" PATH ENV CPATH) - if(ZOLTAN_HEADER_FILE) - get_filename_component(ZOLTAN_HEADER_DIR "${ZOLTAN_HEADER_FILE}" PATH CACHE) - include_directories(${ZOLTAN_HEADER_DIR}) - else() - message(FATAL_ERROR "Could not find Zoltan include file!") - endif(ZOLTAN_HEADER_FILE) - - list(APPEND COMPILEFLAGS "-DHAVE_ZOLTAN") - endif(ENABLE_ZOLTAN) - - - - list(APPEND COMPILEFLAGS "-DHAVE_PARALLEL_DOMAIN_AMDIS=1") - SET(PARALLEL_DOMAIN_AMDIS_SRC - ${SOURCE_DIR}/parallel/BddcMlSolver.cc - ${SOURCE_DIR}/parallel/DofComm.cc - ${SOURCE_DIR}/parallel/CheckerPartitioner.cc - ${SOURCE_DIR}/parallel/ElementObjectDatabase.cc - ${SOURCE_DIR}/parallel/InteriorBoundary.cc - ${SOURCE_DIR}/parallel/MeshDistributor.cc - ${SOURCE_DIR}/parallel/MeshLevelData.cc - ${SOURCE_DIR}/parallel/MeshManipulation.cc - ${SOURCE_DIR}/parallel/MeshPartitioner.cc - ${SOURCE_DIR}/parallel/MpiHelper.cc - ${SOURCE_DIR}/parallel/ParallelDebug.cc - ${SOURCE_DIR}/parallel/ParallelDofMapping.cc - ${SOURCE_DIR}/parallel/ParallelProblemStat.cc - ${SOURCE_DIR}/parallel/ParallelSolver.cc - ${SOURCE_DIR}/parallel/PeriodicMap.cc - ${SOURCE_DIR}/parallel/ParMetisPartitioner.cc - ${SOURCE_DIR}/parallel/StdMpi.cc - ${SOURCE_DIR}/parallel/ZoltanPartitioner.cc) - - if(ENABLE_PARALLEL_DOMAIN STREQUAL "PETSC") - set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};/usr/share/cmake-2.8/Modules/;${AMDIS_SOURCE_DIR}/cmake") - set(PETSC_EXECUTABLE_RUNS ON) - find_package(PETSc REQUIRED) - include_directories(${PETSC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/include) - list(APPEND COMPILEFLAGS "-DHAVE_PARALLEL_PETSC" "-DPETSC_VERSION=${PETSC_VERSION}") - list(APPEND AMDIS_INCLUDE_DIRS ${PETSC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/include) - list(APPEND PARALLEL_DOMAIN_AMDIS_SRC - ${SOURCE_DIR}/parallel/MatrixNnzStructure.cc - ${SOURCE_DIR}/parallel/ParallelCoarseSpaceSolver.cc - ${SOURCE_DIR}/parallel/PetscHelper.cc - ${SOURCE_DIR}/parallel/PetscSolver.cc - ${SOURCE_DIR}/parallel/PetscSolverFeti.cc - ${SOURCE_DIR}/parallel/PetscSolverFetiDebug.cc - ${SOURCE_DIR}/parallel/PetscSolverFetiMonitor.cc - ${SOURCE_DIR}/parallel/PetscSolverFetiOperators.cc - ${SOURCE_DIR}/parallel/PetscSolverFetiTimings.cc - ${SOURCE_DIR}/parallel/PetscSolverGlobalMatrix.cc - ${SOURCE_DIR}/parallel/PetscSolverGlobalBlockMatrix.cc - ${SOURCE_DIR}/parallel/PetscSolverNavierStokes.cc - ${SOURCE_DIR}/parallel/PetscSolverNSCH.cc - ${SOURCE_DIR}/parallel/PetscSolverCahnHilliard2.cc - ${SOURCE_DIR}/parallel/PetscSolverCahnHilliard.cc - ${SOURCE_DIR}/parallel/PetscSolverSchur.cc - ${SOURCE_DIR}/solver/PetscTypes.cc) - elseif(ENABLE_PARALLEL_DOMAIN STREQUAL "PMTL") - set(MTL_INCLUDE_DIR "") - find_package(MTL REQUIRED) - list(APPEND COMPILEFLAGS "-DMTL_HAS_MPI" "-DHAVE_PARALLEL_MTL4") -# list(APPEND PARALLEL_DOMAIN_AMDIS_SRC -# ${SOURCE_DIR}/parallel/PMTL_ProblemStat.cc -# ) - list(APPEND AMDIS_LIBS ${MTL_LIBRARIES}) - else() - message(SEND_ERROR "Set the domain-decomposition version correctly.") - endif() - - INSTALL(FILES cmake/ResolveCompilerPaths.cmake cmake/FindPackageMultipass.cmake cmake/FindPETSc.cmake - DESTINATION share/amdis/) - if(USE_PETSC_DEV) - list(APPEND COMPILEFLAGS "-DHAVE_PETSC_DEV") - endif( USE_PETSC_DEV) -endif(ENABLE_PARALLEL_DOMAIN) diff --git a/AMDiS/cmake/enable_petsc.cmake b/AMDiS/cmake/enable_petsc.cmake new file mode 100644 index 0000000000000000000000000000000000000000..49c5b42cb5f9eb800ca6681e05b64d3b2887ecb0 --- /dev/null +++ b/AMDiS/cmake/enable_petsc.cmake @@ -0,0 +1,157 @@ +include(FindPkgConfig) + +macro(enable_mpi _FLAGS_ _INC_DIRS_ _LIBS_) + if (${ARGC} GREATER 3) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () + + find_package(MPI REQUIRED) + list(APPEND ${_INC_DIRS_} ${MPI_CXX_INCLUDE_PATH}) + list(APPEND ${_FLAGS_} ${MPI_CXX_COMPILE_FLAGS}) + + if (LINK_EXECUTABLE) + # the parameter --enable-new-dtags causes a linker problem, i.e. some libraries are + # linked without an rpath (or any other path information) and can not be found while + # running the executable. The hack below removes this flag manually from the linker flags. + string(REPLACE "-Wl,--enable-new-dtags" "" MY_MPI_CXX_LINK_FLAGS " ${MPI_CXX_LINK_FLAGS} ") + string(STRIP "${MY_MPI_CXX_LINK_FLAGS}" MY_MPI_CXX_LINK_FLAGS) + + list(APPEND ${_FLAGS_} ${MY_MPI_CXX_LINK_FLAGS}) + list(APPEND ${_LIBS_} ${MPI_CXX_LIBRARIES}) + endif (LINK_EXECUTABLE) +endmacro(enable_mpi) + + +macro(enable_petsc _FLAGS_ _INC_DIRS_ _LIBS_) + if (${ARGC} GREATER 3) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () + + # PETSc library is required + find_file(PETSC_PKG_CONFIG "PETSc.pc" + HINTS ${PETSC_DIR}/lib/pkgconfig + $ENV{PETSC_DIR}/lib/pkgconfig + ${PETSC_ROOT}/lib/pkgconfig + $ENV{PETSC_ROOT}/lib/pkgconfig + /usr/lib/petsc/lib/pkgconfig + /usr/lib/petsc/linux-gnu-cxx-opt/lib/pkgconfig + /usr/lib/petsc/linux-gnu-c-opt/lib/pkgconfig) + if (PETSC_PKG_CONFIG) + get_filename_component(PETSC_PKG_CONFIG_PATH "${PETSC_PKG_CONFIG}" PATH CACHE) + set(ENV{PKG_CONFIG_PATH} ${PETSC_PKG_CONFIG_PATH}) + pkg_check_modules(PETSC REQUIRED PETSc>=3.3) + set(PETSC_DEFINITIONS ${PETSC_CFLAGS} ${PETSC_CFLAGS_OTHER}) + endif (PETSC_PKG_CONFIG) + + # check whether PETSc installation and configuration is valid + if (NOT PETSC_INCLUDE_DIRS) + set(PETSC_VALID ON) + else () + find_file(PETSC_HEADER_FILE "petsc.h" PATHS ${PETSC_INCLUDE_DIRS} NO_DEFAULT_PATH) + if (PETSC_HEADER_FILE) + set(PETSC_VALID ON) + else () + set(PETSC_VALID OFF) + endif () + endif (NOT PETSC_INCLUDE_DIRS) + + # if not valid, search again + if (NOT PETSC_VALID) + find_package(PETSc REQUIRED) + set(PETSC_INCLUDE_DIRS ${PETSC_INCLUDES}) + set(PETSC_LIBRARY_DIRS ${PETSC_LIB_DIR}) + message(STATUS " Found PETSc, version ${PETSC_VERSION}") + endif (NOT PETSC_VALID) + + list(APPEND ${_INC_DIRS_} ${PETSC_INCLUDE_DIRS}) + list(APPEND ${_FLAGS_} "-DHAVE_PARALLEL_PETSC=1" "-DPETSC_VERSION=${PETSC_VERSION}" ${PETSC_DEFINITIONS}) + + if (LINK_EXECUTABLE) + link_directories(${PETSC_LIBRARY_DIRS}) + list(APPEND ${_LIBS_} ${PETSC_LIBRARIES}) + endif (LINK_EXECUTABLE) + + + # parmetis is required + find_file(PARMETIS_HEADER_FILE "parmetis.h" + HINTS ${PARMETIS_DIR}/include ${PETSC_INCLUDE_DIRS} /usr/include/parmetis) + if (PARMETIS_HEADER_FILE) + get_filename_component(PARMETIS_INCLUDE_PATH "${PARMETIS_HEADER_FILE}" PATH CACHE) + list(APPEND ${_INC_DIRS_} ${PARMETIS_INCLUDE_PATH}) + file(READ ${PARMETIS_HEADER_FILE} PARMETIS_HEADER_FILE_CONTENT) + + string(FIND "${PARMETIS_HEADER_FILE_CONTENT}" "ParMETIS_V3_PartKway" PARMETIS_PARTKWAY_VALID) + string(FIND "${PARMETIS_HEADER_FILE_CONTENT}" "ParMETIS_V3_Mesh2Dual" PARMETIS_MESH2DUAL_VALID) + string(FIND "${PARMETIS_HEADER_FILE_CONTENT}" "ParMETIS_V3_AdaptiveRepart" PARMETIS_ADAPTIVEREPART_VALID) + string(FIND "${PARMETIS_HEADER_FILE_CONTENT}" "ParMETIS_V3_RefineKway" PARMETIS_REFINEKWAYVALID) + if (NOT (PARMETIS_PARTKWAY_VALID AND PARMETIS_MESH2DUAL_VALID AND PARMETIS_ADAPTIVEREPART_VALID AND PARMETIS_REFINEKWAYVALID)) + message(FATAL_ERROR "ParMETIS installation not complete. Not all required symbols found in ${PARMETIS_HEADER_FILE}.") + endif () + else() + message(FATAL_ERROR "Could not find ParMetis header file 'parmetis.h'!") + endif (PARMETIS_HEADER_FILE) + + if (LINK_EXECUTABLE) + find_library(PARMETIS_LIB parmetis + HINTS ${PARMETIS_DIR}/lib ${PETSC_LIBRARY_DIRS}) + if (NOT PARMETIS_LIB) + message(FATAL_ERROR "Could not find the ParMetis libraries needed by amdis") + endif (NOT PARMETIS_LIB) + message(STATUS " Found ParMetis library ${PARMETIS_LIB}") + list(APPEND ${_LIBS_} ${PARMETIS_LIB}) + endif (LINK_EXECUTABLE) + + + # metis is required + find_file(METIS_HEADER_FILE "metis.h" + HINTS ${METIS_DIR}/include ${PETSC_INCLUDE_DIRS} /usr/include/metis) + if (METIS_HEADER_FILE) + get_filename_component(METIS_INCLUDE_PATH "${METIS_HEADER_FILE}" PATH CACHE) + list(APPEND ${_INC_DIRS_} ${METIS_INCLUDE_PATH}) + else() + message(FATAL_ERROR "Could not find Metis header file 'metis.h'!") + endif (METIS_HEADER_FILE) + + if (LINK_EXECUTABLE) + find_library(METIS_LIB metis + HINTS ${METIS_DIR}/lib ${PETSC_LIBRARY_DIRS}) + if (NOT METIS_LIB) + message(FATAL_ERROR "Could not find the Metis libraries needed by amdis") + endif (NOT METIS_LIB) + message(STATUS " Found Metis library ${METIS_LIB}") + list(APPEND ${_LIBS_} ${METIS_LIB}) + endif (LINK_EXECUTABLE) + + + # blas library is required + if (LINK_EXECUTABLE) + find_library(BLAS_LIB + NAMES blas fblas openblas + HINTS ${BLAS_DIR}/lib ${PETSC_LIBRARY_DIRS} /usr/lib/openblas-base /usr/lib/atlas-base) + if (BLAS_LIB) + set(BLAS_LIBRARIES ${BLAS_LIB}) + else (BLAS_LIB) + find_package(BLAS REQUIRED) + endif (BLAS_LIB) + list(APPEND ${_LIBS_} ${BLAS_LIBRARIES}) + endif (LINK_EXECUTABLE) + + + # lapack library is required + if (LINK_EXECUTABLE) + find_library(LAPACK_LIB + NAMES lapack flapack + HINTS ${LAPACK_DIR}/lib ${PETSC_LIBRARY_DIRS} ${PETSC_DIR}/lib) + if (LAPACK_LIB) + set(LAPACK_LIBRARIES ${LAPACK_LIB}) + else (LAPACK_LIB) + find_package(LAPACK REQUIRED) + endif (LAPACK_LIB) + list(APPEND ${_LIBS_} ${LAPACK_LIBRARIES}) + endif (LINK_EXECUTABLE) +endmacro(enable_petsc) + diff --git a/AMDiS/cmake/enable_png.cmake b/AMDiS/cmake/enable_png.cmake index 25b156c9af8bc1f1c822fda752b3c47fc4eb1066..cbfa22d0cc9d0e7b06fd3dbae2c47b4fb647072b 100644 --- a/AMDiS/cmake/enable_png.cmake +++ b/AMDiS/cmake/enable_png.cmake @@ -1,13 +1,31 @@ +macro(enable_png _FLAGS_ _INC_DIRS_ _LIBS_) + if (${ARGC} GREATER 3) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () -if (ENABLE_PNG) - find_file(PNG_H png.h - HINTS ENV CPATH /usr/include - DOC "headerfile png.h for PNG-READER") - if(PNG_H) - get_filename_component(PNG_PATH ${PNG_H} PATH) - include_directories(${PNG_PATH}) - list(APPEND COMPILEFLAGS "-DHAVE_PNG=1") - else() - message(FATAL_ERROR "Could not find the PNG header png.h.") - endif() -endif (ENABLE_PNG) + find_file(_PNG_H png.h + HINTS ENV CPATH /usr/include + DOC "headerfile png.h for PNG-READER") + + if (_PNG_H) + get_filename_component(PNG_PATH ${_PNG_H} PATH) + list(APPEND ${_INC_DIRS_} ${PNG_PATH}) + else() + message(FATAL_ERROR "Could not find the PNG header png.h.") + endif() + + if (LINK_EXECUTABLE) + find_library(_PNG_LIB png + HINTS ENV LIBRARY_PATH + DOC "The PNG library") + if (_PNG_LIB) + list(APPEND ${_LIBS_} ${_PNG_LIB}) + else() + message(FATAL_ERROR "Could not find the PNG library") + endif() + endif (LINK_EXECUTABLE) + + list(APPEND ${_FLAGS_} "-DHAVE_PNG=1") +endmacro(enable_png) diff --git a/AMDiS/cmake/enable_seq_petsc.cmake b/AMDiS/cmake/enable_seq_petsc.cmake deleted file mode 100644 index eccb108b45595b5c102e07b8b4e406a9cdb7731d..0000000000000000000000000000000000000000 --- a/AMDiS/cmake/enable_seq_petsc.cmake +++ /dev/null @@ -1,19 +0,0 @@ - -if (ENABLE_SEQ_PETSC) - find_package(MPI REQUIRED) - if(MPI_FOUND) - list(APPEND COMPILEFLAGS "${MPI_COMPILE_FLAGS}") - include_directories(${MPI_INCLUDE_PATH}) - endif(MPI_FOUND) - - set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};/usr/share/cmake-2.8/Modules/;${CMAKE_SOURCE_DIR}/") - set(PETSC_EXECUTABLE_RUNS ON) - find_package(PETSc REQUIRED) - include_directories(${PETSC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/include) - list(APPEND AMDIS_INCLUDE_DIRS ${PETSC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/include) - list(APPEND COMPILEFLAGS "-DHAVE_SEQ_PETSC" "-DPETSC_VERSION=${PETSC_VERSION}") - - list(APPEND AMDIS_SRC - ${SOURCE_DIR}/solver/PetscSolver.cc - ${SOURCE_DIR}/solver/PetscTypes.cc) -endif (ENABLE_SEQ_PETSC) diff --git a/AMDiS/cmake/enable_umfpack.cmake b/AMDiS/cmake/enable_umfpack.cmake index 10e5b15988f50e9621b8974b98f548ae31d6be60..156eb9e4c1d1a21ff7caed6b8620a8fd21488fda 100644 --- a/AMDiS/cmake/enable_umfpack.cmake +++ b/AMDiS/cmake/enable_umfpack.cmake @@ -1,25 +1,111 @@ +macro(enable_umfpack _FLAGS_ _INC_DIRS_ _LIBS_) + if (${ARGC} GREATER 3) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () -if (ENABLE_UMFPACK) if (WIN32) - set(SuiteSparse_USE_LAPACK_BLAS ON) + set(SuiteSparse_USE_LAPACK_BLAS ON) endif (WIN32) - # try to use a cmake-package of suitesparse - find_package(SuiteSparse QUIET) + if (SuiteSparse_DIR) + file(TO_CMAKE_PATH ${SuiteSparse_DIR} SuiteSparse_DIR) + endif (SuiteSparse_DIR) + + # try to use a cmake-package of suitesparse + find_package(SuiteSparse QUIET HINTS ${AMDIS_SuiteSparse_DIR}) if (SuiteSparse_FOUND) + message(STATUS "Found SuiteSparse CMake-library") include(${USE_SuiteSparse}) - list(APPEND COMPILEFLAGS "-DHAVE_UMFPACK=1" "-DMTL_HAS_UMFPACK") + if (LINK_EXECUTABLE) + list(APPEND ${_LIBS_} ${SuiteSparse_LIBRARIES}) + endif (LINK_EXECUTABLE) + list(APPEND ${_INC_DIRS_} ${SuiteSparse_INCLUDE_DIR} ${SuiteSparse_METIS_INCLUDE_DIR}) + set(FOUND_SUITESPARSE_LIBS ${SuiteSparse_LIBRARIES}) else (SuiteSparse_FOUND) + # find umfpack manually by searching for umfpack.h header file + find_library(UMFPACK_LIBRARY umfpack + HINTS ${AMDIS_UMFPACK_LIB_DIR} ${SUITESPARSE_LIB} $ENV{SUITESPARSE_LIB} + DOC "Library file for UMFPACK") find_file(UMFPACK_H umfpack.h - HINTS ENV CPATH /usr/include /usr/include/suitesparse /usr/include/ufsparse - DOC "headerfile umfpack.h for UMFPACK") - if(UMFPACK_H) + HINTS ${AMDIS_UMFPACK_INCLUDE_DIR} ${SUITESPARSE_INC} $ENV{SUITESPARSE_INC} ENV CPATH /usr/include /usr/include/suitesparse /usr/include/ufsparse + DOC "Headerfile umfpack.h for UMFPACK") + + if (UMFPACK_H AND UMFPACK_LIBRARY) get_filename_component(UMFPACK_PATH ${UMFPACK_H} PATH) - include_directories(${UMFPACK_PATH} ${UFCONFIG_PATH} ${AMD_PATH}) - list(APPEND COMPILEFLAGS "-DHAVE_UMFPACK=1" "-DMTL_HAS_UMFPACK") + list(APPEND ${_INC_DIRS_} ${UMFPACK_PATH}) + + get_filename_component(UMFPACK_LIB_PATH ${UMFPACK_LIBRARY} PATH) + set(FOUND_SUITESPARSE_LIBS ${UMFPACK_LIBRARY}) + + if (LINK_EXECUTABLE) + + # find all connected libraries + find_library(AMD_LIBRARY amd HINTS ${UMFPACK_LIB_PATH}) + + find_library(BLAS_LIB + NAMES blas fblas openblas + HINTS ${BLAS_DIR}/lib ${UMFPACK_LIB_PATH} /usr/lib/openblas-base /usr/lib/atlas-base) + if (BLAS_LIB) + set(BLAS_LIBRARIES ${BLAS_LIB}) + else (BLAS_LIB) + find_package(BLAS REQUIRED) + endif (BLAS_LIB) + + find_library(CHOLMOD_LIBRARY cholmod HINTS ${UMFPACK_LIB_PATH}) + find_library(COLAMD_LIBRARY colamd HINTS ${UMFPACK_LIB_PATH}) + find_library(SUITESPARSECONFIG_LIBRARY suitesparseconfig HINTS ${UMFPACK_LIB_PATH}) + if (AMD_LIBRARY AND BLAS_LIBRARIES) + list(APPEND FOUND_SUITESPARSE_LIBS ${AMD_LIBRARY} ${BLAS_LIBRARIES}) + endif (AMD_LIBRARY AND BLAS_LIBRARIES) + if (CHOLMOD_LIBRARY) + list(APPEND FOUND_SUITESPARSE_LIBS ${CHOLMOD_LIBRARY}) + endif (CHOLMOD_LIBRARY) + if (COLAMD_LIBRARY) + list(APPEND FOUND_SUITESPARSE_LIBS ${COLAMD_LIBRARY}) + endif (COLAMD_LIBRARY) + if (SUITESPARSECONFIG_LIBRARY) + list(APPEND FOUND_SUITESPARSE_LIBS ${SUITESPARSECONFIG_LIBRARY}) + endif (SUITESPARSECONFIG_LIBRARY) + + list(APPEND ${_LIBS_} ${FOUND_SUITESPARSE_LIBS}) + endif (LINK_EXECUTABLE) else() message(FATAL_ERROR "Could not find the UMFPACK header umfpack.h.") - endif() + endif (UMFPACK_H AND UMFPACK_LIBRARY) endif (SuiteSparse_FOUND) - SET(RPM_DEPEND_STR "blas") -endif (ENABLE_UMFPACK) + + + # Check for clock_gettime in librt + if (NOT WIN32 AND LINK_EXECUTABLE) + include(CheckLibraryExists) + check_library_exists(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME) + if (HAVE_CLOCK_GETTIME) + list(APPEND ${_LIBS_} rt) + else () + check_library_exists(c clock_gettime "" HAVE_CLOCK_GETTIME) + endif (HAVE_CLOCK_GETTIME) + endif (NOT WIN32 AND LINK_EXECUTABLE) + + + # collect informations about umfpack version and found libraries + if (FOUND_SUITESPARSE_LIBS) + find_file(_UMFPACK_H umfpack.h PATHS ${SuiteSparse_INCLUDE_DIR} ${UMFPACK_PATH} NO_DEFAULT_PATH) + file(STRINGS ${_UMFPACK_H} UMFPACK_VERSION_LINE REGEX "#define UMFPACK_VERSION") + string(REGEX MATCH "\"UMFPACK V?([^\"]+)\"" UMFPACK_VERSION_REGEX ${UMFPACK_VERSION_LINE}) + set(UMFPACK_VERSION ${CMAKE_MATCH_1}) + unset(_UMFPACK_H CACHE) + + message(STATUS "UMFPACK version: ${UMFPACK_VERSION}") + if (LINK_EXECUTABLE) + message(STATUS "Found the following SuiteSparse libraries:") + foreach (lib ${FOUND_SUITESPARSE_LIBS}) + message(STATUS " ${lib}") + endforeach () + endif (LINK_EXECUTABLE) + endif (FOUND_SUITESPARSE_LIBS) + + list(APPEND ${_FLAGS_} "-DHAVE_UMFPACK=1" "-DMTL_HAS_UMFPACK=1") + +endmacro(enable_umfpack) diff --git a/AMDiS/cmake/enable_zoltan.cmake b/AMDiS/cmake/enable_zoltan.cmake new file mode 100644 index 0000000000000000000000000000000000000000..a7a22218eacc55bbe9eb85bc59c548c81f8e23ce --- /dev/null +++ b/AMDiS/cmake/enable_zoltan.cmake @@ -0,0 +1,26 @@ +macro(enable_zoltan _FLAGS_ _INC_DIRS_ _LIBS_) + if (${ARGC} GREATER 3) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () + + find_file(ZOLTAN_HEADER_FILE "zoltan_cpp.h" HINTS ${ZOLTAN_DIR}/include ${PETSC_INCLUDE_DIRS}) + if (ZOLTAN_HEADER_FILE) + get_filename_component(ZOLTAN_HEADER_DIR "${ZOLTAN_HEADER_FILE}" PATH CACHE) + list(APPEND ${_INC_DIRS_} ${ZOLTAN_HEADER_DIR}) + else() + message(FATAL_ERROR "Could not find Zoltan include file 'zoltan_cpp.h'!") + endif(ZOLTAN_HEADER_FILE) + + if (LINK_EXECUTABLE) + find_library(ZOLTAN_LIB zoltan + HINTS ENV LIBRARY_PATH DOC "Full path to the zoltan library") + if (NOT ZOLTAN_LIB) + message(FATAL_ERROR "Could not find zoltan library!") + endif (NOT ZOLTAN_LIB) + list(APPEND ${_LIBS_} ${ZOLTAN_LIB}) + endif (LINK_EXECUTABLE) + + list(APPEND ${_FLAGS_} "-DHAVE_ZOLTAN=1") +endmacro(enable_zoltan) diff --git a/AMDiS/cmake/muparser.cmake b/AMDiS/cmake/muparser.cmake new file mode 100644 index 0000000000000000000000000000000000000000..92e2c24f4289093347365c64492e19f09c1a0854 --- /dev/null +++ b/AMDiS/cmake/muparser.cmake @@ -0,0 +1,26 @@ +# specify the target and requirements for the muparser library + +set(MUPARSER_SOURCE_DIR ${BASE_DIR}/lib/muparser_v134/src) +set(MUPARSER_INCLUDE_DIR ${BASE_DIR}/lib/muparser_v134/include) +add_library(muparser + ${MUPARSER_SOURCE_DIR}/muParser.cpp + ${MUPARSER_SOURCE_DIR}/muParserBase.cpp + ${MUPARSER_SOURCE_DIR}/muParserBytecode.cpp + ${MUPARSER_SOURCE_DIR}/muParserCallback.cpp + ${MUPARSER_SOURCE_DIR}/muParserComplex.cpp + ${MUPARSER_SOURCE_DIR}/muParserDLL.cpp + ${MUPARSER_SOURCE_DIR}/muParserError.cpp + ${MUPARSER_SOURCE_DIR}/muParserInt.cpp + ${MUPARSER_SOURCE_DIR}/muParserTest.cpp + ${MUPARSER_SOURCE_DIR}/muParserTokenReader.cpp) + +include_directories(${MUPARSER_INCLUDE_DIR}) + +# specify how to install this target: +# ----------------------------------- + +file(GLOB MUPARSER_HEADERS "${MUPARSER_SOURCE_DIR}/include/*.h") +install(FILES ${MUPARSER_HEADERS} + DESTINATION include/amdis/muparser) +install(TARGETS muparser + DESTINATION lib/amdis/ ) diff --git a/AMDiS/cmake/myMake.sh.in b/AMDiS/cmake/myMake.sh.in deleted file mode 100755 index 11e51e842ed63156e5e06e04c64110e4662e9106..0000000000000000000000000000000000000000 --- a/AMDiS/cmake/myMake.sh.in +++ /dev/null @@ -1 +0,0 @@ -make -j@N_TEST_PROC@ $* diff --git a/AMDiS/cmake/postrm.in b/AMDiS/cmake/postrm.in deleted file mode 100755 index cdc5558a901e059c005306ed7654ff494f074d48..0000000000000000000000000000000000000000 --- a/AMDiS/cmake/postrm.in +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -if test "$1" = "upgrade" ; then - exit 0 -fi -NEWDIRS_SEMI="@deb_add_dirs@" -NEWDIRS=`echo ${NEWDIRS_SEMI} | sed 's/;/ /g'` -BASEDIR=@CPACK_INSTALL_PREFIX@ -#echo "will create the remove directories:" -for d in ${NEWDIRS}; do -# echo "${BASEDIR}${d}" - rm -r ${BASEDIR}${d} > /dev/null 2> /dev/null -done -exit 0 - diff --git a/AMDiS/cmake/preinst.in b/AMDiS/cmake/preinst.in deleted file mode 100755 index 9d38fefe96d41ed9530dd89bdd735cd294cb5fab..0000000000000000000000000000000000000000 --- a/AMDiS/cmake/preinst.in +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -NEWDIRS_SEMI="@deb_add_dirs@" -NEWDIRS=`echo ${NEWDIRS_SEMI} | sed 's/;/ /g'` -BASEDIR=@CPACK_INSTALL_PREFIX@ -#echo "will create the following directories:" -for d in ${NEWDIRS}; do -# echo "${BASEDIR}${d}" - mkdir --parents ${BASEDIR}${d} -done - diff --git a/AMDiS/cmake3/AMDIS.cmake.in b/AMDiS/cmake3/AMDIS.cmake.in new file mode 100644 index 0000000000000000000000000000000000000000..93b1698526aae7c3c4d43505f1491527031f7c07 --- /dev/null +++ b/AMDiS/cmake3/AMDIS.cmake.in @@ -0,0 +1,229 @@ +set(AMDIS_NEED_CXX11 @ENABLE_CXX11@) +set(AMDIS_NEED_UMFPACK @ENABLE_UMFPACK@) +set(AMDIS_NEED_COMPRESSION @ENABLE_COMPRESSION@) +set(AMDIS_NEED_EXTENSIONS @ENABLE_EXTENSIONS@) +set(AMDIS_NEED_BASE_PROBLEMS @ENABLE_BASE_PROBLEMS@) +set(AMDIS_NEED_REINIT @ENABLE_REINIT@) +set(AMDIS_NEED_COMPOSITE_FEM @ENABLE_COMPOSITE_FEM@) +set(AMDIS_NEED_ZOLTAN @ENABLE_ZOLTAN@) +set(AMDIS_NEED_BDDCML @ENABLE_BDDCML@) +set(AMDIS_NEED_HYPRE @ENABLE_HYPRE@) +set(AMDIS_NEED_PNG @ENABLE_PNG@) +set(AMDIS_NEED_SEQ_PETSC @ENABLE_SEQ_PETSC@) + +set(BUILD_SHARED_LIBS @BUILD_SHARED_LIBS@) +set(CMAKE_BUILD_TYPE @CMAKE_BUILD_TYPE@) + +add_library(amdis_base INTERFACE) +add_library(AMDiS ALIAS amdis_base) + +target_compile_definitions(amdis_base INTERFACE) + +if (AMDIS_NEED_CXX11) + target_enable_cxx11(AMDIS_NEED_CXX11 amdis_base INTERFACE) + if (NOT AMDIS_NEED_CXX11) + message(FATAL_ERROR "AMDiS was compiled with c++11 support, but the current compiler does not support this feature!") + endif (NOT AMDIS_NEED_CXX11) + target_compile_definitions(amdis_base INTERFACE HAS_CXX11=1) +else () + target_compile_definitions(amdis_base INTERFACE HAS_CXX11=0) +endif (AMDIS_NEED_CXX11) + + +# try to detect the AMDiS include directory +# ------------------------------------------- +find_file(_AMDIS_H AMDiS.h PATHS ${AMDIS_DIR}/../../include/amdis/) +if (_AMDIS_H) + get_filename_component(AMDIS_INCLUDE_DIR ${_AMDIS_H} PATH CACHE) + target_include_directories(amdis_base INTERFACE ${AMDIS_INCLUDE_DIR}) +else () + message(ERROR "Could not detect the AMDiS include directory. Please set the variable AMDIS_INCLUDE_DIR to the directory containing the AMDiS headers.") +endif () +unset(_AMDIS_H CACHE) + + +# MTL4 libraries +# -------------------- +target_enable_mtl4(amdis_base INTERFACE ON) + + +# AMDiS base libraries +# -------------------- +find_library(_AMDIS_LIB amdis${POSTFIX} PATHS ${AMDIS_DIR}/../../lib/amdis/) +find_library(_AMDIS_LIBD amdis${POSTFIX}d PATHS ${AMDIS_DIR}/../../lib/amdis/) # debug version +if (_AMDIS_LIB) + target_link_libraries(amdis_base INTERFACE optimized ${_AMDIS_LIB}) +endif () +if (_AMDIS_LIBD) + target_link_libraries(amdis_base INTERFACE debug ${_AMDIS_LIBD}) +endif () + +if (NOT(_AMDIS_LIB OR _AMDIS_LIBD)) + message(ERROR "Could not detect the AMDiS${POSTFIX} library. Please set the variable _AMDIS_LIB to the AMDiS${POSTFIX} library.") +endif () + + +# Boost libraries +# --------------- +if (NOT BOOST_ROOT) + set(BOOST_ROOT @BOOST_ROOT@) +endif (NOT BOOST_ROOT) +if (NOT BOOST_LIBRARYDIR) + set(BOOST_LIBRARYDIR @BOOST_LIBRARYDIR@) +endif (NOT BOOST_LIBRARYDIR) +target_enable_boost(amdis_base INTERFACE ON) + + +# umfpack library +# -------------------- +if (AMDIS_NEED_UMFPACK) + set(AMDIS_SuiteSparse_DIR @SuiteSparse_DIR@) + set(AMDIS_UMFPACK_INCLUDE_DIR @UMFPACK_INCLUDE_DIRS@) + set(AMDIS_UMFPACK_LIB_DIR ${AMDIS_UMFPACK_INCLUDE_DIR}/../include) + target_enable_umfpack(amdis_base INTERFACE ON) +endif (AMDIS_NEED_UMFPACK) + + +# amdis extensions +# ---------------- +if (AMDIS_NEED_EXTENSIONS) + find_library(_EXTENSIONS_LIB amdisextensions${POSTFIX} PATHS ${AMDIS_DIR}/../../lib/amdis/) + find_library(_EXTENSIONS_LIBD amdisextensions${POSTFIX}d PATHS ${AMDIS_DIR}/../../lib/amdis/) # debug version + if (_EXTENSIONS_LIB OR _EXTENSIONS_LIBD) + target_include_directories(amdis_base INTERFACE + ${AMDIS_INCLUDE_DIR}/extensions + ${AMDIS_INCLUDE_DIR}/extensions/nanoflann + ${AMDIS_INCLUDE_DIR}/extensions/pugixml + ${AMDIS_INCLUDE_DIR}/extensions/time) + target_compile_definitions(amdis_base INTERFACE HAVE_EXTENSIONS=1) + if (AMDIS_NEED_BASE_PROBLEMS) + target_include_directories(amdis_base INTERFACE ${AMDIS_INCLUDE_DIR}/extensions/base_problems) + endif (AMDIS_NEED_BASE_PROBLEMS) + else () + message(ERROR "Extensions library not found") + endif () + + if (_EXTENSIONS_LIB) + target_link_libraries(amdis_base INTERFACE optimized ${_EXTENSIONS_LIB}) + endif () + if (_EXTENSIONS_LIBD) + target_link_libraries(amdis_base INTERFACE debug ${_EXTENSIONS_LIBD}) + endif () +endif (AMDIS_NEED_EXTENSIONS) + + +# reinit library +# -------------- +if (AMDIS_NEED_REINIT) + find_library(_REINIT_LIB amdisreinit${POSTFIX} PATHS ${AMDIS_DIR}/../../lib/amdis/) + find_library(_REINIT_LIBD amdisreinit${POSTFIX}d PATHS ${AMDIS_DIR}/../../lib/amdis/) # debug version + if (_REINIT_LIB OR _REINIT_LIB) + target_include_directories(amdis_base INTERFACE ${AMDIS_INCLUDE_DIR}/reinit) + else () + message(ERROR "Reinit library not found") + endif () + + if (_REINIT_LIB) + target_link_libraries(amdis_base INTERFACE optimized ${_REINIT_LIB}) + endif () + if (_REINIT_LIBD) + target_link_libraries(amdis_base INTERFACE debug ${_REINIT_LIBD}) + endif () +endif (AMDIS_NEED_REINIT) + + +# compositeFEM library +# -------------------- +if (AMDIS_NEED_COMPOSITE_FEM) + find_library(_COMPOSITE_FEM_LIB amdiscompositefem${POSTFIX} PATHS ${AMDIS_DIR}/../../lib/amdis/) + find_library(_COMPOSITE_FEM_LIBD amdiscompositefem${POSTFIX}d PATHS ${AMDIS_DIR}/../../lib/amdis/) # debug version + if (_COMPOSITE_FEM_LIB OR _COMPOSITE_FEM_LIBD) + target_include_directories(amdis_base INTERFACE ${AMDIS_INCLUDE_DIR}/compositeFEM) + else () + message(ERROR "CompositeFEM library not found") + endif () + + if (_COMPOSITE_FEM_LIB) + target_link_libraries(amdis_base INTERFACE optimized ${_COMPOSITE_FEM_LIB}) + endif () + if (_COMPOSITE_FEM_LIBD) + target_link_libraries(amdis_base INTERFACE debug ${_COMPOSITE_FEM_LIBD}) + endif () +endif (AMDIS_NEED_COMPOSITE_FEM) + + +# muparser library +# -------------------- +find_library(_MUPARSER_LIB muparser PATHS ${AMDIS_DIR}/../../lib/amdis/) +if (_MUPARSER_LIB) + target_include_directories(amdis_base INTERFACE ${AMDIS_INCLUDE_DIR}/muparser) + target_link_libraries(amdis_base INTERFACE ${_MUPARSER_LIB}) +else () + message(ERROR "MuParser library not found") +endif () +unset(_MUPARSER_LIB CACHE) + + +# Additional libraries +# ============================================================================== + +# Parallel amdis +# -------------- +if (AMDIS_HAS_PARALLEL_DOMAIN) + target_enable_mpi(amdis_base INTERFACE ON) + target_enable_petsc(amdis_base INTERFACE ON) + + target_compile_definitions(amdis_base INTERFACE + HAVE_PARALLEL_DOMAIN_AMDIS=1) +endif (AMDIS_HAS_PARALLEL_DOMAIN) + + +# Zoltan library +# -------------- +if (AMDIS_NEED_ZOLTAN) + target_enable_zoltan(amdis_base INTERFACE ON) +endif () + + +# BSSCML library +# -------------- +if (AMDIS_NEED_BDDCML) + target_enable_bddcml(amdis_base INTERFACE ON) +endif () + + +# Hypre library +# -------------- +if (AMDIS_NEED_HYPRE) + target_enable_hypre(amdis_base INTERFACE ON) +endif () + + +# PNG library +# -------------- +if (AMDIS_NEED_PNG) + target_enable_png(amdis_base INTERFACE ON) +endif () + +# Sequential PETSc library +# -------------- +if (AMDIS_NEED_SEQ_PETSC AND NOT AMDIS_HAS_PARALLEL_DOMAIN) + target_enable_mpi(amdis_base INTERFACE ON) + target_enable_petsc(amdis_base INTERFACE ON) + target_compile_definitions(amdis_base INTERFACE HAVE_SEQ_PETSC=1) +endif () + +# ============================================================================== + +# Extract some variables from INTERFACE target AMDiS +get_target_property(AMDIS_INCLUDE_DIRS AMDiS INTERFACE_INCLUDE_DIRECTORIES) +get_target_property(AMDIS_LIBRARIES AMDiS INTERFACE_LINK_LIBRARIES) +get_target_property(AMDIS_COMPILEFLAGS AMDiS INTERFACE_COMPILE_OPTIONS) +if (NOT AMDIS_COMPILEFLAGS) + set(AMDIS_COMPILEFLAGS "") +endif() + +get_target_property(_DEFINITIONS AMDiS INTERFACE_COMPILE_DEFINITIONS) +foreach(defn ${_DEFINITIONS}) + list(APPEND AMDIS_COMPILEFLAGS "-D${defn}") +endforeach(defn) diff --git a/AMDiS/cmake3/AMDISConfig.cmake.in b/AMDiS/cmake3/AMDISConfig.cmake.in index 8636d5d1099877970e01a3f42ff7f72104a26ac8..7bf65e74cadcdafd64a710041515acdbaa7ba562 100644 --- a/AMDiS/cmake3/AMDISConfig.cmake.in +++ b/AMDiS/cmake3/AMDISConfig.cmake.in @@ -1,21 +1,30 @@ -# This configuration file is shipped with the great FEM-Toolbox AMDiS. +# This configuration file is shipped with the FEM-Toolbox AMDiS. # It simplifies the configure of different amdis-versions. # -# In order to compile an amdis-project and link against the amdis -# (and subsequent) libraries simply add 'AMDiS' to the target_link_libraries -# of your executable target. All include-paths and additional libraries are -# automatically added. +# We set the following variables: +# AMDIS_INCLUDE_DIRS all include directories (mtl, umfpack, parmetis, metis, ...) +# AMDIS_LIBRARIES the needed libraries +# AMDiS_COMPILEFLAGS some compile flags for amdis # -# For a fast start, you use this package in the following way -# simply look for it, possibly set the AMDiS directory +# Use this package in the following way: # -# find_package(AMDiS REQUIRED) +# find_package(AMDiS REQUIRED [PARALLEL|SEQUENTIAL]) +# add_executable(yourTarget ) +# include_directories(${AMDIS_INCLUDE_DIRS}) +# compile_definitions(${AMDIS_COMPILEFLAGS}) +# target_link_libraries(yourTarget ${AMDIS_LIBRARIES}) +# +# Or directly link against target AMDiS: +# +# find_package(AMDiS REQUIRED [ [PARALLEL|SEQUENTIAL] ]) # add_executable(yourTarget ) # target_link_libraries(yourTarget AMDiS) # +# The default component for this package is SEQUENTIAL DEBUG. +# if (${CMAKE_VERSION} VERSION_LESS "3.2") - message(FATAL_ERROR "The Configuration file was created for CMake version >= 3.2") + message(FATAL_ERROR "The Configuration file was created for CMake version >= 3.2") endif () list(APPEND CMAKE_MODULE_PATH ${AMDIS_DIR}) @@ -23,206 +32,42 @@ list(APPEND CMAKE_MODULE_PATH ${AMDIS_DIR}) set(IS_AMDISCONFIG true) set(AMDIS_USE_FILE ${AMDIS_DIR}/AMDISUse.cmake) -set(AMDIS_NEED_ZOLTAN @ENABLE_ZOLTAN@) -set(AMDIS_NEED_CXX11 @ENABLE_CXX11@) -set(AMDIS_NEED_UMFPACK @ENABLE_UMFPACK@) -set(AMDIS_HAS_PARALLEL_DOMAIN @ENABLE_PARALLEL_DOMAIN@) -set(AMDIS_NEED_COMPRESSION @ENABLE_COMPRESSION@) -set(AMDIS_NEED_EXTENSIONS @ENABLE_EXTENSIONS@) -set(AMDIS_NEED_BASE_PROBLEMS @ENABLE_BASE_PROBLEMS@) -set(AMDIS_NEED_REINIT @ENABLE_REINIT@) -set(AMDIS_NEED_COMPOSITE_FEM @ENABLE_COMPOSITE_FEM@) - -set(BUILD_SHARED_LIBS @BUILD_SHARED_LIBS@) -set(CMAKE_BUILD_TYPE @CMAKE_BUILD_TYPE@) - -add_library(amdis_base INTERFACE) -add_library(AMDiS ALIAS amdis_base) - -target_compile_definitions(amdis_base INTERFACE) - -if (AMDIS_NEED_CXX11) - include(test_compile_features) - target_enable_cxx11(AMDIS_NEED_CXX11 amdis_base INTERFACE) - target_compile_definitions(amdis_base INTERFACE HAS_CXX11=1) -else () - target_compile_definitions(amdis_base INTERFACE HAS_CXX11=0) -endif (AMDIS_NEED_CXX11) - -# try to detect the AMDiS include directory -# ------------------------------------------- -find_file(_AMDIS_H AMDiS.h PATHS ${AMDIS_DIR}/../../include/amdis/) -if (_AMDIS_H) - get_filename_component(AMDIS_INCLUDE_DIR ${_AMDIS_H} PATH CACHE) - target_include_directories(amdis_base INTERFACE ${AMDIS_INCLUDE_DIR}) - include(find_mtl4) -else () - message(ERROR "Could not detect the AMDiS include directory. Please set the variable AMDIS_INCLUDE_DIR to the directory containing the AMDiS headers.") +# Include macros +include(target_enable_cxx11) +include(target_enable_mtl4) +include(target_enable_boost) +include(target_enable_umfpack) +include(target_enable_petsc) +include(target_enable_zoltan) +include(target_enable_bddcml) +include(target_enable_hypre) +include(target_enable_png) + +# enable components +# ----------------- + +if (AMDIS_FIND_REQUIRED_PARALLEL AND AMDIS_FIND_REQUIRED_SEQUENTIAL) + message(WARNING "Choose either SEQUENTIAL or PARALLEL as component, not both! Falling back to the default SEQUENTIAL.") + set(AMDIS_FIND_REQUIRED_PARALLEL OFF) endif () -unset(_AMDIS_H CACHE) +set(AMDIS_CONFIGURATION "") -# AMDiS base libraries -# -------------------- -find_library(_AMDIS_LIB amdis PATHS ${AMDIS_DIR}/../../lib/amdis/) -if (_AMDIS_LIB) - target_link_libraries(amdis_base INTERFACE ${_AMDIS_LIB}) +# parallel of sequential version +if (AMDIS_FIND_REQUIRED_PARALLEL) + set(AMDIS_HAS_PARALLEL_DOMAIN ON) + set(POSTFIX "-p") + list(APPEND AMDIS_CONFIGURATION "PARALLEL") else () - message(ERROR "Could not detect the AMDiS library. Please set the variable _AMDIS_LIB to the AMDiS library.") + set(AMDIS_HAS_PARALLEL_DOMAIN OFF) + set(POSTFIX "-s") + list(APPEND AMDIS_CONFIGURATION "SEQUENTIAL") endif () -unset(_AMDIS_LIB CACHE) - - -# Boost libraries -# --------------- -if (NOT BOOST_ROOT) - set(BOOST_ROOT @BOOST_ROOT@) -endif (NOT BOOST_ROOT) -if (NOT BOOST_LIBRARYDIR) - set(BOOST_LIBRARYDIR @BOOST_LIBRARYDIR@) -endif (NOT BOOST_LIBRARYDIR) -include(find_boost) - -# umfpack library -# -------------------- -if (AMDIS_NEED_UMFPACK) - set(AMDIS_SuiteSparse_DIR @SuiteSparse_DIR@) - set(AMDIS_UMFPACK_INCLUDE_DIR @UMFPACK_INCLUDE_DIRS@) - set(AMDIS_UMFPACK_LIB_DIR ${AMDIS_UMFPACK_INCLUDE_DIR}/../include) - include(find_umfpack) -endif (AMDIS_NEED_UMFPACK) - - -# Parallel amdis -# -------------- -if (AMDIS_HAS_PARALLEL_DOMAIN) - target_compile_definitions(amdis_base INTERFACE - HAVE_PARALLEL_DOMAIN_AMDIS=1) - - find_package(MPI REQUIRED) - target_include_directories(amdis_base INTERFACE ${MPI_CXX_INCLUDE_PATH}) - target_compile_options(amdis_base INTERFACE ${MPI_CXX_COMPILE_FLAGS}) - string(STRIP " ${MPI_CXX_LINK_FLAGS} " MPI_CXX_LINK_FLAGS_) - target_link_libraries(amdis_base INTERFACE ${MPI_CXX_LINK_FLAGS_} ${MPI_CXX_LIBRARIES}) - set(PETSC_EXECUTABLE_RUNS ON) - set(AMDIS_PETSC_DIR @PETSC_DIR@) - include(find_petsc) - if (PETSc_FOUND) - target_include_directories(amdis_base INTERFACE ${PETSC_INCLUDES}) - - find_library(BLAS_LIB - NAMES blas fblas openblas - HINTS ${BLAS_DIR}/lib ${PETSC_LIB_DIR} ${PETSC_DIR}/lib /usr/lib/openblas-base /usr/lib/atlas-base) - if (BLAS_LIB) - set(BLAS_LIBRARIES ${BLAS_LIB}) - else () - find_package(BLAS REQUIRED) - endif () - - find_library(LAPACK_LIB - NAMES lapack flapack - HINTS ${LAPACK_DIR}/lib ${PETSC_LIB_DIR} ${PETSC_DIR}/lib) - if (LAPACK_LIB) - set(LAPACK_LIBRARIES ${LAPACK_LIB}) - else () - find_package(LAPACK REQUIRED) - endif () - - target_link_libraries(amdis_base INTERFACE - ${PETSC_LIBRARY_SYS} - ${PETSC_LIBRARIES} - ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}) - target_compile_definitions(amdis_base INTERFACE - HAVE_PARALLEL_PETSC=1) - else() - message(FATAL_ERROR "Could not find PETSc!") - endif (PETSc_FOUND) -endif (AMDIS_HAS_PARALLEL_DOMAIN) - - -# amdis extensions -# ---------------- -if (AMDIS_NEED_EXTENSIONS) - find_library(_EXTENSIONS_LIB amdis_extensions PATHS ${AMDIS_DIR}/../../lib/amdis/) - if (_EXTENSIONS_LIB) - target_include_directories(amdis_base INTERFACE ${AMDIS_INCLUDE_DIR}/extensions) - target_include_directories(amdis_base INTERFACE ${AMDIS_INCLUDE_DIR}/extensions/nanoflann) - target_include_directories(amdis_base INTERFACE ${AMDIS_INCLUDE_DIR}/extensions/pugixml) - target_include_directories(amdis_base INTERFACE ${AMDIS_INCLUDE_DIR}/extensions/time) - target_compile_definitions(amdis_base INTERFACE HAVE_EXTENSIONS=1) - target_link_libraries(amdis_base INTERFACE ${_EXTENSIONS_LIB}) - if (AMDIS_NEED_BASE_PROBLEMS) - target_include_directories(amdis_base INTERFACE ${AMDIS_INCLUDE_DIR}/extensions/base_problems) - endif (AMDIS_NEED_BASE_PROBLEMS) - else () - message(ERROR "Extensions library not found") - endif () - unset(_EXTENSIONS_LIB CACHE) -endif (AMDIS_NEED_EXTENSIONS) - - -# reinit library -# -------------- -if (AMDIS_NEED_REINIT) - find_library(_REINIT_LIB amdis_reinit PATHS ${AMDIS_DIR}/../../lib/amdis/) - if (_REINIT_LIB) - target_include_directories(amdis_base INTERFACE ${AMDIS_INCLUDE_DIR}/reinit) - target_link_libraries(amdis_base INTERFACE ${_REINIT_LIB}) - else () - message(ERROR "Reinit library not found") - endif () - unset(_REINIT_LIB CACHE) -endif (AMDIS_NEED_REINIT) - - -# compositeFEM library -# -------------------- -if (AMDIS_NEED_COMPOSITE_FEM) - find_library(_COMPOSITE_FEM_LIB amdis_compositeFEM PATHS ${AMDIS_DIR}/../../lib/amdis/) - if (_COMPOSITE_FEM_LIB) - target_include_directories(amdis_base INTERFACE ${AMDIS_INCLUDE_DIR}/compositeFEM) - target_link_libraries(amdis_base INTERFACE ${_COMPOSITE_FEM_LIB}) - else () - message(ERROR "CompositeFEM library not found") - endif () - unset(_COMPOSITE_FEM_LIB CACHE) -endif (AMDIS_NEED_COMPOSITE_FEM) - - -# muparser library -# -------------------- -find_library(_MUPARSER_LIB muparser PATHS ${AMDIS_DIR}/../../lib/amdis/) -if (_MUPARSER_LIB) - target_include_directories(amdis_base INTERFACE ${AMDIS_INCLUDE_DIR}/muparser) - target_link_libraries(amdis_base INTERFACE ${_MUPARSER_LIB}) -else () - message(ERROR "MuParser library not found") +if (NOT EXISTS ${AMDIS_DIR}/AMDIS${POSTFIX}.cmake) + message(FATAL_ERROR "Configuration ${AMDIS_CONFIGURATION} can not be found in ${AMDIS_DIR}.") endif () -unset(_MUPARSER_LIB CACHE) - - -# Zoltan library -# -------------- -if (AMDIS_NEED_ZOLTAN) - find_library(ZOLTAN_LIB zoltan HINTS ENV LIBRARY_PATH DOC "Full path to the zoltan library") - if (ZOLTAN_LIB) - target_link_libraries(amdis_base INTERFACE ${ZOLTAN_LIB}) - else() - message(FATAL_ERROR "Could not find zoltan library!") - endif() -endif () - -# Extract some variables from INTERFACE target AMDiS -get_target_property(AMDIS_INCLUDE_DIRS AMDiS INTERFACE_INCLUDE_DIRECTORIES) -get_target_property(AMDIS_LIBRARIES AMDiS INTERFACE_LINK_LIBRARIES) -get_target_property(AMDIS_COMPILEFLAGS AMDiS INTERFACE_COMPILE_OPTIONS) -if (NOT AMDIS_COMPILEFLAGS) - set(AMDIS_COMPILEFLAGS "") -endif() -get_target_property(_DEFINITIONS AMDiS INTERFACE_COMPILE_DEFINITIONS) -foreach(defn ${_DEFINITIONS}) - list(APPEND AMDIS_COMPILEFLAGS "-D${defn}") -endforeach(defn) +# include component configuration +include(AMDIS${POSTFIX}) diff --git a/AMDiS/cmake3/CMakeLists.txt b/AMDiS/cmake3/CMakeLists.txt index 5fb863e5d0ad1dfcd0a5f06f23197ce2db169ab2..8dcc7141131f2d53b5c9b70a4c01e8e219a52689 100644 --- a/AMDiS/cmake3/CMakeLists.txt +++ b/AMDiS/cmake3/CMakeLists.txt @@ -1,39 +1,18 @@ cmake_minimum_required(VERSION 3.2 FATAL_ERROR) project(AMDiS VERSION 1.1 LANGUAGES CXX) -set(BASE_DIR ${AMDiS_SOURCE_DIR}) -set(SOURCE_DIR ${BASE_DIR}/src) list(APPEND CMAKE_MODULE_PATH ${BASE_DIR}/cmake3) -if (NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE "Release" CACHE STRING "") -endif () - -# ------------------------------------------------------------------------------ - -#some options to control the build process -option(ENABLE_PARALLEL_DOMAIN "Use parallel domain decomposition" false) -option(ENABLE_UMFPACK "Enable support for the UMFPACK solver" true) -option(ENABLE_EXTENSIONS "Use extensions for AMDiS" false) - -# enable/disable some more features -option(ENABLE_COMPRESSION "Use output compression for vtu and arh files" true) -mark_as_advanced(ENABLE_COMPRESSION) - -option(ENABLE_REINIT "Compile reinit library" true) -mark_as_advanced(ENABLE_REINIT) - -option(ENABLE_COMPOSITE_FEM "Compile compositeFEM library" true) -mark_as_advanced(ENABLE_COMPOSITE_FEM) - -option(BUILD_SHARED_LIBS "Build all libraries as shared or static, default: shared" true) -mark_as_advanced(BUILD_SHARED_LIBS) - -if (MSVC) - set(BUILD_SHARED_LIBS false) - mark_as_advanced(BUILD_SHARED_LIBS) - message(WARNING "Currently we can only build static libraries with Visual Studio") -endif (MSVC) +# Include macros +include(target_enable_cxx11) +include(target_enable_mtl4) +include(target_enable_boost) +include(target_enable_umfpack) +include(target_enable_petsc) +include(target_enable_zoltan) +include(target_enable_bddcml) +include(target_enable_hypre) +include(target_enable_png) # ------------------------------------------------------------------------------ @@ -44,27 +23,25 @@ add_library(AMDiS::base ALIAS amdis_base) target_include_directories(amdis_base INTERFACE ${SOURCE_DIR}) target_compile_definitions(amdis_base INTERFACE) -include(test_compile_features) target_enable_cxx11(ENABLE_CXX11 amdis_base INTERFACE) - if (ENABLE_CXX11) - target_compile_definitions(amdis_base INTERFACE HAS_CXX11=1) + target_compile_definitions(amdis_base INTERFACE HAS_CXX11=1) else () - target_compile_definitions(amdis_base INTERFACE HAS_CXX11=0) + target_compile_definitions(amdis_base INTERFACE HAS_CXX11=0) endif (ENABLE_CXX11) -# ------------------------------------------------------------------------------ - -include(find_mtl4) # -> target mtl4 -install(FILES ${BASE_DIR}/cmake3/find_mtl4.cmake DESTINATION share/amdis/) +target_enable_mtl4(amdis_base INTERFACE) +target_enable_boost(amdis_base INTERFACE) -include(find_umfpack) +if (ENABLE_UMFPACK) + target_enable_umfpack(amdis_base INTERFACE) +endif (ENABLE_UMFPACK) -include(find_boost) # -> target boost -install(FILES ${BASE_DIR}/cmake3/find_boost.cmake DESTINATION share/amdis/) +if (ENABLE_PNG) + target_enable_png(amdis_base INTERFACE) +endif (ENABLE_PNG) # ------------------------------------------------------------------------------ - add_library(amdis ${SOURCE_DIR}/AdaptBase.cc ${SOURCE_DIR}/AdaptInfo.cc @@ -187,10 +164,7 @@ add_library(amdis ${SOURCE_DIR}/time/RosenbrockAdaptInstationary.cc ${SOURCE_DIR}/time/RosenbrockMethod.cc ${SOURCE_DIR}/time/RosenbrockStationary.cc -) - -add_library(amdis_debug INTERFACE) -target_sources(amdis_debug INTERFACE +# debugging files ${SOURCE_DIR}/Debug.cc ${SOURCE_DIR}/GlobalDOFNumbering.cc # not used by any other class ${SOURCE_DIR}/GlobalElementNumbering.cc # not used by any other class @@ -204,13 +178,9 @@ include(muparser) # -> target muparser # ------------------------------------------------------------------------------ if (ENABLE_COMPRESSION) - target_compile_definitions(amdis PRIVATE HAVE_COMPRESSION=1) + target_compile_definitions(amdis PRIVATE HAVE_COMPRESSION=1) endif (ENABLE_COMPRESSION) -if (ENABLE_UMFPACK) - target_compile_definitions(amdis PRIVATE HAVE_UMFPACK=1) -endif (ENABLE_UMFPACK) - if (ENABLE_REINIT) include(amdis_reinit) # -> target AMDiS::reinit endif (ENABLE_REINIT) @@ -219,38 +189,60 @@ if (ENABLE_COMPOSITE_FEM) include(amdis_compositeFEM) # -> target AMDiS::compositeFEM endif (ENABLE_COMPOSITE_FEM) +if (ENABLE_SEQ_PETSC) + include(amdis_seq_petsc) # -> target AMDiS::seq_petsc +endif (ENABLE_SEQ_PETSC) + # ------------------------------------------------------------------------------ if (MSVC) - target_compile_definitions(amdis PRIVATE - _SCL_SECURE_NO_WARNINGS - _CRT_SECURE_NO_WARNINGS) + target_compile_definitions(amdis PRIVATE + _SCL_SECURE_NO_WARNINGS + _CRT_SECURE_NO_WARNINGS) endif (MSVC) -target_link_libraries(amdis AMDiS::base muparser - $<$>:amdis_debug>) +target_link_libraries(amdis AMDiS::base muparser) # specify how to install this target: # ----------------------------------- set(INSTALL_SUBDIRS . config nonlin est expressions operations traits - utility time solver solver/details solver/itl io io/detail) + utility time solver solver/details solver/itl io io/detail) foreach (SUBDIR ${INSTALL_SUBDIRS}) - file(GLOB HEADERS "${SOURCE_DIR}/${SUBDIR}/*.h*") - install(FILES ${HEADERS} DESTINATION include/amdis/${SUBDIR}/) + file(GLOB HEADERS "${SOURCE_DIR}/${SUBDIR}/*.h*") + install(FILES ${HEADERS} DESTINATION include/amdis/${SUBDIR}/) endforeach () +file(GLOB CMAKE_MACROS "${BASE_DIR}/cmake3/target_enable_*.cmake") +install(FILES ${CMAKE_MACROS} DESTINATION share/amdis/) + +install(DIRECTORY ${BASE_DIR}/lib/mtl4/ DESTINATION include/amdis/mtl4/ + FILES_MATCHING PATTERN "*.hpp" + PATTERN ".svn" EXCLUDE + PATTERN ".svn/*" EXCLUDE + PATTERN "mtl4/libs" EXCLUDE + PATTERN "mtl4/extern" EXCLUDE) + +set_target_properties(amdis PROPERTIES OUTPUT_NAME amdis${POSTFIX} + DEBUG_OUTPUT_NAME amdis${POSTFIX}d) install(TARGETS amdis DESTINATION lib/amdis/ ) # generate configuration file: # ---------------------------- +# global configuration configure_file(${BASE_DIR}/cmake3/AMDISConfig.cmake.in - ${AMDiS_BINARY_DIR}/AMDISConfig.cmake - @ONLY + ${AMDiS_BINARY_DIR}/AMDISConfig.cmake + @ONLY +) + +# component configuration +configure_file(${BASE_DIR}/cmake3/AMDIS.cmake.in + ${AMDiS_BINARY_DIR}/AMDIS${POSTFIX}.cmake + @ONLY ) install(FILES ${AMDiS_BINARY_DIR}/AMDISConfig.cmake DESTINATION share/amdis/) +install(FILES ${AMDiS_BINARY_DIR}/AMDIS${POSTFIX}.cmake DESTINATION share/amdis/) install(FILES ${BASE_DIR}/cmake3/AMDISUse.cmake DESTINATION share/amdis/) -install(FILES ${BASE_DIR}/cmake3/test_compile_features.cmake DESTINATION share/amdis/) diff --git a/AMDiS/cmake3/CorrectWindowsPaths.cmake b/AMDiS/cmake3/CorrectWindowsPaths.cmake new file mode 100644 index 0000000000000000000000000000000000000000..09bcdd67dcd04fd001d2b7acbd904b5014ebe42b --- /dev/null +++ b/AMDiS/cmake3/CorrectWindowsPaths.cmake @@ -0,0 +1,14 @@ +# CorrectWindowsPaths - this module defines one macro +# +# CONVERT_CYGWIN_PATH( PATH ) +# This uses the command cygpath (provided by cygwin) to convert +# unix-style paths into paths useable by cmake on windows + +macro (CONVERT_CYGWIN_PATH _path) + if (WIN32) + EXECUTE_PROCESS(COMMAND cygpath.exe -m ${${_path}} + OUTPUT_VARIABLE ${_path}) + string (STRIP ${${_path}} ${_path}) + endif (WIN32) +endmacro (CONVERT_CYGWIN_PATH) + diff --git a/AMDiS/cmake/PETScConfig.cmake b/AMDiS/cmake3/FindPETSc.cmake similarity index 62% rename from AMDiS/cmake/PETScConfig.cmake rename to AMDiS/cmake3/FindPETSc.cmake index a082857accf24d41b2516c24778f71088cc532b5..2be7d1484ea5dbe6bee9a7d9c414588f4eb12039 100644 --- a/AMDiS/cmake/PETScConfig.cmake +++ b/AMDiS/cmake3/FindPETSc.cmake @@ -1,6 +1,5 @@ # - Try to find PETSc # Once done this will define -# source: https://github.com/jedbrown/cmake-modules/blob/master/FindPETSc.cmake # # PETSC_FOUND - system has PETSc # PETSC_INCLUDES - the PETSc include directories @@ -10,8 +9,10 @@ # PETSC_MPIEXEC - Executable for running MPI programs # PETSC_VERSION - Version string (MAJOR.MINOR.SUBMINOR) # -# Hack: PETSC_VERSION currently decides on the version based on the -# layout. Otherwise we need to run C code to determine the version. +# Usage: +# find_package(PETSc COMPONENTS CXX) - required if build --with-clanguage=C++ --with-c-support=0 +# find_package(PETSc COMPONENTS C) - standard behavior of checking build using a C compiler +# find_package(PETSc) - same as above # # Setting these changes the behavior of the search # PETSC_DIR - directory in which PETSc resides @@ -21,6 +22,31 @@ # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # +set(PETSC_VALID_COMPONENTS + C + CXX) + +if(NOT PETSc_FIND_COMPONENTS) + set(PETSC_LANGUAGE_BINDINGS "C") +else() + # Right now, this is designed for compatability with the --with-clanguage option, so + # only allow one item in the components list. + list(LENGTH ${PETSc_FIND_COMPONENTS} components_length) + if(${components_length} GREATER 1) + message(FATAL_ERROR "Only one component for PETSc is allowed to be specified") + endif() + # This is a stub for allowing multiple components should that time ever come. Perhaps + # to also test Fortran bindings? + foreach(component ${PETSc_FIND_COMPONENTS}) + list(FIND PETSC_VALID_COMPONENTS ${component} component_location) + if(${component_location} EQUAL -1) + message(FATAL_ERROR "\"${component}\" is not a valid PETSc component.") + else() + list(APPEND PETSC_LANGUAGE_BINDINGS ${component}) + endif() + endforeach() +endif() + function (petsc_get_version) if (EXISTS "${PETSC_DIR}/include/petscversion.h") file (STRINGS "${PETSC_DIR}/include/petscversion.h" vstrings REGEX "#define PETSC_VERSION_(RELEASE|MAJOR|MINOR|SUBMINOR|PATCH) ") @@ -43,12 +69,20 @@ function (petsc_get_version) endfunction () find_path (PETSC_DIR include/petsc.h - HINTS ENV PETSC_DIR + HINTS /usr/lib/petsc ENV PETSC_DIR PATHS - /usr/lib/petscdir/3.1 /usr/lib/petscdir/3.0.0 /usr/lib/petscdir/2.3.3 /usr/lib/petscdir/2.3.2 # Debian + # Debian paths + /usr/lib/petscdir/3.5.1 /usr/lib/petscdir/3.5 + /usr/lib/petscdir/3.4.2 /usr/lib/petscdir/3.4 + /usr/lib/petscdir/3.3 /usr/lib/petscdir/3.2 /usr/lib/petscdir/3.1 + /usr/lib/petscdir/3.0.0 /usr/lib/petscdir/2.3.3 /usr/lib/petscdir/2.3.2 + # MacPorts path + /opt/local/lib/petsc $ENV{HOME}/petsc DOC "PETSc Directory") +find_program (MAKE_EXECUTABLE NAMES make gmake) + if (PETSC_DIR AND NOT PETSC_ARCH) set (_petsc_arches $ENV{PETSC_ARCH} # If set, use environment variable first @@ -58,11 +92,11 @@ if (PETSC_DIR AND NOT PETSC_ARCH) foreach (arch ${_petsc_arches}) if (NOT PETSC_ARCH) find_path (petscconf petscconf.h - HINTS ${PETSC_DIR} - PATH_SUFFIXES ${arch}/include bmake/${arch} - NO_DEFAULT_PATH) + HINTS ${PETSC_DIR} + PATH_SUFFIXES ${arch}/include bmake/${arch} + NO_DEFAULT_PATH) if (petscconf) - set (PETSC_ARCH "${arch}" CACHE STRING "PETSc build architecture") + set (PETSC_ARCH "${arch}" CACHE STRING "PETSc build architecture") endif (petscconf) endif (NOT PETSC_ARCH) endforeach (arch) @@ -71,14 +105,17 @@ endif (PETSC_DIR AND NOT PETSC_ARCH) set (petsc_slaves LIBRARIES_SYS LIBRARIES_VEC LIBRARIES_MAT LIBRARIES_DM LIBRARIES_KSP LIBRARIES_SNES LIBRARIES_TS INCLUDE_DIR INCLUDE_CONF) -include (cmake/FindPackageMultipass.cmake) +include (FindPackageMultipass) find_package_multipass (PETSc petsc_config_current STATES DIR ARCH DEPENDENTS INCLUDES LIBRARIES COMPILER MPIEXEC ${petsc_slaves}) # Determine whether the PETSc layout is old-style (through 2.3.3) or # new-style (>= 3.0.0) -if (EXISTS "${PETSC_DIR}/${PETSC_ARCH}/include/petscconf.h") # > 2.3.3 +if (EXISTS "${PETSC_DIR}/${PETSC_ARCH}/lib/petsc/conf/petscvariables") # > 3.5 + set (petsc_conf_rules "${PETSC_DIR}/lib/petsc/conf/rules") + set (petsc_conf_variables "${PETSC_DIR}/lib/petsc/conf/variables") +elseif (EXISTS "${PETSC_DIR}/${PETSC_ARCH}/include/petscconf.h") # > 2.3.3 set (petsc_conf_rules "${PETSC_DIR}/conf/rules") set (petsc_conf_variables "${PETSC_DIR}/conf/variables") elseif (EXISTS "${PETSC_DIR}/bmake/${PETSC_ARCH}/petscconf.h") # <= 2.3.3 @@ -86,12 +123,11 @@ elseif (EXISTS "${PETSC_DIR}/bmake/${PETSC_ARCH}/petscconf.h") # <= 2.3.3 set (petsc_conf_variables "${PETSC_DIR}/bmake/common/variables") elseif (PETSC_DIR) message (SEND_ERROR "The pair PETSC_DIR=${PETSC_DIR} PETSC_ARCH=${PETSC_ARCH} do not specify a valid PETSc installation") -else () - message (FATAL_ERROR "PETSc could not be found. Be sure to set PETSC_DIR and PETSC_ARCH.") endif () -petsc_get_version() if (petsc_conf_rules AND petsc_conf_variables AND NOT petsc_config_current) + petsc_get_version() + # Put variables into environment since they are needed to get # configuration (petscvariables) in the PETSc makefile set (ENV{PETSC_DIR} "${PETSC_DIR}") @@ -106,12 +142,12 @@ if (petsc_conf_rules AND petsc_conf_variables AND NOT petsc_config_current) include ${petsc_conf_rules} include ${petsc_conf_variables} show : - -@echo -n \${\${VARIABLE}} +\t-@echo -n \${\${VARIABLE}} ") macro (PETSC_GET_VARIABLE name var) set (${var} "NOTFOUND" CACHE INTERNAL "Cleared" FORCE) - execute_process (COMMAND ${CMAKE_MAKE_PROGRAM} --no-print-directory -f ${petsc_config_makefile} show VARIABLE=${name} + execute_process (COMMAND ${MAKE_EXECUTABLE} --no-print-directory -f ${petsc_config_makefile} show VARIABLE=${name} OUTPUT_VARIABLE ${var} RESULT_VARIABLE petsc_return) endmacro (PETSC_GET_VARIABLE) @@ -120,19 +156,48 @@ show : petsc_get_variable (PETSC_CCPPFLAGS petsc_cpp_line) petsc_get_variable (PETSC_INCLUDE petsc_include) petsc_get_variable (PCC petsc_cc) + petsc_get_variable (PCC_FLAGS petsc_cc_flags) petsc_get_variable (MPIEXEC petsc_mpiexec) # We are done with the temporary Makefile, calling PETSC_GET_VARIABLE after this point is invalid! file (REMOVE ${petsc_config_makefile}) - include (cmake/ResolveCompilerPaths.cmake) + include (ResolveCompilerPaths) # Extract include paths and libraries from compile command line resolve_includes (petsc_includes_all "${petsc_cpp_line}") + #on windows we need to make sure we're linking against the right + #runtime library + if (WIN32) + if (petsc_cc_flags MATCHES "-MT") + set(using_md False) + foreach(flag_var + CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE + CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) + if(${flag_var} MATCHES "/MD") + set(using_md True) + endif(${flag_var} MATCHES "/MD") + endforeach(flag_var) + if(${using_md} MATCHES "True") + message(WARNING "PETSc was built with /MT, but /MD is currently set. + See http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_build_my_MSVC_application_with_a_static_runtime.3F") + endif(${using_md} MATCHES "True") + endif (petsc_cc_flags MATCHES "-MT") + endif (WIN32) + + include (CorrectWindowsPaths) + convert_cygwin_path(petsc_lib_dir) message (STATUS "petsc_lib_dir ${petsc_lib_dir}") macro (PETSC_FIND_LIBRARY suffix name) set (PETSC_LIBRARY_${suffix} "NOTFOUND" CACHE INTERNAL "Cleared" FORCE) # Clear any stale value, if we got here, we need to find it again - find_library (PETSC_LIBRARY_${suffix} NAMES ${name} HINTS ${petsc_lib_dir} NO_DEFAULT_PATH) + if (WIN32) + set (libname lib${name}) #windows expects "libfoo", linux expects "foo" + else (WIN32) + set (libname ${name}) + endif (WIN32) + find_library (PETSC_LIBRARY_${suffix} NAMES ${libname} HINTS ${petsc_lib_dir} NO_DEFAULT_PATH) set (PETSC_LIBRARIES_${suffix} "${PETSC_LIBRARY_${suffix}}") mark_as_advanced (PETSC_LIBRARY_${suffix}) endmacro (PETSC_FIND_LIBRARY suffix name) @@ -169,29 +234,42 @@ show : message (STATUS "Recognized PETSc install with single library for all packages") endif () - include (CheckCSourceRuns) + include(Check${PETSC_LANGUAGE_BINDINGS}SourceRuns) macro (PETSC_TEST_RUNS includes libraries runs) - multipass_c_source_runs ("${includes}" "${libraries}" " + if(${PETSC_LANGUAGE_BINDINGS} STREQUAL "C") + set(_PETSC_ERR_FUNC "CHKERRQ(ierr)") + elseif(${PETSC_LANGUAGE_BINDINGS} STREQUAL "CXX") + set(_PETSC_ERR_FUNC "CHKERRXX(ierr)") + endif() + if (PETSC_VERSION VERSION_GREATER 3.1) + set (_PETSC_TSDestroy "TSDestroy(&ts)") + else () + set (_PETSC_TSDestroy "TSDestroy(ts)") + endif () + + set(_PETSC_TEST_SOURCE " static const char help[] = \"PETSc test program.\"; -#include \"petscts.h\" +#include int main(int argc,char *argv[]) { PetscErrorCode ierr; TS ts; - ierr = PetscInitialize(&argc,&argv,0,help);CHKERRQ(ierr); - ierr = TSCreate(PETSC_COMM_WORLD,&ts);CHKERRQ(ierr); - ierr = TSSetFromOptions(ts);CHKERRQ(ierr); - ierr = TSDestroy(ts);CHKERRQ(ierr); - ierr = PetscFinalize();CHKERRQ(ierr); + ierr = PetscInitialize(&argc,&argv,0,help);${_PETSC_ERR_FUNC}; + ierr = TSCreate(PETSC_COMM_WORLD,&ts);${_PETSC_ERR_FUNC}; + ierr = TSSetFromOptions(ts);${_PETSC_ERR_FUNC}; + ierr = ${_PETSC_TSDestroy};${_PETSC_ERR_FUNC}; + ierr = PetscFinalize();${_PETSC_ERR_FUNC}; return 0; } -" ${runs}) +") + multipass_source_runs ("${includes}" "${libraries}" "${_PETSC_TEST_SOURCE}" ${runs} "${PETSC_LANGUAGE_BINDINGS}") if (${${runs}}) set (PETSC_EXECUTABLE_RUNS "YES" CACHE BOOL - "Can the system successfully run a PETSc executable? This variable can be manually set to \"YES\" to force CMake to accept a given PETSc configuration, but this will almost always result in a broken build. If you change PETSC_DIR, PETSC_ARCH, or PETSC_CURRENT you would have to reset this variable." FORCE) + "Can the system successfully run a PETSc executable? This variable can be manually set to \"YES\" to force CMake to accept a given PETSc configuration, but this will almost always result in a broken build. If you change PETSC_DIR, PETSC_ARCH, or PETSC_CURRENT you would have to reset this variable." FORCE) endif (${${runs}}) endmacro (PETSC_TEST_RUNS) + find_path (PETSC_INCLUDE_DIR petscts.h HINTS "${PETSC_DIR}" PATH_SUFFIXES include NO_DEFAULT_PATH) find_path (PETSC_INCLUDE_CONF petscconf.h HINTS "${PETSC_DIR}" PATH_SUFFIXES "${PETSC_ARCH}/include" "bmake/${PETSC_ARCH}" NO_DEFAULT_PATH) mark_as_advanced (PETSC_INCLUDE_DIR PETSC_INCLUDE_CONF) @@ -201,7 +279,7 @@ int main(int argc,char *argv[]) { if (petsc_works_minimal) message (STATUS "Minimal PETSc includes and libraries work. This probably means we are building with shared libs.") set (petsc_includes_needed "${petsc_includes_minimal}") - else (petsc_works_minimal) # Minimal includes fail, see if just adding full includes fixes it + else (petsc_works_minimal) # Minimal includes fail, see if just adding full includes fixes it petsc_test_runs ("${petsc_includes_all}" "${PETSC_LIBRARIES_TS}" petsc_works_allincludes) if (petsc_works_allincludes) # It does, we just need all the includes ( message (STATUS "PETSc requires extra include paths, but links correctly with only interface libraries. This is an unexpected configuration (but it seems to work fine).") @@ -209,21 +287,21 @@ int main(int argc,char *argv[]) { else (petsc_works_allincludes) # We are going to need to link the external libs explicitly resolve_libraries (petsc_libraries_external "${petsc_libs_external}") foreach (pkg SYS VEC MAT DM KSP SNES TS ALL) - list (APPEND PETSC_LIBRARIES_${pkg} ${petsc_libraries_external}) + list (APPEND PETSC_LIBRARIES_${pkg} ${petsc_libraries_external}) endforeach (pkg) petsc_test_runs ("${petsc_includes_minimal}" "${PETSC_LIBRARIES_TS}" petsc_works_alllibraries) if (petsc_works_alllibraries) - message (STATUS "PETSc only need minimal includes, but requires explicit linking to all dependencies. This is expected when PETSc is built with static libraries.") - set (petsc_includes_needed ${petsc_includes_minimal}) + message (STATUS "PETSc only need minimal includes, but requires explicit linking to all dependencies. This is expected when PETSc is built with static libraries.") + set (petsc_includes_needed ${petsc_includes_minimal}) else (petsc_works_alllibraries) - # It looks like we really need everything, should have listened to Matt - set (petsc_includes_needed ${petsc_includes_all}) - petsc_test_runs ("${petsc_includes_all}" "${PETSC_LIBRARIES_TS}" petsc_works_all) - if (petsc_works_all) # We fail anyways - message (STATUS "PETSc requires extra include paths and explicit linking to all dependencies. This probably means you have static libraries and something unexpected in PETSc headers.") - else (petsc_works_all) # We fail anyways - message (STATUS "PETSc could not be used, maybe the install is broken.") - endif (petsc_works_all) + # It looks like we really need everything, should have listened to Matt + set (petsc_includes_needed ${petsc_includes_all}) + petsc_test_runs ("${petsc_includes_all}" "${PETSC_LIBRARIES_TS}" petsc_works_all) + if (petsc_works_all) # We fail anyways + message (STATUS "PETSc requires extra include paths and explicit linking to all dependencies. This probably means you have static libraries and something unexpected in PETSc headers.") + else (petsc_works_all) # We fail anyways + message (STATUS "PETSc could not be used, maybe the install is broken.") + endif (petsc_works_all) endif (petsc_works_alllibraries) endif (petsc_works_allincludes) endif (petsc_works_minimal) diff --git a/AMDiS/cmake3/FindPackageMultipass.cmake b/AMDiS/cmake3/FindPackageMultipass.cmake index 7199e026db92465e81d2e730a4720a722fce4ff4..fbf06a7f0fc3aa20a0387f091eac4f74e7ffdab2 100644 --- a/AMDiS/cmake3/FindPackageMultipass.cmake +++ b/AMDiS/cmake3/FindPackageMultipass.cmake @@ -21,7 +21,14 @@ # # Make temporary files, run programs, etc, to determine FOO_INCLUDES and FOO_LIBRARIES # endif (NOT foo_current) # +# MULTIPASS_SOURCE_RUNS (Name INCLUDES LIBRARIES SOURCE RUNS LANGUAGE) +# Always runs the given test, use this when you need to re-run tests +# because parent variables have made old cache entries stale. The LANGUAGE +# variable is either C or CXX indicating which compiler the test should +# use. # MULTIPASS_C_SOURCE_RUNS (Name INCLUDES LIBRARIES SOURCE RUNS) +# DEPRECATED! This is only included for backwards compatability. Use +# the more general MULTIPASS_SOURCE_RUNS instead. # Always runs the given test, use this when you need to re-run tests # because parent variables have made old cache entries stale. @@ -39,7 +46,7 @@ macro (FIND_PACKAGE_MULTIPASS _name _current) # The name of the stored value for the given state set (_stored_var PACKAGE_MULTIPASS_${_NAME}_${_state}) if (NOT "${${_stored_var}}" STREQUAL "${${_NAME}_${_state}}") - set (_states_current "NO") + set (_states_current "NO") endif (NOT "${${_stored_var}}" STREQUAL "${${_NAME}_${_state}}") set (${_stored_var} "${${_NAME}_${_state}}" CACHE INTERNAL "Stored state for ${_name}." FORCE) list (REMOVE_AT _args 0) @@ -61,7 +68,7 @@ macro (FIND_PACKAGE_MULTIPASS _name _current) if (_cmd STREQUAL "DEPENDENTS") list (REMOVE_AT _args 0) foreach (dep ${_args}) - set (${_NAME}_${dep} "NOTFOUND" CACHE INTERNAL "Cleared" FORCE) + set (${_NAME}_${dep} "NOTFOUND" CACHE INTERNAL "Cleared" FORCE) endforeach (dep) endif (_cmd STREQUAL "DEPENDENTS") set (${_NAME}_FOUND "NOTFOUND" CACHE INTERNAL "Cleared" FORCE) @@ -70,9 +77,9 @@ macro (FIND_PACKAGE_MULTIPASS _name _current) endmacro (FIND_PACKAGE_MULTIPASS) -macro (MULTIPASS_C_SOURCE_RUNS includes libraries source runs) - include (CheckCSourceRuns) - # This is a ridiculous hack. CHECK_C_SOURCE_* thinks that if the +macro (MULTIPASS_SOURCE_RUNS includes libraries source runs language) + include (Check${language}SourceRuns) + # This is a ridiculous hack. CHECK_${language}_SOURCE_* thinks that if the # *name* of the return variable doesn't change, then the test does # not need to be re-run. We keep an internal count which we # increment to guarantee that every test name is unique. If we've @@ -86,6 +93,14 @@ macro (MULTIPASS_C_SOURCE_RUNS includes libraries source runs) set (testname MULTIPASS_TEST_${MULTIPASS_TEST_COUNT}_${runs}) set (CMAKE_REQUIRED_INCLUDES ${includes}) set (CMAKE_REQUIRED_LIBRARIES ${libraries}) - check_c_source_runs ("${source}" ${testname}) + if(${language} STREQUAL "C") + check_c_source_runs ("${source}" ${testname}) + elseif(${language} STREQUAL "CXX") + check_cxx_source_runs ("${source}" ${testname}) + endif() set (${runs} "${${testname}}") +endmacro (MULTIPASS_SOURCE_RUNS) + +macro (MULTIPASS_C_SOURCE_RUNS includes libraries source runs) + multipass_source_runs("${includes}" "${libraries}" "${source}" ${runs} "C") endmacro (MULTIPASS_C_SOURCE_RUNS) diff --git a/AMDiS/cmake3/ResolveCompilerPaths.cmake b/AMDiS/cmake3/ResolveCompilerPaths.cmake index b398025e95518511f4e06ba218dcef386a4e8eaa..54787fa38ffa50136414e6c788c50fb3c63746b8 100644 --- a/AMDiS/cmake3/ResolveCompilerPaths.cmake +++ b/AMDiS/cmake3/ResolveCompilerPaths.cmake @@ -38,23 +38,34 @@ # # assuming both directories exist. # Note: as currently implemented, the -I/string will be picked up mistakenly (cry, cry) +include (CorrectWindowsPaths) macro (RESOLVE_LIBRARIES LIBS LINK_LINE) - string (REGEX MATCHALL "((-L|-l|-Wl)([^\" ]+|\"[^\"]+\")|/[^\" ]+(a|so|dll))" _all_tokens "${LINK_LINE}") - set (_libs_found) - set (_directory_list) + string (REGEX MATCHALL "((-L|-l|-Wl)([^\" ]+|\"[^\"]+\")|[^\" ]+\\.(a|so|dll|lib))" _all_tokens "${LINK_LINE}") + set (_libs_found "") + set (_directory_list "") foreach (token ${_all_tokens}) if (token MATCHES "-L([^\" ]+|\"[^\"]+\")") # If it's a library path, add it to the list string (REGEX REPLACE "^-L" "" token ${token}) string (REGEX REPLACE "//" "/" token ${token}) + convert_cygwin_path(token) list (APPEND _directory_list ${token}) - elseif (token MATCHES "^(-l([^\" ]+|\"[^\"]+\")|/[^\" ]+(a|so|dll))") + elseif (token MATCHES "^(-l([^\" ]+|\"[^\"]+\")|[^\" ]+\\.(a|so|dll|lib))") # It's a library, resolve the path by looking in the list and then (by default) in system directories - string (REGEX REPLACE "^-l" "" token ${token}) - set (_root) - if (token MATCHES "^/") # We have an absolute path, add root to the search path - set (_root "/") + if (WIN32) #windows expects "libfoo", linux expects "foo" + string (REGEX REPLACE "^-l" "lib" token ${token}) + else (WIN32) + string (REGEX REPLACE "^-l" "" token ${token}) + endif (WIN32) + set (_root "") + if (token MATCHES "^/") # We have an absolute path + #separate into a path and a library name: + string (REGEX MATCH "[^/]*\\.(a|so|dll|lib)$" libname ${token}) + string (REGEX MATCH ".*[^${libname}$]" libpath ${token}) + convert_cygwin_path(libpath) + set (_directory_list ${_directory_list} ${libpath}) + set (token ${libname}) endif (token MATCHES "^/") set (_lib "NOTFOUND" CACHE FILEPATH "Cleared" FORCE) find_library (_lib ${token} HINTS ${_directory_list} ${_root}) @@ -78,10 +89,11 @@ endmacro (RESOLVE_LIBRARIES) macro (RESOLVE_INCLUDES INCS COMPILE_LINE) string (REGEX MATCHALL "-I([^\" ]+|\"[^\"]+\")" _all_tokens "${COMPILE_LINE}") - set (_incs_found) + set (_incs_found "") foreach (token ${_all_tokens}) string (REGEX REPLACE "^-I" "" token ${token}) string (REGEX REPLACE "//" "/" token ${token}) + convert_cygwin_path(token) if (EXISTS ${token}) list (APPEND _incs_found ${token}) else (EXISTS ${token}) diff --git a/AMDiS/cmake3/amdis_compositeFEM.cmake b/AMDiS/cmake3/amdis_compositeFEM.cmake index 76cfebac2bec2bd29f3ab26519680c847c332621..a234645eff5c20b6862e25da0131f673cc1edd47 100644 --- a/AMDiS/cmake3/amdis_compositeFEM.cmake +++ b/AMDiS/cmake3/amdis_compositeFEM.cmake @@ -23,4 +23,7 @@ target_link_libraries(amdis_compositeFEM amdis) file(GLOB COMPOSITE_HEADERS "${COMPOSITE_SOURCE_DIR}/*.h*") install(FILES ${COMPOSITE_HEADERS} DESTINATION include/amdis/compositeFEM) -install(TARGETS amdis_compositeFEM DESTINATION lib/amdis/ ) \ No newline at end of file + +set_target_properties(amdis_compositeFEM PROPERTIES OUTPUT_NAME amdiscompositefem${POSTFIX} + DEBUG_OUTPUT_NAME amdiscompositefem${POSTFIX}d) +install(TARGETS amdis_compositeFEM DESTINATION lib/amdis/ ) diff --git a/AMDiS/cmake3/amdis_extensions.cmake b/AMDiS/cmake3/amdis_extensions.cmake index a6efc90b11bc5be6f0138ec7514789e5b576b070..89b63397fb5f70fdbc7f11434c4dd0555b32cf1d 100644 --- a/AMDiS/cmake3/amdis_extensions.cmake +++ b/AMDiS/cmake3/amdis_extensions.cmake @@ -1,4 +1,3 @@ - if (ENABLE_EXTENSIONS) option(ENABLE_BASE_PROBLEMS "Use base_problems" true) mark_as_advanced(ENABLE_BASE_PROBLEMS) @@ -95,6 +94,8 @@ if (ENABLE_EXTENSIONS) file(GLOB HEADERS "${EXTENSIONS_DIR}/pugixml/src/*.hpp") install(FILES ${HEADERS} DESTINATION include/amdis/extensions/pugixml/) + set_target_properties(amdis_extensions PROPERTIES OUTPUT_NAME amdisextensions${POSTFIX} + DEBUG_OUTPUT_NAME amdisextensions${POSTFIX}d) install(TARGETS amdis_extensions DESTINATION lib/amdis/) endif (EXTENSIONS_DIR) diff --git a/AMDiS/cmake3/amdis_parallel.cmake b/AMDiS/cmake3/amdis_parallel.cmake index 08a213f8bffb2e672a89194b8d635d652b3234d5..ab09f39cb3177bdb8b78cb2a708d5d90bdb18693 100644 --- a/AMDiS/cmake3/amdis_parallel.cmake +++ b/AMDiS/cmake3/amdis_parallel.cmake @@ -14,6 +14,7 @@ if (ENABLE_PARALLEL_DOMAIN) ${SOURCE_DIR}/parallel/MeshManipulation.cc ${SOURCE_DIR}/parallel/MeshPartitioner.cc ${SOURCE_DIR}/parallel/MpiHelper.cc + ${SOURCE_DIR}/parallel/ParallelDebug.cc ${SOURCE_DIR}/parallel/ParallelDofMapping.cc ${SOURCE_DIR}/parallel/ParallelProblemStat.cc ${SOURCE_DIR}/parallel/ParallelSolver.cc @@ -22,95 +23,54 @@ if (ENABLE_PARALLEL_DOMAIN) ${SOURCE_DIR}/parallel/StdMpi.cc ) - target_sources(amdis_debug INTERFACE - ${SOURCE_DIR}/parallel/ParallelDebug.cc - ) - target_compile_definitions(amdis_parallel INTERFACE HAVE_PARALLEL_DOMAIN_AMDIS=1) - # MPI is required - find_package(MPI REQUIRED) - target_include_directories(amdis_parallel INTERFACE - ${MPI_CXX_INCLUDE_PATH}) - target_compile_options(amdis_parallel INTERFACE - ${MPI_CXX_COMPILE_FLAGS}) - string(STRIP " ${MPI_CXX_LINK_FLAGS} " MPI_CXX_LINK_FLAGS_) - target_link_libraries(amdis_parallel INTERFACE - ${MPI_CXX_LINK_FLAGS_} ${MPI_CXX_LIBRARIES}) - - # PETSc library is required - set(PETSC_EXECUTABLE_RUNS ON) - include(find_petsc) - if (PETSc_FOUND) - target_include_directories(amdis_parallel INTERFACE - ${PETSC_DIR}/include - ${PETSC_DIR}/${PETSC_ARCH}/include) + target_enable_mpi(amdis_parallel INTERFACE) + target_enable_petsc(amdis_parallel INTERFACE) - # parmetis is required - find_file(PARMETIS_HEADER_FILE "parmetis.h" HINTS ${PETSC_DIR}/include ${PARMETIS_DIR}/include ) - if (PARMETIS_HEADER_FILE) - get_filename_component(PARMETIS_INCLUDE_PATH "${PARMETIS_HEADER_FILE}" PATH CACHE) - target_include_directories(amdis_parallel INTERFACE ${PARMETIS_INCLUDE_PATH}) - else() - message(FATAL_ERROR "Could not find ParMetis header file 'parmetis.h'!") - endif (PARMETIS_HEADER_FILE) + # add support for the zoltan library + if (ENABLE_ZOLTAN) + target_enable_zoltan(amdis_parallel INTERFACE) + target_sources(amdis PRIVATE + ${SOURCE_DIR}/parallel/ZoltanPartitioner.cc) + endif (ENABLE_ZOLTAN) - # add support for the zoltan library - if (ENABLE_ZOLTAN) - find_file(ZOLTAN_HEADER_FILE "zoltan_cpp.h" HINTS ${ZOLTAN_DIR}/include ${PETSC_DIR}/include) - if (ZOLTAN_HEADER_FILE) - get_filename_component(ZOLTAN_HEADER_DIR "${ZOLTAN_HEADER_FILE}" PATH CACHE) - target_include_directories(amdis_parallel INTERFACE ${ZOLTAN_HEADER_DIR}) - else() - message(FATAL_ERROR "Could not find Zoltan include file 'zoltan_cpp.h'!") - endif(ZOLTAN_HEADER_FILE) + if (ENABLE_BDDCML) + target_compile_definitions(amdis_parallel INTERFACE HAVE_BDDCML=1) + target_sources(amdis PRIVATE + ${SOURCE_DIR}/parallel/BddcMlSolver.cc) + endif (ENABLE_BDDCML) - target_compile_definitions(amdis_parallel INTERFACE HAVE_ZOLTAN=1) - target_sources(amdis PRIVATE - ${SOURCE_DIR}/parallel/ZoltanPartitioner.cc) - endif (ENABLE_ZOLTAN) - - if (ENABLE_BDDCML) - target_compile_definitions(amdis_parallel INTERFACE HAVE_BDDCML=1) - target_sources(amdis PRIVATE - ${SOURCE_DIR}/parallel/BddcMlSolver.cc) - endif (ENABLE_BDDCML) + # add some more source-files that need petsc + target_sources(amdis PRIVATE + ${SOURCE_DIR}/parallel/MatrixNnzStructure.cc + ${SOURCE_DIR}/parallel/ParallelCoarseSpaceSolver.cc + ${SOURCE_DIR}/parallel/PetscHelper.cc + ${SOURCE_DIR}/parallel/PetscSolver.cc + ${SOURCE_DIR}/parallel/PetscSolverGlobalMatrix.cc + ${SOURCE_DIR}/parallel/PetscSolverGlobalBlockMatrix.cc + ${SOURCE_DIR}/solver/PetscTypes.cc + ) - # add some more source-files that need petsc + if (ENABLE_PARALLEL_SOLVERS) target_sources(amdis PRIVATE - ${SOURCE_DIR}/parallel/MatrixNnzStructure.cc - ${SOURCE_DIR}/parallel/ParallelCoarseSpaceSolver.cc - ${SOURCE_DIR}/parallel/PetscHelper.cc - ${SOURCE_DIR}/parallel/PetscSolver.cc - ${SOURCE_DIR}/parallel/PetscSolverGlobalMatrix.cc - ${SOURCE_DIR}/parallel/PetscSolverGlobalBlockMatrix.cc - ${SOURCE_DIR}/solver/PetscTypes.cc + ${SOURCE_DIR}/parallel/PetscSolverFeti.cc + ${SOURCE_DIR}/parallel/PetscSolverFetiDebug.cc + ${SOURCE_DIR}/parallel/PetscSolverFetiMonitor.cc + ${SOURCE_DIR}/parallel/PetscSolverFetiOperators.cc + ${SOURCE_DIR}/parallel/PetscSolverFetiTimings.cc + ${SOURCE_DIR}/parallel/PetscSolverNavierStokes.cc + ${SOURCE_DIR}/parallel/PetscSolverNSCH.cc + ${SOURCE_DIR}/parallel/PetscSolverCahnHilliard2.cc + ${SOURCE_DIR}/parallel/PetscSolverCahnHilliard.cc + ${SOURCE_DIR}/parallel/PetscSolverSchur.cc ) - - if (ENABLE_PARALLEL_SOLVERS) - target_sources(amdis PRIVATE - ${SOURCE_DIR}/parallel/PetscSolverFeti.cc - ${SOURCE_DIR}/parallel/PetscSolverFetiDebug.cc - ${SOURCE_DIR}/parallel/PetscSolverFetiMonitor.cc - ${SOURCE_DIR}/parallel/PetscSolverFetiOperators.cc - ${SOURCE_DIR}/parallel/PetscSolverFetiTimings.cc - ${SOURCE_DIR}/parallel/PetscSolverNavierStokes.cc - ${SOURCE_DIR}/parallel/PetscSolverNSCH.cc - ${SOURCE_DIR}/parallel/PetscSolverCahnHilliard2.cc - ${SOURCE_DIR}/parallel/PetscSolverCahnHilliard.cc - ${SOURCE_DIR}/parallel/PetscSolverSchur.cc - ) - target_compile_definitions(amdis_parallel INTERFACE - HAVE_PARALLEL_SOLVERS=1) - endif (ENABLE_PARALLEL_SOLVERS) - target_compile_definitions(amdis_parallel INTERFACE - HAVE_PARALLEL_PETSC=1 - PETSC_VERSION=${PETSC_VERSION}) + HAVE_PARALLEL_SOLVERS=1) + endif (ENABLE_PARALLEL_SOLVERS) - target_link_libraries(amdis amdis_parallel ${PETSC_LIBRARIES} blas lapack) - endif (PETSc_FOUND) + target_link_libraries(amdis amdis_parallel) # specify how to install this target: # ----------------------------------- @@ -121,6 +81,9 @@ if (ENABLE_PARALLEL_DOMAIN) install(FILES ${BASE_DIR}/cmake3/ResolveCompilerPaths.cmake ${BASE_DIR}/cmake3/FindPackageMultipass.cmake - ${BASE_DIR}/cmake3/find_petsc.cmake + ${BASE_DIR}/cmake3/CorrectWindowsPaths.cmake + ${BASE_DIR}/cmake3/FindPETSc.cmake + ${BASE_DIR}/cmake3/target_enable_petsc.cmake + ${BASE_DIR}/cmake3/target_enable_zoltan.cmake DESTINATION share/amdis/) endif (ENABLE_PARALLEL_DOMAIN) diff --git a/AMDiS/cmake3/amdis_reinit.cmake b/AMDiS/cmake3/amdis_reinit.cmake index 7e94a0ab62ea9c983623d17a5366fe5849b83284..4527fb15f628bb08e152d312b59217a2ffa33919 100644 --- a/AMDiS/cmake3/amdis_reinit.cmake +++ b/AMDiS/cmake3/amdis_reinit.cmake @@ -2,6 +2,7 @@ SET(COMPOSITE_SOURCE_DIR ${SOURCE_DIR}/reinit) set(REINIT_SOURCE_DIR ${SOURCE_DIR}/reinit) + file(GLOB REINIT_SRC ${REINIT_SOURCE_DIR}/*.cc) add_library(amdis_reinit ${REINIT_SRC}) add_library(AMDiS::reinit ALIAS amdis_reinit) @@ -16,4 +17,8 @@ target_link_libraries(amdis_reinit amdis) file(GLOB RINIT_HEADERS "${REINIT_SOURCE_DIR}/*.h*") install(FILES ${RINIT_HEADERS} DESTINATION include/amdis/reinit) -install(TARGETS amdis_reinit DESTINATION lib/amdis/ ) \ No newline at end of file + + +set_target_properties(amdis_reinit PROPERTIES OUTPUT_NAME amdisreinit${POSTFIX} + DEBUG_OUTPUT_NAME amdisreinit${POSTFIX}d) +install(TARGETS amdis_reinit DESTINATION lib/amdis/ ) diff --git a/AMDiS/cmake3/amdis_seq_petsc.cmake b/AMDiS/cmake3/amdis_seq_petsc.cmake new file mode 100644 index 0000000000000000000000000000000000000000..d482098c65dd9ad6bcf7d3c3a858afaa2decf067 --- /dev/null +++ b/AMDiS/cmake3/amdis_seq_petsc.cmake @@ -0,0 +1,10 @@ +if (ENABLE_SEQ_PETSC) + target_enable_mpi(amdis PRIVATE) + target_enable_petsc(amdis PRIVATE) + + target_compile_definitions(amdis PRIVATE HAVE_SEQ_PETSC=1) + + target_sources(amdis PRIVATE + ${SOURCE_DIR}/solver/PetscSolver.cc + ${SOURCE_DIR}/solver/PetscTypes.cc) +endif (ENABLE_SEQ_PETSC) diff --git a/AMDiS/cmake3/dummy.cc b/AMDiS/cmake3/dummy.cc deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/AMDiS/cmake3/find_boost.cmake b/AMDiS/cmake3/find_boost.cmake deleted file mode 100644 index 36ad87503c015fc4765f9f880be6bd5d42303892..0000000000000000000000000000000000000000 --- a/AMDiS/cmake3/find_boost.cmake +++ /dev/null @@ -1,32 +0,0 @@ -if (BOOST_ROOT) - file(TO_CMAKE_PATH ${BOOST_ROOT} BOOST_ROOT) -endif (BOOST_ROOT) -if (BOOST_LIBRARYDIR) - file(TO_CMAKE_PATH ${BOOST_LIBRARYDIR} BOOST_LIBRARYDIR) -endif (BOOST_LIBRARYDIR) - -set(BOOST_VERSION "1.48") -set(BOOST_LIBS_REQUIRED system iostreams filesystem program_options date_time) -if (WIN32) - list(APPEND BOOST_LIBS_REQUIRED zlib) - if (ENABLE_COMPRESSION OR AMDIS_NEED_COMPRESSION) - list(APPEND BOOST_LIBS_REQUIRED bzip2) - endif (ENABLE_COMPRESSION OR AMDIS_NEED_COMPRESSION) -endif (WIN32) - -if (NOT BUILD_SHARED_LIBS) - set(Boost_USE_STATIC_LIBS ON) -endif (NOT BUILD_SHARED_LIBS) -find_package(Boost ${BOOST_VERSION} REQUIRED ${BOOST_LIBS_REQUIRED}) -if (Boost_FOUND) - add_library(boost INTERFACE) - target_include_directories(boost INTERFACE ${Boost_INCLUDE_DIR}) - target_link_libraries(boost INTERFACE ${Boost_LIBRARIES}) - - target_link_libraries(amdis_base INTERFACE boost) - - if (MSVC_SHARED_LIBS) - link_directories(${Boost_LIBRARY_DIRS}) - target_compile_definitions(amdis_base INTERFACE ${Boost_LIB_DIAGNOSTIC_DEFINITIONS}) - endif (MSVC_SHARED_LIBS) -endif (Boost_FOUND) diff --git a/AMDiS/cmake3/find_mtl4.cmake b/AMDiS/cmake3/find_mtl4.cmake deleted file mode 100644 index ec34f06bf407b8c78738bad56cc50a81f03f61bf..0000000000000000000000000000000000000000 --- a/AMDiS/cmake3/find_mtl4.cmake +++ /dev/null @@ -1,43 +0,0 @@ -add_library(mtl4 INTERFACE) - -if (IS_AMDISCONFIG) - target_include_directories(mtl4 INTERFACE ${AMDIS_INCLUDE_DIR}/mtl4) -else () - target_include_directories(mtl4 INTERFACE ${BASE_DIR}/lib/mtl4) -endif (IS_AMDISCONFIG) - -include(test_compile_features) -target_enable_cxx11(MTL_ENABLE_CXX11 mtl4 INTERFACE) - -if (MTL_ENABLE_CXX11) - set (CXX_ELEVEN_FEATURE_LIST "MOVE" "AUTO" "RANGEDFOR" "INITLIST" "STATICASSERT" "DEFAULTIMPL") - foreach (feature ${CXX_ELEVEN_FEATURE_LIST}) - target_compile_definitions(mtl4 INTERFACE MTL_WITH_${feature}) - endforeach () -endif (MTL_ENABLE_CXX11) - - -if (ENABLE_OPENMP) - find_package(OpenMP REQUIRED) - if (OPENMP_FOUND) - target_compile_definitions(mtl4 INTERFACE MTL_WITH_OPENMP) - target_compile_options(mtl4 INTERFACE ${OpenMP_CXX_FLAGS}) - else () - message(FATAL_ERROR "OpenMP not found") - endif (OPENMP_FOUND) -endif (ENABLE_OPENMP) - - -if (NOT IS_AMDISCONFIG) - # specify how to install this target: - # ----------------------------------- - install(DIRECTORY ${BASE_DIR}/lib/mtl4/ - DESTINATION include/amdis/mtl4/ - FILES_MATCHING PATTERN "*.hpp" - PATTERN ".svn" EXCLUDE - PATTERN ".svn/*" EXCLUDE - PATTERN "mtl4/libs" EXCLUDE - PATTERN "mtl4/extern" EXCLUDE) -endif (NOT IS_AMDISCONFIG) - -target_link_libraries(amdis_base INTERFACE mtl4) diff --git a/AMDiS/cmake3/find_petsc.cmake b/AMDiS/cmake3/find_petsc.cmake deleted file mode 100644 index 710749db3f68987a56a0b68c35567d60cc809e9f..0000000000000000000000000000000000000000 --- a/AMDiS/cmake3/find_petsc.cmake +++ /dev/null @@ -1,257 +0,0 @@ -# source: https://github.com/jedbrown/cmake-modules/blob/master/FindPETSc.cmake -# - Try to find PETSc -# Once done this will define -# -# PETSC_FOUND - system has PETSc -# PETSC_INCLUDES - the PETSc include directories -# PETSC_LIBRARIES - Link these to use PETSc -# PETSC_COMPILER - Compiler used by PETSc, helpful to find a compatible MPI -# PETSC_DEFINITIONS - Compiler switches for using PETSc -# PETSC_MPIEXEC - Executable for running MPI programs -# PETSC_VERSION - Version string (MAJOR.MINOR.SUBMINOR) -# -# Hack: PETSC_VERSION currently decides on the version based on the -# layout. Otherwise we need to run C code to determine the version. -# -# Setting these changes the behavior of the search -# PETSC_DIR - directory in which PETSc resides -# PETSC_ARCH - build architecture -# -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. -# - -function (petsc_get_version) - if (EXISTS "${PETSC_DIR}/include/petscversion.h") - file (STRINGS "${PETSC_DIR}/include/petscversion.h" vstrings REGEX "#define PETSC_VERSION_(RELEASE|MAJOR|MINOR|SUBMINOR|PATCH) ") - foreach (line ${vstrings}) - string (REGEX REPLACE " +" ";" fields ${line}) # break line into three fields (the first is always "#define") - list (GET fields 1 var) - list (GET fields 2 val) - set (${var} ${val} PARENT_SCOPE) - set (${var} ${val}) # Also in local scope so we have access below - endforeach () - if (PETSC_VERSION_RELEASE) - set (PETSC_VERSION "${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}p${PETSC_VERSION_PATCH}" PARENT_SCOPE) - else () - # make dev version compare higher than any patch level of a released version - set (PETSC_VERSION "${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}.99" PARENT_SCOPE) - endif () - else () - message (SEND_ERROR "PETSC_DIR can not be used, ${PETSC_DIR}/include/petscversion.h does not exist") - endif () -endfunction () - -if (PETSC_DIR) - file(TO_CMAKE_PATH ${PETSC_DIR} PETSC_DIR) -endif (PETSC_DIR) - -find_path (PETSC_DIR include/petsc.h - HINTS ${AMDIS_PETSC_DIR} $ENV{HOME}/petsc /usr/lib/petsc ENV PETSC_DIR - DOC "PETSc Directory") - -if (PETSC_DIR AND NOT PETSC_ARCH) - set (_petsc_arches - $ENV{PETSC_ARCH} # If set, use environment variable first - linux-gnu-c-debug linux-gnu-c-opt # Debian defaults - x86_64-unknown-linux-gnu i386-unknown-linux-gnu) - set (petscconf "NOTFOUND" CACHE FILEPATH "Cleared" FORCE) - foreach (arch ${_petsc_arches}) - if (NOT PETSC_ARCH) - find_path (petscconf petscconf.h - HINTS ${PETSC_DIR} - PATH_SUFFIXES ${arch}/include bmake/${arch} - NO_DEFAULT_PATH) - if (petscconf) - set (PETSC_ARCH "${arch}" CACHE STRING "PETSc build architecture") - endif (petscconf) - endif (NOT PETSC_ARCH) - endforeach (arch) - set (petscconf "NOTFOUND" CACHE INTERNAL "Scratch variable" FORCE) -endif (PETSC_DIR AND NOT PETSC_ARCH) - -set (petsc_slaves LIBRARIES_SYS LIBRARIES_VEC LIBRARIES_MAT LIBRARIES_DM LIBRARIES_KSP LIBRARIES_SNES LIBRARIES_TS - INCLUDE_DIR INCLUDE_CONF) -include (FindPackageMultipass) -find_package_multipass (PETSc petsc_config_current - STATES DIR ARCH - DEPENDENTS INCLUDES LIBRARIES COMPILER MPIEXEC ${petsc_slaves}) - -# Determine whether the PETSc layout is old-style (through 2.3.3) or -# new-style (>= 3.0.0) -if (EXISTS "${PETSC_DIR}/${PETSC_ARCH}/include/petscconf.h") # > 2.3.3 - if (EXISTS "${PETSC_DIR}/conf/rules") - set (petsc_conf_rules "${PETSC_DIR}/conf/rules") - set (petsc_conf_variables "${PETSC_DIR}/conf/variables") - else () - set (petsc_conf_rules "${PETSC_DIR}/lib/petsc/conf/rules") - set (petsc_conf_variables "${PETSC_DIR}/lib/petsc/conf/variables") - endif () -elseif (EXISTS "${PETSC_DIR}/bmake/${PETSC_ARCH}/petscconf.h") # <= 2.3.3 - set (petsc_conf_rules "${PETSC_DIR}/bmake/common/rules") - set (petsc_conf_variables "${PETSC_DIR}/bmake/common/variables") -elseif (PETSC_DIR) - message (SEND_ERROR "The pair PETSC_DIR=${PETSC_DIR} PETSC_ARCH=${PETSC_ARCH} do not specify a valid PETSc installation") -else () - message (FATAL_ERROR "PETSc could not be found. Be sure to set PETSC_DIR and PETSC_ARCH.") -endif () -petsc_get_version() - -if (petsc_conf_rules AND petsc_conf_variables AND NOT petsc_config_current) - # Put variables into environment since they are needed to get - # configuration (petscvariables) in the PETSc makefile - set (ENV{PETSC_DIR} "${PETSC_DIR}") - set (ENV{PETSC_ARCH} "${PETSC_ARCH}") - - # A temporary makefile to probe the PETSc configuration - set (petsc_config_makefile "${PROJECT_BINARY_DIR}/Makefile.petsc") - file (WRITE "${petsc_config_makefile}" -"## This file was autogenerated by FindPETSc.cmake -# PETSC_DIR = ${PETSC_DIR} -# PETSC_ARCH = ${PETSC_ARCH} -include ${petsc_conf_rules} -include ${petsc_conf_variables} -show : - -@echo -n \${\${VARIABLE}} -") - - macro (PETSC_GET_VARIABLE name var) - set (${var} "NOTFOUND" CACHE INTERNAL "Cleared" FORCE) - execute_process (COMMAND ${CMAKE_MAKE_PROGRAM} --no-print-directory -f ${petsc_config_makefile} show VARIABLE=${name} - OUTPUT_VARIABLE ${var} - RESULT_VARIABLE petsc_return) - endmacro (PETSC_GET_VARIABLE) - petsc_get_variable (PETSC_LIB_DIR petsc_lib_dir) - petsc_get_variable (PETSC_EXTERNAL_LIB_BASIC petsc_libs_external) - petsc_get_variable (PETSC_CCPPFLAGS petsc_cpp_line) - petsc_get_variable (PETSC_INCLUDE petsc_include) - petsc_get_variable (PCC petsc_cc) - petsc_get_variable (MPIEXEC petsc_mpiexec) - # We are done with the temporary Makefile, calling PETSC_GET_VARIABLE after this point is invalid! - file (REMOVE ${petsc_config_makefile}) - - include (ResolveCompilerPaths) - # Extract include paths and libraries from compile command line - resolve_includes (petsc_includes_all "${petsc_cpp_line}") - - message (STATUS "petsc_lib_dir ${petsc_lib_dir}") - - macro (PETSC_FIND_LIBRARY suffix name) - set (PETSC_LIBRARY_${suffix} "NOTFOUND" CACHE INTERNAL "Cleared" FORCE) # Clear any stale value, if we got here, we need to find it again - find_library (PETSC_LIBRARY_${suffix} NAMES ${name} HINTS ${petsc_lib_dir} NO_DEFAULT_PATH) - set (PETSC_LIBRARIES_${suffix} "${PETSC_LIBRARY_${suffix}}") - mark_as_advanced (PETSC_LIBRARY_${suffix}) - endmacro (PETSC_FIND_LIBRARY suffix name) - - # Look for petscvec first, if it doesn't exist, we must be using single-library - petsc_find_library (VEC petscvec) - if (PETSC_LIBRARY_VEC) - petsc_find_library (SYS "petscsys;petsc") # libpetscsys is called libpetsc prior to 3.1 (when single-library was introduced) - petsc_find_library (MAT petscmat) - petsc_find_library (DM petscdm) - petsc_find_library (KSP petscksp) - petsc_find_library (SNES petscsnes) - petsc_find_library (TS petscts) - macro (PETSC_JOIN libs deps) - list (APPEND PETSC_LIBRARIES_${libs} ${PETSC_LIBRARIES_${deps}}) - endmacro (PETSC_JOIN libs deps) - petsc_join (VEC SYS) - petsc_join (MAT VEC) - petsc_join (DM MAT) - petsc_join (KSP DM) - petsc_join (SNES KSP) - petsc_join (TS SNES) - petsc_join (ALL TS) - else () - set (PETSC_LIBRARY_VEC "NOTFOUND" CACHE INTERNAL "Cleared" FORCE) # There is no libpetscvec - petsc_find_library (SINGLE petsc) - foreach (pkg SYS VEC MAT DM KSP SNES TS ALL) - set (PETSC_LIBRARIES_${pkg} "${PETSC_LIBRARY_SINGLE}") - endforeach () - endif () - if (PETSC_LIBRARY_TS) - message (STATUS "Recognized PETSc install with separate libraries for each package") - else () - message (STATUS "Recognized PETSc install with single library for all packages") - endif () - - include (CheckCSourceRuns) - macro (PETSC_TEST_RUNS includes libraries runs) - multipass_c_source_runs ("${includes}" "${libraries}" " -static const char help[] = \"PETSc test program.\"; -#include \"petscts.h\" -int main(int argc,char *argv[]) { - PetscErrorCode ierr; - TS ts; - - ierr = PetscInitialize(&argc,&argv,0,help);CHKERRQ(ierr); - ierr = TSCreate(PETSC_COMM_WORLD,&ts);CHKERRQ(ierr); - ierr = TSSetFromOptions(ts);CHKERRQ(ierr); - ierr = TSDestroy(ts);CHKERRQ(ierr); - ierr = PetscFinalize();CHKERRQ(ierr); - return 0; -} -" ${runs}) - if (${${runs}}) - set (PETSC_EXECUTABLE_RUNS "YES" CACHE BOOL - "Can the system successfully run a PETSc executable? This variable can be manually set to \"YES\" to force CMake to accept a given PETSc configuration, but this will almost always result in a broken build. If you change PETSC_DIR, PETSC_ARCH, or PETSC_CURRENT you would have to reset this variable." FORCE) - endif (${${runs}}) - endmacro (PETSC_TEST_RUNS) - - find_path (PETSC_INCLUDE_DIR petscts.h HINTS "${PETSC_DIR}" PATH_SUFFIXES include NO_DEFAULT_PATH) - find_path (PETSC_INCLUDE_CONF petscconf.h HINTS "${PETSC_DIR}" PATH_SUFFIXES "${PETSC_ARCH}/include" "bmake/${PETSC_ARCH}" NO_DEFAULT_PATH) - mark_as_advanced (PETSC_INCLUDE_DIR PETSC_INCLUDE_CONF) - set (petsc_includes_minimal ${PETSC_INCLUDE_CONF} ${PETSC_INCLUDE_DIR}) - - petsc_test_runs ("${petsc_includes_minimal}" "${PETSC_LIBRARIES_TS}" petsc_works_minimal) - if (petsc_works_minimal) - message (STATUS "Minimal PETSc includes and libraries work. This probably means we are building with shared libs.") - set (petsc_includes_needed "${petsc_includes_minimal}") - else (petsc_works_minimal) # Minimal includes fail, see if just adding full includes fixes it - petsc_test_runs ("${petsc_includes_all}" "${PETSC_LIBRARIES_TS}" petsc_works_allincludes) - if (petsc_works_allincludes) # It does, we just need all the includes ( - message (STATUS "PETSc requires extra include paths, but links correctly with only interface libraries. This is an unexpected configuration (but it seems to work fine).") - set (petsc_includes_needed ${petsc_includes_all}) - else (petsc_works_allincludes) # We are going to need to link the external libs explicitly - resolve_libraries (petsc_libraries_external "${petsc_libs_external}") - foreach (pkg SYS VEC MAT DM KSP SNES TS ALL) - list (APPEND PETSC_LIBRARIES_${pkg} ${petsc_libraries_external}) - endforeach (pkg) - petsc_test_runs ("${petsc_includes_minimal}" "${PETSC_LIBRARIES_TS}" petsc_works_alllibraries) - if (petsc_works_alllibraries) - message (STATUS "PETSc only need minimal includes, but requires explicit linking to all dependencies. This is expected when PETSc is built with static libraries.") - set (petsc_includes_needed ${petsc_includes_minimal}) - else (petsc_works_alllibraries) - # It looks like we really need everything, should have listened to Matt - set (petsc_includes_needed ${petsc_includes_all}) - petsc_test_runs ("${petsc_includes_all}" "${PETSC_LIBRARIES_TS}" petsc_works_all) - if (petsc_works_all) # We fail anyways - message (STATUS "PETSc requires extra include paths and explicit linking to all dependencies. This probably means you have static libraries and something unexpected in PETSc headers.") - else (petsc_works_all) # We fail anyways - message (STATUS "PETSc could not be used, maybe the install is broken.") - endif (petsc_works_all) - endif (petsc_works_alllibraries) - endif (petsc_works_allincludes) - endif (petsc_works_minimal) - - # We do an out-of-source build so __FILE__ will be an absolute path, hence __INSDIR__ is superfluous - if (${PETSC_VERSION} VERSION_LESS 3.1) - set (PETSC_DEFINITIONS "-D__SDIR__=\"\"" CACHE STRING "PETSc definitions" FORCE) - else () - set (PETSC_DEFINITIONS "-D__INSDIR__=" CACHE STRING "PETSc definitions" FORCE) - endif () - # Sometimes this can be used to assist FindMPI.cmake - set (PETSC_MPIEXEC ${petsc_mpiexec} CACHE FILEPATH "Executable for running PETSc MPI programs" FORCE) - set (PETSC_INCLUDES ${petsc_includes_needed} CACHE STRING "PETSc include path" FORCE) - set (PETSC_LIBRARIES ${PETSC_LIBRARIES_ALL} CACHE STRING "PETSc libraries" FORCE) - set (PETSC_COMPILER ${petsc_cc} CACHE FILEPATH "PETSc compiler" FORCE) - # Note that we have forced values for all these choices. If you - # change these, you are telling the system to trust you that they - # work. It is likely that you will end up with a broken build. - mark_as_advanced (PETSC_INCLUDES PETSC_LIBRARIES PETSC_COMPILER PETSC_DEFINITIONS PETSC_MPIEXEC PETSC_EXECUTABLE_RUNS) -endif () - -include (FindPackageHandleStandardArgs) -find_package_handle_standard_args (PETSc - "PETSc could not be found. Be sure to set PETSC_DIR and PETSC_ARCH." - PETSC_INCLUDES PETSC_LIBRARIES PETSC_EXECUTABLE_RUNS) diff --git a/AMDiS/cmake3/find_umfpack.cmake b/AMDiS/cmake3/find_umfpack.cmake deleted file mode 100644 index 34fec0a58c63efe2e57bcf3ac5bce714b8cb1501..0000000000000000000000000000000000000000 --- a/AMDiS/cmake3/find_umfpack.cmake +++ /dev/null @@ -1,93 +0,0 @@ -if (ENABLE_UMFPACK OR AMDIS_NEED_UMFPACK) - if (WIN32) - set(SuiteSparse_USE_LAPACK_BLAS ON) - endif (WIN32) - - if (SuiteSparse_DIR) - file(TO_CMAKE_PATH ${SuiteSparse_DIR} SuiteSparse_DIR) - endif (SuiteSparse_DIR) - - # try to use a cmake-package of suitesparse - find_package(SuiteSparse QUIET HINTS ${AMDIS_SuiteSparse_DIR}) - if (SuiteSparse_FOUND) - message(STATUS "Found SuiteSparse CMake-library") - include(${USE_SuiteSparse}) - target_link_libraries(amdis_base INTERFACE ${SuiteSparse_LIBRARIES}) - target_include_directories(amdis_base INTERFACE ${SuiteSparse_INCLUDE_DIR} ${SuiteSparse_METIS_INCLUDE_DIR}) - set(FOUND_SUITESPARSE_LIBS ${SuiteSparse_LIBRARIES}) - else (SuiteSparse_FOUND) - # find umfpack manually by searching for umfpack.h header file - find_library(UMFPACK_LIBRARY umfpack - HINTS ${AMDIS_UMFPACK_LIB_DIR} - DOC "Library file for UMFPACK") - find_file(UMFPACK_H umfpack.h - HINTS ${AMDIS_UMFPACK_INCLUDE_DIR} ENV CPATH /usr/include /usr/include/suitesparse /usr/include/ufsparse - DOC "Headerfile umfpack.h for UMFPACK") - - if (UMFPACK_H AND UMFPACK_LIBRARY) - get_filename_component(UMFPACK_PATH ${UMFPACK_H} PATH) - get_filename_component(UMFPACK_LIB_PATH ${UMFPACK_LIBRARY} PATH) - set(FOUND_SUITESPARSE_LIBS ${UMFPACK_LIBRARY}) - - # find all connected libraries - find_library(AMD_LIBRARY amd HINTS ${UMFPACK_LIB_PATH}) - find_library(BLAS_LIBRARY NAMES blas openblas HINTS ${UMFPACK_LIB_PATH} /usr/lib /usr/lib/openblas-base) - find_library(CHOLMOD_LIBRARY cholmod HINTS ${UMFPACK_LIB_PATH}) - find_library(COLAMD_LIBRARY colamd HINTS ${UMFPACK_LIB_PATH}) - find_library(SUITESPARSECONFIG_LIBRARY suitesparseconfig HINTS ${UMFPACK_LIB_PATH}) - if (AMD_LIBRARY AND BLAS_LIBRARY) - list(APPEND FOUND_SUITESPARSE_LIBS ${AMD_LIBRARY} ${BLAS_LIBRARY}) - endif (AMD_LIBRARY AND BLAS_LIBRARY) - if (CHOLMOD_LIBRARY) - list(APPEND FOUND_SUITESPARSE_LIBS ${CHOLMOD_LIBRARY}) - endif (CHOLMOD_LIBRARY) - if (COLAMD_LIBRARY) - list(APPEND FOUND_SUITESPARSE_LIBS ${COLAMD_LIBRARY}) - endif (COLAMD_LIBRARY) - if (SUITESPARSECONFIG_LIBRARY) - list(APPEND FOUND_SUITESPARSE_LIBS ${SUITESPARSECONFIG_LIBRARY}) - endif (SUITESPARSECONFIG_LIBRARY) - - target_include_directories(amdis_base INTERFACE ${UMFPACK_PATH}) - target_link_libraries(amdis_base INTERFACE ${FOUND_SUITESPARSE_LIBS}) - else() - message(FATAL_ERROR "Could not find the UMFPACK header umfpack.h.") - endif (UMFPACK_H AND UMFPACK_LIBRARY) - endif (SuiteSparse_FOUND) - - - # Check for clock_gettime in librt - if (NOT WIN32) - include(CheckLibraryExists) - check_library_exists(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME) - if (HAVE_CLOCK_GETTIME) - target_link_libraries(amdis_base INTERFACE rt) - else () - check_library_exists(c clock_gettime "" HAVE_CLOCK_GETTIME) - endif (HAVE_CLOCK_GETTIME) - endif (NOT WIN32) - - - # collect informations about umfpack version and found libraries - if (FOUND_SUITESPARSE_LIBS) - find_file(_UMFPACK_H umfpack.h HINTS ${SuiteSparse_INCLUDE_DIR} ${UMFPACK_PATH}) - file(STRINGS ${_UMFPACK_H} UMFPACK_VERSION_LINE REGEX "#define UMFPACK_VERSION") - string(REGEX MATCH "\"UMFPACK V?([^\"]+)\"" UMFPACK_VERSION_REGEX ${UMFPACK_VERSION_LINE}) - set(UMFPACK_VERSION ${CMAKE_MATCH_1}) - unset(_UMFPACK_H CACHE) - - message(STATUS "UMFPACK version: ${UMFPACK_VERSION}") - message(STATUS "Found the following SuiteSparse libraries:") - foreach (lib ${FOUND_SUITESPARSE_LIBS}) - message(STATUS " ${lib}") - endforeach () - endif (FOUND_SUITESPARSE_LIBS) - - target_compile_definitions(amdis_base INTERFACE - HAVE_UMFPACK=1 - MTL_HAS_UMFPACK=1) - - if (NOT IS_AMDISCONFIG) - install(FILES ${BASE_DIR}/cmake3/find_umfpack.cmake DESTINATION share/amdis/) - endif () -endif (ENABLE_UMFPACK OR AMDIS_NEED_UMFPACK) \ No newline at end of file diff --git a/AMDiS/cmake3/target_enable_bddcml.cmake b/AMDiS/cmake3/target_enable_bddcml.cmake new file mode 100644 index 0000000000000000000000000000000000000000..6bc1aeb0e223357ecd5222213f4f2b9d9950a8b7 --- /dev/null +++ b/AMDiS/cmake3/target_enable_bddcml.cmake @@ -0,0 +1,35 @@ +macro(target_enable_bddcml _TARGET_ _SCOPE_) + if (${ARGC} GREATER 2) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () + + SET(BDDCML_LINK_LIST "" CACHE STRING "Further libraries to be linked with BDDCML") + + find_file(BDDCML_H bddcml_interface_c.h + HINTS ENV CPATH + DOC "Header bddcml_interface_c.h for the BDDCML library.") + + if (BDDCML_H) + get_filename_component(BDDCML_PATH ${BDDCML_H} PATH) + target_include_directories(${_TARGET_} ${_SCOPE_} ${BDDCML_PATH}) + target_compile_definitions(${_TARGET_} ${_SCOPE_} HAVE_BDDC_ML=1 Add_) + else() + message(FATAL_ERROR "Could not find BDDCML headers.") + endif() + + if (LINK_EXECUTABLE) + find_library(BDDCML_LIB bddcml + HINTS ENV LIBRARY_PATH + DOC "BDDCML library") + + if(BDDCML_LIB) + target_link_libraries(${_TARGET_} ${_SCOPE_} ${BDDCML_LIB}) + else() + message(FATAL_ERROR "Could not find the BDDCML library") + endif() + endif (LINK_EXECUTABLE) + + target_compile_definitions(${_TARGET_} ${_SCOPE_} HAVE_BDDCML=1) +endmacro(target_enable_bddcml) diff --git a/AMDiS/cmake3/target_enable_boost.cmake b/AMDiS/cmake3/target_enable_boost.cmake new file mode 100644 index 0000000000000000000000000000000000000000..9febfa5e8e0ba468b943e94d63731a26a6685856 --- /dev/null +++ b/AMDiS/cmake3/target_enable_boost.cmake @@ -0,0 +1,43 @@ +macro(target_enable_boost _TARGET_ _SCOPE_) + if (${ARGC} GREATER 2) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () + + if (BOOST_ROOT) + file(TO_CMAKE_PATH ${BOOST_ROOT} BOOST_ROOT) + endif (BOOST_ROOT) + if (BOOST_LIBRARYDIR) + file(TO_CMAKE_PATH ${BOOST_LIBRARYDIR} BOOST_LIBRARYDIR) + endif (BOOST_LIBRARYDIR) + + set(BOOST_VERSION "1.48") + set(BOOST_LIBS_REQUIRED system iostreams filesystem program_options date_time) + if (WIN32) + list(APPEND BOOST_LIBS_REQUIRED zlib) + if (ENABLE_COMPRESSION OR AMDIS_NEED_COMPRESSION) + list(APPEND BOOST_LIBS_REQUIRED bzip2) + endif (ENABLE_COMPRESSION OR AMDIS_NEED_COMPRESSION) + endif (WIN32) + + if (NOT BUILD_SHARED_LIBS) + set(Boost_USE_STATIC_LIBS ON) + endif (NOT BUILD_SHARED_LIBS) + + find_package(Boost ${BOOST_VERSION} REQUIRED ${BOOST_LIBS_REQUIRED}) + add_library(boost INTERFACE) + target_include_directories(boost INTERFACE ${Boost_INCLUDE_DIR}) + + if (LINK_EXECUTABLE) + target_link_libraries(boost INTERFACE ${Boost_LIBRARIES}) + endif (LINK_EXECUTABLE) + + target_link_libraries(${_TARGET_} ${_SCOPE_} boost) + + if (MSVC_SHARED_LIBS AND LINK_EXECUTABLE) + link_directories(${Boost_LIBRARY_DIRS}) + target_compile_definitions(${_TARGET_} ${_SCOPE_} ${Boost_LIB_DIAGNOSTIC_DEFINITIONS}) + endif (MSVC_SHARED_LIBS AND LINK_EXECUTABLE) + +endmacro(target_enable_boost) diff --git a/AMDiS/cmake3/test_compile_features.cmake b/AMDiS/cmake3/target_enable_cxx11.cmake similarity index 100% rename from AMDiS/cmake3/test_compile_features.cmake rename to AMDiS/cmake3/target_enable_cxx11.cmake diff --git a/AMDiS/cmake3/target_enable_hypre.cmake b/AMDiS/cmake3/target_enable_hypre.cmake new file mode 100644 index 0000000000000000000000000000000000000000..725385fd5e0b90db17f69c7bd91a7a21da55077a --- /dev/null +++ b/AMDiS/cmake3/target_enable_hypre.cmake @@ -0,0 +1,54 @@ +macro(target_enable_hypre _TARGET_ _SCOPE_) + if (${ARGC} GREATER 2) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () + + # MPI is required + if (LINK_EXECUTABLE) + target_enable_mpi(${_TARGET_} ${_SCOPE_} ON) + else () + target_enable_mpi(${_TARGET_} ${_SCOPE_}) + endif (LINK_EXECUTABLE) + + + find_file(_HYPRE_H HYPRE.h + HINTS ${PETSC_INCLUDE_DIRS}) + + if (_HYPRE_H) + get_filename_component(HYPRE_INCLUDE_DIRECTORIES ${HYPRE_H} PATH) + target_include_directories(${_TARGET_} ${_SCOPE_} ${HYPRE_INCLUDE_DIRECTORIES}) + endif (_HYPRE_H) + + if (LINK_EXECUTABLE) + find_library(_HYPRE_LIB HYPRE + HINTS ${PETSC_LIBRARY_DIRS}) + + if(_HYPRE_LIB) + get_filename_component(HLIB_PATH ${_HYPRE_LIB} PATH) + file(GLOB HYPRE_OTHER ${HLIB_PATH}/${CMAKE_SHARED_LIBRARY_PREFIX}HYPRE*${CMAKE_SHARED_LIBRARY_SUFFIX}) + target_link_libraries(${_TARGET_} ${_SCOPE_} ${_HYPRE_LIB} ${HYPRE_OTHER}) + endif (_HYPRE_LIB) + + # lapack library is required + find_library(LAPACK_LIB + NAMES lapack flapack + HINTS ${LAPACK_DIR}/lib ${PETSC_LIBRARY_DIRS} ${PETSC_DIR}/lib) + if (LAPACK_LIB) + set(LAPACK_LIBRARIES ${LAPACK_LIB}) + else (LAPACK_LIB) + find_package(LAPACK REQUIRED) + endif (LAPACK_LIB) + target_link_libraries(${_TARGET_} ${_SCOPE_} ${LAPACK_LIBRARIES}) + endif (LINK_EXECUTABLE) + + + if (_HYPRE_H AND (NOT LINK_EXECUTABLE OR _HYPRE_LIB)) + set(HAVE_HYPRE ON) + target_compile_definitions(${_TARGET_} ${_SCOPE_} MTL_HAS_HYPRE) + else () + set(HAVE_HYPRE OFF) + endif () + +endmacro(target_enable_hypre) diff --git a/AMDiS/cmake3/target_enable_mtl4.cmake b/AMDiS/cmake3/target_enable_mtl4.cmake new file mode 100644 index 0000000000000000000000000000000000000000..13ac696d2db46e58441e8ae9f1dc7450ecd9b2fc --- /dev/null +++ b/AMDiS/cmake3/target_enable_mtl4.cmake @@ -0,0 +1,35 @@ +macro(target_enable_mtl4 _TARGET_ _SCOPE_) + if (${ARGC} GREATER 2) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () + + add_library(mtl4 INTERFACE) + + if (LINK_EXECUTABLE) + target_include_directories(${_TARGET_} ${_SCOPE_} ${AMDIS_INCLUDE_DIR}/mtl4) + else () + target_include_directories(${_TARGET_} ${_SCOPE_} ${BASE_DIR}/lib/mtl4) + endif (LINK_EXECUTABLE) + target_compile_definitions(${_TARGET_} ${_SCOPE_} MTL_ASSERT_FOR_THROW=1) + + if (ENABLE_CXX11) + set (CXX_ELEVEN_FEATURE_LIST "MOVE" "AUTO" "RANGEDFOR" "INITLIST" "STATICASSERT" "DEFAULTIMPL") + foreach (feature ${CXX_ELEVEN_FEATURE_LIST}) + target_compile_definitions(${_TARGET_} ${_SCOPE_} MTL_WITH_${feature}) + endforeach () + endif (ENABLE_CXX11) + + + if (ENABLE_OPENMP) + find_package(OpenMP REQUIRED) + if (OPENMP_FOUND) + target_compile_definitions(${_TARGET_} ${_SCOPE_} MTL_WITH_OPENMP) + target_compile_options(${_TARGET_} ${_SCOPE_} ${OpenMP_CXX_FLAGS}) + else () + message(FATAL_ERROR "OpenMP not found") + endif (OPENMP_FOUND) + endif (ENABLE_OPENMP) + +endmacro(target_enable_mtl4) diff --git a/AMDiS/cmake3/target_enable_petsc.cmake b/AMDiS/cmake3/target_enable_petsc.cmake new file mode 100644 index 0000000000000000000000000000000000000000..1aba50e9c2143af613df5c6e2998addbd0773dd8 --- /dev/null +++ b/AMDiS/cmake3/target_enable_petsc.cmake @@ -0,0 +1,158 @@ +include(FindPkgConfig) + +macro(target_enable_mpi _TARGET_ _SCOPE_) + if (${ARGC} GREATER 2) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () + + find_package(MPI REQUIRED) + target_include_directories(${_TARGET_} ${_SCOPE_} + ${MPI_CXX_INCLUDE_PATH}) + target_compile_options(${_TARGET_} ${_SCOPE_} + ${MPI_CXX_COMPILE_FLAGS}) + + if (LINK_EXECUTABLE) + # the parameter --enable-new-dtags causes a linker problem, i.e. some libraries are + # linked without an rpath (or any other path information) and can not be found while + # running the executable. The hack below removes this flag manually from the linker flags. + string(REPLACE "-Wl,--enable-new-dtags" "" MY_MPI_CXX_LINK_FLAGS " ${MPI_CXX_LINK_FLAGS} ") + string(STRIP "${MY_MPI_CXX_LINK_FLAGS}" MY_MPI_CXX_LINK_FLAGS) + + target_link_libraries(${_TARGET_} ${_SCOPE_} ${MPI_CXX_LIBRARIES} ${MY_MPI_CXX_LINK_FLAGS}) + endif (LINK_EXECUTABLE) +endmacro(target_enable_mpi) + +macro(target_enable_petsc _TARGET_ _SCOPE_) + if (${ARGC} GREATER 2) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () + + # PETSc library is required + find_file(PETSC_PKG_CONFIG "PETSc.pc" + HINTS ${PETSC_DIR}/lib/pkgconfig + $ENV{PETSC_DIR}/lib/pkgconfig + ${PETSC_ROOT}/lib/pkgconfig + $ENV{PETSC_ROOT}/lib/pkgconfig + /usr/lib/petsc/lib/pkgconfig + /usr/lib/petsc/linux-gnu-cxx-opt/lib/pkgconfig + /usr/lib/petsc/linux-gnu-c-opt/lib/pkgconfig) + if (PETSC_PKG_CONFIG) + get_filename_component(PETSC_PKG_CONFIG_PATH "${PETSC_PKG_CONFIG}" PATH CACHE) + set(ENV{PKG_CONFIG_PATH} ${PETSC_PKG_CONFIG_PATH}) + pkg_check_modules(PETSC REQUIRED PETSc>=3.3) + set(PETSC_DEFINITIONS ${PETSC_CFLAGS} ${PETSC_CFLAGS_OTHER}) + endif (PETSC_PKG_CONFIG) + + # check whether PETSc installation and configuration is valid + if (NOT PETSC_INCLUDE_DIRS) + set(PETSC_VALID OFF) + else () + find_file(PETSC_HEADER_FILE "petsc.h" PATHS ${PETSC_INCLUDE_DIRS} NO_DEFAULT_PATH) + if (PETSC_HEADER_FILE) + set(PETSC_VALID ON) + else () + set(PETSC_VALID OFF) + endif () + endif (NOT PETSC_INCLUDE_DIRS) + + # if not valid, search again + if (NOT PETSC_VALID) + find_package(PETSc REQUIRED) + set(PETSC_INCLUDE_DIRS ${PETSC_INCLUDES}) + set(PETSC_LIBRARY_DIRS ${PETSC_LIB_DIR}) + message(STATUS " Found PETSc, version ${PETSC_VERSION}") + endif (NOT PETSC_VALID) + + target_include_directories(${_TARGET_} ${_SCOPE_} ${PETSC_INCLUDE_DIRS}) + target_compile_definitions(${_TARGET_} ${_SCOPE_} + HAVE_PARALLEL_PETSC=1 + PETSC_VERSION=${PETSC_VERSION}) + target_compile_options(${_TARGET_} ${_SCOPE_} ${PETSC_DEFINITIONS}) + + if (LINK_EXECUTABLE) + target_link_libraries(${_TARGET_} ${_SCOPE_} ${PETSC_LIBRARIES}) + endif (LINK_EXECUTABLE) + + + # parmetis is required + find_file(PARMETIS_HEADER_FILE "parmetis.h" + HINTS ${PARMETIS_DIR}/include ${PETSC_INCLUDE_DIRS} /usr/include/parmetis) + if (PARMETIS_HEADER_FILE) + get_filename_component(PARMETIS_INCLUDE_PATH "${PARMETIS_HEADER_FILE}" PATH CACHE) + target_include_directories(${_TARGET_} ${_SCOPE_} ${PARMETIS_INCLUDE_PATH}) + file(READ ${PARMETIS_HEADER_FILE} PARMETIS_HEADER_FILE_CONTENT) + + string(FIND "${PARMETIS_HEADER_FILE_CONTENT}" "ParMETIS_V3_PartKway" PARMETIS_PARTKWAY_VALID) + string(FIND "${PARMETIS_HEADER_FILE_CONTENT}" "ParMETIS_V3_Mesh2Dual" PARMETIS_MESH2DUAL_VALID) + string(FIND "${PARMETIS_HEADER_FILE_CONTENT}" "ParMETIS_V3_AdaptiveRepart" PARMETIS_ADAPTIVEREPART_VALID) + string(FIND "${PARMETIS_HEADER_FILE_CONTENT}" "ParMETIS_V3_RefineKway" PARMETIS_REFINEKWAYVALID) + if (NOT (PARMETIS_PARTKWAY_VALID AND PARMETIS_MESH2DUAL_VALID AND PARMETIS_ADAPTIVEREPART_VALID AND PARMETIS_REFINEKWAYVALID)) + message(FATAL_ERROR "ParMETIS installation not complete. Not all required symbols found in ${PARMETIS_HEADER_FILE}.") + endif () + else() + message(FATAL_ERROR "Could not find ParMetis header file 'parmetis.h'!") + endif (PARMETIS_HEADER_FILE) + + if (LINK_EXECUTABLE) + find_library(PARMETIS_LIB parmetis + HINTS ${PARMETIS_DIR}/lib ${PETSC_LIBRARY_DIRS}) + if (NOT PARMETIS_LIB) + message(FATAL_ERROR "Could not find the ParMetis libraries needed by amdis") + endif (NOT PARMETIS_LIB) + message(STATUS " Found ParMetis library ${PARMETIS_LIB}") + target_link_libraries(${_TARGET_} ${_SCOPE_} ${PARMETIS_LIB}) + endif (LINK_EXECUTABLE) + + + # metis is required + find_file(METIS_HEADER_FILE "metis.h" + HINTS ${METIS_DIR}/include ${PETSC_INCLUDE_DIRS} /usr/include/metis) + if (METIS_HEADER_FILE) + get_filename_component(METIS_INCLUDE_PATH "${METIS_HEADER_FILE}" PATH CACHE) + target_include_directories(${_TARGET_} ${_SCOPE_} ${METIS_INCLUDE_PATH}) + else() + message(FATAL_ERROR "Could not find Metis header file 'metis.h'!") + endif (METIS_HEADER_FILE) + + if (LINK_EXECUTABLE) + find_library(METIS_LIB metis + HINTS ${METIS_DIR}/lib ${PETSC_LIBRARY_DIRS}) + if (NOT METIS_LIB) + message(FATAL_ERROR "Could not find the Metis libraries needed by amdis") + endif (NOT METIS_LIB) + message(STATUS " Found Metis library ${METIS_LIB}") + target_link_libraries(${_TARGET_} ${_SCOPE_} ${METIS_LIB}) + endif (LINK_EXECUTABLE) + + + # blas library is required + if (LINK_EXECUTABLE) + find_library(BLAS_LIB + NAMES blas fblas openblas + HINTS ${BLAS_DIR}/lib ${PETSC_LIBRARY_DIRS} /usr/lib/openblas-base /usr/lib/atlas-base) + if (BLAS_LIB) + set(BLAS_LIBRARIES ${BLAS_LIB}) + else (BLAS_LIB) + find_package(BLAS REQUIRED) + endif (BLAS_LIB) + target_link_libraries(${_TARGET_} ${_SCOPE_} ${BLAS_LIBRARIES}) + endif (LINK_EXECUTABLE) + + + # lapack library is required + if (LINK_EXECUTABLE) + find_library(LAPACK_LIB + NAMES lapack flapack + HINTS ${LAPACK_DIR}/lib ${PETSC_LIBRARY_DIRS} ${PETSC_DIR}/lib) + if (LAPACK_LIB) + set(LAPACK_LIBRARIES ${LAPACK_LIB}) + else (LAPACK_LIB) + find_package(LAPACK REQUIRED) + endif (LAPACK_LIB) + target_link_libraries(${_TARGET_} ${_SCOPE_} ${LAPACK_LIBRARIES}) + endif (LINK_EXECUTABLE) +endmacro(target_enable_petsc) diff --git a/AMDiS/cmake3/target_enable_png.cmake b/AMDiS/cmake3/target_enable_png.cmake new file mode 100644 index 0000000000000000000000000000000000000000..5f6e27768e3b60d8fdcc5e406dc7c1bf2e52caee --- /dev/null +++ b/AMDiS/cmake3/target_enable_png.cmake @@ -0,0 +1,31 @@ +macro(target_enable_png _TARGET_ _SCOPE_) + if (${ARGC} GREATER 2) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () + + find_file(_PNG_H png.h + HINTS ENV CPATH /usr/include + DOC "headerfile png.h for PNG-READER") + + if (_PNG_H) + get_filename_component(PNG_PATH ${_PNG_H} PATH) + target_include_directories(${_TARGET_} ${_SCOPE_} ${PNG_PATH}) + else() + message(FATAL_ERROR "Could not find the PNG header png.h.") + endif() + + if (LINK_EXECUTABLE) + find_library(_PNG_LIB png + HINTS ENV LIBRARY_PATH + DOC "The PNG library") + if (_PNG_LIB) + target_link_libraries(${_TARGET_} ${_SCOPE_} ${_PNG_LIB}) + else() + message(FATAL_ERROR "Could not find the PNG library") + endif() + endif (LINK_EXECUTABLE) + + target_compile_definitions(${_TARGET_} ${_SCOPE_} HAVE_PNG=1) +endmacro(target_enable_png) diff --git a/AMDiS/cmake3/target_enable_umfpack.cmake b/AMDiS/cmake3/target_enable_umfpack.cmake new file mode 100644 index 0000000000000000000000000000000000000000..cc5d2dda6f9ba9fab9777ec15b9e253e25bf5ae5 --- /dev/null +++ b/AMDiS/cmake3/target_enable_umfpack.cmake @@ -0,0 +1,113 @@ +macro(target_enable_umfpack _TARGET_ _SCOPE_) + if (${ARGC} GREATER 2) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () + + if (WIN32) + set(SuiteSparse_USE_LAPACK_BLAS ON) + endif (WIN32) + + if (SuiteSparse_DIR) + file(TO_CMAKE_PATH ${SuiteSparse_DIR} SuiteSparse_DIR) + endif (SuiteSparse_DIR) + + # try to use a cmake-package of suitesparse + find_package(SuiteSparse QUIET HINTS ${AMDIS_SuiteSparse_DIR}) + if (SuiteSparse_FOUND) + message(STATUS "Found SuiteSparse CMake-library") + include(${USE_SuiteSparse}) + if (LINK_EXECUTABLE) + target_link_libraries(${_TARGET_} ${_SCOPE_} ${SuiteSparse_LIBRARIES}) + endif (LINK_EXECUTABLE) + target_include_directories(${_TARGET_} ${_SCOPE_} ${SuiteSparse_INCLUDE_DIR} ${SuiteSparse_METIS_INCLUDE_DIR}) + set(FOUND_SUITESPARSE_LIBS ${SuiteSparse_LIBRARIES}) + else (SuiteSparse_FOUND) + # find umfpack manually by searching for umfpack.h header file + find_library(UMFPACK_LIBRARY umfpack + HINTS ${AMDIS_UMFPACK_LIB_DIR} ${SUITESPARSE_LIB} $ENV{SUITESPARSE_LIB} + DOC "Library file for UMFPACK") + find_file(UMFPACK_H umfpack.h + HINTS ${AMDIS_UMFPACK_INCLUDE_DIR} ${SUITESPARSE_INC} $ENV{SUITESPARSE_INC} ENV CPATH /usr/include /usr/include/suitesparse /usr/include/ufsparse + DOC "Headerfile umfpack.h for UMFPACK") + + if (UMFPACK_H AND UMFPACK_LIBRARY) + get_filename_component(UMFPACK_PATH ${UMFPACK_H} PATH) + target_include_directories(${_TARGET_} ${_SCOPE_} ${UMFPACK_PATH}) + + get_filename_component(UMFPACK_LIB_PATH ${UMFPACK_LIBRARY} PATH) + set(FOUND_SUITESPARSE_LIBS ${UMFPACK_LIBRARY}) + + if (LINK_EXECUTABLE) + + # find all connected libraries + find_library(AMD_LIBRARY amd HINTS ${UMFPACK_LIB_PATH}) + + find_library(BLAS_LIB + NAMES blas fblas openblas + HINTS ${BLAS_DIR}/lib ${UMFPACK_LIB_PATH} /usr/lib/openblas-base /usr/lib/atlas-base) + if (BLAS_LIB) + set(BLAS_LIBRARIES ${BLAS_LIB}) + else (BLAS_LIB) + find_package(BLAS REQUIRED) + endif (BLAS_LIB) + + find_library(CHOLMOD_LIBRARY cholmod HINTS ${UMFPACK_LIB_PATH}) + find_library(COLAMD_LIBRARY colamd HINTS ${UMFPACK_LIB_PATH}) + find_library(SUITESPARSECONFIG_LIBRARY suitesparseconfig HINTS ${UMFPACK_LIB_PATH}) + if (AMD_LIBRARY AND BLAS_LIBRARIES) + list(APPEND FOUND_SUITESPARSE_LIBS ${AMD_LIBRARY} ${BLAS_LIBRARIES}) + endif (AMD_LIBRARY AND BLAS_LIBRARIES) + if (CHOLMOD_LIBRARY) + list(APPEND FOUND_SUITESPARSE_LIBS ${CHOLMOD_LIBRARY}) + endif (CHOLMOD_LIBRARY) + if (COLAMD_LIBRARY) + list(APPEND FOUND_SUITESPARSE_LIBS ${COLAMD_LIBRARY}) + endif (COLAMD_LIBRARY) + if (SUITESPARSECONFIG_LIBRARY) + list(APPEND FOUND_SUITESPARSE_LIBS ${SUITESPARSECONFIG_LIBRARY}) + endif (SUITESPARSECONFIG_LIBRARY) + + target_link_libraries(${_TARGET_} ${_SCOPE_} ${FOUND_SUITESPARSE_LIBS}) + endif (LINK_EXECUTABLE) + else() + message(FATAL_ERROR "Could not find the UMFPACK header umfpack.h.") + endif (UMFPACK_H AND UMFPACK_LIBRARY) + endif (SuiteSparse_FOUND) + + + # Check for clock_gettime in librt + if (NOT WIN32 AND LINK_EXECUTABLE) + include(CheckLibraryExists) + check_library_exists(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME) + if (HAVE_CLOCK_GETTIME) + target_link_libraries(${_TARGET_} ${_SCOPE_} rt) + else () + check_library_exists(c clock_gettime "" HAVE_CLOCK_GETTIME) + endif (HAVE_CLOCK_GETTIME) + endif (NOT WIN32 AND LINK_EXECUTABLE) + + + # collect informations about umfpack version and found libraries + if (FOUND_SUITESPARSE_LIBS) + find_file(_UMFPACK_H umfpack.h PATHS ${SuiteSparse_INCLUDE_DIR} ${UMFPACK_PATH} NO_DEFAULT_PATH) + file(STRINGS ${_UMFPACK_H} UMFPACK_VERSION_LINE REGEX "#define UMFPACK_VERSION") + string(REGEX MATCH "\"UMFPACK V?([^\"]+)\"" UMFPACK_VERSION_REGEX ${UMFPACK_VERSION_LINE}) + set(UMFPACK_VERSION ${CMAKE_MATCH_1}) + unset(_UMFPACK_H CACHE) + + message(STATUS "UMFPACK version: ${UMFPACK_VERSION}") + if (LINK_EXECUTABLE) + message(STATUS "Found the following SuiteSparse libraries:") + foreach (lib ${FOUND_SUITESPARSE_LIBS}) + message(STATUS " ${lib}") + endforeach () + endif (LINK_EXECUTABLE) + endif (FOUND_SUITESPARSE_LIBS) + + target_compile_definitions(${_TARGET_} ${_SCOPE_} + HAVE_UMFPACK=1 + MTL_HAS_UMFPACK=1) + +endmacro(target_enable_umfpack) diff --git a/AMDiS/cmake3/target_enable_zoltan.cmake b/AMDiS/cmake3/target_enable_zoltan.cmake new file mode 100644 index 0000000000000000000000000000000000000000..5e14502454dd601dac222192489eea0c11b350d1 --- /dev/null +++ b/AMDiS/cmake3/target_enable_zoltan.cmake @@ -0,0 +1,26 @@ +macro(target_enable_zoltan _TARGET_ _SCOPE_) + if (${ARGC} GREATER 2) + set(LINK_EXECUTABLE ON) + else () + set(LINK_EXECUTABLE OFF) + endif () + + find_file(ZOLTAN_HEADER_FILE "zoltan_cpp.h" HINTS ${ZOLTAN_DIR}/include ${PETSC_INCLUDE_DIRS}) + if (ZOLTAN_HEADER_FILE) + get_filename_component(ZOLTAN_HEADER_DIR "${ZOLTAN_HEADER_FILE}" PATH CACHE) + target_include_directories(${_TARGET_} ${_SCOPE_} ${ZOLTAN_HEADER_DIR}) + else() + message(FATAL_ERROR "Could not find Zoltan include file 'zoltan_cpp.h'!") + endif(ZOLTAN_HEADER_FILE) + + if (LINK_EXECUTABLE) + find_library(ZOLTAN_LIB zoltan + HINTS ENV LIBRARY_PATH DOC "Full path to the zoltan library") + if (NOT ZOLTAN_LIB) + message(FATAL_ERROR "Could not find zoltan library!") + endif (NOT ZOLTAN_LIB) + target_link_libraries(${_TARGET_} ${_SCOPE_} ${ZOLTAN_LIB}) + endif (LINK_EXECUTABLE) + + target_compile_definitions(${_TARGET_} ${_SCOPE_} HAVE_ZOLTAN=1) +endmacro(target_enable_zoltan) diff --git a/AMDiS/lib/mtl4/boost/numeric/mtl/utility/view_code.hpp b/AMDiS/lib/mtl4/boost/numeric/mtl/utility/view_code.hpp index edc7404667a5e9c29847c15ae505757a1c0ff588..b8eaa9dfc4efe71df727b149abea1b6e91ac6a79 100644 --- a/AMDiS/lib/mtl4/boost/numeric/mtl/utility/view_code.hpp +++ b/AMDiS/lib/mtl4/boost/numeric/mtl/utility/view_code.hpp @@ -59,8 +59,8 @@ struct view_code > template struct view_normalize_const { - static const unsigned tmp2= Value == 0 || Value == 4 ? Value | 1 : Value, // if matrix ref or transposed, make it const - value= (tmp2 & 3) == 3 ? tmp2 ^ 1 : tmp2; // for conj turn off const + static const unsigned tmp2= Value == 0 || Value == 4 ? Value | 1 : Value; // if matrix ref or transposed, make it const + static const unsigned value= (tmp2 & 3) == 3 ? tmp2 ^ 1 : tmp2; // for conj turn off const }; template diff --git a/AMDiS/src/BoundaryObject.cc b/AMDiS/src/BoundaryObject.cc index ea8501cee802321b19439c275735921eead3073e..667095b722fe2461030f9bdec4e1e1c27bb4b01a 100644 --- a/AMDiS/src/BoundaryObject.cc +++ b/AMDiS/src/BoundaryObject.cc @@ -73,7 +73,7 @@ namespace AMDiS { if (obj0.subObj == EDGE) { int el0_v0 = obj0.el->getVertexOfEdge(obj0.ithObj, 0); int el1_v0 = obj0.el->getVertexOfEdge(obj1.ithObj, 0); -#if DEBUG != 0 +#ifndef NDEBUG int el0_v1 = obj0.el->getVertexOfEdge(obj0.ithObj, 1); int el1_v1 = obj0.el->getVertexOfEdge(obj1.ithObj, 1); #endif diff --git a/AMDiS/src/Config.h b/AMDiS/src/Config.h index c8f3e42e8c37f3d1c2ca492fc62670a6803406b6..8912a0585db5c86ef82a4bdd343d5d9b118b7d50 100644 --- a/AMDiS/src/Config.h +++ b/AMDiS/src/Config.h @@ -26,16 +26,7 @@ /** \brief current AMDiS version */ #ifndef AMDIS_VERSION -#define AMDIS_VERSION "AMDiS: Version 0.9.1" -#endif - -#ifdef DEBUG -#undef DEBUG -#endif -#ifdef NDEBUG -#define DEBUG 0 -#else -#define DEBUG 1 +#define AMDIS_VERSION "AMDiS: Version 1.1" #endif #include diff --git a/AMDiS/src/FiniteElemSpace.cc b/AMDiS/src/FiniteElemSpace.cc index d4cb79af3826f04f96b575f52a3a9aa61f2ae0b7..a47b16731aa13012e3ad66a7cf410fd1cd065cec 100644 --- a/AMDiS/src/FiniteElemSpace.cc +++ b/AMDiS/src/FiniteElemSpace.cc @@ -122,7 +122,7 @@ namespace AMDiS { feSpaces.resize(0); } -#if DEBUG +#ifndef NDEBUG FiniteElemSpace* FiniteElemSpace::provideFeSpace(Mesh *mesh) { FUNCNAME("FiniteElemSpace::provideFeSpace()"); diff --git a/AMDiS/src/FiniteElemSpace.h b/AMDiS/src/FiniteElemSpace.h index 52cb52ecc000c11067f309d12c01c2988ed37d2b..5412ad159fc36fd7fe2cf0338c349e3acf7da907 100644 --- a/AMDiS/src/FiniteElemSpace.h +++ b/AMDiS/src/FiniteElemSpace.h @@ -53,7 +53,7 @@ namespace AMDiS { static void destroyFeSpaces(); -#if DEBUG +#ifndef NDEBUG /// For debugging it may be useful to get some FE space for a given mesh at a /// position in code where it is not possible to access the FE space directly. The /// function assumes that there is only one FE space defined for the mesh. diff --git a/AMDiS/src/Global.cc b/AMDiS/src/Global.cc index 44acf4ed3e943b6f86cf2c31c421d322e9b405c0..bace7aee050dbb5d8f314178504325654d01c6ae 100644 --- a/AMDiS/src/Global.cc +++ b/AMDiS/src/Global.cc @@ -187,7 +187,7 @@ namespace AMDiS { vsprintf(buff, format, arg); PRINT_LINE((*error), buff); va_end(arg); -#if defined HAVE_PARALLEL_DOMAIN_AMDIS && !defined HAVE_PARALLEL_MTL4 && (DEBUG == 0 || defined NDEBUG) +#if defined HAVE_PARALLEL_DOMAIN_AMDIS && !defined HAVE_PARALLEL_MTL4 && (defined NDEBUG) #if (PETSC_VERSION_MINOR >= 5) PetscError(MPI_COMM_WORLD, __LINE__, "Msg::print_error_exit", "Global.cc", 1, PETSC_ERROR_INITIAL, buff); #else @@ -220,11 +220,9 @@ namespace AMDiS { const char *file, int line) { -#ifdef HAVE_PARALLEL_DOMAIN_AMDIS -#if (DEBUG == 0) +#if defined(HAVE_PARALLEL_DOMAIN_AMDIS) && defined(NDEBUG) if (outputMainRank && MPI::COMM_WORLD.Get_rank() != 0) return; -#endif #endif static int old_line = -1; @@ -256,11 +254,9 @@ namespace AMDiS { void Msg::print_warn(const char *format, ...) { -#ifdef HAVE_PARALLEL_DOMAIN_AMDIS -#if (DEBUG == 0) +#if defined(HAVE_PARALLEL_DOMAIN_AMDIS) && defined(NDEBUG) if (outputMainRank && MPI::COMM_WORLD.Get_rank() != 0) return; -#endif #endif va_list arg; char buff[255]; diff --git a/AMDiS/src/Mesh.cc b/AMDiS/src/Mesh.cc index de1b5870da0b50e1284facebb98f902ba2f47ce5..1488d36885d10cde5585f152fbdc935d2c5220e6 100644 --- a/AMDiS/src/Mesh.cc +++ b/AMDiS/src/Mesh.cc @@ -1128,24 +1128,13 @@ namespace AMDiS { // === Write periodic associations. === int mapSize = periodicAssociations.size(); SerUtil::serialize(out, mapSize); - for (map::iterator it = periodicAssociations.begin(); + for (map >::iterator it = periodicAssociations.begin(); it != periodicAssociations.end(); ++it) { BoundaryType b = it->first; - // Check which DOFAdmin is used for the current VertexVector we want to serialize. - int ithAdmin = -1; - for (int i = 0; i < static_cast(admin.size()); i++) { - if (admin[i] == it->second->getAdmin()) { - ithAdmin = i; - break; - } - } - TEST_EXIT(ithAdmin >= 0) - ("No DOFAdmin found for serialization of periodic associations!\n"); - SerUtil::serialize(out, b); - SerUtil::serialize(out, ithAdmin); - it->second->serialize(out); + for (int i = 0; i < size; i++) + (it->second)[i]->serialize(out); } serializedDOFs.clear(); @@ -1161,7 +1150,7 @@ namespace AMDiS { in >> name; in.get(); -#if DEBUG != 0 +#ifndef NDEBUG int oldVal = dim; #endif SerUtil::deserialize(in, dim); @@ -1178,7 +1167,7 @@ namespace AMDiS { SerUtil::deserialize(in, preserveCoarseDOFs); -#if DEBUG != 0 +#ifndef NDEBUG oldVal = nDofEl; #endif SerUtil::deserialize(in, nDofEl); @@ -1186,7 +1175,7 @@ namespace AMDiS { nDof.deserialize(in); -#if DEBUG != 0 +#ifndef NDEBUG oldVal = nNodeEl; #endif SerUtil::deserialize(in, nNodeEl); @@ -1278,7 +1267,7 @@ namespace AMDiS { VertexVector *tmpvec = new VertexVector(admin[ithAdmin], ""); tmpvec->deserialize(in); - periodicAssociations[b] = tmpvec; + periodicAssociations[b].push_back(tmpvec); } } @@ -1514,38 +1503,55 @@ namespace AMDiS { #endif - bool Mesh::associated(DegreeOfFreedom dof1, DegreeOfFreedom dof2) + VertexVector& Mesh::getPeriodicAssociations(BoundaryType b, const DOFAdmin* admin) + { + FUNCNAME_DBG("Mesh::getPeriodicAssociations()"); + + TEST_EXIT_DBG(periodicAssociations.count(b) == 1) + ("There are no periodic assoications for boundary type %d!\n", b); + + return admin ? (*(periodicAssociations[b][getAdminIndex(admin)])) : (*(periodicAssociations[b][0])); + } + + + bool Mesh::associated(DegreeOfFreedom dof1, DegreeOfFreedom dof2, int iadmin) { - map::iterator it; - map::iterator end = periodicAssociations.end(); + FUNCNAME_DBG("Mesh::associated()"); + TEST_EXIT_DBG(iadmin < admin.size())("Wrong DOF admin index\n"); + + map >::iterator it; + map >::iterator end = periodicAssociations.end(); for (it = periodicAssociations.begin(); it != end; ++it) - if ((*(it->second))[dof1] == dof2) - return true; + if ((*(it->second)[iadmin])[dof1] == dof2) + return true; return false; } - bool Mesh::indirectlyAssociated(DegreeOfFreedom dof1, DegreeOfFreedom dof2) + bool Mesh::indirectlyAssociated(DegreeOfFreedom dof1, DegreeOfFreedom dof2, int iadmin) { + FUNCNAME_DBG("Mesh::indirectlyAssociated()"); + TEST_EXIT_DBG(iadmin < admin.size())("Wrong DOF admin index\n"); + vector associatedToDOF1; - map::iterator it; - map::iterator end = periodicAssociations.end(); + map >::iterator it; + map >::iterator end = periodicAssociations.end(); DegreeOfFreedom dof, assDOF; associatedToDOF1.push_back(dof1); for (it = periodicAssociations.begin(); it != end; ++it) { int size = static_cast(associatedToDOF1.size()); for (int i = 0; i < size; i++) { - dof = associatedToDOF1[i]; - assDOF = (*(it->second))[dof]; - if (assDOF == dof2) { - return true; - } else { - if (assDOF != dof) - associatedToDOF1.push_back(assDOF); - } + dof = associatedToDOF1[i]; + assDOF = (*(it->second)[iadmin])[dof]; + if (assDOF == dof2) { + return true; + } else { + if (assDOF != dof) + associatedToDOF1.push_back(assDOF); + } } } diff --git a/AMDiS/src/Mesh.h b/AMDiS/src/Mesh.h index 5a6eeb3041a3fe4f5e3f209131a3a5b663ea1cef..2c9ae1ebb93176d80e3c7cf19907f3b4e1c754a8 100644 --- a/AMDiS/src/Mesh.h +++ b/AMDiS/src/Mesh.h @@ -192,6 +192,18 @@ namespace AMDiS { return *(admin[i]); } + /// Returns the index of a given DOFMadmin pointer in the admin vector + inline int getAdminIndex(const DOFAdmin* dofAdmin) const + { + size_t i = 0; + for (; i < admin.size(); i++) + if (admin[i] == dofAdmin) + break; + + TEST_EXIT_DBG(i < admin.size())("Wrong DOF admin index: %d\n", i); + return i; + } + /// Creates a DOFAdmin with name lname. nDof specifies how many DOFs /// are needed at the different positions (see \ref DOFAdmin::nrDOF). /// A pointer to the created DOFAdmin is returned. @@ -549,25 +561,24 @@ namespace AMDiS { } /// - inline std::map& getPeriodicAssociations() + inline std::map >& getPeriodicAssociations() { return periodicAssociations; } /// Returns the periodic association for a specific boundary type. - inline VertexVector& getPeriodicAssociations(BoundaryType b) - { - FUNCNAME_DBG("Mesh::getPeriodicAssociations()"); - - TEST_EXIT_DBG(periodicAssociations.count(b) == 1) - ("There are no periodic assoications for boundary type %d!\n", b); - - return (*(periodicAssociations[b])); - } + VertexVector& getPeriodicAssociations(BoundaryType b, const DOFAdmin* admin = NULL); inline void setPeriodicAssociations(BoundaryType b, VertexVector* vec) { - periodicAssociations[b] = vec; + std::map >::iterator lb = periodicAssociations.lower_bound(b); + if (lb != periodicAssociations.end() && !periodicAssociations.key_comp()(b, lb->first)) { + lb->second.push_back(vec); + } else { + std::vector v; + v.push_back(vec); + periodicAssociations.insert(lb, std::make_pair(b, v)); + } } @@ -579,10 +590,20 @@ namespace AMDiS { } /// - bool associated(DegreeOfFreedom dof1, DegreeOfFreedom dof2); + bool associated(DegreeOfFreedom dof1, DegreeOfFreedom dof2, int iadmin = 0); + + inline bool associated(DegreeOfFreedom dof1, DegreeOfFreedom dof2, const DOFAdmin* dofAdmin) + { + return associated(dof1, dof2, getAdminIndex(dofAdmin)); + } /// - bool indirectlyAssociated(DegreeOfFreedom dof1, DegreeOfFreedom dof2); + bool indirectlyAssociated(DegreeOfFreedom dof1, DegreeOfFreedom dof2, int iadmin = 0); + + inline bool indirectlyAssociated(DegreeOfFreedom dof1, DegreeOfFreedom dof2, const DOFAdmin* dofAdmin) + { + return indirectlyAssociated(dof1, dof2, getAdminIndex(dofAdmin)); + } /// Returns \macroFileInfo inline MacroInfo* getMacroFileInfo() @@ -854,7 +875,7 @@ namespace AMDiS { bool initialized; /// Map of managed periodic vertex associations. - std::map periodicAssociations; + std::map > periodicAssociations; /// If the mesh has been created by reading a macro file, here the information /// are stored about the content of the file. diff --git a/AMDiS/src/MeshStructure.cc b/AMDiS/src/MeshStructure.cc index 601953ae8309a94a5113e8c5a82466e86bbb82a3..b23b4911d93d3d990b4f35cee85b5c03bdfa785c 100644 --- a/AMDiS/src/MeshStructure.cc +++ b/AMDiS/src/MeshStructure.cc @@ -280,23 +280,23 @@ namespace AMDiS { bool cont = true; while (cont) { bool cont1; -#if DEBUG != 0 +#ifndef NDEBUG bool cont2; #endif if (structure1->isLeafElement() == structure2->isLeafElement()) { cont1 = structure1->nextElement(result); -#if DEBUG != 0 +#ifndef NDEBUG cont2 = structure2->nextElement(); #endif } else { if (structure1->isLeafElement()) { cont1 = structure1->nextElement(); -#if DEBUG != 0 +#ifndef NDEBUG cont2 = structure2->skipBranch(result); #endif } else { cont1 = structure1->skipBranch(result); -#if DEBUG != 0 +#ifndef NDEBUG cont2 = structure2->nextElement(); #endif } @@ -385,7 +385,7 @@ namespace AMDiS { } if (!finished) { -#if (DEBUG != 0) +#ifndef NDEBUG int oldMeshIndex = mesh->getChangeIndex(); #endif @@ -394,7 +394,7 @@ namespace AMDiS { else manager->refineMacroElement(mesh, macroElIndex); -#if (DEBUG != 0) +#ifndef NDEBUG TEST_EXIT(oldMeshIndex != mesh->getChangeIndex()) ("Mesh has not been changed by refinement procedure!\n"); #endif diff --git a/AMDiS/src/MeshStructure.h b/AMDiS/src/MeshStructure.h index 24e04e0de5335b8cbb16ecf8f875eb5c397d4848..e0ed3c5e3cfc814d0cc32dbf1177bf7689d76aaf 100644 --- a/AMDiS/src/MeshStructure.h +++ b/AMDiS/src/MeshStructure.h @@ -32,10 +32,10 @@ #include "Global.h" #include "BoundaryObject.h" -#if (DEBUG != 0) -#define WITH_ELINDEX true +#ifndef NDEBUG + #define WITH_ELINDEX true #else -#define WITH_ELINDEX false + #define WITH_ELINDEX false #endif namespace AMDiS { diff --git a/AMDiS/src/OpenMP.h b/AMDiS/src/OpenMP.h index 0c7fbf9376f2c38670c61a606eff590a5f2668c7..5bb186e340cf102b7252a683a00b2dadf1240055 100644 --- a/AMDiS/src/OpenMP.h +++ b/AMDiS/src/OpenMP.h @@ -47,7 +47,7 @@ namespace AMDiS { inline T& get() { -#if (DEBUG != 0) +#ifndef NDEBUG if (omp_get_thread_num() >= data.size()) { std::cout << "Error in ThreadPrivate::get()!\n"; exit(0); @@ -58,7 +58,7 @@ namespace AMDiS { inline void set(T& val) { -#if (DEBUG != 0) +#ifndef NDEBUG if (omp_get_thread_num() >= data.size()) { std::cout << "Error in ThreadPrivate::set()!\n"; exit(0); diff --git a/AMDiS/src/PeriodicBC.cc b/AMDiS/src/PeriodicBC.cc index 6a122260709424e1512a4c4dd9313d41db67354f..5ee36ab19d93676258246b590999edb9417cbbcb 100644 --- a/AMDiS/src/PeriodicBC.cc +++ b/AMDiS/src/PeriodicBC.cc @@ -106,13 +106,14 @@ namespace AMDiS { } - PeriodicBC::PeriodicBC(BoundaryType type, const FiniteElemSpace *rowSpace) + PeriodicBC::PeriodicBC(BoundaryType type, const FiniteElemSpace *rowSpace, bool diagonal) : BoundaryCondition(type, rowSpace, NULL), - masterMatrix(NULL) + masterMatrix(NULL), + isDiagonal(diagonal) { if (rowFeSpace->getMesh()->getDim() > 1) periodicDOFMapping = - PeriodicDOFMapping::providePeriodicDOFMapping(rowFeSpace->getBasisFcts()); + PeriodicDOFMapping::providePeriodicDOFMapping(rowFeSpace->getBasisFcts()); else periodicDOFMapping = NULL; } @@ -129,10 +130,10 @@ namespace AMDiS { if (!masterMatrix) { masterMatrix = matrix; Mesh *mesh = matrix->getRowFeSpace()->getMesh(); - associated = mesh->getPeriodicAssociations()[boundaryType]; + associated = &(mesh->getPeriodicAssociations(boundaryType, rowFeSpace->getAdmin())); TEST_EXIT(associated) - ("No associations for periodic boundary condition %d!\n", boundaryType); + ("No associations for periodic boundary condition %d!\n", boundaryType); } } @@ -153,6 +154,7 @@ namespace AMDiS { return; DOFAdmin *admin = rowFeSpace->getAdmin(); + int iadmin = rowFeSpace->getMesh()->getAdminIndex(admin); FixVec elFace(dim, NO_INIT); FixVec neighFace(dim, NO_INIT); DimVec vertexPermutation(dim, NO_INIT); @@ -186,7 +188,7 @@ namespace AMDiS { int j = 0; for (; j < dim + 1; j++) - if (neigh->getDof(j, 0) == periodicDOF) + if (neigh->getDof(j, iadmin) == periodicDOF) break; vertexPermutation[i] = j; @@ -213,42 +215,71 @@ namespace AMDiS { FUNCNAME("PeriodicBC::exitMatrix()"); TEST_EXIT(matrix)("No matrix\n"); - TEST_EXIT(associated)("No associated vector!\n"); if (matrix == masterMatrix) masterMatrix = NULL; using namespace mtl; + typedef DOFMatrix::base_matrix_type Matrix; + typedef mtl::traits::range_generator::type c_type; + typedef mtl::traits::range_generator::type ic_type; DOFAdmin* admin = rowFeSpace->getAdmin(); - std::vector dofMap(admin->getUsedSize()); - for (int i = 0; i < admin->getUsedSize(); i++) - dofMap[i] = (*associated)[i]; + int adminSize = admin->getUsedSize(); + Matrix &A= matrix->getBaseMatrix(); + + mtl::traits::col::type c(A); + mtl::traits::value::type v(A); + + std::vector > > row_values; + row_values.resize(adminSize); - // Compute reorder matrix (newRow and newCol yields transposed!!!) - matrix::traits::reorder<>::type R= matrix::reorder(dofMap); - DOFMatrix::base_matrix_type &A= matrix->getBaseMatrix(), C; + for (DegreeOfFreedom i = 0; i < adminSize; i++) { + if (i < (*associated)[i]) { + c_type cursor(begin(A) + i); - C = R * A * trans(R) + A; - A = 0.5 * C; + for (ic_type icursor(begin(cursor)), icend(end(cursor)); + icursor != icend; ++icursor) { + row_values[i].push_back(std::make_pair(c(*icursor), v(*icursor))); + v(*icursor, 0.0); + } + } + } + matrix::inserter > ins(A); + if (isDiagonal) { + for (DegreeOfFreedom i = 0; i < adminSize; i++) { + if (i < (*associated)[i]) { + ins[i][i] << 1.0; + ins[i][(*associated)[i]] << -1.0; + } + } + } + for (DegreeOfFreedom i = 0; i < adminSize; i++) { + if (i < (*associated)[i]) { + for (size_t j = 0; j < row_values[i].size(); j++) + ins[(*associated)[i]][row_values[i][j].first] << row_values[i][j].second; + } + } } void PeriodicBC::exitVector(DOFVectorBase* vector) { + FUNCNAME("PeriodicBC::exitVector()"); + TEST_EXIT(rowFeSpace == vector->getFeSpace())("Should not happen.\n"); + DOFIterator vecIt(vector, USED_DOFS); Mesh *mesh = vector->getFeSpace()->getMesh(); - VertexVector *associated = mesh->getPeriodicAssociations()[boundaryType]; + VertexVector *associated = &(mesh->getPeriodicAssociations(boundaryType, rowFeSpace->getAdmin())); for (vecIt.reset(); !vecIt.end(); ++vecIt) { DegreeOfFreedom dof = vecIt.getDOFIndex(); DegreeOfFreedom newDOF = (*associated)[dof]; if (dof < newDOF) { - double entry = ((*vector)[dof] + (*vector)[newDOF]) * 0.5; - (*vector)[dof] = entry; - (*vector)[newDOF] = entry; + (*vector)[newDOF] += (*vector)[dof]; + (*vector)[dof] = 0.0; } } } diff --git a/AMDiS/src/PeriodicBC.h b/AMDiS/src/PeriodicBC.h index 999d37587bccf619d95ad0b9e10b53d168cd1894..872cb963ab16114511f0cfc7afb618cb38045928 100644 --- a/AMDiS/src/PeriodicBC.h +++ b/AMDiS/src/PeriodicBC.h @@ -88,7 +88,7 @@ namespace AMDiS { { public: /// Constructor. - PeriodicBC(BoundaryType type, const FiniteElemSpace *rowFeSpace); + PeriodicBC(BoundaryType type, const FiniteElemSpace *rowFeSpace, bool diagonal); ~PeriodicBC(); @@ -116,6 +116,8 @@ namespace AMDiS { PeriodicDOFMapping *periodicDOFMapping; DOFMatrix *masterMatrix; + + bool isDiagonal; }; } diff --git a/AMDiS/src/ProblemStat.cc b/AMDiS/src/ProblemStat.cc index 7e32679dcfc96c615220d73faa090334c302b775..1caf5c7da107233724104c15c1f17e4c3986c82d 100644 --- a/AMDiS/src/ProblemStat.cc +++ b/AMDiS/src/ProblemStat.cc @@ -1549,7 +1549,7 @@ namespace AMDiS { void ProblemStatSeq::addPeriodicBC(BoundaryType type, int row, int col) { boundaryConditionSet = true; - PeriodicBC *periodic = new PeriodicBC(type, componentSpaces[row]); + PeriodicBC *periodic = new PeriodicBC(type, componentSpaces[row], row == col); if (systemMatrix && (*systemMatrix)[row][col]) (*systemMatrix)[row][col]->getBoundaryManager()->addBoundaryCondition(periodic); diff --git a/AMDiS/src/ProblemStat.h b/AMDiS/src/ProblemStat.h index 0144f0c41fca84ba428ee7594e09c0aaf1ffba53..0df3abb337c5852edd1f0a0710ffb26cfed987ac 100644 --- a/AMDiS/src/ProblemStat.h +++ b/AMDiS/src/ProblemStat.h @@ -703,7 +703,7 @@ namespace AMDiS { public StandardProblemIteration { using ProblemStatType::getName; - using ProblemStatSeq::info; + using ProblemStatType::info; /// Constructor ProblemStat(std::string nameStr, diff --git a/AMDiS/src/RefinementManager2d.cc b/AMDiS/src/RefinementManager2d.cc index e4df70f7fd82cb118d2445ac80a3c2fc7e4a13f4..cd852ebbb891306ade5609793488e3835e0b4d21 100644 --- a/AMDiS/src/RefinementManager2d.cc +++ b/AMDiS/src/RefinementManager2d.cc @@ -74,9 +74,9 @@ namespace AMDiS { DegreeOfFreedom *last_edge[2] = {NULL, NULL}; int n_neigh_periodic; - DegreeOfFreedom newDOF = -1; - DegreeOfFreedom lastNewDOF = -1; - DegreeOfFreedom firstNewDOF = -1; + DegreeOfFreedom *newDOF = NULL; + DegreeOfFreedom *lastNewDOF = NULL; + DegreeOfFreedom *firstNewDOF = NULL; RCNeighbourList periodicList; @@ -87,23 +87,25 @@ namespace AMDiS { newDOF = refinePatch(edge, periodicList, n_neigh_periodic, bound); - if (firstNewDOF == -1) - firstNewDOF = newDOF; - - if (lastNewDOF != -1) { - for (std::map::iterator it = mesh->getPeriodicAssociations().begin(); - it != mesh->getPeriodicAssociations().end(); ++it) { - if (it->second) { - if (((*(it->second))[edge[0][0]] == last_edge[0][0] && - (*(it->second))[edge[1][0]] == last_edge[1][0]) || - ((*(it->second))[edge[0][0]] == last_edge[1][0] && - (*(it->second))[edge[1][0]] == last_edge[0][0])) { - (*(it->second))[lastNewDOF] = newDOF; - (*(it->second))[newDOF] = lastNewDOF; - } - } - } - } + if (firstNewDOF == NULL) + firstNewDOF = newDOF; + + if (lastNewDOF != NULL) { + for (std::map >::iterator it = mesh->getPeriodicAssociations().begin(); + it != mesh->getPeriodicAssociations().end(); ++it) { + if (!it->second.empty()) { + for (size_t iadmin = 0; iadmin < mesh->getNumberOfDOFAdmin(); iadmin++) { + if (((*(it->second)[iadmin])[edge[0][iadmin]] == last_edge[0][iadmin] && + (*(it->second)[iadmin])[edge[1][iadmin]] == last_edge[1][iadmin]) || + ((*(it->second[iadmin]))[edge[0][iadmin]] == last_edge[1][iadmin] && + (*(it->second)[iadmin])[edge[1][iadmin]] == last_edge[0][iadmin])) { + (*(it->second)[iadmin])[lastNewDOF[iadmin]] = newDOF[iadmin]; + (*(it->second)[iadmin])[newDOF[iadmin]] = lastNewDOF[iadmin]; + } + } // for + } // if + } // for + } // if lastNewDOF lastNewDOF = newDOF; last_edge[0] = edge[0]; @@ -114,19 +116,21 @@ namespace AMDiS { } if (lastNewDOF != firstNewDOF) { - for (std::map::iterator it = mesh->getPeriodicAssociations().begin(); - it != mesh->getPeriodicAssociations().end(); ++it) { - if (it->second) { - if (((*(it->second))[first_edge[0][0]] == last_edge[0][0] && - (*(it->second))[first_edge[1][0]] == last_edge[1][0]) || - ((*(it->second))[first_edge[0][0]] == last_edge[1][0] && - (*(it->second))[first_edge[1][0]] == last_edge[0][0])) { - (*(it->second))[lastNewDOF] = firstNewDOF; - (*(it->second))[firstNewDOF] = lastNewDOF; - } - } - } - } + for (std::map >::iterator it = mesh->getPeriodicAssociations().begin(); + it != mesh->getPeriodicAssociations().end(); ++it) { + if (!it->second.empty()) { + for (size_t iadmin = 0; iadmin < mesh->getNumberOfDOFAdmin(); iadmin++) { + if (((*(it->second)[iadmin])[first_edge[0][iadmin]] == last_edge[0][iadmin] && + (*(it->second)[iadmin])[first_edge[1][iadmin]] == last_edge[1][iadmin]) || + ((*(it->second)[iadmin])[first_edge[0][iadmin]] == last_edge[1][iadmin] && + (*(it->second)[iadmin])[first_edge[1][iadmin]] == last_edge[0][iadmin])) { + (*(it->second)[iadmin])[lastNewDOF[iadmin]] = firstNewDOF[iadmin]; + (*(it->second)[iadmin])[firstNewDOF[iadmin]] = lastNewDOF[iadmin]; + } + } // for + } // if + } // for + } // if != return elInfo; } @@ -175,9 +179,9 @@ namespace AMDiS { } - DegreeOfFreedom RefinementManager2d::refinePatch(DegreeOfFreedom *edge[2], - RCNeighbourList &refineList, - int n_neigh, bool bound) + DegreeOfFreedom* RefinementManager2d::refinePatch(DegreeOfFreedom *edge[2], + RCNeighbourList &refineList, + int n_neigh, bool bound) { DegreeOfFreedom *dof[3] = {NULL, NULL, NULL}; Triangle *el = @@ -222,8 +226,8 @@ namespace AMDiS { DOFAdmin* admin = const_cast(&mesh->getDofAdmin(iadmin)); std::list::iterator end = admin->endDOFIndexed(); for (std::list::iterator it = admin->beginDOFIndexed(); - it != end; it++) - (*it)->refineInterpol(refineList, n_neigh); + it != end; it++) + (*it)->refineInterpol(refineList, n_neigh); } @@ -231,18 +235,18 @@ namespace AMDiS { // === If there should be no dof information on interior leaf elements === // === remove dofs from edges and the centers of parents. === if (mesh->getNumberOfDofs(EDGE)) { - int node = mesh->getNode(EDGE); + int node = mesh->getNode(EDGE); - // === The only DOF that can be freed is that in the refinement edge; all === - // === other DOFs are handed on the children. === + // === The only DOF that can be freed is that in the refinement edge; all === + // === other DOFs are handed on the children. === - mesh->freeDof(const_cast(el->getDof(node+2)), EDGE); + mesh->freeDof(const_cast(el->getDof(node+2)), EDGE); } if (mesh->getNumberOfDofs(EDGE) || mesh->getNumberOfDofs(CENTER)) - refineList.removeDOFParents(n_neigh); + refineList.removeDOFParents(n_neigh); } - return dof[0][0]; + return dof[0]; } diff --git a/AMDiS/src/RefinementManager2d.h b/AMDiS/src/RefinementManager2d.h index 9a89c59394d2f80aa9d35f3fb1c023514f0332ca..1d05e600663916339d35893e5c506fa781a01586 100644 --- a/AMDiS/src/RefinementManager2d.h +++ b/AMDiS/src/RefinementManager2d.h @@ -58,12 +58,12 @@ namespace AMDiS { * looping around the refinement edge, otherwise 0 */ void getRefinePatch(ElInfo **elInfo, DegreeOfFreedom *edge[2], int dir, - RCNeighbourList &refineList, int *n_neigh); + RCNeighbourList &refineList, int *n_neigh); /// Refines all elements in the patch. - DegreeOfFreedom refinePatch(DegreeOfFreedom *edge[2], - RCNeighbourList &refineList, - int n_neigh, bool bound); + DegreeOfFreedom* refinePatch(DegreeOfFreedom *edge[2], + RCNeighbourList &refineList, + int n_neigh, bool bound); /// Implements RefinementManager::refineFunction. ElInfo* refineFunction(ElInfo* elInfo); diff --git a/AMDiS/src/RefinementManager3d.cc b/AMDiS/src/RefinementManager3d.cc index 26daa48412dab5dc0079a29e2735a27ac22736fa..2eb59c9ad0297d58317cf5d540a29369016c641b 100644 --- a/AMDiS/src/RefinementManager3d.cc +++ b/AMDiS/src/RefinementManager3d.cc @@ -330,9 +330,9 @@ namespace AMDiS { } - DegreeOfFreedom RefinementManager3d::refinePatch(DegreeOfFreedom *edge[2], - RCNeighbourList &refineList, - int n_neigh, bool bound) + DegreeOfFreedom* RefinementManager3d::refinePatch(DegreeOfFreedom *edge[2], + RCNeighbourList &refineList, + int n_neigh, bool bound) { Tetrahedron *el = dynamic_cast(const_cast(refineList.getElement(0))); @@ -402,7 +402,7 @@ namespace AMDiS { mesh->incrementNumberOfFaces(2 * n_neigh); } - return dof[0][0]; + return dof[0]; } @@ -422,7 +422,7 @@ namespace AMDiS { return true; int oppVertex = (*elInfo)->getOppVertex(localNeighbour); -#if DEBUG +#ifndef NDEBUG int testIndex = (*elInfo)->getNeighbour(localNeighbour)->getIndex(); #endif ElInfo *neighInfo = stack->traverseNeighbour3d((*elInfo), localNeighbour); @@ -573,7 +573,7 @@ namespace AMDiS { if (neighInfo->getNeighbour(i)) { oppVertex = neighInfo->getOppVertex(i); -#if DEBUG +#ifndef NDEBUG int testIndex = neighInfo->getNeighbour(i)->getIndex(); #endif @@ -607,7 +607,7 @@ namespace AMDiS { ("While looping back domains boundary was reached or i == 0\n"); oppVertex = refineList.getOppVertex(i--, 0); -#if DEBUG +#ifndef NDEBUG int testIndex = neighInfo->getNeighbour(oppVertex)->getIndex(); #endif neighInfo = stack->traverseNeighbour3d(neighInfo, oppVertex); @@ -770,8 +770,8 @@ namespace AMDiS { DegreeOfFreedom *last_edge[2] = {NULL, NULL}; int n_neigh_periodic = 0; - DegreeOfFreedom lastNewDof = -1; - DegreeOfFreedom firstNewDof = -1; + DegreeOfFreedom *lastNewDof = NULL; + DegreeOfFreedom *firstNewDof = NULL; RCNeighbourList periodicList; @@ -780,26 +780,28 @@ namespace AMDiS { &n_neigh, &n_neigh_periodic, periodicList); - DegreeOfFreedom newDof = - refinePatch(edge, periodicList, n_neigh_periodic, bound); - - if (firstNewDof == -1) - firstNewDof = newDof; - - if (lastNewDof != -1) { - for (std::map::iterator it = mesh->getPeriodicAssociations().begin(); - it != mesh->getPeriodicAssociations().end(); ++it) { - if (it->second) { - if (((*(it->second))[edge[0][0]] == last_edge[0][0] && - (*(it->second))[edge[1][0]] == last_edge[1][0]) || - ((*(it->second))[edge[0][0]] == last_edge[1][0] && - (*(it->second))[edge[1][0]] == last_edge[0][0])) { - (*(it->second))[lastNewDof] = newDof; - (*(it->second))[newDof] = lastNewDof; - } - } - } - } + DegreeOfFreedom *newDof = + refinePatch(edge, periodicList, n_neigh_periodic, bound); + + if (firstNewDof == NULL) + firstNewDof = newDof; + + if (lastNewDof != NULL) { + for (std::map >::iterator it = mesh->getPeriodicAssociations().begin(); + it != mesh->getPeriodicAssociations().end(); ++it) { + if (!it->second.empty()) { + for (size_t iadmin = 0; iadmin < mesh->getNumberOfDOFAdmin(); iadmin++) { + if (((*(it->second)[iadmin])[edge[0][iadmin]] == last_edge[0][iadmin] && + (*(it->second)[iadmin])[edge[1][iadmin]] == last_edge[1][iadmin]) || + ((*(it->second)[iadmin])[edge[0][iadmin]] == last_edge[1][iadmin] && + (*(it->second)[iadmin])[edge[1][iadmin]] == last_edge[0][iadmin])) { + (*(it->second)[iadmin])[lastNewDof[iadmin]] = newDof[iadmin]; + (*(it->second)[iadmin])[newDof[iadmin]] = lastNewDof[iadmin]; + } + } // for + } // if + } // for + } // if lastNewDof lastNewDof = newDof; last_edge[0] = edge[0]; @@ -810,19 +812,21 @@ namespace AMDiS { } if (lastNewDof != firstNewDof) { - for (std::map::iterator it = mesh->getPeriodicAssociations().begin(); - it != mesh->getPeriodicAssociations().end(); ++it) { - if (it->second) { - if (((*(it->second))[first_edge[0][0]] == last_edge[0][0] && - (*(it->second))[first_edge[1][0]] == last_edge[1][0]) || - ((*(it->second))[first_edge[0][0]] == last_edge[1][0] && - (*(it->second))[first_edge[1][0]] == last_edge[0][0])) { - (*(it->second))[lastNewDof] = firstNewDof; - (*(it->second))[firstNewDof] = lastNewDof; - } - } - } - } + for (std::map >::iterator it = mesh->getPeriodicAssociations().begin(); + it != mesh->getPeriodicAssociations().end(); ++it) { + if (!it->second.empty()) { + for (size_t iadmin = 0; iadmin < mesh->getNumberOfDOFAdmin(); iadmin++) { + if (((*(it->second)[iadmin])[first_edge[0][iadmin]] == last_edge[0][iadmin] && + (*(it->second)[iadmin])[first_edge[1][iadmin]] == last_edge[1][iadmin]) || + ((*(it->second)[iadmin])[first_edge[0][iadmin]] == last_edge[1][iadmin] && + (*(it->second)[iadmin])[first_edge[1][iadmin]] == last_edge[0][iadmin])) { + (*(it->second)[iadmin])[lastNewDof[iadmin]] = firstNewDof[iadmin]; + (*(it->second)[iadmin])[firstNewDof[iadmin]] = lastNewDof[iadmin]; + } + } // for + } // if + } // for + } // if != stack->update(); diff --git a/AMDiS/src/RefinementManager3d.h b/AMDiS/src/RefinementManager3d.h index 3bb772a480048b1a3efcf1e44c76ae3c8216f36a..13e0eca00d79938e9f0b9083587c2a74e500042c 100644 --- a/AMDiS/src/RefinementManager3d.h +++ b/AMDiS/src/RefinementManager3d.h @@ -59,21 +59,21 @@ namespace AMDiS { * */ bool getRefinePatch(ElInfo **el_info, - DegreeOfFreedom *edge[2], - int direction, - RCNeighbourList &refineList, - int *n_neigh); + DegreeOfFreedom *edge[2], + int direction, + RCNeighbourList &refineList, + int *n_neigh); /// Refines all elements in the patch. - DegreeOfFreedom refinePatch(DegreeOfFreedom *edge[2], RCNeighbourList &refineList, - int n_neigh, bool bound); + DegreeOfFreedom* refinePatch(DegreeOfFreedom *edge[2], RCNeighbourList &refineList, + int n_neigh, bool bound); /// Implements RefinementManager::refineFunction. ElInfo* refineFunction(ElInfo* el_info); /// Refines one Tetrahedron. void bisectTetrahedron(RCNeighbourList &refineList, int index, - DegreeOfFreedom *dof[3], DegreeOfFreedom *edge[2]); + DegreeOfFreedom *dof[3], DegreeOfFreedom *edge[2]); /// Used by \ref bisectTetrahedron void fillPatchConnectivity(RCNeighbourList &refineList, int index); diff --git a/AMDiS/src/est/ResidualEstimator.cc b/AMDiS/src/est/ResidualEstimator.cc index 22e0c155264a5979250ddb040ed72d51557a52a9..d4fb4ec7afc94998b42fb114c6f092d870dd0291 100644 --- a/AMDiS/src/est/ResidualEstimator.cc +++ b/AMDiS/src/est/ResidualEstimator.cc @@ -194,7 +194,7 @@ namespace AMDiS { Parallel::InteriorBoundary &intBoundary = Parallel::MeshDistributor::globalMeshDistributor->getIntBoundary(0); -#if (DEBUG != 0) +#ifndef NDEBUG // Make sure interior boundary is correct Parallel::ParallelDebug::testInteriorBoundary(*(Parallel::MeshDistributor::globalMeshDistributor)); #endif diff --git a/AMDiS/src/io/MacroReader.cc b/AMDiS/src/io/MacroReader.cc index 352988349fd53bfbb40af461f64a92b64112bec8..d1e4290d2b37e84b884db691d48553b0ac0dff3c 100644 --- a/AMDiS/src/io/MacroReader.cc +++ b/AMDiS/src/io/MacroReader.cc @@ -124,127 +124,138 @@ namespace AMDiS { namespace io { result = fscanf(file, "%*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s"); for (int i = 0; i < n; i++) { - std::map vertexMapEl1; - std::map vertexMapEl2; - - result = fscanf(file, "%d", &mode); - TEST_EXIT(result == 1)("mode?\n"); - - result = fscanf(file, "%d", &boundaryType); - TEST_EXIT(result == 1)("boundaryType?\n"); - - result = fscanf(file, "%d", &el1); - TEST_EXIT(result == 1)("el1?\n"); - - for (int j = 0; j < dim; j++) { - result = fscanf(file, "%d", &verticesEl1[j]); - TEST_EXIT(result == 1)("vertEl1[%d]\n", j); - } - result = fscanf(file, "%d", &el2); - TEST_EXIT(result == 1)("el2?\n"); - for (int j = 0; j < dim; j++) { - result = fscanf(file, "%d", &verticesEl2[j]); - TEST_EXIT(result == 1)("vertEl2[%d]\n", j); - } - for (int j = 0; j < dim; j++) { - if (mode == 0) - periodicMap.setEntry(melVertex[el1][verticesEl1[j]], - melVertex[el2][verticesEl2[j]]); - vertexMapEl1[verticesEl1[j]] = verticesEl2[j]; - vertexMapEl2[verticesEl2[j]] = verticesEl1[j]; - } - - // calculate sides of periodic vertices - int sideEl1 = 0, sideEl2 = 0; - if (dim == 1) { - sideEl1 = verticesEl1[0]; - sideEl2 = verticesEl2[0]; - } else { - for (int j = 0; j < dim + 1; j++) { - sideEl1 += j; - sideEl2 += j; - } - for (int j = 0; j < dim; j++) { - sideEl1 -= verticesEl1[j]; - sideEl2 -= verticesEl2[j]; - } - } - - // create periodic info - DimVec > periodicCoordsEl1(dim - 1, NO_INIT); - DimVec > periodicCoordsEl2(dim - 1, NO_INIT); - - Element *element1 = const_cast((*(mel + el1))->getElement()); - Element *element2 = const_cast((*(mel + el2))->getElement()); - - // for all vertices of this side - for (int j = 0; j < dim; j++) { - periodicCoordsEl1[element1->getPositionOfVertex(sideEl1, verticesEl1[j])] = - coords[melVertex[el2][vertexMapEl1[verticesEl1[j]]]]; - - periodicCoordsEl2[element2->getPositionOfVertex(sideEl2, verticesEl2[j])] = - coords[melVertex[el1][vertexMapEl2[verticesEl2[j]]]]; - } - - // decorate leaf data - ElementData *ld1 = element1->getElementData(); - ElementData *ld2 = element2->getElementData(); - - TEST_EXIT_DBG(ld1) - ("Should not happen: no element data pointer in macro element %d!\n", - element1->getIndex()); - - TEST_EXIT_DBG(ld2) - ("Should not happen: no element data pointer in macro element %d!\n", - element2->getIndex()); - - LeafDataPeriodic *ldp1 = - dynamic_cast(ld1->getElementData(PERIODIC)); - LeafDataPeriodic *ldp2 = - dynamic_cast(ld2->getElementData(PERIODIC)); - - if (!ldp1) { - ldp1 = new LeafDataPeriodic(ld1); - element1->setElementData(ldp1); - } - - if (!ldp2) { - ldp2 = new LeafDataPeriodic(ld2); - element2->setElementData(ldp2); - } - - ldp1->addPeriodicInfo(mode, boundaryType, sideEl1, &periodicCoordsEl1); - ldp2->addPeriodicInfo(mode, boundaryType, sideEl2, &periodicCoordsEl2); - - if (mode != 0) { - VertexVector *associated = mesh->periodicAssociations[boundaryType]; - - if (!associated) { - associated = new VertexVector(mesh->getVertexAdmin(), "vertex vector"); - mesh->periodicAssociations[boundaryType] = associated; - VertexVector::Iterator it(associated, ALL_DOFS); - for (it.reset2(); !it.end(); ++it) - *it = it.getDOFIndex(); - } - - for (int j = 0; j < dim; j++) { -#ifdef DEBUG - { - unsigned initData(melVertex[el1][verticesEl1[j]]); - unsigned oldData((*associated)[melVertex[el1][verticesEl1[j]]]); - unsigned newData(melVertex[el2][vertexMapEl1[verticesEl1[j]]]); - if( initData != oldData && newData != oldData ) { - MSG("warning: element %d overwrites assoc index %d: %d -> %d\n", - el1, initData, oldData, newData); - } - } + std::map vertexMapEl1; + std::map vertexMapEl2; + + result = fscanf(file, "%d", &mode); + TEST_EXIT(result == 1)("mode?\n"); + + result = fscanf(file, "%d", &boundaryType); + TEST_EXIT(result == 1)("boundaryType?\n"); + + result = fscanf(file, "%d", &el1); + TEST_EXIT(result == 1)("el1?\n"); + + for (int j = 0; j < dim; j++) { + result = fscanf(file, "%d", &verticesEl1[j]); + TEST_EXIT(result == 1)("vertEl1[%d]\n", j); + } + result = fscanf(file, "%d", &el2); + TEST_EXIT(result == 1)("el2?\n"); + for (int j = 0; j < dim; j++) { + result = fscanf(file, "%d", &verticesEl2[j]); + TEST_EXIT(result == 1)("vertEl2[%d]\n", j); + } + for (int j = 0; j < dim; j++) { + if (mode == 0) + periodicMap.setEntry(melVertex[el1][verticesEl1[j]], + melVertex[el2][verticesEl2[j]]); + vertexMapEl1[verticesEl1[j]] = verticesEl2[j]; + vertexMapEl2[verticesEl2[j]] = verticesEl1[j]; + } + + // calculate sides of periodic vertices + int sideEl1 = 0, sideEl2 = 0; + if (dim == 1) { + sideEl1 = verticesEl1[0]; + sideEl2 = verticesEl2[0]; + } else { + for (int j = 0; j < dim + 1; j++) { + sideEl1 += j; + sideEl2 += j; + } + for (int j = 0; j < dim; j++) { + sideEl1 -= verticesEl1[j]; + sideEl2 -= verticesEl2[j]; + } + } + + // create periodic info + DimVec > periodicCoordsEl1(dim - 1, NO_INIT); + DimVec > periodicCoordsEl2(dim - 1, NO_INIT); + + Element *element1 = const_cast((*(mel + el1))->getElement()); + Element *element2 = const_cast((*(mel + el2))->getElement()); + + // for all vertices of this side + for (int j = 0; j < dim; j++) { + periodicCoordsEl1[element1->getPositionOfVertex(sideEl1, verticesEl1[j])] = + coords[melVertex[el2][vertexMapEl1[verticesEl1[j]]]]; + + periodicCoordsEl2[element2->getPositionOfVertex(sideEl2, verticesEl2[j])] = + coords[melVertex[el1][vertexMapEl2[verticesEl2[j]]]]; + } + + // decorate leaf data + ElementData *ld1 = element1->getElementData(); + ElementData *ld2 = element2->getElementData(); + + TEST_EXIT_DBG(ld1) + ("Should not happen: no element data pointer in macro element %d!\n", + element1->getIndex()); + + TEST_EXIT_DBG(ld2) + ("Should not happen: no element data pointer in macro element %d!\n", + element2->getIndex()); + + LeafDataPeriodic *ldp1 = + dynamic_cast(ld1->getElementData(PERIODIC)); + LeafDataPeriodic *ldp2 = + dynamic_cast(ld2->getElementData(PERIODIC)); + + if (!ldp1) { + ldp1 = new LeafDataPeriodic(ld1); + element1->setElementData(ldp1); + } + + if (!ldp2) { + ldp2 = new LeafDataPeriodic(ld2); + element2->setElementData(ldp2); + } + + ldp1->addPeriodicInfo(mode, boundaryType, sideEl1, &periodicCoordsEl1); + ldp2->addPeriodicInfo(mode, boundaryType, sideEl2, &periodicCoordsEl2); + + if (mode != 0) { + VertexVector* associated = NULL; + DOFAdmin* localAdmin = NULL; + + if (mesh->periodicAssociations[boundaryType].empty()) { + for (unsigned int iadmin = 0; iadmin < mesh->admin.size(); iadmin++) { + localAdmin = mesh->admin[iadmin]; + TEST_EXIT_DBG(localAdmin->getNumberOfDofs(VERTEX) == 1) + ("Periodic boundary supports only one dof on element vertex.\n"); + + associated = new VertexVector(localAdmin, "vertex vector"); + mesh->periodicAssociations[boundaryType].push_back(associated); + VertexVector::Iterator it(associated, ALL_DOFS); + for (it.reset2(); !it.end(); ++it) + *it = it.getDOFIndex(); + } + } + + for (unsigned int iadmin = 0; iadmin < mesh->admin.size(); iadmin++) { + associated = mesh->periodicAssociations[boundaryType][iadmin]; + + for (int j = 0; j < dim; j++) { +#ifndef NDEBUG + { + unsigned initData(melVertex[el1][verticesEl1[j]]); + unsigned oldData((*associated)[melVertex[el1][verticesEl1[j]]]); + unsigned newData(melVertex[el2][vertexMapEl1[verticesEl1[j]]]); + if( initData != oldData && newData != oldData ) { + MSG("warning: element %d overwrites assoc index %d: %d -> %d\n", + el1, initData, oldData, newData); + } + } #endif - (*associated)[melVertex[el1][verticesEl1[j]]] = - melVertex[el2][vertexMapEl1[verticesEl1[j]]]; - (*associated)[melVertex[el2][verticesEl2[j]]] = - melVertex[el1][vertexMapEl2[verticesEl2[j]]]; - } - } + (*associated)[melVertex[el1][verticesEl1[j]]] = + melVertex[el2][vertexMapEl1[verticesEl1[j]]]; + (*associated)[melVertex[el2][verticesEl2[j]]] = + melVertex[el1][vertexMapEl2[verticesEl2[j]]]; + } + } + } } delete [] verticesEl1; @@ -252,41 +263,44 @@ namespace AMDiS { namespace io { // change periodic vertex dofs for (int i = 0; i < mesh->getNumberOfVertices(); i++) { - if (periodicMap.getEntry(i) != -1) { - mesh->freeDof(dof[i], VERTEX); - dof[i] = dof[periodicMap.getEntry(i)]; - - std::map::iterator assoc; - std::map::iterator assocEnd = - mesh->periodicAssociations.end(); - - for (assoc = mesh->periodicAssociations.begin(); assoc != assocEnd; ++assoc) { - - DegreeOfFreedom a = (*(assoc->second))[i]; - if (a != i) { - (*(assoc->second))[i] = i; - (*(assoc->second))[a] = periodicMap.getEntry(i); - } - } + if (periodicMap.getEntry(i) != -1) { + mesh->freeDof(dof[i], VERTEX); + dof[i] = dof[periodicMap.getEntry(i)]; + + std::map >::iterator assoc; + std::map >::iterator assocEnd = + mesh->periodicAssociations.end(); + + for (assoc = mesh->periodicAssociations.begin(); assoc != assocEnd; ++assoc) { + for (unsigned int iadmin = 0; iadmin < mesh->admin.size(); iadmin++) { + DegreeOfFreedom a = (*(assoc->second)[iadmin])[i]; + if (a != i) { + (*(assoc->second)[iadmin])[i] = i; + (*(assoc->second)[iadmin])[a] = periodicMap.getEntry(i); + } + } // for iadmin + } // for assoc + + } // if + } // for i + +#ifndef NDEBUG + std::map >::iterator assoc; + std::map >::iterator assocEnd = + mesh->periodicAssociations.end(); + for (assoc = mesh->periodicAssociations.begin(); + assoc != assocEnd; ++assoc) + for (int i = 0; i < mesh->getNumberOfVertices(); i++) + if (i != (*(assoc->second)[0])[i]) + MSG("association %d: vertex %d -> vertex %d\n", + assoc->first, i, (*(assoc->second)[0])[i]); - } + for (int i = 0; i < mesh->getNumberOfVertices(); i++) { + if (periodicMap.getEntry(i) != -1) { + MSG("identification : vertex %d is now vertex %d\n", + i, periodicMap.getEntry(i)); + } } - -#if (DEBUG != 0) - std::map::iterator assoc; - std::map::iterator assocEnd = - mesh->periodicAssociations.end(); - for (assoc = mesh->periodicAssociations.begin(); - assoc != assocEnd; ++assoc) - for (int i = 0; i < mesh->getNumberOfVertices(); i++) - if (i != (*(assoc->second))[i]) - MSG("association %d: vertex %d -> vertex %d\n", - assoc->first, i, (*(assoc->second))[i]); - - for (int i = 0; i < mesh->getNumberOfVertices(); i++) - if (periodicMap.getEntry(i) != -1) - MSG("identification : vertex %d is now vertex %d\n", - i, periodicMap.getEntry(i)); #endif } // periodicFile diff --git a/AMDiS/src/parallel/DofComm.cc b/AMDiS/src/parallel/DofComm.cc index 6abc9be8d23572d6f786cbc485e1577a39d315ba..f2caf8889755de01aa43761c708677a593b75de4 100644 --- a/AMDiS/src/parallel/DofComm.cc +++ b/AMDiS/src/parallel/DofComm.cc @@ -54,7 +54,7 @@ namespace AMDiS { namespace Parallel { createContainer(mesh, boundary, boundary.getOwn(), sendDofs); createContainer(mesh, boundary, boundary.getOther(), recvDofs); -#if (DEBUG != 0) +#ifndef NDEBUG { std::set sds; for (DofComm::Iterator it(sendDofs, feSpaces[0]); diff --git a/AMDiS/src/parallel/ElementObjectDatabase.cc b/AMDiS/src/parallel/ElementObjectDatabase.cc index 1c538c866861bb9573d21e4afd8b6ed77fd0b025..e4f4437c5385097eeeeb48d1628cd77f92b56d0c 100644 --- a/AMDiS/src/parallel/ElementObjectDatabase.cc +++ b/AMDiS/src/parallel/ElementObjectDatabase.cc @@ -307,7 +307,7 @@ namespace AMDiS { namespace Parallel { // === Calculate smallest periodic boundary ID in mesh. === smallestPeriodicBcType = 0; - for (map::iterator it = macroMesh->getPeriodicAssociations().begin(); + for (map >::iterator it = macroMesh->getPeriodicAssociations().begin(); it != macroMesh->getPeriodicAssociations().end(); ++it) smallestPeriodicBcType = std::min(smallestPeriodicBcType, it->first); @@ -452,7 +452,7 @@ namespace AMDiS { namespace Parallel { // === in a symmetric way, i.e., if A -> B for a specific boundary type, === // === there must be a mapping B -> A with the same boundary type. === -#if (DEBUG != 0) +#ifndef NDEBUG for (PerBoundMap::iterator it = periodicVertices.begin(); it != periodicVertices.end(); ++it) { pair testVertex = @@ -489,17 +489,14 @@ namespace AMDiS { namespace Parallel { FUNCNAME_DBG("ElementObjectDatabase::getNewBoundaryType()"); BoundaryType newPeriodicBoundaryType = 0; - for (map::iterator it = macroMesh->getPeriodicAssociations().begin(); - it != macroMesh->getPeriodicAssociations().end(); ++it) + for (map >::iterator it = macroMesh->getPeriodicAssociations().begin(); + it != macroMesh->getPeriodicAssociations().end(); ++it) newPeriodicBoundaryType = std::min(newPeriodicBoundaryType, it->first); TEST_EXIT_DBG(newPeriodicBoundaryType < 0)("Should not happen!\n"); newPeriodicBoundaryType--; - for(size_t i = 0; i < meshes.size(); i++) { - meshes[i]->getPeriodicAssociations()[newPeriodicBoundaryType] = - new VertexVector(feSpaces[i]->getAdmin(), ""); - } + macroMesh->setPeriodicAssociations(newPeriodicBoundaryType, new VertexVector(feSpace->getAdmin(), "")); return newPeriodicBoundaryType; } diff --git a/AMDiS/src/parallel/MatrixNnzStructure.cc b/AMDiS/src/parallel/MatrixNnzStructure.cc index 845b62d239da8af80886290b63b17be00db1855b..497e26ae8af0db87a7d98e1d9de9941e182bf2c6 100644 --- a/AMDiS/src/parallel/MatrixNnzStructure.cc +++ b/AMDiS/src/parallel/MatrixNnzStructure.cc @@ -334,7 +334,7 @@ namespace AMDiS { namespace Parallel { onnz[i] = std::min(onnz[i], nOverallCols - nRankCols); } -#if (DEBUG != 0) +#ifndef NDEBUG int nMax = 0; int nSum = 0; for (int i = 0; i < nRankRows; i++) { diff --git a/AMDiS/src/parallel/MeshDistributor.cc b/AMDiS/src/parallel/MeshDistributor.cc index a977801a7814905f2ea1d154f59aafcc59d4d9a1..bf181fbf8e404ab026116a1fa83be69016fddfd8 100644 --- a/AMDiS/src/parallel/MeshDistributor.cc +++ b/AMDiS/src/parallel/MeshDistributor.cc @@ -29,8 +29,8 @@ #include "parallel/MeshDistributor.h" #include "parallel/MeshManipulation.h" -#if (DEBUG != 0) -#include "parallel/ParallelDebug.h" +#ifndef NDEBUG + #include "parallel/ParallelDebug.h" #endif #include "parallel/StdMpi.h" #include "parallel/MeshPartitioner.h" @@ -63,8 +63,8 @@ #include "ProblemStat.h" #include "ProblemInstat.h" #include "RefinementManager3d.h" -#if (DEBUG != 0) -#include "Debug.h" +#ifndef NDEBUG + #include "Debug.h" #endif #include "Timer.h" #include "io/MacroReader.h" @@ -264,7 +264,7 @@ namespace AMDiS { namespace Parallel { // already refined in some way. testForMacroMesh(); -#if (DEBUG != 0) +#ifndef NDEBUG // Check whether meshes come from the same macro mesh. The way is to compare // the node coords of each macro element in the meshes. debug::ElementIdxToCoords macroCoords; @@ -297,7 +297,7 @@ namespace AMDiS { namespace Parallel { elObjDb.setData(partitionMap, levelData); -#if (DEBUG != 0) +#ifndef NDEBUG TEST_EXIT_DBG(dofMaps.size())("No DOF mapping defined!\n"); ParallelDebug::writeDebugFile(feSpaces[feSpaces.size() - 1], *(dofMaps[0]), @@ -313,7 +313,7 @@ namespace AMDiS { namespace Parallel { createInitialPartitioning(); -#if (DEBUG != 0) +#ifndef NDEBUG std::vector elMap(meshes.size()); for (size_t i = 0; i < meshes.size(); i++) { debug::createSortedDofs(meshes[i], elMap[i]); @@ -393,9 +393,10 @@ namespace AMDiS { namespace Parallel { // because they are not valid anymore after some macro elements have been // removed and the corresponding DOFs were deleted. for (size_t i = 0; i < meshes.size(); i++) - for (map::iterator it = meshes[i]->getPeriodicAssociations().begin(); - it != meshes[i]->getPeriodicAssociations().end(); ++it) - const_cast(meshes[i]->getDofAdmin(0)).removeDOFContainer(dynamic_cast(it->second)); + for (map >::iterator it = meshes[i]->getPeriodicAssociations().begin(); + it != meshes[i]->getPeriodicAssociations().end(); ++it) + for (size_t j = 0; j < it->second.size(); j++) + const_cast(meshes[i]->getDofAdmin(j)).removeDOFContainer(dynamic_cast(it->second[j])); @@ -407,7 +408,7 @@ namespace AMDiS { namespace Parallel { // === If in debug mode, make some tests. === -#if (DEBUG != 0) +#ifndef NDEBUG MSG("AMDiS runs in debug mode, so make some test ...\n"); ParallelDebug::testAllElements(*this); @@ -424,7 +425,7 @@ namespace AMDiS { namespace Parallel { // Remove periodic boundary conditions in sequential problem definition. removePeriodicBoundaryConditions(); -#if (DEBUG != 0) +#ifndef NDEBUG ParallelDebug::testPeriodicBoundary(*this); #endif @@ -471,7 +472,7 @@ namespace AMDiS { namespace Parallel { } updateDofRelatedStruct(meshes[i]); -#if (DEBUG != 0) +#ifndef NDEBUG ParallelDebug::testPeriodicBoundary(*this); #endif } @@ -529,8 +530,8 @@ namespace AMDiS { namespace Parallel { if (filename != "") { MSG("Read macro weights from %s\n", filename.c_str()); - ifstream infile; - infile.open(filename.c_str(), ifstream::in); + std::ifstream infile; + infile.open(filename.c_str(), std::ifstream::in); while (!infile.eof()) { int elNum, elWeight; infile >> elNum; @@ -656,7 +657,7 @@ namespace AMDiS { namespace Parallel { filename); filename += ".p" + lexical_cast(mpiRank); MSG("Start deserialization with %s\n", filename.c_str()); - ifstream in(filename.c_str()); + std::ifstream in(filename.c_str()); TEST_EXIT(!in.fail())("Could not open deserialization file: %s\n", filename.c_str()); @@ -946,7 +947,7 @@ namespace AMDiS { namespace Parallel { pair edge1 = make_pair(elObjDb.getElementPtr(*elIt, meshes[i]), edgeNoInEl[*elIt]); -#if (DEBUG != 0) +#ifndef NDEBUG DofEdge dofEdge0 = edge0.first->getEdge(edge0.second); DofEdge dofEdge1 = edge1.first->getEdge(edge1.second); @@ -1226,7 +1227,7 @@ namespace AMDiS { namespace Parallel { vector meshAllValues(meshes.size(), 0); for (size_t i = 0; i < meshes.size(); i++) { -#if (DEBUG != 0) +#ifndef NDEBUG MSG("mesh[%d] change index = %d, stored last index = %d.\n", i, meshes[i]->getChangeIndex(), lastMeshChangeIndexs[meshes[i]]); #endif @@ -1280,7 +1281,7 @@ namespace AMDiS { namespace Parallel { bool meshChanged = false; // === Check the boundaries and adapt mesh if necessary. === -#if (DEBUG != 0) +#ifndef NDEBUG MSG("Run checkAndAdaptBoundary for mesh[%d]...\n", i); #endif @@ -1325,7 +1326,7 @@ namespace AMDiS { namespace Parallel { updateLocalGlobalNumbering(); -#if (DEBUG != 0) +#ifndef NDEBUG debug::writeMesh(feSpaces[0], -1, debugOutputDir + "mesh"); ParallelDebug::testPeriodicBoundary(*this); #endif @@ -1337,7 +1338,7 @@ namespace AMDiS { namespace Parallel { if (repartitioningFailed > 0) { -#if (DEBUG != 0) +#ifndef NDEBUG MSG("Repartitioning not tried because it has failed in the past!\n"); #endif @@ -1463,7 +1464,7 @@ namespace AMDiS { namespace Parallel { MeshStructure elCode; elCode.init(boundIt->rankObj, elObjDb.getElementPtr(boundIt->rankObj.elIndex, mesh)); -#if (DEBUG != 0) +#ifndef NDEBUG ParallelDebug::followBoundary(mesh, *boundIt, elCode); #endif @@ -1581,7 +1582,7 @@ namespace AMDiS { namespace Parallel { } else { mpiComm.Bcast(&repartitioning, 1, MPI_INT, 0); } -#if (DEBUG != 0) +#ifndef NDEBUG if (repartitioning == 0) { MSG("imbalanceFactor = %f < %f = imbalanceRepartitionBound\n", imbalanceFactor, imbalanceRepartitionBound); } @@ -1633,7 +1634,7 @@ namespace AMDiS { namespace Parallel { Timer t; -#if (DEBUG != 0) +#ifndef NDEBUG for (size_t i = 0; i < meshes.size(); i++) ParallelDebug::testDoubleDofs(meshes[i]); int writePartMesh = 1; @@ -1709,7 +1710,7 @@ namespace AMDiS { namespace Parallel { updateLocalGlobalNumbering(); -#if (DEBUG != 0) +#ifndef NDEBUG MSG("AMDiS runs in debug mode, so make some test ...\n"); ParallelDebug::writePartitioningFile(debugOutputDir + "partitioning", @@ -1734,7 +1735,7 @@ namespace AMDiS { namespace Parallel { { FUNCNAME("MeshDistributor::quickRepartition()"); -#if (DEBUG != 0) +#ifndef NDEBUG MSG("... Run quickRepartition ...\n"); #endif @@ -1954,7 +1955,7 @@ namespace AMDiS { namespace Parallel { { FUNCNAME("MeshDistributor::fullRepartition()"); -#if (DEBUG != 0) +#ifndef NDEBUG MSG("... Run fullRepartition ...\n"); #endif @@ -1966,7 +1967,7 @@ namespace AMDiS { namespace Parallel { MPI::Intracomm &mpiComm = MPI::COMM_WORLD; -#if (DEBUG != 0) +#ifndef NDEBUG int nOldLeaves = mesh->getNumberOfLeaves(); mpi::globalAdd(mpiComm, nOldLeaves); #endif @@ -2190,7 +2191,7 @@ namespace AMDiS { namespace Parallel { interchangeVectors[i], domainMacroValues[macroId][j++]); -#if (DEBUG != 0) +#ifndef NDEBUG MeshStructure code; code.init(mesh, macroId); TEST_EXIT(code.getCode() == domainMacroCodes[macroId].getCode()) @@ -2224,7 +2225,7 @@ namespace AMDiS { namespace Parallel { } updateDofRelatedStruct(mesh); -#if (DEBUG != 0) +#ifndef NDEBUG int nNewLeaves = mesh->getNumberOfLeaves(); mpi::globalAdd(mpiComm, nNewLeaves); @@ -2242,7 +2243,7 @@ namespace AMDiS { namespace Parallel { elObjDb.create(partitionMap, levelData); elObjDb.updateRankData(); -#if (DEBUG != 0) +#ifndef NDEBUG if (mpiRank == 0) ParallelDebug::writePeriodicElObjInfo(*this, debugOutputDir); #endif @@ -2260,7 +2261,7 @@ namespace AMDiS { namespace Parallel { intBoundary.create(levelData, elObjDb); -#if (DEBUG != 0) +#ifndef NDEBUG for (int level = 0; level < levelData.getNumberOfLevels(); level++) ParallelDebug::printBoundaryInfo(intBoundary[level]); #endif @@ -2383,7 +2384,7 @@ namespace AMDiS { namespace Parallel { mesh->dofCompress(); -#if (DEBUG != 0) +#ifndef NDEBUG debug::ElementIdxToDofs elMap; debug::createSortedDofs(mesh, elMap); #endif @@ -2400,7 +2401,7 @@ namespace AMDiS { namespace Parallel { lastMeshChangeIndexs[mesh] = mesh->getChangeIndex(); -#if (DEBUG != 0) +#ifndef NDEBUG static int fileNumber(0); //improvised counter for adapt Iteration stringstream ss; ss << debugOutputDir << "elementMaps." << fileNumber ; @@ -2434,14 +2435,14 @@ namespace AMDiS { namespace Parallel { FUNCNAME("MeshDistributor::updateLocalGlobalNumbering()"); Timer t; -#if (DEBUG != 0) +#ifndef NDEBUG bool printInfo = true; Parameters::get("parallel->print dofmap info", printInfo); #endif for (size_t i = 0; i < dofMaps.size(); i++) { dofMaps[i]->update(); -#if (DEBUG != 0) +#ifndef NDEBUG if (printInfo) dofMaps[i]->printInfo(); #endif @@ -2456,7 +2457,7 @@ namespace AMDiS { namespace Parallel { dofMaps[i]->updateMatIndex(); } -#if (DEBUG != 0) +#ifndef NDEBUG if (printInfo) { int test = 0; Parameters::get("parallel->remove periodic boundary", test); diff --git a/AMDiS/src/parallel/MeshManipulation.cc b/AMDiS/src/parallel/MeshManipulation.cc index 49fe0e693fd19df960a912ba2ac4076fe4abfc88..9b59b18e043984bac9ae912c6b1a1504c367b0f7 100644 --- a/AMDiS/src/parallel/MeshManipulation.cc +++ b/AMDiS/src/parallel/MeshManipulation.cc @@ -98,7 +98,7 @@ namespace AMDiS { namespace Parallel { elInfo = stack.traverseNext(elInfo); } -#if (DEBUG != 0) +#ifndef NDEBUG DOFVector > coords(feSpace, "dofCorrds"); feSpace->getMesh()->getDofIndexCoords(coords); #endif @@ -173,7 +173,7 @@ namespace AMDiS { namespace Parallel { el1->getAllDofs(feSpace, b1, dofs1, true, &dofGeoIndex1); -#if (DEBUG != 0) +#ifndef NDEBUG if (feSpaces.size()) debug::testDofsByCoords(coords, dofs0, dofs1); else @@ -222,7 +222,7 @@ namespace AMDiS { namespace Parallel { el0->getAllDofs(feSpace, b0, dofs0, true, &dofGeoIndex0); el1->getAllDofs(feSpace, b1, dofs1, true, &dofGeoIndex1); -#if (DEBUG != 0) +#ifndef NDEBUG if (feSpaces.size()) debug::testDofsByCoords(coords, dofs0, dofs1); else @@ -327,7 +327,7 @@ namespace AMDiS { namespace Parallel { // Create traverse stack and traverse within the mesh until the element, // which should be fitted to the mesh structure code, is reached. TraverseStack stack; -#if (DEBUG != 0) +#ifndef NDEBUG ElInfo *elInfo = stack.traverseFirstOneMacro(mesh, boundEl.elIndex, -1, traverseFlag); diff --git a/AMDiS/src/parallel/ParMetisPartitioner.h b/AMDiS/src/parallel/ParMetisPartitioner.h index 63a63d80dfb12838d4b73a822209e17b1f78fff9..06b3b9723ceac5b72875e5f51a937f8da1532ac4 100644 --- a/AMDiS/src/parallel/ParMetisPartitioner.h +++ b/AMDiS/src/parallel/ParMetisPartitioner.h @@ -30,6 +30,15 @@ #include #include +#ifndef REALTYPEWIDTH +#define real_t float +#endif + +#ifndef PARMETIS_PSR_COUPLED +#define PARMETIS_PSR_COUPLED 1 +#define PARMETIS_PSR_UNCOUPLED 2 +#endif + #include "AMDiS_fwd.h" #include "Global.h" #include "parallel/MeshPartitioner.h" @@ -182,7 +191,7 @@ namespace AMDiS { namespace Parallel { void createPartitionMap(std::map& partitionMap); - void setItr(double value) + void setItr(real_t value) { itr = value; } @@ -195,7 +204,7 @@ namespace AMDiS { namespace Parallel { protected: ParMetisMesh *parMetisMesh; - double itr; + real_t itr; }; } } diff --git a/AMDiS/src/parallel/PetscHelper.cc b/AMDiS/src/parallel/PetscHelper.cc index 16e7baf161ac2f342b4a6304e090fd7cc72ce687..28e377df80eedf3dd8872d8b3afb69f248f686c0 100644 --- a/AMDiS/src/parallel/PetscHelper.cc +++ b/AMDiS/src/parallel/PetscHelper.cc @@ -177,7 +177,7 @@ namespace AMDiS int firstRow = firstRow0 + firstRow1; int mpiSize = MPI::COMM_WORLD.Get_size(); -#if (DEBUG != 0) +#ifndef NDEBUG int mpiRank = MPI::COMM_WORLD.Get_rank(); #endif vector allFirstRow0(mpiSize + 1, 0); @@ -303,12 +303,16 @@ namespace AMDiS PCFactorSetMatSolverPackage(pc, matSolverPackage); PCSetFromOptions(pc); -#if DEBUG != 0 +#ifndef NDEBUG MSG("PetscOptionsView:\n"); PetscViewer viewer; PetscViewerCreate(PETSC_COMM_WORLD, &viewer); PetscViewerSetType(viewer, PETSCVIEWERASCII); +#if (PETSC_VERSION_MINOR >= 7) + PetscOptionsView(PETSC_NULL, viewer); +#else PetscOptionsView(viewer); +#endif PetscViewerDestroy(&viewer); #endif } @@ -327,7 +331,6 @@ namespace AMDiS rtol, atol, maxIt); } - void createSolver(MPI::Intracomm comm, KSP &ksp, Mat m, std::string kspPrefix, int info) { KSPCreate(comm, &ksp); @@ -341,9 +344,9 @@ namespace AMDiS KSPSetOptionsPrefix(ksp, kspPrefix.c_str()); if (info >= 10) - KSPMonitorSet(ksp, KSPMonitorDefault, PETSC_NULL, PETSC_NULL); + KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorDefault), PETSC_NULL, PETSC_NULL); else if (info >= 20) - KSPMonitorSet(ksp, KSPMonitorTrueResidualNorm, PETSC_NULL, PETSC_NULL); + KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorTrueResidualNorm), PETSC_NULL, PETSC_NULL); } } // end namespace petsc_helper diff --git a/AMDiS/src/parallel/PetscHelper.h b/AMDiS/src/parallel/PetscHelper.h index 0161855821b6f1ca3cc54719f16fe1d33b613290..41da017d58509e844ddfa2bccdf8df34ed43ca60 100644 --- a/AMDiS/src/parallel/PetscHelper.h +++ b/AMDiS/src/parallel/PetscHelper.h @@ -31,6 +31,13 @@ #include #include "AMDiS_fwd.h" +#if (PETSC_VERSION_MINOR >= 7) + #define PETSC_MONITOR_CAST(...) \ + (PetscErrorCode (*)(KSP,PetscInt,PetscReal,void*))(__VA_ARGS__) +#else + #define PETSC_MONITOR_CAST(...) __VA_ARGS__ +#endif + namespace AMDiS { namespace Parallel diff --git a/AMDiS/src/parallel/PetscSolver.cc b/AMDiS/src/parallel/PetscSolver.cc index bf85a99ef38f86b03d4b8495e6dd57477a0a502e..0393acba8820d5df4463df41527c9ecaf2a4511e 100644 --- a/AMDiS/src/parallel/PetscSolver.cc +++ b/AMDiS/src/parallel/PetscSolver.cc @@ -49,7 +49,7 @@ namespace AMDiS { namespace Parallel { Parameters::get(name + "->ksp", kspStr); if (kspStr != "") - PetscOptionsInsertString(kspStr.c_str()); + petsc_options_insert_string(kspStr.c_str()); Parameters::get(name + "->remove rhs null space", removeRhsNullspace); Parameters::get(name + "->has constant null space", hasConstantNullspace); diff --git a/AMDiS/src/parallel/PetscSolver.h b/AMDiS/src/parallel/PetscSolver.h index 774acf5b9f2cdacee4781361b34070302d57df87..2ad445f7f21f4eb01502c042ffe505da90963c7c 100644 --- a/AMDiS/src/parallel/PetscSolver.h +++ b/AMDiS/src/parallel/PetscSolver.h @@ -33,6 +33,7 @@ #include "AMDiS_fwd.h" #include "parallel/ParallelCoarseSpaceSolver.h" +#include "solver/PetscTypes.h" namespace AMDiS { diff --git a/AMDiS/src/parallel/PetscSolverCahnHilliard.cc b/AMDiS/src/parallel/PetscSolverCahnHilliard.cc index d98d161d39ddf49dab9874d38ba328e893bfdf52..ec8e1edf67444543bfde33ec33ac1bba4fe6cd50 100644 --- a/AMDiS/src/parallel/PetscSolverCahnHilliard.cc +++ b/AMDiS/src/parallel/PetscSolverCahnHilliard.cc @@ -91,9 +91,9 @@ namespace AMDiS { namespace Parallel { KSPSetOperators(ksp, getMatInterior(), getMatInterior(), SAME_NONZERO_PATTERN); #endif if (getInfo() >= 10) - KSPMonitorSet(ksp, KSPMonitorDefault, PETSC_NULL, PETSC_NULL); + KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorDefault), PETSC_NULL, PETSC_NULL); else if (getInfo() >= 20) - KSPMonitorSet(ksp, KSPMonitorTrueResidualNorm, PETSC_NULL, PETSC_NULL); + KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorTrueResidualNorm), PETSC_NULL, PETSC_NULL); petsc_helper::setSolver(ksp, "ch_", KSPFGMRES, PCNONE, getRelative(), getTolerance(), getMaxIterations()); KSPSetFromOptions(ksp); diff --git a/AMDiS/src/parallel/PetscSolverCahnHilliard2.cc b/AMDiS/src/parallel/PetscSolverCahnHilliard2.cc index 237a98ab0a8b4a532ca0f5bd8169c9052fbf393c..29b67b812202d7caa09017731832f9cbcc6bc46b 100644 --- a/AMDiS/src/parallel/PetscSolverCahnHilliard2.cc +++ b/AMDiS/src/parallel/PetscSolverCahnHilliard2.cc @@ -123,9 +123,9 @@ namespace AMDiS { namespace Parallel { KSPSetOperators(ksp, getMatInterior(), getMatInterior(), SAME_NONZERO_PATTERN); #endif if (getInfo() >= 10) - KSPMonitorSet(ksp, KSPMonitorDefault, PETSC_NULL, PETSC_NULL); + KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorDefault), PETSC_NULL, PETSC_NULL); else if (getInfo() >= 20) - KSPMonitorSet(ksp, KSPMonitorTrueResidualNorm, PETSC_NULL, PETSC_NULL); + KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorTrueResidualNorm), PETSC_NULL, PETSC_NULL); petsc_helper::setSolver(ksp, "ch_", KSPFGMRES, PCNONE, getRelative(), getTolerance(), getMaxIterations()); if (useOldInitialGuess) diff --git a/AMDiS/src/parallel/PetscSolverFeti.cc b/AMDiS/src/parallel/PetscSolverFeti.cc index 626441b1b63446ebee1a5e6018add133ec2a1144..43e1f8c6068ca35e69be98d3e0d2989d0acdb673 100644 --- a/AMDiS/src/parallel/PetscSolverFeti.cc +++ b/AMDiS/src/parallel/PetscSolverFeti.cc @@ -147,7 +147,7 @@ namespace AMDiS { namespace Parallel { { FUNCNAME("PetscSolverFeti::initialize()"); -#if (DEBUG != 0) +#ifndef NDEBUG MSG("Init FETI-DP on mesh level %d\n", meshLevel); #endif @@ -751,7 +751,7 @@ namespace AMDiS { namespace Parallel { MatAssemblyEnd(mat_lagrange, MAT_FINAL_ASSEMBLY); -#if (DEBUG != 0) +#ifndef NDEBUG { int nZeroRows = PetscSolverFetiDebug::testZeroRows(mat_lagrange); int m,n; @@ -1382,9 +1382,9 @@ namespace AMDiS { namespace Parallel { Parameters::get(name + "->feti->monitor", monitor); if (monitor) { if (stokesMode) - KSPMonitorSet(ksp_feti, KSPMonitorFetiStokes, &fetiKspData, PETSC_NULL); + KSPMonitorSet(ksp_feti, PETSC_MONITOR_CAST(KSPMonitorFetiStokes), &fetiKspData, PETSC_NULL); else - KSPMonitorSet(ksp_feti, KSPMonitorTrueResidualNorm, PETSC_NULL, PETSC_NULL); + KSPMonitorSet(ksp_feti, PETSC_MONITOR_CAST(KSPMonitorTrueResidualNorm), PETSC_NULL, PETSC_NULL); } @@ -1833,7 +1833,7 @@ namespace AMDiS { namespace Parallel { Vec nullSpaceBasis; VecCreateNest(domainComm, 2, PETSC_NULL, vecArray, &nullSpaceBasis); -#if (DEBUG != 0) +#ifndef NDEBUG PetscSolverFetiDebug::writeNullSpace(*this, nullSpaceBasis); #endif @@ -1870,7 +1870,7 @@ namespace AMDiS { namespace Parallel { return; } -#if (DEBUG != 0) +#ifndef NDEBUG PetscInt nRow, nCol; MatGetLocalSize(subdomain->getMatInterior(), &nRow, &nCol); mpi::globalAdd(nRow); diff --git a/AMDiS/src/parallel/PetscSolverGlobalBlockMatrix.cc b/AMDiS/src/parallel/PetscSolverGlobalBlockMatrix.cc index e348a7e8f9b701dea5a71fe60ee7c82a78147245..aea0fb81c930d466f99929f1a81089ce4a76c9b0 100644 --- a/AMDiS/src/parallel/PetscSolverGlobalBlockMatrix.cc +++ b/AMDiS/src/parallel/PetscSolverGlobalBlockMatrix.cc @@ -44,7 +44,7 @@ namespace AMDiS { namespace Parallel { int nRankRows = (*interiorMap)[feSpace].nRankDofs; int nOverallRows = (*interiorMap)[feSpace].nOverallDofs; -#if (DEBUG != 0) +#ifndef NDEBUG MSG("Fill petsc matrix 1 needed %.5f seconds\n", MPI::Wtime() - wtime); #endif @@ -97,7 +97,7 @@ namespace AMDiS { namespace Parallel { MatCreateNest(domainComm, nBlocks, PETSC_NULL, nBlocks, PETSC_NULL, &(nestMat[0]), &getMatInterior()); -#if (DEBUG != 0) +#ifndef NDEBUG MSG("Fill petsc matrix 2 needed %.5f seconds\n", MPI::Wtime() - wtime); #endif diff --git a/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc b/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc index a8e5982e1ffdda95f31ebaf76fa9e52cc5580a1e..626b5407d39185dc8efb98f5eb64c78c44206e2c 100644 --- a/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc +++ b/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc @@ -50,15 +50,15 @@ namespace AMDiS { namespace Parallel { if (params.matSolverPackage.find(kspSolver) != params.matSolverPackage.end()) { // direct solvers - PetscOptionsInsertString(("-" + kspPrefix + "ksp_type preonly").c_str()); - PetscOptionsInsertString(("-" + kspPrefix + "pc_type lu").c_str()); - PetscOptionsInsertString(("-" + kspPrefix + "pc_factor_mat_solver_package " + kspSolver).c_str()); + petsc_options_insert_string(("-" + kspPrefix + "ksp_type preonly").c_str()); + petsc_options_insert_string(("-" + kspPrefix + "pc_type lu").c_str()); + petsc_options_insert_string(("-" + kspPrefix + "pc_factor_mat_solver_package " + kspSolver).c_str()); setMaxIterations(1); zeroStartVector = true; matSolverPackage = true; } else if (params.emptyParam.find(kspSolver) == params.emptyParam.end() && solverName != "petsc") { // other solvers - PetscOptionsInsertString(("-" + kspPrefix + "ksp_type " + kspSolver).c_str()); + petsc_options_insert_string(("-" + kspPrefix + "ksp_type " + kspSolver).c_str()); } // set the preconditioner @@ -70,24 +70,24 @@ namespace AMDiS { namespace Parallel { Parameters::get(name + "->right precon", precon); if (!matSolverPackage && params.emptyParam.find(precon) == params.emptyParam.end()) { precon = (params.preconMap.find(precon) != params.preconMap.end() ? params.preconMap[precon] : precon); - PetscOptionsInsertString(("-" + kspPrefix + "pc_type " + precon).c_str()); + petsc_options_insert_string(("-" + kspPrefix + "pc_type " + precon).c_str()); } - PetscOptionsInsertString(("-" + kspPrefix + "ksp_max_it " + boost::lexical_cast(getMaxIterations())).c_str()); - PetscOptionsInsertString(("-" + kspPrefix + "ksp_rtol " + boost::lexical_cast(getRelative())).c_str()); - PetscOptionsInsertString(("-" + kspPrefix + "ksp_atol " + boost::lexical_cast(getTolerance())).c_str()); + petsc_options_insert_string(("-" + kspPrefix + "ksp_max_it " + boost::lexical_cast(getMaxIterations())).c_str()); + petsc_options_insert_string(("-" + kspPrefix + "ksp_rtol " + boost::lexical_cast(getRelative())).c_str()); + petsc_options_insert_string(("-" + kspPrefix + "ksp_atol " + boost::lexical_cast(getTolerance())).c_str()); if (getInfo() >= 20) - PetscOptionsInsertString(("-" + kspPrefix + "ksp_monitor_true_residual").c_str()); + petsc_options_insert_string(("-" + kspPrefix + "ksp_monitor_true_residual").c_str()); else if (getInfo() >= 10) - PetscOptionsInsertString(("-" + kspPrefix + "ksp_monitor").c_str()); + petsc_options_insert_string(("-" + kspPrefix + "ksp_monitor").c_str()); } if (!matSolverPackage) { Parameters::get(name + "->use zero start vector", zeroStartVector); } Parameters::get("parallel->print matrix info", printMatInfo); -#if DEBUG != 0 +#ifndef NDEBUG bool printOptionsInfo = false; Parameters::get("parallel->debug->print options info", printOptionsInfo); if (printOptionsInfo) { @@ -95,8 +95,13 @@ namespace AMDiS { namespace Parallel { PetscViewer viewer; PetscViewerCreate(PETSC_COMM_WORLD, &viewer); PetscViewerSetType(viewer, PETSCVIEWERASCII); +#if (PETSC_VERSION_MINOR >= 7) + PetscOptionsView(PETSC_NULL, viewer); +#else PetscOptionsView(viewer); +#endif PetscViewerDestroy(&viewer); + } #endif } @@ -110,7 +115,7 @@ namespace AMDiS { namespace Parallel { TEST_EXIT_DBG(interiorMap)("No parallel mapping object defined!\n"); TEST_EXIT_DBG(seqMat)("No DOF matrix defined!\n"); -#if (DEBUG != 0) +#ifndef NDEBUG Timer t; #endif @@ -123,7 +128,7 @@ namespace AMDiS { namespace Parallel { // === Create PETSc vector (solution and a temporary vector). === -#if (DEBUG != 0) +#ifndef NDEBUG MSG("Fill petsc matrix 1 needed %.5f seconds\n", t.elapsed()); t.reset(); #endif @@ -136,7 +141,7 @@ namespace AMDiS { namespace Parallel { if ((*seqMat)[i][j]) setDofMatrix((*seqMat)[i][j], i, j); -#if (DEBUG != 0) +#ifndef NDEBUG MSG("Fill petsc matrix 2 needed %.5f seconds\n", t.elapsed()); t.reset(); #endif @@ -162,7 +167,7 @@ namespace AMDiS { namespace Parallel { initPreconditioner(*seqMat, mat[0][0]); -#if (DEBUG != 0) +#ifndef NDEBUG MSG("Fill petsc matrix 3 needed %.5f seconds\n", t.elapsed()); #endif @@ -669,24 +674,19 @@ namespace AMDiS { namespace Parallel { cols.reserve(300); values.reserve(300); - vector globalCols; - // Get periodic mapping object PeriodicMap &perMap = meshDistributor->getPeriodicMap(); + std::map associatedRows; std::set &dirichletRows = seqMat->getDirichletRows(); const FiniteElemSpace *rowFe = seqMat->getRowFeSpace(); const FiniteElemSpace *colFe = seqMat->getColFeSpace(); - // === Traverse all rows of the DOF matrix and insert row wise the values === - // === to the PETSc matrix. === - for (cursor_type cursor = begin(seqMat->getBaseMatrix()), - cend = end(seqMat->getBaseMatrix()); cursor != cend; ++cursor) { - // Global index of the current row DOF. + cend = end(seqMat->getBaseMatrix()); cursor != cend; ++cursor) { MultiIndex rowMultiIndex; if ((*interiorMap)[rowComp].find(cursor.value(), rowMultiIndex) == false) - continue; + continue; int globalRowDof = rowMultiIndex.global; @@ -695,132 +695,73 @@ namespace AMDiS { namespace Parallel { // Dirichlet rows can be set only be the owner ranks. if (dirichletRows.count(cursor.value()) && !((*interiorMap)[rowComp].isRankDof(cursor.value()))) - continue; - - if (!periodicRow) { - // === Row DOF index is not periodic. === - - // Get PETSc's mat row index. - int rowIndex = interiorMap->getMatIndex(rowComp, globalRowDof); - - cols.clear(); - values.clear(); - - for (icursor_type icursor = begin(cursor), icend = end(cursor); - icursor != icend; ++icursor) { - - // Global index of the current column index. - MultiIndex colMultiIndex; - if ((*interiorMap)[colComp].find(col(*icursor), colMultiIndex) == false) - continue; - - int globalColDof = colMultiIndex.global; - // Test if the current col dof is a periodic dof. - bool periodicCol = perMap.isPeriodic(colFe, globalColDof); - // Get PETSc's mat col index. - int colIndex = interiorMap->getMatIndex(colComp, globalColDof); - - // Ignore all zero entries, expect it is a diagonal entry. - if (value(*icursor) == 0.0 && rowIndex != colIndex) - continue; - - if (!periodicCol) { - // Calculate the exact position of the column index in the PETSc matrix. - cols.push_back(colIndex); - values.push_back(value(*icursor)); - } else { - // === Row index is not periodic, but column index is. === - - // Create set of all periodic associations of the column index. - std::set perAsc; - perMap.fillAssociations(colFe, globalColDof, - meshDistributor->getElementObjectDb(), perAsc); - - // Scale value to the number of periodic associations of the column index. - double scaledValue = - value(*icursor) * pow(0.5, static_cast(perAsc.size())); - - - // === Create set of all matrix column indices due to the periodic === - // === associations of the column DOF index. === - - vector newCols; - perMap.mapDof(colFe, globalColDof, perAsc, newCols); - for (unsigned int i = 0; i < newCols.size(); i++) { - cols.push_back(interiorMap->getMatIndex(colComp, newCols[i])); - values.push_back(scaledValue); - } - } - } - - MatSetValues(getMatInterior(), 1, &rowIndex, cols.size(), - &(cols[0]), &(values[0]), ADD_VALUES); - } else { - // === Row DOF index is periodic. === + continue; - // Because this row is periodic, we will have to add the entries of this - // matrix row to multiple rows. The following maps store to each row an - // array of column indices and values of the entries that must be added to - // the PETSc matrix. - map > colsMap; - map > valsMap; + int rowIndex = interiorMap->getMatIndex(rowComp, globalRowDof); + int assRowIndex = -1; - // Traverse all column entries. - for (icursor_type icursor = begin(cursor), icend = end(cursor); - icursor != icend; ++icursor) { - // Global index of the current column index. - int globalColDof = (*interiorMap)[colComp][col(*icursor)].global; + if (periodicRow) { + std::set perAsc; + perMap.fillAssociations(rowFe, globalRowDof, + meshDistributor->getElementObjectDb(), perAsc); - // Ignore all zero entries, expect it is a diagonal entry. - if (value(*icursor) == 0.0 && globalRowDof != globalColDof) - continue; + vector newRows; + perMap.mapDof(rowFe, globalRowDof, perAsc, newRows); - // === Add all periodic associations of both, the row and the column === - // === indices to the set perAsc. === + assRowIndex = interiorMap->getMatIndex(rowComp, + *std::max_element(newRows.begin(),newRows.end())); + } - std::set perAsc; - perMap.fillAssociations(colFe, globalColDof, - meshDistributor->getElementObjectDb(), perAsc); - perMap.fillAssociations(rowFe, globalRowDof, - meshDistributor->getElementObjectDb(), perAsc); + cols.clear(); + values.clear(); - // Scale the value with respect to the number of periodic associations. - double scaledValue = - value(*icursor) * pow(0.5, static_cast(perAsc.size())); + for (icursor_type icursor = begin(cursor), icend = end(cursor); + icursor != icend; ++icursor) { + // Global index of the current column index. + MultiIndex colMultiIndex; + if ((*interiorMap)[colComp].find(col(*icursor), colMultiIndex) == false) + continue; - // === Create all matrix entries with respect to the periodic === - // === associations of the row and column indices. === + int globalColDof = colMultiIndex.global; + // Get PETSc's mat col index. + int colIndex = interiorMap->getMatIndex(colComp, globalColDof); - vector > entry; - perMap.mapDof(rowFe, colFe, make_pair(globalRowDof, globalColDof), - perAsc, entry); + cols.push_back(colIndex); + values.push_back(value(*icursor)); + } - // === Translate the matrix entries to PETSc's matrix. + if (!periodicRow || assRowIndex == rowIndex) + MatSetValues(getMatInterior(), 1, &rowIndex, cols.size(), + &(cols[0]), &(values[0]), ADD_VALUES); + else { + MatSetValues(getMatInterior(), 1, &assRowIndex, cols.size(), + &(cols[0]), &(values[0]), ADD_VALUES); - for (unsigned int i = 0; i < entry.size(); i++) { - int rowIdx = interiorMap->getMatIndex(rowComp, entry[i].first); - int colIdx = interiorMap->getMatIndex(colComp, entry[i].second); + associatedRows.insert(std::make_pair(rowIndex, assRowIndex)); + } + } - colsMap[rowIdx].push_back(colIdx); - valsMap[rowIdx].push_back(scaledValue); - } - } + int globalPeriodic = associatedRows.size(); + Parallel::mpi::globalAdd(globalPeriodic); + if (globalPeriodic) { - // === Finally, add all periodic rows to the PETSc matrix. === + MatAssemblyBegin(getMatInterior(), MAT_FLUSH_ASSEMBLY); + MatAssemblyEnd(getMatInterior(), MAT_FLUSH_ASSEMBLY); - for (map >::iterator rowIt = colsMap.begin(); - rowIt != colsMap.end(); ++rowIt) { - TEST_EXIT_DBG(rowIt->second.size() == valsMap[rowIt->first].size()) - ("Should not happen!\n"); + int c[2]; double v[2] = {1.0, -1.0}; - int rowIndex = rowIt->first; + std::map::iterator mapIt = associatedRows.begin(); + for (;mapIt != associatedRows.end(); mapIt++) { + c[0] = mapIt->first; + c[1] = mapIt->second; - MatSetValues(getMatInterior(), 1, &rowIndex, rowIt->second.size(), - &(rowIt->second[0]), &(valsMap[rowIt->first][0]), ADD_VALUES); - } + MatSetValues(getMatInterior(), 1, &c[0], 2, c, v, INSERT_VALUES); } + + MatAssemblyBegin(getMatInterior(), MAT_FLUSH_ASSEMBLY); + MatAssemblyEnd(getMatInterior(), MAT_FLUSH_ASSEMBLY); } } @@ -837,6 +778,8 @@ namespace AMDiS { namespace Parallel { const FiniteElemSpace *feSpace = vec->getFeSpace(); PeriodicMap &perMap = meshDistributor->getPeriodicMap(); + std::set associatedRows; + ParallelDofMapping *rowCoarseSpace = (coarseSpaceMap.size() ? coarseSpaceMap[rowComp] : NULL); @@ -849,54 +792,68 @@ namespace AMDiS { namespace Parallel { DegreeOfFreedom dof = dofIt.getDOFIndex(); if (rankOnly && !(*interiorMap)[rowComp].isRankDof(dof)) - continue; + continue; bool isCoarseDof = isCoarseSpace(rowComp, dof); // Dirichlet rows can be set only be the owner ranks. if (dirichletValues.count(dof)) { - if ((!isCoarseDof && !((*interiorMap)[rowComp].isRankDof(dof))) || - (isCoarseDof && !((*rowCoarseSpace)[rowComp].isRankDof(dof)))) - continue; + if ((!isCoarseDof && !((*interiorMap)[rowComp].isRankDof(dof))) || + (isCoarseDof && !((*rowCoarseSpace)[rowComp].isRankDof(dof)))) + continue; } if (isCoarseDof) { - TEST_EXIT_DBG(vecCoarse != PETSC_NULL)("vecCoarse not set! Should not happen!\n"); + TEST_EXIT_DBG(vecCoarse != PETSC_NULL)("vecCoarse not set! Should not happen!\n"); - int index = rowCoarseSpace->getMatIndex(rowComp, dof); - VecSetValue(vecCoarse, index, *dofIt, ADD_VALUES); + int index = rowCoarseSpace->getMatIndex(rowComp, dof); + VecSetValue(vecCoarse, index, *dofIt, ADD_VALUES); } else { - if ((*interiorMap)[rowComp].isSet(dof) == false) - continue; - - // Calculate global row index of the DOF. - DegreeOfFreedom globalRowDof = (*interiorMap)[rowComp][dof].global; + if ((*interiorMap)[rowComp].isSet(dof) == false) + continue; + + // Calculate global row index of the DOF. + DegreeOfFreedom globalRowDof = (*interiorMap)[rowComp][dof].global; + + // Get PETSc's mat index of the row DOF. + int index = 0, mappedIndex = -1; + if (interiorMap->isMatIndexFromGlobal()) + index = interiorMap->getMatIndex(rowComp, globalRowDof) + rStartInterior; + else + index = + interiorMap->getMatIndex(rowComp, dof) + rStartInterior; + + bool periodicRow = perMap.isPeriodic(feSpace, globalRowDof); + if (periodicRow) { + std::set& perAsc = perMap.getAssociations(feSpace, globalRowDof); + vector newRows; + perMap.mapDof(feSpace, globalRowDof, perAsc, newRows); + mappedIndex = interiorMap->getMatIndex(rowComp, + *std::max_element(newRows.begin(),newRows.end())); + } + + if (!periodicRow || mappedIndex == index) + VecSetValue(vecInterior, index, *dofIt, ADD_VALUES); + else { + VecSetValue(vecInterior, mappedIndex, *dofIt, ADD_VALUES); + associatedRows.insert(index); + } + } + } - // Get PETSc's mat index of the row DOF. - int index = 0; - if (interiorMap->isMatIndexFromGlobal()) - index = interiorMap->getMatIndex(rowComp, globalRowDof) + rStartInterior; - else - index = - interiorMap->getMatIndex(rowComp, dof) + rStartInterior; + int globalPeriodic = associatedRows.size(); + Parallel::mpi::globalAdd(globalPeriodic); - if (perMap.isPeriodic(feSpace, globalRowDof)) { - std::set& perAsc = perMap.getAssociations(feSpace, globalRowDof); - double value = *dofIt / (perAsc.size() + 1.0); - VecSetValue(vecInterior, index, value, ADD_VALUES); + if (globalPeriodic) { + VecAssemblyBegin(vecInterior); + VecAssemblyEnd(vecInterior); - for (std::set::iterator perIt = perAsc.begin(); - perIt != perAsc.end(); ++perIt) { - int mappedDof = perMap.map(feSpace, *perIt, globalRowDof); - int mappedIndex = interiorMap->getMatIndex(rowComp, mappedDof); + std::set::iterator setIt = associatedRows.begin(); + for (;setIt != associatedRows.end(); setIt++) + VecSetValue(vecInterior, *setIt, 0.0, INSERT_VALUES); - VecSetValue(vecInterior, mappedIndex, value, ADD_VALUES); - } - } else { - // The DOF index is not periodic. - VecSetValue(vecInterior, index, *dofIt, ADD_VALUES); - } - } + VecAssemblyBegin(vecInterior); + VecAssemblyEnd(vecInterior); } } diff --git a/AMDiS/src/parallel/PetscSolverNSCH.cc b/AMDiS/src/parallel/PetscSolverNSCH.cc index a708f57ff29542ce0a9bbea4510b7dcb7b902538..0a065a65ea3eb9383009fd8f9e22c0199ceb182b 100644 --- a/AMDiS/src/parallel/PetscSolverNSCH.cc +++ b/AMDiS/src/parallel/PetscSolverNSCH.cc @@ -189,7 +189,7 @@ namespace AMDiS { namespace Parallel { #else KSPSetOperators(ksp, getMatInterior(), getMatInterior(), SAME_NONZERO_PATTERN); #endif - KSPMonitorSet(ksp, KSPMonitorTrueResidualNorm, PETSC_NULL, PETSC_NULL); + KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorTrueResidualNorm), PETSC_NULL, PETSC_NULL); petsc_helper::setSolver(ksp, "ch_", KSPFGMRES, PCSHELL, getRelative(), getTolerance(), getMaxIterations()); setConstantNullSpace(ksp, componentSpaces[0]->getMesh()->getDim() , true); } diff --git a/AMDiS/src/parallel/PetscSolverNavierStokes.cc b/AMDiS/src/parallel/PetscSolverNavierStokes.cc index b83dd84da9a38eb46b2cd4dd1e97d8a5143434d9..4098b347afec7dfe3dc1cd8b0b89adc2e13f825e 100644 --- a/AMDiS/src/parallel/PetscSolverNavierStokes.cc +++ b/AMDiS/src/parallel/PetscSolverNavierStokes.cc @@ -123,9 +123,9 @@ namespace AMDiS { namespace Parallel { KSPSetOperators(ksp, getMatInterior(), getMatInterior(), SAME_NONZERO_PATTERN); #endif if (getInfo() >= 10) - KSPMonitorSet(ksp, KSPMonitorDefault, PETSC_NULL, PETSC_NULL); + KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorDefault), PETSC_NULL, PETSC_NULL); else if (getInfo() >= 20) - KSPMonitorSet(ksp, KSPMonitorTrueResidualNorm, PETSC_NULL, PETSC_NULL); + KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorTrueResidualNorm), PETSC_NULL, PETSC_NULL); petsc_helper::setSolver(ksp, "ns_", KSPFGMRES, PCNONE, getRelative(), getTolerance(), getMaxIterations()); // Create null space information. diff --git a/AMDiS/src/parallel/StdMpi.h b/AMDiS/src/parallel/StdMpi.h index 0c8819ca61c350fa05e8f18aac08262f454ea663..53433146db9cd2eb15209463ae7f5d42ec791186 100644 --- a/AMDiS/src/parallel/StdMpi.h +++ b/AMDiS/src/parallel/StdMpi.h @@ -532,7 +532,7 @@ namespace AMDiS { namespace Parallel { MPI::Request::Waitall(requestCounter, request); -#if (DEBUG != 0) +#ifndef NDEBUG bool testall = MPI::Request::Testall(requestCounter, request); TEST_EXIT(testall)("Should not happen!\n"); #endif diff --git a/AMDiS/src/parallel/ZoltanPartitioner.cc b/AMDiS/src/parallel/ZoltanPartitioner.cc index 0deb14b02d572dd82bd0d9052866b6aab6263c83..5d4ac072dd3e10ff56d671db6e738555a08734f6 100644 --- a/AMDiS/src/parallel/ZoltanPartitioner.cc +++ b/AMDiS/src/parallel/ZoltanPartitioner.cc @@ -140,7 +140,7 @@ namespace AMDiS { namespace Parallel { zoltan.Set_Param("OBJ_WEIGHT_DIM", "1"); -#if (DEBUG != 0) +#ifndef NDEBUG zoltan.Set_Param("DEBUG_LEVEL", "1"); #else zoltan.Set_Param("DEBUG_LEVEL", "0"); diff --git a/AMDiS/src/solver/LinearSolverInterface.h b/AMDiS/src/solver/LinearSolverInterface.h index 61d79fca8ff8aa5023fdf4e2930e4b0dc198d2ea..ea69db6ce5f463a34a998c5a8ff070f827310e11 100644 --- a/AMDiS/src/solver/LinearSolverInterface.h +++ b/AMDiS/src/solver/LinearSolverInterface.h @@ -127,7 +127,7 @@ namespace AMDiS { MSG("Residual norm: ||b-Ax|| = %e\n", residual); } -#if DEBUG != 0 +#ifndef NDEBUG if (getIterations() > 0) { MSG("Nr. of iterations needed = %d\n", getIterations()); } diff --git a/AMDiS/src/solver/PetscSolver.h b/AMDiS/src/solver/PetscSolver.h index eca54fcb69d5ae131545453eb4b3482352a36a9a..2df75926b28902dc34e4f8461707a45aa0c6af35 100644 --- a/AMDiS/src/solver/PetscSolver.h +++ b/AMDiS/src/solver/PetscSolver.h @@ -58,7 +58,7 @@ namespace AMDiS { virtual void init(PC pc, const SolverMatrix >& A, const MatrixType& fullMatrix) { - PetscOptionsInsertString(("-" + prefix + "pc_type " + name).c_str()); + petsc_options_insert_string(("-" + prefix + "pc_type " + name).c_str()); PCSetFromOptions(pc); } diff --git a/AMDiS/src/solver/PetscSolver.hh b/AMDiS/src/solver/PetscSolver.hh index a251441143a87228df78af495932f83f983dc6b6..51a057c91803c3a3b65f484e6ca679f1424c70a9 100644 --- a/AMDiS/src/solver/PetscSolver.hh +++ b/AMDiS/src/solver/PetscSolver.hh @@ -47,30 +47,30 @@ namespace AMDiS { if (params.matSolverPackage[kspSolver]) { // direct solvers - PetscOptionsInsertString(("-" + kspPrefix + "ksp_type preonly").c_str()); - PetscOptionsInsertString(("-" + kspPrefix + "pc_type lu").c_str()); - PetscOptionsInsertString(("-" + kspPrefix + "pc_factor_mat_solver_package " + (kspSolver != "direct" ? kspSolver : "umfpack")).c_str()); + petsc_options_insert_string(("-" + kspPrefix + "ksp_type preonly").c_str()); + petsc_options_insert_string(("-" + kspPrefix + "pc_type lu").c_str()); + petsc_options_insert_string(("-" + kspPrefix + "pc_factor_mat_solver_package " + (kspSolver != "direct" ? kspSolver : "umfpack")).c_str()); oem.setMaxIterations(1); zeroStartVector = true; matSolverPackage = true; } else if (!params.emptyParam[kspSolver]) { // other solvers - PetscOptionsInsertString(("-" + kspPrefix + "ksp_type " + kspSolver).c_str()); + petsc_options_insert_string(("-" + kspPrefix + "ksp_type " + kspSolver).c_str()); } // set the preconditioner setPrecon(); if (oem.getInfo() >= 20) - PetscOptionsInsertString(("-" + kspPrefix + "ksp_monitor_true_residual").c_str()); + petsc_options_insert_string(("-" + kspPrefix + "ksp_monitor_true_residual").c_str()); else if (oem.getInfo() >= 10) - PetscOptionsInsertString(("-" + kspPrefix + "ksp_monitor").c_str()); + petsc_options_insert_string(("-" + kspPrefix + "ksp_monitor").c_str()); // command line string std::string kspString = ""; Parameters::get(oem.getName() + "->ksp", kspString); if (kspString != "") - PetscOptionsInsertString(kspString.c_str()); + petsc_options_insert_string(kspString.c_str()); } diff --git a/AMDiS/src/solver/PetscTypes.h b/AMDiS/src/solver/PetscTypes.h index eb976e650bf2669a55d6c18d0433f77218d21bbd..805a6cbde7643fd6755acd959a9a814f8184c5da 100644 --- a/AMDiS/src/solver/PetscTypes.h +++ b/AMDiS/src/solver/PetscTypes.h @@ -143,6 +143,17 @@ namespace AMDiS { template< typename Mapper > void operator>>(const PetscVectorNested& dest, VecMap& rhs); + + inline PetscErrorCode petsc_options_insert_string(const char in_str[]) + { +#if (PETSC_VERSION_MINOR >= 7) + return PetscOptionsInsertString(NULL, in_str); +#else + return PetscOptionsInsertString(in_str); +#endif + } + + } // end namespace AMDiS #include "solver/PetscTypes.hh" diff --git a/README.md b/README.md index e1ab10dff7f81c2aaca392a1b117532cbae68e63..c68d586c739159e33d8b357bd0e77e8ed17a88a6 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,87 @@ -AMDiS (Adaptive MultiDimensional Simulations) is a C++ library to solve a broad class of partial differential equations (PDE) using adaptive finite elements. +AMDiS (Adaptive MultiDimensional Simulations) is a C++ library to solve a broad class of partial differential equations (PDEs) using adaptive finite elements. Here you will find some information and tutorials about AMDiS usage/installation/extension... + +## Building + +The AMDiS library uses [CMake](https://cmake.org) to build. To configure with CMake we suggest to create a build directory, and run: + +``` +mkdir build && cd build +cmake ../AMDiS +``` + +## Installing + +To install the library you may provide an installation directory, by calling CMake with the additional argument: + +``` +cmake -DCMAKE_INSTALL_PREFIX:PATH=[install_dir] . +``` + +and just run the `install` target: -Install AMDiS by using cmake: ``` -cmake AMDiS -make && make install +cmake --build . --target install ``` + +## Demos + +Some demo programs using the AMDiS library are implemented in the subdirectory `demo`. To configure and build run CMake again, with the AMDiS installation directory specified: + +``` +mkdir demo/build && cd demo/build +cmake -DAMDIS_DIR:PATH=[install_dir]/share/amdis .. +cmake --build . --target all +``` + +## Tests + +The tests are implemented in the subdirectory `test` and can be built and run by using the CMake: + +``` +mkdir test/build && cd test/build +cmake -DAMDIS_DIR:PATH=[install_dir]/share/amdis .. +cmake --build . --target all +``` + +## Documentation + +The documentation is built using [Doxygen](http://www.doxygen.org). Simply run the command in the `doc` subdirectory: + +``` +cd doc +doxygen +``` + +Then html documentation is then generated in the `doc/html` folder. + +## System requirements + +AMDiS can be build with various c++ compilers, e.g. +- gcc, version >= 4.6 +- clang, version >= 3.1 +- intel, version >= 2013 +- MSVC, version >= 11.0 + +A detailed overview about compiler compatibility is listed in the wiki-page [Compatibility](https://gitlab.math.tu-dresden.de/iwr/amdis/wikis/compatibility). + +We assume the following libraries to be found in standard location: +- [boost](http://boost.org) (modules: system, iostreams, filesystem, program_options, and date_time), version >= 1.48 +- [CMake](https://cmake.org), version >= 3.1 + +For the parallel AMDiS we require additionally +- [ParMETIS](http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview), version >= 4.0 +- [PETSc](https://www.mcs.anl.gov/petsc), version >= 3.3 + +When PETSc is configured with ParMETIS, the version from PETSc can be used directly. + +## CMake options +When configuring AMDiS several options can be modified. For an interactive gui, use either `ccmake`, or `cmake-gui`. + +| Option | Type | Description | +| -------------- | ---- | ----------- | +| ENABLE_UMFPACK | BOOL | Compile with support for suitesparse UMFPack library | +| ENABLE_COMPRESSION | BOOL | Allow compressed output of .vtk and .arh files. Need zlib and libbz2 to be installed on the system. | +| ENABLE_PARALLEL_DOMAIN | BOOL | Switch to parallel AMDiS. Needs PETSc and ParMETIS to be installed. | +| PETSC_DIR | PATH | Path to the PETSc root directory, containing the lib/ and include/ subdirectories. | +| PARMETIS_DIR | PATH | Path to the ParMETIS root directory, containing the lib/ and include/ subdirectories. | +| ENABLE_EXTENSIONS | BOOL | Add additional features, not yet part of the standard AMDiS. Experimental! Should be used with care. | diff --git a/configure.sh b/configure.sh old mode 100644 new mode 100755 index 164cd27911d2fc9043d5f0b90a01d46d4a82430f..9708a8cf5101cad30816bbc903e5e1b7c5a01b7b --- a/configure.sh +++ b/configure.sh @@ -56,11 +56,12 @@ Optional Features: requires boost-iostreams with enabled ZLib and libbz2 support. --enable-parallel Compile the parallel version of AMDiS. Needs PETSc and - Parmetis. (see --with-petsc, --with-parmetis) + Parmetis. (see --with-petsc-dir, --with-parmetis-dir) Optional Packages: --with-umfpack Adds support for the direct solver UMFPACK. --with-suitesparse (see --with-umfpack) + --with-boost-dir=DIR Sets the boost root directory. [${BOOST_PREFIX}] --download-boost Download and install boost to '${SRC_DIR}/packages/boost'. @@ -194,11 +195,11 @@ if [ "${DOWNLOAD_BOOST}" -eq "1" ]; then BOOST_PREFIX=${SRC_DIR}/packages/boost/${BOOST_VERSION} cd /tmp/src/boost - ./bootstrap.sh --prefix=${BOOST_PREFIX} --with-libraries=system,iostreams,filesystem,program_options,date_time + ./bootstrap.sh --prefix=${BOOST_PREFIX} --with-libraries=system,iostreams,filesystem,program_options,date_time,test if [ "${ENABLE_COMPRESSION}" = "ON" ]; then - ./b2 -s cxxflags="-std=c++11" --build-type=minimal install + ./b2 -s cxxflags="-std=c++11" --build-type=minimal variant=release install else - ./b2 -s NO_BZIP2=1 -s NO_ZLIB=1 cxxflags="-std=c++11" --build-type=minimal install + ./b2 -s NO_BZIP2=1 -s NO_ZLIB=1 cxxflags="-std=c++11" --build-type=minimal variant=release install fi rm -rf /tmp/src/boost fi @@ -283,8 +284,7 @@ fi # Install AMDiS cd ${BUILD_DIR} if [ "${ENABLE_PARALLEL}" = "OFF" ]; then - cmake -DUSE_NEW_CMAKE:BOOL=ON \ - -DENABLE_UMFPACK:BOOL=${ENABLE_UMFPACK} \ + cmake -DENABLE_UMFPACK:BOOL=${ENABLE_UMFPACK} \ -DCMAKE_BUILD_TYPE:String=${BUILD_TYPE} \ -DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_PREFIX} \ -DCMAKE_CXX_FLAGS:STRING="${CXX_FLAGS}" \ @@ -293,8 +293,7 @@ if [ "${ENABLE_PARALLEL}" = "OFF" ]; then -DENABLE_COMPRESSION:BOOL=${ENABLE_COMPRESSION} ${BOOST_CONFIG} \ ${SRC_DIR}/AMDiS/ else - cmake -DUSE_NEW_CMAKE:BOOL=ON \ - -DCMAKE_CXX_COMPILER=mpic++ \ + cmake -DCMAKE_CXX_COMPILER=mpic++ \ -DCMAKE_C_COMPILER=mpicc \ -DCMAKE_BUILD_TYPE:String=${BUILD_TYPE} \ -DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_PREFIX} \ diff --git a/demo/CMakeLists.txt b/demo/CMakeLists.txt index b78d91f5c1e3fce397e2d7b178313302955aece2..63fe58df0f8ad07b61454de07be8dbb54e9d77a5 100644 --- a/demo/CMakeLists.txt +++ b/demo/CMakeLists.txt @@ -1,72 +1,44 @@ -project("amdis_demo") -cmake_minimum_required(VERSION 2.8) +project("amdis_demos") +cmake_minimum_required(VERSION 2.8.10) -#find_package(AMDIS REQUIRED COMPONENTS umfpack ) -find_package(AMDIS REQUIRED) +find_package(AMDIS REQUIRED ${COMPONENT}) -if(AMDIS_FOUND) - message(STATUS "AMDiS was found.") - include(${AMDIS_USE_FILE}) - SET(BASIS_LIBS ${AMDIS_LIBRARIES}) -endif(AMDIS_FOUND) +include_directories(${AMDIS_INCLUDE_DIRS}) +add_definitions(${AMDIS_COMPILEFLAGS}) -set(ball src/ball.cc) -set(bunny src/bunny.cc) -set(ellipt src/ellipt.cc) -set(heat src/heat.cc) -set(neumann src/neumann.cc) -set(nonlin src/nonlin.cc) -set(parametric src/parametric.cc) -set(periodic src/periodic.cc) -set(sphere src/sphere.cc) -set(torus src/torus.cc) -set(vecellipt src/vecellipt.cc) -set(vecheat src/vecheat.cc) -add_executable("ball" ${ball}) -target_link_libraries("ball" ${BASIS_LIBS}) -install(TARGETS ball RUNTIME DESTINATION bin) +add_executable(ball src/ball.cc) +target_link_libraries(ball ${AMDIS_LIBRARIES}) -add_executable("bunny" ${bunny}) -target_link_libraries("bunny" ${BASIS_LIBS}) -install(TARGETS bunny RUNTIME DESTINATION bin) +add_executable(bunny src/bunny.cc) +target_link_libraries(bunny ${AMDIS_LIBRARIES}) -add_executable("ellipt" ${ellipt}) -target_link_libraries("ellipt" ${BASIS_LIBS}) -install(TARGETS ellipt RUNTIME DESTINATION bin) +add_executable(ellipt src/ellipt.cc) +target_link_libraries(ellipt ${AMDIS_LIBRARIES}) -add_executable("heat" ${heat}) -target_link_libraries("heat" ${BASIS_LIBS}) -install(TARGETS heat RUNTIME DESTINATION bin) +add_executable(heat src/heat.cc) +target_link_libraries(heat ${AMDIS_LIBRARIES}) -add_executable("neumann" ${neumann}) -target_link_libraries("neumann" ${BASIS_LIBS}) -install(TARGETS neumann RUNTIME DESTINATION bin) +add_executable(neumann src/neumann.cc) +target_link_libraries(neumann ${AMDIS_LIBRARIES}) -add_executable("nonlin" ${nonlin}) -target_link_libraries("nonlin" ${BASIS_LIBS}) -install(TARGETS nonlin ball RUNTIME DESTINATION bin) +add_executable(nonlin src/nonlin.cc) +target_link_libraries(nonlin ${AMDIS_LIBRARIES}) -add_executable("parametric" ${parametric}) -target_link_libraries("parametric" ${BASIS_LIBS}) -install(TARGETS parametric RUNTIME DESTINATION bin) +add_executable(parametric src/parametric.cc) +target_link_libraries(parametric ${AMDIS_LIBRARIES}) -add_executable("periodic" ${periodic}) -target_link_libraries("periodic" ${BASIS_LIBS}) -install(TARGETS periodic RUNTIME DESTINATION bin) +add_executable(periodic src/periodic.cc) +target_link_libraries(periodic ${AMDIS_LIBRARIES}) -add_executable("sphere" ${sphere}) -target_link_libraries("sphere" ${BASIS_LIBS}) -install(TARGETS sphere RUNTIME DESTINATION bin) +add_executable(sphere src/sphere.cc) +target_link_libraries(sphere ${AMDIS_LIBRARIES}) -add_executable("torus" ${torus}) -target_link_libraries("torus" ${BASIS_LIBS}) -install(TARGETS torus RUNTIME DESTINATION bin) +add_executable(torus src/torus.cc) +target_link_libraries(torus ${AMDIS_LIBRARIES}) -add_executable("vecellipt" ${vecellipt}) -target_link_libraries("vecellipt" ${BASIS_LIBS}) -install(TARGETS vecellipt RUNTIME DESTINATION bin) +add_executable(vecellipt src/vecellipt.cc) +target_link_libraries(vecellipt ${AMDIS_LIBRARIES}) -add_executable("vecheat" ${vecheat}) -target_link_libraries("vecheat" ${BASIS_LIBS}) -install(TARGETS vecheat RUNTIME DESTINATION bin) +add_executable(vecheat src/vecheat.cc) +target_link_libraries(vecheat ${AMDIS_LIBRARIES}) diff --git a/demo/init/periodic.dat.2d b/demo/init/periodic.dat.2d index 781a28c42812be9ae99204d0b8f9aaffe113f2cf..15e33f9d795f666a6e0c6fc09414ee8251ddf0d2 100644 --- a/demo/init/periodic.dat.2d +++ b/demo/init/periodic.dat.2d @@ -9,11 +9,11 @@ periodic->dim: 2 periodic->polynomial degree[0]: 1 periodic->components: 1 -periodic->solver: cg +periodic->solver: bicg periodic->solver->max iteration: 1000 periodic->solver->tolerance: 1.e-8 periodic->solver->info: 2 -periodic->solver->left precon: diag +periodic->solver->left precon: no periodic->solver->right precon: no periodic->estimator[0]: residual diff --git a/demo/init/periodic.dat.3d b/demo/init/periodic.dat.3d index c6d022f118cb48f8a70fe53c457233dcc331feba..1d80a4dc1d87b15e06cff09d1b69a6b0f1a56a9d 100644 --- a/demo/init/periodic.dat.3d +++ b/demo/init/periodic.dat.3d @@ -9,11 +9,11 @@ periodic->dim: 3 periodic->polynomial degree[0]: 1 periodic->components: 1 -periodic->solver: cg +periodic->solver: bicg periodic->solver->max iteration: 1000 periodic->solver->tolerance: 1.e-8 periodic->solver->info: 2 -periodic->solver->left precon: diag +periodic->solver->left precon: no periodic->solver->right precon: no periodic->estimator[0]: residual diff --git a/extensions/ExtendedProblemStat.h b/extensions/ExtendedProblemStat.h index 29575b3d2c6d18d7a37a226fe420e6c7f22f268e..21ed43be0f0400f4be149c0a593aa843db39e55e 100644 --- a/extensions/ExtendedProblemStat.h +++ b/extensions/ExtendedProblemStat.h @@ -337,6 +337,7 @@ public: BoundaryType nr, AbstractFunction >* meshIndicator, AbstractFunction, WorldVector >* periodicMap) { + WARNING("Depreciated! Use ProblemStat::addPeriodicBC instead!!!\n"); PeriodicBcDataList.push_back(PeriodicBcData(row, nr, meshIndicator, periodicMap)); } @@ -346,6 +347,7 @@ public: AbstractFunction >* meshIndicator, AbstractFunction, WorldVector >* periodicMap) { + WARNING("Depreciated! Use ProblemStat::addPeriodicBC instead!!!\n"); PeriodicBcDataList.push_back(PeriodicBcData(row, meshIndicator, periodicMap)); } diff --git a/extensions/preconditioner/PetscSolverNavierStokes2.cc b/extensions/preconditioner/PetscSolverNavierStokes2.cc index 8fa7c644e1b3427b315b3d286cd0dbffd711d011..44ab7b20847f7f92a7ae2bc2eb1c558cb7d31f5b 100644 --- a/extensions/preconditioner/PetscSolverNavierStokes2.cc +++ b/extensions/preconditioner/PetscSolverNavierStokes2.cc @@ -139,9 +139,9 @@ namespace AMDiS { namespace Parallel { KSPSetOperators(ksp, getMatInterior(), getMatInterior(), SAME_NONZERO_PATTERN); #endif if (getInfo() >= 10) - KSPMonitorSet(ksp, KSPMonitorDefault, PETSC_NULL, PETSC_NULL); + KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorDefault), PETSC_NULL, PETSC_NULL); else if (getInfo() >= 20) - KSPMonitorSet(ksp, KSPMonitorTrueResidualNorm, PETSC_NULL, PETSC_NULL); + KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorTrueResidualNorm), PETSC_NULL, PETSC_NULL); petsc_helper::setSolver(ksp, "ns_", KSPFGMRES, PCNONE, getRelative(), getTolerance(), getMaxIterations()); // Create null space information. diff --git a/extensions/preconditioner/PetscSolverPfc.cc b/extensions/preconditioner/PetscSolverPfc.cc index cb31ac04894ff9f2953f618daaf414fbacf908e9..ac7e38480dc4162a504e1988344a1ae381f93365 100644 --- a/extensions/preconditioner/PetscSolverPfc.cc +++ b/extensions/preconditioner/PetscSolverPfc.cc @@ -84,9 +84,9 @@ namespace AMDiS { namespace Parallel { KSPSetOperators(ksp, getMatInterior(), getMatInterior(), SAME_NONZERO_PATTERN); #endif if (getInfo() >= 10) - KSPMonitorSet(ksp, KSPMonitorDefault, PETSC_NULL, PETSC_NULL); + KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorDefault), PETSC_NULL, PETSC_NULL); else if (getInfo() >= 20) - KSPMonitorSet(ksp, KSPMonitorTrueResidualNorm, PETSC_NULL, PETSC_NULL); + KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorTrueResidualNorm), PETSC_NULL, PETSC_NULL); petsc_helper::setSolver(ksp, "pfc_", KSPFGMRES, PCNONE, getRelative(), getTolerance(), getMaxIterations()); KSPSetFromOptions(ksp); diff --git a/extensions/preconditioner/PetscSolverPfc_diag.cc b/extensions/preconditioner/PetscSolverPfc_diag.cc index 337f4b794e71450ad6c7a59e0d06b758c55db398..68fa80c9a7050ae0ad417df2f12eb42c763a081a 100644 --- a/extensions/preconditioner/PetscSolverPfc_diag.cc +++ b/extensions/preconditioner/PetscSolverPfc_diag.cc @@ -82,9 +82,9 @@ namespace AMDiS { namespace Parallel { KSPSetOperators(ksp, getMatInterior(), getMatInterior(), SAME_NONZERO_PATTERN); #endif if (getInfo() >= 10) - KSPMonitorSet(ksp, KSPMonitorDefault, PETSC_NULL, PETSC_NULL); + KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorDefault), PETSC_NULL, PETSC_NULL); else if (getInfo() >= 20) - KSPMonitorSet(ksp, KSPMonitorTrueResidualNorm, PETSC_NULL, PETSC_NULL); + KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorTrueResidualNorm), PETSC_NULL, PETSC_NULL); petsc_helper::setSolver(ksp, "pfc_", KSPFGMRES, PCNONE, getRelative(), getTolerance(), getMaxIterations()); KSPSetFromOptions(ksp); diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..3140324d33149cc780e33f77776af79666e56841 --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,22 @@ +project("AMDiS test suite") +cmake_minimum_required(VERSION 2.8.10) + +find_package(AMDIS REQUIRED ${COMPONENT}) + +include_directories(${AMDIS_INCLUDE_DIRS}) +add_definitions(${AMDIS_COMPILEFLAGS}) + +enable_testing() + +# The check target compiles and runs the test_suite +add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) + +# Add the unit_test_framework for some tests +find_package(Boost REQUIRED unit_test_framework) + +if (AMDIS_HAS_PARALLEL_DOMAIN) +# add_subdirectory(mpi) +else () + add_subdirectory(seq) +endif (AMDIS_HAS_PARALLEL_DOMAIN) +add_subdirectory(other) diff --git a/test/mpi/CMakeLists.txt b/test/mpi/CMakeLists.txt index 310a161c09dde229229ee79351663cd8eccf6191..1a5a36ec593a924f6d0ffa5bbf357299ecf42268 100644 --- a/test/mpi/CMakeLists.txt +++ b/test/mpi/CMakeLists.txt @@ -1,32 +1,25 @@ -project("AMDiS test suite (seq)") -cmake_minimum_required(VERSION 2.8) - -find_package(AMDIS REQUIRED) - -if(AMDIS_FOUND) - message("amdis was found\n") - include(${AMDIS_USE_FILE}) - SET(BASIS_LIBS ${AMDIS_LIBRARIES}) -endif(AMDIS_FOUND) - -find_package(Boost 1.42 REQUIRED) -if(Boost_FOUND) - list(APPEND AMDIS_INCLUDE_DIRS ${Boost_INCLUDE_DIR}) - message("boost lib-dirs: ${Boost_LIBRARY_DIRS}") - message("use the boost dir: ${Boost_INCLUDE_DIR}") - if(WIN32) - message("the windows find_boost does not set the boost library paths, please set it") - SET(Boost_LIBRARY_DIRS CACHE PATH "The directory containing the boost libraries") - endif(WIN32) - list(APPEND BASIS_LIBS ${Boost_LIBRARY_DIRS}/libboost_unit_test_framework.so) -endif(Boost_FOUND) +set(TEST_DEPENDENCIES "") file(GLOB sources src/*.cc) foreach(s ${sources}) get_filename_component(swe ${s} NAME_WE) - add_executable(${swe} ${s}) - target_link_libraries(${swe} ${BASIS_LIBS}) + + add_executable(${swe}_mpi ${s}) + target_link_libraries(${swe}_mpi ${AMDIS_LIBRARIES} ${Boost_LIBRARIES}) + list(APPEND TEST_DEPENDENCIES ${swe}_mpi) endforeach(s) + +add_test(NAME "RunPTest0001" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND mpirun -np 16 ${CMAKE_CURRENT_BINARY_DIR}/test0001_mpi ./init/test0001.dat.2d) +add_test(NAME "RunPTest0002" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND mpirun -np 16 ${CMAKE_CURRENT_BINARY_DIR}/test0002_mpi ./init/test0002.dat.2d) +add_test(NAME "RunPTest0003" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND mpirun -np 16 ${CMAKE_CURRENT_BINARY_DIR}/test0003_mpi ./init/test0003.dat.2d) +add_test(NAME "RunPTest0004" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND mpirun -np 16 ${CMAKE_CURRENT_BINARY_DIR}/test0004_mpi ./init/test0004.dat.2d) +add_test(NAME "RunPTest0005" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND mpirun -np 16 ${CMAKE_CURRENT_BINARY_DIR}/test0005_mpi ./init/test0005.dat.2d) +add_test(NAME "RunPTest0006" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND mpirun -np 16 ${CMAKE_CURRENT_BINARY_DIR}/test0006_mpi ./init/test0006.dat.2d) +add_test(NAME "RunPTest0007" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND mpirun -np 4 ${CMAKE_CURRENT_BINARY_DIR}/test0007_mpi ./init/test0007.dat.2d) + + +add_dependencies(check ${TEST_DEPENDENCIES}) + #create the output dir file(MAKE_DIRECTORY output) diff --git a/test/other/CMakeLists.txt b/test/other/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..e3e8ec52e9bdeb7bb6622f88ee5ab2bf201b52bb --- /dev/null +++ b/test/other/CMakeLists.txt @@ -0,0 +1,81 @@ +set(TEST_DEPENDENCIES "") + +if (AMDIS_HAS_PARALLEL_DOMAIN) + list(APPEND RUN_PARALLEL "mpirun" "-np" "2") +else () + set(RUN_PARALLEL "") +endif () + + +add_executable(test_expr src/Test_Expressions.cc) +target_link_libraries(test_expr ${AMDIS_LIBRARIES}) +if (NOT AMDIS_HAS_PARALLEL_DOMAIN) + add_test(NAME RunTestExpr_1d WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND test_expr init/test_expr.dat.1d) +endif () +add_test(NAME RunTestExpr_2d WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${RUN_PARALLEL} ${CMAKE_CURRENT_BINARY_DIR}/test_expr init/test_expr.dat.2d) +add_test(NAME RunTestExpr_3d WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${RUN_PARALLEL} ${CMAKE_CURRENT_BINARY_DIR}/test_expr init/test_expr.dat.3d) +list(APPEND TEST_DEPENDENCIES test_expr) + + +add_executable(test_basis src/Test_BasisFunction.cc) +target_link_libraries(test_basis ${AMDIS_LIBRARIES}) +if (NOT AMDIS_HAS_PARALLEL_DOMAIN) + add_test(NAME RunTestBasis_1d WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND test_basis init/test_basisFct.dat.1d) +endif () +add_test(NAME RunTestBasis_2d WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${RUN_PARALLEL} ${CMAKE_CURRENT_BINARY_DIR}/test_basis init/test_basisFct.dat.2d) +add_test(NAME RunTestBasis_3d WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${RUN_PARALLEL} ${CMAKE_CURRENT_BINARY_DIR}/test_basis init/test_basisFct.dat.3d) +list(APPEND TEST_DEPENDENCIES test_basis) + + +add_executable(test_writer src/Test_Writer.cc) +target_link_libraries(test_writer ${AMDIS_LIBRARIES}) +list(APPEND TEST_DEPENDENCIES test_writer) + +add_executable(test_arh3 src/Test_Arh3.cc) +target_link_libraries(test_arh3 ${AMDIS_LIBRARIES}) +list(APPEND TEST_DEPENDENCIES test_arh3) + +add_executable(test_mat_vec src/Test_MatrixVectorOperations.cc) +target_link_libraries(test_mat_vec ${AMDIS_LIBRARIES}) +list(APPEND TEST_DEPENDENCIES test_mat_vec) + + +add_executable(test_problemStat src/Test_ProblemStat.cc) +target_link_libraries(test_problemStat ${AMDIS_LIBRARIES}) +if (NOT AMDIS_HAS_PARALLEL_DOMAIN) + add_test(NAME RunTestProblemStat_1d WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND test_problemStat init/test_problemStat.dat.1d) + add_test(NAME RunTestProblemStat_2d WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND test_problemStat init/test_problemStat.dat.2d) + add_test(NAME RunTestProblemStat_3d WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND test_problemStat init/test_problemStat.dat.3d) +endif () +list(APPEND TEST_DEPENDENCIES test_problemStat) + + +# parallel tests +if (AMDIS_HAS_PARALLEL_DOMAIN) + add_executable(test_synch src/Test_Synch.cc) + target_link_libraries(test_synch ${AMDIS_LIBRARIES}) + add_test(NAME RunTestSynch_2d WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${RUN_PARALLEL} ${CMAKE_CURRENT_BINARY_DIR}/test_synch init/test_synch.dat.2d) + add_test(NAME RunTestSynch_3d WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${RUN_PARALLEL} ${CMAKE_CURRENT_BINARY_DIR}/test_synch init/test_synch.dat.3d) + list(APPEND TEST_DEPENDENCIES test_synch) +endif (AMDIS_HAS_PARALLEL_DOMAIN) + + +# tests if AMDiS-Extensions +if (AMDIS_NEED_EXTENSIONS) + add_executable(test_bg_mesh src/Test_BackgroundMesh2.cc) + target_link_libraries(test_bg_mesh ${AMDIS_LIBRARIES}) + add_test(NAME RunTestBgMesh WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND test_bg_mesh init/test_bg_mesh.dat) + list(APPEND TEST_DEPENDENCIES test_bg_mesh) + + add_executable(test_views src/Test_Views.cc) + target_link_libraries(test_views ${AMDIS_LIBRARIES}) + add_test(NAME RunTestViews_2d WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND test_views init/test_views.dat.2d) + list(APPEND TEST_DEPENDENCIES test_views) + + add_executable(test_vtk src/Test_Vtk.cc) + target_link_libraries(test_vtk ${AMDIS_LIBRARIES}) + list(APPEND TEST_DEPENDENCIES test_vtk) +endif (AMDIS_NEED_EXTENSIONS) + +add_dependencies(check ${TEST_DEPENDENCIES}) + diff --git a/test/other/init/test_arh2.dat.3d b/test/other/init/test_arh2.dat.3d new file mode 100644 index 0000000000000000000000000000000000000000..81c81a7632d0a0d716faee51be5d152572c29125 --- /dev/null +++ b/test/other/init/test_arh2.dat.3d @@ -0,0 +1,140 @@ +dimension of world: 3 +level of information: 0 +break on missing tag: 0 + + +%========== dow 3 dim 3 ==========% +sphere33Mesh->macro file name: ./macro/dow3_dim3.3d +sphere33Mesh->global refinements: 10 + +sphere33->mesh: sphere33Mesh +sphere33->dim: 3 +sphere33->components: 3 + +sphere33->polynomial degree[0]: 3 +sphere33->polynomial degree[1]: 2 +sphere33->polynomial degree[2]: 2 + +sphere33->solver: cg + +sphere33->output->filename: output/sphere33.3d +%sphere33->output->ARH format: 1 +sphere33->output->ARH2 format: 1 +%parallel->log main rank: 0 + +%========== dow 3 dim 3 - b ==========% +sphere33_bMesh->macro file name: ./macro/dow3_dim3.3d +sphere33_bMesh->global refinements: 11 + +sphere33_b->mesh: sphere33_bMesh +sphere33_b->dim: 3 +sphere33_b->components: 3 + +sphere33_b->polynomial degree[0]: 3 +sphere33_b->polynomial degree[1]: 2 +sphere33_b->polynomial degree[2]: 2 + +sphere33_b->solver: cg + +sphere33_b->output->filename: output/sphere33.3d +%sphere33_b->output->ARH format: 1 +sphere33_b->output->ARH2 format: 1 + +%========== dow 3 dim 3 - c ==========% +sphere33_cMesh->macro file name: ./macro/dow3_dim3.3d +sphere33_cMesh->global refinements: 10 + +sphere33_c->mesh: sphere33_cMesh +sphere33_c->dim: 3 +sphere33_c->components: 3 + +sphere33_c->polynomial degree[0]: 3 +sphere33_c->polynomial degree[1]: 2 +sphere33_c->polynomial degree[2]: 1 + +sphere33_c->solver: cg + +sphere33_c->output->filename: output/sphere33.3d +%sphere33_c->output->ARH format: 1 +sphere33_c->output->ARH2 format: 1 + +%========== dow 3 dim 3 - d ==========% +sphere33_dMesh->macro file name: ./macro/dow3_dim3.3d +sphere33_dMesh->global refinements: 10 + +sphere33_d->mesh: sphere33_dMesh +sphere33_d->dim: 3 +sphere33_d->components: 2 + +sphere33_d->polynomial degree[0]: 3 +sphere33_d->polynomial degree[1]: 2 + +sphere33_d->solver: cg + +sphere33_d->output->filename: output/sphere33.3d +sphere33_d->output->ARH format: 1 +sphere33_d->output->ARH2 format: 1 + + +%========== dow 3 dim 2 ==========% +sphere32Mesh->macro file name: ./macro/dow3_dim2.3d +sphere32Mesh->global refinements: 5 + +sphere32->mesh: sphere32Mesh +sphere32->dim: 2 +sphere32->components: 3 + +sphere32->polynomial degree[0]: 1 +sphere32->polynomial degree[1]: 1 +sphere32->polynomial degree[2]: 1 + +sphere32->solver: cg + +sphere32->output->filename: output/sphere32.3d +%sphere32->output->ParaView format: 1 +sphere32->output->ARH format: 1 +sphere32->output->ARH2 format: 1 + +%parallel->repartitioning: parmetis +%parallel->box partitioning: 1 +%========== dow 3 dim 1 ==========% + +sphere31Mesh->macro file name: ./macro/dow3_dim1.3d +sphere31Mesh->global refinements: 5 + +sphere31->mesh: sphere31Mesh +sphere31->dim: 1 +sphere31->components: 1 + +sphere31->polynomial degree[0]: 1 + +sphere31->solver: cg + +sphere31->output->filename: output/sphere31.3d +sphere31->output->ParaView format: 1 +sphere31->output->ARH format: 1 +sphere31->output->ARH2 format: 1 + + +%========= test4 ==============% +elliptMesh->macro file name: ./macro/macro.refined.3d +elliptMesh->global refinements: 0 +%wavebox->filename: ./macro/wavebox3.arh + + +ellipt->mesh: elliptMesh +ellipt->dim: 3 +ellipt->components: 3 + +ellipt->polynomial degree[0]: 1 +ellipt->polynomial degree[1]: 1 +ellipt->polynomial degree[2]: 2 + +ellipt->solver: cg + +ellipt->output->filename: output/refined_ellipt.3d +ellipt->output->ARH format: 1 +ellipt->output->ARH2 format: 1 + + + diff --git a/test/other/init/test_arh3.dat.2d b/test/other/init/test_arh3.dat.2d new file mode 100644 index 0000000000000000000000000000000000000000..bdf948b6dcf7af8549262a3b7538442b380b2a02 --- /dev/null +++ b/test/other/init/test_arh3.dat.2d @@ -0,0 +1,34 @@ +dimension of world: 2 + +elliptMesh->macro file name: ./macro/macro.stand.2d +elliptMesh->global refinements: 0 + +ellipt->mesh: elliptMesh +ellipt->dim: 2 +ellipt->components: 1 +ellipt->polynomial degree[0]: 1 + +ellipt->solver: cg +ellipt->solver->ell: 1 +ellipt->solver->max iteration: 1000 +ellipt->solver->tolerance: 1.e-8 +ellipt->solver->info: 10 +ellipt->solver->left precon: diag +ellipt->solver->right precon: no + +ellipt->estimator[0]: residual +ellipt->estimator[0]->error norm: H1_NORM % 1: H1_NORM, 2: L2_NORM +ellipt->estimator[0]->C0: 0.1 % constant of element residual +ellipt->estimator[0]->C1: 0.1 % constant of jump residual + +ellipt->marker[0]->strategy: 2 % 0: no adaption 1: GR 2: MS 3: ES 4:GERS +ellipt->marker[0]->MSGamma: 0.5 + +ellipt->adapt[0]->tolerance: 1e-4 +ellipt->adapt[0]->refine bisections: 2 + +ellipt->adapt->max iteration: 10 + +ellipt->output->filename: output/arh3data.2d +ellipt->output->ARH3 format: 1 +ellipt->output->create subdirectory: 1 diff --git a/test/other/init/test_basisFct.dat.1d b/test/other/init/test_basisFct.dat.1d new file mode 100644 index 0000000000000000000000000000000000000000..4725958803e7d41d95fdb58850eb3af83dd9a422 --- /dev/null +++ b/test/other/init/test_basisFct.dat.1d @@ -0,0 +1,12 @@ +dimension of world: 1 +level of information: 0 +break on missing tag: 0 + +mesh_basis->macro file name: ./macro/macro.stand.1d +mesh_basis->global refinements: 0 + +test_basis->mesh: mesh_basis +test_basis->dim: 1 +test_basis->polynomial degree[0]: 4 +test_basis->components: 1 +test_basis->solver: cg \ No newline at end of file diff --git a/test/other/init/test_basisFct.dat.2d b/test/other/init/test_basisFct.dat.2d new file mode 100644 index 0000000000000000000000000000000000000000..ecf5b827cb98cae6a3698f463d7869de8f8b4de4 --- /dev/null +++ b/test/other/init/test_basisFct.dat.2d @@ -0,0 +1,12 @@ +dimension of world: 2 +level of information: 0 +break on missing tag: 0 + +mesh_basis->macro file name: ./macro/macro.stand.2d +mesh_basis->global refinements: 0 + +test_basis->mesh: mesh_basis +test_basis->dim: 2 +test_basis->components: 1 +test_basis->polynomial degree[0]: 1 +test_basis->solver: cg \ No newline at end of file diff --git a/test/other/init/test_basisFct.dat.3d b/test/other/init/test_basisFct.dat.3d new file mode 100644 index 0000000000000000000000000000000000000000..e6387aa43c134d2ca2c99027e6a4cb8e89c91394 --- /dev/null +++ b/test/other/init/test_basisFct.dat.3d @@ -0,0 +1,12 @@ +dimension of world: 3 +level of information: 0 +break on missing tag: 0 + +mesh_basis->macro file name: ./macro/macro.stand.3d +mesh_basis->global refinements: 0 + +test_basis->mesh: mesh_basis +test_basis->dim: 3 +test_basis->polynomial degree[0]: 4 +test_basis->components: 1 +test_basis->solver: cg \ No newline at end of file diff --git a/test/other/init/test_bg_mesh.dat b/test/other/init/test_bg_mesh.dat new file mode 100644 index 0000000000000000000000000000000000000000..2e34fe731565be08c6aa1571ac2c1527b57047aa --- /dev/null +++ b/test/other/init/test_bg_mesh.dat @@ -0,0 +1,41 @@ +dimension of world: 2 +level of information: 0 +break on missing tag: 0 + +% ============ VARIABLES =================== +backgroundMesh->enabled: 0 +backgroundMesh->N: 128*128 +backgroundMesh->min_corner: [-1.1,-1.1] +backgroundMesh->max_corner: [1.1,1.1] +backgroundMesh->evaluation accuracy: 0 + +box->nr of nearest data: 10 + + +KD-Tree->enabled: 1 +KD-Tree->eps: 0.0 + +% ============= PROBLEM-SPACES ================================== + +test_bg_mesh->components: 1 +test_bg_mesh->polynomial degree[0]: 1 +test_bg_mesh->dim: 2 +test_bg_mesh->solver: cg +test_bg_mesh->mesh: mesh_bg_mesh + +test_bg_mesh2->components: 1 +test_bg_mesh2->polynomial degree[0]: 1 +test_bg_mesh2->dim: 2 +test_bg_mesh2->solver: cg +test_bg_mesh2->mesh: mesh_bg_mesh2 + +% =================== MESH ================================ +mesh_bg_mesh->macro file name: macro/macro.square.2d +mesh_bg_mesh->global refinements: 12 +mesh_bg_mesh->check: 0 + +mesh_bg_mesh2->macro file name: macro/macro.square.2d +mesh_bg_mesh2->global refinements: 12 +mesh_bg_mesh2->check: 0 + +WAIT: 1 diff --git a/test/other/init/test_distance.dat b/test/other/init/test_distance.dat new file mode 100644 index 0000000000000000000000000000000000000000..acbc513a0d0c7209aeb51c52df129bd2c598ee42 --- /dev/null +++ b/test/other/init/test_distance.dat @@ -0,0 +1,43 @@ +dimension of world: 2 +level of information: 0 +break on missing tag: 0 + +% ============ VARIABLES =================== +backgroundMesh->enabled: 1 +backgroundMesh->N: 128*128 +backgroundMesh->min_corner: [-1.1,-1.1] +backgroundMesh->max_corner: [1.1,1.1] +backgroundMesh->evaluation accuracy: 0 + +% ============= PROBLEM-SPACES ================================== + +test->components: 1 +test->polynomial degree[0]: 1 +test->dim: 1 +test->solver: umfpack +test->mesh: mesh + +test2->components: 1 +test2->polynomial degree[0]: 1 +test2->dim: 2 +test2->solver: umfpack +test2->mesh: mesh2 + +% =================== MESH ================================ +mesh->macro file name: input/circles.2d +mesh->global refinements: 0 +mesh->check: 0 + +mesh2->macro file name: macro/macro.square.2d +mesh2->global refinements: 0 +mesh2->check: 0 + +mesh->refinement->initial level: 12 +mesh->refinement->level in inner domain: 5 +mesh->refinement->level in outer domain: 5 +mesh->refinement->level on interface: 16 +mesh->refinement->interface width: 0.01 +mesh->refinement->fade out width: 0 +mesh->refinement->sign in inner domain: -1 + +WAIT: 1 diff --git a/test/other/init/test_expr.dat.1d b/test/other/init/test_expr.dat.1d new file mode 100644 index 0000000000000000000000000000000000000000..986a60eebfb137d228809d56f7d59added276816 --- /dev/null +++ b/test/other/init/test_expr.dat.1d @@ -0,0 +1,12 @@ +dimension of world: 1 +level of information: 0 +break on missing tag: 0 + +mesh_expr->macro file name: ./macro/macro.stand.1d +mesh_expr->global refinements: 0 + +test_expr->mesh: mesh_expr +test_expr->dim: 1 +test_expr->components: 1 +test_expr->polynomial degree[0]: 2 +test_expr->solver: cg diff --git a/test/other/init/test_expr.dat.2d b/test/other/init/test_expr.dat.2d new file mode 100644 index 0000000000000000000000000000000000000000..7975ebeb4cc9539e2becf2edf1e1eec558296469 --- /dev/null +++ b/test/other/init/test_expr.dat.2d @@ -0,0 +1,12 @@ +dimension of world: 2 +level of information: 0 +break on missing tag: 0 + +mesh_expr->macro file name: ./macro/macro.stand.2d +mesh_expr->global refinements: 0 + +test_expr->mesh: mesh_expr +test_expr->dim: 2 +test_expr->components: 1 +test_expr->polynomial degree[0]: 2 +test_expr->solver: cg \ No newline at end of file diff --git a/test/other/init/test_expr.dat.3d b/test/other/init/test_expr.dat.3d new file mode 100644 index 0000000000000000000000000000000000000000..809f63d10e343296e8b3c06c1a531191b4dd749b --- /dev/null +++ b/test/other/init/test_expr.dat.3d @@ -0,0 +1,12 @@ +dimension of world: 3 +level of information: 0 +break on missing tag: 0 + +mesh_expr->macro file name: ./macro/macro.stand.3d +mesh_expr->global refinements: 0 + +test_expr->mesh: mesh_expr +test_expr->dim: 3 +test_expr->components: 1 +test_expr->polynomial degree[0]: 2 +test_expr->solver: cg \ No newline at end of file diff --git a/test/other/init/test_nanoflann.dat b/test/other/init/test_nanoflann.dat new file mode 100644 index 0000000000000000000000000000000000000000..3749e4acff4e76e321bc053d1196406133d4dbc4 --- /dev/null +++ b/test/other/init/test_nanoflann.dat @@ -0,0 +1,30 @@ +dimension of world: 3 +level of information: 0 +break on missing tag: 0 + +% ============ VARIABLES =================== +backgroundMesh->enabled: 1 +backgroundMesh->N: 32*32*32 +backgroundMesh->min_corner: [-1.1,-1.1,-1.1] +backgroundMesh->max_corner: [1.1,1.1,1.1] +backgroundMesh->evaluation accuracy: 0 + +% ============= PROBLEM-SPACES ================================== + +test->components: 1 +test->polynomial degree[0]: 1 +test->dim: 3 +test->solver: umfpack +test->mesh: mesh + +% =================== MESH ================================ +mesh->macro file name: macro/macro.stand.3d +mesh->global refinements: 0 +mesh->check: 0 + +mesh->refinement->initial level: 12 +mesh->refinement->level in inner domain: 0 +mesh->refinement->level in outer domain: 0 +mesh->refinement->level on interface: 18 + +WAIT: 1 diff --git a/test/other/init/test_problemStat.dat.1d b/test/other/init/test_problemStat.dat.1d new file mode 100644 index 0000000000000000000000000000000000000000..b960c6020fa637b52f2425ea6408ceb6391dc71b --- /dev/null +++ b/test/other/init/test_problemStat.dat.1d @@ -0,0 +1,19 @@ +dimension of world: 1 +level of information: 0 +break on missing tag: 0 + +mesh_p->macro file name: ./macro/macro.stand.1d +mesh_p->global refinements: 2 + +test_problemStat->mesh: mesh_p +test_problemStat->dim: 1 +test_problemStat->components: 1 +test_problemStat->polynomial degree[0]: 1 +test_problemStat->solver: cg + +test_problemStat2->mesh: mesh_p +test_problemStat2->dim: 2 +test_problemStat2->components: 1 +test_problemStat2->polynomial degree[0]: 1 +test_problemStat2->solver: cg + diff --git a/test/other/init/test_problemStat.dat.2d b/test/other/init/test_problemStat.dat.2d new file mode 100644 index 0000000000000000000000000000000000000000..8cf8cf20384b5a2c7cc39f16847212cabf3a36d8 --- /dev/null +++ b/test/other/init/test_problemStat.dat.2d @@ -0,0 +1,19 @@ +dimension of world: 2 +level of information: 0 +break on missing tag: 0 + +mesh_p->macro file name: ./macro/macro.stand.2d +mesh_p->global refinements: 2 + +test_problemStat->mesh: mesh_p +test_problemStat->dim: 2 +test_problemStat->components: 1 +test_problemStat->polynomial degree[0]: 1 +test_problemStat->solver: cg + +test_problemStat2->mesh: mesh_p +test_problemStat2->dim: 2 +test_problemStat2->components: 1 +test_problemStat2->polynomial degree[0]: 1 +test_problemStat2->solver: cg + diff --git a/test/other/init/test_problemStat.dat.3d b/test/other/init/test_problemStat.dat.3d new file mode 100644 index 0000000000000000000000000000000000000000..60ae24c52fd0a3c400d131dd7205c174f8d2c0fe --- /dev/null +++ b/test/other/init/test_problemStat.dat.3d @@ -0,0 +1,18 @@ +dimension of world: 3 +level of information: 0 +break on missing tag: 0 + +mesh_p->macro file name: ./macro/macro.stand.3d +mesh_p->global refinements: 2 + +test_problemStat->mesh: mesh_p +test_problemStat->dim: 3 +test_problemStat->components: 1 +test_problemStat->polynomial degree[0]: 1 +test_problemStat->solver: cg + +test_problemStat2->mesh: mesh_p +test_problemStat2->dim: 3 +test_problemStat2->components: 1 +test_problemStat2->polynomial degree[0]: 1 +test_problemStat2->solver: cg diff --git a/test/other/init/test_redistancing.dat b/test/other/init/test_redistancing.dat new file mode 100644 index 0000000000000000000000000000000000000000..3749e4acff4e76e321bc053d1196406133d4dbc4 --- /dev/null +++ b/test/other/init/test_redistancing.dat @@ -0,0 +1,30 @@ +dimension of world: 3 +level of information: 0 +break on missing tag: 0 + +% ============ VARIABLES =================== +backgroundMesh->enabled: 1 +backgroundMesh->N: 32*32*32 +backgroundMesh->min_corner: [-1.1,-1.1,-1.1] +backgroundMesh->max_corner: [1.1,1.1,1.1] +backgroundMesh->evaluation accuracy: 0 + +% ============= PROBLEM-SPACES ================================== + +test->components: 1 +test->polynomial degree[0]: 1 +test->dim: 3 +test->solver: umfpack +test->mesh: mesh + +% =================== MESH ================================ +mesh->macro file name: macro/macro.stand.3d +mesh->global refinements: 0 +mesh->check: 0 + +mesh->refinement->initial level: 12 +mesh->refinement->level in inner domain: 0 +mesh->refinement->level in outer domain: 0 +mesh->refinement->level on interface: 18 + +WAIT: 1 diff --git a/test/other/init/test_refinement.dat b/test/other/init/test_refinement.dat new file mode 100644 index 0000000000000000000000000000000000000000..95bc108cdb5d69221affcc8712d7d2418197bdb3 --- /dev/null +++ b/test/other/init/test_refinement.dat @@ -0,0 +1,46 @@ +dimension of world: 2 +level of information: 0 +break on missing tag: 0 + +% ============ VARIABLES =================== +test->mesh: mesh +test2->mesh: mesh2 + +% ============= PROBLEM-SPACES ================================== + +test->components: 1 +test->polynomial degree[0]: 1 +test->dim: 2 +test->solver: umfpack + +test2->components: 1 +test2->polynomial degree[0]: 1 +test2->dim: 2 +test2->solver: umfpack + +% =================== MESH ================================ +mesh->macro file name: macro/macro.square.2d +mesh->global refinements: 0 +mesh->check: 0 + +mesh2->macro file name: macro/macro.square.2d +mesh2->global refinements: 0 +mesh2->check: 0 + +mesh->refinement->level in inner domain: 6 +mesh->refinement->level in outer domain: 6 +mesh->refinement->level on interface: 14 +mesh->refinement->initial level: 12 + +mesh->refinement->min outer interface value: 0.05 +mesh->refinement->max outer interface value: 0.95 + +% nur bei backgroundmesh oder kd-tree Nutzung: +backgroundMesh->N: 32*32 +backgroundMesh->min_corner: [-1.1, -1.1] +backgroundMesh->max_corner: [ 1.1, 1.1] + +KD-Tree->enabled: 0 +backgroundMesh->enabled: 1 + +WAIT: 1 diff --git a/test/other/init/test_repa.dat.2d b/test/other/init/test_repa.dat.2d new file mode 100644 index 0000000000000000000000000000000000000000..e535c76a079f9bbfd770ca5d8bf8254598a03ef2 --- /dev/null +++ b/test/other/init/test_repa.dat.2d @@ -0,0 +1,21 @@ +dimension of world: 2 + +parallel->log main rank: 1 +parallel->repartitioning->strategy: 1 +parallel->repartitioning->imbalance: -0.1 +parallel->use external weights: 1 +parallel->minion number of macro elements per processor: 10 + +mesh_repa->macro file name: ./macro/macro.stand.2d +mesh_repa->global refinements: 0 + +test_repa->mesh: mesh_repa +test_repa->dim: 2 +test_repa->components: 4 + +test_repa->polynomial degree[0]: 1 +test_repa->polynomial degree[1]: 2 +test_repa->polynomial degree[2]: 3 +test_repa->polynomial degree[3]: 4 + +test_repa->solver: cg diff --git a/test/other/init/test_repa.dat.3d b/test/other/init/test_repa.dat.3d new file mode 100644 index 0000000000000000000000000000000000000000..2803c7430e5db5bdbb1e5aec61d92d1b5f05813a --- /dev/null +++ b/test/other/init/test_repa.dat.3d @@ -0,0 +1,21 @@ +dimension of world: 3 + +parallel->log main rank: 1 +parallel->repartitioning->strategy: 1 +parallel->repartitioning->imbalance: -0.1 +parallel->use external weights: 1 + +mesh_repa->macro file name: ./macro/macro.stand.3d +mesh_repa->global refinements: 0 + + +test_repa->mesh: mesh_repa +test_repa->dim: 3 +test_repa->components: 4 + +test_repa->polynomial degree[0]: 1 +test_repa->polynomial degree[1]: 2 +test_repa->polynomial degree[2]: 3 +test_repa->polynomial degree[3]: 4 + +test_repa->solver: cg diff --git a/test/other/init/test_synch.dat.2d b/test/other/init/test_synch.dat.2d new file mode 100644 index 0000000000000000000000000000000000000000..21036581cc1c782ac578fd5a1e87b8f1f3c336fe --- /dev/null +++ b/test/other/init/test_synch.dat.2d @@ -0,0 +1,12 @@ +dimension of world: 2 + +mesh_synch->macro file name: ./macro/macro.stand.2d +mesh_synch->global refinements: 0 +parallel->pre refine: 0 + +test_synch->mesh: mesh_synch +test_synch->dim: 2 +test_synch->components: 1 + +test_synch->polynomial degree[0]: 1 +test_synch->solver: cg diff --git a/test/other/init/test_synch.dat.3d b/test/other/init/test_synch.dat.3d new file mode 100644 index 0000000000000000000000000000000000000000..c77e107a2e08b523fe8568c3b569fcd8c629dcfb --- /dev/null +++ b/test/other/init/test_synch.dat.3d @@ -0,0 +1,12 @@ +dimension of world: 3 + +mesh_synch->macro file name: ./macro/macro.stand.3d +mesh_synch->global refinements: 0 +parallel->pre refine: 0 + +test_synch->mesh: mesh_synch +test_synch->dim: 3 +test_synch->components: 1 + +test_synch->polynomial degree[0]: 1 +test_synch->solver: cg diff --git a/test/other/init/test_views.dat.2d b/test/other/init/test_views.dat.2d new file mode 100644 index 0000000000000000000000000000000000000000..f504d20529fa50e0a0007334f80d41fc94ffc543 --- /dev/null +++ b/test/other/init/test_views.dat.2d @@ -0,0 +1,27 @@ +dimension of world: 2 +level of information: 0 +break on missing tag: 0 +% ============= PROBLEM-SPACES ================================== + +test_views->components: 1 +test_views->polynomial degree[0]: 1 +test_views->dim: 2 +test_views->solver: cg +test_views->mesh: mesh_views + +test_views2->components: 1 +test_views2->polynomial degree[0]: 1 +test_views2->dim: 2 +test_views2->solver: cg +test_views2->mesh: mesh_views2 + +% =================== MESH ================================ +mesh_views->macro file name: macro/macro.square.2d +mesh_views->global refinements: 6 +mesh_views->check: 0 + +mesh_views2->macro file name: macro/macro.square.2d +mesh_views2->global refinements: 6 +mesh_views2->check: 0 + +WAIT: 1 diff --git a/test/other/init/test_vtk.dat.2d b/test/other/init/test_vtk.dat.2d new file mode 100644 index 0000000000000000000000000000000000000000..e4dea7f4f82a4bbcc47abadaef7a8b97a7b6c90f --- /dev/null +++ b/test/other/init/test_vtk.dat.2d @@ -0,0 +1,35 @@ +dimension of world: 2 + +elliptMesh->macro file name: ./macro/macro.stand.2d +elliptMesh->global refinements: 0 + +ellipt->mesh: elliptMesh +ellipt->dim: 2 +ellipt->components: 1 +ellipt->polynomial degree[0]: 3 + +ellipt->solver: cg +ellipt->solver->ell: 1 +ellipt->solver->max iteration: 1000 +ellipt->solver->tolerance: 1.e-8 +ellipt->solver->info: 10 +ellipt->solver->left precon: diag +ellipt->solver->right precon: no + +ellipt->estimator[0]: residual +ellipt->estimator[0]->error norm: H1_NORM % 1: H1_NORM, 2: L2_NORM +ellipt->estimator[0]->C0: 0.1 % constant of element residual +ellipt->estimator[0]->C1: 0.1 % constant of jump residual + +ellipt->marker[0]->strategy: 2 % 0: no adaption 1: GR 2: MS 3: ES 4:GERS +ellipt->marker[0]->MSGamma: 0.5 + +ellipt->adapt[0]->tolerance: 1e-4 +ellipt->adapt[0]->refine bisections: 2 + +ellipt->adapt->max iteration: 10 + +ellipt->output->filename: output/ellipt.2d +ellipt->output->ParaView format: 1 +ellipt->output->ParaView mode: 1 +ellipt->output->ARH2 format: 1 diff --git a/test/other/init/test_vtk.dat.3d b/test/other/init/test_vtk.dat.3d new file mode 100644 index 0000000000000000000000000000000000000000..f0cb78688ff3a5510774bc65607b7b556ed3307c --- /dev/null +++ b/test/other/init/test_vtk.dat.3d @@ -0,0 +1,33 @@ +dimension of world: 3 + +elliptMesh->macro file name: ./macro/macro.stand.3d +elliptMesh->global refinements: 1 + +ellipt->mesh: elliptMesh +ellipt->dim: 3 +ellipt->polynomial degree[0]: 1 +ellipt->components: 1 + +ellipt->solver: cg +ellipt->solver->max iteration: 1000 +ellipt->solver->tolerance: 1.e-8 +ellipt->solver->info: 2 +ellipt->solver->left precon: diag +ellipt->solver->right precon: no + +ellipt->estimator[0]: residual +ellipt->estimator[0]->error norm: H1_NORM % 1: H1_NORM, 2: L2_NORM +ellipt->estimator[0]->C1: 0.01 % constant of jump residual + +ellipt->marker[0]->strategy: 2 % 0: no adaption 1: GR 2: MS 3: ES 4:GERS +ellipt->marker[0]->MSGamma: 0.5 + +ellipt->adapt[0]->tolerance: 1e-4 +ellipt->adapt[0]->refine bisections: 2 + +ellipt->adapt->max iteration: 10 + +ellipt->output->filename: output/ellipt.3d +ellipt->output->ParaView format: 1 +ellipt->output->ARH format: 1 +ellipt->output->AMDiS format: 1 diff --git a/test/other/init/test_vtureader.dat b/test/other/init/test_vtureader.dat new file mode 100644 index 0000000000000000000000000000000000000000..130d70830303b57a09a40b4fc7af0ca9831bb8e6 --- /dev/null +++ b/test/other/init/test_vtureader.dat @@ -0,0 +1,21 @@ +dimension of world: 2 +level of information: 0 +break on missing tag: 0 + +% ============= PROBLEM-SPACES ================================== + +test->components: 2 +test->polynomial degree[0]: 1 +test->polynomial degree[1]: 1 +test->dim: 2 +test->solver: umfpack +test->mesh: mesh +test->name[0]: solution0 +test->name[1]: solution1 + +% =================== MESH ================================ +mesh->macro file name: macro/macro.square.2d +mesh->global refinements: 15 +mesh->check: 0 + +WAIT: 1 diff --git a/test/other/init/test_writer.dat.1d b/test/other/init/test_writer.dat.1d new file mode 100644 index 0000000000000000000000000000000000000000..358c5932b8bea867fa54ea117daeee87e2ce5787 --- /dev/null +++ b/test/other/init/test_writer.dat.1d @@ -0,0 +1,16 @@ +dimension of world: 1 +level of information: 0 +break on missing tag: 0 + + +mesh_writer->macro file name: ./macro/macro.stand.1d +mesh_writer->global refinements: 10 +mesh_writer->preserve macroFileInfo: 1 + +test_writer->mesh: mesh_writer +test_writer->dim: 1 +test_writer->components: 2 +test_writer->polynomial degree[0]: 1 +test_writer->polynomial degree[1]: 1 + +test_writer->solver: cg \ No newline at end of file diff --git a/test/other/init/test_writer.dat.2d b/test/other/init/test_writer.dat.2d new file mode 100644 index 0000000000000000000000000000000000000000..e8534a74e5c9344327d794fcd4cf88dfb1b89ee2 --- /dev/null +++ b/test/other/init/test_writer.dat.2d @@ -0,0 +1,16 @@ +dimension of world: 2 +level of information: 0 +break on missing tag: 0 + + +mesh_writer->macro file name: ./macro/macro.stand.2d +mesh_writer->global refinements: 10 +mesh_writer->preserve macroFileInfo: 1 + +test_writer->mesh: mesh_writer +test_writer->dim: 2 +test_writer->components: 2 +test_writer->polynomial degree[0]: 1 +test_writer->polynomial degree[1]: 1 + +test_writer->solver: cg \ No newline at end of file diff --git a/test/other/init/test_writer.dat.3d b/test/other/init/test_writer.dat.3d new file mode 100644 index 0000000000000000000000000000000000000000..21b96588606f4d37577de3bbcd46dc631b1454e5 --- /dev/null +++ b/test/other/init/test_writer.dat.3d @@ -0,0 +1,16 @@ +dimension of world: 3 +level of information: 0 +break on missing tag: 0 + + +mesh_writer->macro file name: ./macro/macro.stand.3d +mesh_writer->global refinements: 10 +mesh_writer->preserve macroFileInfo: 1 + +test_writer->mesh: mesh_writer +test_writer->dim: 3 +test_writer->components: 2 +test_writer->polynomial degree[0]: 1 +test_writer->polynomial degree[1]: 1 + +test_writer->solver: cg \ No newline at end of file diff --git a/test/other/init/tests.dat.2d b/test/other/init/tests.dat.2d new file mode 100644 index 0000000000000000000000000000000000000000..2c40f0389dcaf474f08fc9ea939409e32981a9e5 --- /dev/null +++ b/test/other/init/tests.dat.2d @@ -0,0 +1,9 @@ +dimension of world: 2 +level of information: 0 +break on missing tag: 0 + +#include "init/test_expr.dat.2d" +#include "init/test_basisFct.dat.2d" +#include "init/test_bg_mesh.dat" +#include "init/test_views.dat.2d" +#include "init/test_writer.dat.2d" diff --git a/test/other/init/tests.dat.3d b/test/other/init/tests.dat.3d new file mode 100644 index 0000000000000000000000000000000000000000..870fc9e3f925e7d45cd1f40cef7a0343043811db --- /dev/null +++ b/test/other/init/tests.dat.3d @@ -0,0 +1,9 @@ +dimension of world: 3 +level of information: 0 +break on missing tag: 0 + +#include "init/test_expr.dat.3d" +#include "init/test_basisFct.dat.3d" +% #include "test_bg_mesh.dat" +#include "init/test_arh2.dat.3d" +#include "init/test_writer.dat.3d" diff --git a/test/other/macro/dow1_dim1.1d b/test/other/macro/dow1_dim1.1d new file mode 100644 index 0000000000000000000000000000000000000000..39a858f326c648c2239d318b1d2201d5cd220b14 --- /dev/null +++ b/test/other/macro/dow1_dim1.1d @@ -0,0 +1,25 @@ +DIM: 1 +DIM_OF_WORLD: 1 + +number of vertices: 5 +number of elements: 4 + +vertex coordinates: + -1.0 + -0.5 + 0.0 + 0.5 + 1.5 + +element vertices: + 0 1 + 1 2 + 2 3 + 3 4 + +element boundaries: + 0 0 + 0 0 + 0 0 + 0 0 + 0 0 diff --git a/test/other/macro/dow2_dim1.2d b/test/other/macro/dow2_dim1.2d new file mode 100644 index 0000000000000000000000000000000000000000..ea9273940ece96abf31f3c724f4cb8172db80ab6 --- /dev/null +++ b/test/other/macro/dow2_dim1.2d @@ -0,0 +1,14 @@ +DIM: 1 +DIM_OF_WORLD: 2 + +number of vertices: 3 +number of elements: 2 + +vertex coordinates: + -1.0 -1.0 + 0.0 0.0 + 1.0 1.0 + +element vertices: + 0 1 + 1 2 diff --git a/test/other/macro/dow2_dim2.2d b/test/other/macro/dow2_dim2.2d new file mode 100644 index 0000000000000000000000000000000000000000..d03e3441755b4b6d2813ac9e826ef4dd3ffe234a --- /dev/null +++ b/test/other/macro/dow2_dim2.2d @@ -0,0 +1,37 @@ +DIM: 2 +DIM_OF_WORLD: 2 + +number of vertices: 9 +number of elements: 8 + +vertex coordinates: + -1.0 1.0 + -1.0 0.0 + -1.0 -1.0 + 1.0 1.0 + 1.0 0.0 + 1.0 -1.0 + 0.0 1.0 + 0.0 0.0 + 0.0 -1.0 + +element vertices: + 1 6 0 + 6 1 7 + 6 4 3 + 4 6 7 + 2 7 1 + 7 2 8 + 7 5 4 + 5 7 8 + +element boundaries: + 0 0 0 + 0 0 0 + 0 0 0 + 0 0 0 + 0 0 0 + 0 0 0 + 0 0 0 + 0 0 0 + 0 0 0 diff --git a/test/other/macro/dow3_dim1.3d b/test/other/macro/dow3_dim1.3d new file mode 100644 index 0000000000000000000000000000000000000000..c054375e3a8c291a9dde0decc437a2ae119ddba2 --- /dev/null +++ b/test/other/macro/dow3_dim1.3d @@ -0,0 +1,22 @@ +DIM: 1 +DIM_OF_WORLD: 3 + +number of vertices: 3 +number of elements: 2 + +vertex coordinates: + 1.0 0.0 0.0 + 0.0 0.0 0.0 +-1.0 0.0 0.0 + +element vertices: + 0 1 + 1 2 + +element boundaries: +-1 0 + 0 -1 + +element neighbours: + 1 1 + 0 0 diff --git a/test/other/macro/dow3_dim2.3d b/test/other/macro/dow3_dim2.3d new file mode 100644 index 0000000000000000000000000000000000000000..c48bc9a12ab95efe3a79f689308f02c1f8188ea8 --- /dev/null +++ b/test/other/macro/dow3_dim2.3d @@ -0,0 +1,43 @@ +DIM: 2 +DIM_OF_WORLD: 3 + +number of vertices: 8 +number of elements: 12 + +vertex coordinates: + -1.0 1.0 -1.0 + 1.0 1.0 -1.0 + 1.0 1.0 1.0 + -1.0 1.0 1.0 + -1.0 -1.0 -1.0 + 1.0 -1.0 -1.0 + 1.0 -1.0 1.0 + -1.0 -1.0 1.0 + +element vertices: + 3 1 0 + 1 3 2 + 2 5 1 + 5 2 6 + 6 4 5 + 4 6 7 + 7 0 4 + 0 7 3 + 2 7 6 + 7 2 3 + 1 4 0 + 4 1 5 + +element boundaries: + 0 0 0 + 0 0 0 + 0 0 0 + 0 0 0 + 0 0 0 + 0 0 0 + 0 0 0 + 0 0 0 + 0 0 0 + 0 0 0 + 0 0 0 + 0 0 0 diff --git a/test/other/macro/dow3_dim3.3d b/test/other/macro/dow3_dim3.3d new file mode 100644 index 0000000000000000000000000000000000000000..406223bf938f9aa5721073f55999d23a53e03071 --- /dev/null +++ b/test/other/macro/dow3_dim3.3d @@ -0,0 +1,40 @@ +DIM: 3 +DIM_OF_WORLD: 3 + +number of vertices: 8 +number of elements: 6 + +vertex coordinates: + 0.0 0.0 0.0 + 1.0 0.0 0.0 + 0.0 0.0 1.0 + 1.0 0.0 1.0 + 1.0 1.0 0.0 + 1.0 1.0 1.0 + 0.0 1.0 0.0 + 0.0 1.0 1.0 + +element vertices: + 0 5 4 1 + 0 5 3 1 + 0 5 3 2 + 0 5 4 6 + 0 5 7 6 + 0 5 7 2 + +element boundaries: + 1 1 0 0 + 1 1 0 0 + 1 1 0 0 + 1 1 0 0 + 1 1 0 0 + 1 1 0 0 + +element neighbours: + -1 -1 1 3 + -1 -1 0 2 + -1 -1 5 1 + -1 -1 4 0 + -1 -1 3 5 + -1 -1 2 4 + diff --git a/test/other/macro/macro.refined.3d b/test/other/macro/macro.refined.3d new file mode 100644 index 0000000000000000000000000000000000000000..829dfe8b8c03200a4eff6d7a30d22a10ae13cfbd --- /dev/null +++ b/test/other/macro/macro.refined.3d @@ -0,0 +1,39479 @@ +DIM: 3 +DIM_OF_WORLD: 3 + +number of elements: 12288 +number of vertices: 2601 + +vertex coordinates: +0 0 0 +1 0 0 +2 0 0 +0 1 0 +1 1 0 +2 1 0 +0 2 0 +1 2 0 +2 2 0 +0 0 1 +1 0 1 +2 0 1 +0 1 1 +1 1 1 +2 1 1 +0 2 1 +1 2 1 +2 2 1 +0.5 0.5 0.5 +1.5 0.5 0.5 +0.5 1.5 0.5 +1.5 1.5 0.5 +0.5 0.5 0 +1 0.5 0.5 +0.5 0 0.5 +0.5 0.5 1 +0.5 1 0.5 +0 0.5 0.5 +1.5 0 0.5 +1.5 0.5 0 +1.5 1 0.5 +2 0.5 0.5 +1.5 0.5 1 +0.5 1.5 0 +0 1.5 0.5 +1 1.5 0.5 +0.5 2 0.5 +0.5 1.5 1 +1.5 1.5 0 +2 1.5 0.5 +1.5 2 0.5 +1.5 1.5 1 +0.5 0 0 +1 0.5 0 +0 0.5 0 +0.5 1 0 +1 1 0.5 +1 0.5 1 +1 0 0.5 +0 0 0.5 +0.5 0 1 +0.5 1 1 +0 0.5 1 +0 1 0.5 +1.5 0 0 +2 0 0.5 +1.5 0 1 +2 0.5 0 +1.5 1 0 +1.5 1 1 +2 1 0.5 +2 0.5 1 +0 1.5 0 +0.5 2 0 +1 1.5 0 +0 2 0.5 +0 1.5 1 +1 1.5 1 +1 2 0.5 +0.5 2 1 +2 1.5 0 +1.5 2 0 +2 2 0.5 +2 1.5 1 +1.5 2 1 +0.25 0.25 0.25 +0.75 0.25 0.25 +0.75 0.75 0.25 +1.25 0.25 0.25 +1.25 0.75 0.25 +0.25 0.75 0.25 +0.25 1.25 0.25 +0.75 1.25 0.25 +0.75 0.75 0.75 +1.25 0.75 0.75 +0.75 1.25 0.75 +1.25 1.25 0.75 +1.25 1.25 0.25 +0.75 0.25 0.75 +1.25 0.25 0.75 +0.25 0.25 0.75 +0.25 0.75 0.75 +0.25 1.25 0.75 +1.75 0.25 0.25 +1.75 0.25 0.75 +1.75 0.75 0.25 +1.75 1.25 0.25 +1.75 0.75 0.75 +1.75 1.25 0.75 +0.25 1.75 0.25 +0.75 1.75 0.25 +1.25 1.75 0.25 +0.25 1.75 0.75 +0.75 1.75 0.75 +1.25 1.75 0.75 +1.75 1.75 0.25 +1.75 1.75 0.75 +0.25 0.25 0 +0.5 0.25 0.25 +0.25 0 0.25 +0.25 0.5 0.25 +0 0.25 0.25 +0.25 0.25 0.5 +0.75 0.25 0 +0.75 0 0.25 +0.75 0.5 0.25 +1 0.25 0.25 +0.75 0.25 0.5 +0.75 0.75 0 +1 0.75 0.25 +0.5 0.75 0.25 +0.75 1 0.25 +0.75 0.75 0.5 +1.25 0.5 0.25 +1.25 0.25 0 +1.25 0.25 0.5 +1.25 0 0.25 +1.5 0.25 0.25 +1.25 0.75 0 +1.25 0.75 0.5 +1.25 1 0.25 +1.5 0.75 0.25 +0.25 0.75 0 +0 0.75 0.25 +0.25 1 0.25 +0.25 0.75 0.5 +0.5 1.25 0.25 +0.25 1.25 0 +0.25 1.25 0.5 +0 1.25 0.25 +0.25 1.5 0.25 +0.75 1.25 0 +0.75 1.25 0.5 +1 1.25 0.25 +0.75 1.5 0.25 +1 0.75 0.75 +0.75 1 0.75 +0.75 0.5 0.75 +0.75 0.75 1 +0.5 0.75 0.75 +1.25 1 0.75 +1.25 0.5 0.75 +1.25 0.75 1 +1.5 0.75 0.75 +1 1.25 0.75 +0.5 1.25 0.75 +0.75 1.25 1 +0.75 1.5 0.75 +1.25 1.25 0.5 +1.5 1.25 0.75 +1.25 1.25 1 +1.25 1.5 0.75 +1.5 1.25 0.25 +1.25 1.25 0 +1.25 1.5 0.25 +1 0.25 0.75 +0.75 0.25 1 +0.75 0 0.75 +0.5 0.25 0.75 +1.25 0.25 1 +1.25 0 0.75 +1.5 0.25 0.75 +0.25 0 0.75 +0 0.25 0.75 +0.25 0.25 1 +0.25 0.5 0.75 +0.25 0.75 1 +0.25 1 0.75 +0 0.75 0.75 +0.25 1.25 1 +0 1.25 0.75 +0.25 1.5 0.75 +1.75 0 0.25 +1.75 0.25 0 +1.75 0.25 0.5 +2 0.25 0.25 +1.75 0.5 0.25 +1.75 0 0.75 +2 0.25 0.75 +1.75 0.25 1 +1.75 0.5 0.75 +1.75 0.75 0 +2 0.75 0.25 +1.75 1 0.25 +1.75 0.75 0.5 +1.75 1.25 0 +1.75 1.25 0.5 +2 1.25 0.25 +1.75 1.5 0.25 +1.75 1 0.75 +1.75 0.75 1 +2 0.75 0.75 +1.75 1.25 1 +2 1.25 0.75 +1.75 1.5 0.75 +0.25 1.75 0 +0 1.75 0.25 +0.5 1.75 0.25 +0.25 2 0.25 +0.25 1.75 0.5 +0.75 1.75 0 +0.75 2 0.25 +1 1.75 0.25 +0.75 1.75 0.5 +1.25 1.75 0 +1.25 1.75 0.5 +1.25 2 0.25 +1.5 1.75 0.25 +0 1.75 0.75 +0.25 2 0.75 +0.25 1.75 1 +0.5 1.75 0.75 +1 1.75 0.75 +0.75 1.75 1 +0.75 2 0.75 +1.25 1.75 1 +1.25 2 0.75 +1.5 1.75 0.75 +1.75 1.75 0 +2 1.75 0.25 +1.75 2 0.25 +1.75 1.75 0.5 +2 1.75 0.75 +1.75 2 0.75 +1.75 1.75 1 +0.25 0 0 +0.5 0.25 0 +0 0.25 0 +0.25 0.5 0 +0.5 0.5 0.25 +0.5 0.25 0.5 +0.5 0 0.25 +0 0 0.25 +0.25 0 0.5 +0.25 0.5 0.5 +0 0.5 0.25 +0 0.25 0.5 +0.75 0 0 +1 0.25 0 +0.75 0.5 0 +1 0 0.25 +0.75 0 0.5 +0.75 0.5 0.5 +1 0.5 0.25 +1 0.25 0.5 +1 0.75 0 +0.75 1 0 +0.5 0.75 0 +1 1 0.25 +1 0.75 0.5 +0.5 0.75 0.5 +0.5 1 0.25 +0.75 1 0.5 +1.25 0.5 0.5 +1.5 0.5 0.25 +1.25 0.5 0 +1.25 0 0 +1.5 0.25 0 +1.5 0.25 0.5 +1.25 0 0.5 +1.5 0 0.25 +1.25 1 0 +1.5 0.75 0 +1.5 0.75 0.5 +1.25 1 0.5 +1.5 1 0.25 +0 0.75 0 +0.25 1 0 +0 1 0.25 +0 0.75 0.5 +0.25 1 0.5 +0.5 1.25 0.5 +0.5 1.5 0.25 +0.5 1.25 0 +0 1.25 0 +0.25 1.5 0 +0.25 1.5 0.5 +0 1.25 0.5 +0 1.5 0.25 +1 1.25 0 +0.75 1.5 0 +0.75 1.5 0.5 +1 1.25 0.5 +1 1.5 0.25 +1 1 0.75 +1 0.75 1 +1 0.5 0.75 +0.75 1 1 +0.5 1 0.75 +0.5 0.5 0.75 +0.75 0.5 1 +0.5 0.75 1 +1.25 1 1 +1.5 1 0.75 +1.5 0.5 0.75 +1.25 0.5 1 +1.5 0.75 1 +1 1.25 1 +1 1.5 0.75 +0.5 1.5 0.75 +0.5 1.25 1 +0.75 1.5 1 +1.5 1.25 0.5 +1.25 1.5 0.5 +1.5 1.5 0.75 +1.5 1.25 1 +1.25 1.5 1 +1.5 1.5 0.25 +1.5 1.25 0 +1.25 1.5 0 +1 0.25 1 +1 0 0.75 +0.75 0 1 +0.5 0.25 1 +0.5 0 0.75 +1.25 0 1 +1.5 0.25 1 +1.5 0 0.75 +0 0 0.75 +0.25 0 1 +0 0.25 1 +0 0.5 0.75 +0.25 0.5 1 +0.25 1 1 +0 0.75 1 +0 1 0.75 +0 1.25 1 +0.25 1.5 1 +0 1.5 0.75 +1.75 0 0 +2 0 0.25 +1.75 0 0.5 +2 0.25 0 +1.75 0.5 0 +1.75 0.5 0.5 +2 0.25 0.5 +2 0.5 0.25 +2 0 0.75 +1.75 0 1 +2 0.25 1 +2 0.5 0.75 +1.75 0.5 1 +2 0.75 0 +1.75 1 0 +2 1 0.25 +2 0.75 0.5 +1.75 1 0.5 +2 1.25 0 +1.75 1.5 0 +1.75 1.5 0.5 +2 1.25 0.5 +2 1.5 0.25 +1.75 1 1 +2 1 0.75 +2 0.75 1 +2 1.25 1 +1.75 1.5 1 +2 1.5 0.75 +0 1.75 0 +0.25 2 0 +0.5 1.75 0 +0 2 0.25 +0 1.75 0.5 +0.5 1.75 0.5 +0.5 2 0.25 +0.25 2 0.5 +0.75 2 0 +1 1.75 0 +1 2 0.25 +0.75 2 0.5 +1 1.75 0.5 +1.25 2 0 +1.5 1.75 0 +1.5 1.75 0.5 +1.25 2 0.5 +1.5 2 0.25 +0 2 0.75 +0 1.75 1 +0.25 2 1 +0.5 2 0.75 +0.5 1.75 1 +1 1.75 1 +1 2 0.75 +0.75 2 1 +1.25 2 1 +1.5 1.75 1 +1.5 2 0.75 +2 1.75 0 +1.75 2 0 +2 2 0.25 +2 1.75 0.5 +1.75 2 0.5 +2 2 0.75 +2 1.75 1 +1.75 2 1 +0.125 0.125 0.125 +0.375 0.125 0.125 +0.375 0.375 0.125 +0.625 0.125 0.125 +0.625 0.375 0.125 +0.125 0.375 0.125 +0.125 0.625 0.125 +0.375 0.625 0.125 +0.375 0.375 0.375 +0.625 0.375 0.375 +0.375 0.625 0.375 +0.625 0.625 0.375 +0.625 0.625 0.125 +0.375 0.125 0.375 +0.625 0.125 0.375 +0.375 0.375 0.625 +0.375 0.125 0.625 +0.625 0.375 0.625 +0.625 0.125 0.625 +0.125 0.125 0.375 +0.125 0.125 0.625 +0.125 0.375 0.375 +0.125 0.625 0.375 +0.125 0.375 0.625 +0.375 0.625 0.625 +0.125 0.625 0.625 +0.875 0.125 0.125 +0.875 0.375 0.125 +1.125 0.125 0.125 +1.125 0.375 0.125 +0.875 0.625 0.125 +0.875 0.125 0.375 +1.125 0.125 0.375 +0.875 0.125 0.625 +0.875 0.375 0.375 +0.875 0.625 0.375 +0.875 0.375 0.625 +0.625 0.625 0.625 +0.875 0.625 0.625 +1.125 0.375 0.375 +1.125 0.625 0.375 +1.125 0.625 0.125 +1.125 0.125 0.625 +1.125 0.375 0.625 +0.875 0.875 0.125 +1.125 0.875 0.125 +0.625 0.875 0.125 +0.875 1.125 0.125 +0.625 1.125 0.125 +0.375 0.875 0.125 +0.875 0.875 0.375 +1.125 0.875 0.375 +0.875 1.125 0.375 +1.125 1.125 0.125 +1.125 1.125 0.375 +0.875 0.875 0.625 +1.125 0.875 0.625 +1.125 0.625 0.625 +0.625 0.875 0.375 +0.375 0.875 0.375 +0.625 0.875 0.625 +0.375 0.875 0.625 +0.625 1.125 0.375 +0.375 1.125 0.375 +0.375 1.125 0.125 +0.875 1.125 0.625 +0.625 1.125 0.625 +1.375 0.375 0.375 +1.375 0.625 0.375 +1.375 0.375 0.625 +1.375 0.625 0.625 +1.375 0.375 0.125 +1.375 0.625 0.125 +1.625 0.375 0.375 +1.625 0.375 0.125 +1.625 0.625 0.375 +1.625 0.625 0.125 +1.375 0.125 0.125 +1.625 0.125 0.125 +1.375 0.125 0.375 +1.375 0.125 0.625 +1.625 0.125 0.375 +1.625 0.375 0.625 +1.625 0.125 0.625 +1.375 0.875 0.125 +1.375 1.125 0.125 +1.625 0.875 0.125 +1.375 0.875 0.375 +1.375 0.875 0.625 +1.625 0.875 0.375 +1.625 0.625 0.625 +1.625 0.875 0.625 +1.375 1.125 0.375 +1.375 1.125 0.625 +1.125 1.125 0.625 +1.625 1.125 0.125 +1.625 1.125 0.375 +0.125 0.875 0.125 +0.125 1.125 0.125 +0.125 0.875 0.375 +0.125 1.125 0.375 +0.125 0.875 0.625 +0.125 1.125 0.625 +0.375 1.125 0.625 +0.375 1.375 0.375 +0.625 1.375 0.375 +0.375 1.375 0.625 +0.625 1.375 0.625 +0.375 1.375 0.125 +0.625 1.375 0.125 +0.375 1.625 0.375 +0.375 1.625 0.125 +0.625 1.625 0.375 +0.625 1.625 0.125 +0.125 1.375 0.125 +0.125 1.625 0.125 +0.125 1.375 0.375 +0.125 1.375 0.625 +0.125 1.625 0.375 +0.375 1.625 0.625 +0.125 1.625 0.625 +0.875 1.375 0.125 +1.125 1.375 0.125 +0.875 1.625 0.125 +0.875 1.375 0.375 +0.875 1.375 0.625 +0.875 1.625 0.375 +0.625 1.625 0.625 +0.875 1.625 0.625 +1.125 1.375 0.375 +1.125 1.375 0.625 +1.125 1.625 0.125 +1.125 1.625 0.375 +0.875 0.875 0.875 +1.125 0.875 0.875 +0.875 1.125 0.875 +1.125 1.125 0.875 +0.875 0.625 0.875 +1.125 0.625 0.875 +0.875 0.375 0.875 +1.125 0.375 0.875 +0.625 0.875 0.875 +0.625 1.125 0.875 +0.375 0.875 0.875 +0.375 1.125 0.875 +0.625 0.625 0.875 +0.625 0.375 0.875 +0.375 0.625 0.875 +0.375 0.375 0.875 +1.375 0.875 0.875 +1.375 1.125 0.875 +1.625 0.875 0.875 +1.625 1.125 0.875 +1.625 1.125 0.625 +1.375 0.625 0.875 +1.375 0.375 0.875 +1.625 0.625 0.875 +1.625 0.375 0.875 +0.875 1.375 0.875 +1.125 1.375 0.875 +0.875 1.625 0.875 +1.125 1.625 0.875 +1.125 1.625 0.625 +0.625 1.375 0.875 +0.375 1.375 0.875 +0.625 1.625 0.875 +0.375 1.625 0.875 +1.375 1.375 0.625 +1.375 1.375 0.375 +1.625 1.375 0.625 +1.625 1.375 0.375 +1.375 1.625 0.625 +1.375 1.625 0.375 +1.375 1.375 0.875 +1.625 1.375 0.875 +1.375 1.625 0.875 +1.625 1.625 0.625 +1.625 1.625 0.875 +1.375 1.375 0.125 +1.625 1.375 0.125 +1.375 1.625 0.125 +1.625 1.625 0.375 +1.625 1.625 0.125 +0.875 0.125 0.875 +1.125 0.125 0.875 +0.625 0.125 0.875 +0.375 0.125 0.875 +1.375 0.125 0.875 +1.625 0.125 0.875 +0.125 0.125 0.875 +0.125 0.375 0.875 +0.125 0.625 0.875 +0.125 0.875 0.875 +0.125 1.125 0.875 +0.125 1.375 0.875 +0.125 1.625 0.875 +1.875 0.125 0.125 +1.875 0.125 0.375 +1.875 0.125 0.625 +1.875 0.375 0.125 +1.875 0.625 0.125 +1.875 0.375 0.375 +1.875 0.375 0.625 +1.875 0.625 0.375 +1.875 0.625 0.625 +1.875 0.125 0.875 +1.875 0.375 0.875 +1.875 0.625 0.875 +1.875 0.875 0.125 +1.875 1.125 0.125 +1.875 0.875 0.375 +1.875 1.125 0.375 +1.875 0.875 0.625 +1.875 1.125 0.625 +1.875 1.375 0.125 +1.875 1.625 0.125 +1.875 1.375 0.375 +1.875 1.375 0.625 +1.875 1.625 0.375 +1.875 1.625 0.625 +1.875 0.875 0.875 +1.875 1.125 0.875 +1.875 1.375 0.875 +1.875 1.625 0.875 +0.125 1.875 0.125 +0.375 1.875 0.125 +0.625 1.875 0.125 +0.125 1.875 0.375 +0.125 1.875 0.625 +0.375 1.875 0.375 +0.625 1.875 0.375 +0.375 1.875 0.625 +0.625 1.875 0.625 +0.875 1.875 0.125 +1.125 1.875 0.125 +0.875 1.875 0.375 +1.125 1.875 0.375 +0.875 1.875 0.625 +1.125 1.875 0.625 +1.375 1.875 0.125 +1.625 1.875 0.125 +1.375 1.875 0.375 +1.375 1.875 0.625 +1.625 1.875 0.375 +1.625 1.875 0.625 +0.125 1.875 0.875 +0.375 1.875 0.875 +0.625 1.875 0.875 +0.875 1.875 0.875 +1.125 1.875 0.875 +1.375 1.875 0.875 +1.625 1.875 0.875 +1.875 1.875 0.125 +1.875 1.875 0.375 +1.875 1.875 0.625 +1.875 1.875 0.875 +0.125 0.125 0 +0.25 0.125 0.125 +0.125 0 0.125 +0.125 0.25 0.125 +0 0.125 0.125 +0.125 0.125 0.25 +0.375 0.125 0 +0.375 0 0.125 +0.375 0.25 0.125 +0.5 0.125 0.125 +0.375 0.125 0.25 +0.375 0.375 0 +0.5 0.375 0.125 +0.25 0.375 0.125 +0.375 0.5 0.125 +0.375 0.375 0.25 +0.625 0.25 0.125 +0.625 0.125 0 +0.625 0.125 0.25 +0.625 0 0.125 +0.75 0.125 0.125 +0.625 0.375 0 +0.625 0.375 0.25 +0.625 0.5 0.125 +0.75 0.375 0.125 +0.125 0.375 0 +0 0.375 0.125 +0.125 0.5 0.125 +0.125 0.375 0.25 +0.25 0.625 0.125 +0.125 0.625 0 +0.125 0.625 0.25 +0 0.625 0.125 +0.125 0.75 0.125 +0.375 0.625 0 +0.375 0.625 0.25 +0.5 0.625 0.125 +0.375 0.75 0.125 +0.5 0.375 0.375 +0.375 0.5 0.375 +0.375 0.25 0.375 +0.375 0.375 0.5 +0.25 0.375 0.375 +0.625 0.5 0.375 +0.625 0.25 0.375 +0.625 0.375 0.5 +0.75 0.375 0.375 +0.5 0.625 0.375 +0.25 0.625 0.375 +0.375 0.625 0.5 +0.375 0.75 0.375 +0.625 0.625 0.25 +0.75 0.625 0.375 +0.625 0.625 0.5 +0.625 0.75 0.375 +0.75 0.625 0.125 +0.625 0.625 0 +0.625 0.75 0.125 +0.5 0.125 0.375 +0.375 0.125 0.5 +0.375 0 0.375 +0.25 0.125 0.375 +0.625 0.125 0.5 +0.625 0 0.375 +0.75 0.125 0.375 +0.375 0.25 0.625 +0.5 0.375 0.625 +0.25 0.375 0.625 +0.375 0.5 0.625 +0.375 0.375 0.75 +0.5 0.125 0.625 +0.25 0.125 0.625 +0.375 0 0.625 +0.375 0.125 0.75 +0.625 0.25 0.625 +0.75 0.375 0.625 +0.625 0.5 0.625 +0.625 0.375 0.75 +0.75 0.125 0.625 +0.625 0 0.625 +0.625 0.125 0.75 +0.125 0 0.375 +0 0.125 0.375 +0.125 0.125 0.5 +0.125 0.25 0.375 +0.125 0 0.625 +0.125 0.25 0.625 +0 0.125 0.625 +0.125 0.125 0.75 +0.125 0.5 0.375 +0.125 0.375 0.5 +0 0.375 0.375 +0.125 0.625 0.5 +0 0.625 0.375 +0.125 0.75 0.375 +0.125 0.5 0.625 +0 0.375 0.625 +0.125 0.375 0.75 +0.25 0.625 0.625 +0.375 0.75 0.625 +0.5 0.625 0.625 +0.375 0.625 0.75 +0.125 0.75 0.625 +0 0.625 0.625 +0.125 0.625 0.75 +0.875 0.125 0 +0.875 0 0.125 +0.875 0.25 0.125 +1 0.125 0.125 +0.875 0.125 0.25 +0.875 0.375 0 +1 0.375 0.125 +0.875 0.5 0.125 +0.875 0.375 0.25 +1.125 0.25 0.125 +1.125 0.125 0 +1.125 0.125 0.25 +1.125 0 0.125 +1.25 0.125 0.125 +1.125 0.375 0 +1.125 0.375 0.25 +1.125 0.5 0.125 +1.25 0.375 0.125 +0.875 0.625 0 +0.875 0.625 0.25 +1 0.625 0.125 +0.875 0.75 0.125 +0.875 0 0.375 +1 0.125 0.375 +0.875 0.125 0.5 +0.875 0.25 0.375 +1.125 0 0.375 +1.125 0.25 0.375 +1.125 0.125 0.5 +1.25 0.125 0.375 +0.875 0 0.625 +0.875 0.25 0.625 +1 0.125 0.625 +0.875 0.125 0.75 +0.875 0.5 0.375 +0.875 0.375 0.5 +1 0.375 0.375 +0.875 0.625 0.5 +1 0.625 0.375 +0.875 0.75 0.375 +0.875 0.5 0.625 +1 0.375 0.625 +0.875 0.375 0.75 +0.75 0.625 0.625 +0.625 0.75 0.625 +0.625 0.625 0.75 +0.875 0.75 0.625 +1 0.625 0.625 +0.875 0.625 0.75 +1.125 0.5 0.375 +1.125 0.375 0.5 +1.25 0.375 0.375 +1.125 0.625 0.25 +1.125 0.75 0.375 +1.125 0.625 0.5 +1.25 0.625 0.375 +1.125 0.75 0.125 +1.125 0.625 0 +1.25 0.625 0.125 +1.125 0.25 0.625 +1.25 0.125 0.625 +1.125 0 0.625 +1.125 0.125 0.75 +1.25 0.375 0.625 +1.125 0.5 0.625 +1.125 0.375 0.75 +0.875 0.875 0 +1 0.875 0.125 +0.75 0.875 0.125 +0.875 1 0.125 +0.875 0.875 0.25 +1.125 0.875 0 +1.125 0.875 0.25 +1.125 1 0.125 +1.25 0.875 0.125 +0.625 0.875 0 +0.625 1 0.125 +0.5 0.875 0.125 +0.625 0.875 0.25 +0.75 1.125 0.125 +0.875 1.125 0 +0.875 1.125 0.25 +1 1.125 0.125 +0.875 1.25 0.125 +0.625 1.125 0 +0.625 1.125 0.25 +0.5 1.125 0.125 +0.625 1.25 0.125 +0.375 0.875 0 +0.375 0.875 0.25 +0.375 1 0.125 +0.25 0.875 0.125 +1 0.875 0.375 +0.875 1 0.375 +0.875 0.875 0.5 +0.75 0.875 0.375 +1.125 1 0.375 +1.125 0.875 0.5 +1.25 0.875 0.375 +1 1.125 0.375 +0.75 1.125 0.375 +0.875 1.125 0.5 +0.875 1.25 0.375 +1.125 1.125 0.25 +1.25 1.125 0.125 +1.125 1.125 0 +1.125 1.25 0.125 +1.25 1.125 0.375 +1.125 1.125 0.5 +1.125 1.25 0.375 +1 0.875 0.625 +0.75 0.875 0.625 +0.875 1 0.625 +0.875 0.875 0.75 +1.125 0.75 0.625 +1.25 0.875 0.625 +1.125 1 0.625 +1.125 0.875 0.75 +1.25 0.625 0.625 +1.125 0.625 0.75 +0.5 0.875 0.375 +0.625 0.875 0.5 +0.625 1 0.375 +0.375 0.875 0.5 +0.375 1 0.375 +0.25 0.875 0.375 +0.5 0.875 0.625 +0.625 1 0.625 +0.625 0.875 0.75 +0.25 0.875 0.625 +0.375 1 0.625 +0.375 0.875 0.75 +0.5 1.125 0.375 +0.625 1.125 0.5 +0.625 1.25 0.375 +0.375 1.125 0.25 +0.25 1.125 0.375 +0.375 1.125 0.5 +0.375 1.25 0.375 +0.25 1.125 0.125 +0.375 1.125 0 +0.375 1.25 0.125 +0.75 1.125 0.625 +0.875 1.25 0.625 +1 1.125 0.625 +0.875 1.125 0.75 +0.625 1.25 0.625 +0.5 1.125 0.625 +0.625 1.125 0.75 +1.375 0.5 0.375 +1.375 0.375 0.5 +1.375 0.375 0.25 +1.5 0.375 0.375 +1.375 0.25 0.375 +1.375 0.625 0.5 +1.375 0.625 0.25 +1.5 0.625 0.375 +1.375 0.75 0.375 +1.375 0.5 0.625 +1.375 0.25 0.625 +1.5 0.375 0.625 +1.375 0.375 0.75 +1.375 0.75 0.625 +1.5 0.625 0.625 +1.375 0.625 0.75 +1.375 0.5 0.125 +1.5 0.375 0.125 +1.375 0.375 0 +1.375 0.25 0.125 +1.5 0.625 0.125 +1.375 0.625 0 +1.375 0.75 0.125 +1.625 0.375 0.25 +1.625 0.5 0.375 +1.625 0.25 0.375 +1.625 0.375 0.5 +1.75 0.375 0.375 +1.625 0.5 0.125 +1.625 0.25 0.125 +1.625 0.375 0 +1.75 0.375 0.125 +1.625 0.625 0.25 +1.625 0.75 0.375 +1.625 0.625 0.5 +1.75 0.625 0.375 +1.625 0.75 0.125 +1.625 0.625 0 +1.75 0.625 0.125 +1.375 0.125 0 +1.375 0 0.125 +1.5 0.125 0.125 +1.375 0.125 0.25 +1.625 0.125 0 +1.625 0.125 0.25 +1.625 0 0.125 +1.75 0.125 0.125 +1.375 0.125 0.5 +1.5 0.125 0.375 +1.375 0 0.375 +1.5 0.125 0.625 +1.375 0 0.625 +1.375 0.125 0.75 +1.625 0.125 0.5 +1.625 0 0.375 +1.75 0.125 0.375 +1.625 0.25 0.625 +1.625 0.375 0.75 +1.625 0.5 0.625 +1.75 0.375 0.625 +1.625 0.125 0.75 +1.625 0 0.625 +1.75 0.125 0.625 +1.375 0.875 0 +1.375 1 0.125 +1.5 0.875 0.125 +1.375 0.875 0.25 +1.375 1.125 0 +1.375 1.125 0.25 +1.5 1.125 0.125 +1.375 1.25 0.125 +1.625 0.875 0 +1.625 0.875 0.25 +1.625 1 0.125 +1.75 0.875 0.125 +1.375 0.875 0.5 +1.5 0.875 0.375 +1.375 1 0.375 +1.5 0.875 0.625 +1.375 1 0.625 +1.375 0.875 0.75 +1.625 0.875 0.5 +1.625 1 0.375 +1.75 0.875 0.375 +1.625 0.75 0.625 +1.625 0.625 0.75 +1.75 0.625 0.625 +1.625 0.875 0.75 +1.625 1 0.625 +1.75 0.875 0.625 +1.375 1.125 0.5 +1.5 1.125 0.375 +1.375 1.25 0.375 +1.25 1.125 0.625 +1.375 1.125 0.75 +1.5 1.125 0.625 +1.375 1.25 0.625 +1.125 1.25 0.625 +1.125 1.125 0.75 +1.625 1.125 0.25 +1.625 1.25 0.125 +1.625 1.125 0 +1.75 1.125 0.125 +1.625 1.25 0.375 +1.625 1.125 0.5 +1.75 1.125 0.375 +0.125 0.875 0 +0 0.875 0.125 +0.125 1 0.125 +0.125 0.875 0.25 +0.125 1.125 0 +0.125 1.125 0.25 +0 1.125 0.125 +0.125 1.25 0.125 +0 0.875 0.375 +0.125 1 0.375 +0.125 0.875 0.5 +0 1.125 0.375 +0.125 1.125 0.5 +0.125 1.25 0.375 +0 0.875 0.625 +0.125 1 0.625 +0.125 0.875 0.75 +0.25 1.125 0.625 +0.125 1.25 0.625 +0 1.125 0.625 +0.125 1.125 0.75 +0.375 1.25 0.625 +0.375 1.125 0.75 +0.5 1.375 0.375 +0.375 1.375 0.5 +0.375 1.375 0.25 +0.375 1.5 0.375 +0.25 1.375 0.375 +0.625 1.375 0.5 +0.625 1.375 0.25 +0.625 1.5 0.375 +0.75 1.375 0.375 +0.5 1.375 0.625 +0.25 1.375 0.625 +0.375 1.5 0.625 +0.375 1.375 0.75 +0.75 1.375 0.625 +0.625 1.5 0.625 +0.625 1.375 0.75 +0.5 1.375 0.125 +0.375 1.5 0.125 +0.375 1.375 0 +0.25 1.375 0.125 +0.625 1.5 0.125 +0.625 1.375 0 +0.75 1.375 0.125 +0.375 1.625 0.25 +0.5 1.625 0.375 +0.25 1.625 0.375 +0.375 1.625 0.5 +0.375 1.75 0.375 +0.5 1.625 0.125 +0.25 1.625 0.125 +0.375 1.625 0 +0.375 1.75 0.125 +0.625 1.625 0.25 +0.75 1.625 0.375 +0.625 1.625 0.5 +0.625 1.75 0.375 +0.75 1.625 0.125 +0.625 1.625 0 +0.625 1.75 0.125 +0.125 1.375 0 +0 1.375 0.125 +0.125 1.5 0.125 +0.125 1.375 0.25 +0.125 1.625 0 +0.125 1.625 0.25 +0 1.625 0.125 +0.125 1.75 0.125 +0.125 1.375 0.5 +0.125 1.5 0.375 +0 1.375 0.375 +0.125 1.5 0.625 +0 1.375 0.625 +0.125 1.375 0.75 +0.125 1.625 0.5 +0 1.625 0.375 +0.125 1.75 0.375 +0.25 1.625 0.625 +0.375 1.625 0.75 +0.5 1.625 0.625 +0.375 1.75 0.625 +0.125 1.625 0.75 +0 1.625 0.625 +0.125 1.75 0.625 +0.875 1.375 0 +1 1.375 0.125 +0.875 1.5 0.125 +0.875 1.375 0.25 +1.125 1.375 0 +1.125 1.375 0.25 +1.125 1.5 0.125 +1.25 1.375 0.125 +0.875 1.625 0 +0.875 1.625 0.25 +1 1.625 0.125 +0.875 1.75 0.125 +0.875 1.375 0.5 +0.875 1.5 0.375 +1 1.375 0.375 +0.875 1.5 0.625 +1 1.375 0.625 +0.875 1.375 0.75 +0.875 1.625 0.5 +1 1.625 0.375 +0.875 1.75 0.375 +0.75 1.625 0.625 +0.625 1.625 0.75 +0.625 1.75 0.625 +0.875 1.625 0.75 +1 1.625 0.625 +0.875 1.75 0.625 +1.125 1.375 0.5 +1.125 1.5 0.375 +1.25 1.375 0.375 +1.125 1.375 0.75 +1.125 1.5 0.625 +1.25 1.375 0.625 +1.125 1.625 0.25 +1.25 1.625 0.125 +1.125 1.625 0 +1.125 1.75 0.125 +1.25 1.625 0.375 +1.125 1.625 0.5 +1.125 1.75 0.375 +1 0.875 0.875 +0.875 1 0.875 +0.875 0.75 0.875 +0.875 0.875 1 +0.75 0.875 0.875 +1.125 1 0.875 +1.125 0.75 0.875 +1.125 0.875 1 +1.25 0.875 0.875 +1 1.125 0.875 +0.75 1.125 0.875 +0.875 1.125 1 +0.875 1.25 0.875 +1.25 1.125 0.875 +1.125 1.125 1 +1.125 1.25 0.875 +1 0.625 0.875 +0.875 0.625 1 +0.875 0.5 0.875 +0.75 0.625 0.875 +1.125 0.625 1 +1.125 0.5 0.875 +1.25 0.625 0.875 +1 0.375 0.875 +0.75 0.375 0.875 +0.875 0.375 1 +0.875 0.25 0.875 +1.25 0.375 0.875 +1.125 0.375 1 +1.125 0.25 0.875 +0.625 1 0.875 +0.625 0.875 1 +0.5 0.875 0.875 +0.625 0.75 0.875 +0.625 1.125 1 +0.5 1.125 0.875 +0.625 1.25 0.875 +0.375 1 0.875 +0.375 0.75 0.875 +0.375 0.875 1 +0.25 0.875 0.875 +0.375 1.25 0.875 +0.375 1.125 1 +0.25 1.125 0.875 +0.625 0.5 0.875 +0.5 0.625 0.875 +0.625 0.625 1 +0.5 0.375 0.875 +0.625 0.375 1 +0.625 0.25 0.875 +0.375 0.5 0.875 +0.375 0.625 1 +0.25 0.625 0.875 +0.375 0.25 0.875 +0.375 0.375 1 +0.25 0.375 0.875 +1.375 1 0.875 +1.375 0.875 1 +1.5 0.875 0.875 +1.375 0.75 0.875 +1.375 1.125 1 +1.5 1.125 0.875 +1.375 1.25 0.875 +1.625 1 0.875 +1.625 0.75 0.875 +1.625 0.875 1 +1.75 0.875 0.875 +1.625 1.125 0.75 +1.625 1.25 0.875 +1.625 1.125 1 +1.75 1.125 0.875 +1.625 1.25 0.625 +1.75 1.125 0.625 +1.375 0.5 0.875 +1.5 0.625 0.875 +1.375 0.625 1 +1.5 0.375 0.875 +1.375 0.375 1 +1.375 0.25 0.875 +1.625 0.5 0.875 +1.625 0.625 1 +1.75 0.625 0.875 +1.625 0.25 0.875 +1.625 0.375 1 +1.75 0.375 0.875 +1 1.375 0.875 +0.875 1.375 1 +0.875 1.5 0.875 +0.75 1.375 0.875 +1.125 1.375 1 +1.125 1.5 0.875 +1.25 1.375 0.875 +1 1.625 0.875 +0.75 1.625 0.875 +0.875 1.625 1 +0.875 1.75 0.875 +1.125 1.625 0.75 +1.25 1.625 0.875 +1.125 1.625 1 +1.125 1.75 0.875 +1.25 1.625 0.625 +1.125 1.75 0.625 +0.5 1.375 0.875 +0.625 1.5 0.875 +0.625 1.375 1 +0.375 1.5 0.875 +0.375 1.375 1 +0.25 1.375 0.875 +0.5 1.625 0.875 +0.625 1.625 1 +0.625 1.75 0.875 +0.25 1.625 0.875 +0.375 1.625 1 +0.375 1.75 0.875 +1.375 1.375 0.5 +1.5 1.375 0.625 +1.375 1.5 0.625 +1.375 1.375 0.75 +1.5 1.375 0.375 +1.375 1.5 0.375 +1.375 1.375 0.25 +1.625 1.375 0.5 +1.625 1.375 0.75 +1.625 1.5 0.625 +1.75 1.375 0.625 +1.625 1.375 0.25 +1.625 1.5 0.375 +1.75 1.375 0.375 +1.375 1.625 0.5 +1.375 1.625 0.75 +1.5 1.625 0.625 +1.375 1.75 0.625 +1.375 1.625 0.25 +1.5 1.625 0.375 +1.375 1.75 0.375 +1.5 1.375 0.875 +1.375 1.5 0.875 +1.375 1.375 1 +1.625 1.5 0.875 +1.625 1.375 1 +1.75 1.375 0.875 +1.5 1.625 0.875 +1.375 1.625 1 +1.375 1.75 0.875 +1.625 1.625 0.75 +1.75 1.625 0.625 +1.625 1.625 0.5 +1.625 1.75 0.625 +1.75 1.625 0.875 +1.625 1.625 1 +1.625 1.75 0.875 +1.5 1.375 0.125 +1.375 1.5 0.125 +1.375 1.375 0 +1.625 1.5 0.125 +1.625 1.375 0 +1.75 1.375 0.125 +1.5 1.625 0.125 +1.375 1.625 0 +1.375 1.75 0.125 +1.625 1.625 0.25 +1.75 1.625 0.375 +1.625 1.75 0.375 +1.75 1.625 0.125 +1.625 1.625 0 +1.625 1.75 0.125 +1 0.125 0.875 +0.875 0.125 1 +0.875 0 0.875 +0.75 0.125 0.875 +1.125 0.125 1 +1.125 0 0.875 +1.25 0.125 0.875 +0.625 0.125 1 +0.625 0 0.875 +0.5 0.125 0.875 +0.375 0.125 1 +0.375 0 0.875 +0.25 0.125 0.875 +1.375 0.125 1 +1.375 0 0.875 +1.5 0.125 0.875 +1.625 0.125 1 +1.625 0 0.875 +1.75 0.125 0.875 +0.125 0 0.875 +0 0.125 0.875 +0.125 0.125 1 +0.125 0.25 0.875 +0 0.375 0.875 +0.125 0.375 1 +0.125 0.5 0.875 +0 0.625 0.875 +0.125 0.625 1 +0.125 0.75 0.875 +0.125 0.875 1 +0.125 1 0.875 +0 0.875 0.875 +0.125 1.125 1 +0 1.125 0.875 +0.125 1.25 0.875 +0.125 1.375 1 +0 1.375 0.875 +0.125 1.5 0.875 +0.125 1.625 1 +0 1.625 0.875 +0.125 1.75 0.875 +1.875 0 0.125 +1.875 0.125 0 +1.875 0.125 0.25 +2 0.125 0.125 +1.875 0.25 0.125 +1.875 0 0.375 +2 0.125 0.375 +1.875 0.125 0.5 +1.875 0.25 0.375 +1.875 0 0.625 +1.875 0.25 0.625 +2 0.125 0.625 +1.875 0.125 0.75 +1.875 0.375 0 +2 0.375 0.125 +1.875 0.5 0.125 +1.875 0.375 0.25 +1.875 0.625 0 +1.875 0.625 0.25 +2 0.625 0.125 +1.875 0.75 0.125 +1.875 0.375 0.5 +1.875 0.5 0.375 +2 0.375 0.375 +1.875 0.5 0.625 +2 0.375 0.625 +1.875 0.375 0.75 +1.875 0.625 0.5 +2 0.625 0.375 +1.875 0.75 0.375 +1.875 0.625 0.75 +2 0.625 0.625 +1.875 0.75 0.625 +1.875 0 0.875 +2 0.125 0.875 +1.875 0.125 1 +1.875 0.25 0.875 +2 0.375 0.875 +1.875 0.375 1 +1.875 0.5 0.875 +2 0.625 0.875 +1.875 0.625 1 +1.875 0.75 0.875 +1.875 0.875 0 +2 0.875 0.125 +1.875 1 0.125 +1.875 0.875 0.25 +1.875 1.125 0 +1.875 1.125 0.25 +2 1.125 0.125 +1.875 1.25 0.125 +2 0.875 0.375 +1.875 1 0.375 +1.875 0.875 0.5 +2 1.125 0.375 +1.875 1.125 0.5 +1.875 1.25 0.375 +2 0.875 0.625 +1.875 1 0.625 +1.875 0.875 0.75 +1.875 1.25 0.625 +2 1.125 0.625 +1.875 1.125 0.75 +1.875 1.375 0 +2 1.375 0.125 +1.875 1.5 0.125 +1.875 1.375 0.25 +1.875 1.625 0 +1.875 1.625 0.25 +2 1.625 0.125 +1.875 1.75 0.125 +1.875 1.375 0.5 +1.875 1.5 0.375 +2 1.375 0.375 +1.875 1.5 0.625 +2 1.375 0.625 +1.875 1.375 0.75 +1.875 1.625 0.5 +2 1.625 0.375 +1.875 1.75 0.375 +1.875 1.625 0.75 +2 1.625 0.625 +1.875 1.75 0.625 +1.875 1 0.875 +1.875 0.875 1 +2 0.875 0.875 +1.875 1.125 1 +2 1.125 0.875 +1.875 1.25 0.875 +1.875 1.375 1 +2 1.375 0.875 +1.875 1.5 0.875 +1.875 1.625 1 +2 1.625 0.875 +1.875 1.75 0.875 +0.125 1.875 0 +0 1.875 0.125 +0.25 1.875 0.125 +0.125 2 0.125 +0.125 1.875 0.25 +0.375 1.875 0 +0.375 2 0.125 +0.5 1.875 0.125 +0.375 1.875 0.25 +0.625 1.875 0 +0.625 1.875 0.25 +0.625 2 0.125 +0.75 1.875 0.125 +0 1.875 0.375 +0.125 2 0.375 +0.125 1.875 0.5 +0.25 1.875 0.375 +0 1.875 0.625 +0.25 1.875 0.625 +0.125 2 0.625 +0.125 1.875 0.75 +0.5 1.875 0.375 +0.375 1.875 0.5 +0.375 2 0.375 +0.625 1.875 0.5 +0.625 2 0.375 +0.75 1.875 0.375 +0.5 1.875 0.625 +0.375 2 0.625 +0.375 1.875 0.75 +0.75 1.875 0.625 +0.625 2 0.625 +0.625 1.875 0.75 +0.875 1.875 0 +0.875 2 0.125 +1 1.875 0.125 +0.875 1.875 0.25 +1.125 1.875 0 +1.125 1.875 0.25 +1.125 2 0.125 +1.25 1.875 0.125 +0.875 2 0.375 +1 1.875 0.375 +0.875 1.875 0.5 +1.125 2 0.375 +1.125 1.875 0.5 +1.25 1.875 0.375 +0.875 2 0.625 +1 1.875 0.625 +0.875 1.875 0.75 +1.25 1.875 0.625 +1.125 2 0.625 +1.125 1.875 0.75 +1.375 1.875 0 +1.375 2 0.125 +1.5 1.875 0.125 +1.375 1.875 0.25 +1.625 1.875 0 +1.625 1.875 0.25 +1.625 2 0.125 +1.75 1.875 0.125 +1.375 1.875 0.5 +1.5 1.875 0.375 +1.375 2 0.375 +1.5 1.875 0.625 +1.375 2 0.625 +1.375 1.875 0.75 +1.625 1.875 0.5 +1.625 2 0.375 +1.75 1.875 0.375 +1.625 1.875 0.75 +1.625 2 0.625 +1.75 1.875 0.625 +0 1.875 0.875 +0.125 2 0.875 +0.125 1.875 1 +0.25 1.875 0.875 +0.375 2 0.875 +0.375 1.875 1 +0.5 1.875 0.875 +0.625 2 0.875 +0.625 1.875 1 +0.75 1.875 0.875 +1 1.875 0.875 +0.875 1.875 1 +0.875 2 0.875 +1.125 1.875 1 +1.125 2 0.875 +1.25 1.875 0.875 +1.375 1.875 1 +1.375 2 0.875 +1.5 1.875 0.875 +1.625 1.875 1 +1.625 2 0.875 +1.75 1.875 0.875 +1.875 1.875 0 +2 1.875 0.125 +1.875 2 0.125 +1.875 1.875 0.25 +2 1.875 0.375 +1.875 2 0.375 +1.875 1.875 0.5 +2 1.875 0.625 +1.875 2 0.625 +1.875 1.875 0.75 +2 1.875 0.875 +1.875 2 0.875 +1.875 1.875 1 +0.125 0 0 +0.25 0.125 0 +0 0.125 0 +0.125 0.25 0 +0.25 0.25 0.125 +0.25 0.125 0.25 +0.25 0 0.125 +0 0 0.125 +0.125 0 0.25 +0.125 0.25 0.25 +0 0.25 0.125 +0 0.125 0.25 +0.375 0 0 +0.5 0.125 0 +0.375 0.25 0 +0.5 0 0.125 +0.375 0 0.25 +0.375 0.25 0.25 +0.5 0.25 0.125 +0.5 0.125 0.25 +0.5 0.375 0 +0.375 0.5 0 +0.25 0.375 0 +0.5 0.5 0.125 +0.5 0.375 0.25 +0.25 0.375 0.25 +0.25 0.5 0.125 +0.375 0.5 0.25 +0.625 0.25 0.25 +0.75 0.25 0.125 +0.625 0.25 0 +0.625 0 0 +0.75 0.125 0 +0.75 0.125 0.25 +0.625 0 0.25 +0.75 0 0.125 +0.625 0.5 0 +0.75 0.375 0 +0.75 0.375 0.25 +0.625 0.5 0.25 +0.75 0.5 0.125 +0 0.375 0 +0.125 0.5 0 +0 0.5 0.125 +0 0.375 0.25 +0.125 0.5 0.25 +0.25 0.625 0.25 +0.25 0.75 0.125 +0.25 0.625 0 +0 0.625 0 +0.125 0.75 0 +0.125 0.75 0.25 +0 0.625 0.25 +0 0.75 0.125 +0.5 0.625 0 +0.375 0.75 0 +0.375 0.75 0.25 +0.5 0.625 0.25 +0.5 0.75 0.125 +0.5 0.5 0.375 +0.5 0.375 0.5 +0.5 0.25 0.375 +0.375 0.5 0.5 +0.25 0.5 0.375 +0.25 0.25 0.375 +0.375 0.25 0.5 +0.25 0.375 0.5 +0.625 0.5 0.5 +0.75 0.5 0.375 +0.75 0.25 0.375 +0.625 0.25 0.5 +0.75 0.375 0.5 +0.5 0.625 0.5 +0.5 0.75 0.375 +0.25 0.75 0.375 +0.25 0.625 0.5 +0.375 0.75 0.5 +0.75 0.625 0.25 +0.625 0.75 0.25 +0.75 0.75 0.375 +0.75 0.625 0.5 +0.625 0.75 0.5 +0.75 0.75 0.125 +0.75 0.625 0 +0.625 0.75 0 +0.5 0.125 0.5 +0.5 0 0.375 +0.375 0 0.5 +0.25 0.125 0.5 +0.25 0 0.375 +0.625 0 0.5 +0.75 0.125 0.5 +0.75 0 0.375 +0.25 0.25 0.625 +0.375 0.25 0.75 +0.5 0.25 0.625 +0.5 0.5 0.625 +0.5 0.375 0.75 +0.25 0.375 0.75 +0.25 0.5 0.625 +0.375 0.5 0.75 +0.5 0 0.625 +0.5 0.125 0.75 +0.25 0.125 0.75 +0.25 0 0.625 +0.375 0 0.75 +0.75 0.25 0.625 +0.625 0.25 0.75 +0.75 0.375 0.75 +0.75 0.5 0.625 +0.625 0.5 0.75 +0.75 0.125 0.75 +0.75 0 0.625 +0.625 0 0.75 +0 0 0.375 +0.125 0 0.5 +0 0.125 0.5 +0 0.25 0.375 +0.125 0.25 0.5 +0 0 0.625 +0.125 0 0.75 +0.125 0.25 0.75 +0 0.25 0.625 +0 0.125 0.75 +0.125 0.5 0.5 +0 0.5 0.375 +0 0.375 0.5 +0 0.625 0.5 +0.125 0.75 0.5 +0 0.75 0.375 +0 0.5 0.625 +0.125 0.5 0.75 +0 0.375 0.75 +0.25 0.75 0.625 +0.25 0.625 0.75 +0.375 0.75 0.75 +0.5 0.75 0.625 +0.5 0.625 0.75 +0.125 0.75 0.75 +0 0.75 0.625 +0 0.625 0.75 +0.875 0 0 +1 0.125 0 +0.875 0.25 0 +1 0 0.125 +0.875 0 0.25 +0.875 0.25 0.25 +1 0.25 0.125 +1 0.125 0.25 +1 0.375 0 +0.875 0.5 0 +1 0.5 0.125 +1 0.375 0.25 +0.875 0.5 0.25 +1.125 0.25 0.25 +1.25 0.25 0.125 +1.125 0.25 0 +1.125 0 0 +1.25 0.125 0 +1.25 0.125 0.25 +1.125 0 0.25 +1.25 0 0.125 +1.125 0.5 0 +1.25 0.375 0 +1.25 0.375 0.25 +1.125 0.5 0.25 +1.25 0.5 0.125 +1 0.625 0 +0.875 0.75 0 +0.875 0.75 0.25 +1 0.625 0.25 +1 0.75 0.125 +1 0 0.375 +0.875 0 0.5 +1 0.125 0.5 +1 0.25 0.375 +0.875 0.25 0.5 +1.125 0 0.5 +1.25 0 0.375 +1.25 0.25 0.375 +1.125 0.25 0.5 +1.25 0.125 0.5 +1 0 0.625 +0.875 0 0.75 +0.875 0.25 0.75 +1 0.25 0.625 +1 0.125 0.75 +0.875 0.5 0.5 +1 0.5 0.375 +1 0.375 0.5 +1 0.625 0.5 +0.875 0.75 0.5 +1 0.75 0.375 +1 0.5 0.625 +0.875 0.5 0.75 +1 0.375 0.75 +0.75 0.75 0.625 +0.75 0.625 0.75 +0.625 0.75 0.75 +0.875 0.75 0.75 +1 0.75 0.625 +1 0.625 0.75 +1.125 0.5 0.5 +1.25 0.5 0.375 +1.25 0.375 0.5 +1.125 0.75 0.25 +1.25 0.625 0.25 +1.25 0.75 0.375 +1.125 0.75 0.5 +1.25 0.625 0.5 +1.25 0.75 0.125 +1.125 0.75 0 +1.25 0.625 0 +1.25 0.25 0.625 +1.125 0.25 0.75 +1.25 0.125 0.75 +1.25 0 0.625 +1.125 0 0.75 +1.25 0.375 0.75 +1.25 0.5 0.625 +1.125 0.5 0.75 +1 0.875 0 +0.875 1 0 +0.75 0.875 0 +1 1 0.125 +1 0.875 0.25 +0.75 0.875 0.25 +0.75 1 0.125 +0.875 1 0.25 +1.125 1 0 +1.25 0.875 0 +1.25 0.875 0.25 +1.125 1 0.25 +1.25 1 0.125 +0.625 1 0 +0.5 0.875 0 +0.5 1 0.125 +0.625 1 0.25 +0.5 0.875 0.25 +0.75 1.125 0.25 +0.75 1.25 0.125 +0.75 1.125 0 +1 1.125 0 +0.875 1.25 0 +0.875 1.25 0.25 +1 1.125 0.25 +1 1.25 0.125 +0.5 1.125 0 +0.625 1.25 0 +0.625 1.25 0.25 +0.5 1.125 0.25 +0.5 1.25 0.125 +0.375 1 0 +0.25 0.875 0 +0.25 0.875 0.25 +0.375 1 0.25 +0.25 1 0.125 +1 1 0.375 +1 0.875 0.5 +0.875 1 0.5 +0.75 1 0.375 +0.75 0.875 0.5 +1.125 1 0.5 +1.25 1 0.375 +1.25 0.875 0.5 +1 1.125 0.5 +1 1.25 0.375 +0.75 1.25 0.375 +0.75 1.125 0.5 +0.875 1.25 0.5 +1.25 1.125 0.25 +1.125 1.25 0.25 +1.25 1.25 0.125 +1.25 1.125 0 +1.125 1.25 0 +1.25 1.25 0.375 +1.25 1.125 0.5 +1.125 1.25 0.5 +1 1 0.625 +1 0.875 0.75 +0.75 0.875 0.75 +0.75 1 0.625 +0.875 1 0.75 +1.25 0.75 0.625 +1.125 0.75 0.75 +1.25 0.875 0.75 +1.25 1 0.625 +1.125 1 0.75 +1.25 0.625 0.75 +0.5 0.875 0.5 +0.5 1 0.375 +0.625 1 0.5 +0.375 1 0.5 +0.25 0.875 0.5 +0.25 1 0.375 +0.5 1 0.625 +0.5 0.875 0.75 +0.625 1 0.75 +0.25 0.875 0.75 +0.25 1 0.625 +0.375 1 0.75 +0.5 1.125 0.5 +0.5 1.25 0.375 +0.625 1.25 0.5 +0.25 1.125 0.25 +0.375 1.25 0.25 +0.25 1.25 0.375 +0.25 1.125 0.5 +0.375 1.25 0.5 +0.25 1.25 0.125 +0.25 1.125 0 +0.375 1.25 0 +0.75 1.25 0.625 +0.75 1.125 0.75 +0.875 1.25 0.75 +1 1.25 0.625 +1 1.125 0.75 +0.625 1.25 0.75 +0.5 1.25 0.625 +0.5 1.125 0.75 +1.375 0.5 0.5 +1.5 0.5 0.375 +1.375 0.5 0.25 +1.5 0.375 0.5 +1.375 0.25 0.5 +1.375 0.25 0.25 +1.5 0.375 0.25 +1.5 0.25 0.375 +1.5 0.625 0.5 +1.375 0.75 0.5 +1.375 0.75 0.25 +1.5 0.625 0.25 +1.5 0.75 0.375 +1.5 0.5 0.625 +1.375 0.5 0.75 +1.375 0.25 0.75 +1.5 0.25 0.625 +1.5 0.375 0.75 +1.375 0.75 0.75 +1.5 0.75 0.625 +1.5 0.625 0.75 +1.5 0.5 0.125 +1.375 0.5 0 +1.5 0.375 0 +1.5 0.25 0.125 +1.375 0.25 0 +1.5 0.625 0 +1.5 0.75 0.125 +1.375 0.75 0 +1.625 0.25 0.25 +1.75 0.375 0.25 +1.625 0.5 0.25 +1.625 0.5 0.5 +1.75 0.5 0.375 +1.75 0.25 0.375 +1.625 0.25 0.5 +1.75 0.375 0.5 +1.625 0.5 0 +1.75 0.5 0.125 +1.75 0.25 0.125 +1.625 0.25 0 +1.75 0.375 0 +1.625 0.75 0.25 +1.75 0.625 0.25 +1.75 0.75 0.375 +1.625 0.75 0.5 +1.75 0.625 0.5 +1.75 0.75 0.125 +1.625 0.75 0 +1.75 0.625 0 +1.375 0 0 +1.5 0.125 0 +1.5 0 0.125 +1.375 0 0.25 +1.5 0.125 0.25 +1.625 0 0 +1.75 0.125 0 +1.75 0.125 0.25 +1.625 0 0.25 +1.75 0 0.125 +1.5 0.125 0.5 +1.375 0 0.5 +1.5 0 0.375 +1.5 0 0.625 +1.5 0.125 0.75 +1.375 0 0.75 +1.625 0 0.5 +1.75 0.125 0.5 +1.75 0 0.375 +1.625 0.25 0.75 +1.75 0.25 0.625 +1.75 0.375 0.75 +1.625 0.5 0.75 +1.75 0.5 0.625 +1.75 0.125 0.75 +1.625 0 0.75 +1.75 0 0.625 +1.375 1 0 +1.5 0.875 0 +1.5 1 0.125 +1.375 1 0.25 +1.5 0.875 0.25 +1.5 1.125 0 +1.375 1.25 0 +1.375 1.25 0.25 +1.5 1.125 0.25 +1.5 1.25 0.125 +1.625 1 0 +1.75 0.875 0 +1.75 0.875 0.25 +1.625 1 0.25 +1.75 1 0.125 +1.5 0.875 0.5 +1.375 1 0.5 +1.5 1 0.375 +1.5 1 0.625 +1.5 0.875 0.75 +1.375 1 0.75 +1.625 1 0.5 +1.75 0.875 0.5 +1.75 1 0.375 +1.625 0.75 0.75 +1.75 0.75 0.625 +1.75 0.625 0.75 +1.75 0.875 0.75 +1.625 1 0.75 +1.75 1 0.625 +1.5 1.125 0.5 +1.375 1.25 0.5 +1.5 1.25 0.375 +1.25 1.125 0.75 +1.25 1.25 0.625 +1.375 1.25 0.75 +1.5 1.125 0.75 +1.5 1.25 0.625 +1.125 1.25 0.75 +1.625 1.25 0.25 +1.75 1.125 0.25 +1.75 1.25 0.125 +1.625 1.25 0 +1.75 1.125 0 +1.75 1.25 0.375 +1.625 1.25 0.5 +1.75 1.125 0.5 +0 0.875 0 +0.125 1 0 +0 1 0.125 +0 0.875 0.25 +0.125 1 0.25 +0 1.125 0 +0.125 1.25 0 +0.125 1.25 0.25 +0 1.125 0.25 +0 1.25 0.125 +0 1 0.375 +0 0.875 0.5 +0.125 1 0.5 +0 1.125 0.5 +0 1.25 0.375 +0.125 1.25 0.5 +0 1 0.625 +0 0.875 0.75 +0.125 1 0.75 +0.25 1.25 0.625 +0.25 1.125 0.75 +0.125 1.25 0.75 +0 1.25 0.625 +0 1.125 0.75 +0.375 1.25 0.75 +0.5 1.375 0.5 +0.5 1.5 0.375 +0.5 1.375 0.25 +0.375 1.5 0.5 +0.25 1.375 0.5 +0.25 1.375 0.25 +0.375 1.5 0.25 +0.25 1.5 0.375 +0.625 1.5 0.5 +0.75 1.375 0.5 +0.75 1.375 0.25 +0.625 1.5 0.25 +0.75 1.5 0.375 +0.5 1.5 0.625 +0.5 1.375 0.75 +0.25 1.375 0.75 +0.25 1.5 0.625 +0.375 1.5 0.75 +0.75 1.375 0.75 +0.75 1.5 0.625 +0.625 1.5 0.75 +0.5 1.5 0.125 +0.5 1.375 0 +0.375 1.5 0 +0.25 1.5 0.125 +0.25 1.375 0 +0.625 1.5 0 +0.75 1.5 0.125 +0.75 1.375 0 +0.25 1.625 0.25 +0.375 1.75 0.25 +0.5 1.625 0.25 +0.5 1.625 0.5 +0.5 1.75 0.375 +0.25 1.75 0.375 +0.25 1.625 0.5 +0.375 1.75 0.5 +0.5 1.625 0 +0.5 1.75 0.125 +0.25 1.75 0.125 +0.25 1.625 0 +0.375 1.75 0 +0.75 1.625 0.25 +0.625 1.75 0.25 +0.75 1.75 0.375 +0.75 1.625 0.5 +0.625 1.75 0.5 +0.75 1.75 0.125 +0.75 1.625 0 +0.625 1.75 0 +0 1.375 0 +0.125 1.5 0 +0 1.5 0.125 +0 1.375 0.25 +0.125 1.5 0.25 +0 1.625 0 +0.125 1.75 0 +0.125 1.75 0.25 +0 1.625 0.25 +0 1.75 0.125 +0.125 1.5 0.5 +0 1.375 0.5 +0 1.5 0.375 +0 1.5 0.625 +0.125 1.5 0.75 +0 1.375 0.75 +0 1.625 0.5 +0.125 1.75 0.5 +0 1.75 0.375 +0.25 1.625 0.75 +0.25 1.75 0.625 +0.375 1.75 0.75 +0.5 1.625 0.75 +0.5 1.75 0.625 +0.125 1.75 0.75 +0 1.625 0.75 +0 1.75 0.625 +1 1.375 0 +0.875 1.5 0 +1 1.5 0.125 +1 1.375 0.25 +0.875 1.5 0.25 +1.125 1.5 0 +1.25 1.375 0 +1.25 1.375 0.25 +1.125 1.5 0.25 +1.25 1.5 0.125 +1 1.625 0 +0.875 1.75 0 +0.875 1.75 0.25 +1 1.625 0.25 +1 1.75 0.125 +0.875 1.5 0.5 +1 1.375 0.5 +1 1.5 0.375 +1 1.5 0.625 +0.875 1.5 0.75 +1 1.375 0.75 +1 1.625 0.5 +0.875 1.75 0.5 +1 1.75 0.375 +0.75 1.625 0.75 +0.75 1.75 0.625 +0.625 1.75 0.75 +0.875 1.75 0.75 +1 1.625 0.75 +1 1.75 0.625 +1.125 1.5 0.5 +1.25 1.375 0.5 +1.25 1.5 0.375 +1.25 1.375 0.75 +1.125 1.5 0.75 +1.25 1.5 0.625 +1.25 1.625 0.25 +1.125 1.75 0.25 +1.25 1.75 0.125 +1.25 1.625 0 +1.125 1.75 0 +1.25 1.75 0.375 +1.25 1.625 0.5 +1.125 1.75 0.5 +1 1 0.875 +1 0.875 1 +1 0.75 0.875 +0.875 1 1 +0.75 1 0.875 +0.75 0.75 0.875 +0.875 0.75 1 +0.75 0.875 1 +1.125 1 1 +1.25 1 0.875 +1.25 0.75 0.875 +1.125 0.75 1 +1.25 0.875 1 +1 1.125 1 +1 1.25 0.875 +0.75 1.25 0.875 +0.75 1.125 1 +0.875 1.25 1 +1.25 1.25 0.875 +1.25 1.125 1 +1.125 1.25 1 +1 0.625 1 +1 0.5 0.875 +0.875 0.5 1 +0.75 0.625 1 +0.75 0.5 0.875 +1.125 0.5 1 +1.25 0.625 1 +1.25 0.5 0.875 +1 0.375 1 +1 0.25 0.875 +0.75 0.25 0.875 +0.75 0.375 1 +0.875 0.25 1 +1.25 0.25 0.875 +1.25 0.375 1 +1.125 0.25 1 +0.625 1 1 +0.5 1 0.875 +0.5 0.875 1 +0.625 0.75 1 +0.5 0.75 0.875 +0.5 1.125 1 +0.625 1.25 1 +0.5 1.25 0.875 +0.375 1 1 +0.25 1 0.875 +0.25 0.75 0.875 +0.375 0.75 1 +0.25 0.875 1 +0.25 1.25 0.875 +0.375 1.25 1 +0.25 1.125 1 +0.5 0.5 0.875 +0.625 0.5 1 +0.5 0.625 1 +0.5 0.375 1 +0.5 0.25 0.875 +0.625 0.25 1 +0.375 0.5 1 +0.25 0.5 0.875 +0.25 0.625 1 +0.25 0.25 0.875 +0.375 0.25 1 +0.25 0.375 1 +1.375 1 1 +1.5 1 0.875 +1.5 0.875 1 +1.375 0.75 1 +1.5 0.75 0.875 +1.5 1.125 1 +1.375 1.25 1 +1.5 1.25 0.875 +1.625 1 1 +1.75 1 0.875 +1.75 0.75 0.875 +1.625 0.75 1 +1.75 0.875 1 +1.625 1.25 0.75 +1.75 1.125 0.75 +1.75 1.25 0.875 +1.625 1.25 1 +1.75 1.125 1 +1.75 1.25 0.625 +1.5 0.5 0.875 +1.375 0.5 1 +1.5 0.625 1 +1.5 0.375 1 +1.5 0.25 0.875 +1.375 0.25 1 +1.625 0.5 1 +1.75 0.5 0.875 +1.75 0.625 1 +1.75 0.25 0.875 +1.625 0.25 1 +1.75 0.375 1 +1 1.375 1 +1 1.5 0.875 +0.875 1.5 1 +0.75 1.375 1 +0.75 1.5 0.875 +1.125 1.5 1 +1.25 1.375 1 +1.25 1.5 0.875 +1 1.625 1 +1 1.75 0.875 +0.75 1.75 0.875 +0.75 1.625 1 +0.875 1.75 1 +1.25 1.625 0.75 +1.125 1.75 0.75 +1.25 1.75 0.875 +1.25 1.625 1 +1.125 1.75 1 +1.25 1.75 0.625 +0.5 1.5 0.875 +0.5 1.375 1 +0.625 1.5 1 +0.375 1.5 1 +0.25 1.5 0.875 +0.25 1.375 1 +0.5 1.625 1 +0.5 1.75 0.875 +0.625 1.75 1 +0.25 1.75 0.875 +0.25 1.625 1 +0.375 1.75 1 +1.5 1.375 0.5 +1.375 1.5 0.5 +1.5 1.5 0.625 +1.5 1.375 0.75 +1.375 1.5 0.75 +1.5 1.5 0.375 +1.5 1.375 0.25 +1.375 1.5 0.25 +1.625 1.5 0.5 +1.75 1.375 0.5 +1.75 1.375 0.75 +1.625 1.5 0.75 +1.75 1.5 0.625 +1.75 1.375 0.25 +1.625 1.5 0.25 +1.75 1.5 0.375 +1.5 1.625 0.5 +1.375 1.75 0.5 +1.375 1.75 0.75 +1.5 1.625 0.75 +1.5 1.75 0.625 +1.375 1.75 0.25 +1.5 1.625 0.25 +1.5 1.75 0.375 +1.5 1.5 0.875 +1.5 1.375 1 +1.375 1.5 1 +1.625 1.5 1 +1.75 1.5 0.875 +1.75 1.375 1 +1.5 1.625 1 +1.5 1.75 0.875 +1.375 1.75 1 +1.75 1.625 0.75 +1.625 1.75 0.75 +1.75 1.75 0.625 +1.75 1.625 0.5 +1.625 1.75 0.5 +1.75 1.75 0.875 +1.75 1.625 1 +1.625 1.75 1 +1.5 1.5 0.125 +1.5 1.375 0 +1.375 1.5 0 +1.625 1.5 0 +1.75 1.5 0.125 +1.75 1.375 0 +1.5 1.625 0 +1.5 1.75 0.125 +1.375 1.75 0 +1.75 1.625 0.25 +1.625 1.75 0.25 +1.75 1.75 0.375 +1.75 1.75 0.125 +1.75 1.625 0 +1.625 1.75 0 +1 0.125 1 +1 0 0.875 +0.875 0 1 +0.75 0.125 1 +0.75 0 0.875 +1.125 0 1 +1.25 0.125 1 +1.25 0 0.875 +0.625 0 1 +0.5 0.125 1 +0.5 0 0.875 +0.375 0 1 +0.25 0.125 1 +0.25 0 0.875 +1.375 0 1 +1.5 0.125 1 +1.5 0 0.875 +1.625 0 1 +1.75 0.125 1 +1.75 0 0.875 +0 0 0.875 +0.125 0 1 +0 0.125 1 +0 0.25 0.875 +0.125 0.25 1 +0 0.375 1 +0 0.5 0.875 +0.125 0.5 1 +0 0.625 1 +0 0.75 0.875 +0.125 0.75 1 +0.125 1 1 +0 0.875 1 +0 1 0.875 +0 1.125 1 +0.125 1.25 1 +0 1.25 0.875 +0 1.375 1 +0.125 1.5 1 +0 1.5 0.875 +0 1.625 1 +0.125 1.75 1 +0 1.75 0.875 +1.875 0 0 +2 0 0.125 +1.875 0 0.25 +2 0.125 0 +1.875 0.25 0 +1.875 0.25 0.25 +2 0.125 0.25 +2 0.25 0.125 +2 0 0.375 +1.875 0 0.5 +2 0.125 0.5 +2 0.25 0.375 +1.875 0.25 0.5 +2 0 0.625 +1.875 0 0.75 +1.875 0.25 0.75 +2 0.25 0.625 +2 0.125 0.75 +2 0.375 0 +1.875 0.5 0 +2 0.5 0.125 +2 0.375 0.25 +1.875 0.5 0.25 +2 0.625 0 +1.875 0.75 0 +1.875 0.75 0.25 +2 0.625 0.25 +2 0.75 0.125 +1.875 0.5 0.5 +2 0.375 0.5 +2 0.5 0.375 +2 0.5 0.625 +1.875 0.5 0.75 +2 0.375 0.75 +2 0.625 0.5 +1.875 0.75 0.5 +2 0.75 0.375 +1.875 0.75 0.75 +2 0.625 0.75 +2 0.75 0.625 +2 0 0.875 +1.875 0 1 +2 0.125 1 +2 0.25 0.875 +1.875 0.25 1 +2 0.375 1 +2 0.5 0.875 +1.875 0.5 1 +2 0.625 1 +2 0.75 0.875 +1.875 0.75 1 +2 0.875 0 +1.875 1 0 +2 1 0.125 +2 0.875 0.25 +1.875 1 0.25 +2 1.125 0 +1.875 1.25 0 +1.875 1.25 0.25 +2 1.125 0.25 +2 1.25 0.125 +2 1 0.375 +2 0.875 0.5 +1.875 1 0.5 +2 1.125 0.5 +2 1.25 0.375 +1.875 1.25 0.5 +2 1 0.625 +2 0.875 0.75 +1.875 1 0.75 +1.875 1.25 0.75 +2 1.25 0.625 +2 1.125 0.75 +2 1.375 0 +1.875 1.5 0 +2 1.5 0.125 +2 1.375 0.25 +1.875 1.5 0.25 +2 1.625 0 +1.875 1.75 0 +1.875 1.75 0.25 +2 1.625 0.25 +2 1.75 0.125 +1.875 1.5 0.5 +2 1.375 0.5 +2 1.5 0.375 +2 1.5 0.625 +1.875 1.5 0.75 +2 1.375 0.75 +2 1.625 0.5 +1.875 1.75 0.5 +2 1.75 0.375 +1.875 1.75 0.75 +2 1.625 0.75 +2 1.75 0.625 +1.875 1 1 +2 1 0.875 +2 0.875 1 +2 1.125 1 +1.875 1.25 1 +2 1.25 0.875 +2 1.375 1 +1.875 1.5 1 +2 1.5 0.875 +2 1.625 1 +1.875 1.75 1 +2 1.75 0.875 +0 1.875 0 +0.125 2 0 +0.25 1.875 0 +0 2 0.125 +0 1.875 0.25 +0.25 1.875 0.25 +0.25 2 0.125 +0.125 2 0.25 +0.375 2 0 +0.5 1.875 0 +0.5 2 0.125 +0.375 2 0.25 +0.5 1.875 0.25 +0.625 2 0 +0.75 1.875 0 +0.75 1.875 0.25 +0.625 2 0.25 +0.75 2 0.125 +0 2 0.375 +0 1.875 0.5 +0.125 2 0.5 +0.25 2 0.375 +0.25 1.875 0.5 +0 2 0.625 +0 1.875 0.75 +0.25 1.875 0.75 +0.25 2 0.625 +0.125 2 0.75 +0.5 1.875 0.5 +0.5 2 0.375 +0.375 2 0.5 +0.625 2 0.5 +0.75 1.875 0.5 +0.75 2 0.375 +0.5 2 0.625 +0.5 1.875 0.75 +0.375 2 0.75 +0.75 1.875 0.75 +0.75 2 0.625 +0.625 2 0.75 +0.875 2 0 +1 1.875 0 +1 2 0.125 +0.875 2 0.25 +1 1.875 0.25 +1.125 2 0 +1.25 1.875 0 +1.25 1.875 0.25 +1.125 2 0.25 +1.25 2 0.125 +1 2 0.375 +0.875 2 0.5 +1 1.875 0.5 +1.125 2 0.5 +1.25 2 0.375 +1.25 1.875 0.5 +1 2 0.625 +0.875 2 0.75 +1 1.875 0.75 +1.25 1.875 0.75 +1.25 2 0.625 +1.125 2 0.75 +1.375 2 0 +1.5 1.875 0 +1.5 2 0.125 +1.375 2 0.25 +1.5 1.875 0.25 +1.625 2 0 +1.75 1.875 0 +1.75 1.875 0.25 +1.625 2 0.25 +1.75 2 0.125 +1.5 1.875 0.5 +1.375 2 0.5 +1.5 2 0.375 +1.5 2 0.625 +1.5 1.875 0.75 +1.375 2 0.75 +1.625 2 0.5 +1.75 1.875 0.5 +1.75 2 0.375 +1.75 1.875 0.75 +1.625 2 0.75 +1.75 2 0.625 +0 2 0.875 +0 1.875 1 +0.125 2 1 +0.25 2 0.875 +0.25 1.875 1 +0.375 2 1 +0.5 2 0.875 +0.5 1.875 1 +0.625 2 1 +0.75 2 0.875 +0.75 1.875 1 +1 1.875 1 +1 2 0.875 +0.875 2 1 +1.125 2 1 +1.25 1.875 1 +1.25 2 0.875 +1.375 2 1 +1.5 1.875 1 +1.5 2 0.875 +1.625 2 1 +1.75 1.875 1 +1.75 2 0.875 +2 1.875 0 +1.875 2 0 +2 2 0.125 +2 1.875 0.25 +1.875 2 0.25 +2 2 0.375 +2 1.875 0.5 +1.875 2 0.5 +2 2 0.625 +2 1.875 0.75 +1.875 2 0.75 +2 2 0.875 +2 1.875 1 +1.875 2 1 + +element vertices: +0 405 661 1557 +235 405 661 1557 +0 405 663 1557 +235 405 663 1557 +107 405 661 1558 +235 405 661 1558 +235 405 662 1558 +107 405 662 1558 +235 406 662 1558 +107 406 662 1558 +107 406 667 1558 +235 406 667 1558 +0 405 661 1559 +237 405 661 1559 +0 405 665 1559 +237 405 665 1559 +107 405 661 1560 +237 405 661 1560 +237 405 664 1560 +107 405 664 1560 +237 410 664 1560 +107 410 664 1560 +107 410 686 1560 +237 410 686 1560 +75 405 662 1561 +107 405 662 1561 +75 406 662 1561 +107 406 662 1561 +75 405 664 1561 +107 405 664 1561 +75 410 664 1561 +107 410 664 1561 +75 406 669 1561 +107 406 669 1561 +75 407 669 1561 +107 407 669 1561 +75 407 674 1561 +107 407 674 1561 +75 410 674 1561 +107 410 674 1561 +75 405 662 1562 +109 405 662 1562 +75 406 662 1562 +109 406 662 1562 +75 405 666 1562 +109 405 666 1562 +75 424 666 1562 +109 424 666 1562 +75 406 671 1562 +109 406 671 1562 +75 418 671 1562 +109 418 671 1562 +75 418 722 1562 +109 418 722 1562 +75 424 722 1562 +109 424 722 1562 +235 405 662 1563 +109 405 662 1563 +235 406 662 1563 +109 406 662 1563 +109 405 663 1563 +235 405 663 1563 +109 406 668 1563 +235 406 668 1563 +0 405 663 1564 +242 405 663 1564 +0 405 665 1564 +242 405 665 1564 +109 405 663 1565 +242 405 663 1565 +242 405 666 1565 +109 405 666 1565 +242 424 666 1565 +109 424 666 1565 +109 424 742 1565 +242 424 742 1565 +75 405 664 1566 +111 405 664 1566 +75 410 664 1566 +111 410 664 1566 +75 405 666 1566 +111 405 666 1566 +75 424 666 1566 +111 424 666 1566 +75 410 689 1566 +111 410 689 1566 +75 426 689 1566 +111 426 689 1566 +75 424 745 1566 +111 424 745 1566 +75 426 745 1566 +111 426 745 1566 +237 405 664 1567 +111 405 664 1567 +237 410 664 1567 +111 410 664 1567 +111 405 665 1567 +237 405 665 1567 +111 410 687 1567 +237 410 687 1567 +111 405 665 1568 +242 405 665 1568 +242 405 666 1568 +111 405 666 1568 +242 424 666 1568 +111 424 666 1568 +111 424 743 1568 +242 424 743 1568 +42 406 667 1569 +235 406 667 1569 +42 406 668 1569 +235 406 668 1569 +42 406 667 1570 +236 406 667 1570 +42 406 670 1570 +236 406 670 1570 +42 408 670 1570 +236 408 670 1570 +42 408 678 1570 +236 408 678 1570 +107 406 667 1571 +236 406 667 1571 +236 406 669 1571 +107 406 669 1571 +236 407 669 1571 +107 407 669 1571 +107 407 672 1571 +236 407 672 1571 +42 406 668 1572 +241 406 668 1572 +42 406 670 1572 +241 406 670 1572 +42 408 670 1572 +241 408 670 1572 +42 408 680 1572 +241 408 680 1572 +109 406 668 1573 +241 406 668 1573 +241 406 671 1573 +109 406 671 1573 +241 418 671 1573 +109 418 671 1573 +109 418 721 1573 +241 418 721 1573 +75 406 669 1574 +108 406 669 1574 +75 407 669 1574 +108 407 669 1574 +75 406 671 1574 +108 406 671 1574 +75 418 671 1574 +108 418 671 1574 +75 407 676 1574 +108 407 676 1574 +75 413 676 1574 +108 413 676 1574 +75 413 701 1574 +108 413 701 1574 +75 418 701 1574 +108 418 701 1574 +236 406 669 1575 +108 406 669 1575 +236 407 669 1575 +108 407 669 1575 +108 406 670 1575 +236 406 670 1575 +108 408 670 1575 +236 408 670 1575 +108 407 673 1575 +236 407 673 1575 +108 409 673 1575 +236 409 673 1575 +236 408 677 1575 +108 408 677 1575 +236 409 677 1575 +108 409 677 1575 +108 406 670 1576 +241 406 670 1576 +108 408 670 1576 +241 408 670 1576 +241 406 671 1576 +108 406 671 1576 +241 418 671 1576 +108 418 671 1576 +241 408 679 1576 +108 408 679 1576 +241 419 679 1576 +108 419 679 1576 +108 418 719 1576 +241 418 719 1576 +108 419 719 1576 +241 419 719 1576 +22 407 672 1577 +236 407 672 1577 +22 407 673 1577 +236 407 673 1577 +22 409 673 1577 +236 409 673 1577 +22 409 682 1577 +236 409 682 1577 +22 407 672 1578 +238 407 672 1578 +22 407 675 1578 +238 407 675 1578 +22 412 675 1578 +238 412 675 1578 +22 412 695 1578 +238 412 695 1578 +107 407 672 1579 +238 407 672 1579 +238 407 674 1579 +107 407 674 1579 +238 410 674 1579 +107 410 674 1579 +107 410 686 1579 +238 410 686 1579 +22 407 673 1580 +239 407 673 1580 +22 409 673 1580 +239 409 673 1580 +22 407 675 1580 +239 407 675 1580 +22 412 675 1580 +239 412 675 1580 +22 409 684 1580 +239 409 684 1580 +22 417 684 1580 +239 417 684 1580 +22 412 697 1580 +239 412 697 1580 +22 417 697 1580 +239 417 697 1580 +108 407 673 1581 +239 407 673 1581 +108 409 673 1581 +239 409 673 1581 +239 407 676 1581 +108 407 676 1581 +239 413 676 1581 +108 413 676 1581 +239 409 683 1581 +108 409 683 1581 +239 414 683 1581 +108 414 683 1581 +108 413 699 1581 +239 413 699 1581 +108 414 699 1581 +239 414 699 1581 +75 407 674 1582 +110 407 674 1582 +75 410 674 1582 +110 410 674 1582 +75 407 676 1582 +110 407 676 1582 +75 413 676 1582 +110 413 676 1582 +75 410 689 1582 +110 410 689 1582 +75 426 689 1582 +110 426 689 1582 +75 413 703 1582 +110 413 703 1582 +75 426 703 1582 +110 426 703 1582 +238 407 674 1583 +110 407 674 1583 +238 410 674 1583 +110 410 674 1583 +110 407 675 1583 +238 407 675 1583 +110 412 675 1583 +238 412 675 1583 +110 410 688 1583 +238 410 688 1583 +110 411 688 1583 +238 411 688 1583 +238 411 690 1583 +110 411 690 1583 +238 412 690 1583 +110 412 690 1583 +110 407 675 1584 +239 407 675 1584 +110 412 675 1584 +239 412 675 1584 +239 407 676 1584 +110 407 676 1584 +239 413 676 1584 +110 413 676 1584 +239 412 696 1584 +110 412 696 1584 +239 415 696 1584 +110 415 696 1584 +110 413 700 1584 +239 413 700 1584 +110 415 700 1584 +239 415 700 1584 +76 408 677 1585 +108 408 677 1585 +76 409 677 1585 +108 409 677 1585 +76 408 679 1585 +108 408 679 1585 +76 419 679 1585 +108 419 679 1585 +76 409 683 1585 +108 409 683 1585 +76 414 683 1585 +108 414 683 1585 +76 414 705 1585 +108 414 705 1585 +76 419 705 1585 +108 419 705 1585 +76 408 677 1586 +113 408 677 1586 +76 409 677 1586 +113 409 677 1586 +76 408 681 1586 +113 408 681 1586 +76 431 681 1586 +113 431 681 1586 +76 409 685 1586 +113 409 685 1586 +76 432 685 1586 +113 432 685 1586 +76 431 768 1586 +113 431 768 1586 +76 432 768 1586 +113 432 768 1586 +236 408 677 1587 +113 408 677 1587 +236 409 677 1587 +113 409 677 1587 +113 408 678 1587 +236 408 678 1587 +113 409 682 1587 +236 409 682 1587 +42 408 678 1588 +247 408 678 1588 +42 408 680 1588 +247 408 680 1588 +113 408 678 1589 +247 408 678 1589 +247 408 681 1589 +113 408 681 1589 +247 431 681 1589 +113 431 681 1589 +113 431 766 1589 +247 431 766 1589 +76 408 679 1590 +114 408 679 1590 +76 419 679 1590 +114 419 679 1590 +76 408 681 1590 +114 408 681 1590 +76 431 681 1590 +114 431 681 1590 +76 419 725 1590 +114 419 725 1590 +76 436 725 1590 +114 436 725 1590 +76 431 770 1590 +114 431 770 1590 +76 436 770 1590 +114 436 770 1590 +241 408 679 1591 +114 408 679 1591 +241 419 679 1591 +114 419 679 1591 +114 408 680 1591 +241 408 680 1591 +114 419 724 1591 +241 419 724 1591 +114 408 680 1592 +247 408 680 1592 +247 408 681 1592 +114 408 681 1592 +247 431 681 1592 +114 431 681 1592 +114 431 767 1592 +247 431 767 1592 +22 409 682 1593 +249 409 682 1593 +22 409 684 1593 +249 409 684 1593 +22 417 684 1593 +249 417 684 1593 +22 417 717 1593 +249 417 717 1593 +113 409 682 1594 +249 409 682 1594 +249 409 685 1594 +113 409 685 1594 +249 432 685 1594 +113 432 685 1594 +113 432 771 1594 +249 432 771 1594 +76 409 683 1595 +115 409 683 1595 +76 414 683 1595 +115 414 683 1595 +76 409 685 1595 +115 409 685 1595 +76 432 685 1595 +115 432 685 1595 +76 414 707 1595 +115 414 707 1595 +76 439 707 1595 +115 439 707 1595 +76 432 774 1595 +115 432 774 1595 +76 439 774 1595 +115 439 774 1595 +239 409 683 1596 +115 409 683 1596 +239 414 683 1596 +115 414 683 1596 +115 409 684 1596 +239 409 684 1596 +115 417 684 1596 +239 417 684 1596 +115 414 704 1596 +239 414 704 1596 +115 416 704 1596 +239 416 704 1596 +239 416 712 1596 +115 416 712 1596 +239 417 712 1596 +115 417 712 1596 +115 409 684 1597 +249 409 684 1597 +115 417 684 1597 +249 417 684 1597 +249 409 685 1597 +115 409 685 1597 +249 432 685 1597 +115 432 685 1597 +249 417 716 1597 +115 417 716 1597 +249 435 716 1597 +115 435 716 1597 +115 432 773 1597 +249 432 773 1597 +115 435 773 1597 +249 435 773 1597 +44 410 686 1598 +237 410 686 1598 +44 410 687 1598 +237 410 687 1598 +44 410 686 1599 +238 410 686 1599 +44 410 688 1599 +238 410 688 1599 +44 411 688 1599 +238 411 688 1599 +44 411 691 1599 +238 411 691 1599 +44 410 687 1600 +245 410 687 1600 +44 410 688 1600 +245 410 688 1600 +44 411 688 1600 +245 411 688 1600 +44 411 693 1600 +245 411 693 1600 +111 410 687 1601 +245 410 687 1601 +245 410 689 1601 +111 410 689 1601 +245 426 689 1601 +111 426 689 1601 +111 426 752 1601 +245 426 752 1601 +110 410 688 1602 +245 410 688 1602 +110 411 688 1602 +245 411 688 1602 +245 410 689 1602 +110 410 689 1602 +245 426 689 1602 +110 426 689 1602 +245 411 692 1602 +110 411 692 1602 +245 427 692 1602 +110 427 692 1602 +110 426 750 1602 +245 426 750 1602 +110 427 750 1602 +245 427 750 1602 +80 411 690 1603 +110 411 690 1603 +80 412 690 1603 +110 412 690 1603 +80 411 692 1603 +110 411 692 1603 +80 427 692 1603 +110 427 692 1603 +80 412 696 1603 +110 412 696 1603 +80 415 696 1603 +110 415 696 1603 +80 415 709 1603 +110 415 709 1603 +80 427 709 1603 +110 427 709 1603 +80 411 690 1604 +132 411 690 1604 +80 412 690 1604 +132 412 690 1604 +80 411 694 1604 +132 411 694 1604 +80 502 694 1604 +132 502 694 1604 +80 412 698 1604 +132 412 698 1604 +80 454 698 1604 +132 454 698 1604 +80 454 857 1604 +132 454 857 1604 +80 502 857 1604 +132 502 857 1604 +238 411 690 1605 +132 411 690 1605 +238 412 690 1605 +132 412 690 1605 +132 411 691 1605 +238 411 691 1605 +132 412 695 1605 +238 412 695 1605 +44 411 691 1606 +276 411 691 1606 +44 411 693 1606 +276 411 693 1606 +132 411 691 1607 +276 411 691 1607 +276 411 694 1607 +132 411 694 1607 +276 502 694 1607 +132 502 694 1607 +132 502 1021 1607 +276 502 1021 1607 +80 411 692 1608 +133 411 692 1608 +80 427 692 1608 +133 427 692 1608 +80 411 694 1608 +133 411 694 1608 +80 502 694 1608 +133 502 694 1608 +80 427 755 1608 +133 427 755 1608 +80 504 755 1608 +133 504 755 1608 +80 502 1024 1608 +133 502 1024 1608 +80 504 1024 1608 +133 504 1024 1608 +245 411 692 1609 +133 411 692 1609 +245 427 692 1609 +133 427 692 1609 +133 411 693 1609 +245 411 693 1609 +133 427 754 1609 +245 427 754 1609 +133 411 693 1610 +276 411 693 1610 +276 411 694 1610 +133 411 694 1610 +276 502 694 1610 +133 502 694 1610 +133 502 1022 1610 +276 502 1022 1610 +22 412 695 1611 +257 412 695 1611 +22 412 697 1611 +257 412 697 1611 +22 417 697 1611 +257 417 697 1611 +22 417 717 1611 +257 417 717 1611 +132 412 695 1612 +257 412 695 1612 +257 412 698 1612 +132 412 698 1612 +257 454 698 1612 +132 454 698 1612 +132 454 854 1612 +257 454 854 1612 +80 412 696 1613 +120 412 696 1613 +80 415 696 1613 +120 415 696 1613 +80 412 698 1613 +120 412 698 1613 +80 454 698 1613 +120 454 698 1613 +80 415 711 1613 +120 415 711 1613 +80 464 711 1613 +120 464 711 1613 +80 454 855 1613 +120 454 855 1613 +80 464 855 1613 +120 464 855 1613 +239 412 696 1614 +120 412 696 1614 +239 415 696 1614 +120 415 696 1614 +120 412 697 1614 +239 412 697 1614 +120 417 697 1614 +239 417 697 1614 +120 415 708 1614 +239 415 708 1614 +120 416 708 1614 +239 416 708 1614 +239 416 712 1614 +120 416 712 1614 +239 417 712 1614 +120 417 712 1614 +120 412 697 1615 +257 412 697 1615 +120 417 697 1615 +257 417 697 1615 +257 412 698 1615 +120 412 698 1615 +257 454 698 1615 +120 454 698 1615 +257 417 718 1615 +120 417 718 1615 +257 451 718 1615 +120 451 718 1615 +120 451 843 1615 +257 451 843 1615 +120 454 843 1615 +257 454 843 1615 +18 413 699 1616 +239 413 699 1616 +18 414 699 1616 +239 414 699 1616 +18 413 700 1616 +239 413 700 1616 +18 415 700 1616 +239 415 700 1616 +18 414 704 1616 +239 414 704 1616 +18 416 704 1616 +239 416 704 1616 +18 415 708 1616 +239 415 708 1616 +18 416 708 1616 +239 416 708 1616 +18 413 699 1617 +240 413 699 1617 +18 414 699 1617 +240 414 699 1617 +18 413 702 1617 +240 413 702 1617 +18 420 702 1617 +240 420 702 1617 +18 414 706 1617 +240 414 706 1617 +18 422 706 1617 +240 422 706 1617 +18 420 727 1617 +240 420 727 1617 +18 422 727 1617 +240 422 727 1617 +108 413 699 1618 +240 413 699 1618 +108 414 699 1618 +240 414 699 1618 +240 413 701 1618 +108 413 701 1618 +240 418 701 1618 +108 418 701 1618 +240 414 705 1618 +108 414 705 1618 +240 419 705 1618 +108 419 705 1618 +108 418 719 1618 +240 418 719 1618 +108 419 719 1618 +240 419 719 1618 +18 413 700 1619 +244 413 700 1619 +18 415 700 1619 +244 415 700 1619 +18 413 702 1619 +244 413 702 1619 +18 420 702 1619 +244 420 702 1619 +18 415 710 1619 +244 415 710 1619 +18 429 710 1619 +244 429 710 1619 +18 420 729 1619 +244 420 729 1619 +18 429 729 1619 +244 429 729 1619 +110 413 700 1620 +244 413 700 1620 +110 415 700 1620 +244 415 700 1620 +244 413 703 1620 +110 413 703 1620 +244 426 703 1620 +110 426 703 1620 +244 415 709 1620 +110 415 709 1620 +244 427 709 1620 +110 427 709 1620 +110 426 750 1620 +244 426 750 1620 +110 427 750 1620 +244 427 750 1620 +75 413 701 1621 +112 413 701 1621 +75 418 701 1621 +112 418 701 1621 +75 413 703 1621 +112 413 703 1621 +75 426 703 1621 +112 426 703 1621 +75 418 722 1621 +112 418 722 1621 +75 424 722 1621 +112 424 722 1621 +75 424 745 1621 +112 424 745 1621 +75 426 745 1621 +112 426 745 1621 +240 413 701 1622 +112 413 701 1622 +240 418 701 1622 +112 418 701 1622 +112 413 702 1622 +240 413 702 1622 +112 420 702 1622 +240 420 702 1622 +112 418 720 1622 +240 418 720 1622 +112 421 720 1622 +240 421 720 1622 +240 420 726 1622 +112 420 726 1622 +240 421 726 1622 +112 421 726 1622 +112 413 702 1623 +244 413 702 1623 +112 420 702 1623 +244 420 702 1623 +244 413 703 1623 +112 413 703 1623 +244 426 703 1623 +112 426 703 1623 +244 420 728 1623 +112 420 728 1623 +244 428 728 1623 +112 428 728 1623 +112 426 751 1623 +244 426 751 1623 +112 428 751 1623 +244 428 751 1623 +18 414 704 1624 +252 414 704 1624 +18 416 704 1624 +252 416 704 1624 +18 414 706 1624 +252 414 706 1624 +18 422 706 1624 +252 422 706 1624 +18 416 714 1624 +252 416 714 1624 +18 442 714 1624 +252 442 714 1624 +18 422 737 1624 +252 422 737 1624 +18 442 737 1624 +252 442 737 1624 +115 414 704 1625 +252 414 704 1625 +115 416 704 1625 +252 416 704 1625 +252 414 707 1625 +115 414 707 1625 +252 439 707 1625 +115 439 707 1625 +252 416 713 1625 +115 416 713 1625 +252 440 713 1625 +115 440 713 1625 +115 439 800 1625 +252 439 800 1625 +115 440 800 1625 +252 440 800 1625 +76 414 705 1626 +117 414 705 1626 +76 419 705 1626 +117 419 705 1626 +76 414 707 1626 +117 414 707 1626 +76 439 707 1626 +117 439 707 1626 +76 419 725 1626 +117 419 725 1626 +76 436 725 1626 +117 436 725 1626 +76 436 791 1626 +117 436 791 1626 +76 439 791 1626 +117 439 791 1626 +240 414 705 1627 +117 414 705 1627 +240 419 705 1627 +117 419 705 1627 +117 414 706 1627 +240 414 706 1627 +117 422 706 1627 +240 422 706 1627 +117 419 723 1627 +240 419 723 1627 +117 423 723 1627 +240 423 723 1627 +240 422 735 1627 +117 422 735 1627 +240 423 735 1627 +117 423 735 1627 +117 414 706 1628 +252 414 706 1628 +117 422 706 1628 +252 422 706 1628 +252 414 707 1628 +117 414 707 1628 +252 439 707 1628 +117 439 707 1628 +252 422 736 1628 +117 422 736 1628 +252 441 736 1628 +117 441 736 1628 +117 439 801 1628 +252 439 801 1628 +117 441 801 1628 +252 441 801 1628 +18 415 708 1629 +260 415 708 1629 +18 416 708 1629 +260 416 708 1629 +18 415 710 1629 +260 415 710 1629 +18 429 710 1629 +260 429 710 1629 +18 416 714 1629 +260 416 714 1629 +18 442 714 1629 +260 442 714 1629 +18 429 761 1629 +260 429 761 1629 +18 442 761 1629 +260 442 761 1629 +120 415 708 1630 +260 415 708 1630 +120 416 708 1630 +260 416 708 1630 +260 415 711 1630 +120 415 711 1630 +260 464 711 1630 +120 464 711 1630 +260 416 715 1630 +120 416 715 1630 +260 463 715 1630 +120 463 715 1630 +120 463 886 1630 +260 463 886 1630 +120 464 886 1630 +260 464 886 1630 +80 415 709 1631 +135 415 709 1631 +80 427 709 1631 +135 427 709 1631 +80 415 711 1631 +135 415 711 1631 +80 464 711 1631 +135 464 711 1631 +80 427 755 1631 +135 427 755 1631 +80 504 755 1631 +135 504 755 1631 +80 464 891 1631 +135 464 891 1631 +80 504 891 1631 +135 504 891 1631 +244 415 709 1632 +135 415 709 1632 +244 427 709 1632 +135 427 709 1632 +135 415 710 1632 +244 415 710 1632 +135 429 710 1632 +244 429 710 1632 +135 427 753 1632 +244 427 753 1632 +135 430 753 1632 +244 430 753 1632 +244 429 759 1632 +135 429 759 1632 +244 430 759 1632 +135 430 759 1632 +135 415 710 1633 +260 415 710 1633 +135 429 710 1633 +260 429 710 1633 +260 415 711 1633 +135 415 711 1633 +260 464 711 1633 +135 464 711 1633 +260 429 760 1633 +135 429 760 1633 +260 466 760 1633 +135 466 760 1633 +135 464 889 1633 +260 464 889 1633 +135 466 889 1633 +260 466 889 1633 +77 416 712 1634 +115 416 712 1634 +77 417 712 1634 +115 417 712 1634 +77 416 713 1634 +115 416 713 1634 +77 440 713 1634 +115 440 713 1634 +77 417 716 1634 +115 417 716 1634 +77 435 716 1634 +115 435 716 1634 +77 435 785 1634 +115 435 785 1634 +77 440 785 1634 +115 440 785 1634 +77 416 712 1635 +120 416 712 1635 +77 417 712 1635 +120 417 712 1635 +77 416 715 1635 +120 416 715 1635 +77 463 715 1635 +120 463 715 1635 +77 417 718 1635 +120 417 718 1635 +77 451 718 1635 +120 451 718 1635 +77 451 844 1635 +120 451 844 1635 +77 463 844 1635 +120 463 844 1635 +77 416 713 1636 +122 416 713 1636 +77 440 713 1636 +122 440 713 1636 +77 416 715 1636 +122 416 715 1636 +77 463 715 1636 +122 463 715 1636 +77 440 805 1636 +122 440 805 1636 +77 455 805 1636 +122 455 805 1636 +77 455 861 1636 +122 455 861 1636 +77 463 861 1636 +122 463 861 1636 +252 416 713 1637 +122 416 713 1637 +252 440 713 1637 +122 440 713 1637 +122 416 714 1637 +252 416 714 1637 +122 442 714 1637 +252 442 714 1637 +122 440 803 1637 +252 440 803 1637 +122 443 803 1637 +252 443 803 1637 +252 442 809 1637 +122 442 809 1637 +252 443 809 1637 +122 443 809 1637 +122 416 714 1638 +260 416 714 1638 +122 442 714 1638 +260 442 714 1638 +260 416 715 1638 +122 416 715 1638 +260 463 715 1638 +122 463 715 1638 +260 442 810 1638 +122 442 810 1638 +260 465 810 1638 +122 465 810 1638 +122 463 887 1638 +260 463 887 1638 +122 465 887 1638 +260 465 887 1638 +77 417 716 1639 +118 417 716 1639 +77 435 716 1639 +118 435 716 1639 +77 417 718 1639 +118 417 718 1639 +77 451 718 1639 +118 451 718 1639 +77 435 787 1639 +118 435 787 1639 +77 449 787 1639 +118 449 787 1639 +77 449 834 1639 +118 449 834 1639 +77 451 834 1639 +118 451 834 1639 +249 417 716 1640 +118 417 716 1640 +249 435 716 1640 +118 435 716 1640 +118 417 717 1640 +249 417 717 1640 +118 435 784 1640 +249 435 784 1640 +118 417 717 1641 +257 417 717 1641 +257 417 718 1641 +118 417 718 1641 +257 451 718 1641 +118 451 718 1641 +118 451 841 1641 +257 451 841 1641 +24 418 719 1642 +240 418 719 1642 +24 419 719 1642 +240 419 719 1642 +24 418 720 1642 +240 418 720 1642 +24 421 720 1642 +240 421 720 1642 +24 419 723 1642 +240 419 723 1642 +24 423 723 1642 +240 423 723 1642 +24 421 731 1642 +240 421 731 1642 +24 423 731 1642 +240 423 731 1642 +24 418 719 1643 +241 418 719 1643 +24 419 719 1643 +241 419 719 1643 +24 418 721 1643 +241 418 721 1643 +24 419 724 1643 +241 419 724 1643 +24 418 720 1644 +243 418 720 1644 +24 421 720 1644 +243 421 720 1644 +24 418 721 1644 +243 418 721 1644 +24 421 733 1644 +243 421 733 1644 +112 418 720 1645 +243 418 720 1645 +112 421 720 1645 +243 421 720 1645 +243 418 722 1645 +112 418 722 1645 +243 424 722 1645 +112 424 722 1645 +243 421 732 1645 +112 421 732 1645 +243 425 732 1645 +112 425 732 1645 +112 424 744 1645 +243 424 744 1645 +112 425 744 1645 +243 425 744 1645 +109 418 721 1646 +243 418 721 1646 +243 418 722 1646 +109 418 722 1646 +243 424 722 1646 +109 424 722 1646 +109 424 742 1646 +243 424 742 1646 +24 419 723 1647 +251 419 723 1647 +24 423 723 1647 +251 423 723 1647 +24 419 724 1647 +251 419 724 1647 +24 423 740 1647 +251 423 740 1647 +117 419 723 1648 +251 419 723 1648 +117 423 723 1648 +251 423 723 1648 +251 419 725 1648 +117 419 725 1648 +251 436 725 1648 +117 436 725 1648 +251 423 739 1648 +117 423 739 1648 +251 438 739 1648 +117 438 739 1648 +117 436 790 1648 +251 436 790 1648 +117 438 790 1648 +251 438 790 1648 +114 419 724 1649 +251 419 724 1649 +251 419 725 1649 +114 419 725 1649 +251 436 725 1649 +114 436 725 1649 +114 436 788 1649 +251 436 788 1649 +90 420 726 1650 +112 420 726 1650 +90 421 726 1650 +112 421 726 1650 +90 420 728 1650 +112 420 728 1650 +90 428 728 1650 +112 428 728 1650 +90 421 732 1650 +112 421 732 1650 +90 425 732 1650 +112 425 732 1650 +90 425 747 1650 +112 425 747 1650 +90 428 747 1650 +112 428 747 1650 +90 420 726 1651 +168 420 726 1651 +90 421 726 1651 +168 421 726 1651 +90 420 730 1651 +168 420 730 1651 +90 553 730 1651 +168 553 730 1651 +90 421 734 1651 +168 421 734 1651 +90 591 734 1651 +168 591 734 1651 +90 553 1200 1651 +168 553 1200 1651 +90 591 1200 1651 +168 591 1200 1651 +240 420 726 1652 +168 420 726 1652 +240 421 726 1652 +168 421 726 1652 +168 420 727 1652 +240 420 727 1652 +168 422 727 1652 +240 422 727 1652 +168 421 731 1652 +240 421 731 1652 +168 423 731 1652 +240 423 731 1652 +240 422 735 1652 +168 422 735 1652 +240 423 735 1652 +168 423 735 1652 +18 420 727 1653 +299 420 727 1653 +18 422 727 1653 +299 422 727 1653 +18 420 729 1653 +299 420 729 1653 +18 429 729 1653 +299 429 729 1653 +18 422 737 1653 +299 422 737 1653 +18 442 737 1653 +299 442 737 1653 +18 429 761 1653 +299 429 761 1653 +18 442 761 1653 +299 442 761 1653 +168 420 727 1654 +299 420 727 1654 +168 422 727 1654 +299 422 727 1654 +299 420 730 1654 +168 420 730 1654 +299 553 730 1654 +168 553 730 1654 +299 422 738 1654 +168 422 738 1654 +299 551 738 1654 +168 551 738 1654 +168 551 1194 1654 +299 551 1194 1654 +168 553 1194 1654 +299 553 1194 1654 +90 420 728 1655 +175 420 728 1655 +90 428 728 1655 +175 428 728 1655 +90 420 730 1655 +175 420 730 1655 +90 553 730 1655 +175 553 730 1655 +90 428 758 1655 +175 428 758 1655 +90 595 758 1655 +175 595 758 1655 +90 553 1202 1655 +175 553 1202 1655 +90 595 1202 1655 +175 595 1202 1655 +244 420 728 1656 +175 420 728 1656 +244 428 728 1656 +175 428 728 1656 +175 420 729 1656 +244 420 729 1656 +175 429 729 1656 +244 429 729 1656 +175 428 756 1656 +244 428 756 1656 +175 430 756 1656 +244 430 756 1656 +244 429 759 1656 +175 429 759 1656 +244 430 759 1656 +175 430 759 1656 +175 420 729 1657 +299 420 729 1657 +175 429 729 1657 +299 429 729 1657 +299 420 730 1657 +175 420 730 1657 +299 553 730 1657 +175 553 730 1657 +299 429 762 1657 +175 429 762 1657 +299 552 762 1657 +175 552 762 1657 +175 552 1197 1657 +299 552 1197 1657 +175 553 1197 1657 +299 553 1197 1657 +24 421 731 1658 +324 421 731 1658 +24 423 731 1658 +324 423 731 1658 +24 421 733 1658 +324 421 733 1658 +24 423 740 1658 +324 423 740 1658 +168 421 731 1659 +324 421 731 1659 +168 423 731 1659 +324 423 731 1659 +324 421 734 1659 +168 421 734 1659 +324 591 734 1659 +168 591 734 1659 +324 423 741 1659 +168 423 741 1659 +324 590 741 1659 +168 590 741 1659 +168 590 1322 1659 +324 590 1322 1659 +168 591 1322 1659 +324 591 1322 1659 +90 421 732 1660 +172 421 732 1660 +90 425 732 1660 +172 425 732 1660 +90 421 734 1660 +172 421 734 1660 +90 591 734 1660 +172 591 734 1660 +90 425 749 1660 +172 425 749 1660 +90 594 749 1660 +172 594 749 1660 +90 591 1325 1660 +172 591 1325 1660 +90 594 1325 1660 +172 594 1325 1660 +243 421 732 1661 +172 421 732 1661 +243 425 732 1661 +172 425 732 1661 +172 421 733 1661 +243 421 733 1661 +172 425 746 1661 +243 425 746 1661 +172 421 733 1662 +324 421 733 1662 +324 421 734 1662 +172 421 734 1662 +324 591 734 1662 +172 591 734 1662 +172 591 1324 1662 +324 591 1324 1662 +88 422 735 1663 +117 422 735 1663 +88 423 735 1663 +117 423 735 1663 +88 422 736 1663 +117 422 736 1663 +88 441 736 1663 +117 441 736 1663 +88 423 739 1663 +117 423 739 1663 +88 438 739 1663 +117 438 739 1663 +88 438 797 1663 +117 438 797 1663 +88 441 797 1663 +117 441 797 1663 +88 422 735 1664 +168 422 735 1664 +88 423 735 1664 +168 423 735 1664 +88 422 738 1664 +168 422 738 1664 +88 551 738 1664 +168 551 738 1664 +88 423 741 1664 +168 423 741 1664 +88 590 741 1664 +168 590 741 1664 +88 551 1196 1664 +168 551 1196 1664 +88 590 1196 1664 +168 590 1196 1664 +88 422 736 1665 +147 422 736 1665 +88 441 736 1665 +147 441 736 1665 +88 422 738 1665 +147 422 738 1665 +88 551 738 1665 +147 551 738 1665 +88 441 808 1665 +147 441 808 1665 +88 544 808 1665 +147 544 808 1665 +88 544 1171 1665 +147 544 1171 1665 +88 551 1171 1665 +147 551 1171 1665 +252 422 736 1666 +147 422 736 1666 +252 441 736 1666 +147 441 736 1666 +147 422 737 1666 +252 422 737 1666 +147 442 737 1666 +252 442 737 1666 +147 441 806 1666 +252 441 806 1666 +147 443 806 1666 +252 443 806 1666 +252 442 809 1666 +147 442 809 1666 +252 443 809 1666 +147 443 809 1666 +147 422 737 1667 +299 422 737 1667 +147 442 737 1667 +299 442 737 1667 +299 422 738 1667 +147 422 738 1667 +299 551 738 1667 +147 551 738 1667 +299 442 811 1667 +147 442 811 1667 +299 550 811 1667 +147 550 811 1667 +147 550 1191 1667 +299 550 1191 1667 +147 551 1191 1667 +299 551 1191 1667 +88 423 739 1668 +167 423 739 1668 +88 438 739 1668 +167 438 739 1668 +88 423 741 1668 +167 423 741 1668 +88 590 741 1668 +167 590 741 1668 +88 438 799 1668 +167 438 799 1668 +88 588 799 1668 +167 588 799 1668 +88 588 1316 1668 +167 588 1316 1668 +88 590 1316 1668 +167 590 1316 1668 +251 423 739 1669 +167 423 739 1669 +251 438 739 1669 +167 438 739 1669 +167 423 740 1669 +251 423 740 1669 +167 438 796 1669 +251 438 796 1669 +167 423 740 1670 +324 423 740 1670 +324 423 741 1670 +167 423 741 1670 +324 590 741 1670 +167 590 741 1670 +167 590 1321 1670 +324 590 1321 1670 +49 424 742 1671 +242 424 742 1671 +49 424 743 1671 +242 424 743 1671 +49 424 742 1672 +243 424 742 1672 +49 424 744 1672 +243 424 744 1672 +49 425 744 1672 +243 425 744 1672 +49 425 746 1672 +243 425 746 1672 +49 424 743 1673 +246 424 743 1673 +49 424 744 1673 +246 424 744 1673 +49 425 744 1673 +246 425 744 1673 +49 425 748 1673 +246 425 748 1673 +111 424 743 1674 +246 424 743 1674 +246 424 745 1674 +111 424 745 1674 +246 426 745 1674 +111 426 745 1674 +111 426 752 1674 +246 426 752 1674 +112 424 744 1675 +246 424 744 1675 +112 425 744 1675 +246 425 744 1675 +246 424 745 1675 +112 424 745 1675 +246 426 745 1675 +112 426 745 1675 +246 425 747 1675 +112 425 747 1675 +246 428 747 1675 +112 428 747 1675 +112 426 751 1675 +246 426 751 1675 +112 428 751 1675 +246 428 751 1675 +49 425 746 1676 +328 425 746 1676 +49 425 748 1676 +328 425 748 1676 +172 425 746 1677 +328 425 746 1677 +328 425 749 1677 +172 425 749 1677 +328 594 749 1677 +172 594 749 1677 +172 594 1332 1677 +328 594 1332 1677 +90 425 747 1678 +173 425 747 1678 +90 428 747 1678 +173 428 747 1678 +90 425 749 1678 +173 425 749 1678 +90 594 749 1678 +173 594 749 1678 +90 428 758 1678 +173 428 758 1678 +90 595 758 1678 +173 595 758 1678 +90 594 1335 1678 +173 594 1335 1678 +90 595 1335 1678 +173 595 1335 1678 +246 425 747 1679 +173 425 747 1679 +246 428 747 1679 +173 428 747 1679 +173 425 748 1679 +246 425 748 1679 +173 428 757 1679 +246 428 757 1679 +173 425 748 1680 +328 425 748 1680 +328 425 749 1680 +173 425 749 1680 +328 594 749 1680 +173 594 749 1680 +173 594 1333 1680 +328 594 1333 1680 +27 426 750 1681 +244 426 750 1681 +27 427 750 1681 +244 427 750 1681 +27 426 751 1681 +244 426 751 1681 +27 428 751 1681 +244 428 751 1681 +27 427 753 1681 +244 427 753 1681 +27 430 753 1681 +244 430 753 1681 +27 428 756 1681 +244 428 756 1681 +27 430 756 1681 +244 430 756 1681 +27 426 750 1682 +245 426 750 1682 +27 427 750 1682 +245 427 750 1682 +27 426 752 1682 +245 426 752 1682 +27 427 754 1682 +245 427 754 1682 +27 426 751 1683 +246 426 751 1683 +27 428 751 1683 +246 428 751 1683 +27 426 752 1683 +246 426 752 1683 +27 428 757 1683 +246 428 757 1683 +27 427 753 1684 +279 427 753 1684 +27 430 753 1684 +279 430 753 1684 +27 427 754 1684 +279 427 754 1684 +27 430 764 1684 +279 430 764 1684 +135 427 753 1685 +279 427 753 1685 +135 430 753 1685 +279 430 753 1685 +279 427 755 1685 +135 427 755 1685 +279 504 755 1685 +135 504 755 1685 +279 430 763 1685 +135 430 763 1685 +279 506 763 1685 +135 506 763 1685 +135 504 1031 1685 +279 504 1031 1685 +135 506 1031 1685 +279 506 1031 1685 +133 427 754 1686 +279 427 754 1686 +279 427 755 1686 +133 427 755 1686 +279 504 755 1686 +133 504 755 1686 +133 504 1029 1686 +279 504 1029 1686 +27 428 756 1687 +331 428 756 1687 +27 430 756 1687 +331 430 756 1687 +27 428 757 1687 +331 428 757 1687 +27 430 764 1687 +331 430 764 1687 +175 428 756 1688 +331 428 756 1688 +175 430 756 1688 +331 430 756 1688 +331 428 758 1688 +175 428 758 1688 +331 595 758 1688 +175 595 758 1688 +331 430 765 1688 +175 430 765 1688 +331 596 765 1688 +175 596 765 1688 +175 595 1338 1688 +331 595 1338 1688 +175 596 1338 1688 +331 596 1338 1688 +173 428 757 1689 +331 428 757 1689 +331 428 758 1689 +173 428 758 1689 +331 595 758 1689 +173 595 758 1689 +173 595 1336 1689 +331 595 1336 1689 +91 429 759 1690 +135 429 759 1690 +91 430 759 1690 +135 430 759 1690 +91 429 760 1690 +135 429 760 1690 +91 466 760 1690 +135 466 760 1690 +91 430 763 1690 +135 430 763 1690 +91 506 763 1690 +135 506 763 1690 +91 466 895 1690 +135 466 895 1690 +91 506 895 1690 +135 506 895 1690 +91 429 759 1691 +175 429 759 1691 +91 430 759 1691 +175 430 759 1691 +91 429 762 1691 +175 429 762 1691 +91 552 762 1691 +175 552 762 1691 +91 430 765 1691 +175 430 765 1691 +91 596 765 1691 +175 596 765 1691 +91 552 1199 1691 +175 552 1199 1691 +91 596 1199 1691 +175 596 1199 1691 +91 429 760 1692 +149 429 760 1692 +91 466 760 1692 +149 466 760 1692 +91 429 762 1692 +149 429 762 1692 +91 552 762 1692 +149 552 762 1692 +91 466 897 1692 +149 466 897 1692 +91 548 897 1692 +149 548 897 1692 +91 548 1185 1692 +149 548 1185 1692 +91 552 1185 1692 +149 552 1185 1692 +260 429 760 1693 +149 429 760 1693 +260 466 760 1693 +149 466 760 1693 +149 429 761 1693 +260 429 761 1693 +149 442 761 1693 +260 442 761 1693 +260 442 810 1693 +149 442 810 1693 +260 465 810 1693 +149 465 810 1693 +149 465 892 1693 +260 465 892 1693 +149 466 892 1693 +260 466 892 1693 +149 429 761 1694 +299 429 761 1694 +149 442 761 1694 +299 442 761 1694 +299 429 762 1694 +149 429 762 1694 +299 552 762 1694 +149 552 762 1694 +299 442 811 1694 +149 442 811 1694 +299 550 811 1694 +149 550 811 1694 +149 550 1192 1694 +299 550 1192 1694 +149 552 1192 1694 +299 552 1192 1694 +91 430 763 1695 +178 430 763 1695 +91 506 763 1695 +178 506 763 1695 +91 430 765 1695 +178 430 765 1695 +91 596 765 1695 +178 596 765 1695 +91 506 1037 1695 +178 506 1037 1695 +91 597 1037 1695 +178 597 1037 1695 +91 596 1341 1695 +178 596 1341 1695 +91 597 1341 1695 +178 597 1341 1695 +279 430 763 1696 +178 430 763 1696 +279 506 763 1696 +178 506 763 1696 +178 430 764 1696 +279 430 764 1696 +178 506 1035 1696 +279 506 1035 1696 +178 430 764 1697 +331 430 764 1697 +331 430 765 1697 +178 430 765 1697 +331 596 765 1697 +178 596 765 1697 +178 596 1339 1697 +331 596 1339 1697 +1 431 766 1698 +247 431 766 1698 +1 431 767 1698 +247 431 767 1698 +1 431 766 1699 +248 431 766 1699 +1 431 769 1699 +248 431 769 1699 +1 433 769 1699 +248 433 769 1699 +1 433 776 1699 +248 433 776 1699 +113 431 766 1700 +248 431 766 1700 +248 431 768 1700 +113 431 768 1700 +248 432 768 1700 +113 432 768 1700 +113 432 771 1700 +248 432 771 1700 +1 431 767 1701 +250 431 767 1701 +1 431 769 1701 +250 431 769 1701 +1 433 769 1701 +250 433 769 1701 +1 433 778 1701 +250 433 778 1701 +114 431 767 1702 +250 431 767 1702 +250 431 770 1702 +114 431 770 1702 +250 436 770 1702 +114 436 770 1702 +114 436 788 1702 +250 436 788 1702 +76 431 768 1703 +116 431 768 1703 +76 432 768 1703 +116 432 768 1703 +76 431 770 1703 +116 431 770 1703 +76 436 770 1703 +116 436 770 1703 +76 432 774 1703 +116 432 774 1703 +76 439 774 1703 +116 439 774 1703 +76 436 791 1703 +116 436 791 1703 +76 439 791 1703 +116 439 791 1703 +248 431 768 1704 +116 431 768 1704 +248 432 768 1704 +116 432 768 1704 +116 431 769 1704 +248 431 769 1704 +116 433 769 1704 +248 433 769 1704 +116 432 772 1704 +248 432 772 1704 +116 434 772 1704 +248 434 772 1704 +248 433 775 1704 +116 433 775 1704 +248 434 775 1704 +116 434 775 1704 +116 431 769 1705 +250 431 769 1705 +116 433 769 1705 +250 433 769 1705 +250 431 770 1705 +116 431 770 1705 +250 436 770 1705 +116 436 770 1705 +250 433 777 1705 +116 433 777 1705 +250 437 777 1705 +116 437 777 1705 +116 436 789 1705 +250 436 789 1705 +116 437 789 1705 +250 437 789 1705 +43 432 771 1706 +248 432 771 1706 +43 432 772 1706 +248 432 772 1706 +43 434 772 1706 +248 434 772 1706 +43 434 780 1706 +248 434 780 1706 +43 432 771 1707 +249 432 771 1707 +43 432 773 1707 +249 432 773 1707 +43 435 773 1707 +249 435 773 1707 +43 435 784 1707 +249 435 784 1707 +43 432 772 1708 +253 432 772 1708 +43 434 772 1708 +253 434 772 1708 +43 432 773 1708 +253 432 773 1708 +43 435 773 1708 +253 435 773 1708 +43 434 782 1708 +253 434 782 1708 +43 446 782 1708 +253 446 782 1708 +43 435 786 1708 +253 435 786 1708 +43 446 786 1708 +253 446 786 1708 +116 432 772 1709 +253 432 772 1709 +116 434 772 1709 +253 434 772 1709 +253 432 774 1709 +116 432 774 1709 +253 439 774 1709 +116 439 774 1709 +253 434 781 1709 +116 434 781 1709 +253 444 781 1709 +116 444 781 1709 +116 439 802 1709 +253 439 802 1709 +116 444 802 1709 +253 444 802 1709 +115 432 773 1710 +253 432 773 1710 +115 435 773 1710 +253 435 773 1710 +253 432 774 1710 +115 432 774 1710 +253 439 774 1710 +115 439 774 1710 +253 435 785 1710 +115 435 785 1710 +253 440 785 1710 +115 440 785 1710 +115 439 800 1710 +253 439 800 1710 +115 440 800 1710 +253 440 800 1710 +78 433 775 1711 +116 433 775 1711 +78 434 775 1711 +116 434 775 1711 +78 433 777 1711 +116 433 777 1711 +78 437 777 1711 +116 437 777 1711 +78 434 781 1711 +116 434 781 1711 +78 444 781 1711 +116 444 781 1711 +78 437 793 1711 +116 437 793 1711 +78 444 793 1711 +116 444 793 1711 +78 433 775 1712 +124 433 775 1712 +78 434 775 1712 +124 434 775 1712 +78 433 779 1712 +124 433 779 1712 +78 482 779 1712 +124 482 779 1712 +78 434 783 1712 +124 434 783 1712 +78 476 783 1712 +124 476 783 1712 +78 476 934 1712 +124 476 934 1712 +78 482 934 1712 +124 482 934 1712 +248 433 775 1713 +124 433 775 1713 +248 434 775 1713 +124 434 775 1713 +124 433 776 1713 +248 433 776 1713 +124 434 780 1713 +248 434 780 1713 +1 433 776 1714 +266 433 776 1714 +1 433 778 1714 +266 433 778 1714 +124 433 776 1715 +266 433 776 1715 +266 433 779 1715 +124 433 779 1715 +266 482 779 1715 +124 482 779 1715 +124 482 954 1715 +266 482 954 1715 +78 433 777 1716 +126 433 777 1716 +78 437 777 1716 +126 437 777 1716 +78 433 779 1716 +126 433 779 1716 +78 482 779 1716 +126 482 779 1716 +78 437 795 1716 +126 437 795 1716 +78 484 795 1716 +126 484 795 1716 +78 482 957 1716 +126 482 957 1716 +78 484 957 1716 +126 484 957 1716 +250 433 777 1717 +126 433 777 1717 +250 437 777 1717 +126 437 777 1717 +126 433 778 1717 +250 433 778 1717 +126 437 792 1717 +250 437 792 1717 +126 433 778 1718 +266 433 778 1718 +266 433 779 1718 +126 433 779 1718 +266 482 779 1718 +126 482 779 1718 +126 482 955 1718 +266 482 955 1718 +43 434 780 1719 +265 434 780 1719 +43 434 782 1719 +265 434 782 1719 +43 446 782 1719 +265 446 782 1719 +43 446 823 1719 +265 446 823 1719 +124 434 780 1720 +265 434 780 1720 +265 434 783 1720 +124 434 783 1720 +265 476 783 1720 +124 476 783 1720 +124 476 933 1720 +265 476 933 1720 +78 434 781 1721 +123 434 781 1721 +78 444 781 1721 +123 444 781 1721 +78 434 783 1721 +123 434 783 1721 +78 476 783 1721 +123 476 783 1721 +78 444 817 1721 +123 444 817 1721 +78 472 817 1721 +123 472 817 1721 +78 472 917 1721 +123 472 917 1721 +78 476 917 1721 +123 476 917 1721 +253 434 781 1722 +123 434 781 1722 +253 444 781 1722 +123 444 781 1722 +123 434 782 1722 +253 434 782 1722 +123 446 782 1722 +253 446 782 1722 +123 444 815 1722 +253 444 815 1722 +123 445 815 1722 +253 445 815 1722 +253 445 818 1722 +123 445 818 1722 +253 446 818 1722 +123 446 818 1722 +123 434 782 1723 +265 434 782 1723 +123 446 782 1723 +265 446 782 1723 +265 434 783 1723 +123 434 783 1723 +265 476 783 1723 +123 476 783 1723 +265 446 824 1723 +123 446 824 1723 +265 477 824 1723 +123 477 824 1723 +123 476 931 1723 +265 476 931 1723 +123 477 931 1723 +265 477 931 1723 +43 435 784 1724 +255 435 784 1724 +43 435 786 1724 +255 435 786 1724 +43 446 786 1724 +255 446 786 1724 +43 446 823 1724 +255 446 823 1724 +118 435 784 1725 +255 435 784 1725 +255 435 787 1725 +118 435 787 1725 +255 449 787 1725 +118 449 787 1725 +118 449 832 1725 +255 449 832 1725 +77 435 785 1726 +119 435 785 1726 +77 440 785 1726 +119 440 785 1726 +77 435 787 1726 +119 435 787 1726 +77 449 787 1726 +119 449 787 1726 +77 440 805 1726 +119 440 805 1726 +77 455 805 1726 +119 455 805 1726 +77 449 836 1726 +119 449 836 1726 +77 455 836 1726 +119 455 836 1726 +253 435 785 1727 +119 435 785 1727 +253 440 785 1727 +119 440 785 1727 +119 435 786 1727 +253 435 786 1727 +119 446 786 1727 +253 446 786 1727 +119 440 804 1727 +253 440 804 1727 +119 445 804 1727 +253 445 804 1727 +253 445 818 1727 +119 445 818 1727 +253 446 818 1727 +119 446 818 1727 +119 435 786 1728 +255 435 786 1728 +119 446 786 1728 +255 446 786 1728 +255 435 787 1728 +119 435 787 1728 +255 449 787 1728 +119 449 787 1728 +255 446 822 1728 +119 446 822 1728 +255 450 822 1728 +119 450 822 1728 +119 449 833 1728 +255 449 833 1728 +119 450 833 1728 +255 450 833 1728 +48 436 788 1729 +250 436 788 1729 +48 436 789 1729 +250 436 789 1729 +48 437 789 1729 +250 437 789 1729 +48 437 792 1729 +250 437 792 1729 +48 436 788 1730 +251 436 788 1730 +48 436 790 1730 +251 436 790 1730 +48 438 790 1730 +251 438 790 1730 +48 438 796 1730 +251 438 796 1730 +48 436 789 1731 +254 436 789 1731 +48 437 789 1731 +254 437 789 1731 +48 436 790 1731 +254 436 790 1731 +48 438 790 1731 +254 438 790 1731 +48 437 794 1731 +254 437 794 1731 +48 447 794 1731 +254 447 794 1731 +48 438 798 1731 +254 438 798 1731 +48 447 798 1731 +254 447 798 1731 +116 436 789 1732 +254 436 789 1732 +116 437 789 1732 +254 437 789 1732 +254 436 791 1732 +116 436 791 1732 +254 439 791 1732 +116 439 791 1732 +254 437 793 1732 +116 437 793 1732 +254 444 793 1732 +116 444 793 1732 +116 439 802 1732 +254 439 802 1732 +116 444 802 1732 +254 444 802 1732 +117 436 790 1733 +254 436 790 1733 +117 438 790 1733 +254 438 790 1733 +254 436 791 1733 +117 436 791 1733 +254 439 791 1733 +117 439 791 1733 +254 438 797 1733 +117 438 797 1733 +254 441 797 1733 +117 441 797 1733 +117 439 801 1733 +254 439 801 1733 +117 441 801 1733 +254 441 801 1733 +48 437 792 1734 +269 437 792 1734 +48 437 794 1734 +269 437 794 1734 +48 447 794 1734 +269 447 794 1734 +48 447 827 1734 +269 447 827 1734 +126 437 792 1735 +269 437 792 1735 +269 437 795 1735 +126 437 795 1735 +269 484 795 1735 +126 484 795 1735 +126 484 964 1735 +269 484 964 1735 +78 437 793 1736 +125 437 793 1736 +78 444 793 1736 +125 444 793 1736 +78 437 795 1736 +125 437 795 1736 +78 484 795 1736 +125 484 795 1736 +78 444 817 1736 +125 444 817 1736 +78 472 817 1736 +125 472 817 1736 +78 472 919 1736 +125 472 919 1736 +78 484 919 1736 +125 484 919 1736 +254 437 793 1737 +125 437 793 1737 +254 444 793 1737 +125 444 793 1737 +125 437 794 1737 +254 437 794 1737 +125 447 794 1737 +254 447 794 1737 +125 444 816 1737 +254 444 816 1737 +125 448 816 1737 +254 448 816 1737 +254 447 825 1737 +125 447 825 1737 +254 448 825 1737 +125 448 825 1737 +125 437 794 1738 +269 437 794 1738 +125 447 794 1738 +269 447 794 1738 +269 437 795 1738 +125 437 795 1738 +269 484 795 1738 +125 484 795 1738 +269 447 826 1738 +125 447 826 1738 +269 485 826 1738 +125 485 826 1738 +125 484 962 1738 +269 484 962 1738 +125 485 962 1738 +269 485 962 1738 +48 438 796 1739 +321 438 796 1739 +48 438 798 1739 +321 438 798 1739 +48 447 798 1739 +321 447 798 1739 +48 447 827 1739 +321 447 827 1739 +167 438 796 1740 +321 438 796 1740 +321 438 799 1740 +167 438 799 1740 +321 588 799 1740 +167 588 799 1740 +167 588 1315 1740 +321 588 1315 1740 +88 438 797 1741 +165 438 797 1741 +88 441 797 1741 +165 441 797 1741 +88 438 799 1741 +165 438 799 1741 +88 588 799 1741 +165 588 799 1741 +88 441 808 1741 +165 441 808 1741 +88 544 808 1741 +165 544 808 1741 +88 544 1173 1741 +165 544 1173 1741 +88 588 1173 1741 +165 588 1173 1741 +254 438 797 1742 +165 438 797 1742 +254 441 797 1742 +165 441 797 1742 +165 438 798 1742 +254 438 798 1742 +165 447 798 1742 +254 447 798 1742 +165 441 807 1742 +254 441 807 1742 +165 448 807 1742 +254 448 807 1742 +254 447 825 1742 +165 447 825 1742 +254 448 825 1742 +165 448 825 1742 +165 438 798 1743 +321 438 798 1743 +165 447 798 1743 +321 447 798 1743 +321 438 799 1743 +165 438 799 1743 +321 588 799 1743 +165 588 799 1743 +321 447 828 1743 +165 447 828 1743 +321 589 828 1743 +165 589 828 1743 +165 588 1313 1743 +321 588 1313 1743 +165 589 1313 1743 +321 589 1313 1743 +23 439 800 1744 +252 439 800 1744 +23 440 800 1744 +252 440 800 1744 +23 439 801 1744 +252 439 801 1744 +23 441 801 1744 +252 441 801 1744 +23 440 803 1744 +252 440 803 1744 +23 443 803 1744 +252 443 803 1744 +23 441 806 1744 +252 441 806 1744 +23 443 806 1744 +252 443 806 1744 +23 439 800 1745 +253 439 800 1745 +23 440 800 1745 +253 440 800 1745 +23 439 802 1745 +253 439 802 1745 +23 444 802 1745 +253 444 802 1745 +23 440 804 1745 +253 440 804 1745 +23 445 804 1745 +253 445 804 1745 +23 444 815 1745 +253 444 815 1745 +23 445 815 1745 +253 445 815 1745 +23 439 801 1746 +254 439 801 1746 +23 441 801 1746 +254 441 801 1746 +23 439 802 1746 +254 439 802 1746 +23 444 802 1746 +254 444 802 1746 +23 441 807 1746 +254 441 807 1746 +23 448 807 1746 +254 448 807 1746 +23 444 816 1746 +254 444 816 1746 +23 448 816 1746 +254 448 816 1746 +23 440 803 1747 +259 440 803 1747 +23 443 803 1747 +259 443 803 1747 +23 440 804 1747 +259 440 804 1747 +23 445 804 1747 +259 445 804 1747 +23 443 813 1747 +259 443 813 1747 +23 462 813 1747 +259 462 813 1747 +23 445 820 1747 +259 445 820 1747 +23 462 820 1747 +259 462 820 1747 +122 440 803 1748 +259 440 803 1748 +122 443 803 1748 +259 443 803 1748 +259 440 805 1748 +122 440 805 1748 +259 455 805 1748 +122 455 805 1748 +259 443 812 1748 +122 443 812 1748 +259 460 812 1748 +122 460 812 1748 +122 455 860 1748 +259 455 860 1748 +122 460 860 1748 +259 460 860 1748 +119 440 804 1749 +259 440 804 1749 +119 445 804 1749 +259 445 804 1749 +259 440 805 1749 +119 440 805 1749 +259 455 805 1749 +119 455 805 1749 +259 445 819 1749 +119 445 819 1749 +259 456 819 1749 +119 456 819 1749 +119 455 858 1749 +259 455 858 1749 +119 456 858 1749 +259 456 858 1749 +23 441 806 1750 +296 441 806 1750 +23 443 806 1750 +296 443 806 1750 +23 441 807 1750 +296 441 807 1750 +23 448 807 1750 +296 448 807 1750 +23 443 813 1750 +296 443 813 1750 +23 462 813 1750 +296 462 813 1750 +23 448 830 1750 +296 448 830 1750 +23 462 830 1750 +296 462 830 1750 +147 441 806 1751 +296 441 806 1751 +147 443 806 1751 +296 443 806 1751 +296 441 808 1751 +147 441 808 1751 +296 544 808 1751 +147 544 808 1751 +296 443 814 1751 +147 443 814 1751 +296 542 814 1751 +147 542 814 1751 +147 542 1165 1751 +296 542 1165 1751 +147 544 1165 1751 +296 544 1165 1751 +165 441 807 1752 +296 441 807 1752 +165 448 807 1752 +296 448 807 1752 +296 441 808 1752 +165 441 808 1752 +296 544 808 1752 +165 544 808 1752 +296 448 831 1752 +165 448 831 1752 +296 545 831 1752 +165 545 831 1752 +165 544 1170 1752 +296 544 1170 1752 +165 545 1170 1752 +296 545 1170 1752 +83 442 809 1753 +122 442 809 1753 +83 443 809 1753 +122 443 809 1753 +83 442 810 1753 +122 442 810 1753 +83 465 810 1753 +122 465 810 1753 +83 443 812 1753 +122 443 812 1753 +83 460 812 1753 +122 460 812 1753 +83 460 877 1753 +122 460 877 1753 +83 465 877 1753 +122 465 877 1753 +83 442 809 1754 +147 442 809 1754 +83 443 809 1754 +147 443 809 1754 +83 442 811 1754 +147 442 811 1754 +83 550 811 1754 +147 550 811 1754 +83 443 814 1754 +147 443 814 1754 +83 542 814 1754 +147 542 814 1754 +83 542 1166 1754 +147 542 1166 1754 +83 550 1166 1754 +147 550 1166 1754 +83 442 810 1755 +149 442 810 1755 +83 465 810 1755 +149 465 810 1755 +83 442 811 1755 +149 442 811 1755 +83 550 811 1755 +149 550 811 1755 +83 465 894 1755 +149 465 894 1755 +83 546 894 1755 +149 546 894 1755 +83 546 1180 1755 +149 546 1180 1755 +83 550 1180 1755 +149 550 1180 1755 +83 443 812 1756 +145 443 812 1756 +83 460 812 1756 +145 460 812 1756 +83 443 814 1756 +145 443 814 1756 +83 542 814 1756 +145 542 814 1756 +83 460 879 1756 +145 460 879 1756 +83 538 879 1756 +145 538 879 1756 +83 538 1149 1756 +145 538 1149 1756 +83 542 1149 1756 +145 542 1149 1756 +259 443 812 1757 +145 443 812 1757 +259 460 812 1757 +145 460 812 1757 +145 443 813 1757 +259 443 813 1757 +145 462 813 1757 +259 462 813 1757 +145 460 876 1757 +259 460 876 1757 +145 461 876 1757 +259 461 876 1757 +259 461 880 1757 +145 461 880 1757 +259 462 880 1757 +145 462 880 1757 +145 443 813 1758 +296 443 813 1758 +145 462 813 1758 +296 462 813 1758 +296 443 814 1758 +145 443 814 1758 +296 542 814 1758 +145 542 814 1758 +296 462 885 1758 +145 462 885 1758 +296 543 885 1758 +145 543 885 1758 +145 542 1163 1758 +296 542 1163 1758 +145 543 1163 1758 +296 543 1163 1758 +23 444 815 1759 +263 444 815 1759 +23 445 815 1759 +263 445 815 1759 +23 444 816 1759 +263 444 816 1759 +23 448 816 1759 +263 448 816 1759 +23 445 820 1759 +263 445 820 1759 +23 462 820 1759 +263 462 820 1759 +23 448 830 1759 +263 448 830 1759 +23 462 830 1759 +263 462 830 1759 +123 444 815 1760 +263 444 815 1760 +123 445 815 1760 +263 445 815 1760 +263 444 817 1760 +123 444 817 1760 +263 472 817 1760 +123 472 817 1760 +263 445 821 1760 +123 445 821 1760 +263 473 821 1760 +123 473 821 1760 +123 472 915 1760 +263 472 915 1760 +123 473 915 1760 +263 473 915 1760 +125 444 816 1761 +263 444 816 1761 +125 448 816 1761 +263 448 816 1761 +263 444 817 1761 +125 444 817 1761 +263 472 817 1761 +125 472 817 1761 +263 448 829 1761 +125 448 829 1761 +263 474 829 1761 +125 474 829 1761 +125 472 916 1761 +263 472 916 1761 +125 474 916 1761 +263 474 916 1761 +79 445 818 1762 +119 445 818 1762 +79 446 818 1762 +119 446 818 1762 +79 445 819 1762 +119 445 819 1762 +79 456 819 1762 +119 456 819 1762 +79 446 822 1762 +119 446 822 1762 +79 450 822 1762 +119 450 822 1762 +79 450 838 1762 +119 450 838 1762 +79 456 838 1762 +119 456 838 1762 +79 445 818 1763 +123 445 818 1763 +79 446 818 1763 +123 446 818 1763 +79 445 821 1763 +123 445 821 1763 +79 473 821 1763 +123 473 821 1763 +79 446 824 1763 +123 446 824 1763 +79 477 824 1763 +123 477 824 1763 +79 473 921 1763 +123 473 921 1763 +79 477 921 1763 +123 477 921 1763 +79 445 819 1764 +129 445 819 1764 +79 456 819 1764 +129 456 819 1764 +79 445 821 1764 +129 445 821 1764 +79 473 821 1764 +129 473 821 1764 +79 456 864 1764 +129 456 864 1764 +79 492 864 1764 +129 492 864 1764 +79 473 923 1764 +129 473 923 1764 +79 492 923 1764 +129 492 923 1764 +259 445 819 1765 +129 445 819 1765 +259 456 819 1765 +129 456 819 1765 +129 445 820 1765 +259 445 820 1765 +129 462 820 1765 +259 462 820 1765 +129 456 863 1765 +259 456 863 1765 +129 461 863 1765 +259 461 863 1765 +259 461 880 1765 +129 461 880 1765 +259 462 880 1765 +129 462 880 1765 +129 445 820 1766 +263 445 820 1766 +129 462 820 1766 +263 462 820 1766 +263 445 821 1766 +129 445 821 1766 +263 473 821 1766 +129 473 821 1766 +263 462 884 1766 +129 462 884 1766 +263 475 884 1766 +129 475 884 1766 +129 473 920 1766 +263 473 920 1766 +129 475 920 1766 +263 475 920 1766 +79 446 822 1767 +128 446 822 1767 +79 450 822 1767 +128 450 822 1767 +79 446 824 1767 +128 446 824 1767 +79 477 824 1767 +128 477 824 1767 +79 450 840 1767 +128 450 840 1767 +79 489 840 1767 +128 489 840 1767 +79 477 937 1767 +128 477 937 1767 +79 489 937 1767 +128 489 937 1767 +255 446 822 1768 +128 446 822 1768 +255 450 822 1768 +128 450 822 1768 +128 446 823 1768 +255 446 823 1768 +128 450 837 1768 +255 450 837 1768 +128 446 823 1769 +265 446 823 1769 +265 446 824 1769 +128 446 824 1769 +265 477 824 1769 +128 477 824 1769 +128 477 936 1769 +265 477 936 1769 +89 447 825 1770 +125 447 825 1770 +89 448 825 1770 +125 448 825 1770 +89 447 826 1770 +125 447 826 1770 +89 485 826 1770 +125 485 826 1770 +89 448 829 1770 +125 448 829 1770 +89 474 829 1770 +125 474 829 1770 +89 474 925 1770 +125 474 925 1770 +89 485 925 1770 +125 485 925 1770 +89 447 825 1771 +165 447 825 1771 +89 448 825 1771 +165 448 825 1771 +89 447 828 1771 +165 447 828 1771 +89 589 828 1771 +165 589 828 1771 +89 448 831 1771 +165 448 831 1771 +89 545 831 1771 +165 545 831 1771 +89 545 1176 1771 +165 545 1176 1771 +89 589 1176 1771 +165 589 1176 1771 +89 447 826 1772 +170 447 826 1772 +89 485 826 1772 +170 485 826 1772 +89 447 828 1772 +170 447 828 1772 +89 589 828 1772 +170 589 828 1772 +89 485 967 1772 +170 485 967 1772 +89 592 967 1772 +170 592 967 1772 +89 589 1319 1772 +170 589 1319 1772 +89 592 1319 1772 +170 592 1319 1772 +269 447 826 1773 +170 447 826 1773 +269 485 826 1773 +170 485 826 1773 +170 447 827 1773 +269 447 827 1773 +170 485 966 1773 +269 485 966 1773 +170 447 827 1774 +321 447 827 1774 +321 447 828 1774 +170 447 828 1774 +321 589 828 1774 +170 589 828 1774 +170 589 1318 1774 +321 589 1318 1774 +89 448 829 1775 +151 448 829 1775 +89 474 829 1775 +151 474 829 1775 +89 448 831 1775 +151 448 831 1775 +89 545 831 1775 +151 545 831 1775 +89 474 927 1775 +151 474 927 1775 +89 560 927 1775 +151 560 927 1775 +89 545 1174 1775 +151 545 1174 1775 +89 560 1174 1775 +151 560 1174 1775 +263 448 829 1776 +151 448 829 1776 +263 474 829 1776 +151 474 829 1776 +151 448 830 1776 +263 448 830 1776 +151 462 830 1776 +263 462 830 1776 +263 462 884 1776 +151 462 884 1776 +263 475 884 1776 +151 475 884 1776 +151 474 924 1776 +263 474 924 1776 +151 475 924 1776 +263 475 924 1776 +151 448 830 1777 +296 448 830 1777 +151 462 830 1777 +296 462 830 1777 +296 448 831 1777 +151 448 831 1777 +296 545 831 1777 +151 545 831 1777 +296 462 885 1777 +151 462 885 1777 +296 543 885 1777 +151 543 885 1777 +151 543 1168 1777 +296 543 1168 1777 +151 545 1168 1777 +296 545 1168 1777 +4 449 832 1778 +255 449 832 1778 +4 449 833 1778 +255 449 833 1778 +4 450 833 1778 +255 450 833 1778 +4 450 837 1778 +255 450 837 1778 +4 449 832 1779 +256 449 832 1779 +4 449 835 1779 +256 449 835 1779 +4 452 835 1779 +256 452 835 1779 +4 452 846 1779 +256 452 846 1779 +118 449 832 1780 +256 449 832 1780 +256 449 834 1780 +118 449 834 1780 +256 451 834 1780 +118 451 834 1780 +118 451 841 1780 +256 451 841 1780 +4 449 833 1781 +258 449 833 1781 +4 450 833 1781 +258 450 833 1781 +4 449 835 1781 +258 449 835 1781 +4 452 835 1781 +258 452 835 1781 +4 450 839 1781 +258 450 839 1781 +4 458 839 1781 +258 458 839 1781 +4 452 848 1781 +258 452 848 1781 +4 458 848 1781 +258 458 848 1781 +119 449 833 1782 +258 449 833 1782 +119 450 833 1782 +258 450 833 1782 +258 449 836 1782 +119 449 836 1782 +258 455 836 1782 +119 455 836 1782 +258 450 838 1782 +119 450 838 1782 +258 456 838 1782 +119 456 838 1782 +119 455 858 1782 +258 455 858 1782 +119 456 858 1782 +258 456 858 1782 +77 449 834 1783 +121 449 834 1783 +77 451 834 1783 +121 451 834 1783 +77 449 836 1783 +121 449 836 1783 +77 455 836 1783 +121 455 836 1783 +77 451 844 1783 +121 451 844 1783 +77 463 844 1783 +121 463 844 1783 +77 455 861 1783 +121 455 861 1783 +77 463 861 1783 +121 463 861 1783 +256 449 834 1784 +121 449 834 1784 +256 451 834 1784 +121 451 834 1784 +121 449 835 1784 +256 449 835 1784 +121 452 835 1784 +256 452 835 1784 +121 451 842 1784 +256 451 842 1784 +121 453 842 1784 +256 453 842 1784 +256 452 845 1784 +121 452 845 1784 +256 453 845 1784 +121 453 845 1784 +121 449 835 1785 +258 449 835 1785 +121 452 835 1785 +258 452 835 1785 +258 449 836 1785 +121 449 836 1785 +258 455 836 1785 +121 455 836 1785 +258 452 847 1785 +121 452 847 1785 +258 457 847 1785 +121 457 847 1785 +121 455 859 1785 +258 455 859 1785 +121 457 859 1785 +258 457 859 1785 +4 450 837 1786 +271 450 837 1786 +4 450 839 1786 +271 450 839 1786 +4 458 839 1786 +271 458 839 1786 +4 458 871 1786 +271 458 871 1786 +128 450 837 1787 +271 450 837 1787 +271 450 840 1787 +128 450 840 1787 +271 489 840 1787 +128 489 840 1787 +128 489 978 1787 +271 489 978 1787 +79 450 838 1788 +130 450 838 1788 +79 456 838 1788 +130 456 838 1788 +79 450 840 1788 +130 450 840 1788 +79 489 840 1788 +130 489 840 1788 +79 456 864 1788 +130 456 864 1788 +79 492 864 1788 +130 492 864 1788 +79 489 981 1788 +130 489 981 1788 +79 492 981 1788 +130 492 981 1788 +258 450 838 1789 +130 450 838 1789 +258 456 838 1789 +130 456 838 1789 +130 450 839 1789 +258 450 839 1789 +130 458 839 1789 +258 458 839 1789 +130 456 862 1789 +258 456 862 1789 +130 459 862 1789 +258 459 862 1789 +258 458 869 1789 +130 458 869 1789 +258 459 869 1789 +130 459 869 1789 +130 450 839 1790 +271 450 839 1790 +130 458 839 1790 +271 458 839 1790 +271 450 840 1790 +130 450 840 1790 +271 489 840 1790 +130 489 840 1790 +271 458 870 1790 +130 458 870 1790 +271 490 870 1790 +130 490 870 1790 +130 489 979 1790 +271 489 979 1790 +130 490 979 1790 +271 490 979 1790 +45 451 841 1791 +256 451 841 1791 +45 451 842 1791 +256 451 842 1791 +45 453 842 1791 +256 453 842 1791 +45 453 850 1791 +256 453 850 1791 +45 451 841 1792 +257 451 841 1792 +45 451 843 1792 +257 451 843 1792 +45 454 843 1792 +257 454 843 1792 +45 454 854 1792 +257 454 854 1792 +45 451 842 1793 +261 451 842 1793 +45 453 842 1793 +261 453 842 1793 +45 451 843 1793 +261 451 843 1793 +45 454 843 1793 +261 454 843 1793 +45 453 852 1793 +261 453 852 1793 +45 469 852 1793 +261 469 852 1793 +45 454 856 1793 +261 454 856 1793 +45 469 856 1793 +261 469 856 1793 +121 451 842 1794 +261 451 842 1794 +121 453 842 1794 +261 453 842 1794 +261 451 844 1794 +121 451 844 1794 +261 463 844 1794 +121 463 844 1794 +261 453 851 1794 +121 453 851 1794 +261 467 851 1794 +121 467 851 1794 +121 463 888 1794 +261 463 888 1794 +121 467 888 1794 +261 467 888 1794 +120 451 843 1795 +261 451 843 1795 +120 454 843 1795 +261 454 843 1795 +261 451 844 1795 +120 451 844 1795 +261 463 844 1795 +120 463 844 1795 +261 454 855 1795 +120 454 855 1795 +261 464 855 1795 +120 464 855 1795 +120 463 886 1795 +261 463 886 1795 +120 464 886 1795 +261 464 886 1795 +82 452 845 1796 +121 452 845 1796 +82 453 845 1796 +121 453 845 1796 +82 452 847 1796 +121 452 847 1796 +82 457 847 1796 +121 457 847 1796 +82 453 851 1796 +121 453 851 1796 +82 467 851 1796 +121 467 851 1796 +82 457 866 1796 +121 457 866 1796 +82 467 866 1796 +121 467 866 1796 +82 452 845 1797 +141 452 845 1797 +82 453 845 1797 +141 453 845 1797 +82 452 849 1797 +141 452 849 1797 +82 526 849 1797 +141 526 849 1797 +82 453 853 1797 +141 453 853 1797 +82 514 853 1797 +141 514 853 1797 +82 514 1066 1797 +141 514 1066 1797 +82 526 1066 1797 +141 526 1066 1797 +256 452 845 1798 +141 452 845 1798 +256 453 845 1798 +141 453 845 1798 +141 452 846 1798 +256 452 846 1798 +141 453 850 1798 +256 453 850 1798 +4 452 846 1799 +289 452 846 1799 +4 452 848 1799 +289 452 848 1799 +4 458 848 1799 +289 458 848 1799 +4 458 871 1799 +289 458 871 1799 +141 452 846 1800 +289 452 846 1800 +289 452 849 1800 +141 452 849 1800 +289 526 849 1800 +141 526 849 1800 +141 526 1107 1800 +289 526 1107 1800 +82 452 847 1801 +143 452 847 1801 +82 457 847 1801 +143 457 847 1801 +82 452 849 1801 +143 452 849 1801 +82 526 849 1801 +143 526 849 1801 +82 457 868 1801 +143 457 868 1801 +82 529 868 1801 +143 529 868 1801 +82 526 1110 1801 +143 526 1110 1801 +82 529 1110 1801 +143 529 1110 1801 +258 452 847 1802 +143 452 847 1802 +258 457 847 1802 +143 457 847 1802 +143 452 848 1802 +258 452 848 1802 +143 458 848 1802 +258 458 848 1802 +143 457 865 1802 +258 457 865 1802 +143 459 865 1802 +258 459 865 1802 +258 458 869 1802 +143 458 869 1802 +258 459 869 1802 +143 459 869 1802 +143 452 848 1803 +289 452 848 1803 +143 458 848 1803 +289 458 848 1803 +289 452 849 1803 +143 452 849 1803 +289 526 849 1803 +143 526 849 1803 +289 458 872 1803 +143 458 872 1803 +289 527 872 1803 +143 527 872 1803 +143 526 1108 1803 +289 526 1108 1803 +143 527 1108 1803 +289 527 1108 1803 +45 453 850 1804 +283 453 850 1804 +45 453 852 1804 +283 453 852 1804 +45 469 852 1804 +283 469 852 1804 +45 469 906 1804 +283 469 906 1804 +141 453 850 1805 +283 453 850 1805 +283 453 853 1805 +141 453 853 1805 +283 514 853 1805 +141 514 853 1805 +141 514 1065 1805 +283 514 1065 1805 +82 453 851 1806 +136 453 851 1806 +82 467 851 1806 +136 467 851 1806 +82 453 853 1806 +136 453 853 1806 +82 514 853 1806 +136 514 853 1806 +82 467 900 1806 +136 467 900 1806 +82 510 900 1806 +136 510 900 1806 +82 510 1050 1806 +136 510 1050 1806 +82 514 1050 1806 +136 514 1050 1806 +261 453 851 1807 +136 453 851 1807 +261 467 851 1807 +136 467 851 1807 +136 453 852 1807 +261 453 852 1807 +136 469 852 1807 +261 469 852 1807 +136 467 898 1807 +261 467 898 1807 +136 468 898 1807 +261 468 898 1807 +261 468 901 1807 +136 468 901 1807 +261 469 901 1807 +136 469 901 1807 +136 453 852 1808 +283 453 852 1808 +136 469 852 1808 +283 469 852 1808 +283 453 853 1808 +136 453 853 1808 +283 514 853 1808 +136 514 853 1808 +283 469 907 1808 +136 469 907 1808 +283 513 907 1808 +136 513 907 1808 +136 513 1060 1808 +283 513 1060 1808 +136 514 1060 1808 +283 514 1060 1808 +45 454 854 1809 +277 454 854 1809 +45 454 856 1809 +277 454 856 1809 +45 469 856 1809 +277 469 856 1809 +45 469 906 1809 +277 469 906 1809 +132 454 854 1810 +277 454 854 1810 +277 454 857 1810 +132 454 857 1810 +277 502 857 1810 +132 502 857 1810 +132 502 1021 1810 +277 502 1021 1810 +80 454 855 1811 +134 454 855 1811 +80 464 855 1811 +134 464 855 1811 +80 454 857 1811 +134 454 857 1811 +80 502 857 1811 +134 502 857 1811 +80 464 891 1811 +134 464 891 1811 +80 504 891 1811 +134 504 891 1811 +80 502 1024 1811 +134 502 1024 1811 +80 504 1024 1811 +134 504 1024 1811 +261 454 855 1812 +134 454 855 1812 +261 464 855 1812 +134 464 855 1812 +134 454 856 1812 +261 454 856 1812 +134 469 856 1812 +261 469 856 1812 +134 464 890 1812 +261 464 890 1812 +134 468 890 1812 +261 468 890 1812 +261 468 901 1812 +134 468 901 1812 +261 469 901 1812 +134 469 901 1812 +134 454 856 1813 +277 454 856 1813 +134 469 856 1813 +277 469 856 1813 +277 454 857 1813 +134 454 857 1813 +277 502 857 1813 +134 502 857 1813 +277 469 905 1813 +134 469 905 1813 +277 503 905 1813 +134 503 905 1813 +134 502 1023 1813 +277 502 1023 1813 +134 503 1023 1813 +277 503 1023 1813 +46 455 858 1814 +258 455 858 1814 +46 456 858 1814 +258 456 858 1814 +46 455 859 1814 +258 455 859 1814 +46 457 859 1814 +258 457 859 1814 +46 456 862 1814 +258 456 862 1814 +46 459 862 1814 +258 459 862 1814 +46 457 865 1814 +258 457 865 1814 +46 459 865 1814 +258 459 865 1814 +46 455 858 1815 +259 455 858 1815 +46 456 858 1815 +259 456 858 1815 +46 455 860 1815 +259 455 860 1815 +46 460 860 1815 +259 460 860 1815 +46 456 863 1815 +259 456 863 1815 +46 461 863 1815 +259 461 863 1815 +46 460 876 1815 +259 460 876 1815 +46 461 876 1815 +259 461 876 1815 +46 455 859 1816 +262 455 859 1816 +46 457 859 1816 +262 457 859 1816 +46 455 860 1816 +262 455 860 1816 +46 460 860 1816 +262 460 860 1816 +46 457 867 1816 +262 457 867 1816 +46 470 867 1816 +262 470 867 1816 +46 460 878 1816 +262 460 878 1816 +46 470 878 1816 +262 470 878 1816 +121 455 859 1817 +262 455 859 1817 +121 457 859 1817 +262 457 859 1817 +262 455 861 1817 +121 455 861 1817 +262 463 861 1817 +121 463 861 1817 +262 457 866 1817 +121 457 866 1817 +262 467 866 1817 +121 467 866 1817 +121 463 888 1817 +262 463 888 1817 +121 467 888 1817 +262 467 888 1817 +122 455 860 1818 +262 455 860 1818 +122 460 860 1818 +262 460 860 1818 +262 455 861 1818 +122 455 861 1818 +262 463 861 1818 +122 463 861 1818 +262 460 877 1818 +122 460 877 1818 +262 465 877 1818 +122 465 877 1818 +122 463 887 1818 +262 463 887 1818 +122 465 887 1818 +262 465 887 1818 +46 456 862 1819 +274 456 862 1819 +46 459 862 1819 +274 459 862 1819 +46 456 863 1819 +274 456 863 1819 +46 461 863 1819 +274 461 863 1819 +46 459 874 1819 +274 459 874 1819 +46 499 874 1819 +274 499 874 1819 +46 461 882 1819 +274 461 882 1819 +46 499 882 1819 +274 499 882 1819 +130 456 862 1820 +274 456 862 1820 +130 459 862 1820 +274 459 862 1820 +274 456 864 1820 +130 456 864 1820 +274 492 864 1820 +130 492 864 1820 +274 459 873 1820 +130 459 873 1820 +274 497 873 1820 +130 497 873 1820 +130 492 992 1820 +274 492 992 1820 +130 497 992 1820 +274 497 992 1820 +129 456 863 1821 +274 456 863 1821 +129 461 863 1821 +274 461 863 1821 +274 456 864 1821 +129 456 864 1821 +274 492 864 1821 +129 492 864 1821 +274 461 881 1821 +129 461 881 1821 +274 493 881 1821 +129 493 881 1821 +129 492 990 1821 +274 492 990 1821 +129 493 990 1821 +274 493 990 1821 +46 457 865 1822 +292 457 865 1822 +46 459 865 1822 +292 459 865 1822 +46 457 867 1822 +292 457 867 1822 +46 470 867 1822 +292 470 867 1822 +46 459 874 1822 +292 459 874 1822 +46 499 874 1822 +292 499 874 1822 +46 470 910 1822 +292 470 910 1822 +46 499 910 1822 +292 499 910 1822 +143 457 865 1823 +292 457 865 1823 +143 459 865 1823 +292 459 865 1823 +292 457 868 1823 +143 457 868 1823 +292 529 868 1823 +143 529 868 1823 +292 459 875 1823 +143 459 875 1823 +292 534 875 1823 +143 534 875 1823 +143 529 1121 1823 +292 529 1121 1823 +143 534 1121 1823 +292 534 1121 1823 +82 457 866 1824 +142 457 866 1824 +82 467 866 1824 +142 467 866 1824 +82 457 868 1824 +142 457 868 1824 +82 529 868 1824 +142 529 868 1824 +82 467 900 1824 +142 467 900 1824 +82 510 900 1824 +142 510 900 1824 +82 510 1052 1824 +142 510 1052 1824 +82 529 1052 1824 +142 529 1052 1824 +262 457 866 1825 +142 457 866 1825 +262 467 866 1825 +142 467 866 1825 +142 457 867 1825 +262 457 867 1825 +142 470 867 1825 +262 470 867 1825 +142 467 899 1825 +262 467 899 1825 +142 471 899 1825 +262 471 899 1825 +262 470 908 1825 +142 470 908 1825 +262 471 908 1825 +142 471 908 1825 +142 457 867 1826 +292 457 867 1826 +142 470 867 1826 +292 470 867 1826 +292 457 868 1826 +142 457 868 1826 +292 529 868 1826 +142 529 868 1826 +292 470 909 1826 +142 470 909 1826 +292 530 909 1826 +142 530 909 1826 +142 529 1119 1826 +292 529 1119 1826 +142 530 1119 1826 +292 530 1119 1826 +87 458 869 1827 +130 458 869 1827 +87 459 869 1827 +130 459 869 1827 +87 458 870 1827 +130 458 870 1827 +87 490 870 1827 +130 490 870 1827 +87 459 873 1827 +130 459 873 1827 +87 497 873 1827 +130 497 873 1827 +87 490 983 1827 +130 490 983 1827 +87 497 983 1827 +130 497 983 1827 +87 458 869 1828 +143 458 869 1828 +87 459 869 1828 +143 459 869 1828 +87 458 872 1828 +143 458 872 1828 +87 527 872 1828 +143 527 872 1828 +87 459 875 1828 +143 459 875 1828 +87 534 875 1828 +143 534 875 1828 +87 527 1112 1828 +143 527 1112 1828 +87 534 1112 1828 +143 534 1112 1828 +87 458 870 1829 +163 458 870 1829 +87 490 870 1829 +163 490 870 1829 +87 458 872 1829 +163 458 872 1829 +87 527 872 1829 +163 527 872 1829 +87 490 985 1829 +163 490 985 1829 +87 583 985 1829 +163 583 985 1829 +87 527 1114 1829 +163 527 1114 1829 +87 583 1114 1829 +163 583 1114 1829 +271 458 870 1830 +163 458 870 1830 +271 490 870 1830 +163 490 870 1830 +163 458 871 1830 +271 458 871 1830 +163 490 982 1830 +271 490 982 1830 +163 458 871 1831 +289 458 871 1831 +289 458 872 1831 +163 458 872 1831 +289 527 872 1831 +163 527 872 1831 +163 527 1111 1831 +289 527 1111 1831 +87 459 873 1832 +158 459 873 1832 +87 497 873 1832 +158 497 873 1832 +87 459 875 1832 +158 459 875 1832 +87 534 875 1832 +158 534 875 1832 +87 497 1007 1832 +158 497 1007 1832 +87 573 1007 1832 +158 573 1007 1832 +87 534 1136 1832 +158 534 1136 1832 +87 573 1136 1832 +158 573 1136 1832 +274 459 873 1833 +158 459 873 1833 +274 497 873 1833 +158 497 873 1833 +158 459 874 1833 +274 459 874 1833 +158 499 874 1833 +274 499 874 1833 +158 497 1005 1833 +274 497 1005 1833 +158 498 1005 1833 +274 498 1005 1833 +274 498 1008 1833 +158 498 1008 1833 +274 499 1008 1833 +158 499 1008 1833 +158 459 874 1834 +292 459 874 1834 +158 499 874 1834 +292 499 874 1834 +292 459 875 1834 +158 459 875 1834 +292 534 875 1834 +158 534 875 1834 +292 499 1012 1834 +158 499 1012 1834 +292 535 1012 1834 +158 535 1012 1834 +158 534 1134 1834 +292 534 1134 1834 +158 535 1134 1834 +292 535 1134 1834 +46 460 876 1835 +294 460 876 1835 +46 461 876 1835 +294 461 876 1835 +46 460 878 1835 +294 460 878 1835 +46 470 878 1835 +294 470 878 1835 +46 461 882 1835 +294 461 882 1835 +46 499 882 1835 +294 499 882 1835 +46 470 910 1835 +294 470 910 1835 +46 499 910 1835 +294 499 910 1835 +145 460 876 1836 +294 460 876 1836 +145 461 876 1836 +294 461 876 1836 +294 460 879 1836 +145 460 879 1836 +294 538 879 1836 +145 538 879 1836 +294 461 883 1836 +145 461 883 1836 +294 539 883 1836 +145 539 883 1836 +145 538 1147 1836 +294 538 1147 1836 +145 539 1147 1836 +294 539 1147 1836 +83 460 877 1837 +146 460 877 1837 +83 465 877 1837 +146 465 877 1837 +83 460 879 1837 +146 460 879 1837 +83 538 879 1837 +146 538 879 1837 +83 465 894 1837 +146 465 894 1837 +83 546 894 1837 +146 546 894 1837 +83 538 1151 1837 +146 538 1151 1837 +83 546 1151 1837 +146 546 1151 1837 +262 460 877 1838 +146 460 877 1838 +262 465 877 1838 +146 465 877 1838 +146 460 878 1838 +262 460 878 1838 +146 470 878 1838 +262 470 878 1838 +146 465 893 1838 +262 465 893 1838 +146 471 893 1838 +262 471 893 1838 +262 470 908 1838 +146 470 908 1838 +262 471 908 1838 +146 471 908 1838 +146 460 878 1839 +294 460 878 1839 +146 470 878 1839 +294 470 878 1839 +294 460 879 1839 +146 460 879 1839 +294 538 879 1839 +146 538 879 1839 +294 470 911 1839 +146 470 911 1839 +294 540 911 1839 +146 540 911 1839 +146 538 1148 1839 +294 538 1148 1839 +146 540 1148 1839 +294 540 1148 1839 +84 461 880 1840 +129 461 880 1840 +84 462 880 1840 +129 462 880 1840 +84 461 881 1840 +129 461 881 1840 +84 493 881 1840 +129 493 881 1840 +84 462 884 1840 +129 462 884 1840 +84 475 884 1840 +129 475 884 1840 +84 475 928 1840 +129 475 928 1840 +84 493 928 1840 +129 493 928 1840 +84 461 880 1841 +145 461 880 1841 +84 462 880 1841 +145 462 880 1841 +84 461 883 1841 +145 461 883 1841 +84 539 883 1841 +145 539 883 1841 +84 462 885 1841 +145 462 885 1841 +84 543 885 1841 +145 543 885 1841 +84 539 1153 1841 +145 539 1153 1841 +84 543 1153 1841 +145 543 1153 1841 +84 461 881 1842 +150 461 881 1842 +84 493 881 1842 +150 493 881 1842 +84 461 883 1842 +150 461 883 1842 +84 539 883 1842 +150 539 883 1842 +84 493 995 1842 +150 493 995 1842 +84 554 995 1842 +150 554 995 1842 +84 539 1155 1842 +150 539 1155 1842 +84 554 1155 1842 +150 554 1155 1842 +274 461 881 1843 +150 461 881 1843 +274 493 881 1843 +150 493 881 1843 +150 461 882 1843 +274 461 882 1843 +150 499 882 1843 +274 499 882 1843 +150 493 994 1843 +274 493 994 1843 +150 498 994 1843 +274 498 994 1843 +274 498 1008 1843 +150 498 1008 1843 +274 499 1008 1843 +150 499 1008 1843 +150 461 882 1844 +294 461 882 1844 +150 499 882 1844 +294 499 882 1844 +294 461 883 1844 +150 461 883 1844 +294 539 883 1844 +150 539 883 1844 +294 499 1013 1844 +150 499 1013 1844 +294 541 1013 1844 +150 541 1013 1844 +150 539 1152 1844 +294 539 1152 1844 +150 541 1152 1844 +294 541 1152 1844 +84 462 884 1845 +151 462 884 1845 +84 475 884 1845 +151 475 884 1845 +84 462 885 1845 +151 462 885 1845 +84 543 885 1845 +151 543 885 1845 +84 475 930 1845 +151 475 930 1845 +84 559 930 1845 +151 559 930 1845 +84 543 1169 1845 +151 543 1169 1845 +84 559 1169 1845 +151 559 1169 1845 +26 463 886 1846 +260 463 886 1846 +26 464 886 1846 +260 464 886 1846 +26 463 887 1846 +260 463 887 1846 +26 465 887 1846 +260 465 887 1846 +26 464 889 1846 +260 464 889 1846 +26 466 889 1846 +260 466 889 1846 +26 465 892 1846 +260 465 892 1846 +26 466 892 1846 +260 466 892 1846 +26 463 886 1847 +261 463 886 1847 +26 464 886 1847 +261 464 886 1847 +26 463 888 1847 +261 463 888 1847 +26 467 888 1847 +261 467 888 1847 +26 464 890 1847 +261 464 890 1847 +26 468 890 1847 +261 468 890 1847 +26 467 898 1847 +261 467 898 1847 +26 468 898 1847 +261 468 898 1847 +26 463 887 1848 +262 463 887 1848 +26 465 887 1848 +262 465 887 1848 +26 463 888 1848 +262 463 888 1848 +26 467 888 1848 +262 467 888 1848 +26 465 893 1848 +262 465 893 1848 +26 471 893 1848 +262 471 893 1848 +26 467 899 1848 +262 467 899 1848 +26 471 899 1848 +262 471 899 1848 +26 464 889 1849 +280 464 889 1849 +26 466 889 1849 +280 466 889 1849 +26 464 890 1849 +280 464 890 1849 +26 468 890 1849 +280 468 890 1849 +26 466 896 1849 +280 466 896 1849 +26 508 896 1849 +280 508 896 1849 +26 468 903 1849 +280 468 903 1849 +26 508 903 1849 +280 508 903 1849 +135 464 889 1850 +280 464 889 1850 +135 466 889 1850 +280 466 889 1850 +280 464 891 1850 +135 464 891 1850 +280 504 891 1850 +135 504 891 1850 +280 466 895 1850 +135 466 895 1850 +280 506 895 1850 +135 506 895 1850 +135 504 1031 1850 +280 504 1031 1850 +135 506 1031 1850 +280 506 1031 1850 +134 464 890 1851 +280 464 890 1851 +134 468 890 1851 +280 468 890 1851 +280 464 891 1851 +134 464 891 1851 +280 504 891 1851 +134 504 891 1851 +280 468 902 1851 +134 468 902 1851 +280 505 902 1851 +134 505 902 1851 +134 504 1030 1851 +280 504 1030 1851 +134 505 1030 1851 +280 505 1030 1851 +26 465 892 1852 +298 465 892 1852 +26 466 892 1852 +298 466 892 1852 +26 465 893 1852 +298 465 893 1852 +26 471 893 1852 +298 471 893 1852 +26 466 896 1852 +298 466 896 1852 +26 508 896 1852 +298 508 896 1852 +26 471 913 1852 +298 471 913 1852 +26 508 913 1852 +298 508 913 1852 +149 465 892 1853 +298 465 892 1853 +149 466 892 1853 +298 466 892 1853 +298 465 894 1853 +149 465 894 1853 +298 546 894 1853 +149 546 894 1853 +298 466 897 1853 +149 466 897 1853 +298 548 897 1853 +149 548 897 1853 +149 546 1179 1853 +298 546 1179 1853 +149 548 1179 1853 +298 548 1179 1853 +146 465 893 1854 +298 465 893 1854 +146 471 893 1854 +298 471 893 1854 +298 465 894 1854 +146 465 894 1854 +298 546 894 1854 +146 546 894 1854 +298 471 914 1854 +146 471 914 1854 +298 547 914 1854 +146 547 914 1854 +146 546 1177 1854 +298 546 1177 1854 +146 547 1177 1854 +298 547 1177 1854 +91 466 895 1855 +177 466 895 1855 +91 506 895 1855 +177 506 895 1855 +91 466 897 1855 +177 466 897 1855 +91 548 897 1855 +177 548 897 1855 +91 506 1037 1855 +177 506 1037 1855 +91 597 1037 1855 +177 597 1037 1855 +91 548 1187 1855 +177 548 1187 1855 +91 597 1187 1855 +177 597 1187 1855 +280 466 895 1856 +177 466 895 1856 +280 506 895 1856 +177 506 895 1856 +177 466 896 1856 +280 466 896 1856 +177 508 896 1856 +280 508 896 1856 +177 506 1036 1856 +280 506 1036 1856 +177 507 1036 1856 +280 507 1036 1856 +280 507 1038 1856 +177 507 1038 1856 +280 508 1038 1856 +177 508 1038 1856 +177 466 896 1857 +298 466 896 1857 +177 508 896 1857 +298 508 896 1857 +298 466 897 1857 +177 466 897 1857 +298 548 897 1857 +177 548 897 1857 +298 508 1043 1857 +177 508 1043 1857 +298 549 1043 1857 +177 549 1043 1857 +177 548 1184 1857 +298 548 1184 1857 +177 549 1184 1857 +298 549 1184 1857 +26 467 898 1858 +281 467 898 1858 +26 468 898 1858 +281 468 898 1858 +26 467 899 1858 +281 467 899 1858 +26 471 899 1858 +281 471 899 1858 +26 468 903 1858 +281 468 903 1858 +26 508 903 1858 +281 508 903 1858 +26 471 913 1858 +281 471 913 1858 +26 508 913 1858 +281 508 913 1858 +136 467 898 1859 +281 467 898 1859 +136 468 898 1859 +281 468 898 1859 +281 467 900 1859 +136 467 900 1859 +281 510 900 1859 +136 510 900 1859 +281 468 904 1859 +136 468 904 1859 +281 509 904 1859 +136 509 904 1859 +136 509 1044 1859 +281 509 1044 1859 +136 510 1044 1859 +281 510 1044 1859 +142 467 899 1860 +281 467 899 1860 +142 471 899 1860 +281 471 899 1860 +281 467 900 1860 +142 467 900 1860 +281 510 900 1860 +142 510 900 1860 +281 471 912 1860 +142 471 912 1860 +281 512 912 1860 +142 512 912 1860 +142 510 1049 1860 +281 510 1049 1860 +142 512 1049 1860 +281 512 1049 1860 +81 468 901 1861 +134 468 901 1861 +81 469 901 1861 +134 469 901 1861 +81 468 902 1861 +134 468 902 1861 +81 505 902 1861 +134 505 902 1861 +81 469 905 1861 +134 469 905 1861 +81 503 905 1861 +134 503 905 1861 +81 503 1026 1861 +134 503 1026 1861 +81 505 1026 1861 +134 505 1026 1861 +81 468 901 1862 +136 468 901 1862 +81 469 901 1862 +136 469 901 1862 +81 468 904 1862 +136 468 904 1862 +81 509 904 1862 +136 509 904 1862 +81 469 907 1862 +136 469 907 1862 +81 513 907 1862 +136 513 907 1862 +81 509 1046 1862 +136 509 1046 1862 +81 513 1046 1862 +136 513 1046 1862 +81 468 902 1863 +138 468 902 1863 +81 505 902 1863 +138 505 902 1863 +81 468 904 1863 +138 468 904 1863 +81 509 904 1863 +138 509 904 1863 +81 505 1034 1863 +138 505 1034 1863 +81 521 1034 1863 +138 521 1034 1863 +81 509 1048 1863 +138 509 1048 1863 +81 521 1048 1863 +138 521 1048 1863 +280 468 902 1864 +138 468 902 1864 +280 505 902 1864 +138 505 902 1864 +138 468 903 1864 +280 468 903 1864 +138 508 903 1864 +280 508 903 1864 +138 505 1033 1864 +280 505 1033 1864 +138 507 1033 1864 +280 507 1033 1864 +280 507 1038 1864 +138 507 1038 1864 +280 508 1038 1864 +138 508 1038 1864 +138 468 903 1865 +281 468 903 1865 +138 508 903 1865 +281 508 903 1865 +281 468 904 1865 +138 468 904 1865 +281 509 904 1865 +138 509 904 1865 +281 508 1042 1865 +138 508 1042 1865 +281 511 1042 1865 +138 511 1042 1865 +138 509 1045 1865 +281 509 1045 1865 +138 511 1045 1865 +281 511 1045 1865 +81 469 905 1866 +137 469 905 1866 +81 503 905 1866 +137 503 905 1866 +81 469 907 1866 +137 469 907 1866 +81 513 907 1866 +137 513 907 1866 +81 503 1028 1866 +137 503 1028 1866 +81 519 1028 1866 +137 519 1028 1866 +81 513 1063 1866 +137 513 1063 1866 +81 519 1063 1866 +137 519 1063 1866 +277 469 905 1867 +137 469 905 1867 +277 503 905 1867 +137 503 905 1867 +137 469 906 1867 +277 469 906 1867 +137 503 1025 1867 +277 503 1025 1867 +137 469 906 1868 +283 469 906 1868 +283 469 907 1868 +137 469 907 1868 +283 513 907 1868 +137 513 907 1868 +137 513 1062 1868 +283 513 1062 1868 +85 470 908 1869 +142 470 908 1869 +85 471 908 1869 +142 471 908 1869 +85 470 909 1869 +142 470 909 1869 +85 530 909 1869 +142 530 909 1869 +85 471 912 1869 +142 471 912 1869 +85 512 912 1869 +142 512 912 1869 +85 512 1057 1869 +142 512 1057 1869 +85 530 1057 1869 +142 530 1057 1869 +85 470 908 1870 +146 470 908 1870 +85 471 908 1870 +146 471 908 1870 +85 470 911 1870 +146 470 911 1870 +85 540 911 1870 +146 540 911 1870 +85 471 914 1870 +146 471 914 1870 +85 547 914 1870 +146 547 914 1870 +85 540 1157 1870 +146 540 1157 1870 +85 547 1157 1870 +146 547 1157 1870 +85 470 909 1871 +154 470 909 1871 +85 530 909 1871 +154 530 909 1871 +85 470 911 1871 +154 470 911 1871 +85 540 911 1871 +154 540 911 1871 +85 530 1124 1871 +154 530 1124 1871 +85 563 1124 1871 +154 563 1124 1871 +85 540 1159 1871 +154 540 1159 1871 +85 563 1159 1871 +154 563 1159 1871 +292 470 909 1872 +154 470 909 1872 +292 530 909 1872 +154 530 909 1872 +154 470 910 1872 +292 470 910 1872 +154 499 910 1872 +292 499 910 1872 +292 499 1012 1872 +154 499 1012 1872 +292 535 1012 1872 +154 535 1012 1872 +154 530 1123 1872 +292 530 1123 1872 +154 535 1123 1872 +292 535 1123 1872 +154 470 910 1873 +294 470 910 1873 +154 499 910 1873 +294 499 910 1873 +294 470 911 1873 +154 470 911 1873 +294 540 911 1873 +154 540 911 1873 +294 499 1013 1873 +154 499 1013 1873 +294 541 1013 1873 +154 541 1013 1873 +154 540 1156 1873 +294 540 1156 1873 +154 541 1156 1873 +294 541 1156 1873 +85 471 912 1874 +155 471 912 1874 +85 512 912 1874 +155 512 912 1874 +85 471 914 1874 +155 471 914 1874 +85 547 914 1874 +155 547 914 1874 +85 512 1059 1874 +155 512 1059 1874 +85 568 1059 1874 +155 568 1059 1874 +85 547 1183 1874 +155 547 1183 1874 +85 568 1183 1874 +155 568 1183 1874 +281 471 912 1875 +155 471 912 1875 +281 512 912 1875 +155 512 912 1875 +155 471 913 1875 +281 471 913 1875 +155 508 913 1875 +281 508 913 1875 +281 508 1042 1875 +155 508 1042 1875 +281 511 1042 1875 +155 511 1042 1875 +155 511 1053 1875 +281 511 1053 1875 +155 512 1053 1875 +281 512 1053 1875 +155 471 913 1876 +298 471 913 1876 +155 508 913 1876 +298 508 913 1876 +298 471 914 1876 +155 471 914 1876 +298 547 914 1876 +155 547 914 1876 +298 508 1043 1876 +155 508 1043 1876 +298 549 1043 1876 +155 549 1043 1876 +155 547 1182 1876 +298 547 1182 1876 +155 549 1182 1876 +298 549 1182 1876 +19 472 915 1877 +263 472 915 1877 +19 473 915 1877 +263 473 915 1877 +19 472 916 1877 +263 472 916 1877 +19 474 916 1877 +263 474 916 1877 +19 473 920 1877 +263 473 920 1877 +19 475 920 1877 +263 475 920 1877 +19 474 924 1877 +263 474 924 1877 +19 475 924 1877 +263 475 924 1877 +19 472 915 1878 +264 472 915 1878 +19 473 915 1878 +264 473 915 1878 +19 472 918 1878 +264 472 918 1878 +19 478 918 1878 +264 478 918 1878 +19 473 922 1878 +264 473 922 1878 +19 480 922 1878 +264 480 922 1878 +19 478 939 1878 +264 478 939 1878 +19 480 939 1878 +264 480 939 1878 +123 472 915 1879 +264 472 915 1879 +123 473 915 1879 +264 473 915 1879 +264 472 917 1879 +123 472 917 1879 +264 476 917 1879 +123 476 917 1879 +264 473 921 1879 +123 473 921 1879 +264 477 921 1879 +123 477 921 1879 +123 476 931 1879 +264 476 931 1879 +123 477 931 1879 +264 477 931 1879 +19 472 916 1880 +268 472 916 1880 +19 474 916 1880 +268 474 916 1880 +19 472 918 1880 +268 472 918 1880 +19 478 918 1880 +268 478 918 1880 +19 474 926 1880 +268 474 926 1880 +19 487 926 1880 +268 487 926 1880 +19 478 941 1880 +268 478 941 1880 +19 487 941 1880 +268 487 941 1880 +125 472 916 1881 +268 472 916 1881 +125 474 916 1881 +268 474 916 1881 +268 472 919 1881 +125 472 919 1881 +268 484 919 1881 +125 484 919 1881 +268 474 925 1881 +125 474 925 1881 +268 485 925 1881 +125 485 925 1881 +125 484 962 1881 +268 484 962 1881 +125 485 962 1881 +268 485 962 1881 +78 472 917 1882 +127 472 917 1882 +78 476 917 1882 +127 476 917 1882 +78 472 919 1882 +127 472 919 1882 +78 484 919 1882 +127 484 919 1882 +78 476 934 1882 +127 476 934 1882 +78 482 934 1882 +127 482 934 1882 +78 482 957 1882 +127 482 957 1882 +78 484 957 1882 +127 484 957 1882 +264 472 917 1883 +127 472 917 1883 +264 476 917 1883 +127 476 917 1883 +127 472 918 1883 +264 472 918 1883 +127 478 918 1883 +264 478 918 1883 +127 476 932 1883 +264 476 932 1883 +127 479 932 1883 +264 479 932 1883 +264 478 938 1883 +127 478 938 1883 +264 479 938 1883 +127 479 938 1883 +127 472 918 1884 +268 472 918 1884 +127 478 918 1884 +268 478 918 1884 +268 472 919 1884 +127 472 919 1884 +268 484 919 1884 +127 484 919 1884 +268 478 940 1884 +127 478 940 1884 +268 486 940 1884 +127 486 940 1884 +127 484 963 1884 +268 484 963 1884 +127 486 963 1884 +268 486 963 1884 +19 473 920 1885 +273 473 920 1885 +19 475 920 1885 +273 475 920 1885 +19 473 922 1885 +273 473 922 1885 +19 480 922 1885 +273 480 922 1885 +19 475 929 1885 +273 475 929 1885 +19 495 929 1885 +273 495 929 1885 +19 480 949 1885 +273 480 949 1885 +19 495 949 1885 +273 495 949 1885 +129 473 920 1886 +273 473 920 1886 +129 475 920 1886 +273 475 920 1886 +273 473 923 1886 +129 473 923 1886 +273 492 923 1886 +129 492 923 1886 +273 475 928 1886 +129 475 928 1886 +273 493 928 1886 +129 493 928 1886 +129 492 990 1886 +273 492 990 1886 +129 493 990 1886 +273 493 990 1886 +79 473 921 1887 +131 473 921 1887 +79 477 921 1887 +131 477 921 1887 +79 473 923 1887 +131 473 923 1887 +79 492 923 1887 +131 492 923 1887 +79 477 937 1887 +131 477 937 1887 +79 489 937 1887 +131 489 937 1887 +79 489 981 1887 +131 489 981 1887 +79 492 981 1887 +131 492 981 1887 +264 473 921 1888 +131 473 921 1888 +264 477 921 1888 +131 477 921 1888 +131 473 922 1888 +264 473 922 1888 +131 480 922 1888 +264 480 922 1888 +131 477 935 1888 +264 477 935 1888 +131 481 935 1888 +264 481 935 1888 +264 480 947 1888 +131 480 947 1888 +264 481 947 1888 +131 481 947 1888 +131 473 922 1889 +273 473 922 1889 +131 480 922 1889 +273 480 922 1889 +273 473 923 1889 +131 473 923 1889 +273 492 923 1889 +131 492 923 1889 +273 480 948 1889 +131 480 948 1889 +273 494 948 1889 +131 494 948 1889 +131 492 991 1889 +273 492 991 1889 +131 494 991 1889 +273 494 991 1889 +19 474 924 1890 +304 474 924 1890 +19 475 924 1890 +304 475 924 1890 +19 474 926 1890 +304 474 926 1890 +19 487 926 1890 +304 487 926 1890 +19 475 929 1890 +304 475 929 1890 +19 495 929 1890 +304 495 929 1890 +19 487 973 1890 +304 487 973 1890 +19 495 973 1890 +304 495 973 1890 +151 474 924 1891 +304 474 924 1891 +151 475 924 1891 +304 475 924 1891 +304 474 927 1891 +151 474 927 1891 +304 560 927 1891 +151 560 927 1891 +304 475 930 1891 +151 475 930 1891 +304 559 930 1891 +151 559 930 1891 +151 559 1220 1891 +304 559 1220 1891 +151 560 1220 1891 +304 560 1220 1891 +89 474 925 1892 +171 474 925 1892 +89 485 925 1892 +171 485 925 1892 +89 474 927 1892 +171 474 927 1892 +89 560 927 1892 +171 560 927 1892 +89 485 967 1892 +171 485 967 1892 +89 592 967 1892 +171 592 967 1892 +89 560 1225 1892 +171 560 1225 1892 +89 592 1225 1892 +171 592 1225 1892 +268 474 925 1893 +171 474 925 1893 +268 485 925 1893 +171 485 925 1893 +171 474 926 1893 +268 474 926 1893 +171 487 926 1893 +268 487 926 1893 +171 485 965 1893 +268 485 965 1893 +171 488 965 1893 +268 488 965 1893 +268 487 971 1893 +171 487 971 1893 +268 488 971 1893 +171 488 971 1893 +171 474 926 1894 +304 474 926 1894 +171 487 926 1894 +304 487 926 1894 +304 474 927 1894 +171 474 927 1894 +304 560 927 1894 +171 560 927 1894 +304 487 972 1894 +171 487 972 1894 +304 562 972 1894 +171 562 972 1894 +171 560 1223 1894 +304 560 1223 1894 +171 562 1223 1894 +304 562 1223 1894 +84 475 928 1895 +153 475 928 1895 +84 493 928 1895 +153 493 928 1895 +84 475 930 1895 +153 475 930 1895 +84 559 930 1895 +153 559 930 1895 +84 493 995 1895 +153 493 995 1895 +84 554 995 1895 +153 554 995 1895 +84 554 1206 1895 +153 554 1206 1895 +84 559 1206 1895 +153 559 1206 1895 +273 475 928 1896 +153 475 928 1896 +273 493 928 1896 +153 493 928 1896 +153 475 929 1896 +273 475 929 1896 +153 495 929 1896 +273 495 929 1896 +153 493 993 1896 +273 493 993 1896 +153 496 993 1896 +273 496 993 1896 +273 495 999 1896 +153 495 999 1896 +273 496 999 1896 +153 496 999 1896 +153 475 929 1897 +304 475 929 1897 +153 495 929 1897 +304 495 929 1897 +304 475 930 1897 +153 475 930 1897 +304 559 930 1897 +153 559 930 1897 +304 495 1000 1897 +153 495 1000 1897 +304 561 1000 1897 +153 561 1000 1897 +153 559 1221 1897 +304 559 1221 1897 +153 561 1221 1897 +304 561 1221 1897 +29 476 931 1898 +264 476 931 1898 +29 477 931 1898 +264 477 931 1898 +29 476 932 1898 +264 476 932 1898 +29 479 932 1898 +264 479 932 1898 +29 477 935 1898 +264 477 935 1898 +29 481 935 1898 +264 481 935 1898 +29 479 943 1898 +264 479 943 1898 +29 481 943 1898 +264 481 943 1898 +29 476 931 1899 +265 476 931 1899 +29 477 931 1899 +265 477 931 1899 +29 476 933 1899 +265 476 933 1899 +29 477 936 1899 +265 477 936 1899 +29 476 932 1900 +267 476 932 1900 +29 479 932 1900 +267 479 932 1900 +29 476 933 1900 +267 476 933 1900 +29 479 945 1900 +267 479 945 1900 +127 476 932 1901 +267 476 932 1901 +127 479 932 1901 +267 479 932 1901 +267 476 934 1901 +127 476 934 1901 +267 482 934 1901 +127 482 934 1901 +267 479 944 1901 +127 479 944 1901 +267 483 944 1901 +127 483 944 1901 +127 482 956 1901 +267 482 956 1901 +127 483 956 1901 +267 483 956 1901 +124 476 933 1902 +267 476 933 1902 +267 476 934 1902 +124 476 934 1902 +267 482 934 1902 +124 482 934 1902 +124 482 954 1902 +267 482 954 1902 +29 477 935 1903 +272 477 935 1903 +29 481 935 1903 +272 481 935 1903 +29 477 936 1903 +272 477 936 1903 +29 481 952 1903 +272 481 952 1903 +131 477 935 1904 +272 477 935 1904 +131 481 935 1904 +272 481 935 1904 +272 477 937 1904 +131 477 937 1904 +272 489 937 1904 +131 489 937 1904 +272 481 951 1904 +131 481 951 1904 +272 491 951 1904 +131 491 951 1904 +131 489 980 1904 +272 489 980 1904 +131 491 980 1904 +272 491 980 1904 +128 477 936 1905 +272 477 936 1905 +272 477 937 1905 +128 477 937 1905 +272 489 937 1905 +128 489 937 1905 +128 489 978 1905 +272 489 978 1905 +93 478 938 1906 +127 478 938 1906 +93 479 938 1906 +127 479 938 1906 +93 478 940 1906 +127 478 940 1906 +93 486 940 1906 +127 486 940 1906 +93 479 944 1906 +127 479 944 1906 +93 483 944 1906 +127 483 944 1906 +93 483 959 1906 +127 483 959 1906 +93 486 959 1906 +127 486 959 1906 +93 478 938 1907 +186 478 938 1907 +93 479 938 1907 +186 479 938 1907 +93 478 942 1907 +186 478 942 1907 +93 606 942 1907 +186 606 942 1907 +93 479 946 1907 +186 479 946 1907 +93 604 946 1907 +186 604 946 1907 +93 604 1370 1907 +186 604 1370 1907 +93 606 1370 1907 +186 606 1370 1907 +264 478 938 1908 +186 478 938 1908 +264 479 938 1908 +186 479 938 1908 +186 478 939 1908 +264 478 939 1908 +186 480 939 1908 +264 480 939 1908 +186 479 943 1908 +264 479 943 1908 +186 481 943 1908 +264 481 943 1908 +264 480 947 1908 +186 480 947 1908 +264 481 947 1908 +186 481 947 1908 +19 478 939 1909 +344 478 939 1909 +19 480 939 1909 +344 480 939 1909 +19 478 941 1909 +344 478 941 1909 +19 487 941 1909 +344 487 941 1909 +19 480 949 1909 +344 480 949 1909 +19 495 949 1909 +344 495 949 1909 +19 487 973 1909 +344 487 973 1909 +19 495 973 1909 +344 495 973 1909 +186 478 939 1910 +344 478 939 1910 +186 480 939 1910 +344 480 939 1910 +344 478 942 1910 +186 478 942 1910 +344 606 942 1910 +186 606 942 1910 +344 480 950 1910 +186 480 950 1910 +344 608 950 1910 +186 608 950 1910 +186 606 1376 1910 +344 606 1376 1910 +186 608 1376 1910 +344 608 1376 1910 +93 478 940 1911 +184 478 940 1911 +93 486 940 1911 +184 486 940 1911 +93 478 942 1911 +184 478 942 1911 +93 606 942 1911 +184 606 942 1911 +93 486 970 1911 +184 486 970 1911 +93 602 970 1911 +184 602 970 1911 +93 602 1362 1911 +184 602 1362 1911 +93 606 1362 1911 +184 606 1362 1911 +268 478 940 1912 +184 478 940 1912 +268 486 940 1912 +184 486 940 1912 +184 478 941 1912 +268 478 941 1912 +184 487 941 1912 +268 487 941 1912 +184 486 968 1912 +268 486 968 1912 +184 488 968 1912 +268 488 968 1912 +268 487 971 1912 +184 487 971 1912 +268 488 971 1912 +184 488 971 1912 +184 478 941 1913 +344 478 941 1913 +184 487 941 1913 +344 487 941 1913 +344 478 942 1913 +184 478 942 1913 +344 606 942 1913 +184 606 942 1913 +344 487 974 1913 +184 487 974 1913 +344 607 974 1913 +184 607 974 1913 +184 606 1375 1913 +344 606 1375 1913 +184 607 1375 1913 +344 607 1375 1913 +29 479 943 1914 +343 479 943 1914 +29 481 943 1914 +343 481 943 1914 +29 479 945 1914 +343 479 945 1914 +29 481 952 1914 +343 481 952 1914 +186 479 943 1915 +343 479 943 1915 +186 481 943 1915 +343 481 943 1915 +343 479 946 1915 +186 479 946 1915 +343 604 946 1915 +186 604 946 1915 +343 481 953 1915 +186 481 953 1915 +343 605 953 1915 +186 605 953 1915 +186 604 1369 1915 +343 604 1369 1915 +186 605 1369 1915 +343 605 1369 1915 +93 479 944 1916 +183 479 944 1916 +93 483 944 1916 +183 483 944 1916 +93 479 946 1916 +183 479 946 1916 +93 604 946 1916 +183 604 946 1916 +93 483 961 1916 +183 483 961 1916 +93 601 961 1916 +183 601 961 1916 +93 601 1358 1916 +183 601 1358 1916 +93 604 1358 1916 +183 604 1358 1916 +267 479 944 1917 +183 479 944 1917 +267 483 944 1917 +183 483 944 1917 +183 479 945 1917 +267 479 945 1917 +183 483 958 1917 +267 483 958 1917 +183 479 945 1918 +343 479 945 1918 +343 479 946 1918 +183 479 946 1918 +343 604 946 1918 +183 604 946 1918 +183 604 1367 1918 +343 604 1367 1918 +95 480 947 1919 +131 480 947 1919 +95 481 947 1919 +131 481 947 1919 +95 480 948 1919 +131 480 948 1919 +95 494 948 1919 +131 494 948 1919 +95 481 951 1919 +131 481 951 1919 +95 491 951 1919 +131 491 951 1919 +95 491 987 1919 +131 491 987 1919 +95 494 987 1919 +131 494 987 1919 +95 480 947 1920 +186 480 947 1920 +95 481 947 1920 +186 481 947 1920 +95 480 950 1920 +186 480 950 1920 +95 608 950 1920 +186 608 950 1920 +95 481 953 1920 +186 481 953 1920 +95 605 953 1920 +186 605 953 1920 +95 605 1372 1920 +186 605 1372 1920 +95 608 1372 1920 +186 608 1372 1920 +95 480 948 1921 +194 480 948 1921 +95 494 948 1921 +194 494 948 1921 +95 480 950 1921 +194 480 950 1921 +95 608 950 1921 +194 608 950 1921 +95 494 998 1921 +194 494 998 1921 +95 615 998 1921 +194 615 998 1921 +95 608 1383 1921 +194 608 1383 1921 +95 615 1383 1921 +194 615 1383 1921 +273 480 948 1922 +194 480 948 1922 +273 494 948 1922 +194 494 948 1922 +194 480 949 1922 +273 480 949 1922 +194 495 949 1922 +273 495 949 1922 +194 494 996 1922 +273 494 996 1922 +194 496 996 1922 +273 496 996 1922 +273 495 999 1922 +194 495 999 1922 +273 496 999 1922 +194 496 999 1922 +194 480 949 1923 +344 480 949 1923 +194 495 949 1923 +344 495 949 1923 +344 480 950 1923 +194 480 950 1923 +344 608 950 1923 +194 608 950 1923 +344 495 1001 1923 +194 495 1001 1923 +344 609 1001 1923 +194 609 1001 1923 +194 608 1381 1923 +344 608 1381 1923 +194 609 1381 1923 +344 609 1381 1923 +95 481 951 1924 +191 481 951 1924 +95 491 951 1924 +191 491 951 1924 +95 481 953 1924 +191 481 953 1924 +95 605 953 1924 +191 605 953 1924 +95 491 989 1924 +191 491 989 1924 +95 613 989 1924 +191 613 989 1924 +95 605 1374 1924 +191 605 1374 1924 +95 613 1374 1924 +191 613 1374 1924 +272 481 951 1925 +191 481 951 1925 +272 491 951 1925 +191 491 951 1925 +191 481 952 1925 +272 481 952 1925 +191 491 986 1925 +272 491 986 1925 +191 481 952 1926 +343 481 952 1926 +343 481 953 1926 +191 481 953 1926 +343 605 953 1926 +191 605 953 1926 +191 605 1371 1926 +343 605 1371 1926 +54 482 954 1927 +266 482 954 1927 +54 482 955 1927 +266 482 955 1927 +54 482 954 1928 +267 482 954 1928 +54 482 956 1928 +267 482 956 1928 +54 483 956 1928 +267 483 956 1928 +54 483 958 1928 +267 483 958 1928 +54 482 955 1929 +270 482 955 1929 +54 482 956 1929 +270 482 956 1929 +54 483 956 1929 +270 483 956 1929 +54 483 960 1929 +270 483 960 1929 +126 482 955 1930 +270 482 955 1930 +270 482 957 1930 +126 482 957 1930 +270 484 957 1930 +126 484 957 1930 +126 484 964 1930 +270 484 964 1930 +127 482 956 1931 +270 482 956 1931 +127 483 956 1931 +270 483 956 1931 +270 482 957 1931 +127 482 957 1931 +270 484 957 1931 +127 484 957 1931 +270 483 959 1931 +127 483 959 1931 +270 486 959 1931 +127 486 959 1931 +127 484 963 1931 +270 484 963 1931 +127 486 963 1931 +270 486 963 1931 +54 483 958 1932 +339 483 958 1932 +54 483 960 1932 +339 483 960 1932 +183 483 958 1933 +339 483 958 1933 +339 483 961 1933 +183 483 961 1933 +339 601 961 1933 +183 601 961 1933 +183 601 1355 1933 +339 601 1355 1933 +93 483 959 1934 +182 483 959 1934 +93 486 959 1934 +182 486 959 1934 +93 483 961 1934 +182 483 961 1934 +93 601 961 1934 +182 601 961 1934 +93 486 970 1934 +182 486 970 1934 +93 602 970 1934 +182 602 970 1934 +93 601 1356 1934 +182 601 1356 1934 +93 602 1356 1934 +182 602 1356 1934 +270 483 959 1935 +182 483 959 1935 +270 486 959 1935 +182 486 959 1935 +182 483 960 1935 +270 483 960 1935 +182 486 969 1935 +270 486 969 1935 +182 483 960 1936 +339 483 960 1936 +339 483 961 1936 +182 483 961 1936 +339 601 961 1936 +182 601 961 1936 +182 601 1354 1936 +339 601 1354 1936 +28 484 962 1937 +268 484 962 1937 +28 485 962 1937 +268 485 962 1937 +28 484 963 1937 +268 484 963 1937 +28 486 963 1937 +268 486 963 1937 +28 485 965 1937 +268 485 965 1937 +28 488 965 1937 +268 488 965 1937 +28 486 968 1937 +268 486 968 1937 +28 488 968 1937 +268 488 968 1937 +28 484 962 1938 +269 484 962 1938 +28 485 962 1938 +269 485 962 1938 +28 484 964 1938 +269 484 964 1938 +28 485 966 1938 +269 485 966 1938 +28 484 963 1939 +270 484 963 1939 +28 486 963 1939 +270 486 963 1939 +28 484 964 1939 +270 484 964 1939 +28 486 969 1939 +270 486 969 1939 +28 485 965 1940 +327 485 965 1940 +28 488 965 1940 +327 488 965 1940 +28 485 966 1940 +327 485 966 1940 +28 488 976 1940 +327 488 976 1940 +171 485 965 1941 +327 485 965 1941 +171 488 965 1941 +327 488 965 1941 +327 485 967 1941 +171 485 967 1941 +327 592 967 1941 +171 592 967 1941 +327 488 975 1941 +171 488 975 1941 +327 593 975 1941 +171 593 975 1941 +171 592 1328 1941 +327 592 1328 1941 +171 593 1328 1941 +327 593 1328 1941 +170 485 966 1942 +327 485 966 1942 +327 485 967 1942 +170 485 967 1942 +327 592 967 1942 +170 592 967 1942 +170 592 1327 1942 +327 592 1327 1942 +28 486 968 1943 +341 486 968 1943 +28 488 968 1943 +341 488 968 1943 +28 486 969 1943 +341 486 969 1943 +28 488 976 1943 +341 488 976 1943 +184 486 968 1944 +341 486 968 1944 +184 488 968 1944 +341 488 968 1944 +341 486 970 1944 +184 486 970 1944 +341 602 970 1944 +184 602 970 1944 +341 488 977 1944 +184 488 977 1944 +341 603 977 1944 +184 603 977 1944 +184 602 1361 1944 +341 602 1361 1944 +184 603 1361 1944 +341 603 1361 1944 +182 486 969 1945 +341 486 969 1945 +341 486 970 1945 +182 486 970 1945 +341 602 970 1945 +182 602 970 1945 +182 602 1359 1945 +341 602 1359 1945 +94 487 971 1946 +171 487 971 1946 +94 488 971 1946 +171 488 971 1946 +94 487 972 1946 +171 487 972 1946 +94 562 972 1946 +171 562 972 1946 +94 488 975 1946 +171 488 975 1946 +94 593 975 1946 +171 593 975 1946 +94 562 1229 1946 +171 562 1229 1946 +94 593 1229 1946 +171 593 1229 1946 +94 487 971 1947 +184 487 971 1947 +94 488 971 1947 +184 488 971 1947 +94 487 974 1947 +184 487 974 1947 +94 607 974 1947 +184 607 974 1947 +94 488 977 1947 +184 488 977 1947 +94 603 977 1947 +184 603 977 1947 +94 603 1364 1947 +184 603 1364 1947 +94 607 1364 1947 +184 607 1364 1947 +94 487 972 1948 +190 487 972 1948 +94 562 972 1948 +190 562 972 1948 +94 487 974 1948 +190 487 974 1948 +94 607 974 1948 +190 607 974 1948 +94 562 1231 1948 +190 562 1231 1948 +94 611 1231 1948 +190 611 1231 1948 +94 607 1380 1948 +190 607 1380 1948 +94 611 1380 1948 +190 611 1380 1948 +304 487 972 1949 +190 487 972 1949 +304 562 972 1949 +190 562 972 1949 +190 487 973 1949 +304 487 973 1949 +190 495 973 1949 +304 495 973 1949 +304 495 1000 1949 +190 495 1000 1949 +304 561 1000 1949 +190 561 1000 1949 +190 561 1226 1949 +304 561 1226 1949 +190 562 1226 1949 +304 562 1226 1949 +190 487 973 1950 +344 487 973 1950 +190 495 973 1950 +344 495 973 1950 +344 487 974 1950 +190 487 974 1950 +344 607 974 1950 +190 607 974 1950 +344 495 1001 1950 +190 495 1001 1950 +344 609 1001 1950 +190 609 1001 1950 +190 607 1378 1950 +344 607 1378 1950 +190 609 1378 1950 +344 609 1378 1950 +94 488 975 1951 +187 488 975 1951 +94 593 975 1951 +187 593 975 1951 +94 488 977 1951 +187 488 977 1951 +94 603 977 1951 +187 603 977 1951 +94 593 1331 1951 +187 593 1331 1951 +94 610 1331 1951 +187 610 1331 1951 +94 603 1366 1951 +187 603 1366 1951 +94 610 1366 1951 +187 610 1366 1951 +327 488 975 1952 +187 488 975 1952 +327 593 975 1952 +187 593 975 1952 +187 488 976 1952 +327 488 976 1952 +187 593 1330 1952 +327 593 1330 1952 +187 488 976 1953 +341 488 976 1953 +341 488 977 1953 +187 488 977 1953 +341 603 977 1953 +187 603 977 1953 +187 603 1363 1953 +341 603 1363 1953 +58 489 978 1954 +271 489 978 1954 +58 489 979 1954 +271 489 979 1954 +58 490 979 1954 +271 490 979 1954 +58 490 982 1954 +271 490 982 1954 +58 489 978 1955 +272 489 978 1955 +58 489 980 1955 +272 489 980 1955 +58 491 980 1955 +272 491 980 1955 +58 491 986 1955 +272 491 986 1955 +58 489 979 1956 +275 489 979 1956 +58 490 979 1956 +275 490 979 1956 +58 489 980 1956 +275 489 980 1956 +58 491 980 1956 +275 491 980 1956 +58 490 984 1956 +275 490 984 1956 +58 500 984 1956 +275 500 984 1956 +58 491 988 1956 +275 491 988 1956 +58 500 988 1956 +275 500 988 1956 +130 489 979 1957 +275 489 979 1957 +130 490 979 1957 +275 490 979 1957 +275 489 981 1957 +130 489 981 1957 +275 492 981 1957 +130 492 981 1957 +275 490 983 1957 +130 490 983 1957 +275 497 983 1957 +130 497 983 1957 +130 492 992 1957 +275 492 992 1957 +130 497 992 1957 +275 497 992 1957 +131 489 980 1958 +275 489 980 1958 +131 491 980 1958 +275 491 980 1958 +275 489 981 1958 +131 489 981 1958 +275 492 981 1958 +131 492 981 1958 +275 491 987 1958 +131 491 987 1958 +275 494 987 1958 +131 494 987 1958 +131 492 991 1958 +275 492 991 1958 +131 494 991 1958 +275 494 991 1958 +58 490 982 1959 +318 490 982 1959 +58 490 984 1959 +318 490 984 1959 +58 500 984 1959 +318 500 984 1959 +58 500 1016 1959 +318 500 1016 1959 +163 490 982 1960 +318 490 982 1960 +318 490 985 1960 +163 490 985 1960 +318 583 985 1960 +163 583 985 1960 +163 583 1300 1960 +318 583 1300 1960 +87 490 983 1961 +162 490 983 1961 +87 497 983 1961 +162 497 983 1961 +87 490 985 1961 +162 490 985 1961 +87 583 985 1961 +162 583 985 1961 +87 497 1007 1961 +162 497 1007 1961 +87 573 1007 1961 +162 573 1007 1961 +87 573 1267 1961 +162 573 1267 1961 +87 583 1267 1961 +162 583 1267 1961 +275 490 983 1962 +162 490 983 1962 +275 497 983 1962 +162 497 983 1962 +162 490 984 1962 +275 490 984 1962 +162 500 984 1962 +275 500 984 1962 +162 497 1006 1962 +275 497 1006 1962 +162 501 1006 1962 +275 501 1006 1962 +275 500 1014 1962 +162 500 1014 1962 +275 501 1014 1962 +162 501 1014 1962 +162 490 984 1963 +318 490 984 1963 +162 500 984 1963 +318 500 984 1963 +318 490 985 1963 +162 490 985 1963 +318 583 985 1963 +162 583 985 1963 +318 500 1015 1963 +162 500 1015 1963 +318 584 1015 1963 +162 584 1015 1963 +162 583 1298 1963 +318 583 1298 1963 +162 584 1298 1963 +318 584 1298 1963 +58 491 986 1964 +353 491 986 1964 +58 491 988 1964 +353 491 988 1964 +58 500 988 1964 +353 500 988 1964 +58 500 1016 1964 +353 500 1016 1964 +191 491 986 1965 +353 491 986 1965 +353 491 989 1965 +191 491 989 1965 +353 613 989 1965 +191 613 989 1965 +191 613 1397 1965 +353 613 1397 1965 +95 491 987 1966 +193 491 987 1966 +95 494 987 1966 +193 494 987 1966 +95 491 989 1966 +193 491 989 1966 +95 613 989 1966 +193 613 989 1966 +95 494 998 1966 +193 494 998 1966 +95 615 998 1966 +193 615 998 1966 +95 613 1400 1966 +193 613 1400 1966 +95 615 1400 1966 +193 615 1400 1966 +275 491 987 1967 +193 491 987 1967 +275 494 987 1967 +193 494 987 1967 +193 491 988 1967 +275 491 988 1967 +193 500 988 1967 +275 500 988 1967 +193 494 997 1967 +275 494 997 1967 +193 501 997 1967 +275 501 997 1967 +275 500 1014 1967 +193 500 1014 1967 +275 501 1014 1967 +193 501 1014 1967 +193 491 988 1968 +353 491 988 1968 +193 500 988 1968 +353 500 988 1968 +353 491 989 1968 +193 491 989 1968 +353 613 989 1968 +193 613 989 1968 +353 500 1017 1968 +193 500 1017 1968 +353 614 1017 1968 +193 614 1017 1968 +193 613 1399 1968 +353 613 1399 1968 +193 614 1399 1968 +353 614 1399 1968 +30 492 990 1969 +273 492 990 1969 +30 493 990 1969 +273 493 990 1969 +30 492 991 1969 +273 492 991 1969 +30 494 991 1969 +273 494 991 1969 +30 493 993 1969 +273 493 993 1969 +30 496 993 1969 +273 496 993 1969 +30 494 996 1969 +273 494 996 1969 +30 496 996 1969 +273 496 996 1969 +30 492 990 1970 +274 492 990 1970 +30 493 990 1970 +274 493 990 1970 +30 492 992 1970 +274 492 992 1970 +30 497 992 1970 +274 497 992 1970 +30 493 994 1970 +274 493 994 1970 +30 498 994 1970 +274 498 994 1970 +30 497 1005 1970 +274 497 1005 1970 +30 498 1005 1970 +274 498 1005 1970 +30 492 991 1971 +275 492 991 1971 +30 494 991 1971 +275 494 991 1971 +30 492 992 1971 +275 492 992 1971 +30 497 992 1971 +275 497 992 1971 +30 494 997 1971 +275 494 997 1971 +30 501 997 1971 +275 501 997 1971 +30 497 1006 1971 +275 497 1006 1971 +30 501 1006 1971 +275 501 1006 1971 +30 493 993 1972 +303 493 993 1972 +30 496 993 1972 +303 496 993 1972 +30 493 994 1972 +303 493 994 1972 +30 498 994 1972 +303 498 994 1972 +30 496 1003 1972 +303 496 1003 1972 +30 558 1003 1972 +303 558 1003 1972 +30 498 1010 1972 +303 498 1010 1972 +30 558 1010 1972 +303 558 1010 1972 +153 493 993 1973 +303 493 993 1973 +153 496 993 1973 +303 496 993 1973 +303 493 995 1973 +153 493 995 1973 +303 554 995 1973 +153 554 995 1973 +303 496 1002 1973 +153 496 1002 1973 +303 556 1002 1973 +153 556 1002 1973 +153 554 1205 1973 +303 554 1205 1973 +153 556 1205 1973 +303 556 1205 1973 +150 493 994 1974 +303 493 994 1974 +150 498 994 1974 +303 498 994 1974 +303 493 995 1974 +150 493 995 1974 +303 554 995 1974 +150 554 995 1974 +303 498 1009 1974 +150 498 1009 1974 +303 555 1009 1974 +150 555 1009 1974 +150 554 1203 1974 +303 554 1203 1974 +150 555 1203 1974 +303 555 1203 1974 +30 494 996 1975 +356 494 996 1975 +30 496 996 1975 +356 496 996 1975 +30 494 997 1975 +356 494 997 1975 +30 501 997 1975 +356 501 997 1975 +30 496 1003 1975 +356 496 1003 1975 +30 558 1003 1975 +356 558 1003 1975 +30 501 1019 1975 +356 501 1019 1975 +30 558 1019 1975 +356 558 1019 1975 +194 494 996 1976 +356 494 996 1976 +194 496 996 1976 +356 496 996 1976 +356 494 998 1976 +194 494 998 1976 +356 615 998 1976 +194 615 998 1976 +356 496 1004 1976 +194 496 1004 1976 +356 617 1004 1976 +194 617 1004 1976 +194 615 1407 1976 +356 615 1407 1976 +194 617 1407 1976 +356 617 1407 1976 +193 494 997 1977 +356 494 997 1977 +193 501 997 1977 +356 501 997 1977 +356 494 998 1977 +193 494 998 1977 +356 615 998 1977 +193 615 998 1977 +356 501 1020 1977 +193 501 1020 1977 +356 616 1020 1977 +193 616 1020 1977 +193 615 1406 1977 +356 615 1406 1977 +193 616 1406 1977 +356 616 1406 1977 +97 495 999 1978 +153 495 999 1978 +97 496 999 1978 +153 496 999 1978 +97 495 1000 1978 +153 495 1000 1978 +97 561 1000 1978 +153 561 1000 1978 +97 496 1002 1978 +153 496 1002 1978 +97 556 1002 1978 +153 556 1002 1978 +97 556 1211 1978 +153 556 1211 1978 +97 561 1211 1978 +153 561 1211 1978 +97 495 999 1979 +194 495 999 1979 +97 496 999 1979 +194 496 999 1979 +97 495 1001 1979 +194 495 1001 1979 +97 609 1001 1979 +194 609 1001 1979 +97 496 1004 1979 +194 496 1004 1979 +97 617 1004 1979 +194 617 1004 1979 +97 609 1386 1979 +194 609 1386 1979 +97 617 1386 1979 +194 617 1386 1979 +97 495 1000 1980 +190 495 1000 1980 +97 561 1000 1980 +190 561 1000 1980 +97 495 1001 1980 +190 495 1001 1980 +97 609 1001 1980 +190 609 1001 1980 +97 561 1228 1980 +190 561 1228 1980 +97 612 1228 1980 +190 612 1228 1980 +97 609 1384 1980 +190 609 1384 1980 +97 612 1384 1980 +190 612 1384 1980 +97 496 1002 1981 +199 496 1002 1981 +97 556 1002 1981 +199 556 1002 1981 +97 496 1004 1981 +199 496 1004 1981 +97 617 1004 1981 +199 617 1004 1981 +97 556 1213 1981 +199 556 1213 1981 +97 625 1213 1981 +199 625 1213 1981 +97 617 1413 1981 +199 617 1413 1981 +97 625 1413 1981 +199 625 1413 1981 +303 496 1002 1982 +199 496 1002 1982 +303 556 1002 1982 +199 556 1002 1982 +199 496 1003 1982 +303 496 1003 1982 +199 558 1003 1982 +303 558 1003 1982 +199 556 1210 1982 +303 556 1210 1982 +199 557 1210 1982 +303 557 1210 1982 +303 557 1214 1982 +199 557 1214 1982 +303 558 1214 1982 +199 558 1214 1982 +199 496 1003 1983 +356 496 1003 1983 +199 558 1003 1983 +356 558 1003 1983 +356 496 1004 1983 +199 496 1004 1983 +356 617 1004 1983 +199 617 1004 1983 +356 558 1219 1983 +199 558 1219 1983 +356 618 1219 1983 +199 618 1219 1983 +199 617 1412 1983 +356 617 1412 1983 +199 618 1412 1983 +356 618 1412 1983 +30 497 1005 1984 +312 497 1005 1984 +30 498 1005 1984 +312 498 1005 1984 +30 497 1006 1984 +312 497 1006 1984 +30 501 1006 1984 +312 501 1006 1984 +30 498 1010 1984 +312 498 1010 1984 +30 558 1010 1984 +312 558 1010 1984 +30 501 1019 1984 +312 501 1019 1984 +30 558 1019 1984 +312 558 1019 1984 +158 497 1005 1985 +312 497 1005 1985 +158 498 1005 1985 +312 498 1005 1985 +312 497 1007 1985 +158 497 1007 1985 +312 573 1007 1985 +158 573 1007 1985 +312 498 1011 1985 +158 498 1011 1985 +312 572 1011 1985 +158 572 1011 1985 +158 572 1261 1985 +312 572 1261 1985 +158 573 1261 1985 +312 573 1261 1985 +162 497 1006 1986 +312 497 1006 1986 +162 501 1006 1986 +312 501 1006 1986 +312 497 1007 1986 +162 497 1007 1986 +312 573 1007 1986 +162 573 1007 1986 +312 501 1018 1986 +162 501 1018 1986 +312 575 1018 1986 +162 575 1018 1986 +162 573 1265 1986 +312 573 1265 1986 +162 575 1265 1986 +312 575 1265 1986 +86 498 1008 1987 +150 498 1008 1987 +86 499 1008 1987 +150 499 1008 1987 +86 498 1009 1987 +150 498 1009 1987 +86 555 1009 1987 +150 555 1009 1987 +86 499 1013 1987 +150 499 1013 1987 +86 541 1013 1987 +150 541 1013 1987 +86 541 1160 1987 +150 541 1160 1987 +86 555 1160 1987 +150 555 1160 1987 +86 498 1008 1988 +158 498 1008 1988 +86 499 1008 1988 +158 499 1008 1988 +86 498 1011 1988 +158 498 1011 1988 +86 572 1011 1988 +158 572 1011 1988 +86 499 1012 1988 +158 499 1012 1988 +86 535 1012 1988 +158 535 1012 1988 +86 535 1139 1988 +158 535 1139 1988 +86 572 1139 1988 +158 572 1139 1988 +86 498 1009 1989 +159 498 1009 1989 +86 555 1009 1989 +159 555 1009 1989 +86 498 1011 1989 +159 498 1011 1989 +86 572 1011 1989 +159 572 1011 1989 +86 555 1209 1989 +159 555 1209 1989 +86 578 1209 1989 +159 578 1209 1989 +86 572 1264 1989 +159 572 1264 1989 +86 578 1264 1989 +159 578 1264 1989 +303 498 1009 1990 +159 498 1009 1990 +303 555 1009 1990 +159 555 1009 1990 +159 498 1010 1990 +303 498 1010 1990 +159 558 1010 1990 +303 558 1010 1990 +159 555 1208 1990 +303 555 1208 1990 +159 557 1208 1990 +303 557 1208 1990 +303 557 1214 1990 +159 557 1214 1990 +303 558 1214 1990 +159 558 1214 1990 +159 498 1010 1991 +312 498 1010 1991 +159 558 1010 1991 +312 558 1010 1991 +312 498 1011 1991 +159 498 1011 1991 +312 572 1011 1991 +159 572 1011 1991 +312 558 1218 1991 +159 558 1218 1991 +312 574 1218 1991 +159 574 1218 1991 +159 572 1262 1991 +312 572 1262 1991 +159 574 1262 1991 +312 574 1262 1991 +86 499 1012 1992 +154 499 1012 1992 +86 535 1012 1992 +154 535 1012 1992 +86 499 1013 1992 +154 499 1013 1992 +86 541 1013 1992 +154 541 1013 1992 +86 535 1137 1992 +154 535 1137 1992 +86 564 1137 1992 +154 564 1137 1992 +86 541 1162 1992 +154 541 1162 1992 +86 564 1162 1992 +154 564 1162 1992 +96 500 1014 1993 +162 500 1014 1993 +96 501 1014 1993 +162 501 1014 1993 +96 500 1015 1993 +162 500 1015 1993 +96 584 1015 1993 +162 584 1015 1993 +96 501 1018 1993 +162 501 1018 1993 +96 575 1018 1993 +162 575 1018 1993 +96 575 1272 1993 +162 575 1272 1993 +96 584 1272 1993 +162 584 1272 1993 +96 500 1014 1994 +193 500 1014 1994 +96 501 1014 1994 +193 501 1014 1994 +96 500 1017 1994 +193 500 1017 1994 +96 614 1017 1994 +193 614 1017 1994 +96 501 1020 1994 +193 501 1020 1994 +96 616 1020 1994 +193 616 1020 1994 +96 614 1402 1994 +193 614 1402 1994 +96 616 1402 1994 +193 616 1402 1994 +96 500 1015 1995 +195 500 1015 1995 +96 584 1015 1995 +195 584 1015 1995 +96 500 1017 1995 +195 500 1017 1995 +96 614 1017 1995 +195 614 1017 1995 +96 584 1303 1995 +195 584 1303 1995 +96 619 1303 1995 +195 619 1303 1995 +96 614 1404 1995 +195 614 1404 1995 +96 619 1404 1995 +195 619 1404 1995 +318 500 1015 1996 +195 500 1015 1996 +318 584 1015 1996 +195 584 1015 1996 +195 500 1016 1996 +318 500 1016 1996 +195 584 1302 1996 +318 584 1302 1996 +195 500 1016 1997 +353 500 1016 1997 +353 500 1017 1997 +195 500 1017 1997 +353 614 1017 1997 +195 614 1017 1997 +195 614 1401 1997 +353 614 1401 1997 +96 501 1018 1998 +196 501 1018 1998 +96 575 1018 1998 +196 575 1018 1998 +96 501 1020 1998 +196 501 1020 1998 +96 616 1020 1998 +196 616 1020 1998 +96 575 1274 1998 +196 575 1274 1998 +96 621 1274 1998 +196 621 1274 1998 +96 616 1410 1998 +196 616 1410 1998 +96 621 1410 1998 +196 621 1410 1998 +312 501 1018 1999 +196 501 1018 1999 +312 575 1018 1999 +196 575 1018 1999 +196 501 1019 1999 +312 501 1019 1999 +196 558 1019 1999 +312 558 1019 1999 +312 558 1218 1999 +196 558 1218 1999 +312 574 1218 1999 +196 574 1218 1999 +196 574 1268 1999 +312 574 1268 1999 +196 575 1268 1999 +312 575 1268 1999 +196 501 1019 2000 +356 501 1019 2000 +196 558 1019 2000 +356 558 1019 2000 +356 501 1020 2000 +196 501 1020 2000 +356 616 1020 2000 +196 616 1020 2000 +356 558 1219 2000 +196 558 1219 2000 +356 618 1219 2000 +196 618 1219 2000 +196 616 1409 2000 +356 616 1409 2000 +196 618 1409 2000 +356 618 1409 2000 +3 502 1021 2001 +276 502 1021 2001 +3 502 1022 2001 +276 502 1022 2001 +3 502 1021 2002 +277 502 1021 2002 +3 502 1023 2002 +277 502 1023 2002 +3 503 1023 2002 +277 503 1023 2002 +3 503 1025 2002 +277 503 1025 2002 +3 502 1022 2003 +278 502 1022 2003 +3 502 1023 2003 +278 502 1023 2003 +3 503 1023 2003 +278 503 1023 2003 +3 503 1027 2003 +278 503 1027 2003 +133 502 1022 2004 +278 502 1022 2004 +278 502 1024 2004 +133 502 1024 2004 +278 504 1024 2004 +133 504 1024 2004 +133 504 1029 2004 +278 504 1029 2004 +134 502 1023 2005 +278 502 1023 2005 +134 503 1023 2005 +278 503 1023 2005 +278 502 1024 2005 +134 502 1024 2005 +278 504 1024 2005 +134 504 1024 2005 +278 503 1026 2005 +134 503 1026 2005 +278 505 1026 2005 +134 505 1026 2005 +134 504 1030 2005 +278 504 1030 2005 +134 505 1030 2005 +278 505 1030 2005 +3 503 1025 2006 +284 503 1025 2006 +3 503 1027 2006 +284 503 1027 2006 +137 503 1025 2007 +284 503 1025 2007 +284 503 1028 2007 +137 503 1028 2007 +284 519 1028 2007 +137 519 1028 2007 +137 519 1083 2007 +284 519 1083 2007 +81 503 1026 2008 +139 503 1026 2008 +81 505 1026 2008 +139 505 1026 2008 +81 503 1028 2008 +139 503 1028 2008 +81 519 1028 2008 +139 519 1028 2008 +81 505 1034 2008 +139 505 1034 2008 +81 521 1034 2008 +139 521 1034 2008 +81 519 1086 2008 +139 519 1086 2008 +81 521 1086 2008 +139 521 1086 2008 +278 503 1026 2009 +139 503 1026 2009 +278 505 1026 2009 +139 505 1026 2009 +139 503 1027 2009 +278 503 1027 2009 +139 505 1032 2009 +278 505 1032 2009 +139 503 1027 2010 +284 503 1027 2010 +284 503 1028 2010 +139 503 1028 2010 +284 519 1028 2010 +139 519 1028 2010 +139 519 1084 2010 +284 519 1084 2010 +53 504 1029 2011 +278 504 1029 2011 +53 504 1030 2011 +278 504 1030 2011 +53 505 1030 2011 +278 505 1030 2011 +53 505 1032 2011 +278 505 1032 2011 +53 504 1029 2012 +279 504 1029 2012 +53 504 1031 2012 +279 504 1031 2012 +53 506 1031 2012 +279 506 1031 2012 +53 506 1035 2012 +279 506 1035 2012 +53 504 1030 2013 +280 504 1030 2013 +53 505 1030 2013 +280 505 1030 2013 +53 504 1031 2013 +280 504 1031 2013 +53 506 1031 2013 +280 506 1031 2013 +53 505 1033 2013 +280 505 1033 2013 +53 507 1033 2013 +280 507 1033 2013 +53 506 1036 2013 +280 506 1036 2013 +53 507 1036 2013 +280 507 1036 2013 +53 505 1032 2014 +287 505 1032 2014 +53 505 1033 2014 +287 505 1033 2014 +53 507 1033 2014 +287 507 1033 2014 +53 507 1040 2014 +287 507 1040 2014 +139 505 1032 2015 +287 505 1032 2015 +287 505 1034 2015 +139 505 1034 2015 +287 521 1034 2015 +139 521 1034 2015 +139 521 1093 2015 +287 521 1093 2015 +138 505 1033 2016 +287 505 1033 2016 +138 507 1033 2016 +287 507 1033 2016 +287 505 1034 2016 +138 505 1034 2016 +287 521 1034 2016 +138 521 1034 2016 +287 507 1039 2016 +138 507 1039 2016 +287 522 1039 2016 +138 522 1039 2016 +138 521 1091 2016 +287 521 1091 2016 +138 522 1091 2016 +287 522 1091 2016 +53 506 1035 2017 +335 506 1035 2017 +53 506 1036 2017 +335 506 1036 2017 +53 507 1036 2017 +335 507 1036 2017 +53 507 1040 2017 +335 507 1040 2017 +178 506 1035 2018 +335 506 1035 2018 +335 506 1037 2018 +178 506 1037 2018 +335 597 1037 2018 +178 597 1037 2018 +178 597 1344 2018 +335 597 1344 2018 +177 506 1036 2019 +335 506 1036 2019 +177 507 1036 2019 +335 507 1036 2019 +335 506 1037 2019 +177 506 1037 2019 +335 597 1037 2019 +177 597 1037 2019 +335 507 1041 2019 +177 507 1041 2019 +335 598 1041 2019 +177 598 1041 2019 +177 597 1343 2019 +335 597 1343 2019 +177 598 1343 2019 +335 598 1343 2019 +92 507 1038 2020 +138 507 1038 2020 +92 508 1038 2020 +138 508 1038 2020 +92 507 1039 2020 +138 507 1039 2020 +92 522 1039 2020 +138 522 1039 2020 +92 508 1042 2020 +138 508 1042 2020 +92 511 1042 2020 +138 511 1042 2020 +92 511 1054 2020 +138 511 1054 2020 +92 522 1054 2020 +138 522 1054 2020 +92 507 1038 2021 +177 507 1038 2021 +92 508 1038 2021 +177 508 1038 2021 +92 507 1041 2021 +177 507 1041 2021 +92 598 1041 2021 +177 598 1041 2021 +92 508 1043 2021 +177 508 1043 2021 +92 549 1043 2021 +177 549 1043 2021 +92 549 1190 2021 +177 549 1190 2021 +92 598 1190 2021 +177 598 1190 2021 +92 507 1039 2022 +180 507 1039 2022 +92 522 1039 2022 +180 522 1039 2022 +92 507 1041 2022 +180 507 1041 2022 +92 598 1041 2022 +180 598 1041 2022 +92 522 1096 2022 +180 522 1096 2022 +92 599 1096 2022 +180 599 1096 2022 +92 598 1347 2022 +180 598 1347 2022 +92 599 1347 2022 +180 599 1347 2022 +287 507 1039 2023 +180 507 1039 2023 +287 522 1039 2023 +180 522 1039 2023 +180 507 1040 2023 +287 507 1040 2023 +180 522 1095 2023 +287 522 1095 2023 +180 507 1040 2024 +335 507 1040 2024 +335 507 1041 2024 +180 507 1041 2024 +335 598 1041 2024 +180 598 1041 2024 +180 598 1346 2024 +335 598 1346 2024 +92 508 1042 2025 +155 508 1042 2025 +92 511 1042 2025 +155 511 1042 2025 +92 508 1043 2025 +155 508 1043 2025 +92 549 1043 2025 +155 549 1043 2025 +92 511 1056 2025 +155 511 1056 2025 +92 569 1056 2025 +155 569 1056 2025 +92 549 1188 2025 +155 549 1188 2025 +92 569 1188 2025 +155 569 1188 2025 +20 509 1044 2026 +281 509 1044 2026 +20 510 1044 2026 +281 510 1044 2026 +20 509 1045 2026 +281 509 1045 2026 +20 511 1045 2026 +281 511 1045 2026 +20 510 1049 2026 +281 510 1049 2026 +20 512 1049 2026 +281 512 1049 2026 +20 511 1053 2026 +281 511 1053 2026 +20 512 1053 2026 +281 512 1053 2026 +20 509 1044 2027 +282 509 1044 2027 +20 510 1044 2027 +282 510 1044 2027 +20 509 1047 2027 +282 509 1047 2027 +20 515 1047 2027 +282 515 1047 2027 +20 510 1051 2027 +282 510 1051 2027 +20 517 1051 2027 +282 517 1051 2027 +20 515 1068 2027 +282 515 1068 2027 +20 517 1068 2027 +282 517 1068 2027 +136 509 1044 2028 +282 509 1044 2028 +136 510 1044 2028 +282 510 1044 2028 +282 509 1046 2028 +136 509 1046 2028 +282 513 1046 2028 +136 513 1046 2028 +282 510 1050 2028 +136 510 1050 2028 +282 514 1050 2028 +136 514 1050 2028 +136 513 1060 2028 +282 513 1060 2028 +136 514 1060 2028 +282 514 1060 2028 +20 509 1045 2029 +286 509 1045 2029 +20 511 1045 2029 +286 511 1045 2029 +20 509 1047 2029 +286 509 1047 2029 +20 515 1047 2029 +286 515 1047 2029 +20 511 1055 2029 +286 511 1055 2029 +20 524 1055 2029 +286 524 1055 2029 +20 515 1070 2029 +286 515 1070 2029 +20 524 1070 2029 +286 524 1070 2029 +138 509 1045 2030 +286 509 1045 2030 +138 511 1045 2030 +286 511 1045 2030 +286 509 1048 2030 +138 509 1048 2030 +286 521 1048 2030 +138 521 1048 2030 +286 511 1054 2030 +138 511 1054 2030 +286 522 1054 2030 +138 522 1054 2030 +138 521 1091 2030 +286 521 1091 2030 +138 522 1091 2030 +286 522 1091 2030 +81 509 1046 2031 +140 509 1046 2031 +81 513 1046 2031 +140 513 1046 2031 +81 509 1048 2031 +140 509 1048 2031 +81 521 1048 2031 +140 521 1048 2031 +81 513 1063 2031 +140 513 1063 2031 +81 519 1063 2031 +140 519 1063 2031 +81 519 1086 2031 +140 519 1086 2031 +81 521 1086 2031 +140 521 1086 2031 +282 509 1046 2032 +140 509 1046 2032 +282 513 1046 2032 +140 513 1046 2032 +140 509 1047 2032 +282 509 1047 2032 +140 515 1047 2032 +282 515 1047 2032 +140 513 1061 2032 +282 513 1061 2032 +140 516 1061 2032 +282 516 1061 2032 +282 515 1067 2032 +140 515 1067 2032 +282 516 1067 2032 +140 516 1067 2032 +140 509 1047 2033 +286 509 1047 2033 +140 515 1047 2033 +286 515 1047 2033 +286 509 1048 2033 +140 509 1048 2033 +286 521 1048 2033 +140 521 1048 2033 +286 515 1069 2033 +140 515 1069 2033 +286 523 1069 2033 +140 523 1069 2033 +140 521 1092 2033 +286 521 1092 2033 +140 523 1092 2033 +286 523 1092 2033 +20 510 1049 2034 +291 510 1049 2034 +20 512 1049 2034 +291 512 1049 2034 +20 510 1051 2034 +291 510 1051 2034 +20 517 1051 2034 +291 517 1051 2034 +20 512 1058 2034 +291 512 1058 2034 +20 532 1058 2034 +291 532 1058 2034 +20 517 1078 2034 +291 517 1078 2034 +20 532 1078 2034 +291 532 1078 2034 +142 510 1049 2035 +291 510 1049 2035 +142 512 1049 2035 +291 512 1049 2035 +291 510 1052 2035 +142 510 1052 2035 +291 529 1052 2035 +142 529 1052 2035 +291 512 1057 2035 +142 512 1057 2035 +291 530 1057 2035 +142 530 1057 2035 +142 529 1119 2035 +291 529 1119 2035 +142 530 1119 2035 +291 530 1119 2035 +82 510 1050 2036 +144 510 1050 2036 +82 514 1050 2036 +144 514 1050 2036 +82 510 1052 2036 +144 510 1052 2036 +82 529 1052 2036 +144 529 1052 2036 +82 514 1066 2036 +144 514 1066 2036 +82 526 1066 2036 +144 526 1066 2036 +82 526 1110 2036 +144 526 1110 2036 +82 529 1110 2036 +144 529 1110 2036 +282 510 1050 2037 +144 510 1050 2037 +282 514 1050 2037 +144 514 1050 2037 +144 510 1051 2037 +282 510 1051 2037 +144 517 1051 2037 +282 517 1051 2037 +144 514 1064 2037 +282 514 1064 2037 +144 518 1064 2037 +282 518 1064 2037 +282 517 1076 2037 +144 517 1076 2037 +282 518 1076 2037 +144 518 1076 2037 +144 510 1051 2038 +291 510 1051 2038 +144 517 1051 2038 +291 517 1051 2038 +291 510 1052 2038 +144 510 1052 2038 +291 529 1052 2038 +144 529 1052 2038 +291 517 1077 2038 +144 517 1077 2038 +291 531 1077 2038 +144 531 1077 2038 +144 529 1120 2038 +291 529 1120 2038 +144 531 1120 2038 +291 531 1120 2038 +20 511 1053 2039 +309 511 1053 2039 +20 512 1053 2039 +309 512 1053 2039 +20 511 1055 2039 +309 511 1055 2039 +20 524 1055 2039 +309 524 1055 2039 +20 512 1058 2039 +309 512 1058 2039 +20 532 1058 2039 +309 532 1058 2039 +20 524 1102 2039 +309 524 1102 2039 +20 532 1102 2039 +309 532 1102 2039 +155 511 1053 2040 +309 511 1053 2040 +155 512 1053 2040 +309 512 1053 2040 +309 511 1056 2040 +155 511 1056 2040 +309 569 1056 2040 +155 569 1056 2040 +309 512 1059 2040 +155 512 1059 2040 +309 568 1059 2040 +155 568 1059 2040 +155 568 1249 2040 +309 568 1249 2040 +155 569 1249 2040 +309 569 1249 2040 +92 511 1054 2041 +181 511 1054 2041 +92 522 1054 2041 +181 522 1054 2041 +92 511 1056 2041 +181 511 1056 2041 +92 569 1056 2041 +181 569 1056 2041 +92 522 1096 2041 +181 522 1096 2041 +92 599 1096 2041 +181 599 1096 2041 +92 569 1254 2041 +181 569 1254 2041 +92 599 1254 2041 +181 599 1254 2041 +286 511 1054 2042 +181 511 1054 2042 +286 522 1054 2042 +181 522 1054 2042 +181 511 1055 2042 +286 511 1055 2042 +181 524 1055 2042 +286 524 1055 2042 +181 522 1094 2042 +286 522 1094 2042 +181 525 1094 2042 +286 525 1094 2042 +286 524 1100 2042 +181 524 1100 2042 +286 525 1100 2042 +181 525 1100 2042 +181 511 1055 2043 +309 511 1055 2043 +181 524 1055 2043 +309 524 1055 2043 +309 511 1056 2043 +181 511 1056 2043 +309 569 1056 2043 +181 569 1056 2043 +309 524 1101 2043 +181 524 1101 2043 +309 571 1101 2043 +181 571 1101 2043 +181 569 1252 2043 +309 569 1252 2043 +181 571 1252 2043 +309 571 1252 2043 +85 512 1057 2044 +157 512 1057 2044 +85 530 1057 2044 +157 530 1057 2044 +85 512 1059 2044 +157 512 1059 2044 +85 568 1059 2044 +157 568 1059 2044 +85 530 1124 2044 +157 530 1124 2044 +85 563 1124 2044 +157 563 1124 2044 +85 563 1235 2044 +157 563 1235 2044 +85 568 1235 2044 +157 568 1235 2044 +291 512 1057 2045 +157 512 1057 2045 +291 530 1057 2045 +157 530 1057 2045 +157 512 1058 2045 +291 512 1058 2045 +157 532 1058 2045 +291 532 1058 2045 +157 530 1122 2045 +291 530 1122 2045 +157 533 1122 2045 +291 533 1122 2045 +291 532 1128 2045 +157 532 1128 2045 +291 533 1128 2045 +157 533 1128 2045 +157 512 1058 2046 +309 512 1058 2046 +157 532 1058 2046 +309 532 1058 2046 +309 512 1059 2046 +157 512 1059 2046 +309 568 1059 2046 +157 568 1059 2046 +309 532 1129 2046 +157 532 1129 2046 +309 570 1129 2046 +157 570 1129 2046 +157 568 1250 2046 +309 568 1250 2046 +157 570 1250 2046 +309 570 1250 2046 +33 513 1060 2047 +282 513 1060 2047 +33 514 1060 2047 +282 514 1060 2047 +33 513 1061 2047 +282 513 1061 2047 +33 516 1061 2047 +282 516 1061 2047 +33 514 1064 2047 +282 514 1064 2047 +33 518 1064 2047 +282 518 1064 2047 +33 516 1072 2047 +282 516 1072 2047 +33 518 1072 2047 +282 518 1072 2047 +33 513 1060 2048 +283 513 1060 2048 +33 514 1060 2048 +283 514 1060 2048 +33 513 1062 2048 +283 513 1062 2048 +33 514 1065 2048 +283 514 1065 2048 +33 513 1061 2049 +285 513 1061 2049 +33 516 1061 2049 +285 516 1061 2049 +33 513 1062 2049 +285 513 1062 2049 +33 516 1074 2049 +285 516 1074 2049 +140 513 1061 2050 +285 513 1061 2050 +140 516 1061 2050 +285 516 1061 2050 +285 513 1063 2050 +140 513 1063 2050 +285 519 1063 2050 +140 519 1063 2050 +285 516 1073 2050 +140 516 1073 2050 +285 520 1073 2050 +140 520 1073 2050 +140 519 1085 2050 +285 519 1085 2050 +140 520 1085 2050 +285 520 1085 2050 +137 513 1062 2051 +285 513 1062 2051 +285 513 1063 2051 +137 513 1063 2051 +285 519 1063 2051 +137 519 1063 2051 +137 519 1083 2051 +285 519 1083 2051 +33 514 1064 2052 +290 514 1064 2052 +33 518 1064 2052 +290 518 1064 2052 +33 514 1065 2052 +290 514 1065 2052 +33 518 1081 2052 +290 518 1081 2052 +144 514 1064 2053 +290 514 1064 2053 +144 518 1064 2053 +290 518 1064 2053 +290 514 1066 2053 +144 514 1066 2053 +290 526 1066 2053 +144 526 1066 2053 +290 518 1080 2053 +144 518 1080 2053 +290 528 1080 2053 +144 528 1080 2053 +144 526 1109 2053 +290 526 1109 2053 +144 528 1109 2053 +290 528 1109 2053 +141 514 1065 2054 +290 514 1065 2054 +290 514 1066 2054 +141 514 1066 2054 +290 526 1066 2054 +141 526 1066 2054 +141 526 1107 2054 +290 526 1107 2054 +99 515 1067 2055 +140 515 1067 2055 +99 516 1067 2055 +140 516 1067 2055 +99 515 1069 2055 +140 515 1069 2055 +99 523 1069 2055 +140 523 1069 2055 +99 516 1073 2055 +140 516 1073 2055 +99 520 1073 2055 +140 520 1073 2055 +99 520 1088 2055 +140 520 1088 2055 +99 523 1088 2055 +140 523 1088 2055 +99 515 1067 2056 +207 515 1067 2056 +99 516 1067 2056 +207 516 1067 2056 +99 515 1071 2056 +207 515 1071 2056 +99 634 1071 2056 +207 634 1071 2056 +99 516 1075 2056 +207 516 1075 2056 +99 630 1075 2056 +207 630 1075 2056 +99 630 1457 2056 +207 630 1457 2056 +99 634 1457 2056 +207 634 1457 2056 +282 515 1067 2057 +207 515 1067 2057 +282 516 1067 2057 +207 516 1067 2057 +207 515 1068 2057 +282 515 1068 2057 +207 517 1068 2057 +282 517 1068 2057 +207 516 1072 2057 +282 516 1072 2057 +207 518 1072 2057 +282 518 1072 2057 +282 517 1076 2057 +207 517 1076 2057 +282 518 1076 2057 +207 518 1076 2057 +20 515 1068 2058 +373 515 1068 2058 +20 517 1068 2058 +373 517 1068 2058 +20 515 1070 2058 +373 515 1070 2058 +20 524 1070 2058 +373 524 1070 2058 +20 517 1078 2058 +373 517 1078 2058 +20 532 1078 2058 +373 532 1078 2058 +20 524 1102 2058 +373 524 1102 2058 +20 532 1102 2058 +373 532 1102 2058 +207 515 1068 2059 +373 515 1068 2059 +207 517 1068 2059 +373 517 1068 2059 +373 515 1071 2059 +207 515 1071 2059 +373 634 1071 2059 +207 634 1071 2059 +373 517 1079 2059 +207 517 1079 2059 +373 635 1079 2059 +207 635 1079 2059 +207 634 1470 2059 +373 634 1470 2059 +207 635 1470 2059 +373 635 1470 2059 +99 515 1069 2060 +209 515 1069 2060 +99 523 1069 2060 +209 523 1069 2060 +99 515 1071 2060 +209 515 1071 2060 +99 634 1071 2060 +209 634 1071 2060 +99 523 1099 2060 +209 523 1099 2060 +99 632 1099 2060 +209 632 1099 2060 +99 632 1465 2060 +209 632 1465 2060 +99 634 1465 2060 +209 634 1465 2060 +286 515 1069 2061 +209 515 1069 2061 +286 523 1069 2061 +209 523 1069 2061 +209 515 1070 2061 +286 515 1070 2061 +209 524 1070 2061 +286 524 1070 2061 +209 523 1097 2061 +286 523 1097 2061 +209 525 1097 2061 +286 525 1097 2061 +286 524 1100 2061 +209 524 1100 2061 +286 525 1100 2061 +209 525 1100 2061 +209 515 1070 2062 +373 515 1070 2062 +209 524 1070 2062 +373 524 1070 2062 +373 515 1071 2062 +209 515 1071 2062 +373 634 1071 2062 +209 634 1071 2062 +373 524 1103 2062 +209 524 1103 2062 +373 636 1103 2062 +209 636 1103 2062 +209 634 1471 2062 +373 634 1471 2062 +209 636 1471 2062 +373 636 1471 2062 +33 516 1072 2063 +370 516 1072 2063 +33 518 1072 2063 +370 518 1072 2063 +33 516 1074 2063 +370 516 1074 2063 +33 518 1081 2063 +370 518 1081 2063 +207 516 1072 2064 +370 516 1072 2064 +207 518 1072 2064 +370 518 1072 2064 +370 516 1075 2064 +207 516 1075 2064 +370 630 1075 2064 +207 630 1075 2064 +370 518 1082 2064 +207 518 1082 2064 +370 631 1082 2064 +207 631 1082 2064 +207 630 1456 2064 +370 630 1456 2064 +207 631 1456 2064 +370 631 1456 2064 +99 516 1073 2065 +205 516 1073 2065 +99 520 1073 2065 +205 520 1073 2065 +99 516 1075 2065 +205 516 1075 2065 +99 630 1075 2065 +205 630 1075 2065 +99 520 1090 2065 +205 520 1090 2065 +99 629 1090 2065 +205 629 1090 2065 +99 629 1451 2065 +205 629 1451 2065 +99 630 1451 2065 +205 630 1451 2065 +285 516 1073 2066 +205 516 1073 2066 +285 520 1073 2066 +205 520 1073 2066 +205 516 1074 2066 +285 516 1074 2066 +205 520 1087 2066 +285 520 1087 2066 +205 516 1074 2067 +370 516 1074 2067 +370 516 1075 2067 +205 516 1075 2067 +370 630 1075 2067 +205 630 1075 2067 +205 630 1454 2067 +370 630 1454 2067 +100 517 1076 2068 +144 517 1076 2068 +100 518 1076 2068 +144 518 1076 2068 +100 517 1077 2068 +144 517 1077 2068 +100 531 1077 2068 +144 531 1077 2068 +100 518 1080 2068 +144 518 1080 2068 +100 528 1080 2068 +144 528 1080 2068 +100 528 1116 2068 +144 528 1116 2068 +100 531 1116 2068 +144 531 1116 2068 +100 517 1076 2069 +207 517 1076 2069 +100 518 1076 2069 +207 518 1076 2069 +100 517 1079 2069 +207 517 1079 2069 +100 635 1079 2069 +207 635 1079 2069 +100 518 1082 2069 +207 518 1082 2069 +100 631 1082 2069 +207 631 1082 2069 +100 631 1459 2069 +207 631 1459 2069 +100 635 1459 2069 +207 635 1459 2069 +100 517 1077 2070 +213 517 1077 2070 +100 531 1077 2070 +213 531 1077 2070 +100 517 1079 2070 +213 517 1079 2070 +100 635 1079 2070 +213 635 1079 2070 +100 531 1127 2070 +213 531 1127 2070 +100 640 1127 2070 +213 640 1127 2070 +100 635 1475 2070 +213 635 1475 2070 +100 640 1475 2070 +213 640 1475 2070 +291 517 1077 2071 +213 517 1077 2071 +291 531 1077 2071 +213 531 1077 2071 +213 517 1078 2071 +291 517 1078 2071 +213 532 1078 2071 +291 532 1078 2071 +213 531 1125 2071 +291 531 1125 2071 +213 533 1125 2071 +291 533 1125 2071 +291 532 1128 2071 +213 532 1128 2071 +291 533 1128 2071 +213 533 1128 2071 +213 517 1078 2072 +373 517 1078 2072 +213 532 1078 2072 +373 532 1078 2072 +373 517 1079 2072 +213 517 1079 2072 +373 635 1079 2072 +213 635 1079 2072 +373 532 1130 2072 +213 532 1130 2072 +373 637 1130 2072 +213 637 1130 2072 +213 635 1473 2072 +373 635 1473 2072 +213 637 1473 2072 +373 637 1473 2072 +100 518 1080 2073 +210 518 1080 2073 +100 528 1080 2073 +210 528 1080 2073 +100 518 1082 2073 +210 518 1082 2073 +100 631 1082 2073 +210 631 1082 2073 +100 528 1118 2073 +210 528 1118 2073 +100 638 1118 2073 +210 638 1118 2073 +100 631 1461 2073 +210 631 1461 2073 +100 638 1461 2073 +210 638 1461 2073 +290 518 1080 2074 +210 518 1080 2074 +290 528 1080 2074 +210 528 1080 2074 +210 518 1081 2074 +290 518 1081 2074 +210 528 1115 2074 +290 528 1115 2074 +210 518 1081 2075 +370 518 1081 2075 +370 518 1082 2075 +210 518 1082 2075 +370 631 1082 2075 +210 631 1082 2075 +210 631 1458 2075 +370 631 1458 2075 +62 519 1083 2076 +284 519 1083 2076 +62 519 1084 2076 +284 519 1084 2076 +62 519 1083 2077 +285 519 1083 2077 +62 519 1085 2077 +285 519 1085 2077 +62 520 1085 2077 +285 520 1085 2077 +62 520 1087 2077 +285 520 1087 2077 +62 519 1084 2078 +288 519 1084 2078 +62 519 1085 2078 +288 519 1085 2078 +62 520 1085 2078 +288 520 1085 2078 +62 520 1089 2078 +288 520 1089 2078 +139 519 1084 2079 +288 519 1084 2079 +288 519 1086 2079 +139 519 1086 2079 +288 521 1086 2079 +139 521 1086 2079 +139 521 1093 2079 +288 521 1093 2079 +140 519 1085 2080 +288 519 1085 2080 +140 520 1085 2080 +288 520 1085 2080 +288 519 1086 2080 +140 519 1086 2080 +288 521 1086 2080 +140 521 1086 2080 +288 520 1088 2080 +140 520 1088 2080 +288 523 1088 2080 +140 523 1088 2080 +140 521 1092 2080 +288 521 1092 2080 +140 523 1092 2080 +288 523 1092 2080 +62 520 1087 2081 +368 520 1087 2081 +62 520 1089 2081 +368 520 1089 2081 +205 520 1087 2082 +368 520 1087 2082 +368 520 1090 2082 +205 520 1090 2082 +368 629 1090 2082 +205 629 1090 2082 +205 629 1449 2082 +368 629 1449 2082 +99 520 1088 2083 +206 520 1088 2083 +99 523 1088 2083 +206 523 1088 2083 +99 520 1090 2083 +206 520 1090 2083 +99 629 1090 2083 +206 629 1090 2083 +99 523 1099 2083 +206 523 1099 2083 +99 632 1099 2083 +206 632 1099 2083 +99 629 1453 2083 +206 629 1453 2083 +99 632 1453 2083 +206 632 1453 2083 +288 520 1088 2084 +206 520 1088 2084 +288 523 1088 2084 +206 523 1088 2084 +206 520 1089 2084 +288 520 1089 2084 +206 523 1098 2084 +288 523 1098 2084 +206 520 1089 2085 +368 520 1089 2085 +368 520 1090 2085 +206 520 1090 2085 +368 629 1090 2085 +206 629 1090 2085 +206 629 1450 2085 +368 629 1450 2085 +34 521 1091 2086 +286 521 1091 2086 +34 522 1091 2086 +286 522 1091 2086 +34 521 1092 2086 +286 521 1092 2086 +34 523 1092 2086 +286 523 1092 2086 +34 522 1094 2086 +286 522 1094 2086 +34 525 1094 2086 +286 525 1094 2086 +34 523 1097 2086 +286 523 1097 2086 +34 525 1097 2086 +286 525 1097 2086 +34 521 1091 2087 +287 521 1091 2087 +34 522 1091 2087 +287 522 1091 2087 +34 521 1093 2087 +287 521 1093 2087 +34 522 1095 2087 +287 522 1095 2087 +34 521 1092 2088 +288 521 1092 2088 +34 523 1092 2088 +288 523 1092 2088 +34 521 1093 2088 +288 521 1093 2088 +34 523 1098 2088 +288 523 1098 2088 +34 522 1094 2089 +338 522 1094 2089 +34 525 1094 2089 +338 525 1094 2089 +34 522 1095 2089 +338 522 1095 2089 +34 525 1105 2089 +338 525 1105 2089 +181 522 1094 2090 +338 522 1094 2090 +181 525 1094 2090 +338 525 1094 2090 +338 522 1096 2090 +181 522 1096 2090 +338 599 1096 2090 +181 599 1096 2090 +338 525 1104 2090 +181 525 1104 2090 +338 600 1104 2090 +181 600 1104 2090 +181 599 1350 2090 +338 599 1350 2090 +181 600 1350 2090 +338 600 1350 2090 +180 522 1095 2091 +338 522 1095 2091 +338 522 1096 2091 +180 522 1096 2091 +338 599 1096 2091 +180 599 1096 2091 +180 599 1349 2091 +338 599 1349 2091 +34 523 1097 2092 +372 523 1097 2092 +34 525 1097 2092 +372 525 1097 2092 +34 523 1098 2092 +372 523 1098 2092 +34 525 1105 2092 +372 525 1105 2092 +209 523 1097 2093 +372 523 1097 2093 +209 525 1097 2093 +372 525 1097 2093 +372 523 1099 2093 +209 523 1099 2093 +372 632 1099 2093 +209 632 1099 2093 +372 525 1106 2093 +209 525 1106 2093 +372 633 1106 2093 +209 633 1106 2093 +209 632 1464 2093 +372 632 1464 2093 +209 633 1464 2093 +372 633 1464 2093 +206 523 1098 2094 +372 523 1098 2094 +372 523 1099 2094 +206 523 1099 2094 +372 632 1099 2094 +206 632 1099 2094 +206 632 1462 2094 +372 632 1462 2094 +102 524 1100 2095 +181 524 1100 2095 +102 525 1100 2095 +181 525 1100 2095 +102 524 1101 2095 +181 524 1101 2095 +102 571 1101 2095 +181 571 1101 2095 +102 525 1104 2095 +181 525 1104 2095 +102 600 1104 2095 +181 600 1104 2095 +102 571 1258 2095 +181 571 1258 2095 +102 600 1258 2095 +181 600 1258 2095 +102 524 1100 2096 +209 524 1100 2096 +102 525 1100 2096 +209 525 1100 2096 +102 524 1103 2096 +209 524 1103 2096 +102 636 1103 2096 +209 636 1103 2096 +102 525 1106 2096 +209 525 1106 2096 +102 633 1106 2096 +209 633 1106 2096 +102 633 1467 2096 +209 633 1467 2096 +102 636 1467 2096 +209 636 1467 2096 +102 524 1101 2097 +221 524 1101 2097 +102 571 1101 2097 +221 571 1101 2097 +102 524 1103 2097 +221 524 1103 2097 +102 636 1103 2097 +221 636 1103 2097 +102 571 1260 2097 +221 571 1260 2097 +102 651 1260 2097 +221 651 1260 2097 +102 636 1478 2097 +221 636 1478 2097 +102 651 1478 2097 +221 651 1478 2097 +309 524 1101 2098 +221 524 1101 2098 +309 571 1101 2098 +221 571 1101 2098 +221 524 1102 2098 +309 524 1102 2098 +221 532 1102 2098 +309 532 1102 2098 +309 532 1129 2098 +221 532 1129 2098 +309 570 1129 2098 +221 570 1129 2098 +221 570 1255 2098 +309 570 1255 2098 +221 571 1255 2098 +309 571 1255 2098 +221 524 1102 2099 +373 524 1102 2099 +221 532 1102 2099 +373 532 1102 2099 +373 524 1103 2099 +221 524 1103 2099 +373 636 1103 2099 +221 636 1103 2099 +373 532 1130 2099 +221 532 1130 2099 +373 637 1130 2099 +221 637 1130 2099 +221 636 1476 2099 +373 636 1476 2099 +221 637 1476 2099 +373 637 1476 2099 +102 525 1104 2100 +218 525 1104 2100 +102 600 1104 2100 +218 600 1104 2100 +102 525 1106 2100 +218 525 1106 2100 +102 633 1106 2100 +218 633 1106 2100 +102 600 1353 2100 +218 600 1353 2100 +102 650 1353 2100 +218 650 1353 2100 +102 633 1469 2100 +218 633 1469 2100 +102 650 1469 2100 +218 650 1469 2100 +338 525 1104 2101 +218 525 1104 2101 +338 600 1104 2101 +218 600 1104 2101 +218 525 1105 2101 +338 525 1105 2101 +218 600 1352 2101 +338 600 1352 2101 +218 525 1105 2102 +372 525 1105 2102 +372 525 1106 2102 +218 525 1106 2102 +372 633 1106 2102 +218 633 1106 2102 +218 633 1466 2102 +372 633 1466 2102 +64 526 1107 2103 +289 526 1107 2103 +64 526 1108 2103 +289 526 1108 2103 +64 527 1108 2103 +289 527 1108 2103 +64 527 1111 2103 +289 527 1111 2103 +64 526 1107 2104 +290 526 1107 2104 +64 526 1109 2104 +290 526 1109 2104 +64 528 1109 2104 +290 528 1109 2104 +64 528 1115 2104 +290 528 1115 2104 +64 526 1108 2105 +293 526 1108 2105 +64 527 1108 2105 +293 527 1108 2105 +64 526 1109 2105 +293 526 1109 2105 +64 528 1109 2105 +293 528 1109 2105 +64 527 1113 2105 +293 527 1113 2105 +64 536 1113 2105 +293 536 1113 2105 +64 528 1117 2105 +293 528 1117 2105 +64 536 1117 2105 +293 536 1117 2105 +143 526 1108 2106 +293 526 1108 2106 +143 527 1108 2106 +293 527 1108 2106 +293 526 1110 2106 +143 526 1110 2106 +293 529 1110 2106 +143 529 1110 2106 +293 527 1112 2106 +143 527 1112 2106 +293 534 1112 2106 +143 534 1112 2106 +143 529 1121 2106 +293 529 1121 2106 +143 534 1121 2106 +293 534 1121 2106 +144 526 1109 2107 +293 526 1109 2107 +144 528 1109 2107 +293 528 1109 2107 +293 526 1110 2107 +144 526 1110 2107 +293 529 1110 2107 +144 529 1110 2107 +293 528 1116 2107 +144 528 1116 2107 +293 531 1116 2107 +144 531 1116 2107 +144 529 1120 2107 +293 529 1120 2107 +144 531 1120 2107 +293 531 1120 2107 +64 527 1111 2108 +319 527 1111 2108 +64 527 1113 2108 +319 527 1113 2108 +64 536 1113 2108 +319 536 1113 2108 +64 536 1142 2108 +319 536 1142 2108 +163 527 1111 2109 +319 527 1111 2109 +319 527 1114 2109 +163 527 1114 2109 +319 583 1114 2109 +163 583 1114 2109 +163 583 1300 2109 +319 583 1300 2109 +87 527 1112 2110 +164 527 1112 2110 +87 534 1112 2110 +164 534 1112 2110 +87 527 1114 2110 +164 527 1114 2110 +87 583 1114 2110 +164 583 1114 2110 +87 534 1136 2110 +164 534 1136 2110 +87 573 1136 2110 +164 573 1136 2110 +87 573 1267 2110 +164 573 1267 2110 +87 583 1267 2110 +164 583 1267 2110 +293 527 1112 2111 +164 527 1112 2111 +293 534 1112 2111 +164 534 1112 2111 +164 527 1113 2111 +293 527 1113 2111 +164 536 1113 2111 +293 536 1113 2111 +164 534 1135 2111 +293 534 1135 2111 +164 537 1135 2111 +293 537 1135 2111 +293 536 1140 2111 +164 536 1140 2111 +293 537 1140 2111 +164 537 1140 2111 +164 527 1113 2112 +319 527 1113 2112 +164 536 1113 2112 +319 536 1113 2112 +319 527 1114 2112 +164 527 1114 2112 +319 583 1114 2112 +164 583 1114 2112 +319 536 1141 2112 +164 536 1141 2112 +319 585 1141 2112 +164 585 1141 2112 +164 583 1299 2112 +319 583 1299 2112 +164 585 1299 2112 +319 585 1299 2112 +64 528 1115 2113 +377 528 1115 2113 +64 528 1117 2113 +377 528 1117 2113 +64 536 1117 2113 +377 536 1117 2113 +64 536 1142 2113 +377 536 1142 2113 +210 528 1115 2114 +377 528 1115 2114 +377 528 1118 2114 +210 528 1118 2114 +377 638 1118 2114 +210 638 1118 2114 +210 638 1482 2114 +377 638 1482 2114 +100 528 1116 2115 +212 528 1116 2115 +100 531 1116 2115 +212 531 1116 2115 +100 528 1118 2115 +212 528 1118 2115 +100 638 1118 2115 +212 638 1118 2115 +100 531 1127 2115 +212 531 1127 2115 +100 640 1127 2115 +212 640 1127 2115 +100 638 1485 2115 +212 638 1485 2115 +100 640 1485 2115 +212 640 1485 2115 +293 528 1116 2116 +212 528 1116 2116 +293 531 1116 2116 +212 531 1116 2116 +212 528 1117 2116 +293 528 1117 2116 +212 536 1117 2116 +293 536 1117 2116 +212 531 1126 2116 +293 531 1126 2116 +212 537 1126 2116 +293 537 1126 2116 +293 536 1140 2116 +212 536 1140 2116 +293 537 1140 2116 +212 537 1140 2116 +212 528 1117 2117 +377 528 1117 2117 +212 536 1117 2117 +377 536 1117 2117 +377 528 1118 2117 +212 528 1118 2117 +377 638 1118 2117 +212 638 1118 2117 +377 536 1143 2117 +212 536 1143 2117 +377 639 1143 2117 +212 639 1143 2117 +212 638 1484 2117 +377 638 1484 2117 +212 639 1484 2117 +377 639 1484 2117 +35 529 1119 2118 +291 529 1119 2118 +35 530 1119 2118 +291 530 1119 2118 +35 529 1120 2118 +291 529 1120 2118 +35 531 1120 2118 +291 531 1120 2118 +35 530 1122 2118 +291 530 1122 2118 +35 533 1122 2118 +291 533 1122 2118 +35 531 1125 2118 +291 531 1125 2118 +35 533 1125 2118 +291 533 1125 2118 +35 529 1119 2119 +292 529 1119 2119 +35 530 1119 2119 +292 530 1119 2119 +35 529 1121 2119 +292 529 1121 2119 +35 534 1121 2119 +292 534 1121 2119 +35 530 1123 2119 +292 530 1123 2119 +35 535 1123 2119 +292 535 1123 2119 +35 534 1134 2119 +292 534 1134 2119 +35 535 1134 2119 +292 535 1134 2119 +35 529 1120 2120 +293 529 1120 2120 +35 531 1120 2120 +293 531 1120 2120 +35 529 1121 2120 +293 529 1121 2120 +35 534 1121 2120 +293 534 1121 2120 +35 531 1126 2120 +293 531 1126 2120 +35 537 1126 2120 +293 537 1126 2120 +35 534 1135 2120 +293 534 1135 2120 +35 537 1135 2120 +293 537 1135 2120 +35 530 1122 2121 +308 530 1122 2121 +35 533 1122 2121 +308 533 1122 2121 +35 530 1123 2121 +308 530 1123 2121 +35 535 1123 2121 +308 535 1123 2121 +35 533 1132 2121 +308 533 1132 2121 +35 567 1132 2121 +308 567 1132 2121 +35 535 1138 2121 +308 535 1138 2121 +35 567 1138 2121 +308 567 1138 2121 +157 530 1122 2122 +308 530 1122 2122 +157 533 1122 2122 +308 533 1122 2122 +308 530 1124 2122 +157 530 1124 2122 +308 563 1124 2122 +157 563 1124 2122 +308 533 1131 2122 +157 533 1131 2122 +308 565 1131 2122 +157 565 1131 2122 +157 563 1234 2122 +308 563 1234 2122 +157 565 1234 2122 +308 565 1234 2122 +154 530 1123 2123 +308 530 1123 2123 +154 535 1123 2123 +308 535 1123 2123 +308 530 1124 2123 +154 530 1124 2123 +308 563 1124 2123 +154 563 1124 2123 +308 535 1137 2123 +154 535 1137 2123 +308 564 1137 2123 +154 564 1137 2123 +154 563 1232 2123 +308 563 1232 2123 +154 564 1232 2123 +308 564 1232 2123 +35 531 1125 2124 +380 531 1125 2124 +35 533 1125 2124 +380 533 1125 2124 +35 531 1126 2124 +380 531 1126 2124 +35 537 1126 2124 +380 537 1126 2124 +35 533 1132 2124 +380 533 1132 2124 +35 567 1132 2124 +380 567 1132 2124 +35 537 1145 2124 +380 537 1145 2124 +35 567 1145 2124 +380 567 1145 2124 +213 531 1125 2125 +380 531 1125 2125 +213 533 1125 2125 +380 533 1125 2125 +380 531 1127 2125 +213 531 1127 2125 +380 640 1127 2125 +213 640 1127 2125 +380 533 1133 2125 +213 533 1133 2125 +380 642 1133 2125 +213 642 1133 2125 +213 640 1492 2125 +380 640 1492 2125 +213 642 1492 2125 +380 642 1492 2125 +212 531 1126 2126 +380 531 1126 2126 +212 537 1126 2126 +380 537 1126 2126 +380 531 1127 2126 +212 531 1127 2126 +380 640 1127 2126 +212 640 1127 2126 +380 537 1146 2126 +212 537 1146 2126 +380 641 1146 2126 +212 641 1146 2126 +212 640 1491 2126 +380 640 1491 2126 +212 641 1491 2126 +380 641 1491 2126 +103 532 1128 2127 +157 532 1128 2127 +103 533 1128 2127 +157 533 1128 2127 +103 532 1129 2127 +157 532 1129 2127 +103 570 1129 2127 +157 570 1129 2127 +103 533 1131 2127 +157 533 1131 2127 +103 565 1131 2127 +157 565 1131 2127 +103 565 1240 2127 +157 565 1240 2127 +103 570 1240 2127 +157 570 1240 2127 +103 532 1128 2128 +213 532 1128 2128 +103 533 1128 2128 +213 533 1128 2128 +103 532 1130 2128 +213 532 1130 2128 +103 637 1130 2128 +213 637 1130 2128 +103 533 1133 2128 +213 533 1133 2128 +103 642 1133 2128 +213 642 1133 2128 +103 637 1479 2128 +213 637 1479 2128 +103 642 1479 2128 +213 642 1479 2128 +103 532 1129 2129 +221 532 1129 2129 +103 570 1129 2129 +221 570 1129 2129 +103 532 1130 2129 +221 532 1130 2129 +103 637 1130 2129 +221 637 1130 2129 +103 570 1257 2129 +221 570 1257 2129 +103 652 1257 2129 +221 652 1257 2129 +103 637 1481 2129 +221 637 1481 2129 +103 652 1481 2129 +221 652 1481 2129 +103 533 1131 2130 +222 533 1131 2130 +103 565 1131 2130 +222 565 1131 2130 +103 533 1133 2130 +222 533 1133 2130 +103 642 1133 2130 +222 642 1133 2130 +103 565 1242 2130 +222 565 1242 2130 +103 653 1242 2130 +222 653 1242 2130 +103 642 1498 2130 +222 642 1498 2130 +103 653 1498 2130 +222 653 1498 2130 +308 533 1131 2131 +222 533 1131 2131 +308 565 1131 2131 +222 565 1131 2131 +222 533 1132 2131 +308 533 1132 2131 +222 567 1132 2131 +308 567 1132 2131 +222 565 1239 2131 +308 565 1239 2131 +222 566 1239 2131 +308 566 1239 2131 +308 566 1243 2131 +222 566 1243 2131 +308 567 1243 2131 +222 567 1243 2131 +222 533 1132 2132 +380 533 1132 2132 +222 567 1132 2132 +380 567 1132 2132 +380 533 1133 2132 +222 533 1133 2132 +380 642 1133 2132 +222 642 1133 2132 +380 567 1248 2132 +222 567 1248 2132 +380 643 1248 2132 +222 643 1248 2132 +222 642 1497 2132 +380 642 1497 2132 +222 643 1497 2132 +380 643 1497 2132 +35 534 1134 2133 +313 534 1134 2133 +35 535 1134 2133 +313 535 1134 2133 +35 534 1135 2133 +313 534 1135 2133 +35 537 1135 2133 +313 537 1135 2133 +35 535 1138 2133 +313 535 1138 2133 +35 567 1138 2133 +313 567 1138 2133 +35 537 1145 2133 +313 537 1145 2133 +35 567 1145 2133 +313 567 1145 2133 +158 534 1134 2134 +313 534 1134 2134 +158 535 1134 2134 +313 535 1134 2134 +313 534 1136 2134 +158 534 1136 2134 +313 573 1136 2134 +158 573 1136 2134 +313 535 1139 2134 +158 535 1139 2134 +313 572 1139 2134 +158 572 1139 2134 +158 572 1261 2134 +313 572 1261 2134 +158 573 1261 2134 +313 573 1261 2134 +164 534 1135 2135 +313 534 1135 2135 +164 537 1135 2135 +313 537 1135 2135 +313 534 1136 2135 +164 534 1136 2135 +313 573 1136 2135 +164 573 1136 2135 +313 537 1144 2135 +164 537 1144 2135 +313 577 1144 2135 +164 577 1144 2135 +164 573 1266 2135 +313 573 1266 2135 +164 577 1266 2135 +313 577 1266 2135 +86 535 1137 2136 +161 535 1137 2136 +86 564 1137 2136 +161 564 1137 2136 +86 535 1139 2136 +161 535 1139 2136 +86 572 1139 2136 +161 572 1139 2136 +86 564 1238 2136 +161 564 1238 2136 +86 578 1238 2136 +161 578 1238 2136 +86 572 1264 2136 +161 572 1264 2136 +86 578 1264 2136 +161 578 1264 2136 +308 535 1137 2137 +161 535 1137 2137 +308 564 1137 2137 +161 564 1137 2137 +161 535 1138 2137 +308 535 1138 2137 +161 567 1138 2137 +308 567 1138 2137 +161 564 1237 2137 +308 564 1237 2137 +161 566 1237 2137 +308 566 1237 2137 +308 566 1243 2137 +161 566 1243 2137 +308 567 1243 2137 +161 567 1243 2137 +161 535 1138 2138 +313 535 1138 2138 +161 567 1138 2138 +313 567 1138 2138 +313 535 1139 2138 +161 535 1139 2138 +313 572 1139 2138 +161 572 1139 2138 +313 567 1247 2138 +161 567 1247 2138 +313 576 1247 2138 +161 576 1247 2138 +161 572 1263 2138 +313 572 1263 2138 +161 576 1263 2138 +313 576 1263 2138 +101 536 1140 2139 +164 536 1140 2139 +101 537 1140 2139 +164 537 1140 2139 +101 536 1141 2139 +164 536 1141 2139 +101 585 1141 2139 +164 585 1141 2139 +101 537 1144 2139 +164 537 1144 2139 +101 577 1144 2139 +164 577 1144 2139 +101 577 1279 2139 +164 577 1279 2139 +101 585 1279 2139 +164 585 1279 2139 +101 536 1140 2140 +212 536 1140 2140 +101 537 1140 2140 +212 537 1140 2140 +101 536 1143 2140 +212 536 1143 2140 +101 639 1143 2140 +212 639 1143 2140 +101 537 1146 2140 +212 537 1146 2140 +101 641 1146 2140 +212 641 1146 2140 +101 639 1487 2140 +212 639 1487 2140 +101 641 1487 2140 +212 641 1487 2140 +101 536 1141 2141 +214 536 1141 2141 +101 585 1141 2141 +214 585 1141 2141 +101 536 1143 2141 +214 536 1143 2141 +101 639 1143 2141 +214 639 1143 2141 +101 585 1306 2141 +214 585 1306 2141 +101 644 1306 2141 +214 644 1306 2141 +101 639 1489 2141 +214 639 1489 2141 +101 644 1489 2141 +214 644 1489 2141 +319 536 1141 2142 +214 536 1141 2142 +319 585 1141 2142 +214 585 1141 2142 +214 536 1142 2142 +319 536 1142 2142 +214 585 1305 2142 +319 585 1305 2142 +214 536 1142 2143 +377 536 1142 2143 +377 536 1143 2143 +214 536 1143 2143 +377 639 1143 2143 +214 639 1143 2143 +214 639 1486 2143 +377 639 1486 2143 +101 537 1144 2144 +215 537 1144 2144 +101 577 1144 2144 +215 577 1144 2144 +101 537 1146 2144 +215 537 1146 2144 +101 641 1146 2144 +215 641 1146 2144 +101 577 1281 2144 +215 577 1281 2144 +101 646 1281 2144 +215 646 1281 2144 +101 641 1495 2144 +215 641 1495 2144 +101 646 1495 2144 +215 646 1495 2144 +313 537 1144 2145 +215 537 1144 2145 +313 577 1144 2145 +215 577 1144 2145 +215 537 1145 2145 +313 537 1145 2145 +215 567 1145 2145 +313 567 1145 2145 +313 567 1247 2145 +215 567 1247 2145 +313 576 1247 2145 +215 576 1247 2145 +215 576 1275 2145 +313 576 1275 2145 +215 577 1275 2145 +313 577 1275 2145 +215 537 1145 2146 +380 537 1145 2146 +215 567 1145 2146 +380 567 1145 2146 +380 537 1146 2146 +215 537 1146 2146 +380 641 1146 2146 +215 641 1146 2146 +380 567 1248 2146 +215 567 1248 2146 +380 643 1248 2146 +215 643 1248 2146 +215 641 1494 2146 +380 641 1494 2146 +215 643 1494 2146 +380 643 1494 2146 +13 538 1147 2147 +294 538 1147 2147 +13 539 1147 2147 +294 539 1147 2147 +13 538 1148 2147 +294 538 1148 2147 +13 540 1148 2147 +294 540 1148 2147 +13 539 1152 2147 +294 539 1152 2147 +13 541 1152 2147 +294 541 1152 2147 +13 540 1156 2147 +294 540 1156 2147 +13 541 1156 2147 +294 541 1156 2147 +13 538 1147 2148 +295 538 1147 2148 +13 539 1147 2148 +295 539 1147 2148 +13 538 1150 2148 +295 538 1150 2148 +13 539 1154 2148 +295 539 1154 2148 +145 538 1147 2149 +295 538 1147 2149 +145 539 1147 2149 +295 539 1147 2149 +295 538 1149 2149 +145 538 1149 2149 +295 542 1149 2149 +145 542 1149 2149 +295 539 1153 2149 +145 539 1153 2149 +295 543 1153 2149 +145 543 1153 2149 +145 542 1163 2149 +295 542 1163 2149 +145 543 1163 2149 +295 543 1163 2149 +13 538 1148 2150 +297 538 1148 2150 +13 540 1148 2150 +297 540 1148 2150 +13 538 1150 2150 +297 538 1150 2150 +13 540 1158 2150 +297 540 1158 2150 +146 538 1148 2151 +297 538 1148 2151 +146 540 1148 2151 +297 540 1148 2151 +297 538 1151 2151 +146 538 1151 2151 +297 546 1151 2151 +146 546 1151 2151 +297 540 1157 2151 +146 540 1157 2151 +297 547 1157 2151 +146 547 1157 2151 +146 546 1177 2151 +297 546 1177 2151 +146 547 1177 2151 +297 547 1177 2151 +83 538 1149 2152 +148 538 1149 2152 +83 542 1149 2152 +148 542 1149 2152 +83 538 1151 2152 +148 538 1151 2152 +83 546 1151 2152 +148 546 1151 2152 +83 542 1166 2152 +148 542 1166 2152 +83 550 1166 2152 +148 550 1166 2152 +83 546 1180 2152 +148 546 1180 2152 +83 550 1180 2152 +148 550 1180 2152 +295 538 1149 2153 +148 538 1149 2153 +295 542 1149 2153 +148 542 1149 2153 +148 538 1150 2153 +295 538 1150 2153 +148 542 1164 2153 +295 542 1164 2153 +148 538 1150 2154 +297 538 1150 2154 +297 538 1151 2154 +148 538 1151 2154 +297 546 1151 2154 +148 546 1151 2154 +148 546 1178 2154 +297 546 1178 2154 +13 539 1152 2155 +302 539 1152 2155 +13 541 1152 2155 +302 541 1152 2155 +13 539 1154 2155 +302 539 1154 2155 +13 541 1161 2155 +302 541 1161 2155 +150 539 1152 2156 +302 539 1152 2156 +150 541 1152 2156 +302 541 1152 2156 +302 539 1155 2156 +150 539 1155 2156 +302 554 1155 2156 +150 554 1155 2156 +302 541 1160 2156 +150 541 1160 2156 +302 555 1160 2156 +150 555 1160 2156 +150 554 1203 2156 +302 554 1203 2156 +150 555 1203 2156 +302 555 1203 2156 +84 539 1153 2157 +152 539 1153 2157 +84 543 1153 2157 +152 543 1153 2157 +84 539 1155 2157 +152 539 1155 2157 +84 554 1155 2157 +152 554 1155 2157 +84 543 1169 2157 +152 543 1169 2157 +84 559 1169 2157 +152 559 1169 2157 +84 554 1206 2157 +152 554 1206 2157 +84 559 1206 2157 +152 559 1206 2157 +295 539 1153 2158 +152 539 1153 2158 +295 543 1153 2158 +152 543 1153 2158 +152 539 1154 2158 +295 539 1154 2158 +152 543 1167 2158 +295 543 1167 2158 +152 539 1154 2159 +302 539 1154 2159 +302 539 1155 2159 +152 539 1155 2159 +302 554 1155 2159 +152 554 1155 2159 +152 554 1204 2159 +302 554 1204 2159 +13 540 1156 2160 +307 540 1156 2160 +13 541 1156 2160 +307 541 1156 2160 +13 540 1158 2160 +307 540 1158 2160 +13 541 1161 2160 +307 541 1161 2160 +154 540 1156 2161 +307 540 1156 2161 +154 541 1156 2161 +307 541 1156 2161 +307 540 1159 2161 +154 540 1159 2161 +307 563 1159 2161 +154 563 1159 2161 +307 541 1162 2161 +154 541 1162 2161 +307 564 1162 2161 +154 564 1162 2161 +154 563 1232 2161 +307 563 1232 2161 +154 564 1232 2161 +307 564 1232 2161 +85 540 1157 2162 +156 540 1157 2162 +85 547 1157 2162 +156 547 1157 2162 +85 540 1159 2162 +156 540 1159 2162 +85 563 1159 2162 +156 563 1159 2162 +85 547 1183 2162 +156 547 1183 2162 +85 568 1183 2162 +156 568 1183 2162 +85 563 1235 2162 +156 563 1235 2162 +85 568 1235 2162 +156 568 1235 2162 +297 540 1157 2163 +156 540 1157 2163 +297 547 1157 2163 +156 547 1157 2163 +156 540 1158 2163 +297 540 1158 2163 +156 547 1181 2163 +297 547 1181 2163 +156 540 1158 2164 +307 540 1158 2164 +307 540 1159 2164 +156 540 1159 2164 +307 563 1159 2164 +156 563 1159 2164 +156 563 1233 2164 +307 563 1233 2164 +86 541 1160 2165 +160 541 1160 2165 +86 555 1160 2165 +160 555 1160 2165 +86 541 1162 2165 +160 541 1162 2165 +86 564 1162 2165 +160 564 1162 2165 +86 555 1209 2165 +160 555 1209 2165 +86 578 1209 2165 +160 578 1209 2165 +86 564 1238 2165 +160 564 1238 2165 +86 578 1238 2165 +160 578 1238 2165 +302 541 1160 2166 +160 541 1160 2166 +302 555 1160 2166 +160 555 1160 2166 +160 541 1161 2166 +302 541 1161 2166 +160 555 1207 2166 +302 555 1207 2166 +160 541 1161 2167 +307 541 1161 2167 +307 541 1162 2167 +160 541 1162 2167 +307 564 1162 2167 +160 564 1162 2167 +160 564 1236 2167 +307 564 1236 2167 +47 542 1163 2168 +295 542 1163 2168 +47 543 1163 2168 +295 543 1163 2168 +47 542 1164 2168 +295 542 1164 2168 +47 543 1167 2168 +295 543 1167 2168 +47 542 1163 2169 +296 542 1163 2169 +47 543 1163 2169 +296 543 1163 2169 +47 542 1165 2169 +296 542 1165 2169 +47 544 1165 2169 +296 544 1165 2169 +47 543 1168 2169 +296 543 1168 2169 +47 545 1168 2169 +296 545 1168 2169 +47 544 1170 2169 +296 544 1170 2169 +47 545 1170 2169 +296 545 1170 2169 +47 542 1164 2170 +300 542 1164 2170 +47 542 1165 2170 +300 542 1165 2170 +47 544 1165 2170 +300 544 1165 2170 +47 544 1172 2170 +300 544 1172 2170 +148 542 1164 2171 +300 542 1164 2171 +300 542 1166 2171 +148 542 1166 2171 +300 550 1166 2171 +148 550 1166 2171 +148 550 1193 2171 +300 550 1193 2171 +147 542 1165 2172 +300 542 1165 2172 +147 544 1165 2172 +300 544 1165 2172 +300 542 1166 2172 +147 542 1166 2172 +300 550 1166 2172 +147 550 1166 2172 +300 544 1171 2172 +147 544 1171 2172 +300 551 1171 2172 +147 551 1171 2172 +147 550 1191 2172 +300 550 1191 2172 +147 551 1191 2172 +300 551 1191 2172 +47 543 1167 2173 +305 543 1167 2173 +47 543 1168 2173 +305 543 1168 2173 +47 545 1168 2173 +305 545 1168 2173 +47 545 1175 2173 +305 545 1175 2173 +152 543 1167 2174 +305 543 1167 2174 +305 543 1169 2174 +152 543 1169 2174 +305 559 1169 2174 +152 559 1169 2174 +152 559 1222 2174 +305 559 1222 2174 +151 543 1168 2175 +305 543 1168 2175 +151 545 1168 2175 +305 545 1168 2175 +305 543 1169 2175 +151 543 1169 2175 +305 559 1169 2175 +151 559 1169 2175 +305 545 1174 2175 +151 545 1174 2175 +305 560 1174 2175 +151 560 1174 2175 +151 559 1220 2175 +305 559 1220 2175 +151 560 1220 2175 +305 560 1220 2175 +47 544 1170 2176 +320 544 1170 2176 +47 545 1170 2176 +320 545 1170 2176 +47 544 1172 2176 +320 544 1172 2176 +47 545 1175 2176 +320 545 1175 2176 +165 544 1170 2177 +320 544 1170 2177 +165 545 1170 2177 +320 545 1170 2177 +320 544 1173 2177 +165 544 1173 2177 +320 588 1173 2177 +165 588 1173 2177 +320 545 1176 2177 +165 545 1176 2177 +320 589 1176 2177 +165 589 1176 2177 +165 588 1313 2177 +320 588 1313 2177 +165 589 1313 2177 +320 589 1313 2177 +88 544 1171 2178 +166 544 1171 2178 +88 551 1171 2178 +166 551 1171 2178 +88 544 1173 2178 +166 544 1173 2178 +88 588 1173 2178 +166 588 1173 2178 +88 551 1196 2178 +166 551 1196 2178 +88 590 1196 2178 +166 590 1196 2178 +88 588 1316 2178 +166 588 1316 2178 +88 590 1316 2178 +166 590 1316 2178 +300 544 1171 2179 +166 544 1171 2179 +300 551 1171 2179 +166 551 1171 2179 +166 544 1172 2179 +300 544 1172 2179 +166 551 1195 2179 +300 551 1195 2179 +166 544 1172 2180 +320 544 1172 2180 +320 544 1173 2180 +166 544 1173 2180 +320 588 1173 2180 +166 588 1173 2180 +166 588 1314 2180 +320 588 1314 2180 +89 545 1174 2181 +169 545 1174 2181 +89 560 1174 2181 +169 560 1174 2181 +89 545 1176 2181 +169 545 1176 2181 +89 589 1176 2181 +169 589 1176 2181 +89 560 1225 2181 +169 560 1225 2181 +89 592 1225 2181 +169 592 1225 2181 +89 589 1319 2181 +169 589 1319 2181 +89 592 1319 2181 +169 592 1319 2181 +305 545 1174 2182 +169 545 1174 2182 +305 560 1174 2182 +169 560 1174 2182 +169 545 1175 2182 +305 545 1175 2182 +169 560 1224 2182 +305 560 1224 2182 +169 545 1175 2183 +320 545 1175 2183 +320 545 1176 2183 +169 545 1176 2183 +320 589 1176 2183 +169 589 1176 2183 +169 589 1317 2183 +320 589 1317 2183 +51 546 1177 2184 +297 546 1177 2184 +51 547 1177 2184 +297 547 1177 2184 +51 546 1178 2184 +297 546 1178 2184 +51 547 1181 2184 +297 547 1181 2184 +51 546 1177 2185 +298 546 1177 2185 +51 547 1177 2185 +298 547 1177 2185 +51 546 1179 2185 +298 546 1179 2185 +51 548 1179 2185 +298 548 1179 2185 +51 547 1182 2185 +298 547 1182 2185 +51 549 1182 2185 +298 549 1182 2185 +51 548 1184 2185 +298 548 1184 2185 +51 549 1184 2185 +298 549 1184 2185 +51 546 1178 2186 +301 546 1178 2186 +51 546 1179 2186 +301 546 1179 2186 +51 548 1179 2186 +301 548 1179 2186 +51 548 1186 2186 +301 548 1186 2186 +148 546 1178 2187 +301 546 1178 2187 +301 546 1180 2187 +148 546 1180 2187 +301 550 1180 2187 +148 550 1180 2187 +148 550 1193 2187 +301 550 1193 2187 +149 546 1179 2188 +301 546 1179 2188 +149 548 1179 2188 +301 548 1179 2188 +301 546 1180 2188 +149 546 1180 2188 +301 550 1180 2188 +149 550 1180 2188 +301 548 1185 2188 +149 548 1185 2188 +301 552 1185 2188 +149 552 1185 2188 +149 550 1192 2188 +301 550 1192 2188 +149 552 1192 2188 +301 552 1192 2188 +51 547 1181 2189 +310 547 1181 2189 +51 547 1182 2189 +310 547 1182 2189 +51 549 1182 2189 +310 549 1182 2189 +51 549 1189 2189 +310 549 1189 2189 +156 547 1181 2190 +310 547 1181 2190 +310 547 1183 2190 +156 547 1183 2190 +310 568 1183 2190 +156 568 1183 2190 +156 568 1251 2190 +310 568 1251 2190 +155 547 1182 2191 +310 547 1182 2191 +155 549 1182 2191 +310 549 1182 2191 +310 547 1183 2191 +155 547 1183 2191 +310 568 1183 2191 +155 568 1183 2191 +310 549 1188 2191 +155 549 1188 2191 +310 569 1188 2191 +155 569 1188 2191 +155 568 1249 2191 +310 568 1249 2191 +155 569 1249 2191 +310 569 1249 2191 +51 548 1184 2192 +333 548 1184 2192 +51 549 1184 2192 +333 549 1184 2192 +51 548 1186 2192 +333 548 1186 2192 +51 549 1189 2192 +333 549 1189 2192 +177 548 1184 2193 +333 548 1184 2193 +177 549 1184 2193 +333 549 1184 2193 +333 548 1187 2193 +177 548 1187 2193 +333 597 1187 2193 +177 597 1187 2193 +333 549 1190 2193 +177 549 1190 2193 +333 598 1190 2193 +177 598 1190 2193 +177 597 1343 2193 +333 597 1343 2193 +177 598 1343 2193 +333 598 1343 2193 +91 548 1185 2194 +176 548 1185 2194 +91 552 1185 2194 +176 552 1185 2194 +91 548 1187 2194 +176 548 1187 2194 +91 597 1187 2194 +176 597 1187 2194 +91 552 1199 2194 +176 552 1199 2194 +91 596 1199 2194 +176 596 1199 2194 +91 596 1341 2194 +176 596 1341 2194 +91 597 1341 2194 +176 597 1341 2194 +301 548 1185 2195 +176 548 1185 2195 +301 552 1185 2195 +176 552 1185 2195 +176 548 1186 2195 +301 548 1186 2195 +176 552 1198 2195 +301 552 1198 2195 +176 548 1186 2196 +333 548 1186 2196 +333 548 1187 2196 +176 548 1187 2196 +333 597 1187 2196 +176 597 1187 2196 +176 597 1342 2196 +333 597 1342 2196 +92 549 1188 2197 +179 549 1188 2197 +92 569 1188 2197 +179 569 1188 2197 +92 549 1190 2197 +179 549 1190 2197 +92 598 1190 2197 +179 598 1190 2197 +92 569 1254 2197 +179 569 1254 2197 +92 599 1254 2197 +179 599 1254 2197 +92 598 1347 2197 +179 598 1347 2197 +92 599 1347 2197 +179 599 1347 2197 +310 549 1188 2198 +179 549 1188 2198 +310 569 1188 2198 +179 569 1188 2198 +179 549 1189 2198 +310 549 1189 2198 +179 569 1253 2198 +310 569 1253 2198 +179 549 1189 2199 +333 549 1189 2199 +333 549 1190 2199 +179 549 1190 2199 +333 598 1190 2199 +179 598 1190 2199 +179 598 1345 2199 +333 598 1345 2199 +25 550 1191 2200 +299 550 1191 2200 +25 551 1191 2200 +299 551 1191 2200 +25 550 1192 2200 +299 550 1192 2200 +25 552 1192 2200 +299 552 1192 2200 +25 551 1194 2200 +299 551 1194 2200 +25 553 1194 2200 +299 553 1194 2200 +25 552 1197 2200 +299 552 1197 2200 +25 553 1197 2200 +299 553 1197 2200 +25 550 1191 2201 +300 550 1191 2201 +25 551 1191 2201 +300 551 1191 2201 +25 550 1193 2201 +300 550 1193 2201 +25 551 1195 2201 +300 551 1195 2201 +25 550 1192 2202 +301 550 1192 2202 +25 552 1192 2202 +301 552 1192 2202 +25 550 1193 2202 +301 550 1193 2202 +25 552 1198 2202 +301 552 1198 2202 +25 551 1194 2203 +323 551 1194 2203 +25 553 1194 2203 +323 553 1194 2203 +25 551 1195 2203 +323 551 1195 2203 +25 553 1201 2203 +323 553 1201 2203 +168 551 1194 2204 +323 551 1194 2204 +168 553 1194 2204 +323 553 1194 2204 +323 551 1196 2204 +168 551 1196 2204 +323 590 1196 2204 +168 590 1196 2204 +323 553 1200 2204 +168 553 1200 2204 +323 591 1200 2204 +168 591 1200 2204 +168 590 1322 2204 +323 590 1322 2204 +168 591 1322 2204 +323 591 1322 2204 +166 551 1195 2205 +323 551 1195 2205 +323 551 1196 2205 +166 551 1196 2205 +323 590 1196 2205 +166 590 1196 2205 +166 590 1320 2205 +323 590 1320 2205 +25 552 1197 2206 +332 552 1197 2206 +25 553 1197 2206 +332 553 1197 2206 +25 552 1198 2206 +332 552 1198 2206 +25 553 1201 2206 +332 553 1201 2206 +175 552 1197 2207 +332 552 1197 2207 +175 553 1197 2207 +332 553 1197 2207 +332 552 1199 2207 +175 552 1199 2207 +332 596 1199 2207 +175 596 1199 2207 +332 553 1202 2207 +175 553 1202 2207 +332 595 1202 2207 +175 595 1202 2207 +175 595 1338 2207 +332 595 1338 2207 +175 596 1338 2207 +332 596 1338 2207 +176 552 1198 2208 +332 552 1198 2208 +332 552 1199 2208 +176 552 1199 2208 +332 596 1199 2208 +176 596 1199 2208 +176 596 1340 2208 +332 596 1340 2208 +90 553 1200 2209 +174 553 1200 2209 +90 591 1200 2209 +174 591 1200 2209 +90 553 1202 2209 +174 553 1202 2209 +90 595 1202 2209 +174 595 1202 2209 +90 591 1325 2209 +174 591 1325 2209 +90 594 1325 2209 +174 594 1325 2209 +90 594 1335 2209 +174 594 1335 2209 +90 595 1335 2209 +174 595 1335 2209 +323 553 1200 2210 +174 553 1200 2210 +323 591 1200 2210 +174 591 1200 2210 +174 553 1201 2210 +323 553 1201 2210 +174 591 1323 2210 +323 591 1323 2210 +174 553 1201 2211 +332 553 1201 2211 +332 553 1202 2211 +174 553 1202 2211 +332 595 1202 2211 +174 595 1202 2211 +174 595 1337 2211 +332 595 1337 2211 +59 554 1203 2212 +302 554 1203 2212 +59 555 1203 2212 +302 555 1203 2212 +59 554 1204 2212 +302 554 1204 2212 +59 555 1207 2212 +302 555 1207 2212 +59 554 1203 2213 +303 554 1203 2213 +59 555 1203 2213 +303 555 1203 2213 +59 554 1205 2213 +303 554 1205 2213 +59 556 1205 2213 +303 556 1205 2213 +59 555 1208 2213 +303 555 1208 2213 +59 557 1208 2213 +303 557 1208 2213 +59 556 1210 2213 +303 556 1210 2213 +59 557 1210 2213 +303 557 1210 2213 +59 554 1204 2214 +306 554 1204 2214 +59 554 1205 2214 +306 554 1205 2214 +59 556 1205 2214 +306 556 1205 2214 +59 556 1212 2214 +306 556 1212 2214 +152 554 1204 2215 +306 554 1204 2215 +306 554 1206 2215 +152 554 1206 2215 +306 559 1206 2215 +152 559 1206 2215 +152 559 1222 2215 +306 559 1222 2215 +153 554 1205 2216 +306 554 1205 2216 +153 556 1205 2216 +306 556 1205 2216 +306 554 1206 2216 +153 554 1206 2216 +306 559 1206 2216 +153 559 1206 2216 +306 556 1211 2216 +153 556 1211 2216 +306 561 1211 2216 +153 561 1211 2216 +153 559 1221 2216 +306 559 1221 2216 +153 561 1221 2216 +306 561 1221 2216 +59 555 1207 2217 +315 555 1207 2217 +59 555 1208 2217 +315 555 1208 2217 +59 557 1208 2217 +315 557 1208 2217 +59 557 1216 2217 +315 557 1216 2217 +160 555 1207 2218 +315 555 1207 2218 +315 555 1209 2218 +160 555 1209 2218 +315 578 1209 2218 +160 578 1209 2218 +160 578 1284 2218 +315 578 1284 2218 +159 555 1208 2219 +315 555 1208 2219 +159 557 1208 2219 +315 557 1208 2219 +315 555 1209 2219 +159 555 1209 2219 +315 578 1209 2219 +159 578 1209 2219 +315 557 1215 2219 +159 557 1215 2219 +315 579 1215 2219 +159 579 1215 2219 +159 578 1282 2219 +315 578 1282 2219 +159 579 1282 2219 +315 579 1282 2219 +59 556 1210 2220 +362 556 1210 2220 +59 557 1210 2220 +362 557 1210 2220 +59 556 1212 2220 +362 556 1212 2220 +59 557 1216 2220 +362 557 1216 2220 +199 556 1210 2221 +362 556 1210 2221 +199 557 1210 2221 +362 557 1210 2221 +362 556 1213 2221 +199 556 1213 2221 +362 625 1213 2221 +199 625 1213 2221 +362 557 1217 2221 +199 557 1217 2221 +362 626 1217 2221 +199 626 1217 2221 +199 625 1437 2221 +362 625 1437 2221 +199 626 1437 2221 +362 626 1437 2221 +97 556 1211 2222 +200 556 1211 2222 +97 561 1211 2222 +200 561 1211 2222 +97 556 1213 2222 +200 556 1213 2222 +97 625 1213 2222 +200 625 1213 2222 +97 561 1228 2222 +200 561 1228 2222 +97 612 1228 2222 +200 612 1228 2222 +97 612 1396 2222 +200 612 1396 2222 +97 625 1396 2222 +200 625 1396 2222 +306 556 1211 2223 +200 556 1211 2223 +306 561 1211 2223 +200 561 1211 2223 +200 556 1212 2223 +306 556 1212 2223 +200 561 1227 2223 +306 561 1227 2223 +200 556 1212 2224 +362 556 1212 2224 +362 556 1213 2224 +200 556 1213 2224 +362 625 1213 2224 +200 625 1213 2224 +200 625 1438 2224 +362 625 1438 2224 +98 557 1214 2225 +159 557 1214 2225 +98 558 1214 2225 +159 558 1214 2225 +98 557 1215 2225 +159 557 1215 2225 +98 579 1215 2225 +159 579 1215 2225 +98 558 1218 2225 +159 558 1218 2225 +98 574 1218 2225 +159 574 1218 2225 +98 574 1269 2225 +159 574 1269 2225 +98 579 1269 2225 +159 579 1269 2225 +98 557 1214 2226 +199 557 1214 2226 +98 558 1214 2226 +199 558 1214 2226 +98 557 1217 2226 +199 557 1217 2226 +98 626 1217 2226 +199 626 1217 2226 +98 558 1219 2226 +199 558 1219 2226 +98 618 1219 2226 +199 618 1219 2226 +98 618 1416 2226 +199 618 1416 2226 +98 626 1416 2226 +199 626 1416 2226 +98 557 1215 2227 +202 557 1215 2227 +98 579 1215 2227 +202 579 1215 2227 +98 557 1217 2227 +202 557 1217 2227 +98 626 1217 2227 +202 626 1217 2227 +98 579 1287 2227 +202 579 1287 2227 +98 627 1287 2227 +202 627 1287 2227 +98 626 1442 2227 +202 626 1442 2227 +98 627 1442 2227 +202 627 1442 2227 +315 557 1215 2228 +202 557 1215 2228 +315 579 1215 2228 +202 579 1215 2228 +202 557 1216 2228 +315 557 1216 2228 +202 579 1286 2228 +315 579 1286 2228 +202 557 1216 2229 +362 557 1216 2229 +362 557 1217 2229 +202 557 1217 2229 +362 626 1217 2229 +202 626 1217 2229 +202 626 1440 2229 +362 626 1440 2229 +98 558 1218 2230 +196 558 1218 2230 +98 574 1218 2230 +196 574 1218 2230 +98 558 1219 2230 +196 558 1219 2230 +98 618 1219 2230 +196 618 1219 2230 +98 574 1271 2230 +196 574 1271 2230 +98 622 1271 2230 +196 622 1271 2230 +98 618 1414 2230 +196 618 1414 2230 +98 622 1414 2230 +196 622 1414 2230 +32 559 1220 2231 +304 559 1220 2231 +32 560 1220 2231 +304 560 1220 2231 +32 559 1221 2231 +304 559 1221 2231 +32 561 1221 2231 +304 561 1221 2231 +32 560 1223 2231 +304 560 1223 2231 +32 562 1223 2231 +304 562 1223 2231 +32 561 1226 2231 +304 561 1226 2231 +32 562 1226 2231 +304 562 1226 2231 +32 559 1220 2232 +305 559 1220 2232 +32 560 1220 2232 +305 560 1220 2232 +32 559 1222 2232 +305 559 1222 2232 +32 560 1224 2232 +305 560 1224 2232 +32 559 1221 2233 +306 559 1221 2233 +32 561 1221 2233 +306 561 1221 2233 +32 559 1222 2233 +306 559 1222 2233 +32 561 1227 2233 +306 561 1227 2233 +32 560 1223 2234 +326 560 1223 2234 +32 562 1223 2234 +326 562 1223 2234 +32 560 1224 2234 +326 560 1224 2234 +32 562 1230 2234 +326 562 1230 2234 +171 560 1223 2235 +326 560 1223 2235 +171 562 1223 2235 +326 562 1223 2235 +326 560 1225 2235 +171 560 1225 2235 +326 592 1225 2235 +171 592 1225 2235 +326 562 1229 2235 +171 562 1229 2235 +326 593 1229 2235 +171 593 1229 2235 +171 592 1328 2235 +326 592 1328 2235 +171 593 1328 2235 +326 593 1328 2235 +169 560 1224 2236 +326 560 1224 2236 +326 560 1225 2236 +169 560 1225 2236 +326 592 1225 2236 +169 592 1225 2236 +169 592 1326 2236 +326 592 1326 2236 +32 561 1226 2237 +351 561 1226 2237 +32 562 1226 2237 +351 562 1226 2237 +32 561 1227 2237 +351 561 1227 2237 +32 562 1230 2237 +351 562 1230 2237 +190 561 1226 2238 +351 561 1226 2238 +190 562 1226 2238 +351 562 1226 2238 +351 561 1228 2238 +190 561 1228 2238 +351 612 1228 2238 +190 612 1228 2238 +351 562 1231 2238 +190 562 1231 2238 +351 611 1231 2238 +190 611 1231 2238 +190 611 1393 2238 +351 611 1393 2238 +190 612 1393 2238 +351 612 1393 2238 +200 561 1227 2239 +351 561 1227 2239 +351 561 1228 2239 +200 561 1228 2239 +351 612 1228 2239 +200 612 1228 2239 +200 612 1395 2239 +351 612 1395 2239 +94 562 1229 2240 +189 562 1229 2240 +94 593 1229 2240 +189 593 1229 2240 +94 562 1231 2240 +189 562 1231 2240 +94 611 1231 2240 +189 611 1231 2240 +94 593 1331 2240 +189 593 1331 2240 +94 610 1331 2240 +189 610 1331 2240 +94 610 1390 2240 +189 610 1390 2240 +94 611 1390 2240 +189 611 1390 2240 +326 562 1229 2241 +189 562 1229 2241 +326 593 1229 2241 +189 593 1229 2241 +189 562 1230 2241 +326 562 1230 2241 +189 593 1329 2241 +326 593 1329 2241 +189 562 1230 2242 +351 562 1230 2242 +351 562 1231 2242 +189 562 1231 2242 +351 611 1231 2242 +189 611 1231 2242 +189 611 1392 2242 +351 611 1392 2242 +67 563 1232 2243 +307 563 1232 2243 +67 564 1232 2243 +307 564 1232 2243 +67 563 1233 2243 +307 563 1233 2243 +67 564 1236 2243 +307 564 1236 2243 +67 563 1232 2244 +308 563 1232 2244 +67 564 1232 2244 +308 564 1232 2244 +67 563 1234 2244 +308 563 1234 2244 +67 565 1234 2244 +308 565 1234 2244 +67 564 1237 2244 +308 564 1237 2244 +67 566 1237 2244 +308 566 1237 2244 +67 565 1239 2244 +308 565 1239 2244 +67 566 1239 2244 +308 566 1239 2244 +67 563 1233 2245 +311 563 1233 2245 +67 563 1234 2245 +311 563 1234 2245 +67 565 1234 2245 +311 565 1234 2245 +67 565 1241 2245 +311 565 1241 2245 +156 563 1233 2246 +311 563 1233 2246 +311 563 1235 2246 +156 563 1235 2246 +311 568 1235 2246 +156 568 1235 2246 +156 568 1251 2246 +311 568 1251 2246 +157 563 1234 2247 +311 563 1234 2247 +157 565 1234 2247 +311 565 1234 2247 +311 563 1235 2247 +157 563 1235 2247 +311 568 1235 2247 +157 568 1235 2247 +311 565 1240 2247 +157 565 1240 2247 +311 570 1240 2247 +157 570 1240 2247 +157 568 1250 2247 +311 568 1250 2247 +157 570 1250 2247 +311 570 1250 2247 +67 564 1236 2248 +316 564 1236 2248 +67 564 1237 2248 +316 564 1237 2248 +67 566 1237 2248 +316 566 1237 2248 +67 566 1245 2248 +316 566 1245 2248 +160 564 1236 2249 +316 564 1236 2249 +316 564 1238 2249 +160 564 1238 2249 +316 578 1238 2249 +160 578 1238 2249 +160 578 1284 2249 +316 578 1284 2249 +161 564 1237 2250 +316 564 1237 2250 +161 566 1237 2250 +316 566 1237 2250 +316 564 1238 2250 +161 564 1238 2250 +316 578 1238 2250 +161 578 1238 2250 +316 566 1244 2250 +161 566 1244 2250 +316 580 1244 2250 +161 580 1244 2250 +161 578 1283 2250 +316 578 1283 2250 +161 580 1283 2250 +316 580 1283 2250 +67 565 1239 2251 +391 565 1239 2251 +67 566 1239 2251 +391 566 1239 2251 +67 565 1241 2251 +391 565 1241 2251 +67 566 1245 2251 +391 566 1245 2251 +222 565 1239 2252 +391 565 1239 2252 +222 566 1239 2252 +391 566 1239 2252 +391 565 1242 2252 +222 565 1242 2252 +391 653 1242 2252 +222 653 1242 2252 +391 566 1246 2252 +222 566 1246 2252 +391 654 1246 2252 +222 654 1246 2252 +222 653 1532 2252 +391 653 1532 2252 +222 654 1532 2252 +391 654 1532 2252 +103 565 1240 2253 +223 565 1240 2253 +103 570 1240 2253 +223 570 1240 2253 +103 565 1242 2253 +223 565 1242 2253 +103 653 1242 2253 +223 653 1242 2253 +103 570 1257 2253 +223 570 1257 2253 +103 652 1257 2253 +223 652 1257 2253 +103 652 1531 2253 +223 652 1531 2253 +103 653 1531 2253 +223 653 1531 2253 +311 565 1240 2254 +223 565 1240 2254 +311 570 1240 2254 +223 570 1240 2254 +223 565 1241 2254 +311 565 1241 2254 +223 570 1256 2254 +311 570 1256 2254 +223 565 1241 2255 +391 565 1241 2255 +391 565 1242 2255 +223 565 1242 2255 +391 653 1242 2255 +223 653 1242 2255 +223 653 1533 2255 +391 653 1533 2255 +104 566 1243 2256 +161 566 1243 2256 +104 567 1243 2256 +161 567 1243 2256 +104 566 1244 2256 +161 566 1244 2256 +104 580 1244 2256 +161 580 1244 2256 +104 567 1247 2256 +161 567 1247 2256 +104 576 1247 2256 +161 576 1247 2256 +104 576 1276 2256 +161 576 1276 2256 +104 580 1276 2256 +161 580 1276 2256 +104 566 1243 2257 +222 566 1243 2257 +104 567 1243 2257 +222 567 1243 2257 +104 566 1246 2257 +222 566 1246 2257 +104 654 1246 2257 +222 654 1246 2257 +104 567 1248 2257 +222 567 1248 2257 +104 643 1248 2257 +222 643 1248 2257 +104 643 1501 2257 +222 643 1501 2257 +104 654 1501 2257 +222 654 1501 2257 +104 566 1244 2258 +225 566 1244 2258 +104 580 1244 2258 +225 580 1244 2258 +104 566 1246 2258 +225 566 1246 2258 +104 654 1246 2258 +225 654 1246 2258 +104 580 1290 2258 +225 580 1290 2258 +104 655 1290 2258 +225 655 1290 2258 +104 654 1537 2258 +225 654 1537 2258 +104 655 1537 2258 +225 655 1537 2258 +316 566 1244 2259 +225 566 1244 2259 +316 580 1244 2259 +225 580 1244 2259 +225 566 1245 2259 +316 566 1245 2259 +225 580 1289 2259 +316 580 1289 2259 +225 566 1245 2260 +391 566 1245 2260 +391 566 1246 2260 +225 566 1246 2260 +391 654 1246 2260 +225 654 1246 2260 +225 654 1535 2260 +391 654 1535 2260 +104 567 1247 2261 +215 567 1247 2261 +104 576 1247 2261 +215 576 1247 2261 +104 567 1248 2261 +215 567 1248 2261 +104 643 1248 2261 +215 643 1248 2261 +104 576 1278 2261 +215 576 1278 2261 +104 647 1278 2261 +215 647 1278 2261 +104 643 1499 2261 +215 643 1499 2261 +104 647 1499 2261 +215 647 1499 2261 +37 568 1249 2262 +309 568 1249 2262 +37 569 1249 2262 +309 569 1249 2262 +37 568 1250 2262 +309 568 1250 2262 +37 570 1250 2262 +309 570 1250 2262 +37 569 1252 2262 +309 569 1252 2262 +37 571 1252 2262 +309 571 1252 2262 +37 570 1255 2262 +309 570 1255 2262 +37 571 1255 2262 +309 571 1255 2262 +37 568 1249 2263 +310 568 1249 2263 +37 569 1249 2263 +310 569 1249 2263 +37 568 1251 2263 +310 568 1251 2263 +37 569 1253 2263 +310 569 1253 2263 +37 568 1250 2264 +311 568 1250 2264 +37 570 1250 2264 +311 570 1250 2264 +37 568 1251 2264 +311 568 1251 2264 +37 570 1256 2264 +311 570 1256 2264 +37 569 1252 2265 +337 569 1252 2265 +37 571 1252 2265 +337 571 1252 2265 +37 569 1253 2265 +337 569 1253 2265 +37 571 1259 2265 +337 571 1259 2265 +181 569 1252 2266 +337 569 1252 2266 +181 571 1252 2266 +337 571 1252 2266 +337 569 1254 2266 +181 569 1254 2266 +337 599 1254 2266 +181 599 1254 2266 +337 571 1258 2266 +181 571 1258 2266 +337 600 1258 2266 +181 600 1258 2266 +181 599 1350 2266 +337 599 1350 2266 +181 600 1350 2266 +337 600 1350 2266 +179 569 1253 2267 +337 569 1253 2267 +337 569 1254 2267 +179 569 1254 2267 +337 599 1254 2267 +179 599 1254 2267 +179 599 1348 2267 +337 599 1348 2267 +37 570 1255 2268 +390 570 1255 2268 +37 571 1255 2268 +390 571 1255 2268 +37 570 1256 2268 +390 570 1256 2268 +37 571 1259 2268 +390 571 1259 2268 +221 570 1255 2269 +390 570 1255 2269 +221 571 1255 2269 +390 571 1255 2269 +390 570 1257 2269 +221 570 1257 2269 +390 652 1257 2269 +221 652 1257 2269 +390 571 1260 2269 +221 571 1260 2269 +390 651 1260 2269 +221 651 1260 2269 +221 651 1528 2269 +390 651 1528 2269 +221 652 1528 2269 +390 652 1528 2269 +223 570 1256 2270 +390 570 1256 2270 +390 570 1257 2270 +223 570 1257 2270 +390 652 1257 2270 +223 652 1257 2270 +223 652 1530 2270 +390 652 1530 2270 +102 571 1258 2271 +220 571 1258 2271 +102 600 1258 2271 +220 600 1258 2271 +102 571 1260 2271 +220 571 1260 2271 +102 651 1260 2271 +220 651 1260 2271 +102 600 1353 2271 +220 600 1353 2271 +102 650 1353 2271 +220 650 1353 2271 +102 650 1525 2271 +220 650 1525 2271 +102 651 1525 2271 +220 651 1525 2271 +337 571 1258 2272 +220 571 1258 2272 +337 600 1258 2272 +220 600 1258 2272 +220 571 1259 2272 +337 571 1259 2272 +220 600 1351 2272 +337 600 1351 2272 +220 571 1259 2273 +390 571 1259 2273 +390 571 1260 2273 +220 571 1260 2273 +390 651 1260 2273 +220 651 1260 2273 +220 651 1527 2273 +390 651 1527 2273 +21 572 1261 2274 +312 572 1261 2274 +21 573 1261 2274 +312 573 1261 2274 +21 572 1262 2274 +312 572 1262 2274 +21 574 1262 2274 +312 574 1262 2274 +21 573 1265 2274 +312 573 1265 2274 +21 575 1265 2274 +312 575 1265 2274 +21 574 1268 2274 +312 574 1268 2274 +21 575 1268 2274 +312 575 1268 2274 +21 572 1261 2275 +313 572 1261 2275 +21 573 1261 2275 +313 573 1261 2275 +21 572 1263 2275 +313 572 1263 2275 +21 576 1263 2275 +313 576 1263 2275 +21 573 1266 2275 +313 573 1266 2275 +21 577 1266 2275 +313 577 1266 2275 +21 576 1275 2275 +313 576 1275 2275 +21 577 1275 2275 +313 577 1275 2275 +21 572 1262 2276 +314 572 1262 2276 +21 574 1262 2276 +314 574 1262 2276 +21 572 1263 2276 +314 572 1263 2276 +21 576 1263 2276 +314 576 1263 2276 +21 574 1270 2276 +314 574 1270 2276 +21 581 1270 2276 +314 581 1270 2276 +21 576 1277 2276 +314 576 1277 2276 +21 581 1277 2276 +314 581 1277 2276 +159 572 1262 2277 +314 572 1262 2277 +159 574 1262 2277 +314 574 1262 2277 +314 572 1264 2277 +159 572 1264 2277 +314 578 1264 2277 +159 578 1264 2277 +314 574 1269 2277 +159 574 1269 2277 +314 579 1269 2277 +159 579 1269 2277 +159 578 1282 2277 +314 578 1282 2277 +159 579 1282 2277 +314 579 1282 2277 +161 572 1263 2278 +314 572 1263 2278 +161 576 1263 2278 +314 576 1263 2278 +314 572 1264 2278 +161 572 1264 2278 +314 578 1264 2278 +161 578 1264 2278 +314 576 1276 2278 +161 576 1276 2278 +314 580 1276 2278 +161 580 1276 2278 +161 578 1283 2278 +314 578 1283 2278 +161 580 1283 2278 +314 580 1283 2278 +21 573 1265 2279 +317 573 1265 2279 +21 575 1265 2279 +317 575 1265 2279 +21 573 1266 2279 +317 573 1266 2279 +21 577 1266 2279 +317 577 1266 2279 +21 575 1273 2279 +317 575 1273 2279 +21 586 1273 2279 +317 586 1273 2279 +21 577 1280 2279 +317 577 1280 2279 +21 586 1280 2279 +317 586 1280 2279 +162 573 1265 2280 +317 573 1265 2280 +162 575 1265 2280 +317 575 1265 2280 +317 573 1267 2280 +162 573 1267 2280 +317 583 1267 2280 +162 583 1267 2280 +317 575 1272 2280 +162 575 1272 2280 +317 584 1272 2280 +162 584 1272 2280 +162 583 1298 2280 +317 583 1298 2280 +162 584 1298 2280 +317 584 1298 2280 +164 573 1266 2281 +317 573 1266 2281 +164 577 1266 2281 +317 577 1266 2281 +317 573 1267 2281 +164 573 1267 2281 +317 583 1267 2281 +164 583 1267 2281 +317 577 1279 2281 +164 577 1279 2281 +317 585 1279 2281 +164 585 1279 2281 +164 583 1299 2281 +317 583 1299 2281 +164 585 1299 2281 +317 585 1299 2281 +21 574 1268 2282 +359 574 1268 2282 +21 575 1268 2282 +359 575 1268 2282 +21 574 1270 2282 +359 574 1270 2282 +21 581 1270 2282 +359 581 1270 2282 +21 575 1273 2282 +359 575 1273 2282 +21 586 1273 2282 +359 586 1273 2282 +21 581 1293 2282 +359 581 1293 2282 +21 586 1293 2282 +359 586 1293 2282 +196 574 1268 2283 +359 574 1268 2283 +196 575 1268 2283 +359 575 1268 2283 +359 574 1271 2283 +196 574 1271 2283 +359 622 1271 2283 +196 622 1271 2283 +359 575 1274 2283 +196 575 1274 2283 +359 621 1274 2283 +196 621 1274 2283 +196 621 1425 2283 +359 621 1425 2283 +196 622 1425 2283 +359 622 1425 2283 +98 574 1269 2284 +204 574 1269 2284 +98 579 1269 2284 +204 579 1269 2284 +98 574 1271 2284 +204 574 1271 2284 +98 622 1271 2284 +204 622 1271 2284 +98 579 1287 2284 +204 579 1287 2284 +98 627 1287 2284 +204 627 1287 2284 +98 622 1430 2284 +204 622 1430 2284 +98 627 1430 2284 +204 627 1430 2284 +314 574 1269 2285 +204 574 1269 2285 +314 579 1269 2285 +204 579 1269 2285 +204 574 1270 2285 +314 574 1270 2285 +204 581 1270 2285 +314 581 1270 2285 +204 579 1285 2285 +314 579 1285 2285 +204 582 1285 2285 +314 582 1285 2285 +314 581 1291 2285 +204 581 1291 2285 +314 582 1291 2285 +204 582 1291 2285 +204 574 1270 2286 +359 574 1270 2286 +204 581 1270 2286 +359 581 1270 2286 +359 574 1271 2286 +204 574 1271 2286 +359 622 1271 2286 +204 622 1271 2286 +359 581 1292 2286 +204 581 1292 2286 +359 624 1292 2286 +204 624 1292 2286 +204 622 1428 2286 +359 622 1428 2286 +204 624 1428 2286 +359 624 1428 2286 +96 575 1272 2287 +198 575 1272 2287 +96 584 1272 2287 +198 584 1272 2287 +96 575 1274 2287 +198 575 1274 2287 +96 621 1274 2287 +198 621 1274 2287 +96 584 1303 2287 +198 584 1303 2287 +96 619 1303 2287 +198 619 1303 2287 +96 619 1420 2287 +198 619 1420 2287 +96 621 1420 2287 +198 621 1420 2287 +317 575 1272 2288 +198 575 1272 2288 +317 584 1272 2288 +198 584 1272 2288 +198 575 1273 2288 +317 575 1273 2288 +198 586 1273 2288 +317 586 1273 2288 +198 584 1301 2288 +317 584 1301 2288 +198 587 1301 2288 +317 587 1301 2288 +317 586 1307 2288 +198 586 1307 2288 +317 587 1307 2288 +198 587 1307 2288 +198 575 1273 2289 +359 575 1273 2289 +198 586 1273 2289 +359 586 1273 2289 +359 575 1274 2289 +198 575 1274 2289 +359 621 1274 2289 +198 621 1274 2289 +359 586 1308 2289 +198 586 1308 2289 +359 623 1308 2289 +198 623 1308 2289 +198 621 1426 2289 +359 621 1426 2289 +198 623 1426 2289 +359 623 1426 2289 +21 576 1275 2290 +383 576 1275 2290 +21 577 1275 2290 +383 577 1275 2290 +21 576 1277 2290 +383 576 1277 2290 +21 581 1277 2290 +383 581 1277 2290 +21 577 1280 2290 +383 577 1280 2290 +21 586 1280 2290 +383 586 1280 2290 +21 581 1293 2290 +383 581 1293 2290 +21 586 1293 2290 +383 586 1293 2290 +215 576 1275 2291 +383 576 1275 2291 +215 577 1275 2291 +383 577 1275 2291 +383 576 1278 2291 +215 576 1278 2291 +383 647 1278 2291 +215 647 1278 2291 +383 577 1281 2291 +215 577 1281 2291 +383 646 1281 2291 +215 646 1281 2291 +215 646 1510 2291 +383 646 1510 2291 +215 647 1510 2291 +383 647 1510 2291 +104 576 1276 2292 +227 576 1276 2292 +104 580 1276 2292 +227 580 1276 2292 +104 576 1278 2292 +227 576 1278 2292 +104 647 1278 2292 +227 647 1278 2292 +104 580 1290 2292 +227 580 1290 2292 +104 655 1290 2292 +227 655 1290 2292 +104 647 1515 2292 +227 647 1515 2292 +104 655 1515 2292 +227 655 1515 2292 +314 576 1276 2293 +227 576 1276 2293 +314 580 1276 2293 +227 580 1276 2293 +227 576 1277 2293 +314 576 1277 2293 +227 581 1277 2293 +314 581 1277 2293 +227 580 1288 2293 +314 580 1288 2293 +227 582 1288 2293 +314 582 1288 2293 +314 581 1291 2293 +227 581 1291 2293 +314 582 1291 2293 +227 582 1291 2293 +227 576 1277 2294 +383 576 1277 2294 +227 581 1277 2294 +383 581 1277 2294 +383 576 1278 2294 +227 576 1278 2294 +383 647 1278 2294 +227 647 1278 2294 +383 581 1294 2294 +227 581 1294 2294 +383 649 1294 2294 +227 649 1294 2294 +227 647 1513 2294 +383 647 1513 2294 +227 649 1513 2294 +383 649 1513 2294 +101 577 1279 2295 +217 577 1279 2295 +101 585 1279 2295 +217 585 1279 2295 +101 577 1281 2295 +217 577 1281 2295 +101 646 1281 2295 +217 646 1281 2295 +101 585 1306 2295 +217 585 1306 2295 +101 644 1306 2295 +217 644 1306 2295 +101 644 1505 2295 +217 644 1505 2295 +101 646 1505 2295 +217 646 1505 2295 +317 577 1279 2296 +217 577 1279 2296 +317 585 1279 2296 +217 585 1279 2296 +217 577 1280 2296 +317 577 1280 2296 +217 586 1280 2296 +317 586 1280 2296 +217 585 1304 2296 +317 585 1304 2296 +217 587 1304 2296 +317 587 1304 2296 +317 586 1307 2296 +217 586 1307 2296 +317 587 1307 2296 +217 587 1307 2296 +217 577 1280 2297 +383 577 1280 2297 +217 586 1280 2297 +383 586 1280 2297 +383 577 1281 2297 +217 577 1281 2297 +383 646 1281 2297 +217 646 1281 2297 +383 586 1309 2297 +217 586 1309 2297 +383 648 1309 2297 +217 648 1309 2297 +217 646 1511 2297 +383 646 1511 2297 +217 648 1511 2297 +383 648 1511 2297 +41 578 1282 2298 +314 578 1282 2298 +41 579 1282 2298 +314 579 1282 2298 +41 578 1283 2298 +314 578 1283 2298 +41 580 1283 2298 +314 580 1283 2298 +41 579 1285 2298 +314 579 1285 2298 +41 582 1285 2298 +314 582 1285 2298 +41 580 1288 2298 +314 580 1288 2298 +41 582 1288 2298 +314 582 1288 2298 +41 578 1282 2299 +315 578 1282 2299 +41 579 1282 2299 +315 579 1282 2299 +41 578 1284 2299 +315 578 1284 2299 +41 579 1286 2299 +315 579 1286 2299 +41 578 1283 2300 +316 578 1283 2300 +41 580 1283 2300 +316 580 1283 2300 +41 578 1284 2300 +316 578 1284 2300 +41 580 1289 2300 +316 580 1289 2300 +41 579 1285 2301 +366 579 1285 2301 +41 582 1285 2301 +366 582 1285 2301 +41 579 1286 2301 +366 579 1286 2301 +41 582 1296 2301 +366 582 1296 2301 +204 579 1285 2302 +366 579 1285 2302 +204 582 1285 2302 +366 582 1285 2302 +366 579 1287 2302 +204 579 1287 2302 +366 627 1287 2302 +204 627 1287 2302 +366 582 1295 2302 +204 582 1295 2302 +366 628 1295 2302 +204 628 1295 2302 +204 627 1445 2302 +366 627 1445 2302 +204 628 1445 2302 +366 628 1445 2302 +202 579 1286 2303 +366 579 1286 2303 +366 579 1287 2303 +202 579 1287 2303 +366 627 1287 2303 +202 627 1287 2303 +202 627 1443 2303 +366 627 1443 2303 +41 580 1288 2304 +395 580 1288 2304 +41 582 1288 2304 +395 582 1288 2304 +41 580 1289 2304 +395 580 1289 2304 +41 582 1296 2304 +395 582 1296 2304 +227 580 1288 2305 +395 580 1288 2305 +227 582 1288 2305 +395 582 1288 2305 +395 580 1290 2305 +227 580 1290 2305 +395 655 1290 2305 +227 655 1290 2305 +395 582 1297 2305 +227 582 1297 2305 +395 656 1297 2305 +227 656 1297 2305 +227 655 1540 2305 +395 655 1540 2305 +227 656 1540 2305 +395 656 1540 2305 +225 580 1289 2306 +395 580 1289 2306 +395 580 1290 2306 +225 580 1290 2306 +395 655 1290 2306 +225 655 1290 2306 +225 655 1538 2306 +395 655 1538 2306 +106 581 1291 2307 +204 581 1291 2307 +106 582 1291 2307 +204 582 1291 2307 +106 581 1292 2307 +204 581 1292 2307 +106 624 1292 2307 +204 624 1292 2307 +106 582 1295 2307 +204 582 1295 2307 +106 628 1295 2307 +204 628 1295 2307 +106 624 1434 2307 +204 624 1434 2307 +106 628 1434 2307 +204 628 1434 2307 +106 581 1291 2308 +227 581 1291 2308 +106 582 1291 2308 +227 582 1291 2308 +106 581 1294 2308 +227 581 1294 2308 +106 649 1294 2308 +227 649 1294 2308 +106 582 1297 2308 +227 582 1297 2308 +106 656 1297 2308 +227 656 1297 2308 +106 649 1519 2308 +227 649 1519 2308 +106 656 1519 2308 +227 656 1519 2308 +106 581 1292 2309 +231 581 1292 2309 +106 624 1292 2309 +231 624 1292 2309 +106 581 1294 2309 +231 581 1294 2309 +106 649 1294 2309 +231 649 1294 2309 +106 624 1436 2309 +231 624 1436 2309 +106 659 1436 2309 +231 659 1436 2309 +106 649 1521 2309 +231 649 1521 2309 +106 659 1521 2309 +231 659 1521 2309 +359 581 1292 2310 +231 581 1292 2310 +359 624 1292 2310 +231 624 1292 2310 +231 581 1293 2310 +359 581 1293 2310 +231 586 1293 2310 +359 586 1293 2310 +359 586 1308 2310 +231 586 1308 2310 +359 623 1308 2310 +231 623 1308 2310 +231 623 1431 2310 +359 623 1431 2310 +231 624 1431 2310 +359 624 1431 2310 +231 581 1293 2311 +383 581 1293 2311 +231 586 1293 2311 +383 586 1293 2311 +383 581 1294 2311 +231 581 1294 2311 +383 649 1294 2311 +231 649 1294 2311 +383 586 1309 2311 +231 586 1309 2311 +383 648 1309 2311 +231 648 1309 2311 +231 648 1516 2311 +383 648 1516 2311 +231 649 1516 2311 +383 649 1516 2311 +106 582 1295 2312 +234 582 1295 2312 +106 628 1295 2312 +234 628 1295 2312 +106 582 1297 2312 +234 582 1297 2312 +106 656 1297 2312 +234 656 1297 2312 +106 628 1448 2312 +234 628 1448 2312 +106 660 1448 2312 +234 660 1448 2312 +106 656 1543 2312 +234 656 1543 2312 +106 660 1543 2312 +234 660 1543 2312 +366 582 1295 2313 +234 582 1295 2313 +366 628 1295 2313 +234 628 1295 2313 +234 582 1296 2313 +366 582 1296 2313 +234 628 1446 2313 +366 628 1446 2313 +234 582 1296 2314 +395 582 1296 2314 +395 582 1297 2314 +234 582 1297 2314 +395 656 1297 2314 +234 656 1297 2314 +234 656 1541 2314 +395 656 1541 2314 +38 583 1298 2315 +317 583 1298 2315 +38 584 1298 2315 +317 584 1298 2315 +38 583 1299 2315 +317 583 1299 2315 +38 585 1299 2315 +317 585 1299 2315 +38 584 1301 2315 +317 584 1301 2315 +38 587 1301 2315 +317 587 1301 2315 +38 585 1304 2315 +317 585 1304 2315 +38 587 1304 2315 +317 587 1304 2315 +38 583 1298 2316 +318 583 1298 2316 +38 584 1298 2316 +318 584 1298 2316 +38 583 1300 2316 +318 583 1300 2316 +38 584 1302 2316 +318 584 1302 2316 +38 583 1299 2317 +319 583 1299 2317 +38 585 1299 2317 +319 585 1299 2317 +38 583 1300 2317 +319 583 1300 2317 +38 585 1305 2317 +319 585 1305 2317 +38 584 1301 2318 +358 584 1301 2318 +38 587 1301 2318 +358 587 1301 2318 +38 584 1302 2318 +358 584 1302 2318 +38 587 1311 2318 +358 587 1311 2318 +198 584 1301 2319 +358 584 1301 2319 +198 587 1301 2319 +358 587 1301 2319 +358 584 1303 2319 +198 584 1303 2319 +358 619 1303 2319 +198 619 1303 2319 +358 587 1310 2319 +198 587 1310 2319 +358 620 1310 2319 +198 620 1310 2319 +198 619 1419 2319 +358 619 1419 2319 +198 620 1419 2319 +358 620 1419 2319 +195 584 1302 2320 +358 584 1302 2320 +358 584 1303 2320 +195 584 1303 2320 +358 619 1303 2320 +195 619 1303 2320 +195 619 1417 2320 +358 619 1417 2320 +38 585 1304 2321 +382 585 1304 2321 +38 587 1304 2321 +382 587 1304 2321 +38 585 1305 2321 +382 585 1305 2321 +38 587 1311 2321 +382 587 1311 2321 +217 585 1304 2322 +382 585 1304 2322 +217 587 1304 2322 +382 587 1304 2322 +382 585 1306 2322 +217 585 1306 2322 +382 644 1306 2322 +217 644 1306 2322 +382 587 1312 2322 +217 587 1312 2322 +382 645 1312 2322 +217 645 1312 2322 +217 644 1504 2322 +382 644 1504 2322 +217 645 1504 2322 +382 645 1504 2322 +214 585 1305 2323 +382 585 1305 2323 +382 585 1306 2323 +214 585 1306 2323 +382 644 1306 2323 +214 644 1306 2323 +214 644 1502 2323 +382 644 1502 2323 +105 586 1307 2324 +198 586 1307 2324 +105 587 1307 2324 +198 587 1307 2324 +105 586 1308 2324 +198 586 1308 2324 +105 623 1308 2324 +198 623 1308 2324 +105 587 1310 2324 +198 587 1310 2324 +105 620 1310 2324 +198 620 1310 2324 +105 620 1422 2324 +198 620 1422 2324 +105 623 1422 2324 +198 623 1422 2324 +105 586 1307 2325 +217 586 1307 2325 +105 587 1307 2325 +217 587 1307 2325 +105 586 1309 2325 +217 586 1309 2325 +105 648 1309 2325 +217 648 1309 2325 +105 587 1312 2325 +217 587 1312 2325 +105 645 1312 2325 +217 645 1312 2325 +105 645 1507 2325 +217 645 1507 2325 +105 648 1507 2325 +217 648 1507 2325 +105 586 1308 2326 +231 586 1308 2326 +105 623 1308 2326 +231 623 1308 2326 +105 586 1309 2326 +231 586 1309 2326 +105 648 1309 2326 +231 648 1309 2326 +105 623 1433 2326 +231 623 1433 2326 +105 658 1433 2326 +231 658 1433 2326 +105 648 1518 2326 +231 648 1518 2326 +105 658 1518 2326 +231 658 1518 2326 +105 587 1310 2327 +228 587 1310 2327 +105 620 1310 2327 +228 620 1310 2327 +105 587 1312 2327 +228 587 1312 2327 +105 645 1312 2327 +228 645 1312 2327 +105 620 1424 2327 +228 620 1424 2327 +105 657 1424 2327 +228 657 1424 2327 +105 645 1509 2327 +228 645 1509 2327 +105 657 1509 2327 +228 657 1509 2327 +358 587 1310 2328 +228 587 1310 2328 +358 620 1310 2328 +228 620 1310 2328 +228 587 1311 2328 +358 587 1311 2328 +228 620 1421 2328 +358 620 1421 2328 +228 587 1311 2329 +382 587 1311 2329 +382 587 1312 2329 +228 587 1312 2329 +382 645 1312 2329 +228 645 1312 2329 +228 645 1506 2329 +382 645 1506 2329 +10 588 1313 2330 +320 588 1313 2330 +10 589 1313 2330 +320 589 1313 2330 +10 588 1314 2330 +320 588 1314 2330 +10 589 1317 2330 +320 589 1317 2330 +10 588 1313 2331 +321 588 1313 2331 +10 589 1313 2331 +321 589 1313 2331 +10 588 1315 2331 +321 588 1315 2331 +10 589 1318 2331 +321 589 1318 2331 +10 588 1314 2332 +322 588 1314 2332 +10 588 1315 2332 +322 588 1315 2332 +166 588 1314 2333 +322 588 1314 2333 +322 588 1316 2333 +166 588 1316 2333 +322 590 1316 2333 +166 590 1316 2333 +166 590 1320 2333 +322 590 1320 2333 +167 588 1315 2334 +322 588 1315 2334 +322 588 1316 2334 +167 588 1316 2334 +322 590 1316 2334 +167 590 1316 2334 +167 590 1321 2334 +322 590 1321 2334 +10 589 1317 2335 +325 589 1317 2335 +10 589 1318 2335 +325 589 1318 2335 +169 589 1317 2336 +325 589 1317 2336 +325 589 1319 2336 +169 589 1319 2336 +325 592 1319 2336 +169 592 1319 2336 +169 592 1326 2336 +325 592 1326 2336 +170 589 1318 2337 +325 589 1318 2337 +325 589 1319 2337 +170 589 1319 2337 +325 592 1319 2337 +170 592 1319 2337 +170 592 1327 2337 +325 592 1327 2337 +50 590 1320 2338 +322 590 1320 2338 +50 590 1321 2338 +322 590 1321 2338 +50 590 1320 2339 +323 590 1320 2339 +50 590 1322 2339 +323 590 1322 2339 +50 591 1322 2339 +323 591 1322 2339 +50 591 1323 2339 +323 591 1323 2339 +50 590 1321 2340 +324 590 1321 2340 +50 590 1322 2340 +324 590 1322 2340 +50 591 1322 2340 +324 591 1322 2340 +50 591 1324 2340 +324 591 1324 2340 +50 591 1323 2341 +329 591 1323 2341 +50 591 1324 2341 +329 591 1324 2341 +174 591 1323 2342 +329 591 1323 2342 +329 591 1325 2342 +174 591 1325 2342 +329 594 1325 2342 +174 594 1325 2342 +174 594 1334 2342 +329 594 1334 2342 +172 591 1324 2343 +329 591 1324 2343 +329 591 1325 2343 +172 591 1325 2343 +329 594 1325 2343 +172 594 1325 2343 +172 594 1332 2343 +329 594 1332 2343 +56 592 1326 2344 +325 592 1326 2344 +56 592 1327 2344 +325 592 1327 2344 +56 592 1326 2345 +326 592 1326 2345 +56 592 1328 2345 +326 592 1328 2345 +56 593 1328 2345 +326 593 1328 2345 +56 593 1329 2345 +326 593 1329 2345 +56 592 1327 2346 +327 592 1327 2346 +56 592 1328 2346 +327 592 1328 2346 +56 593 1328 2346 +327 593 1328 2346 +56 593 1330 2346 +327 593 1330 2346 +56 593 1329 2347 +348 593 1329 2347 +56 593 1330 2347 +348 593 1330 2347 +189 593 1329 2348 +348 593 1329 2348 +348 593 1331 2348 +189 593 1331 2348 +348 610 1331 2348 +189 610 1331 2348 +189 610 1389 2348 +348 610 1389 2348 +187 593 1330 2349 +348 593 1330 2349 +348 593 1331 2349 +187 593 1331 2349 +348 610 1331 2349 +187 610 1331 2349 +187 610 1387 2349 +348 610 1387 2349 +9 594 1332 2350 +328 594 1332 2350 +9 594 1333 2350 +328 594 1333 2350 +9 594 1332 2351 +329 594 1332 2351 +9 594 1334 2351 +329 594 1334 2351 +9 594 1333 2352 +330 594 1333 2352 +9 594 1334 2352 +330 594 1334 2352 +173 594 1333 2353 +330 594 1333 2353 +330 594 1335 2353 +173 594 1335 2353 +330 595 1335 2353 +173 595 1335 2353 +173 595 1336 2353 +330 595 1336 2353 +174 594 1334 2354 +330 594 1334 2354 +330 594 1335 2354 +174 594 1335 2354 +330 595 1335 2354 +174 595 1335 2354 +174 595 1337 2354 +330 595 1337 2354 +52 595 1336 2355 +330 595 1336 2355 +52 595 1337 2355 +330 595 1337 2355 +52 595 1336 2356 +331 595 1336 2356 +52 595 1338 2356 +331 595 1338 2356 +52 596 1338 2356 +331 596 1338 2356 +52 596 1339 2356 +331 596 1339 2356 +52 595 1337 2357 +332 595 1337 2357 +52 595 1338 2357 +332 595 1338 2357 +52 596 1338 2357 +332 596 1338 2357 +52 596 1340 2357 +332 596 1340 2357 +52 596 1339 2358 +334 596 1339 2358 +52 596 1340 2358 +334 596 1340 2358 +178 596 1339 2359 +334 596 1339 2359 +334 596 1341 2359 +178 596 1341 2359 +334 597 1341 2359 +178 597 1341 2359 +178 597 1344 2359 +334 597 1344 2359 +176 596 1340 2360 +334 596 1340 2360 +334 596 1341 2360 +176 596 1341 2360 +334 597 1341 2360 +176 597 1341 2360 +176 597 1342 2360 +334 597 1342 2360 +12 597 1342 2361 +333 597 1342 2361 +12 597 1343 2361 +333 597 1343 2361 +12 598 1343 2361 +333 598 1343 2361 +12 598 1345 2361 +333 598 1345 2361 +12 597 1342 2362 +334 597 1342 2362 +12 597 1344 2362 +334 597 1344 2362 +12 597 1343 2363 +335 597 1343 2363 +12 598 1343 2363 +335 598 1343 2363 +12 597 1344 2363 +335 597 1344 2363 +12 598 1346 2363 +335 598 1346 2363 +12 598 1345 2364 +336 598 1345 2364 +12 598 1346 2364 +336 598 1346 2364 +179 598 1345 2365 +336 598 1345 2365 +336 598 1347 2365 +179 598 1347 2365 +336 599 1347 2365 +179 599 1347 2365 +179 599 1348 2365 +336 599 1348 2365 +180 598 1346 2366 +336 598 1346 2366 +336 598 1347 2366 +180 598 1347 2366 +336 599 1347 2366 +180 599 1347 2366 +180 599 1349 2366 +336 599 1349 2366 +66 599 1348 2367 +336 599 1348 2367 +66 599 1349 2367 +336 599 1349 2367 +66 599 1348 2368 +337 599 1348 2368 +66 599 1350 2368 +337 599 1350 2368 +66 600 1350 2368 +337 600 1350 2368 +66 600 1351 2368 +337 600 1351 2368 +66 599 1349 2369 +338 599 1349 2369 +66 599 1350 2369 +338 599 1350 2369 +66 600 1350 2369 +338 600 1350 2369 +66 600 1352 2369 +338 600 1352 2369 +66 600 1351 2370 +387 600 1351 2370 +66 600 1352 2370 +387 600 1352 2370 +220 600 1351 2371 +387 600 1351 2371 +387 600 1353 2371 +220 600 1353 2371 +387 650 1353 2371 +220 650 1353 2371 +220 650 1524 2371 +387 650 1524 2371 +218 600 1352 2372 +387 600 1352 2372 +387 600 1353 2372 +218 600 1353 2372 +387 650 1353 2372 +218 650 1353 2372 +218 650 1522 2372 +387 650 1522 2372 +2 601 1354 2373 +339 601 1354 2373 +2 601 1355 2373 +339 601 1355 2373 +2 601 1354 2374 +340 601 1354 2374 +2 601 1357 2374 +340 601 1357 2374 +182 601 1354 2375 +340 601 1354 2375 +340 601 1356 2375 +182 601 1356 2375 +340 602 1356 2375 +182 602 1356 2375 +182 602 1359 2375 +340 602 1359 2375 +2 601 1355 2376 +342 601 1355 2376 +2 601 1357 2376 +342 601 1357 2376 +183 601 1355 2377 +342 601 1355 2377 +342 601 1358 2377 +183 601 1358 2377 +342 604 1358 2377 +183 604 1358 2377 +183 604 1367 2377 +342 604 1367 2377 +93 601 1356 2378 +185 601 1356 2378 +93 602 1356 2378 +185 602 1356 2378 +93 601 1358 2378 +185 601 1358 2378 +93 604 1358 2378 +185 604 1358 2378 +93 602 1362 2378 +185 602 1362 2378 +93 606 1362 2378 +185 606 1362 2378 +93 604 1370 2378 +185 604 1370 2378 +93 606 1370 2378 +185 606 1370 2378 +340 601 1356 2379 +185 601 1356 2379 +340 602 1356 2379 +185 602 1356 2379 +185 601 1357 2379 +340 601 1357 2379 +185 602 1360 2379 +340 602 1360 2379 +185 601 1357 2380 +342 601 1357 2380 +342 601 1358 2380 +185 601 1358 2380 +342 604 1358 2380 +185 604 1358 2380 +185 604 1368 2380 +342 604 1368 2380 +55 602 1359 2381 +340 602 1359 2381 +55 602 1360 2381 +340 602 1360 2381 +55 602 1359 2382 +341 602 1359 2382 +55 602 1361 2382 +341 602 1361 2382 +55 603 1361 2382 +341 603 1361 2382 +55 603 1363 2382 +341 603 1363 2382 +55 602 1360 2383 +345 602 1360 2383 +55 602 1361 2383 +345 602 1361 2383 +55 603 1361 2383 +345 603 1361 2383 +55 603 1365 2383 +345 603 1365 2383 +185 602 1360 2384 +345 602 1360 2384 +345 602 1362 2384 +185 602 1362 2384 +345 606 1362 2384 +185 606 1362 2384 +185 606 1377 2384 +345 606 1377 2384 +184 602 1361 2385 +345 602 1361 2385 +184 603 1361 2385 +345 603 1361 2385 +345 602 1362 2385 +184 602 1362 2385 +345 606 1362 2385 +184 606 1362 2385 +345 603 1364 2385 +184 603 1364 2385 +345 607 1364 2385 +184 607 1364 2385 +184 606 1375 2385 +345 606 1375 2385 +184 607 1375 2385 +345 607 1375 2385 +55 603 1363 2386 +347 603 1363 2386 +55 603 1365 2386 +347 603 1365 2386 +187 603 1363 2387 +347 603 1363 2387 +347 603 1366 2387 +187 603 1366 2387 +347 610 1366 2387 +187 610 1366 2387 +187 610 1387 2387 +347 610 1387 2387 +94 603 1364 2388 +188 603 1364 2388 +94 607 1364 2388 +188 607 1364 2388 +94 603 1366 2388 +188 603 1366 2388 +94 610 1366 2388 +188 610 1366 2388 +94 607 1380 2388 +188 607 1380 2388 +94 611 1380 2388 +188 611 1380 2388 +94 610 1390 2388 +188 610 1390 2388 +94 611 1390 2388 +188 611 1390 2388 +345 603 1364 2389 +188 603 1364 2389 +345 607 1364 2389 +188 607 1364 2389 +188 603 1365 2389 +345 603 1365 2389 +188 607 1379 2389 +345 607 1379 2389 +188 603 1365 2390 +347 603 1365 2390 +347 603 1366 2390 +188 603 1366 2390 +347 610 1366 2390 +188 610 1366 2390 +188 610 1388 2390 +347 610 1388 2390 +57 604 1367 2391 +342 604 1367 2391 +57 604 1368 2391 +342 604 1368 2391 +57 604 1367 2392 +343 604 1367 2392 +57 604 1369 2392 +343 604 1369 2392 +57 605 1369 2392 +343 605 1369 2392 +57 605 1371 2392 +343 605 1371 2392 +57 604 1368 2393 +346 604 1368 2393 +57 604 1369 2393 +346 604 1369 2393 +57 605 1369 2393 +346 605 1369 2393 +57 605 1373 2393 +346 605 1373 2393 +185 604 1368 2394 +346 604 1368 2394 +346 604 1370 2394 +185 604 1370 2394 +346 606 1370 2394 +185 606 1370 2394 +185 606 1377 2394 +346 606 1377 2394 +186 604 1369 2395 +346 604 1369 2395 +186 605 1369 2395 +346 605 1369 2395 +346 604 1370 2395 +186 604 1370 2395 +346 606 1370 2395 +186 606 1370 2395 +346 605 1372 2395 +186 605 1372 2395 +346 608 1372 2395 +186 608 1372 2395 +186 606 1376 2395 +346 606 1376 2395 +186 608 1376 2395 +346 608 1376 2395 +57 605 1371 2396 +352 605 1371 2396 +57 605 1373 2396 +352 605 1373 2396 +191 605 1371 2397 +352 605 1371 2397 +352 605 1374 2397 +191 605 1374 2397 +352 613 1374 2397 +191 613 1374 2397 +191 613 1397 2397 +352 613 1397 2397 +95 605 1372 2398 +192 605 1372 2398 +95 608 1372 2398 +192 608 1372 2398 +95 605 1374 2398 +192 605 1374 2398 +95 613 1374 2398 +192 613 1374 2398 +95 608 1383 2398 +192 608 1383 2398 +95 615 1383 2398 +192 615 1383 2398 +95 613 1400 2398 +192 613 1400 2398 +95 615 1400 2398 +192 615 1400 2398 +346 605 1372 2399 +192 605 1372 2399 +346 608 1372 2399 +192 608 1372 2399 +192 605 1373 2399 +346 605 1373 2399 +192 608 1382 2399 +346 608 1382 2399 +192 605 1373 2400 +352 605 1373 2400 +352 605 1374 2400 +192 605 1374 2400 +352 613 1374 2400 +192 613 1374 2400 +192 613 1398 2400 +352 613 1398 2400 +31 606 1375 2401 +344 606 1375 2401 +31 607 1375 2401 +344 607 1375 2401 +31 606 1376 2401 +344 606 1376 2401 +31 608 1376 2401 +344 608 1376 2401 +31 607 1378 2401 +344 607 1378 2401 +31 609 1378 2401 +344 609 1378 2401 +31 608 1381 2401 +344 608 1381 2401 +31 609 1381 2401 +344 609 1381 2401 +31 606 1375 2402 +345 606 1375 2402 +31 607 1375 2402 +345 607 1375 2402 +31 606 1377 2402 +345 606 1377 2402 +31 607 1379 2402 +345 607 1379 2402 +31 606 1376 2403 +346 606 1376 2403 +31 608 1376 2403 +346 608 1376 2403 +31 606 1377 2403 +346 606 1377 2403 +31 608 1382 2403 +346 608 1382 2403 +31 607 1378 2404 +350 607 1378 2404 +31 609 1378 2404 +350 609 1378 2404 +31 607 1379 2404 +350 607 1379 2404 +31 609 1385 2404 +350 609 1385 2404 +190 607 1378 2405 +350 607 1378 2405 +190 609 1378 2405 +350 609 1378 2405 +350 607 1380 2405 +190 607 1380 2405 +350 611 1380 2405 +190 611 1380 2405 +350 609 1384 2405 +190 609 1384 2405 +350 612 1384 2405 +190 612 1384 2405 +190 611 1393 2405 +350 611 1393 2405 +190 612 1393 2405 +350 612 1393 2405 +188 607 1379 2406 +350 607 1379 2406 +350 607 1380 2406 +188 607 1380 2406 +350 611 1380 2406 +188 611 1380 2406 +188 611 1391 2406 +350 611 1391 2406 +31 608 1381 2407 +355 608 1381 2407 +31 609 1381 2407 +355 609 1381 2407 +31 608 1382 2407 +355 608 1382 2407 +31 609 1385 2407 +355 609 1385 2407 +194 608 1381 2408 +355 608 1381 2408 +194 609 1381 2408 +355 609 1381 2408 +355 608 1383 2408 +194 608 1383 2408 +355 615 1383 2408 +194 615 1383 2408 +355 609 1386 2408 +194 609 1386 2408 +355 617 1386 2408 +194 617 1386 2408 +194 615 1407 2408 +355 615 1407 2408 +194 617 1407 2408 +355 617 1407 2408 +192 608 1382 2409 +355 608 1382 2409 +355 608 1383 2409 +192 608 1383 2409 +355 615 1383 2409 +192 615 1383 2409 +192 615 1405 2409 +355 615 1405 2409 +97 609 1384 2410 +201 609 1384 2410 +97 612 1384 2410 +201 612 1384 2410 +97 609 1386 2410 +201 609 1386 2410 +97 617 1386 2410 +201 617 1386 2410 +97 612 1396 2410 +201 612 1396 2410 +97 625 1396 2410 +201 625 1396 2410 +97 617 1413 2410 +201 617 1413 2410 +97 625 1413 2410 +201 625 1413 2410 +350 609 1384 2411 +201 609 1384 2411 +350 612 1384 2411 +201 612 1384 2411 +201 609 1385 2411 +350 609 1385 2411 +201 612 1394 2411 +350 612 1394 2411 +201 609 1385 2412 +355 609 1385 2412 +355 609 1386 2412 +201 609 1386 2412 +355 617 1386 2412 +201 617 1386 2412 +201 617 1411 2412 +355 617 1411 2412 +11 610 1387 2413 +347 610 1387 2413 +11 610 1388 2413 +347 610 1388 2413 +11 610 1387 2414 +348 610 1387 2414 +11 610 1389 2414 +348 610 1389 2414 +11 610 1388 2415 +349 610 1388 2415 +11 610 1389 2415 +349 610 1389 2415 +188 610 1388 2416 +349 610 1388 2416 +349 610 1390 2416 +188 610 1390 2416 +349 611 1390 2416 +188 611 1390 2416 +188 611 1391 2416 +349 611 1391 2416 +189 610 1389 2417 +349 610 1389 2417 +349 610 1390 2417 +189 610 1390 2417 +349 611 1390 2417 +189 611 1390 2417 +189 611 1392 2417 +349 611 1392 2417 +61 611 1391 2418 +349 611 1391 2418 +61 611 1392 2418 +349 611 1392 2418 +61 611 1391 2419 +350 611 1391 2419 +61 611 1393 2419 +350 611 1393 2419 +61 612 1393 2419 +350 612 1393 2419 +61 612 1394 2419 +350 612 1394 2419 +61 611 1392 2420 +351 611 1392 2420 +61 611 1393 2420 +351 611 1393 2420 +61 612 1393 2420 +351 612 1393 2420 +61 612 1395 2420 +351 612 1395 2420 +61 612 1394 2421 +364 612 1394 2421 +61 612 1395 2421 +364 612 1395 2421 +201 612 1394 2422 +364 612 1394 2422 +364 612 1396 2422 +201 612 1396 2422 +364 625 1396 2422 +201 625 1396 2422 +201 625 1439 2422 +364 625 1439 2422 +200 612 1395 2423 +364 612 1395 2423 +364 612 1396 2423 +200 612 1396 2423 +364 625 1396 2423 +200 625 1396 2423 +200 625 1438 2423 +364 625 1438 2423 +5 613 1397 2424 +352 613 1397 2424 +5 613 1398 2424 +352 613 1398 2424 +5 613 1397 2425 +353 613 1397 2425 +5 613 1399 2425 +353 613 1399 2425 +5 614 1399 2425 +353 614 1399 2425 +5 614 1401 2425 +353 614 1401 2425 +5 613 1398 2426 +354 613 1398 2426 +5 613 1399 2426 +354 613 1399 2426 +5 614 1399 2426 +354 614 1399 2426 +5 614 1403 2426 +354 614 1403 2426 +192 613 1398 2427 +354 613 1398 2427 +354 613 1400 2427 +192 613 1400 2427 +354 615 1400 2427 +192 615 1400 2427 +192 615 1405 2427 +354 615 1405 2427 +193 613 1399 2428 +354 613 1399 2428 +193 614 1399 2428 +354 614 1399 2428 +354 613 1400 2428 +193 613 1400 2428 +354 615 1400 2428 +193 615 1400 2428 +354 614 1402 2428 +193 614 1402 2428 +354 616 1402 2428 +193 616 1402 2428 +193 615 1406 2428 +354 615 1406 2428 +193 616 1406 2428 +354 616 1406 2428 +5 614 1401 2429 +357 614 1401 2429 +5 614 1403 2429 +357 614 1403 2429 +195 614 1401 2430 +357 614 1401 2430 +357 614 1404 2430 +195 614 1404 2430 +357 619 1404 2430 +195 619 1404 2430 +195 619 1417 2430 +357 619 1417 2430 +96 614 1402 2431 +197 614 1402 2431 +96 616 1402 2431 +197 616 1402 2431 +96 614 1404 2431 +197 614 1404 2431 +96 619 1404 2431 +197 619 1404 2431 +96 616 1410 2431 +197 616 1410 2431 +96 621 1410 2431 +197 621 1410 2431 +96 619 1420 2431 +197 619 1420 2431 +96 621 1420 2431 +197 621 1420 2431 +354 614 1402 2432 +197 614 1402 2432 +354 616 1402 2432 +197 616 1402 2432 +197 614 1403 2432 +354 614 1403 2432 +197 616 1408 2432 +354 616 1408 2432 +197 614 1403 2433 +357 614 1403 2433 +357 614 1404 2433 +197 614 1404 2433 +357 619 1404 2433 +197 619 1404 2433 +197 619 1418 2433 +357 619 1418 2433 +60 615 1405 2434 +354 615 1405 2434 +60 615 1406 2434 +354 615 1406 2434 +60 616 1406 2434 +354 616 1406 2434 +60 616 1408 2434 +354 616 1408 2434 +60 615 1405 2435 +355 615 1405 2435 +60 615 1407 2435 +355 615 1407 2435 +60 617 1407 2435 +355 617 1407 2435 +60 617 1411 2435 +355 617 1411 2435 +60 615 1406 2436 +356 615 1406 2436 +60 616 1406 2436 +356 616 1406 2436 +60 615 1407 2436 +356 615 1407 2436 +60 617 1407 2436 +356 617 1407 2436 +60 616 1409 2436 +356 616 1409 2436 +60 618 1409 2436 +356 618 1409 2436 +60 617 1412 2436 +356 617 1412 2436 +60 618 1412 2436 +356 618 1412 2436 +60 616 1408 2437 +360 616 1408 2437 +60 616 1409 2437 +360 616 1409 2437 +60 618 1409 2437 +360 618 1409 2437 +60 618 1415 2437 +360 618 1415 2437 +197 616 1408 2438 +360 616 1408 2438 +360 616 1410 2438 +197 616 1410 2438 +360 621 1410 2438 +197 621 1410 2438 +197 621 1427 2438 +360 621 1427 2438 +196 616 1409 2439 +360 616 1409 2439 +196 618 1409 2439 +360 618 1409 2439 +360 616 1410 2439 +196 616 1410 2439 +360 621 1410 2439 +196 621 1410 2439 +360 618 1414 2439 +196 618 1414 2439 +360 622 1414 2439 +196 622 1414 2439 +196 621 1425 2439 +360 621 1425 2439 +196 622 1425 2439 +360 622 1425 2439 +60 617 1411 2440 +363 617 1411 2440 +60 617 1412 2440 +363 617 1412 2440 +60 618 1412 2440 +363 618 1412 2440 +60 618 1415 2440 +363 618 1415 2440 +201 617 1411 2441 +363 617 1411 2441 +363 617 1413 2441 +201 617 1413 2441 +363 625 1413 2441 +201 625 1413 2441 +201 625 1439 2441 +363 625 1439 2441 +199 617 1412 2442 +363 617 1412 2442 +199 618 1412 2442 +363 618 1412 2442 +363 617 1413 2442 +199 617 1413 2442 +363 625 1413 2442 +199 625 1413 2442 +363 618 1416 2442 +199 618 1416 2442 +363 626 1416 2442 +199 626 1416 2442 +199 625 1437 2442 +363 625 1437 2442 +199 626 1437 2442 +363 626 1437 2442 +98 618 1414 2443 +203 618 1414 2443 +98 622 1414 2443 +203 622 1414 2443 +98 618 1416 2443 +203 618 1416 2443 +98 626 1416 2443 +203 626 1416 2443 +98 622 1430 2443 +203 622 1430 2443 +98 627 1430 2443 +203 627 1430 2443 +98 626 1442 2443 +203 626 1442 2443 +98 627 1442 2443 +203 627 1442 2443 +360 618 1414 2444 +203 618 1414 2444 +360 622 1414 2444 +203 622 1414 2444 +203 618 1415 2444 +360 618 1415 2444 +203 622 1429 2444 +360 622 1429 2444 +203 618 1415 2445 +363 618 1415 2445 +363 618 1416 2445 +203 618 1416 2445 +363 626 1416 2445 +203 626 1416 2445 +203 626 1441 2445 +363 626 1441 2445 +70 619 1417 2446 +357 619 1417 2446 +70 619 1418 2446 +357 619 1418 2446 +70 619 1417 2447 +358 619 1417 2447 +70 619 1419 2447 +358 619 1419 2447 +70 620 1419 2447 +358 620 1419 2447 +70 620 1421 2447 +358 620 1421 2447 +70 619 1418 2448 +361 619 1418 2448 +70 619 1419 2448 +361 619 1419 2448 +70 620 1419 2448 +361 620 1419 2448 +70 620 1423 2448 +361 620 1423 2448 +197 619 1418 2449 +361 619 1418 2449 +361 619 1420 2449 +197 619 1420 2449 +361 621 1420 2449 +197 621 1420 2449 +197 621 1427 2449 +361 621 1427 2449 +198 619 1419 2450 +361 619 1419 2450 +198 620 1419 2450 +361 620 1419 2450 +361 619 1420 2450 +198 619 1420 2450 +361 621 1420 2450 +198 621 1420 2450 +361 620 1422 2450 +198 620 1422 2450 +361 623 1422 2450 +198 623 1422 2450 +198 621 1426 2450 +361 621 1426 2450 +198 623 1426 2450 +361 623 1426 2450 +70 620 1421 2451 +397 620 1421 2451 +70 620 1423 2451 +397 620 1423 2451 +228 620 1421 2452 +397 620 1421 2452 +397 620 1424 2452 +228 620 1424 2452 +397 657 1424 2452 +228 657 1424 2452 +228 657 1544 2452 +397 657 1544 2452 +105 620 1422 2453 +229 620 1422 2453 +105 623 1422 2453 +229 623 1422 2453 +105 620 1424 2453 +229 620 1424 2453 +105 657 1424 2453 +229 657 1424 2453 +105 623 1433 2453 +229 623 1433 2453 +105 658 1433 2453 +229 658 1433 2453 +105 657 1547 2453 +229 657 1547 2453 +105 658 1547 2453 +229 658 1547 2453 +361 620 1422 2454 +229 620 1422 2454 +361 623 1422 2454 +229 623 1422 2454 +229 620 1423 2454 +361 620 1423 2454 +229 623 1432 2454 +361 623 1432 2454 +229 620 1423 2455 +397 620 1423 2455 +397 620 1424 2455 +229 620 1424 2455 +397 657 1424 2455 +229 657 1424 2455 +229 657 1545 2455 +397 657 1545 2455 +39 621 1425 2456 +359 621 1425 2456 +39 622 1425 2456 +359 622 1425 2456 +39 621 1426 2456 +359 621 1426 2456 +39 623 1426 2456 +359 623 1426 2456 +39 622 1428 2456 +359 622 1428 2456 +39 624 1428 2456 +359 624 1428 2456 +39 623 1431 2456 +359 623 1431 2456 +39 624 1431 2456 +359 624 1431 2456 +39 621 1425 2457 +360 621 1425 2457 +39 622 1425 2457 +360 622 1425 2457 +39 621 1427 2457 +360 621 1427 2457 +39 622 1429 2457 +360 622 1429 2457 +39 621 1426 2458 +361 621 1426 2458 +39 623 1426 2458 +361 623 1426 2458 +39 621 1427 2458 +361 621 1427 2458 +39 623 1432 2458 +361 623 1432 2458 +39 622 1428 2459 +367 622 1428 2459 +39 624 1428 2459 +367 624 1428 2459 +39 622 1429 2459 +367 622 1429 2459 +39 624 1435 2459 +367 624 1435 2459 +204 622 1428 2460 +367 622 1428 2460 +204 624 1428 2460 +367 624 1428 2460 +367 622 1430 2460 +204 622 1430 2460 +367 627 1430 2460 +204 627 1430 2460 +367 624 1434 2460 +204 624 1434 2460 +367 628 1434 2460 +204 628 1434 2460 +204 627 1445 2460 +367 627 1445 2460 +204 628 1445 2460 +367 628 1445 2460 +203 622 1429 2461 +367 622 1429 2461 +367 622 1430 2461 +203 622 1430 2461 +367 627 1430 2461 +203 627 1430 2461 +203 627 1444 2461 +367 627 1444 2461 +39 623 1431 2462 +400 623 1431 2462 +39 624 1431 2462 +400 624 1431 2462 +39 623 1432 2462 +400 623 1432 2462 +39 624 1435 2462 +400 624 1435 2462 +231 623 1431 2463 +400 623 1431 2463 +231 624 1431 2463 +400 624 1431 2463 +400 623 1433 2463 +231 623 1433 2463 +400 658 1433 2463 +231 658 1433 2463 +400 624 1436 2463 +231 624 1436 2463 +400 659 1436 2463 +231 659 1436 2463 +231 658 1550 2463 +400 658 1550 2463 +231 659 1550 2463 +400 659 1550 2463 +229 623 1432 2464 +400 623 1432 2464 +400 623 1433 2464 +229 623 1433 2464 +400 658 1433 2464 +229 658 1433 2464 +229 658 1548 2464 +400 658 1548 2464 +106 624 1434 2465 +232 624 1434 2465 +106 628 1434 2465 +232 628 1434 2465 +106 624 1436 2465 +232 624 1436 2465 +106 659 1436 2465 +232 659 1436 2465 +106 628 1448 2465 +232 628 1448 2465 +106 660 1448 2465 +232 660 1448 2465 +106 659 1553 2465 +232 659 1553 2465 +106 660 1553 2465 +232 660 1553 2465 +367 624 1434 2466 +232 624 1434 2466 +367 628 1434 2466 +232 628 1434 2466 +232 624 1435 2466 +367 624 1435 2466 +232 628 1447 2466 +367 628 1447 2466 +232 624 1435 2467 +400 624 1435 2467 +400 624 1436 2467 +232 624 1436 2467 +400 659 1436 2467 +232 659 1436 2467 +232 659 1551 2467 +400 659 1551 2467 +14 625 1437 2468 +362 625 1437 2468 +14 626 1437 2468 +362 626 1437 2468 +14 625 1438 2468 +362 625 1438 2468 +14 626 1440 2468 +362 626 1440 2468 +14 625 1437 2469 +363 625 1437 2469 +14 626 1437 2469 +363 626 1437 2469 +14 625 1439 2469 +363 625 1439 2469 +14 626 1441 2469 +363 626 1441 2469 +14 625 1438 2470 +364 625 1438 2470 +14 625 1439 2470 +364 625 1439 2470 +14 626 1440 2471 +365 626 1440 2471 +14 626 1441 2471 +365 626 1441 2471 +202 626 1440 2472 +365 626 1440 2472 +365 626 1442 2472 +202 626 1442 2472 +365 627 1442 2472 +202 627 1442 2472 +202 627 1443 2472 +365 627 1443 2472 +203 626 1441 2473 +365 626 1441 2473 +365 626 1442 2473 +203 626 1442 2473 +365 627 1442 2473 +203 627 1442 2473 +203 627 1444 2473 +365 627 1444 2473 +73 627 1443 2474 +365 627 1443 2474 +73 627 1444 2474 +365 627 1444 2474 +73 627 1443 2475 +366 627 1443 2475 +73 627 1445 2475 +366 627 1445 2475 +73 628 1445 2475 +366 628 1445 2475 +73 628 1446 2475 +366 628 1446 2475 +73 627 1444 2476 +367 627 1444 2476 +73 627 1445 2476 +367 627 1445 2476 +73 628 1445 2476 +367 628 1445 2476 +73 628 1447 2476 +367 628 1447 2476 +73 628 1446 2477 +403 628 1446 2477 +73 628 1447 2477 +403 628 1447 2477 +234 628 1446 2478 +403 628 1446 2478 +403 628 1448 2478 +234 628 1448 2478 +403 660 1448 2478 +234 660 1448 2478 +234 660 1556 2478 +403 660 1556 2478 +232 628 1447 2479 +403 628 1447 2479 +403 628 1448 2479 +232 628 1448 2479 +403 660 1448 2479 +232 660 1448 2479 +232 660 1554 2479 +403 660 1554 2479 +6 629 1449 2480 +368 629 1449 2480 +6 629 1450 2480 +368 629 1450 2480 +6 629 1449 2481 +369 629 1449 2481 +6 629 1452 2481 +369 629 1452 2481 +205 629 1449 2482 +369 629 1449 2482 +369 629 1451 2482 +205 629 1451 2482 +369 630 1451 2482 +205 630 1451 2482 +205 630 1454 2482 +369 630 1454 2482 +6 629 1450 2483 +371 629 1450 2483 +6 629 1452 2483 +371 629 1452 2483 +206 629 1450 2484 +371 629 1450 2484 +371 629 1453 2484 +206 629 1453 2484 +371 632 1453 2484 +206 632 1453 2484 +206 632 1462 2484 +371 632 1462 2484 +99 629 1451 2485 +208 629 1451 2485 +99 630 1451 2485 +208 630 1451 2485 +99 629 1453 2485 +208 629 1453 2485 +99 632 1453 2485 +208 632 1453 2485 +99 630 1457 2485 +208 630 1457 2485 +99 634 1457 2485 +208 634 1457 2485 +99 632 1465 2485 +208 632 1465 2485 +99 634 1465 2485 +208 634 1465 2485 +369 629 1451 2486 +208 629 1451 2486 +369 630 1451 2486 +208 630 1451 2486 +208 629 1452 2486 +369 629 1452 2486 +208 630 1455 2486 +369 630 1455 2486 +208 629 1452 2487 +371 629 1452 2487 +371 629 1453 2487 +208 629 1453 2487 +371 632 1453 2487 +208 632 1453 2487 +208 632 1463 2487 +371 632 1463 2487 +63 630 1454 2488 +369 630 1454 2488 +63 630 1455 2488 +369 630 1455 2488 +63 630 1454 2489 +370 630 1454 2489 +63 630 1456 2489 +370 630 1456 2489 +63 631 1456 2489 +370 631 1456 2489 +63 631 1458 2489 +370 631 1458 2489 +63 630 1455 2490 +374 630 1455 2490 +63 630 1456 2490 +374 630 1456 2490 +63 631 1456 2490 +374 631 1456 2490 +63 631 1460 2490 +374 631 1460 2490 +208 630 1455 2491 +374 630 1455 2491 +374 630 1457 2491 +208 630 1457 2491 +374 634 1457 2491 +208 634 1457 2491 +208 634 1472 2491 +374 634 1472 2491 +207 630 1456 2492 +374 630 1456 2492 +207 631 1456 2492 +374 631 1456 2492 +374 630 1457 2492 +207 630 1457 2492 +374 634 1457 2492 +207 634 1457 2492 +374 631 1459 2492 +207 631 1459 2492 +374 635 1459 2492 +207 635 1459 2492 +207 634 1470 2492 +374 634 1470 2492 +207 635 1470 2492 +374 635 1470 2492 +63 631 1458 2493 +376 631 1458 2493 +63 631 1460 2493 +376 631 1460 2493 +210 631 1458 2494 +376 631 1458 2494 +376 631 1461 2494 +210 631 1461 2494 +376 638 1461 2494 +210 638 1461 2494 +210 638 1482 2494 +376 638 1482 2494 +100 631 1459 2495 +211 631 1459 2495 +100 635 1459 2495 +211 635 1459 2495 +100 631 1461 2495 +211 631 1461 2495 +100 638 1461 2495 +211 638 1461 2495 +100 635 1475 2495 +211 635 1475 2495 +100 640 1475 2495 +211 640 1475 2495 +100 638 1485 2495 +211 638 1485 2495 +100 640 1485 2495 +211 640 1485 2495 +374 631 1459 2496 +211 631 1459 2496 +374 635 1459 2496 +211 635 1459 2496 +211 631 1460 2496 +374 631 1460 2496 +211 635 1474 2496 +374 635 1474 2496 +211 631 1460 2497 +376 631 1460 2497 +376 631 1461 2497 +211 631 1461 2497 +376 638 1461 2497 +211 638 1461 2497 +211 638 1483 2497 +376 638 1483 2497 +65 632 1462 2498 +371 632 1462 2498 +65 632 1463 2498 +371 632 1463 2498 +65 632 1462 2499 +372 632 1462 2499 +65 632 1464 2499 +372 632 1464 2499 +65 633 1464 2499 +372 633 1464 2499 +65 633 1466 2499 +372 633 1466 2499 +65 632 1463 2500 +375 632 1463 2500 +65 632 1464 2500 +375 632 1464 2500 +65 633 1464 2500 +375 633 1464 2500 +65 633 1468 2500 +375 633 1468 2500 +208 632 1463 2501 +375 632 1463 2501 +375 632 1465 2501 +208 632 1465 2501 +375 634 1465 2501 +208 634 1465 2501 +208 634 1472 2501 +375 634 1472 2501 +209 632 1464 2502 +375 632 1464 2502 +209 633 1464 2502 +375 633 1464 2502 +375 632 1465 2502 +209 632 1465 2502 +375 634 1465 2502 +209 634 1465 2502 +375 633 1467 2502 +209 633 1467 2502 +375 636 1467 2502 +209 636 1467 2502 +209 634 1471 2502 +375 634 1471 2502 +209 636 1471 2502 +375 636 1471 2502 +65 633 1466 2503 +386 633 1466 2503 +65 633 1468 2503 +386 633 1468 2503 +218 633 1466 2504 +386 633 1466 2504 +386 633 1469 2504 +218 633 1469 2504 +386 650 1469 2504 +218 650 1469 2504 +218 650 1522 2504 +386 650 1522 2504 +102 633 1467 2505 +219 633 1467 2505 +102 636 1467 2505 +219 636 1467 2505 +102 633 1469 2505 +219 633 1469 2505 +102 650 1469 2505 +219 650 1469 2505 +102 636 1478 2505 +219 636 1478 2505 +102 651 1478 2505 +219 651 1478 2505 +102 650 1525 2505 +219 650 1525 2505 +102 651 1525 2505 +219 651 1525 2505 +375 633 1467 2506 +219 633 1467 2506 +375 636 1467 2506 +219 636 1467 2506 +219 633 1468 2506 +375 633 1468 2506 +219 636 1477 2506 +375 636 1477 2506 +219 633 1468 2507 +386 633 1468 2507 +386 633 1469 2507 +219 633 1469 2507 +386 650 1469 2507 +219 650 1469 2507 +219 650 1523 2507 +386 650 1523 2507 +36 634 1470 2508 +373 634 1470 2508 +36 635 1470 2508 +373 635 1470 2508 +36 634 1471 2508 +373 634 1471 2508 +36 636 1471 2508 +373 636 1471 2508 +36 635 1473 2508 +373 635 1473 2508 +36 637 1473 2508 +373 637 1473 2508 +36 636 1476 2508 +373 636 1476 2508 +36 637 1476 2508 +373 637 1476 2508 +36 634 1470 2509 +374 634 1470 2509 +36 635 1470 2509 +374 635 1470 2509 +36 634 1472 2509 +374 634 1472 2509 +36 635 1474 2509 +374 635 1474 2509 +36 634 1471 2510 +375 634 1471 2510 +36 636 1471 2510 +375 636 1471 2510 +36 634 1472 2510 +375 634 1472 2510 +36 636 1477 2510 +375 636 1477 2510 +36 635 1473 2511 +379 635 1473 2511 +36 637 1473 2511 +379 637 1473 2511 +36 635 1474 2511 +379 635 1474 2511 +36 637 1480 2511 +379 637 1480 2511 +213 635 1473 2512 +379 635 1473 2512 +213 637 1473 2512 +379 637 1473 2512 +379 635 1475 2512 +213 635 1475 2512 +379 640 1475 2512 +213 640 1475 2512 +379 637 1479 2512 +213 637 1479 2512 +379 642 1479 2512 +213 642 1479 2512 +213 640 1492 2512 +379 640 1492 2512 +213 642 1492 2512 +379 642 1492 2512 +211 635 1474 2513 +379 635 1474 2513 +379 635 1475 2513 +211 635 1475 2513 +379 640 1475 2513 +211 640 1475 2513 +211 640 1490 2513 +379 640 1490 2513 +36 636 1476 2514 +389 636 1476 2514 +36 637 1476 2514 +389 637 1476 2514 +36 636 1477 2514 +389 636 1477 2514 +36 637 1480 2514 +389 637 1480 2514 +221 636 1476 2515 +389 636 1476 2515 +221 637 1476 2515 +389 637 1476 2515 +389 636 1478 2515 +221 636 1478 2515 +389 651 1478 2515 +221 651 1478 2515 +389 637 1481 2515 +221 637 1481 2515 +389 652 1481 2515 +221 652 1481 2515 +221 651 1528 2515 +389 651 1528 2515 +221 652 1528 2515 +389 652 1528 2515 +219 636 1477 2516 +389 636 1477 2516 +389 636 1478 2516 +219 636 1478 2516 +389 651 1478 2516 +219 651 1478 2516 +219 651 1526 2516 +389 651 1526 2516 +103 637 1479 2517 +224 637 1479 2517 +103 642 1479 2517 +224 642 1479 2517 +103 637 1481 2517 +224 637 1481 2517 +103 652 1481 2517 +224 652 1481 2517 +103 642 1498 2517 +224 642 1498 2517 +103 653 1498 2517 +224 653 1498 2517 +103 652 1531 2517 +224 652 1531 2517 +103 653 1531 2517 +224 653 1531 2517 +379 637 1479 2518 +224 637 1479 2518 +379 642 1479 2518 +224 642 1479 2518 +224 637 1480 2518 +379 637 1480 2518 +224 642 1496 2518 +379 642 1496 2518 +224 637 1480 2519 +389 637 1480 2519 +389 637 1481 2519 +224 637 1481 2519 +389 652 1481 2519 +224 652 1481 2519 +224 652 1529 2519 +389 652 1529 2519 +7 638 1482 2520 +376 638 1482 2520 +7 638 1483 2520 +376 638 1483 2520 +7 638 1482 2521 +377 638 1482 2521 +7 638 1484 2521 +377 638 1484 2521 +7 639 1484 2521 +377 639 1484 2521 +7 639 1486 2521 +377 639 1486 2521 +7 638 1483 2522 +378 638 1483 2522 +7 638 1484 2522 +378 638 1484 2522 +7 639 1484 2522 +378 639 1484 2522 +7 639 1488 2522 +378 639 1488 2522 +211 638 1483 2523 +378 638 1483 2523 +378 638 1485 2523 +211 638 1485 2523 +378 640 1485 2523 +211 640 1485 2523 +211 640 1490 2523 +378 640 1490 2523 +212 638 1484 2524 +378 638 1484 2524 +212 639 1484 2524 +378 639 1484 2524 +378 638 1485 2524 +212 638 1485 2524 +378 640 1485 2524 +212 640 1485 2524 +378 639 1487 2524 +212 639 1487 2524 +378 641 1487 2524 +212 641 1487 2524 +212 640 1491 2524 +378 640 1491 2524 +212 641 1491 2524 +378 641 1491 2524 +7 639 1486 2525 +381 639 1486 2525 +7 639 1488 2525 +381 639 1488 2525 +214 639 1486 2526 +381 639 1486 2526 +381 639 1489 2526 +214 639 1489 2526 +381 644 1489 2526 +214 644 1489 2526 +214 644 1502 2526 +381 644 1502 2526 +101 639 1487 2527 +216 639 1487 2527 +101 641 1487 2527 +216 641 1487 2527 +101 639 1489 2527 +216 639 1489 2527 +101 644 1489 2527 +216 644 1489 2527 +101 641 1495 2527 +216 641 1495 2527 +101 646 1495 2527 +216 646 1495 2527 +101 644 1505 2527 +216 644 1505 2527 +101 646 1505 2527 +216 646 1505 2527 +378 639 1487 2528 +216 639 1487 2528 +378 641 1487 2528 +216 641 1487 2528 +216 639 1488 2528 +378 639 1488 2528 +216 641 1493 2528 +378 641 1493 2528 +216 639 1488 2529 +381 639 1488 2529 +381 639 1489 2529 +216 639 1489 2529 +381 644 1489 2529 +216 644 1489 2529 +216 644 1503 2529 +381 644 1503 2529 +68 640 1490 2530 +378 640 1490 2530 +68 640 1491 2530 +378 640 1491 2530 +68 641 1491 2530 +378 641 1491 2530 +68 641 1493 2530 +378 641 1493 2530 +68 640 1490 2531 +379 640 1490 2531 +68 640 1492 2531 +379 640 1492 2531 +68 642 1492 2531 +379 642 1492 2531 +68 642 1496 2531 +379 642 1496 2531 +68 640 1491 2532 +380 640 1491 2532 +68 641 1491 2532 +380 641 1491 2532 +68 640 1492 2532 +380 640 1492 2532 +68 642 1492 2532 +380 642 1492 2532 +68 641 1494 2532 +380 641 1494 2532 +68 643 1494 2532 +380 643 1494 2532 +68 642 1497 2532 +380 642 1497 2532 +68 643 1497 2532 +380 643 1497 2532 +68 641 1493 2533 +384 641 1493 2533 +68 641 1494 2533 +384 641 1494 2533 +68 643 1494 2533 +384 643 1494 2533 +68 643 1500 2533 +384 643 1500 2533 +216 641 1493 2534 +384 641 1493 2534 +384 641 1495 2534 +216 641 1495 2534 +384 646 1495 2534 +216 646 1495 2534 +216 646 1512 2534 +384 646 1512 2534 +215 641 1494 2535 +384 641 1494 2535 +215 643 1494 2535 +384 643 1494 2535 +384 641 1495 2535 +215 641 1495 2535 +384 646 1495 2535 +215 646 1495 2535 +384 643 1499 2535 +215 643 1499 2535 +384 647 1499 2535 +215 647 1499 2535 +215 646 1510 2535 +384 646 1510 2535 +215 647 1510 2535 +384 647 1510 2535 +68 642 1496 2536 +392 642 1496 2536 +68 642 1497 2536 +392 642 1497 2536 +68 643 1497 2536 +392 643 1497 2536 +68 643 1500 2536 +392 643 1500 2536 +224 642 1496 2537 +392 642 1496 2537 +392 642 1498 2537 +224 642 1498 2537 +392 653 1498 2537 +224 653 1498 2537 +224 653 1534 2537 +392 653 1534 2537 +222 642 1497 2538 +392 642 1497 2538 +222 643 1497 2538 +392 643 1497 2538 +392 642 1498 2538 +222 642 1498 2538 +392 653 1498 2538 +222 653 1498 2538 +392 643 1501 2538 +222 643 1501 2538 +392 654 1501 2538 +222 654 1501 2538 +222 653 1532 2538 +392 653 1532 2538 +222 654 1532 2538 +392 654 1532 2538 +104 643 1499 2539 +226 643 1499 2539 +104 647 1499 2539 +226 647 1499 2539 +104 643 1501 2539 +226 643 1501 2539 +104 654 1501 2539 +226 654 1501 2539 +104 647 1515 2539 +226 647 1515 2539 +104 655 1515 2539 +226 655 1515 2539 +104 654 1537 2539 +226 654 1537 2539 +104 655 1537 2539 +226 655 1537 2539 +384 643 1499 2540 +226 643 1499 2540 +384 647 1499 2540 +226 647 1499 2540 +226 643 1500 2540 +384 643 1500 2540 +226 647 1514 2540 +384 647 1514 2540 +226 643 1500 2541 +392 643 1500 2541 +392 643 1501 2541 +226 643 1501 2541 +392 654 1501 2541 +226 654 1501 2541 +226 654 1536 2541 +392 654 1536 2541 +71 644 1502 2542 +381 644 1502 2542 +71 644 1503 2542 +381 644 1503 2542 +71 644 1502 2543 +382 644 1502 2543 +71 644 1504 2543 +382 644 1504 2543 +71 645 1504 2543 +382 645 1504 2543 +71 645 1506 2543 +382 645 1506 2543 +71 644 1503 2544 +385 644 1503 2544 +71 644 1504 2544 +385 644 1504 2544 +71 645 1504 2544 +385 645 1504 2544 +71 645 1508 2544 +385 645 1508 2544 +216 644 1503 2545 +385 644 1503 2545 +385 644 1505 2545 +216 644 1505 2545 +385 646 1505 2545 +216 646 1505 2545 +216 646 1512 2545 +385 646 1512 2545 +217 644 1504 2546 +385 644 1504 2546 +217 645 1504 2546 +385 645 1504 2546 +385 644 1505 2546 +217 644 1505 2546 +385 646 1505 2546 +217 646 1505 2546 +385 645 1507 2546 +217 645 1507 2546 +385 648 1507 2546 +217 648 1507 2546 +217 646 1511 2546 +385 646 1511 2546 +217 648 1511 2546 +385 648 1511 2546 +71 645 1506 2547 +398 645 1506 2547 +71 645 1508 2547 +398 645 1508 2547 +228 645 1506 2548 +398 645 1506 2548 +398 645 1509 2548 +228 645 1509 2548 +398 657 1509 2548 +228 657 1509 2548 +228 657 1544 2548 +398 657 1544 2548 +105 645 1507 2549 +230 645 1507 2549 +105 648 1507 2549 +230 648 1507 2549 +105 645 1509 2549 +230 645 1509 2549 +105 657 1509 2549 +230 657 1509 2549 +105 648 1518 2549 +230 648 1518 2549 +105 658 1518 2549 +230 658 1518 2549 +105 657 1547 2549 +230 657 1547 2549 +105 658 1547 2549 +230 658 1547 2549 +385 645 1507 2550 +230 645 1507 2550 +385 648 1507 2550 +230 648 1507 2550 +230 645 1508 2550 +385 645 1508 2550 +230 648 1517 2550 +385 648 1517 2550 +230 645 1508 2551 +398 645 1508 2551 +398 645 1509 2551 +230 645 1509 2551 +398 657 1509 2551 +230 657 1509 2551 +230 657 1546 2551 +398 657 1546 2551 +40 646 1510 2552 +383 646 1510 2552 +40 647 1510 2552 +383 647 1510 2552 +40 646 1511 2552 +383 646 1511 2552 +40 648 1511 2552 +383 648 1511 2552 +40 647 1513 2552 +383 647 1513 2552 +40 649 1513 2552 +383 649 1513 2552 +40 648 1516 2552 +383 648 1516 2552 +40 649 1516 2552 +383 649 1516 2552 +40 646 1510 2553 +384 646 1510 2553 +40 647 1510 2553 +384 647 1510 2553 +40 646 1512 2553 +384 646 1512 2553 +40 647 1514 2553 +384 647 1514 2553 +40 646 1511 2554 +385 646 1511 2554 +40 648 1511 2554 +385 648 1511 2554 +40 646 1512 2554 +385 646 1512 2554 +40 648 1517 2554 +385 648 1517 2554 +40 647 1513 2555 +396 647 1513 2555 +40 649 1513 2555 +396 649 1513 2555 +40 647 1514 2555 +396 647 1514 2555 +40 649 1520 2555 +396 649 1520 2555 +227 647 1513 2556 +396 647 1513 2556 +227 649 1513 2556 +396 649 1513 2556 +396 647 1515 2556 +227 647 1515 2556 +396 655 1515 2556 +227 655 1515 2556 +396 649 1519 2556 +227 649 1519 2556 +396 656 1519 2556 +227 656 1519 2556 +227 655 1540 2556 +396 655 1540 2556 +227 656 1540 2556 +396 656 1540 2556 +226 647 1514 2557 +396 647 1514 2557 +396 647 1515 2557 +226 647 1515 2557 +396 655 1515 2557 +226 655 1515 2557 +226 655 1539 2557 +396 655 1539 2557 +40 648 1516 2558 +401 648 1516 2558 +40 649 1516 2558 +401 649 1516 2558 +40 648 1517 2558 +401 648 1517 2558 +40 649 1520 2558 +401 649 1520 2558 +231 648 1516 2559 +401 648 1516 2559 +231 649 1516 2559 +401 649 1516 2559 +401 648 1518 2559 +231 648 1518 2559 +401 658 1518 2559 +231 658 1518 2559 +401 649 1521 2559 +231 649 1521 2559 +401 659 1521 2559 +231 659 1521 2559 +231 658 1550 2559 +401 658 1550 2559 +231 659 1550 2559 +401 659 1550 2559 +230 648 1517 2560 +401 648 1517 2560 +401 648 1518 2560 +230 648 1518 2560 +401 658 1518 2560 +230 658 1518 2560 +230 658 1549 2560 +401 658 1549 2560 +106 649 1519 2561 +233 649 1519 2561 +106 656 1519 2561 +233 656 1519 2561 +106 649 1521 2561 +233 649 1521 2561 +106 659 1521 2561 +233 659 1521 2561 +106 656 1543 2561 +233 656 1543 2561 +106 660 1543 2561 +233 660 1543 2561 +106 659 1553 2561 +233 659 1553 2561 +106 660 1553 2561 +233 660 1553 2561 +396 649 1519 2562 +233 649 1519 2562 +396 656 1519 2562 +233 656 1519 2562 +233 649 1520 2562 +396 649 1520 2562 +233 656 1542 2562 +396 656 1542 2562 +233 649 1520 2563 +401 649 1520 2563 +401 649 1521 2563 +233 649 1521 2563 +401 659 1521 2563 +233 659 1521 2563 +233 659 1552 2563 +401 659 1552 2563 +15 650 1522 2564 +386 650 1522 2564 +15 650 1523 2564 +386 650 1523 2564 +15 650 1522 2565 +387 650 1522 2565 +15 650 1524 2565 +387 650 1524 2565 +15 650 1523 2566 +388 650 1523 2566 +15 650 1524 2566 +388 650 1524 2566 +219 650 1523 2567 +388 650 1523 2567 +388 650 1525 2567 +219 650 1525 2567 +388 651 1525 2567 +219 651 1525 2567 +219 651 1526 2567 +388 651 1526 2567 +220 650 1524 2568 +388 650 1524 2568 +388 650 1525 2568 +220 650 1525 2568 +388 651 1525 2568 +220 651 1525 2568 +220 651 1527 2568 +388 651 1527 2568 +69 651 1526 2569 +388 651 1526 2569 +69 651 1527 2569 +388 651 1527 2569 +69 651 1526 2570 +389 651 1526 2570 +69 651 1528 2570 +389 651 1528 2570 +69 652 1528 2570 +389 652 1528 2570 +69 652 1529 2570 +389 652 1529 2570 +69 651 1527 2571 +390 651 1527 2571 +69 651 1528 2571 +390 651 1528 2571 +69 652 1528 2571 +390 652 1528 2571 +69 652 1530 2571 +390 652 1530 2571 +69 652 1529 2572 +393 652 1529 2572 +69 652 1530 2572 +393 652 1530 2572 +224 652 1529 2573 +393 652 1529 2573 +393 652 1531 2573 +224 652 1531 2573 +393 653 1531 2573 +224 653 1531 2573 +224 653 1534 2573 +393 653 1534 2573 +223 652 1530 2574 +393 652 1530 2574 +393 652 1531 2574 +223 652 1531 2574 +393 653 1531 2574 +223 653 1531 2574 +223 653 1533 2574 +393 653 1533 2574 +16 653 1532 2575 +391 653 1532 2575 +16 654 1532 2575 +391 654 1532 2575 +16 653 1533 2575 +391 653 1533 2575 +16 654 1535 2575 +391 654 1535 2575 +16 653 1532 2576 +392 653 1532 2576 +16 654 1532 2576 +392 654 1532 2576 +16 653 1534 2576 +392 653 1534 2576 +16 654 1536 2576 +392 654 1536 2576 +16 653 1533 2577 +393 653 1533 2577 +16 653 1534 2577 +393 653 1534 2577 +16 654 1535 2578 +394 654 1535 2578 +16 654 1536 2578 +394 654 1536 2578 +225 654 1535 2579 +394 654 1535 2579 +394 654 1537 2579 +225 654 1537 2579 +394 655 1537 2579 +225 655 1537 2579 +225 655 1538 2579 +394 655 1538 2579 +226 654 1536 2580 +394 654 1536 2580 +394 654 1537 2580 +226 654 1537 2580 +394 655 1537 2580 +226 655 1537 2580 +226 655 1539 2580 +394 655 1539 2580 +74 655 1538 2581 +394 655 1538 2581 +74 655 1539 2581 +394 655 1539 2581 +74 655 1538 2582 +395 655 1538 2582 +74 655 1540 2582 +395 655 1540 2582 +74 656 1540 2582 +395 656 1540 2582 +74 656 1541 2582 +395 656 1541 2582 +74 655 1539 2583 +396 655 1539 2583 +74 655 1540 2583 +396 655 1540 2583 +74 656 1540 2583 +396 656 1540 2583 +74 656 1542 2583 +396 656 1542 2583 +74 656 1541 2584 +404 656 1541 2584 +74 656 1542 2584 +404 656 1542 2584 +234 656 1541 2585 +404 656 1541 2585 +404 656 1543 2585 +234 656 1543 2585 +404 660 1543 2585 +234 660 1543 2585 +234 660 1556 2585 +404 660 1556 2585 +233 656 1542 2586 +404 656 1542 2586 +404 656 1543 2586 +233 656 1543 2586 +404 660 1543 2586 +233 660 1543 2586 +233 660 1555 2586 +404 660 1555 2586 +8 657 1544 2587 +397 657 1544 2587 +8 657 1545 2587 +397 657 1545 2587 +8 657 1544 2588 +398 657 1544 2588 +8 657 1546 2588 +398 657 1546 2588 +8 657 1545 2589 +399 657 1545 2589 +8 657 1546 2589 +399 657 1546 2589 +229 657 1545 2590 +399 657 1545 2590 +399 657 1547 2590 +229 657 1547 2590 +399 658 1547 2590 +229 658 1547 2590 +229 658 1548 2590 +399 658 1548 2590 +230 657 1546 2591 +399 657 1546 2591 +399 657 1547 2591 +230 657 1547 2591 +399 658 1547 2591 +230 658 1547 2591 +230 658 1549 2591 +399 658 1549 2591 +72 658 1548 2592 +399 658 1548 2592 +72 658 1549 2592 +399 658 1549 2592 +72 658 1548 2593 +400 658 1548 2593 +72 658 1550 2593 +400 658 1550 2593 +72 659 1550 2593 +400 659 1550 2593 +72 659 1551 2593 +400 659 1551 2593 +72 658 1549 2594 +401 658 1549 2594 +72 658 1550 2594 +401 658 1550 2594 +72 659 1550 2594 +401 659 1550 2594 +72 659 1552 2594 +401 659 1552 2594 +72 659 1551 2595 +402 659 1551 2595 +72 659 1552 2595 +402 659 1552 2595 +232 659 1551 2596 +402 659 1551 2596 +402 659 1553 2596 +232 659 1553 2596 +402 660 1553 2596 +232 660 1553 2596 +232 660 1554 2596 +402 660 1554 2596 +233 659 1552 2597 +402 659 1552 2597 +402 659 1553 2597 +233 659 1553 2597 +402 660 1553 2597 +233 660 1553 2597 +233 660 1555 2597 +402 660 1555 2597 +17 660 1554 2598 +402 660 1554 2598 +17 660 1555 2598 +402 660 1555 2598 +17 660 1554 2599 +403 660 1554 2599 +17 660 1556 2599 +403 660 1556 2599 +17 660 1555 2600 +404 660 1555 2600 +17 660 1556 2600 +404 660 1556 2600 + +element boundaries: +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 0 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 +0 1 0 0 + +element neighbours: +1 -1 2 12 +0 -1 3 5 +3 -1 0 64 +2 -1 1 61 +5 -1 7 16 +4 -1 6 1 +7 8 5 56 +6 9 4 25 +9 6 11 58 +8 7 10 27 +11 -1 9 120 +10 -1 8 109 +13 -1 14 0 +12 -1 15 17 +15 -1 12 66 +14 -1 13 97 +17 -1 19 4 +16 -1 18 13 +19 20 17 92 +18 21 16 29 +21 18 23 94 +20 19 22 31 +23 -1 21 214 +22 -1 20 445 +25 26 28 40 +24 27 29 7 +27 24 32 42 +26 25 33 9 +29 30 24 76 +28 31 25 19 +31 28 38 78 +30 29 39 21 +33 34 26 144 +32 35 27 123 +35 32 36 146 +34 33 37 125 +37 38 34 248 +36 39 35 211 +39 36 30 250 +38 37 31 213 +41 42 44 24 +40 43 45 57 +43 40 48 26 +42 41 49 59 +45 46 40 80 +44 47 41 71 +47 44 54 82 +46 45 55 73 +49 50 42 148 +48 51 43 139 +51 48 52 150 +50 49 53 141 +53 54 50 724 +52 55 51 1087 +55 52 46 726 +54 53 47 1089 +57 58 61 6 +56 59 60 41 +59 56 63 8 +58 57 62 43 +61 -1 57 68 +60 -1 56 3 +63 -1 59 136 +62 -1 58 111 +65 -1 66 2 +64 -1 67 69 +67 -1 64 14 +66 -1 65 101 +69 -1 71 60 +68 -1 70 65 +71 72 69 102 +70 73 68 45 +73 70 75 104 +72 71 74 47 +75 -1 73 1090 +74 -1 72 1421 +77 78 80 28 +76 79 81 93 +79 76 84 30 +78 77 85 95 +81 82 76 44 +80 83 77 103 +83 80 88 46 +82 81 89 105 +85 86 78 256 +84 87 79 467 +87 84 90 258 +86 85 91 469 +89 90 82 728 +88 91 83 1443 +91 88 86 730 +90 89 87 1445 +93 94 97 18 +92 95 96 77 +95 92 99 20 +94 93 98 79 +97 -1 93 100 +96 -1 92 15 +99 -1 95 464 +98 -1 94 447 +101 -1 103 96 +100 -1 102 67 +103 104 101 70 +102 105 100 81 +105 102 107 72 +104 103 106 83 +107 -1 105 1440 +106 -1 104 1423 +109 -1 110 112 +108 -1 111 11 +111 -1 108 128 +110 -1 109 63 +113 -1 114 108 +112 -1 115 121 +115 116 112 130 +114 117 113 165 +117 114 118 132 +116 115 119 167 +119 -1 116 336 +118 -1 117 333 +121 -1 123 10 +120 -1 122 113 +123 124 121 160 +122 125 120 33 +125 122 127 162 +124 123 126 35 +127 -1 125 208 +126 -1 124 193 +129 -1 130 110 +128 -1 131 137 +131 132 128 114 +130 133 129 177 +133 130 134 116 +132 131 135 179 +135 -1 132 338 +134 -1 133 369 +137 -1 139 62 +136 -1 138 129 +139 140 137 180 +138 141 136 49 +141 138 143 182 +140 139 142 51 +143 -1 141 1084 +142 -1 140 1057 +145 146 148 32 +144 147 149 161 +147 144 152 34 +146 145 153 163 +149 150 144 48 +148 151 145 181 +151 148 158 50 +150 149 159 183 +153 154 146 252 +152 155 147 237 +155 152 156 254 +154 153 157 239 +157 158 154 716 +156 159 155 673 +159 156 150 718 +158 157 151 675 +161 162 165 122 +160 163 164 145 +163 160 169 124 +162 161 168 147 +165 166 161 176 +164 167 160 115 +167 164 173 178 +166 165 172 117 +169 170 163 232 +168 171 162 195 +171 168 175 234 +170 169 174 197 +173 174 167 328 +172 175 166 297 +175 172 171 330 +174 173 170 299 +177 178 181 164 +176 179 180 131 +179 176 185 166 +178 177 184 133 +181 182 177 138 +180 183 176 149 +183 180 189 140 +182 181 188 151 +185 186 179 364 +184 187 178 301 +187 184 191 366 +186 185 190 303 +189 190 183 680 +188 191 182 1053 +191 188 187 682 +190 189 186 1055 +193 -1 194 200 +192 -1 195 127 +195 196 192 216 +194 197 193 169 +197 194 198 218 +196 195 199 171 +199 -1 196 380 +198 -1 197 335 +201 -1 202 192 +200 -1 203 209 +203 204 200 220 +202 205 201 269 +205 202 206 222 +204 203 207 271 +207 -1 204 572 +206 -1 205 527 +209 -1 211 126 +208 -1 210 201 +211 212 209 264 +210 213 208 37 +213 210 215 266 +212 211 214 39 +215 -1 213 22 +214 -1 212 449 +217 218 220 194 +216 219 221 233 +219 216 224 196 +218 217 225 235 +221 222 216 202 +220 223 217 281 +223 220 228 204 +222 221 229 283 +225 226 218 382 +224 227 219 417 +227 224 230 384 +226 225 231 419 +229 230 222 574 +228 231 223 609 +231 228 226 576 +230 229 227 611 +233 234 237 168 +232 235 236 217 +235 232 241 170 +234 233 240 219 +237 238 233 284 +236 239 232 153 +239 236 245 286 +238 237 244 155 +241 242 235 412 +240 243 234 305 +243 240 247 414 +242 241 246 307 +245 246 239 668 +244 247 238 637 +247 244 243 670 +246 245 242 639 +249 250 252 36 +248 251 253 265 +251 248 256 38 +250 249 257 267 +253 254 248 152 +252 255 249 285 +255 252 260 154 +254 253 261 287 +257 258 250 84 +256 259 251 477 +259 256 262 86 +258 257 263 479 +261 262 254 720 +260 263 255 705 +263 260 258 722 +262 261 259 707 +265 266 269 210 +264 267 268 249 +267 264 273 212 +266 265 272 251 +269 270 265 280 +268 271 264 203 +271 268 279 282 +270 269 278 205 +273 274 267 472 +272 275 266 451 +275 272 277 474 +274 273 276 453 +277 278 275 520 +276 279 274 489 +279 276 271 522 +278 277 270 491 +281 282 285 268 +280 283 284 221 +283 280 289 270 +282 281 288 223 +285 286 281 236 +284 287 280 253 +287 284 293 238 +286 285 292 255 +289 290 283 604 +288 291 282 497 +291 288 295 606 +290 289 294 499 +293 294 287 700 +292 295 286 641 +295 292 291 702 +294 293 290 643 +297 298 300 312 +296 299 301 173 +299 296 304 314 +298 297 305 175 +301 302 296 348 +300 303 297 185 +303 300 310 350 +302 301 311 187 +305 306 298 396 +304 307 299 241 +307 304 308 398 +306 305 309 243 +309 310 306 796 +308 311 307 677 +311 308 302 798 +310 309 303 679 +313 314 316 296 +312 315 317 329 +315 312 320 298 +314 313 321 331 +317 318 312 352 +316 319 313 343 +319 316 324 354 +318 317 325 345 +321 322 314 400 +320 323 315 391 +323 320 326 402 +322 321 327 393 +325 326 318 1752 +324 327 319 1731 +327 324 322 1754 +326 325 323 1733 +329 330 333 172 +328 331 332 313 +331 328 335 174 +330 329 334 315 +333 -1 329 340 +332 -1 328 119 +335 -1 331 388 +334 -1 330 199 +337 -1 338 118 +336 -1 339 341 +339 -1 336 134 +338 -1 337 373 +341 -1 343 332 +340 -1 342 337 +343 344 341 374 +342 345 340 317 +345 342 347 376 +344 343 346 319 +347 -1 345 1728 +346 -1 344 1717 +349 350 352 300 +348 351 353 365 +351 348 356 302 +350 349 357 367 +353 354 348 316 +352 355 349 375 +355 352 360 318 +354 353 361 377 +357 358 350 804 +356 359 351 1119 +359 356 362 806 +358 357 363 1121 +361 362 354 1756 +360 363 355 1747 +363 360 358 1758 +362 361 359 1749 +365 366 369 184 +364 367 368 349 +367 364 371 186 +366 365 370 351 +369 -1 365 372 +368 -1 364 135 +371 -1 367 1116 +370 -1 366 1059 +373 -1 375 368 +372 -1 374 339 +375 376 373 342 +374 377 372 353 +377 374 379 344 +376 375 378 355 +379 -1 377 1744 +378 -1 376 1719 +381 -1 382 198 +380 -1 383 389 +383 384 380 224 +382 385 381 429 +385 382 386 226 +384 383 387 431 +387 -1 384 578 +386 -1 385 1025 +389 -1 391 334 +388 -1 390 381 +391 392 389 432 +390 393 388 321 +393 390 395 434 +392 391 394 323 +395 -1 393 1734 +394 -1 392 1809 +397 398 400 304 +396 399 401 413 +399 396 404 306 +398 397 405 415 +401 402 396 320 +400 403 397 433 +403 400 408 322 +402 401 409 435 +405 406 398 800 +404 407 399 785 +407 404 410 802 +406 405 411 787 +409 410 402 1760 +408 411 403 1853 +411 408 406 1762 +410 409 407 1855 +413 414 417 240 +412 415 416 397 +415 412 421 242 +414 413 420 399 +417 418 413 428 +416 419 412 225 +419 416 427 430 +418 417 426 227 +421 422 415 780 +420 423 414 645 +423 420 425 782 +422 421 424 647 +425 426 423 616 +424 427 422 925 +427 424 419 618 +426 425 418 927 +429 430 433 416 +428 431 432 383 +431 428 437 418 +430 429 436 385 +433 434 429 390 +432 435 428 401 +435 432 441 392 +434 433 440 403 +437 438 431 1020 +436 439 430 933 +439 436 443 1022 +438 437 442 935 +441 442 435 1848 +440 443 434 1811 +443 440 439 1850 +442 441 438 1813 +445 -1 446 448 +444 -1 447 23 +447 -1 444 456 +446 -1 445 99 +449 -1 450 444 +448 -1 451 215 +451 452 448 458 +450 453 449 273 +453 450 454 460 +452 451 455 275 +455 -1 452 528 +454 -1 453 525 +457 -1 458 446 +456 -1 459 465 +459 460 456 450 +458 461 457 473 +461 458 462 452 +460 459 463 475 +463 -1 460 530 +462 -1 461 561 +465 -1 467 98 +464 -1 466 457 +467 468 465 476 +466 469 464 85 +469 466 471 478 +468 467 470 87 +471 -1 469 1446 +470 -1 468 1529 +473 474 477 272 +472 475 476 459 +475 472 481 274 +474 473 480 461 +477 478 473 466 +476 479 472 257 +479 476 485 468 +478 477 484 259 +481 482 475 556 +480 483 474 493 +483 480 487 558 +482 481 486 495 +485 486 479 712 +484 487 478 1525 +487 484 483 714 +486 485 482 1527 +489 490 492 504 +488 491 493 277 +491 488 496 506 +490 489 497 279 +493 494 488 540 +492 495 489 481 +495 492 502 542 +494 493 503 483 +497 498 490 588 +496 499 491 289 +499 496 500 590 +498 497 501 291 +501 502 498 876 +500 503 499 709 +503 500 494 878 +502 501 495 711 +505 506 508 488 +504 507 509 521 +507 504 512 490 +506 505 513 523 +509 510 504 544 +508 511 505 535 +511 508 518 546 +510 509 519 537 +513 514 506 592 +512 515 507 583 +515 512 516 594 +514 513 517 585 +517 518 514 3200 +516 519 515 3191 +519 516 510 3202 +518 517 511 3193 +521 522 525 276 +520 523 524 505 +523 520 527 278 +522 521 526 507 +525 -1 521 532 +524 -1 520 455 +527 -1 523 580 +526 -1 522 207 +529 -1 530 454 +528 -1 531 533 +531 -1 528 462 +530 -1 529 565 +533 -1 535 524 +532 -1 534 529 +535 536 533 566 +534 537 532 509 +537 534 539 568 +536 535 538 511 +539 -1 537 3194 +538 -1 536 5925 +541 542 544 492 +540 543 545 557 +543 540 548 494 +542 541 549 559 +545 546 540 508 +544 547 541 567 +547 544 552 510 +546 545 553 569 +549 550 542 884 +548 551 543 1567 +551 548 554 886 +550 549 555 1569 +553 554 546 3208 +552 555 547 5947 +555 552 550 3210 +554 553 551 5949 +557 558 561 480 +556 559 560 541 +559 556 563 482 +558 557 562 543 +561 -1 557 564 +560 -1 556 463 +563 -1 559 1564 +562 -1 558 1531 +565 -1 567 560 +564 -1 566 531 +567 568 565 534 +566 569 564 545 +569 566 571 536 +568 567 570 547 +571 -1 569 5944 +570 -1 568 5927 +573 -1 574 206 +572 -1 575 581 +575 576 572 228 +574 577 573 621 +577 574 578 230 +576 575 579 623 +579 -1 576 386 +578 -1 577 1029 +581 -1 583 526 +580 -1 582 573 +583 584 581 624 +582 585 580 513 +585 582 587 626 +584 583 586 515 +587 -1 585 3188 +586 -1 584 2963 +589 590 592 496 +588 591 593 605 +591 588 596 498 +590 589 597 607 +593 594 588 512 +592 595 589 625 +595 592 600 514 +594 593 601 627 +597 598 590 880 +596 599 591 865 +599 596 602 882 +598 597 603 867 +601 602 594 3196 +600 603 595 3005 +603 600 598 3198 +602 601 599 3007 +605 606 609 288 +604 607 608 589 +607 604 613 290 +606 605 612 591 +609 610 605 620 +608 611 604 229 +611 608 619 622 +610 609 618 231 +613 614 607 860 +612 615 606 649 +615 612 617 862 +614 613 616 651 +617 618 615 424 +616 619 614 941 +619 616 611 426 +618 617 610 943 +621 622 625 608 +620 623 624 575 +623 620 629 610 +622 621 628 577 +625 626 621 582 +624 627 620 593 +627 624 635 584 +626 625 634 595 +629 630 623 1030 +628 631 622 949 +631 628 633 1032 +630 629 632 951 +633 634 631 2996 +632 635 630 2959 +635 632 627 2998 +634 633 626 2961 +637 638 640 652 +636 639 641 245 +639 636 644 654 +638 637 645 247 +641 642 636 684 +640 643 637 293 +643 640 648 686 +642 641 649 295 +645 646 638 764 +644 647 639 421 +647 644 650 766 +646 645 651 423 +649 650 642 844 +648 651 643 613 +651 648 646 846 +650 649 647 615 +653 654 656 636 +652 655 657 669 +655 652 660 638 +654 653 661 671 +657 658 652 688 +656 659 653 737 +659 656 664 690 +658 657 665 739 +661 662 654 768 +660 663 655 817 +663 660 666 770 +662 661 667 819 +665 666 658 1172 +664 667 659 1161 +667 664 662 1174 +666 665 663 1163 +669 670 673 244 +668 671 672 653 +671 668 677 246 +670 669 676 655 +673 674 669 732 +672 675 668 157 +675 672 681 734 +674 673 680 159 +677 678 671 812 +676 679 670 309 +679 676 683 814 +678 677 682 311 +681 682 675 188 +680 683 674 1037 +683 680 679 190 +682 681 678 1039 +685 686 688 640 +684 687 689 701 +687 684 692 642 +686 685 693 703 +689 690 684 656 +688 691 685 749 +691 688 696 658 +690 689 697 751 +693 694 686 848 +692 695 687 897 +695 692 698 850 +694 693 699 899 +697 698 690 1176 +696 699 691 1225 +699 696 694 1178 +698 697 695 1227 +701 702 705 292 +700 703 704 685 +703 700 709 294 +702 701 708 687 +705 706 701 752 +704 707 700 261 +707 704 713 754 +706 705 712 263 +709 710 703 892 +708 711 702 501 +711 708 715 894 +710 709 714 503 +713 714 707 484 +712 715 706 1509 +715 712 711 486 +714 713 710 1511 +717 718 720 156 +716 719 721 733 +719 716 724 158 +718 717 725 735 +721 722 716 260 +720 723 717 753 +723 720 730 262 +722 721 731 755 +725 726 718 52 +724 727 719 1073 +727 724 728 54 +726 725 729 1075 +729 730 726 88 +728 731 727 1453 +731 728 722 90 +730 729 723 1455 +733 734 737 672 +732 735 736 717 +735 732 741 674 +734 733 740 719 +737 738 733 748 +736 739 732 657 +739 736 745 750 +738 737 744 659 +741 742 735 1068 +740 743 734 1041 +743 740 747 1070 +742 741 746 1043 +745 746 739 1156 +744 747 738 1125 +747 744 743 1158 +746 745 742 1127 +749 750 753 736 +748 751 752 689 +751 748 757 738 +750 749 756 691 +753 754 749 704 +752 755 748 721 +755 752 761 706 +754 753 760 723 +757 758 751 1220 +756 759 750 1129 +759 756 763 1222 +758 757 762 1131 +761 762 755 1460 +760 763 754 1513 +763 760 759 1462 +762 761 758 1515 +765 766 768 644 +764 767 769 781 +767 764 772 646 +766 765 773 783 +769 770 764 660 +768 771 765 829 +771 768 776 662 +770 769 777 831 +773 774 766 852 +772 775 767 977 +775 772 778 854 +774 773 779 979 +777 778 770 1180 +776 779 771 1361 +779 776 774 1182 +778 777 775 1363 +781 782 785 420 +780 783 784 765 +783 780 789 422 +782 781 788 767 +785 786 781 832 +784 787 780 405 +787 784 793 834 +786 785 792 407 +789 790 783 972 +788 791 782 929 +791 788 795 974 +790 789 794 931 +793 794 787 1860 +792 795 786 2269 +795 792 791 1862 +794 793 790 2271 +797 798 800 308 +796 799 801 813 +799 796 804 310 +798 797 805 815 +801 802 796 404 +800 803 797 833 +803 800 810 406 +802 801 811 835 +805 806 798 356 +804 807 799 1105 +807 804 808 358 +806 805 809 1107 +809 810 806 1764 +808 811 807 2129 +811 808 802 1766 +810 809 803 2131 +813 814 817 676 +812 815 816 797 +815 812 821 678 +814 813 820 799 +817 818 813 828 +816 819 812 661 +819 816 825 830 +818 817 824 663 +821 822 815 1100 +820 823 814 1045 +823 820 827 1102 +822 821 826 1047 +825 826 819 1168 +824 827 818 1309 +827 824 823 1170 +826 825 822 1311 +829 830 833 816 +828 831 832 769 +831 828 837 818 +830 829 836 771 +833 834 829 784 +832 835 828 801 +835 832 841 786 +834 833 840 803 +837 838 831 1356 +836 839 830 1313 +839 836 843 1358 +838 837 842 1315 +841 842 835 2136 +840 843 834 2273 +843 840 839 2138 +842 841 838 2275 +845 846 848 648 +844 847 849 861 +847 844 852 650 +846 845 853 863 +849 850 844 692 +848 851 845 909 +851 848 856 694 +850 849 857 911 +853 854 846 772 +852 855 847 989 +855 852 858 774 +854 853 859 991 +857 858 850 1184 +856 859 851 1657 +859 856 854 1186 +858 857 855 1659 +861 862 865 612 +860 863 864 845 +863 860 869 614 +862 861 868 847 +865 866 861 912 +864 867 860 597 +867 864 875 914 +866 865 874 599 +869 870 863 992 +868 871 862 945 +871 868 873 994 +870 869 872 947 +873 874 871 3008 +872 875 870 3741 +875 872 867 3010 +874 873 866 3743 +877 878 880 500 +876 879 881 893 +879 876 884 502 +878 877 885 895 +881 882 876 596 +880 883 877 913 +883 880 888 598 +882 881 889 915 +885 886 878 548 +884 887 879 1553 +887 884 890 550 +886 885 891 1555 +889 890 882 3204 +888 891 883 3809 +891 888 886 3206 +890 889 887 3811 +893 894 897 708 +892 895 896 877 +895 892 901 710 +894 893 900 879 +897 898 893 908 +896 899 892 693 +899 896 905 910 +898 897 904 695 +901 902 895 1548 +900 903 894 1517 +903 900 907 1550 +902 901 906 1519 +905 906 899 1232 +904 907 898 1605 +907 904 903 1234 +906 905 902 1607 +909 910 913 896 +908 911 912 849 +911 908 917 898 +910 909 916 851 +913 914 909 864 +912 915 908 881 +915 912 921 866 +914 913 920 883 +917 918 911 1652 +916 919 910 1609 +919 916 923 1654 +918 917 922 1611 +921 922 915 3804 +920 923 914 3749 +923 920 919 3806 +922 921 918 3751 +925 926 928 940 +924 927 929 425 +927 924 932 942 +926 925 933 427 +929 930 924 956 +928 931 925 789 +931 928 938 958 +930 929 939 791 +933 934 926 1004 +932 935 927 437 +935 932 936 1006 +934 933 937 439 +937 938 934 2028 +936 939 935 1857 +939 936 930 2030 +938 937 931 1859 +941 942 944 924 +940 943 945 617 +943 940 948 926 +942 941 949 619 +945 946 940 960 +944 947 941 869 +947 944 954 962 +946 945 955 871 +949 950 942 1008 +948 951 943 629 +951 948 952 1010 +950 949 953 631 +953 954 950 2844 +952 955 951 3001 +955 952 946 2846 +954 953 947 3003 +957 958 960 928 +956 959 961 973 +959 956 964 930 +958 957 965 975 +961 962 956 944 +960 963 957 993 +963 960 970 946 +962 961 971 995 +965 966 958 2036 +964 967 959 2337 +967 964 968 2038 +966 965 969 2339 +969 970 966 2848 +968 971 967 3313 +971 968 962 2850 +970 969 963 3315 +973 974 977 788 +972 975 976 957 +975 972 981 790 +974 973 980 959 +977 978 973 988 +976 979 972 773 +979 976 985 990 +978 977 984 775 +981 982 975 2332 +980 983 974 2277 +983 980 987 2334 +982 981 986 2279 +985 986 979 1368 +984 987 978 2413 +987 984 983 1370 +986 985 982 2415 +989 990 993 976 +988 991 992 853 +991 988 997 978 +990 989 996 855 +993 994 989 868 +992 995 988 961 +995 992 1001 870 +994 993 1000 963 +997 998 991 1660 +996 999 990 2417 +999 996 1003 1662 +998 997 1002 2419 +1001 1002 995 3320 +1000 1003 994 3745 +1003 1000 999 3322 +1002 1001 998 3747 +1005 1006 1008 932 +1004 1007 1009 1021 +1007 1004 1012 934 +1006 1005 1013 1023 +1009 1010 1004 948 +1008 1011 1005 1031 +1011 1008 1018 950 +1010 1009 1019 1033 +1013 1014 1006 2032 +1012 1015 1007 2023 +1015 1012 1016 2034 +1014 1013 1017 2025 +1017 1018 1014 2836 +1016 1019 1015 2799 +1019 1016 1010 2838 +1018 1017 1011 2801 +1021 1022 1025 436 +1020 1023 1024 1005 +1023 1020 1027 438 +1022 1021 1026 1007 +1025 -1 1021 1028 +1024 -1 1020 387 +1027 -1 1023 2020 +1026 -1 1022 1815 +1029 -1 1031 1024 +1028 -1 1030 579 +1031 1032 1029 628 +1030 1033 1028 1009 +1033 1030 1035 630 +1032 1031 1034 1011 +1035 -1 1033 2802 +1034 -1 1032 2957 +1037 1038 1040 1052 +1036 1039 1041 681 +1039 1036 1044 1054 +1038 1037 1045 683 +1041 1042 1036 1060 +1040 1043 1037 741 +1043 1040 1048 1062 +1042 1041 1049 743 +1045 1046 1038 1092 +1044 1047 1039 821 +1047 1044 1050 1094 +1046 1045 1051 823 +1049 1050 1042 1252 +1048 1051 1043 1165 +1051 1048 1046 1254 +1050 1049 1047 1167 +1053 1054 1056 1036 +1052 1055 1057 189 +1055 1052 1058 1038 +1054 1053 1059 191 +1057 -1 1052 1064 +1056 -1 1053 143 +1059 -1 1054 1096 +1058 -1 1055 371 +1061 1062 1064 1040 +1060 1063 1065 1069 +1063 1060 1066 1042 +1062 1061 1067 1071 +1065 -1 1060 1056 +1064 -1 1061 1085 +1067 -1 1062 1256 +1066 -1 1063 1297 +1069 1070 1073 740 +1068 1071 1072 1061 +1071 1068 1077 742 +1070 1069 1076 1063 +1073 1074 1069 1086 +1072 1075 1068 725 +1075 1072 1081 1088 +1074 1073 1080 727 +1077 1078 1071 1292 +1076 1079 1070 1133 +1079 1076 1083 1294 +1078 1077 1082 1135 +1081 1082 1075 1448 +1080 1083 1074 1427 +1083 1080 1079 1450 +1082 1081 1078 1429 +1085 -1 1087 142 +1084 -1 1086 1065 +1087 1088 1085 1072 +1086 1089 1084 53 +1089 1086 1091 1074 +1088 1087 1090 55 +1091 -1 1089 74 +1090 -1 1088 1425 +1093 1094 1096 1044 +1092 1095 1097 1101 +1095 1092 1098 1046 +1094 1093 1099 1103 +1097 -1 1092 1058 +1096 -1 1093 1117 +1099 -1 1094 1258 +1098 -1 1095 1409 +1101 1102 1105 820 +1100 1103 1104 1093 +1103 1100 1109 822 +1102 1101 1108 1095 +1105 1106 1101 1118 +1104 1107 1100 805 +1107 1104 1113 1120 +1106 1105 1112 807 +1109 1110 1103 1404 +1108 1111 1102 1317 +1111 1108 1115 1406 +1110 1109 1114 1319 +1113 1114 1107 2124 +1112 1115 1106 2087 +1115 1112 1111 2126 +1114 1113 1110 2089 +1117 -1 1119 370 +1116 -1 1118 1097 +1119 1120 1117 1104 +1118 1121 1116 357 +1121 1118 1123 1106 +1120 1119 1122 359 +1123 -1 1121 1750 +1122 -1 1120 2085 +1125 1126 1128 1140 +1124 1127 1129 745 +1127 1124 1132 1142 +1126 1125 1133 747 +1129 1130 1124 1204 +1128 1131 1125 757 +1131 1128 1138 1206 +1130 1129 1139 759 +1133 1134 1126 1276 +1132 1135 1127 1077 +1135 1132 1136 1278 +1134 1133 1137 1079 +1137 1138 1134 1476 +1136 1139 1135 1457 +1139 1136 1130 1478 +1138 1137 1131 1459 +1141 1142 1144 1124 +1140 1143 1145 1157 +1143 1140 1148 1126 +1142 1141 1149 1159 +1145 1146 1140 1208 +1144 1147 1141 1193 +1147 1144 1152 1210 +1146 1145 1153 1195 +1149 1150 1142 1280 +1148 1151 1143 1265 +1151 1148 1154 1282 +1150 1149 1155 1267 +1153 1154 1146 8532 +1152 1155 1147 8485 +1155 1152 1150 8534 +1154 1153 1151 8487 +1157 1158 1161 744 +1156 1159 1160 1141 +1159 1156 1165 746 +1158 1157 1164 1143 +1161 1162 1157 1188 +1160 1163 1156 665 +1163 1160 1169 1190 +1162 1161 1168 667 +1165 1166 1159 1260 +1164 1167 1158 1049 +1167 1164 1171 1262 +1166 1165 1170 1051 +1169 1170 1163 824 +1168 1171 1162 1325 +1171 1168 1167 826 +1170 1169 1166 1327 +1173 1174 1176 664 +1172 1175 1177 1189 +1175 1172 1180 666 +1174 1173 1181 1191 +1177 1178 1172 696 +1176 1179 1173 1237 +1179 1176 1184 698 +1178 1177 1185 1239 +1181 1182 1174 776 +1180 1183 1175 1373 +1183 1180 1186 778 +1182 1181 1187 1375 +1185 1186 1178 856 +1184 1187 1179 1669 +1187 1184 1182 858 +1186 1185 1183 1671 +1189 1190 1193 1160 +1188 1191 1192 1173 +1191 1188 1197 1162 +1190 1189 1196 1175 +1193 1194 1189 1240 +1192 1195 1188 1145 +1195 1192 1203 1242 +1194 1193 1202 1147 +1197 1198 1191 1376 +1196 1199 1190 1329 +1199 1196 1201 1378 +1198 1197 1200 1331 +1201 1202 1199 8476 +1200 1203 1198 8445 +1203 1200 1195 8478 +1202 1201 1194 8447 +1205 1206 1208 1128 +1204 1207 1209 1221 +1207 1204 1212 1130 +1206 1205 1213 1223 +1209 1210 1204 1144 +1208 1211 1205 1241 +1211 1208 1216 1146 +1210 1209 1217 1243 +1213 1214 1206 1484 +1212 1215 1207 1585 +1215 1212 1218 1486 +1214 1213 1219 1587 +1217 1218 1210 8536 +1216 1219 1211 8517 +1219 1216 1214 8538 +1218 1217 1215 8519 +1221 1222 1225 756 +1220 1223 1224 1205 +1223 1220 1229 758 +1222 1221 1228 1207 +1225 1226 1221 1236 +1224 1227 1220 697 +1227 1224 1233 1238 +1226 1225 1232 699 +1229 1230 1223 1580 +1228 1231 1222 1521 +1231 1228 1235 1582 +1230 1229 1234 1523 +1233 1234 1227 904 +1232 1235 1226 1621 +1235 1232 1231 906 +1234 1233 1230 1623 +1237 1238 1241 1224 +1236 1239 1240 1177 +1239 1236 1245 1226 +1238 1237 1244 1179 +1241 1242 1237 1192 +1240 1243 1236 1209 +1243 1240 1251 1194 +1242 1241 1250 1211 +1245 1246 1239 1672 +1244 1247 1238 1625 +1247 1244 1249 1674 +1246 1245 1248 1627 +1249 1250 1247 8508 +1248 1251 1246 8449 +1251 1248 1243 8510 +1250 1249 1242 8451 +1253 1254 1256 1048 +1252 1255 1257 1261 +1255 1252 1258 1050 +1254 1253 1259 1263 +1257 -1 1252 1066 +1256 -1 1253 1301 +1259 -1 1254 1098 +1258 -1 1255 1413 +1261 1262 1265 1164 +1260 1263 1264 1253 +1263 1260 1269 1166 +1262 1261 1268 1255 +1265 1266 1261 1302 +1264 1267 1260 1149 +1267 1264 1275 1304 +1266 1265 1274 1151 +1269 1270 1263 1414 +1268 1271 1262 1333 +1271 1268 1273 1416 +1270 1269 1272 1335 +1273 1274 1271 8488 +1272 1275 1270 10107 +1275 1272 1267 8490 +1274 1273 1266 10109 +1277 1278 1280 1132 +1276 1279 1281 1293 +1279 1276 1284 1134 +1278 1277 1285 1295 +1281 1282 1276 1148 +1280 1283 1277 1303 +1283 1280 1288 1150 +1282 1281 1289 1305 +1285 1286 1278 1480 +1284 1287 1279 1471 +1287 1284 1290 1482 +1286 1285 1291 1473 +1289 1290 1282 8540 +1288 1291 1283 10127 +1291 1288 1286 8542 +1290 1289 1287 10129 +1293 1294 1297 1076 +1292 1295 1296 1277 +1295 1292 1299 1078 +1294 1293 1298 1279 +1297 -1 1293 1300 +1296 -1 1292 1067 +1299 -1 1295 1468 +1298 -1 1294 1431 +1301 -1 1303 1296 +1300 -1 1302 1257 +1303 1304 1301 1264 +1302 1305 1300 1281 +1305 1302 1307 1266 +1304 1303 1306 1283 +1307 -1 1305 10124 +1306 -1 1304 10111 +1309 1310 1312 1324 +1308 1311 1313 825 +1311 1308 1316 1326 +1310 1309 1317 827 +1313 1314 1308 1340 +1312 1315 1309 837 +1315 1312 1322 1342 +1314 1313 1323 839 +1317 1318 1310 1388 +1316 1319 1311 1109 +1319 1316 1320 1390 +1318 1317 1321 1111 +1321 1322 1318 2220 +1320 1323 1319 2133 +1323 1320 1314 2222 +1322 1321 1315 2135 +1325 1326 1328 1308 +1324 1327 1329 1169 +1327 1324 1332 1310 +1326 1325 1333 1171 +1329 1330 1324 1344 +1328 1331 1325 1197 +1331 1328 1336 1346 +1330 1329 1337 1199 +1333 1334 1326 1392 +1332 1335 1327 1269 +1335 1332 1338 1394 +1334 1333 1339 1271 +1337 1338 1330 8204 +1336 1339 1331 8481 +1339 1336 1334 8206 +1338 1337 1335 8483 +1341 1342 1344 1312 +1340 1343 1345 1357 +1343 1340 1348 1314 +1342 1341 1349 1359 +1345 1346 1340 1328 +1344 1347 1341 1377 +1347 1344 1354 1330 +1346 1345 1355 1379 +1349 1350 1342 2228 +1348 1351 1343 2385 +1351 1348 1352 2230 +1350 1349 1353 2387 +1353 1354 1350 8196 +1352 1355 1351 8133 +1355 1352 1346 8198 +1354 1353 1347 8135 +1357 1358 1361 836 +1356 1359 1360 1341 +1359 1356 1365 838 +1358 1357 1364 1343 +1361 1362 1357 1372 +1360 1363 1356 777 +1363 1360 1369 1374 +1362 1361 1368 779 +1365 1366 1359 2380 +1364 1367 1358 2281 +1367 1364 1371 2382 +1366 1365 1370 2283 +1369 1370 1363 984 +1368 1371 1362 2429 +1371 1368 1367 986 +1370 1369 1366 2431 +1373 1374 1377 1360 +1372 1375 1376 1181 +1375 1372 1381 1362 +1374 1373 1380 1183 +1377 1378 1373 1196 +1376 1379 1372 1345 +1379 1376 1387 1198 +1378 1377 1386 1347 +1381 1382 1375 1676 +1380 1383 1374 2433 +1383 1380 1385 1678 +1382 1381 1384 2435 +1385 1386 1383 8136 +1384 1387 1382 8437 +1387 1384 1379 8138 +1386 1385 1378 8439 +1389 1390 1392 1316 +1388 1391 1393 1405 +1391 1388 1396 1318 +1390 1389 1397 1407 +1393 1394 1388 1332 +1392 1395 1389 1415 +1395 1392 1402 1334 +1394 1393 1403 1417 +1397 1398 1390 2224 +1396 1399 1391 2215 +1399 1396 1400 2226 +1398 1397 1401 2217 +1401 1402 1398 8208 +1400 1403 1399 10067 +1403 1400 1394 8210 +1402 1401 1395 10069 +1405 1406 1409 1108 +1404 1407 1408 1389 +1407 1404 1411 1110 +1406 1405 1410 1391 +1409 -1 1405 1412 +1408 -1 1404 1099 +1411 -1 1407 2212 +1410 -1 1406 2091 +1413 -1 1415 1408 +1412 -1 1414 1259 +1415 1416 1413 1268 +1414 1417 1412 1393 +1417 1414 1419 1270 +1416 1415 1418 1395 +1419 -1 1417 10070 +1418 -1 1416 10105 +1421 -1 1422 1424 +1420 -1 1423 75 +1423 -1 1420 1432 +1422 -1 1421 107 +1425 -1 1426 1420 +1424 -1 1427 1091 +1427 1428 1424 1434 +1426 1429 1425 1081 +1429 1426 1430 1436 +1428 1427 1431 1083 +1431 -1 1428 1464 +1430 -1 1429 1299 +1433 -1 1434 1422 +1432 -1 1435 1441 +1435 1436 1432 1426 +1434 1437 1433 1449 +1437 1434 1438 1428 +1436 1435 1439 1451 +1439 -1 1436 1466 +1438 -1 1437 1497 +1441 -1 1443 106 +1440 -1 1442 1433 +1443 1444 1441 1452 +1442 1445 1440 89 +1445 1442 1447 1454 +1444 1443 1446 91 +1447 -1 1445 470 +1446 -1 1444 1537 +1449 1450 1453 1080 +1448 1451 1452 1435 +1451 1448 1457 1082 +1450 1449 1456 1437 +1453 1454 1449 1442 +1452 1455 1448 729 +1455 1452 1461 1444 +1454 1453 1460 731 +1457 1458 1451 1492 +1456 1459 1450 1137 +1459 1456 1463 1494 +1458 1457 1462 1139 +1461 1462 1455 760 +1460 1463 1454 1533 +1463 1460 1459 762 +1462 1461 1458 1535 +1465 -1 1466 1430 +1464 -1 1467 1469 +1467 -1 1464 1438 +1466 -1 1465 1501 +1469 -1 1471 1298 +1468 -1 1470 1465 +1471 1472 1469 1502 +1470 1473 1468 1285 +1473 1470 1475 1504 +1472 1471 1474 1287 +1475 -1 1473 10130 +1474 -1 1472 10173 +1477 1478 1480 1136 +1476 1479 1481 1493 +1479 1476 1484 1138 +1478 1477 1485 1495 +1481 1482 1476 1284 +1480 1483 1477 1503 +1483 1480 1488 1286 +1482 1481 1489 1505 +1485 1486 1478 1212 +1484 1487 1479 1599 +1487 1484 1490 1214 +1486 1485 1491 1601 +1489 1490 1482 8544 +1488 1491 1483 10187 +1491 1488 1486 8546 +1490 1489 1487 10189 +1493 1494 1497 1456 +1492 1495 1496 1477 +1495 1492 1499 1458 +1494 1493 1498 1479 +1497 -1 1493 1500 +1496 -1 1492 1439 +1499 -1 1495 1596 +1498 -1 1494 1539 +1501 -1 1503 1496 +1500 -1 1502 1467 +1503 1504 1501 1470 +1502 1505 1500 1481 +1505 1502 1507 1472 +1504 1503 1506 1483 +1507 -1 1505 10184 +1506 -1 1504 10175 +1509 1510 1512 1524 +1508 1511 1513 713 +1511 1508 1516 1526 +1510 1509 1517 715 +1513 1514 1508 1532 +1512 1515 1509 761 +1515 1512 1520 1534 +1514 1513 1521 763 +1517 1518 1510 1540 +1516 1519 1511 901 +1519 1516 1522 1542 +1518 1517 1523 903 +1521 1522 1514 1572 +1520 1523 1515 1229 +1523 1520 1518 1574 +1522 1521 1519 1231 +1525 1526 1528 1508 +1524 1527 1529 485 +1527 1524 1530 1510 +1526 1525 1531 487 +1529 -1 1524 1536 +1528 -1 1525 471 +1531 -1 1526 1544 +1530 -1 1527 563 +1533 1534 1536 1512 +1532 1535 1537 1461 +1535 1532 1538 1514 +1534 1533 1539 1463 +1537 -1 1532 1528 +1536 -1 1533 1447 +1539 -1 1534 1576 +1538 -1 1535 1499 +1541 1542 1544 1516 +1540 1543 1545 1549 +1543 1540 1546 1518 +1542 1541 1547 1551 +1545 -1 1540 1530 +1544 -1 1541 1565 +1547 -1 1542 1578 +1546 -1 1543 1705 +1549 1550 1553 900 +1548 1551 1552 1541 +1551 1548 1557 902 +1550 1549 1556 1543 +1553 1554 1549 1566 +1552 1555 1548 885 +1555 1552 1561 1568 +1554 1553 1560 887 +1557 1558 1551 1700 +1556 1559 1550 1613 +1559 1556 1563 1702 +1558 1557 1562 1615 +1561 1562 1555 3816 +1560 1563 1554 6023 +1563 1560 1559 3818 +1562 1561 1558 6025 +1565 -1 1567 562 +1564 -1 1566 1545 +1567 1568 1565 1552 +1566 1569 1564 549 +1569 1566 1571 1554 +1568 1567 1570 551 +1571 -1 1569 5950 +1570 -1 1568 6021 +1573 1574 1576 1520 +1572 1575 1577 1581 +1575 1572 1578 1522 +1574 1573 1579 1583 +1577 -1 1572 1538 +1576 -1 1573 1597 +1579 -1 1574 1546 +1578 -1 1575 1709 +1581 1582 1585 1228 +1580 1583 1584 1573 +1583 1580 1589 1230 +1582 1581 1588 1575 +1585 1586 1581 1598 +1584 1587 1580 1213 +1587 1584 1593 1600 +1586 1585 1592 1215 +1589 1590 1583 1710 +1588 1591 1582 1629 +1591 1588 1595 1712 +1590 1589 1594 1631 +1593 1594 1587 8520 +1592 1595 1586 10207 +1595 1592 1591 8522 +1594 1593 1590 10209 +1597 -1 1599 1498 +1596 -1 1598 1577 +1599 1600 1597 1584 +1598 1601 1596 1485 +1601 1598 1603 1586 +1600 1599 1602 1487 +1603 -1 1601 10190 +1602 -1 1600 10205 +1605 1606 1608 1620 +1604 1607 1609 905 +1607 1604 1612 1622 +1606 1605 1613 907 +1609 1610 1604 1636 +1608 1611 1605 917 +1611 1608 1616 1638 +1610 1609 1617 919 +1613 1614 1606 1684 +1612 1615 1607 1557 +1615 1612 1618 1686 +1614 1613 1619 1559 +1617 1618 1610 3884 +1616 1619 1611 3813 +1619 1616 1614 3886 +1618 1617 1615 3815 +1621 1622 1624 1604 +1620 1623 1625 1233 +1623 1620 1628 1606 +1622 1621 1629 1235 +1625 1626 1620 1640 +1624 1627 1621 1245 +1627 1624 1632 1642 +1626 1625 1633 1247 +1629 1630 1622 1688 +1628 1631 1623 1589 +1631 1628 1634 1690 +1630 1629 1635 1591 +1633 1634 1626 8380 +1632 1635 1627 8513 +1635 1632 1630 8382 +1634 1633 1631 8515 +1637 1638 1640 1608 +1636 1639 1641 1653 +1639 1636 1644 1610 +1638 1637 1645 1655 +1641 1642 1636 1624 +1640 1643 1637 1673 +1643 1640 1650 1626 +1642 1641 1651 1675 +1645 1646 1638 3888 +1644 1647 1639 3861 +1647 1644 1648 3890 +1646 1645 1649 3863 +1649 1650 1646 8372 +1648 1651 1647 8309 +1651 1648 1642 8374 +1650 1649 1643 8311 +1653 1654 1657 916 +1652 1655 1656 1637 +1655 1652 1667 918 +1654 1653 1666 1639 +1657 1658 1653 1668 +1656 1659 1652 857 +1659 1656 1661 1670 +1658 1657 1660 859 +1661 1662 1659 996 +1660 1663 1658 2445 +1663 1660 1665 998 +1662 1661 1664 2447 +1665 1666 1663 3852 +1664 1667 1662 3753 +1667 1664 1655 3854 +1666 1665 1654 3755 +1669 1670 1673 1656 +1668 1671 1672 1185 +1671 1668 1677 1658 +1670 1669 1676 1187 +1673 1674 1669 1244 +1672 1675 1668 1641 +1675 1672 1683 1246 +1674 1673 1682 1643 +1677 1678 1671 1380 +1676 1679 1670 2449 +1679 1676 1681 1382 +1678 1677 1680 2451 +1681 1682 1679 8312 +1680 1683 1678 8441 +1683 1680 1675 8314 +1682 1681 1674 8443 +1685 1686 1688 1612 +1684 1687 1689 1701 +1687 1684 1692 1614 +1686 1685 1693 1703 +1689 1690 1684 1628 +1688 1691 1685 1711 +1691 1688 1696 1630 +1690 1689 1697 1713 +1693 1694 1686 3892 +1692 1695 1687 6087 +1695 1692 1698 3894 +1694 1693 1699 6089 +1697 1698 1690 8384 +1696 1699 1691 10227 +1699 1696 1694 8386 +1698 1697 1695 10229 +1701 1702 1705 1556 +1700 1703 1704 1685 +1703 1700 1707 1558 +1702 1701 1706 1687 +1705 -1 1701 1708 +1704 -1 1700 1547 +1707 -1 1703 6084 +1706 -1 1702 6027 +1709 -1 1711 1704 +1708 -1 1710 1579 +1711 1712 1709 1588 +1710 1713 1708 1689 +1713 1710 1715 1590 +1712 1711 1714 1691 +1715 -1 1713 10224 +1714 -1 1712 10211 +1717 -1 1718 1720 +1716 -1 1719 347 +1719 -1 1716 1736 +1718 -1 1717 379 +1721 -1 1722 1716 +1720 -1 1723 1729 +1723 1724 1720 1738 +1722 1725 1721 1773 +1725 1722 1726 1740 +1724 1723 1727 1775 +1727 -1 1724 1904 +1726 -1 1725 1901 +1729 -1 1731 346 +1728 -1 1730 1721 +1731 1732 1729 1768 +1730 1733 1728 325 +1733 1730 1735 1770 +1732 1731 1734 327 +1735 -1 1733 394 +1734 -1 1732 1801 +1737 -1 1738 1718 +1736 -1 1739 1745 +1739 1740 1736 1722 +1738 1741 1737 1785 +1741 1738 1742 1724 +1740 1739 1743 1787 +1743 -1 1740 1906 +1742 -1 1741 1937 +1745 -1 1747 378 +1744 -1 1746 1737 +1747 1748 1745 1788 +1746 1749 1744 361 +1749 1746 1751 1790 +1748 1747 1750 363 +1751 -1 1749 1122 +1750 -1 1748 2077 +1753 1754 1756 324 +1752 1755 1757 1769 +1755 1752 1760 326 +1754 1753 1761 1771 +1757 1758 1752 360 +1756 1759 1753 1789 +1759 1756 1764 362 +1758 1757 1765 1791 +1761 1762 1754 408 +1760 1763 1755 1837 +1763 1760 1766 410 +1762 1761 1767 1839 +1765 1766 1758 808 +1764 1767 1759 2113 +1767 1764 1762 810 +1766 1765 1763 2115 +1769 1770 1773 1730 +1768 1771 1772 1753 +1771 1768 1777 1732 +1770 1769 1776 1755 +1773 1774 1769 1784 +1772 1775 1768 1723 +1775 1772 1781 1786 +1774 1773 1780 1725 +1777 1778 1771 1832 +1776 1779 1770 1803 +1779 1776 1783 1834 +1778 1777 1782 1805 +1781 1782 1775 1896 +1780 1783 1774 1865 +1783 1780 1779 1898 +1782 1781 1778 1867 +1785 1786 1789 1772 +1784 1787 1788 1739 +1787 1784 1793 1774 +1786 1785 1792 1741 +1789 1790 1785 1746 +1788 1791 1784 1757 +1791 1788 1797 1748 +1790 1789 1796 1759 +1793 1794 1787 1932 +1792 1795 1786 1869 +1795 1792 1799 1934 +1794 1793 1798 1871 +1797 1798 1791 2108 +1796 1799 1790 2079 +1799 1796 1795 2110 +1798 1797 1794 2081 +1801 -1 1802 1808 +1800 -1 1803 1735 +1803 1804 1800 1816 +1802 1805 1801 1777 +1805 1802 1806 1818 +1804 1803 1807 1779 +1807 -1 1804 1948 +1806 -1 1805 1903 +1809 -1 1810 1800 +1808 -1 1811 395 +1811 1812 1808 1820 +1810 1813 1809 441 +1813 1810 1814 1822 +1812 1811 1815 443 +1815 -1 1812 2012 +1814 -1 1813 1027 +1817 1818 1820 1802 +1816 1819 1821 1833 +1819 1816 1824 1804 +1818 1817 1825 1835 +1821 1822 1816 1810 +1820 1823 1817 1849 +1823 1820 1828 1812 +1822 1821 1829 1851 +1825 1826 1818 1950 +1824 1827 1819 1985 +1827 1824 1830 1952 +1826 1825 1831 1987 +1829 1830 1822 2014 +1828 1831 1823 2049 +1831 1828 1826 2016 +1830 1829 1827 2051 +1833 1834 1837 1776 +1832 1835 1836 1817 +1835 1832 1841 1778 +1834 1833 1840 1819 +1837 1838 1833 1852 +1836 1839 1832 1761 +1839 1836 1845 1854 +1838 1837 1844 1763 +1841 1842 1835 1980 +1840 1843 1834 1873 +1843 1840 1847 1982 +1842 1841 1846 1875 +1845 1846 1839 2120 +1844 1847 1838 2289 +1847 1844 1843 2122 +1846 1845 1842 2291 +1849 1850 1853 440 +1848 1851 1852 1821 +1851 1848 1857 442 +1850 1849 1856 1823 +1853 1854 1849 1836 +1852 1855 1848 409 +1855 1852 1861 1838 +1854 1853 1860 411 +1857 1858 1851 2044 +1856 1859 1850 937 +1859 1856 1863 2046 +1858 1857 1862 939 +1861 1862 1855 792 +1860 1863 1854 2285 +1863 1860 1859 794 +1862 1861 1858 2287 +1865 1866 1868 1880 +1864 1867 1869 1781 +1867 1864 1872 1882 +1866 1865 1873 1783 +1869 1870 1864 1916 +1868 1871 1865 1793 +1871 1868 1876 1918 +1870 1869 1877 1795 +1873 1874 1866 1964 +1872 1875 1867 1841 +1875 1872 1878 1966 +1874 1873 1879 1843 +1877 1878 1870 2156 +1876 1879 1871 2117 +1879 1876 1874 2158 +1878 1877 1875 2119 +1881 1882 1884 1864 +1880 1883 1885 1897 +1883 1880 1888 1866 +1882 1881 1889 1899 +1885 1886 1880 1920 +1884 1887 1881 1911 +1887 1884 1894 1922 +1886 1885 1895 1913 +1889 1890 1882 1968 +1888 1891 1883 1959 +1891 1888 1892 1970 +1890 1889 1893 1961 +1893 1894 1890 4308 +1892 1895 1891 4607 +1895 1892 1886 4310 +1894 1893 1887 4609 +1897 1898 1901 1780 +1896 1899 1900 1881 +1899 1896 1903 1782 +1898 1897 1902 1883 +1901 -1 1897 1908 +1900 -1 1896 1727 +1903 -1 1899 1956 +1902 -1 1898 1807 +1905 -1 1906 1726 +1904 -1 1907 1909 +1907 -1 1904 1742 +1906 -1 1905 1941 +1909 -1 1911 1900 +1908 -1 1910 1905 +1911 1912 1909 1942 +1910 1913 1908 1885 +1913 1910 1915 1944 +1912 1911 1914 1887 +1915 -1 1913 4610 +1914 -1 1912 4941 +1917 1918 1920 1868 +1916 1919 1921 1933 +1919 1916 1924 1870 +1918 1917 1925 1935 +1921 1922 1916 1884 +1920 1923 1917 1943 +1923 1920 1928 1886 +1922 1921 1929 1945 +1925 1926 1918 2160 +1924 1927 1919 2151 +1927 1924 1930 2162 +1926 1925 1931 2153 +1929 1930 1922 4312 +1928 1931 1923 4963 +1931 1928 1926 4314 +1930 1929 1927 4965 +1933 1934 1937 1792 +1932 1935 1936 1917 +1935 1932 1939 1794 +1934 1933 1938 1919 +1937 -1 1933 1940 +1936 -1 1932 1743 +1939 -1 1935 2148 +1938 -1 1934 2083 +1941 -1 1943 1936 +1940 -1 1942 1907 +1943 1944 1941 1910 +1942 1945 1940 1921 +1945 1942 1947 1912 +1944 1943 1946 1923 +1947 -1 1945 4960 +1946 -1 1944 4943 +1949 -1 1950 1806 +1948 -1 1951 1957 +1951 1952 1948 1824 +1950 1953 1949 1997 +1953 1950 1954 1826 +1952 1951 1955 1999 +1955 -1 1952 2018 +1954 -1 1953 2661 +1957 -1 1959 1902 +1956 -1 1958 1949 +1959 1960 1957 2000 +1958 1961 1956 1889 +1961 1958 1963 2002 +1960 1959 1962 1891 +1963 -1 1961 4604 +1962 -1 1960 4577 +1965 1966 1968 1872 +1964 1967 1969 1981 +1967 1964 1972 1874 +1966 1965 1973 1983 +1969 1970 1964 1888 +1968 1971 1965 2001 +1971 1968 1978 1890 +1970 1969 1979 2003 +1973 1974 1966 2164 +1972 1975 1967 2529 +1975 1972 1976 2166 +1974 1973 1977 2531 +1977 1978 1974 4300 +1976 1979 1975 4257 +1979 1976 1970 4302 +1978 1977 1971 4259 +1981 1982 1985 1840 +1980 1983 1984 1965 +1983 1980 1989 1842 +1982 1981 1988 1967 +1985 1986 1981 1996 +1984 1987 1980 1825 +1987 1984 1995 1998 +1986 1985 1994 1827 +1989 1990 1983 2524 +1988 1991 1982 2297 +1991 1988 1993 2526 +1990 1989 1992 2299 +1993 1994 1991 2056 +1992 1995 1990 2573 +1995 1992 1987 2058 +1994 1993 1986 2575 +1997 1998 2001 1984 +1996 1999 2000 1951 +1999 1996 2005 1986 +1998 1997 2004 1953 +2001 2002 1997 1958 +2000 2003 1996 1969 +2003 2000 2009 1960 +2002 2001 2008 1971 +2005 2006 1999 2662 +2004 2007 1998 2581 +2007 2004 2011 2664 +2006 2005 2010 2583 +2009 2010 2003 4264 +2008 2011 2002 4573 +2011 2008 2007 4266 +2010 2009 2006 4575 +2013 -1 2014 1814 +2012 -1 2015 2021 +2015 2016 2012 1828 +2014 2017 2013 2061 +2017 2014 2018 1830 +2016 2015 2019 2063 +2019 -1 2016 1954 +2018 -1 2017 2657 +2021 -1 2023 1026 +2020 -1 2022 2013 +2023 2024 2021 2064 +2022 2025 2020 1013 +2025 2022 2027 2066 +2024 2023 2026 1015 +2027 -1 2025 2796 +2026 -1 2024 2781 +2029 2030 2032 936 +2028 2031 2033 2045 +2031 2028 2036 938 +2030 2029 2037 2047 +2033 2034 2028 1012 +2032 2035 2029 2065 +2035 2032 2040 1014 +2034 2033 2041 2067 +2037 2038 2030 964 +2036 2039 2031 2353 +2039 2036 2042 966 +2038 2037 2043 2355 +2041 2042 2034 2840 +2040 2043 2035 2825 +2043 2040 2038 2842 +2042 2041 2039 2827 +2045 2046 2049 1856 +2044 2047 2048 2029 +2047 2044 2053 1858 +2046 2045 2052 2031 +2049 2050 2045 2060 +2048 2051 2044 1829 +2051 2048 2059 2062 +2050 2049 2058 1831 +2053 2054 2047 2348 +2052 2055 2046 2293 +2055 2052 2057 2350 +2054 2053 2056 2295 +2057 2058 2055 1992 +2056 2059 2054 2557 +2059 2056 2051 1994 +2058 2057 2050 2559 +2061 2062 2065 2048 +2060 2063 2064 2015 +2063 2060 2069 2050 +2062 2061 2068 2017 +2065 2066 2061 2022 +2064 2067 2060 2033 +2067 2064 2073 2024 +2066 2065 2072 2035 +2069 2070 2063 2652 +2068 2071 2062 2565 +2071 2068 2075 2654 +2070 2069 2074 2567 +2073 2074 2067 2820 +2072 2075 2066 2783 +2075 2072 2071 2822 +2074 2073 2070 2785 +2077 -1 2078 2084 +2076 -1 2079 1751 +2079 2080 2076 2092 +2078 2081 2077 1797 +2081 2078 2082 2094 +2080 2079 2083 1799 +2083 -1 2080 2140 +2082 -1 2081 1939 +2085 -1 2086 2076 +2084 -1 2087 1123 +2087 2088 2084 2096 +2086 2089 2085 1113 +2089 2086 2090 2098 +2088 2087 2091 1115 +2091 -1 2088 2204 +2090 -1 2089 1411 +2093 2094 2096 2078 +2092 2095 2097 2109 +2095 2092 2100 2080 +2094 2093 2101 2111 +2097 2098 2092 2086 +2096 2099 2093 2125 +2099 2096 2104 2088 +2098 2097 2105 2127 +2101 2102 2094 2142 +2100 2103 2095 2177 +2103 2100 2106 2144 +2102 2101 2107 2179 +2105 2106 2098 2206 +2104 2107 2099 2241 +2107 2104 2102 2208 +2106 2105 2103 2243 +2109 2110 2113 1796 +2108 2111 2112 2093 +2111 2108 2117 1798 +2110 2109 2116 2095 +2113 2114 2109 2128 +2112 2115 2108 1765 +2115 2112 2121 2130 +2114 2113 2120 1767 +2117 2118 2111 2172 +2116 2119 2110 1877 +2119 2116 2123 2174 +2118 2117 2122 1879 +2121 2122 2115 1844 +2120 2123 2114 2305 +2123 2120 2119 1846 +2122 2121 2118 2307 +2125 2126 2129 1112 +2124 2127 2128 2097 +2127 2124 2133 1114 +2126 2125 2132 2099 +2129 2130 2125 2112 +2128 2131 2124 809 +2131 2128 2137 2114 +2130 2129 2136 811 +2133 2134 2127 2236 +2132 2135 2126 1321 +2135 2132 2139 2238 +2134 2133 2138 1323 +2137 2138 2131 840 +2136 2139 2130 2301 +2139 2136 2135 842 +2138 2137 2134 2303 +2141 -1 2142 2082 +2140 -1 2143 2149 +2143 2144 2140 2100 +2142 2145 2141 2189 +2145 2142 2146 2102 +2144 2143 2147 2191 +2147 -1 2144 2210 +2146 -1 2145 2721 +2149 -1 2151 1938 +2148 -1 2150 2141 +2151 2152 2149 2192 +2150 2153 2148 1925 +2153 2150 2155 2194 +2152 2151 2154 1927 +2155 -1 2153 4966 +2154 -1 2152 5049 +2157 2158 2160 1876 +2156 2159 2161 2173 +2159 2156 2164 1878 +2158 2157 2165 2175 +2161 2162 2156 1924 +2160 2163 2157 2193 +2163 2160 2170 1926 +2162 2161 2171 2195 +2165 2166 2158 1972 +2164 2167 2159 2545 +2167 2164 2168 1974 +2166 2165 2169 2547 +2169 2170 2166 4304 +2168 2171 2167 4289 +2171 2168 2162 4306 +2170 2169 2163 4291 +2173 2174 2177 2116 +2172 2175 2176 2157 +2175 2172 2181 2118 +2174 2173 2180 2159 +2177 2178 2173 2188 +2176 2179 2172 2101 +2179 2176 2185 2190 +2178 2177 2184 2103 +2181 2182 2175 2540 +2180 2183 2174 2313 +2183 2180 2187 2542 +2182 2181 2186 2315 +2185 2186 2179 2248 +2184 2187 2178 2669 +2187 2184 2183 2250 +2186 2185 2182 2671 +2189 2190 2193 2176 +2188 2191 2192 2143 +2191 2188 2197 2178 +2190 2189 2196 2145 +2193 2194 2189 2150 +2192 2195 2188 2161 +2195 2192 2201 2152 +2194 2193 2200 2163 +2197 2198 2191 2716 +2196 2199 2190 2673 +2199 2196 2203 2718 +2198 2197 2202 2675 +2201 2202 2195 4296 +2200 2203 2194 5045 +2203 2200 2199 4298 +2202 2201 2198 5047 +2205 -1 2206 2090 +2204 -1 2207 2213 +2207 2208 2204 2104 +2206 2209 2205 2253 +2209 2206 2210 2106 +2208 2207 2211 2255 +2211 -1 2208 2146 +2210 -1 2209 2725 +2213 -1 2215 1410 +2212 -1 2214 2205 +2215 2216 2213 2256 +2214 2217 2212 1397 +2217 2214 2219 2258 +2216 2215 2218 1399 +2219 -1 2217 10064 +2218 -1 2216 10049 +2221 2222 2224 1320 +2220 2223 2225 2237 +2223 2220 2228 1322 +2222 2221 2229 2239 +2225 2226 2220 1396 +2224 2227 2221 2257 +2227 2224 2234 1398 +2226 2225 2235 2259 +2229 2230 2222 1348 +2228 2231 2223 2401 +2231 2228 2232 1350 +2230 2229 2233 2403 +2233 2234 2230 8200 +2232 2235 2231 8185 +2235 2232 2226 8202 +2234 2233 2227 8187 +2237 2238 2241 2132 +2236 2239 2240 2221 +2239 2236 2245 2134 +2238 2237 2244 2223 +2241 2242 2237 2252 +2240 2243 2236 2105 +2243 2240 2249 2254 +2242 2241 2248 2107 +2245 2246 2239 2396 +2244 2247 2238 2309 +2247 2244 2251 2398 +2246 2245 2250 2311 +2249 2250 2243 2184 +2248 2251 2242 2685 +2251 2248 2247 2186 +2250 2249 2246 2687 +2253 2254 2257 2240 +2252 2255 2256 2207 +2255 2252 2261 2242 +2254 2253 2260 2209 +2257 2258 2253 2214 +2256 2259 2252 2225 +2259 2256 2265 2216 +2258 2257 2264 2227 +2261 2262 2255 2726 +2260 2263 2254 2689 +2263 2260 2267 2728 +2262 2261 2266 2691 +2265 2266 2259 8192 +2264 2267 2258 10045 +2267 2264 2263 8194 +2266 2265 2262 10047 +2269 2270 2272 2284 +2268 2271 2273 793 +2271 2268 2276 2286 +2270 2269 2277 795 +2273 2274 2268 2300 +2272 2275 2269 841 +2275 2272 2280 2302 +2274 2273 2281 843 +2277 2278 2270 2316 +2276 2279 2271 981 +2279 2276 2282 2318 +2278 2277 2283 983 +2281 2282 2274 2364 +2280 2283 2275 1365 +2283 2280 2278 2366 +2282 2281 2279 1367 +2285 2286 2288 2268 +2284 2287 2289 1861 +2287 2284 2292 2270 +2286 2285 2293 1863 +2289 2290 2284 2304 +2288 2291 2285 1845 +2291 2288 2296 2306 +2290 2289 2297 1847 +2293 2294 2286 2320 +2292 2295 2287 2053 +2295 2292 2298 2322 +2294 2293 2299 2055 +2297 2298 2290 2508 +2296 2299 2291 1989 +2299 2296 2294 2510 +2298 2297 2295 1991 +2301 2302 2304 2272 +2300 2303 2305 2137 +2303 2300 2308 2274 +2302 2301 2309 2139 +2305 2306 2300 2288 +2304 2307 2301 2121 +2307 2304 2312 2290 +2306 2305 2313 2123 +2309 2310 2302 2368 +2308 2311 2303 2245 +2311 2308 2314 2370 +2310 2309 2315 2247 +2313 2314 2306 2512 +2312 2315 2307 2181 +2315 2312 2310 2514 +2314 2313 2311 2183 +2317 2318 2320 2276 +2316 2319 2321 2333 +2319 2316 2324 2278 +2318 2317 2325 2335 +2321 2322 2316 2292 +2320 2323 2317 2349 +2323 2320 2328 2294 +2322 2321 2329 2351 +2325 2326 2318 2372 +2324 2327 2319 2481 +2327 2324 2330 2374 +2326 2325 2331 2483 +2329 2330 2322 2516 +2328 2331 2323 2609 +2331 2328 2326 2518 +2330 2329 2327 2611 +2333 2334 2337 980 +2332 2335 2336 2317 +2335 2332 2341 982 +2334 2333 2340 2319 +2337 2338 2333 2352 +2336 2339 2332 965 +2339 2336 2345 2354 +2338 2337 2344 967 +2341 2342 2335 2476 +2340 2343 2334 2421 +2343 2340 2347 2478 +2342 2341 2346 2423 +2345 2346 2339 3308 +2344 2347 2338 3265 +2347 2344 2343 3310 +2346 2345 2342 3267 +2349 2350 2353 2052 +2348 2351 2352 2321 +2351 2348 2357 2054 +2350 2349 2356 2323 +2353 2354 2349 2336 +2352 2355 2348 2037 +2355 2352 2361 2338 +2354 2353 2360 2039 +2357 2358 2351 2604 +2356 2359 2350 2561 +2359 2356 2363 2606 +2358 2357 2362 2563 +2361 2362 2355 2832 +2360 2363 2354 3261 +2363 2360 2359 2834 +2362 2361 2358 3263 +2365 2366 2368 2280 +2364 2367 2369 2381 +2367 2364 2372 2282 +2366 2365 2373 2383 +2369 2370 2364 2308 +2368 2371 2365 2397 +2371 2368 2376 2310 +2370 2369 2377 2399 +2373 2374 2366 2324 +2372 2375 2367 2493 +2375 2372 2378 2326 +2374 2373 2379 2495 +2377 2378 2370 2520 +2376 2379 2371 2765 +2379 2376 2374 2522 +2378 2377 2375 2767 +2381 2382 2385 1364 +2380 2383 2384 2365 +2383 2380 2389 1366 +2382 2381 2388 2367 +2385 2386 2381 2400 +2384 2387 2380 1349 +2387 2384 2395 2402 +2386 2385 2394 1351 +2389 2390 2383 2496 +2388 2391 2382 2437 +2391 2388 2393 2498 +2390 2389 2392 2439 +2393 2394 2391 8124 +2392 2395 2390 8097 +2395 2392 2387 8126 +2394 2393 2386 8099 +2397 2398 2401 2244 +2396 2399 2400 2369 +2399 2396 2405 2246 +2398 2397 2404 2371 +2401 2402 2397 2384 +2400 2403 2396 2229 +2403 2400 2409 2386 +2402 2401 2408 2231 +2405 2406 2399 2768 +2404 2407 2398 2693 +2407 2404 2411 2770 +2406 2405 2410 2695 +2409 2410 2403 8180 +2408 2411 2402 8105 +2411 2408 2407 8182 +2410 2409 2406 8107 +2413 2414 2416 2428 +2412 2415 2417 985 +2415 2412 2420 2430 +2414 2413 2421 987 +2417 2418 2412 2444 +2416 2419 2413 997 +2419 2416 2426 2446 +2418 2417 2427 999 +2421 2422 2414 2460 +2420 2423 2415 2341 +2423 2420 2424 2462 +2422 2421 2425 2343 +2425 2426 2422 3596 +2424 2427 2423 3317 +2427 2424 2418 3598 +2426 2425 2419 3319 +2429 2430 2432 2412 +2428 2431 2433 1369 +2431 2428 2436 2414 +2430 2429 2437 1371 +2433 2434 2428 2448 +2432 2435 2429 1381 +2435 2432 2442 2450 +2434 2433 2443 1383 +2437 2438 2430 2464 +2436 2439 2431 2389 +2439 2436 2440 2466 +2438 2437 2441 2391 +2441 2442 2438 7916 +2440 2443 2439 8129 +2443 2440 2434 7918 +2442 2441 2435 8131 +2445 2446 2448 2416 +2444 2447 2449 1661 +2447 2444 2452 2418 +2446 2445 2453 1663 +2449 2450 2444 2432 +2448 2451 2445 1677 +2451 2448 2458 2434 +2450 2449 2459 1679 +2453 2454 2446 3604 +2452 2455 2447 3857 +2455 2452 2456 3606 +2454 2453 2457 3859 +2457 2458 2454 7920 +2456 2459 2455 8305 +2459 2456 2450 7922 +2458 2457 2451 8307 +2461 2462 2464 2420 +2460 2463 2465 2477 +2463 2460 2468 2422 +2462 2461 2469 2479 +2465 2466 2460 2436 +2464 2467 2461 2497 +2467 2464 2474 2438 +2466 2465 2475 2499 +2469 2470 2462 3600 +2468 2471 2463 3585 +2471 2468 2472 3602 +2470 2469 2473 3587 +2473 2474 2470 7908 +2472 2475 2471 7873 +2475 2472 2466 7910 +2474 2473 2467 7875 +2477 2478 2481 2340 +2476 2479 2480 2461 +2479 2476 2485 2342 +2478 2477 2484 2463 +2481 2482 2477 2492 +2480 2483 2476 2325 +2483 2480 2491 2494 +2482 2481 2490 2327 +2485 2486 2479 3580 +2484 2487 2478 3273 +2487 2484 2489 3582 +2486 2485 2488 3275 +2489 2490 2487 2616 +2488 2491 2486 3661 +2491 2488 2483 2618 +2490 2489 2482 3663 +2493 2494 2497 2480 +2492 2495 2496 2373 +2495 2492 2501 2482 +2494 2493 2500 2375 +2497 2498 2493 2388 +2496 2499 2492 2465 +2499 2496 2505 2390 +2498 2497 2504 2467 +2501 2502 2495 2772 +2500 2503 2494 3669 +2503 2500 2507 2774 +2502 2501 2506 3671 +2505 2506 2499 7880 +2504 2507 2498 8093 +2507 2504 2503 7882 +2506 2505 2502 8095 +2509 2510 2512 2296 +2508 2511 2513 2525 +2511 2508 2516 2298 +2510 2509 2517 2527 +2513 2514 2508 2312 +2512 2515 2509 2541 +2515 2512 2520 2314 +2514 2513 2521 2543 +2517 2518 2510 2328 +2516 2519 2511 2621 +2519 2516 2522 2330 +2518 2517 2523 2623 +2521 2522 2514 2376 +2520 2523 2515 2753 +2523 2520 2518 2378 +2522 2521 2519 2755 +2525 2526 2529 1988 +2524 2527 2528 2509 +2527 2524 2533 1990 +2526 2525 2532 2511 +2529 2530 2525 2544 +2528 2531 2524 1973 +2531 2528 2537 2546 +2530 2529 2536 1975 +2533 2534 2527 2624 +2532 2535 2526 2577 +2535 2532 2539 2626 +2534 2533 2538 2579 +2537 2538 2531 4252 +2536 2539 2530 4221 +2539 2536 2535 4254 +2538 2537 2534 4223 +2541 2542 2545 2180 +2540 2543 2544 2513 +2543 2540 2549 2182 +2542 2541 2548 2515 +2545 2546 2541 2528 +2544 2547 2540 2165 +2547 2544 2553 2530 +2546 2545 2552 2167 +2549 2550 2543 2748 +2548 2551 2542 2677 +2551 2548 2555 2750 +2550 2549 2554 2679 +2553 2554 2547 4284 +2552 2555 2546 4225 +2555 2552 2551 4286 +2554 2553 2550 4227 +2557 2558 2560 2572 +2556 2559 2561 2057 +2559 2556 2564 2574 +2558 2557 2565 2059 +2561 2562 2556 2588 +2560 2563 2557 2357 +2563 2560 2570 2590 +2562 2561 2571 2359 +2565 2566 2558 2636 +2564 2567 2559 2069 +2567 2564 2568 2638 +2566 2565 2569 2071 +2569 2570 2566 2900 +2568 2571 2567 2829 +2571 2568 2562 2902 +2570 2569 2563 2831 +2573 2574 2576 2556 +2572 2575 2577 1993 +2575 2572 2580 2558 +2574 2573 2581 1995 +2577 2578 2572 2592 +2576 2579 2573 2533 +2579 2576 2584 2594 +2578 2577 2585 2535 +2581 2582 2574 2640 +2580 2583 2575 2005 +2583 2580 2586 2642 +2582 2581 2587 2007 +2585 2586 2578 4380 +2584 2587 2579 4261 +2587 2584 2582 4382 +2586 2585 2583 4263 +2589 2590 2592 2560 +2588 2591 2593 2605 +2591 2588 2596 2562 +2590 2589 2597 2607 +2593 2594 2588 2576 +2592 2595 2589 2625 +2595 2592 2600 2578 +2594 2593 2601 2627 +2597 2598 2590 2908 +2596 2599 2591 3361 +2599 2596 2602 2910 +2598 2597 2603 3363 +2601 2602 2594 4384 +2600 2603 2595 4369 +2603 2600 2598 4386 +2602 2601 2599 4371 +2605 2606 2609 2356 +2604 2607 2608 2589 +2607 2604 2613 2358 +2606 2605 2612 2591 +2609 2610 2605 2620 +2608 2611 2604 2329 +2611 2608 2619 2622 +2610 2609 2618 2331 +2613 2614 2607 3356 +2612 2615 2606 3269 +2615 2612 2617 3358 +2614 2613 2616 3271 +2617 2618 2615 2488 +2616 2619 2614 3645 +2619 2616 2611 2490 +2618 2617 2610 3647 +2621 2622 2625 2608 +2620 2623 2624 2517 +2623 2620 2629 2610 +2622 2621 2628 2519 +2625 2626 2621 2532 +2624 2627 2620 2593 +2627 2624 2633 2534 +2626 2625 2632 2595 +2629 2630 2623 2756 +2628 2631 2622 3653 +2631 2628 2635 2758 +2630 2629 2634 3655 +2633 2634 2627 4364 +2632 2635 2626 4229 +2635 2632 2631 4366 +2634 2633 2630 4231 +2637 2638 2640 2564 +2636 2639 2641 2653 +2639 2636 2644 2566 +2638 2637 2645 2655 +2641 2642 2636 2580 +2640 2643 2637 2663 +2643 2640 2648 2582 +2642 2641 2649 2665 +2645 2646 2638 2904 +2644 2647 2639 2895 +2647 2644 2650 2906 +2646 2645 2651 2897 +2649 2650 2642 4388 +2648 2651 2643 4639 +2651 2648 2646 4390 +2650 2649 2647 4641 +2653 2654 2657 2068 +2652 2655 2656 2637 +2655 2652 2659 2070 +2654 2653 2658 2639 +2657 -1 2653 2660 +2656 -1 2652 2019 +2659 -1 2655 2892 +2658 -1 2654 2787 +2661 -1 2663 2656 +2660 -1 2662 1955 +2663 2664 2661 2004 +2662 2665 2660 2641 +2665 2662 2667 2006 +2664 2663 2666 2643 +2667 -1 2665 4636 +2666 -1 2664 4579 +2669 2670 2672 2684 +2668 2671 2673 2185 +2671 2668 2676 2686 +2670 2669 2677 2187 +2673 2674 2668 2700 +2672 2675 2669 2197 +2675 2672 2682 2702 +2674 2673 2683 2199 +2677 2678 2670 2732 +2676 2679 2671 2549 +2679 2676 2680 2734 +2678 2677 2681 2551 +2681 2682 2678 4460 +2680 2683 2679 4293 +2683 2680 2674 4462 +2682 2681 2675 4295 +2685 2686 2688 2668 +2684 2687 2689 2249 +2687 2684 2692 2670 +2686 2685 2693 2251 +2689 2690 2684 2704 +2688 2691 2685 2261 +2691 2688 2698 2706 +2690 2689 2699 2263 +2693 2694 2686 2736 +2692 2695 2687 2405 +2695 2692 2696 2738 +2694 2693 2697 2407 +2697 2698 2694 8232 +2696 2699 2695 8189 +2699 2696 2690 8234 +2698 2697 2691 8191 +2701 2702 2704 2672 +2700 2703 2705 2717 +2703 2700 2708 2674 +2702 2701 2709 2719 +2705 2706 2700 2688 +2704 2707 2701 2727 +2707 2704 2712 2690 +2706 2705 2713 2729 +2709 2710 2702 4468 +2708 2711 2703 5087 +2711 2708 2714 4470 +2710 2709 2715 5089 +2713 2714 2706 8240 +2712 2715 2707 10087 +2715 2712 2710 8242 +2714 2713 2711 10089 +2717 2718 2721 2196 +2716 2719 2720 2701 +2719 2716 2723 2198 +2718 2717 2722 2703 +2721 -1 2717 2724 +2720 -1 2716 2147 +2723 -1 2719 5084 +2722 -1 2718 5051 +2725 -1 2727 2720 +2724 -1 2726 2211 +2727 2728 2725 2260 +2726 2729 2724 2705 +2729 2726 2731 2262 +2728 2727 2730 2707 +2731 -1 2729 10084 +2730 -1 2728 10051 +2733 2734 2736 2676 +2732 2735 2737 2749 +2735 2732 2740 2678 +2734 2733 2741 2751 +2737 2738 2732 2692 +2736 2739 2733 2769 +2739 2736 2744 2694 +2738 2737 2745 2771 +2741 2742 2734 4464 +2740 2743 2735 4449 +2743 2740 2746 4466 +2742 2741 2747 4451 +2745 2746 2738 8228 +2744 2747 2739 8165 +2747 2744 2742 8230 +2746 2745 2743 8167 +2749 2750 2753 2548 +2748 2751 2752 2733 +2751 2748 2761 2550 +2750 2749 2760 2735 +2753 2754 2749 2764 +2752 2755 2748 2521 +2755 2752 2757 2766 +2754 2753 2756 2523 +2757 2758 2755 2628 +2756 2759 2754 3725 +2759 2756 2763 2630 +2758 2757 2762 3727 +2761 2762 2751 4444 +2760 2763 2750 4233 +2763 2760 2759 4446 +2762 2761 2758 4235 +2765 2766 2769 2752 +2764 2767 2768 2377 +2767 2764 2773 2754 +2766 2765 2772 2379 +2769 2770 2765 2404 +2768 2771 2764 2737 +2771 2768 2779 2406 +2770 2769 2778 2739 +2773 2774 2767 2500 +2772 2775 2766 3729 +2775 2772 2777 2502 +2774 2773 2776 3731 +2777 2778 2775 8156 +2776 2779 2774 8101 +2779 2776 2771 8158 +2778 2777 2770 8103 +2781 -1 2782 2788 +2780 -1 2783 2027 +2783 2784 2780 2804 +2782 2785 2781 2073 +2785 2782 2786 2806 +2784 2783 2787 2075 +2787 -1 2784 2884 +2786 -1 2785 2659 +2789 -1 2790 2780 +2788 -1 2791 2797 +2791 2792 2788 2808 +2790 2793 2789 2857 +2793 2790 2794 2810 +2792 2791 2795 2859 +2795 -1 2792 3052 +2794 -1 2793 3049 +2797 -1 2799 2026 +2796 -1 2798 2789 +2799 2800 2797 2852 +2798 2801 2796 1017 +2801 2798 2803 2854 +2800 2799 2802 1019 +2803 -1 2801 1034 +2802 -1 2800 2949 +2805 2806 2808 2782 +2804 2807 2809 2821 +2807 2804 2812 2784 +2806 2805 2813 2823 +2809 2810 2804 2790 +2808 2811 2805 2869 +2811 2808 2816 2792 +2810 2809 2817 2871 +2813 2814 2806 2886 +2812 2815 2807 2921 +2815 2812 2818 2888 +2814 2813 2819 2923 +2817 2818 2810 3054 +2816 2819 2811 3089 +2819 2816 2814 3056 +2818 2817 2815 3091 +2821 2822 2825 2072 +2820 2823 2824 2805 +2823 2820 2829 2074 +2822 2821 2828 2807 +2825 2826 2821 2872 +2824 2827 2820 2041 +2827 2824 2833 2874 +2826 2825 2832 2043 +2829 2830 2823 2916 +2828 2831 2822 2569 +2831 2828 2835 2918 +2830 2829 2834 2571 +2833 2834 2827 2360 +2832 2835 2826 3245 +2835 2832 2831 2362 +2834 2833 2830 3247 +2837 2838 2840 1016 +2836 2839 2841 2853 +2839 2836 2844 1018 +2838 2837 2845 2855 +2841 2842 2836 2040 +2840 2843 2837 2873 +2843 2840 2848 2042 +2842 2841 2849 2875 +2845 2846 2838 952 +2844 2847 2839 2985 +2847 2844 2850 954 +2846 2845 2851 2987 +2849 2850 2842 968 +2848 2851 2843 3297 +2851 2848 2846 970 +2850 2849 2847 3299 +2853 2854 2857 2798 +2852 2855 2856 2837 +2855 2852 2861 2800 +2854 2853 2860 2839 +2857 2858 2853 2868 +2856 2859 2852 2791 +2859 2856 2865 2870 +2858 2857 2864 2793 +2861 2862 2855 2980 +2860 2863 2854 2951 +2863 2860 2867 2982 +2862 2861 2866 2953 +2865 2866 2859 3044 +2864 2867 2858 3013 +2867 2864 2863 3046 +2866 2865 2862 3015 +2869 2870 2873 2856 +2868 2871 2872 2809 +2871 2868 2877 2858 +2870 2869 2876 2811 +2873 2874 2869 2824 +2872 2875 2868 2841 +2875 2872 2881 2826 +2874 2873 2880 2843 +2877 2878 2871 3084 +2876 2879 2870 3017 +2879 2876 2883 3086 +2878 2877 2882 3019 +2881 2882 2875 3292 +2880 2883 2874 3249 +2883 2880 2879 3294 +2882 2881 2878 3251 +2885 -1 2886 2786 +2884 -1 2887 2893 +2887 2888 2884 2812 +2886 2889 2885 2933 +2889 2886 2890 2814 +2888 2887 2891 2935 +2891 -1 2888 3058 +2890 -1 2889 3505 +2893 -1 2895 2658 +2892 -1 2894 2885 +2895 2896 2893 2936 +2894 2897 2892 2645 +2897 2894 2899 2938 +2896 2895 2898 2647 +2899 -1 2897 4642 +2898 -1 2896 5237 +2901 2902 2904 2568 +2900 2903 2905 2917 +2903 2900 2908 2570 +2902 2901 2909 2919 +2905 2906 2900 2644 +2904 2907 2901 2937 +2907 2904 2912 2646 +2906 2905 2913 2939 +2909 2910 2902 2596 +2908 2911 2903 3345 +2911 2908 2914 2598 +2910 2909 2915 3347 +2913 2914 2906 4392 +2912 2915 2907 5273 +2915 2912 2910 4394 +2914 2913 2911 5275 +2917 2918 2921 2828 +2916 2919 2920 2901 +2919 2916 2925 2830 +2918 2917 2924 2903 +2921 2922 2917 2932 +2920 2923 2916 2813 +2923 2920 2929 2934 +2922 2921 2928 2815 +2925 2926 2919 3340 +2924 2927 2918 3253 +2927 2924 2931 3342 +2926 2925 2930 3255 +2929 2930 2923 3096 +2928 2931 2922 3453 +2931 2928 2927 3098 +2930 2929 2926 3455 +2933 2934 2937 2920 +2932 2935 2936 2887 +2935 2932 2941 2922 +2934 2933 2940 2889 +2937 2938 2933 2894 +2936 2939 2932 2905 +2939 2936 2945 2896 +2938 2937 2944 2907 +2941 2942 2935 3500 +2940 2943 2934 3457 +2943 2940 2947 3502 +2942 2941 2946 3459 +2945 2946 2939 5268 +2944 2947 2938 5239 +2947 2944 2943 5270 +2946 2945 2942 5241 +2949 -1 2950 2956 +2948 -1 2951 2803 +2951 2952 2948 2964 +2950 2953 2949 2861 +2953 2950 2954 2966 +2952 2951 2955 2863 +2955 -1 2952 3116 +2954 -1 2953 3051 +2957 -1 2958 2948 +2956 -1 2959 1035 +2959 2960 2956 2968 +2958 2961 2957 633 +2961 2958 2962 2970 +2960 2959 2963 635 +2963 -1 2960 3180 +2962 -1 2961 587 +2965 2966 2968 2950 +2964 2967 2969 2981 +2967 2964 2972 2952 +2966 2965 2973 2983 +2969 2970 2964 2958 +2968 2971 2965 2997 +2971 2968 2976 2960 +2970 2969 2977 2999 +2973 2974 2966 3118 +2972 2975 2967 3153 +2975 2972 2978 3120 +2974 2973 2979 3155 +2977 2978 2970 3182 +2976 2979 2971 3217 +2979 2976 2974 3184 +2978 2977 2975 3219 +2981 2982 2985 2860 +2980 2983 2984 2965 +2983 2980 2989 2862 +2982 2981 2988 2967 +2985 2986 2981 3000 +2984 2987 2980 2845 +2987 2984 2993 3002 +2986 2985 2992 2847 +2989 2990 2983 3148 +2988 2991 2982 3021 +2991 2988 2995 3150 +2990 2989 2994 3023 +2993 2994 2987 3304 +2992 2995 2986 3761 +2995 2992 2991 3306 +2994 2993 2990 3763 +2997 2998 3001 632 +2996 2999 3000 2969 +2999 2996 3005 634 +2998 2997 3004 2971 +3001 3002 2997 2984 +3000 3003 2996 953 +3003 3000 3009 2986 +3002 3001 3008 955 +3005 3006 2999 3212 +3004 3007 2998 601 +3007 3004 3011 3214 +3006 3005 3010 603 +3009 3010 3003 872 +3008 3011 3002 3757 +3011 3008 3007 874 +3010 3009 3006 3759 +3013 3014 3016 3028 +3012 3015 3017 2865 +3015 3012 3020 3030 +3014 3013 3021 2867 +3017 3018 3012 3068 +3016 3019 3013 2877 +3019 3016 3024 3070 +3018 3017 3025 2879 +3021 3022 3014 3132 +3020 3023 3015 2989 +3023 3020 3026 3134 +3022 3021 3027 2991 +3025 3026 3018 3404 +3024 3027 3019 3301 +3027 3024 3022 3406 +3026 3025 3023 3303 +3029 3030 3032 3012 +3028 3031 3033 3045 +3031 3028 3036 3014 +3030 3029 3037 3047 +3033 3034 3028 3072 +3032 3035 3029 3063 +3035 3032 3042 3074 +3034 3033 3043 3065 +3037 3038 3030 3136 +3036 3039 3031 3127 +3039 3036 3040 3138 +3038 3037 3041 3129 +3041 3042 3038 6356 +3040 3043 3039 6607 +3043 3040 3034 6358 +3042 3041 3035 6609 +3045 3046 3049 2864 +3044 3047 3048 3029 +3047 3044 3051 2866 +3046 3045 3050 3031 +3049 -1 3045 3060 +3048 -1 3044 2795 +3051 -1 3047 3124 +3050 -1 3046 2955 +3053 -1 3054 2794 +3052 -1 3055 3061 +3055 3056 3052 2816 +3054 3057 3053 3101 +3057 3054 3058 2818 +3056 3055 3059 3103 +3059 -1 3056 2890 +3058 -1 3057 3509 +3061 -1 3063 3048 +3060 -1 3062 3053 +3063 3064 3061 3104 +3062 3065 3060 3033 +3065 3062 3067 3106 +3064 3063 3066 3035 +3067 -1 3065 6610 +3066 -1 3064 7205 +3069 3070 3072 3016 +3068 3071 3073 3085 +3071 3068 3076 3018 +3070 3069 3077 3087 +3073 3074 3068 3032 +3072 3075 3069 3105 +3075 3072 3080 3034 +3074 3073 3081 3107 +3077 3078 3070 3408 +3076 3079 3071 3393 +3079 3076 3082 3410 +3078 3077 3083 3395 +3081 3082 3074 6360 +3080 3083 3075 7241 +3083 3080 3078 6362 +3082 3081 3079 7243 +3085 3086 3089 2876 +3084 3087 3088 3069 +3087 3084 3093 2878 +3086 3085 3092 3071 +3089 3090 3085 3100 +3088 3091 3084 2817 +3091 3088 3097 3102 +3090 3089 3096 2819 +3093 3094 3087 3388 +3092 3095 3086 3257 +3095 3092 3099 3390 +3094 3093 3098 3259 +3097 3098 3091 2928 +3096 3099 3090 3469 +3099 3096 3095 2930 +3098 3097 3094 3471 +3101 3102 3105 3088 +3100 3103 3104 3055 +3103 3100 3109 3090 +3102 3101 3108 3057 +3105 3106 3101 3062 +3104 3107 3100 3073 +3107 3104 3113 3064 +3106 3105 3112 3075 +3109 3110 3103 3510 +3108 3111 3102 3473 +3111 3108 3115 3512 +3110 3109 3114 3475 +3113 3114 3107 7236 +3112 3115 3106 7207 +3115 3112 3111 7238 +3114 3113 3110 7209 +3117 -1 3118 2954 +3116 -1 3119 3125 +3119 3120 3116 2972 +3118 3121 3117 3165 +3121 3118 3122 2974 +3120 3119 3123 3167 +3123 -1 3120 3186 +3122 -1 3121 4085 +3125 -1 3127 3050 +3124 -1 3126 3117 +3127 3128 3125 3168 +3126 3129 3124 3037 +3129 3126 3131 3170 +3128 3127 3130 3039 +3131 -1 3129 6604 +3130 -1 3128 6547 +3133 3134 3136 3020 +3132 3135 3137 3149 +3135 3132 3140 3022 +3134 3133 3141 3151 +3137 3138 3132 3036 +3136 3139 3133 3169 +3139 3136 3146 3038 +3138 3137 3147 3171 +3141 3142 3134 3412 +3140 3143 3135 3953 +3143 3140 3144 3414 +3142 3141 3145 3955 +3145 3146 3142 6348 +3144 3147 3143 6229 +3147 3144 3138 6350 +3146 3145 3139 6231 +3149 3150 3153 2988 +3148 3151 3152 3133 +3151 3148 3157 2990 +3150 3149 3156 3135 +3153 3154 3149 3164 +3152 3155 3148 2973 +3155 3152 3163 3166 +3154 3153 3162 2975 +3157 3158 3151 3948 +3156 3159 3150 3769 +3159 3156 3161 3950 +3158 3157 3160 3771 +3161 3162 3159 3224 +3160 3163 3158 3997 +3163 3160 3155 3226 +3162 3161 3154 3999 +3165 3166 3169 3152 +3164 3167 3168 3119 +3167 3164 3173 3154 +3166 3165 3172 3121 +3169 3170 3165 3126 +3168 3171 3164 3137 +3171 3168 3179 3128 +3170 3169 3178 3139 +3173 3174 3167 4086 +3172 3175 3166 4005 +3175 3172 3177 4088 +3174 3173 3176 4007 +3177 3178 3175 6232 +3176 3179 3174 6541 +3179 3176 3171 6234 +3178 3177 3170 6543 +3181 -1 3182 2962 +3180 -1 3183 3189 +3183 3184 3180 2976 +3182 3185 3181 3229 +3185 3182 3186 2978 +3184 3183 3187 3231 +3187 -1 3184 3122 +3186 -1 3185 4081 +3189 -1 3191 586 +3188 -1 3190 3181 +3191 3192 3189 3232 +3190 3193 3188 517 +3193 3190 3195 3234 +3192 3191 3194 519 +3195 -1 3193 538 +3194 -1 3192 5929 +3197 3198 3200 600 +3196 3199 3201 3213 +3199 3196 3204 602 +3198 3197 3205 3215 +3201 3202 3196 516 +3200 3203 3197 3233 +3203 3200 3208 518 +3202 3201 3209 3235 +3205 3206 3198 888 +3204 3207 3199 3825 +3207 3204 3210 890 +3206 3205 3211 3827 +3209 3210 3202 552 +3208 3211 3203 5957 +3211 3208 3206 554 +3210 3209 3207 5959 +3213 3214 3217 3004 +3212 3215 3216 3197 +3215 3212 3221 3006 +3214 3213 3220 3199 +3217 3218 3213 3228 +3216 3219 3212 2977 +3219 3216 3227 3230 +3218 3217 3226 2979 +3221 3222 3215 3820 +3220 3223 3214 3765 +3223 3220 3225 3822 +3222 3221 3224 3767 +3225 3226 3223 3160 +3224 3227 3222 3981 +3227 3224 3219 3162 +3226 3225 3218 3983 +3229 3230 3233 3216 +3228 3231 3232 3183 +3231 3228 3237 3218 +3230 3229 3236 3185 +3233 3234 3229 3190 +3232 3235 3228 3201 +3235 3232 3241 3192 +3234 3233 3240 3203 +3237 3238 3231 4076 +3236 3239 3230 3989 +3239 3236 3243 4078 +3238 3237 3242 3991 +3241 3242 3235 5952 +3240 3243 3234 5931 +3243 3240 3239 5954 +3242 3241 3238 5933 +3245 3246 3248 3260 +3244 3247 3249 2833 +3247 3244 3252 3262 +3246 3245 3253 2835 +3249 3250 3244 3276 +3248 3251 3245 2881 +3251 3248 3256 3278 +3250 3249 3257 2883 +3253 3254 3246 3324 +3252 3255 3247 2925 +3255 3252 3258 3326 +3254 3253 3259 2927 +3257 3258 3250 3372 +3256 3259 3251 3093 +3259 3256 3254 3374 +3258 3257 3255 3095 +3261 3262 3264 3244 +3260 3263 3265 2361 +3263 3260 3268 3246 +3262 3261 3269 2363 +3265 3266 3260 3280 +3264 3267 3261 2345 +3267 3264 3272 3282 +3266 3265 3273 2347 +3269 3270 3262 3328 +3268 3271 3263 2613 +3271 3268 3274 3330 +3270 3269 3275 2615 +3273 3274 3266 3564 +3272 3275 3267 2485 +3275 3272 3270 3566 +3274 3273 3271 2487 +3277 3278 3280 3248 +3276 3279 3281 3293 +3279 3276 3284 3250 +3278 3277 3285 3295 +3281 3282 3276 3264 +3280 3283 3277 3309 +3283 3280 3288 3266 +3282 3281 3289 3311 +3285 3286 3278 3376 +3284 3287 3279 3425 +3287 3284 3290 3378 +3286 3285 3291 3427 +3289 3290 3282 3568 +3288 3291 3283 3617 +3291 3288 3286 3570 +3290 3289 3287 3619 +3293 3294 3297 2880 +3292 3295 3296 3277 +3295 3292 3301 2882 +3294 3293 3300 3279 +3297 3298 3293 3312 +3296 3299 3292 2849 +3299 3296 3305 3314 +3298 3297 3304 2851 +3301 3302 3295 3420 +3300 3303 3294 3025 +3303 3300 3307 3422 +3302 3301 3306 3027 +3305 3306 3299 2992 +3304 3307 3298 3777 +3307 3304 3303 2994 +3306 3305 3302 3779 +3309 3310 3313 2344 +3308 3311 3312 3281 +3311 3308 3317 2346 +3310 3309 3316 3283 +3313 3314 3309 3296 +3312 3315 3308 969 +3315 3312 3321 3298 +3314 3313 3320 971 +3317 3318 3311 3612 +3316 3319 3310 2425 +3319 3316 3323 3614 +3318 3317 3322 2427 +3321 3322 3315 1000 +3320 3323 3314 3773 +3323 3320 3319 1002 +3322 3321 3318 3775 +3325 3326 3328 3252 +3324 3327 3329 3341 +3327 3324 3332 3254 +3326 3325 3333 3343 +3329 3330 3324 3268 +3328 3331 3325 3357 +3331 3328 3336 3270 +3330 3329 3337 3359 +3333 3334 3326 3380 +3332 3335 3327 3537 +3335 3332 3338 3382 +3334 3333 3339 3539 +3337 3338 3330 3572 +3336 3339 3331 3697 +3339 3336 3334 3574 +3338 3337 3335 3699 +3341 3342 3345 2924 +3340 3343 3344 3325 +3343 3340 3349 2926 +3342 3341 3348 3327 +3345 3346 3341 3360 +3344 3347 3340 2909 +3347 3344 3353 3362 +3346 3345 3352 2911 +3349 3350 3343 3532 +3348 3351 3342 3461 +3351 3348 3355 3534 +3350 3349 3354 3463 +3353 3354 3347 5280 +3352 3355 3346 5449 +3355 3352 3351 5282 +3354 3353 3350 5451 +3357 3358 3361 2612 +3356 3359 3360 3329 +3359 3356 3365 2614 +3358 3357 3364 3331 +3361 3362 3357 3344 +3360 3363 3356 2597 +3363 3360 3369 3346 +3362 3361 3368 2599 +3365 3366 3359 3692 +3364 3367 3358 3649 +3367 3364 3371 3694 +3366 3365 3370 3651 +3369 3370 3363 4376 +3368 3371 3362 5445 +3371 3368 3367 4378 +3370 3369 3366 5447 +3373 3374 3376 3256 +3372 3375 3377 3389 +3375 3372 3380 3258 +3374 3373 3381 3391 +3377 3378 3372 3284 +3376 3379 3373 3437 +3379 3376 3384 3286 +3378 3377 3385 3439 +3381 3382 3374 3332 +3380 3383 3375 3549 +3383 3380 3386 3334 +3382 3381 3387 3551 +3385 3386 3378 3576 +3384 3387 3379 4145 +3387 3384 3382 3578 +3386 3385 3383 4147 +3389 3390 3393 3092 +3388 3391 3392 3373 +3391 3388 3397 3094 +3390 3389 3396 3375 +3393 3394 3389 3440 +3392 3395 3388 3077 +3395 3392 3401 3442 +3394 3393 3400 3079 +3397 3398 3391 3552 +3396 3399 3390 3477 +3399 3396 3403 3554 +3398 3397 3402 3479 +3401 3402 3395 7248 +3400 3403 3394 7417 +3403 3400 3399 7250 +3402 3401 3398 7419 +3405 3406 3408 3024 +3404 3407 3409 3421 +3407 3404 3412 3026 +3406 3405 3413 3423 +3409 3410 3404 3076 +3408 3411 3405 3441 +3411 3408 3418 3078 +3410 3409 3419 3443 +3413 3414 3406 3140 +3412 3415 3407 3969 +3415 3412 3416 3142 +3414 3413 3417 3971 +3417 3418 3414 6352 +3416 3419 3415 6337 +3419 3416 3410 6354 +3418 3417 3411 6339 +3421 3422 3425 3300 +3420 3423 3424 3405 +3423 3420 3429 3302 +3422 3421 3428 3407 +3425 3426 3421 3436 +3424 3427 3420 3285 +3427 3424 3433 3438 +3426 3425 3432 3287 +3429 3430 3423 3964 +3428 3431 3422 3785 +3431 3428 3435 3966 +3430 3429 3434 3787 +3433 3434 3427 3624 +3432 3435 3426 4093 +3435 3432 3431 3626 +3434 3433 3430 4095 +3437 3438 3441 3424 +3436 3439 3440 3377 +3439 3436 3445 3426 +3438 3437 3444 3379 +3441 3442 3437 3392 +3440 3443 3436 3409 +3443 3440 3449 3394 +3442 3441 3448 3411 +3445 3446 3439 4140 +3444 3447 3438 4097 +3447 3444 3451 4142 +3446 3445 3450 4099 +3449 3450 3443 6344 +3448 3451 3442 7413 +3451 3448 3447 6346 +3450 3449 3446 7415 +3453 3454 3456 3468 +3452 3455 3457 2929 +3455 3452 3460 3470 +3454 3453 3461 2931 +3457 3458 3452 3484 +3456 3459 3453 2941 +3459 3456 3464 3486 +3458 3457 3465 2943 +3461 3462 3454 3516 +3460 3463 3455 3349 +3463 3460 3466 3518 +3462 3461 3467 3351 +3465 3466 3458 5316 +3464 3467 3459 5277 +3467 3464 3462 5318 +3466 3465 3463 5279 +3469 3470 3472 3452 +3468 3471 3473 3097 +3471 3468 3476 3454 +3470 3469 3477 3099 +3473 3474 3468 3488 +3472 3475 3469 3109 +3475 3472 3480 3490 +3474 3473 3481 3111 +3477 3478 3470 3520 +3476 3479 3471 3397 +3479 3476 3482 3522 +3478 3477 3483 3399 +3481 3482 3474 7284 +3480 3483 3475 7245 +3483 3480 3478 7286 +3482 3481 3479 7247 +3485 3486 3488 3456 +3484 3487 3489 3501 +3487 3484 3492 3458 +3486 3485 3493 3503 +3489 3490 3484 3472 +3488 3491 3485 3511 +3491 3488 3496 3474 +3490 3489 3497 3513 +3493 3494 3486 5320 +3492 3495 3487 5311 +3495 3492 3498 5322 +3494 3493 3499 5313 +3497 3498 3490 7288 +3496 3499 3491 7279 +3499 3496 3494 7290 +3498 3497 3495 7281 +3501 3502 3505 2940 +3500 3503 3504 3485 +3503 3500 3507 2942 +3502 3501 3506 3487 +3505 -1 3501 3508 +3504 -1 3500 2891 +3507 -1 3503 5308 +3506 -1 3502 5243 +3509 -1 3511 3504 +3508 -1 3510 3059 +3511 3512 3509 3108 +3510 3513 3508 3489 +3513 3510 3515 3110 +3512 3511 3514 3491 +3515 -1 3513 7276 +3514 -1 3512 7211 +3517 3518 3520 3460 +3516 3519 3521 3533 +3519 3516 3524 3462 +3518 3517 3525 3535 +3521 3522 3516 3476 +3520 3523 3517 3553 +3523 3520 3528 3478 +3522 3521 3529 3555 +3525 3526 3518 5324 +3524 3527 3519 5689 +3527 3524 3530 5326 +3526 3525 3531 5691 +3529 3530 3522 7292 +3528 3531 3523 7657 +3531 3528 3526 7294 +3530 3529 3527 7659 +3533 3534 3537 3348 +3532 3535 3536 3517 +3535 3532 3541 3350 +3534 3533 3540 3519 +3537 3538 3533 3548 +3536 3539 3532 3333 +3539 3536 3547 3550 +3538 3537 3546 3335 +3541 3542 3535 5684 +3540 3543 3534 5457 +3543 3540 3545 5686 +3542 3541 3544 5459 +3545 3546 3543 3704 +3544 3547 3542 5733 +3547 3544 3539 3706 +3546 3545 3538 5735 +3549 3550 3553 3536 +3548 3551 3552 3381 +3551 3548 3557 3538 +3550 3549 3556 3383 +3553 3554 3549 3396 +3552 3555 3548 3521 +3555 3552 3561 3398 +3554 3553 3560 3523 +3557 3558 3551 4148 +3556 3559 3550 5741 +3559 3556 3563 4150 +3558 3557 3562 5743 +3561 3562 3555 7652 +3560 3563 3554 7425 +3563 3560 3559 7654 +3562 3561 3558 7427 +3565 3566 3568 3272 +3564 3567 3569 3581 +3567 3564 3572 3274 +3566 3565 3573 3583 +3569 3570 3564 3288 +3568 3571 3565 3629 +3571 3568 3576 3290 +3570 3569 3577 3631 +3573 3574 3566 3336 +3572 3575 3567 3709 +3575 3572 3578 3338 +3574 3573 3579 3711 +3577 3578 3570 3384 +3576 3579 3571 4157 +3579 3576 3574 3386 +3578 3577 3575 4159 +3581 3582 3585 2484 +3580 3583 3584 3565 +3583 3580 3589 2486 +3582 3581 3588 3567 +3585 3586 3581 3632 +3584 3587 3580 2469 +3587 3584 3593 3634 +3586 3585 3592 2471 +3589 3590 3583 3712 +3588 3591 3582 3665 +3591 3588 3595 3714 +3590 3589 3594 3667 +3593 3594 3587 7868 +3592 3595 3586 7845 +3595 3592 3591 7870 +3594 3593 3590 7847 +3597 3598 3600 2424 +3596 3599 3601 3613 +3599 3596 3604 2426 +3598 3597 3605 3615 +3601 3602 3596 2468 +3600 3603 3597 3633 +3603 3600 3608 2470 +3602 3601 3609 3635 +3605 3606 3598 2452 +3604 3607 3599 3873 +3607 3604 3610 2454 +3606 3605 3611 3875 +3609 3610 3602 7912 +3608 3611 3603 7897 +3611 3608 3606 7914 +3610 3609 3607 7899 +3613 3614 3617 3316 +3612 3615 3616 3597 +3615 3612 3621 3318 +3614 3613 3620 3599 +3617 3618 3613 3628 +3616 3619 3612 3289 +3619 3616 3625 3630 +3618 3617 3624 3291 +3621 3622 3615 3868 +3620 3623 3614 3781 +3623 3620 3627 3870 +3622 3621 3626 3783 +3625 3626 3619 3432 +3624 3627 3618 4109 +3627 3624 3623 3434 +3626 3625 3622 4111 +3629 3630 3633 3616 +3628 3631 3632 3569 +3631 3628 3637 3618 +3630 3629 3636 3571 +3633 3634 3629 3584 +3632 3635 3628 3601 +3635 3632 3641 3586 +3634 3633 3640 3603 +3637 3638 3631 4160 +3636 3639 3630 4113 +3639 3636 3643 4162 +3638 3637 3642 4115 +3641 3642 3635 7892 +3640 3643 3634 7849 +3643 3640 3639 7894 +3642 3641 3638 7851 +3645 3646 3648 3660 +3644 3647 3649 2617 +3647 3644 3652 3662 +3646 3645 3653 2619 +3649 3650 3644 3676 +3648 3651 3645 3365 +3651 3648 3658 3678 +3650 3649 3659 3367 +3653 3654 3646 3724 +3652 3655 3647 2629 +3655 3652 3656 3726 +3654 3653 3657 2631 +3657 3658 3654 4508 +3656 3659 3655 4373 +3659 3656 3650 4510 +3658 3657 3651 4375 +3661 3662 3664 3644 +3660 3663 3665 2489 +3663 3660 3668 3646 +3662 3661 3669 2491 +3665 3666 3660 3680 +3664 3667 3661 3589 +3667 3664 3672 3682 +3666 3665 3673 3591 +3669 3670 3662 3728 +3668 3671 3663 2501 +3671 3668 3674 3730 +3670 3669 3675 2503 +3673 3674 3666 7964 +3672 3675 3667 7877 +3675 3672 3670 7966 +3674 3673 3671 7879 +3677 3678 3680 3648 +3676 3679 3681 3693 +3679 3676 3684 3650 +3678 3677 3685 3695 +3681 3682 3676 3664 +3680 3683 3677 3713 +3683 3680 3688 3666 +3682 3681 3689 3715 +3685 3686 3678 4516 +3684 3687 3679 5513 +3687 3684 3690 4518 +3686 3685 3691 5515 +3689 3690 3682 7968 +3688 3691 3683 7953 +3691 3688 3686 7970 +3690 3689 3687 7955 +3693 3694 3697 3364 +3692 3695 3696 3677 +3695 3692 3701 3366 +3694 3693 3700 3679 +3697 3698 3693 3708 +3696 3699 3692 3337 +3699 3696 3707 3710 +3698 3697 3706 3339 +3701 3702 3695 5508 +3700 3703 3694 5453 +3703 3700 3705 5510 +3702 3701 3704 5455 +3705 3706 3703 3544 +3704 3707 3702 5717 +3707 3704 3699 3546 +3706 3705 3698 5719 +3709 3710 3713 3696 +3708 3711 3712 3573 +3711 3708 3717 3698 +3710 3709 3716 3575 +3713 3714 3709 3588 +3712 3715 3708 3681 +3715 3712 3721 3590 +3714 3713 3720 3683 +3717 3718 3711 4164 +3716 3719 3710 5725 +3719 3716 3723 4166 +3718 3717 3722 5727 +3721 3722 3715 7948 +3720 3723 3714 7853 +3723 3720 3719 7950 +3722 3721 3718 7855 +3725 3726 3728 3652 +3724 3727 3729 2757 +3727 3724 3732 3654 +3726 3725 3733 2759 +3729 3730 3724 3668 +3728 3731 3725 2773 +3731 3728 3736 3670 +3730 3729 3737 2775 +3733 3734 3726 4512 +3732 3735 3727 4453 +3735 3732 3738 4514 +3734 3733 3739 4455 +3737 3738 3730 7972 +3736 3739 3731 8161 +3739 3736 3734 7974 +3738 3737 3735 8163 +3741 3742 3744 3756 +3740 3743 3745 873 +3743 3740 3748 3758 +3742 3741 3749 875 +3745 3746 3740 3772 +3744 3747 3741 1001 +3747 3744 3752 3774 +3746 3745 3753 1003 +3749 3750 3742 3788 +3748 3751 3743 921 +3751 3748 3754 3790 +3750 3749 3755 923 +3753 3754 3746 3836 +3752 3755 3747 1665 +3755 3752 3750 3838 +3754 3753 3751 1667 +3757 3758 3760 3740 +3756 3759 3761 3009 +3759 3756 3764 3742 +3758 3757 3765 3011 +3761 3762 3756 3776 +3760 3763 3757 2993 +3763 3760 3768 3778 +3762 3761 3769 2995 +3765 3766 3758 3792 +3764 3767 3759 3221 +3767 3764 3770 3794 +3766 3765 3771 3223 +3769 3770 3762 3932 +3768 3771 3763 3157 +3771 3768 3766 3934 +3770 3769 3767 3159 +3773 3774 3776 3744 +3772 3775 3777 3321 +3775 3772 3780 3746 +3774 3773 3781 3323 +3777 3778 3772 3760 +3776 3779 3773 3305 +3779 3776 3784 3762 +3778 3777 3785 3307 +3781 3782 3774 3840 +3780 3783 3775 3621 +3783 3780 3786 3842 +3782 3781 3787 3623 +3785 3786 3778 3936 +3784 3787 3779 3429 +3787 3784 3782 3938 +3786 3785 3783 3431 +3789 3790 3792 3748 +3788 3791 3793 3805 +3791 3788 3796 3750 +3790 3789 3797 3807 +3793 3794 3788 3764 +3792 3795 3789 3821 +3795 3792 3800 3766 +3794 3793 3801 3823 +3797 3798 3790 3844 +3796 3799 3791 3905 +3799 3796 3802 3846 +3798 3797 3803 3907 +3801 3802 3794 3940 +3800 3803 3795 4033 +3803 3800 3798 3942 +3802 3801 3799 4035 +3805 3806 3809 920 +3804 3807 3808 3789 +3807 3804 3813 922 +3806 3805 3812 3791 +3809 3810 3805 3824 +3808 3811 3804 889 +3811 3808 3817 3826 +3810 3809 3816 891 +3813 3814 3807 3900 +3812 3815 3806 1617 +3815 3812 3819 3902 +3814 3813 3818 1619 +3817 3818 3811 1560 +3816 3819 3810 6033 +3819 3816 3815 1562 +3818 3817 3814 6035 +3821 3822 3825 3220 +3820 3823 3824 3793 +3823 3820 3829 3222 +3822 3821 3828 3795 +3825 3826 3821 3808 +3824 3827 3820 3205 +3827 3824 3833 3810 +3826 3825 3832 3207 +3829 3830 3823 4028 +3828 3831 3822 3985 +3831 3828 3835 4030 +3830 3829 3834 3987 +3833 3834 3827 5964 +3832 3835 3826 6029 +3835 3832 3831 5966 +3834 3833 3830 6031 +3837 3838 3840 3752 +3836 3839 3841 3853 +3839 3836 3844 3754 +3838 3837 3845 3855 +3841 3842 3836 3780 +3840 3843 3837 3869 +3843 3840 3848 3782 +3842 3841 3849 3871 +3845 3846 3838 3796 +3844 3847 3839 3917 +3847 3844 3850 3798 +3846 3845 3851 3919 +3849 3850 3842 3944 +3848 3851 3843 4205 +3851 3848 3846 3946 +3850 3849 3847 4207 +3853 3854 3857 1664 +3852 3855 3856 3837 +3855 3852 3861 1666 +3854 3853 3860 3839 +3857 3858 3853 3872 +3856 3859 3852 2453 +3859 3856 3865 3874 +3858 3857 3864 2455 +3861 3862 3855 3920 +3860 3863 3854 1645 +3863 3860 3867 3922 +3862 3861 3866 1647 +3865 3866 3859 8300 +3864 3867 3858 8273 +3867 3864 3863 8302 +3866 3865 3862 8275 +3869 3870 3873 3620 +3868 3871 3872 3841 +3871 3868 3877 3622 +3870 3869 3876 3843 +3873 3874 3869 3856 +3872 3875 3868 3605 +3875 3872 3881 3858 +3874 3873 3880 3607 +3877 3878 3871 4208 +3876 3879 3870 4117 +3879 3876 3883 4210 +3878 3877 3882 4119 +3881 3882 3875 7904 +3880 3883 3874 8269 +3883 3880 3879 7906 +3882 3881 3878 8271 +3885 3886 3888 1616 +3884 3887 3889 3901 +3887 3884 3892 1618 +3886 3885 3893 3903 +3889 3890 3884 1644 +3888 3891 3885 3921 +3891 3888 3896 1646 +3890 3889 3897 3923 +3893 3894 3886 1692 +3892 3895 3887 6097 +3895 3892 3898 1694 +3894 3893 3899 6099 +3897 3898 3890 8376 +3896 3899 3891 8361 +3899 3896 3894 8378 +3898 3897 3895 8363 +3901 3902 3905 3812 +3900 3903 3904 3885 +3903 3900 3909 3814 +3902 3901 3908 3887 +3905 3906 3901 3916 +3904 3907 3900 3797 +3907 3904 3915 3918 +3906 3905 3914 3799 +3909 3910 3903 6092 +3908 3911 3902 6041 +3911 3908 3913 6094 +3910 3909 3912 6043 +3913 3914 3911 4040 +3912 3915 3910 6125 +3915 3912 3907 4042 +3914 3913 3906 6127 +3917 3918 3921 3904 +3916 3919 3920 3845 +3919 3916 3925 3906 +3918 3917 3924 3847 +3921 3922 3917 3860 +3920 3923 3916 3889 +3923 3920 3929 3862 +3922 3921 3928 3891 +3925 3926 3919 4212 +3924 3927 3918 6133 +3927 3924 3931 4214 +3926 3925 3930 6135 +3929 3930 3923 8356 +3928 3931 3922 8281 +3931 3928 3927 8358 +3930 3929 3926 8283 +3933 3934 3936 3768 +3932 3935 3937 3949 +3935 3932 3940 3770 +3934 3933 3941 3951 +3937 3938 3932 3784 +3936 3939 3933 3965 +3939 3936 3944 3786 +3938 3937 3945 3967 +3941 3942 3934 3800 +3940 3943 3935 4045 +3943 3940 3946 3802 +3942 3941 3947 4047 +3945 3946 3938 3848 +3944 3947 3939 4193 +3947 3944 3942 3850 +3946 3945 3943 4195 +3949 3950 3953 3156 +3948 3951 3952 3933 +3951 3948 3957 3158 +3950 3949 3956 3935 +3953 3954 3949 3968 +3952 3955 3948 3141 +3955 3952 3963 3970 +3954 3953 3962 3143 +3957 3958 3951 4048 +3956 3959 3950 4001 +3959 3956 3961 4050 +3958 3957 3960 4003 +3961 3962 3959 6220 +3960 3963 3958 6189 +3963 3960 3955 6222 +3962 3961 3954 6191 +3965 3966 3969 3428 +3964 3967 3968 3937 +3967 3964 3973 3430 +3966 3965 3972 3939 +3969 3970 3965 3952 +3968 3971 3964 3413 +3971 3968 3977 3954 +3970 3969 3976 3415 +3973 3974 3967 4188 +3972 3975 3966 4101 +3975 3972 3979 4190 +3974 3973 3978 4103 +3977 3978 3971 6332 +3976 3979 3970 6197 +3979 3976 3975 6334 +3978 3977 3974 6199 +3981 3982 3984 3996 +3980 3983 3985 3225 +3983 3980 3988 3998 +3982 3981 3989 3227 +3985 3986 3980 4012 +3984 3987 3981 3829 +3987 3984 3994 4014 +3986 3985 3995 3831 +3989 3990 3982 4060 +3988 3991 3983 3237 +3991 3988 3992 4062 +3990 3989 3993 3239 +3993 3994 3990 5980 +3992 3995 3991 5961 +3995 3992 3986 5982 +3994 3993 3987 5963 +3997 3998 4000 3980 +3996 3999 4001 3161 +3999 3996 4004 3982 +3998 3997 4005 3163 +4001 4002 3996 4016 +4000 4003 3997 3957 +4003 4000 4008 4018 +4002 4001 4009 3959 +4005 4006 3998 4064 +4004 4007 3999 3173 +4007 4004 4010 4066 +4006 4005 4011 3175 +4009 4010 4002 6268 +4008 4011 4003 6225 +4011 4008 4006 6270 +4010 4009 4007 6227 +4013 4014 4016 3984 +4012 4015 4017 4029 +4015 4012 4020 3986 +4014 4013 4021 4031 +4017 4018 4012 4000 +4016 4019 4013 4049 +4019 4016 4024 4002 +4018 4017 4025 4051 +4021 4022 4014 5988 +4020 4023 4015 6065 +4023 4020 4026 5990 +4022 4021 4027 6067 +4025 4026 4018 6272 +4024 4027 4019 6257 +4027 4024 4022 6274 +4026 4025 4023 6259 +4029 4030 4033 3828 +4028 4031 4032 4013 +4031 4028 4037 3830 +4030 4029 4036 4015 +4033 4034 4029 4044 +4032 4035 4028 3801 +4035 4032 4043 4046 +4034 4033 4042 3803 +4037 4038 4031 6060 +4036 4039 4030 6037 +4039 4036 4041 6062 +4038 4037 4040 6039 +4041 4042 4039 3912 +4040 4043 4038 6109 +4043 4040 4035 3914 +4042 4041 4034 6111 +4045 4046 4049 4032 +4044 4047 4048 3941 +4047 4044 4053 4034 +4046 4045 4052 3943 +4049 4050 4045 3956 +4048 4051 4044 4017 +4051 4048 4057 3958 +4050 4049 4056 4019 +4053 4054 4047 4196 +4052 4055 4046 6117 +4055 4052 4059 4198 +4054 4053 4058 6119 +4057 4058 4051 6252 +4056 4059 4050 6193 +4059 4056 4055 6254 +4058 4057 4054 6195 +4061 4062 4064 3988 +4060 4063 4065 4077 +4063 4060 4068 3990 +4062 4061 4069 4079 +4065 4066 4060 4004 +4064 4067 4061 4087 +4067 4064 4072 4006 +4066 4065 4073 4089 +4069 4070 4062 5984 +4068 4071 4063 5975 +4071 4068 4074 5986 +4070 4069 4075 5977 +4073 4074 4066 6276 +4072 4075 4067 6575 +4075 4072 4070 6278 +4074 4073 4071 6577 +4077 4078 4081 3236 +4076 4079 4080 4061 +4079 4076 4083 3238 +4078 4077 4082 4063 +4081 -1 4077 4084 +4080 -1 4076 3187 +4083 -1 4079 5972 +4082 -1 4078 5935 +4085 -1 4087 4080 +4084 -1 4086 3123 +4087 4088 4085 3172 +4086 4089 4084 4065 +4089 4086 4091 3174 +4088 4087 4090 4067 +4091 -1 4089 6572 +4090 -1 4088 6545 +4093 4094 4096 4108 +4092 4095 4097 3433 +4095 4092 4100 4110 +4094 4093 4101 3435 +4097 4098 4092 4124 +4096 4099 4093 3445 +4099 4096 4106 4126 +4098 4097 4107 3447 +4101 4102 4094 4172 +4100 4103 4095 3973 +4103 4100 4104 4174 +4102 4101 4105 3975 +4105 4106 4102 6476 +4104 4107 4103 6341 +4107 4104 4098 6478 +4106 4105 4099 6343 +4109 4110 4112 4092 +4108 4111 4113 3625 +4111 4108 4116 4094 +4110 4109 4117 3627 +4113 4114 4108 4128 +4112 4115 4109 3637 +4115 4112 4120 4130 +4114 4113 4121 3639 +4117 4118 4110 4176 +4116 4119 4111 3877 +4119 4116 4122 4178 +4118 4117 4123 3879 +4121 4122 4114 8020 +4120 4123 4115 7901 +4123 4120 4118 8022 +4122 4121 4119 7903 +4125 4126 4128 4096 +4124 4127 4129 4141 +4127 4124 4132 4098 +4126 4125 4133 4143 +4129 4130 4124 4112 +4128 4131 4125 4161 +4131 4128 4136 4114 +4130 4129 4137 4163 +4133 4134 4126 6484 +4132 4135 4127 7481 +4135 4132 4138 6486 +4134 4133 4139 7483 +4137 4138 4130 8024 +4136 4139 4131 8009 +4139 4136 4134 8026 +4138 4137 4135 8011 +4141 4142 4145 3444 +4140 4143 4144 4125 +4143 4140 4153 3446 +4142 4141 4152 4127 +4145 4146 4141 4156 +4144 4147 4140 3385 +4147 4144 4149 4158 +4146 4145 4148 3387 +4149 4150 4147 3556 +4148 4151 4146 5797 +4151 4148 4155 3558 +4150 4149 4154 5799 +4153 4154 4143 7476 +4152 4155 4142 7421 +4155 4152 4151 7478 +4154 4153 4150 7423 +4157 4158 4161 4144 +4156 4159 4160 3577 +4159 4156 4165 4146 +4158 4157 4164 3579 +4161 4162 4157 3636 +4160 4163 4156 4129 +4163 4160 4169 3638 +4162 4161 4168 4131 +4165 4166 4159 3716 +4164 4167 4158 5801 +4167 4164 4171 3718 +4166 4165 4170 5803 +4169 4170 4163 8004 +4168 4171 4162 7857 +4171 4168 4167 8006 +4170 4169 4166 7859 +4173 4174 4176 4100 +4172 4175 4177 4189 +4175 4172 4180 4102 +4174 4173 4181 4191 +4177 4178 4172 4116 +4176 4179 4173 4209 +4179 4176 4184 4118 +4178 4177 4185 4211 +4181 4182 4174 6480 +4180 4183 4175 6421 +4183 4180 4186 6482 +4182 4181 4187 6423 +4185 4186 4178 8028 +4184 4187 4179 8337 +4187 4184 4182 8030 +4186 4185 4183 8339 +4189 4190 4193 3972 +4188 4191 4192 4173 +4191 4188 4203 3974 +4190 4189 4202 4175 +4193 4194 4189 4204 +4192 4195 4188 3945 +4195 4192 4197 4206 +4194 4193 4196 3947 +4197 4198 4195 4052 +4196 4199 4194 6173 +4199 4196 4201 4054 +4198 4197 4200 6175 +4201 4202 4199 6412 +4200 4203 4198 6201 +4203 4200 4191 6414 +4202 4201 4190 6203 +4205 4206 4209 4192 +4204 4207 4208 3849 +4207 4204 4213 4194 +4206 4205 4212 3851 +4209 4210 4205 3876 +4208 4211 4204 4177 +4211 4208 4217 3878 +4210 4209 4216 4179 +4213 4214 4207 3924 +4212 4215 4206 6177 +4215 4212 4219 3926 +4214 4213 4218 6179 +4217 4218 4211 8332 +4216 4219 4210 8277 +4219 4216 4215 8334 +4218 4217 4214 8279 +4221 4222 4224 4236 +4220 4223 4225 2537 +4223 4220 4228 4238 +4222 4221 4229 2539 +4225 4226 4220 4268 +4224 4227 4221 2553 +4227 4224 4232 4270 +4226 4225 4233 2555 +4229 4230 4222 4348 +4228 4231 4223 2633 +4231 4228 4234 4350 +4230 4229 4235 2635 +4233 4234 4226 4428 +4232 4235 4227 2761 +4235 4232 4230 4430 +4234 4233 4231 2763 +4237 4238 4240 4220 +4236 4239 4241 4253 +4239 4236 4244 4222 +4238 4237 4245 4255 +4241 4242 4236 4272 +4240 4243 4237 4321 +4243 4240 4248 4274 +4242 4241 4249 4323 +4245 4246 4238 4352 +4244 4247 4239 4401 +4247 4244 4250 4354 +4246 4245 4251 4403 +4249 4250 4242 4692 +4248 4251 4243 4681 +4251 4248 4246 4694 +4250 4249 4247 4683 +4253 4254 4257 2536 +4252 4255 4256 4237 +4255 4252 4261 2538 +4254 4253 4260 4239 +4257 4258 4253 4316 +4256 4259 4252 1977 +4259 4256 4265 4318 +4258 4257 4264 1979 +4261 4262 4255 4396 +4260 4263 4254 2585 +4263 4260 4267 4398 +4262 4261 4266 2587 +4265 4266 4259 2008 +4264 4267 4258 4557 +4267 4264 4263 2010 +4266 4265 4262 4559 +4269 4270 4272 4224 +4268 4271 4273 4285 +4271 4268 4276 4226 +4270 4269 4277 4287 +4273 4274 4268 4240 +4272 4275 4269 4333 +4275 4272 4280 4242 +4274 4273 4281 4335 +4277 4278 4270 4432 +4276 4279 4271 4481 +4279 4276 4282 4434 +4278 4277 4283 4483 +4281 4282 4274 4696 +4280 4283 4275 4745 +4283 4280 4278 4698 +4282 4281 4279 4747 +4285 4286 4289 2552 +4284 4287 4288 4269 +4287 4284 4293 2554 +4286 4285 4292 4271 +4289 4290 4285 4336 +4288 4291 4284 2169 +4291 4288 4297 4338 +4290 4289 4296 2171 +4293 4294 4287 4476 +4292 4295 4286 2681 +4295 4292 4299 4478 +4294 4293 4298 2683 +4297 4298 4291 2200 +4296 4299 4290 5029 +4299 4296 4295 2202 +4298 4297 4294 5031 +4301 4302 4304 1976 +4300 4303 4305 4317 +4303 4300 4308 1978 +4302 4301 4309 4319 +4305 4306 4300 2168 +4304 4307 4301 4337 +4307 4304 4314 2170 +4306 4305 4315 4339 +4309 4310 4302 1892 +4308 4311 4303 4593 +4311 4308 4312 1894 +4310 4309 4313 4595 +4313 4314 4310 1928 +4312 4315 4311 4973 +4315 4312 4306 1930 +4314 4313 4307 4975 +4317 4318 4321 4256 +4316 4319 4320 4301 +4319 4316 4325 4258 +4318 4317 4324 4303 +4321 4322 4317 4332 +4320 4323 4316 4241 +4323 4320 4329 4334 +4322 4321 4328 4243 +4325 4326 4319 4588 +4324 4327 4318 4561 +4327 4324 4331 4590 +4326 4325 4330 4563 +4329 4330 4323 4676 +4328 4331 4322 4645 +4331 4328 4327 4678 +4330 4329 4326 4647 +4333 4334 4337 4320 +4332 4335 4336 4273 +4335 4332 4341 4322 +4334 4333 4340 4275 +4337 4338 4333 4288 +4336 4339 4332 4305 +4339 4336 4345 4290 +4338 4337 4344 4307 +4341 4342 4335 4740 +4340 4343 4334 4649 +4343 4340 4347 4742 +4342 4341 4346 4651 +4345 4346 4339 4980 +4344 4347 4338 5033 +4347 4344 4343 4982 +4346 4345 4342 5035 +4349 4350 4352 4228 +4348 4351 4353 4365 +4351 4348 4356 4230 +4350 4349 4357 4367 +4353 4354 4348 4244 +4352 4355 4349 4413 +4355 4352 4360 4246 +4354 4353 4361 4415 +4357 4358 4350 4436 +4356 4359 4351 4529 +4359 4356 4362 4438 +4358 4357 4363 4531 +4361 4362 4354 4700 +4360 4363 4355 4881 +4363 4360 4358 4702 +4362 4361 4359 4883 +4365 4366 4369 2632 +4364 4367 4368 4349 +4367 4364 4373 2634 +4366 4365 4372 4351 +4369 4370 4365 4416 +4368 4371 4364 2601 +4371 4368 4377 4418 +4370 4369 4376 2603 +4373 4374 4367 4524 +4372 4375 4366 3657 +4375 4372 4379 4526 +4374 4373 4378 3659 +4377 4378 4371 3368 +4376 4379 4370 5429 +4379 4376 4375 3370 +4378 4377 4374 5431 +4381 4382 4384 2584 +4380 4383 4385 4397 +4383 4380 4388 2586 +4382 4381 4389 4399 +4385 4386 4380 2600 +4384 4387 4381 4417 +4387 4384 4394 2602 +4386 4385 4395 4419 +4389 4390 4382 2648 +4388 4391 4383 4625 +4391 4388 4392 2650 +4390 4389 4393 4627 +4393 4394 4390 2912 +4392 4395 4391 5289 +4395 4392 4386 2914 +4394 4393 4387 5291 +4397 4398 4401 4260 +4396 4399 4400 4381 +4399 4396 4405 4262 +4398 4397 4404 4383 +4401 4402 4397 4412 +4400 4403 4396 4245 +4403 4400 4409 4414 +4402 4401 4408 4247 +4405 4406 4399 4620 +4404 4407 4398 4565 +4407 4404 4411 4622 +4406 4405 4410 4567 +4409 4410 4403 4688 +4408 4411 4402 4829 +4411 4408 4407 4690 +4410 4409 4406 4831 +4413 4414 4417 4400 +4412 4415 4416 4353 +4415 4412 4421 4402 +4414 4413 4420 4355 +4417 4418 4413 4368 +4416 4419 4412 4385 +4419 4416 4425 4370 +4418 4417 4424 4387 +4421 4422 4415 4876 +4420 4423 4414 4833 +4423 4420 4427 4878 +4422 4421 4426 4835 +4425 4426 4419 5296 +4424 4427 4418 5433 +4427 4424 4423 5298 +4426 4425 4422 5435 +4429 4430 4432 4232 +4428 4431 4433 4445 +4431 4428 4436 4234 +4430 4429 4437 4447 +4433 4434 4428 4276 +4432 4435 4429 4493 +4435 4432 4440 4278 +4434 4433 4441 4495 +4437 4438 4430 4356 +4436 4439 4431 4541 +4439 4436 4442 4358 +4438 4437 4443 4543 +4441 4442 4434 4704 +4440 4443 4435 5177 +4443 4440 4438 4706 +4442 4441 4439 5179 +4445 4446 4449 2760 +4444 4447 4448 4429 +4447 4444 4453 2762 +4446 4445 4452 4431 +4449 4450 4445 4496 +4448 4451 4444 2741 +4451 4448 4459 4498 +4450 4449 4458 2743 +4453 4454 4447 4544 +4452 4455 4446 3733 +4455 4452 4457 4546 +4454 4453 4456 3735 +4457 4458 4455 8168 +4456 4459 4454 8789 +4459 4456 4451 8170 +4458 4457 4450 8791 +4461 4462 4464 2680 +4460 4463 4465 4477 +4463 4460 4468 2682 +4462 4461 4469 4479 +4465 4466 4460 2740 +4464 4467 4461 4497 +4467 4464 4472 2742 +4466 4465 4473 4499 +4469 4470 4462 2708 +4468 4471 4463 5073 +4471 4468 4474 2710 +4470 4469 4475 5075 +4473 4474 4466 8236 +4472 4475 4467 8833 +4475 4472 4470 8238 +4474 4473 4471 8835 +4477 4478 4481 4292 +4476 4479 4480 4461 +4479 4476 4485 4294 +4478 4477 4484 4463 +4481 4482 4477 4492 +4480 4483 4476 4277 +4483 4480 4489 4494 +4482 4481 4488 4279 +4485 4486 4479 5068 +4484 4487 4478 5037 +4487 4484 4491 5070 +4486 4485 4490 5039 +4489 4490 4483 4752 +4488 4491 4482 5125 +4491 4488 4487 4754 +4490 4489 4486 5127 +4493 4494 4497 4480 +4492 4495 4496 4433 +4495 4492 4501 4482 +4494 4493 4500 4435 +4497 4498 4493 4448 +4496 4499 4492 4465 +4499 4496 4505 4450 +4498 4497 4504 4467 +4501 4502 4495 5172 +4500 4503 4494 5129 +4503 4500 4507 5174 +4502 4501 4506 5131 +4505 4506 4499 8828 +4504 4507 4498 8797 +4507 4504 4503 8830 +4506 4505 4502 8799 +4509 4510 4512 3656 +4508 4511 4513 4525 +4511 4508 4516 3658 +4510 4509 4517 4527 +4513 4514 4508 3732 +4512 4515 4509 4545 +4515 4512 4522 3734 +4514 4513 4523 4547 +4517 4518 4510 3684 +4516 4519 4511 5497 +4519 4516 4520 3686 +4518 4517 4521 5499 +4521 4522 4518 7976 +4520 4523 4519 8609 +4523 4520 4514 7978 +4522 4521 4515 8611 +4525 4526 4529 4372 +4524 4527 4528 4509 +4527 4524 4533 4374 +4526 4525 4532 4511 +4529 4530 4525 4540 +4528 4531 4524 4357 +4531 4528 4537 4542 +4530 4529 4536 4359 +4533 4534 4527 5492 +4532 4535 4526 5437 +4535 4532 4539 5494 +4534 4533 4538 5439 +4537 4538 4531 4888 +4536 4539 4530 5573 +4539 4536 4535 4890 +4538 4537 4534 5575 +4541 4542 4545 4528 +4540 4543 4544 4437 +4543 4540 4549 4530 +4542 4541 4548 4439 +4545 4546 4541 4452 +4544 4547 4540 4513 +4547 4544 4553 4454 +4546 4545 4552 4515 +4549 4550 4543 5180 +4548 4551 4542 5577 +4551 4548 4555 5182 +4550 4549 4554 5579 +4553 4554 4547 8616 +4552 4555 4546 8793 +4555 4552 4551 8618 +4554 4553 4550 8795 +4557 4558 4560 4572 +4556 4559 4561 4265 +4559 4556 4564 4574 +4558 4557 4565 4267 +4561 4562 4556 4580 +4560 4563 4557 4325 +4563 4560 4568 4582 +4562 4561 4569 4327 +4565 4566 4558 4612 +4564 4567 4559 4405 +4567 4564 4570 4614 +4566 4565 4571 4407 +4569 4570 4562 4772 +4568 4571 4563 4685 +4571 4568 4566 4774 +4570 4569 4567 4687 +4573 4574 4576 4556 +4572 4575 4577 2009 +4575 4572 4578 4558 +4574 4573 4579 2011 +4577 -1 4572 4584 +4576 -1 4573 1963 +4579 -1 4574 4616 +4578 -1 4575 2667 +4581 4582 4584 4560 +4580 4583 4585 4589 +4583 4580 4586 4562 +4582 4581 4587 4591 +4585 -1 4580 4576 +4584 -1 4581 4605 +4587 -1 4582 4776 +4586 -1 4583 4817 +4589 4590 4593 4324 +4588 4591 4592 4581 +4591 4588 4597 4326 +4590 4589 4596 4583 +4593 4594 4589 4606 +4592 4595 4588 4309 +4595 4592 4601 4608 +4594 4593 4600 4311 +4597 4598 4591 4812 +4596 4599 4590 4653 +4599 4596 4603 4814 +4598 4597 4602 4655 +4601 4602 4595 4968 +4600 4603 4594 4947 +4603 4600 4599 4970 +4602 4601 4598 4949 +4605 -1 4607 1962 +4604 -1 4606 4585 +4607 4608 4605 4592 +4606 4609 4604 1893 +4609 4606 4611 4594 +4608 4607 4610 1895 +4611 -1 4609 1914 +4610 -1 4608 4945 +4613 4614 4616 4564 +4612 4615 4617 4621 +4615 4612 4618 4566 +4614 4613 4619 4623 +4617 -1 4612 4578 +4616 -1 4613 4637 +4619 -1 4614 4778 +4618 -1 4615 4929 +4621 4622 4625 4404 +4620 4623 4624 4613 +4623 4620 4629 4406 +4622 4621 4628 4615 +4625 4626 4621 4638 +4624 4627 4620 4389 +4627 4624 4633 4640 +4626 4625 4632 4391 +4629 4630 4623 4924 +4628 4631 4622 4837 +4631 4628 4635 4926 +4630 4629 4634 4839 +4633 4634 4627 5284 +4632 4635 4626 5247 +4635 4632 4631 5286 +4634 4633 4630 5249 +4637 -1 4639 2666 +4636 -1 4638 4617 +4639 4640 4637 4624 +4638 4641 4636 2649 +4641 4638 4643 4626 +4640 4639 4642 2651 +4643 -1 4641 2898 +4642 -1 4640 5245 +4645 4646 4648 4660 +4644 4647 4649 4329 +4647 4644 4652 4662 +4646 4645 4653 4331 +4649 4650 4644 4724 +4648 4651 4645 4341 +4651 4648 4658 4726 +4650 4649 4659 4343 +4653 4654 4646 4796 +4652 4655 4647 4597 +4655 4652 4656 4798 +4654 4653 4657 4599 +4657 4658 4654 4996 +4656 4659 4655 4977 +4659 4656 4650 4998 +4658 4657 4651 4979 +4661 4662 4664 4644 +4660 4663 4665 4677 +4663 4660 4668 4646 +4662 4661 4669 4679 +4665 4666 4660 4728 +4664 4667 4661 4713 +4667 4664 4674 4730 +4666 4665 4675 4715 +4669 4670 4662 4800 +4668 4671 4663 4785 +4671 4668 4672 4802 +4670 4669 4673 4787 +4673 4674 4670 10360 +4672 4675 4671 10501 +4675 4672 4666 10362 +4674 4673 4667 10503 +4677 4678 4681 4328 +4676 4679 4680 4661 +4679 4676 4685 4330 +4678 4677 4684 4663 +4681 4682 4677 4708 +4680 4683 4676 4249 +4683 4680 4689 4710 +4682 4681 4688 4251 +4685 4686 4679 4780 +4684 4687 4678 4569 +4687 4684 4691 4782 +4686 4685 4690 4571 +4689 4690 4683 4408 +4688 4691 4682 4845 +4691 4688 4687 4410 +4690 4689 4686 4847 +4693 4694 4696 4248 +4692 4695 4697 4709 +4695 4692 4700 4250 +4694 4693 4701 4711 +4697 4698 4692 4280 +4696 4699 4693 4757 +4699 4696 4704 4282 +4698 4697 4705 4759 +4701 4702 4694 4360 +4700 4703 4695 4893 +4703 4700 4706 4362 +4702 4701 4707 4895 +4705 4706 4698 4440 +4704 4707 4699 5189 +4707 4704 4702 4442 +4706 4705 4703 5191 +4709 4710 4713 4680 +4708 4711 4712 4693 +4711 4708 4717 4682 +4710 4709 4716 4695 +4713 4714 4709 4760 +4712 4715 4708 4665 +4715 4712 4721 4762 +4714 4713 4720 4667 +4717 4718 4711 4896 +4716 4719 4710 4849 +4719 4716 4723 4898 +4718 4717 4722 4851 +4721 4722 4715 10508 +4720 4723 4714 10561 +4723 4720 4719 10510 +4722 4721 4718 10563 +4725 4726 4728 4648 +4724 4727 4729 4741 +4727 4724 4732 4650 +4726 4725 4733 4743 +4729 4730 4724 4664 +4728 4731 4725 4761 +4731 4728 4738 4666 +4730 4729 4739 4763 +4733 4734 4726 5004 +4732 4735 4727 5105 +4735 4732 4736 5006 +4734 4733 4737 5107 +4737 4738 4734 10356 +4736 4739 4735 10413 +4739 4736 4730 10358 +4738 4737 4731 10415 +4741 4742 4745 4340 +4740 4743 4744 4725 +4743 4740 4749 4342 +4742 4741 4748 4727 +4745 4746 4741 4756 +4744 4747 4740 4281 +4747 4744 4753 4758 +4746 4745 4752 4283 +4749 4750 4743 5100 +4748 4751 4742 5041 +4751 4748 4755 5102 +4750 4749 4754 5043 +4753 4754 4747 4488 +4752 4755 4746 5141 +4755 4752 4751 4490 +4754 4753 4750 5143 +4757 4758 4761 4744 +4756 4759 4760 4697 +4759 4756 4765 4746 +4758 4757 4764 4699 +4761 4762 4757 4712 +4760 4763 4756 4729 +4763 4760 4769 4714 +4762 4761 4768 4731 +4765 4766 4759 5192 +4764 4767 4758 5145 +4767 4764 4771 5194 +4766 4765 4770 5147 +4769 4770 4763 10420 +4768 4771 4762 10557 +4771 4768 4767 10422 +4770 4769 4766 10559 +4773 4774 4776 4568 +4772 4775 4777 4781 +4775 4772 4778 4570 +4774 4773 4779 4783 +4777 -1 4772 4586 +4776 -1 4773 4821 +4779 -1 4774 4618 +4778 -1 4775 4933 +4781 4782 4785 4684 +4780 4783 4784 4773 +4783 4780 4789 4686 +4782 4781 4788 4775 +4785 4786 4781 4822 +4784 4787 4780 4669 +4787 4784 4793 4824 +4786 4785 4792 4671 +4789 4790 4783 4934 +4788 4791 4782 4853 +4791 4788 4795 4936 +4790 4789 4794 4855 +4793 4794 4787 10496 +4792 4795 4786 10475 +4795 4792 4791 10498 +4794 4793 4790 10477 +4797 4798 4800 4652 +4796 4799 4801 4813 +4799 4796 4804 4654 +4798 4797 4805 4815 +4801 4802 4796 4668 +4800 4803 4797 4823 +4803 4800 4810 4670 +4802 4801 4811 4825 +4805 4806 4798 5000 +4804 4807 4799 4991 +4807 4804 4808 5002 +4806 4805 4809 4993 +4809 4810 4806 10352 +4808 4811 4807 10343 +4811 4808 4802 10354 +4810 4809 4803 10345 +4813 4814 4817 4596 +4812 4815 4816 4797 +4815 4812 4819 4598 +4814 4813 4818 4799 +4817 -1 4813 4820 +4816 -1 4812 4587 +4819 -1 4815 4988 +4818 -1 4814 4951 +4821 -1 4823 4816 +4820 -1 4822 4777 +4823 4824 4821 4784 +4822 4825 4820 4801 +4825 4822 4827 4786 +4824 4823 4826 4803 +4827 -1 4825 10346 +4826 -1 4824 10473 +4829 4830 4832 4844 +4828 4831 4833 4409 +4831 4828 4836 4846 +4830 4829 4837 4411 +4833 4834 4828 4860 +4832 4835 4829 4421 +4835 4832 4842 4862 +4834 4833 4843 4423 +4837 4838 4830 4908 +4836 4839 4831 4629 +4839 4836 4840 4910 +4838 4837 4841 4631 +4841 4842 4838 5380 +4840 4843 4839 5293 +4843 4840 4834 5382 +4842 4841 4835 5295 +4845 4846 4848 4828 +4844 4847 4849 4689 +4847 4844 4852 4830 +4846 4845 4853 4691 +4849 4850 4844 4864 +4848 4851 4845 4717 +4851 4848 4858 4866 +4850 4849 4859 4719 +4853 4854 4846 4912 +4852 4855 4847 4789 +4855 4852 4856 4914 +4854 4853 4857 4791 +4857 4858 4854 10524 +4856 4859 4855 10505 +4859 4856 4850 10526 +4858 4857 4851 10507 +4861 4862 4864 4832 +4860 4863 4865 4877 +4863 4860 4868 4834 +4862 4861 4869 4879 +4865 4866 4860 4848 +4864 4867 4861 4897 +4867 4864 4872 4850 +4866 4865 4873 4899 +4869 4870 4862 5388 +4868 4871 4863 5545 +4871 4868 4874 5390 +4870 4869 4875 5547 +4873 4874 4866 10532 +4872 4875 4867 10633 +4875 4872 4870 10534 +4874 4873 4871 10635 +4877 4878 4881 4420 +4876 4879 4880 4861 +4879 4876 4885 4422 +4878 4877 4884 4863 +4881 4882 4877 4892 +4880 4883 4876 4361 +4883 4880 4889 4894 +4882 4881 4888 4363 +4885 4886 4879 5540 +4884 4887 4878 5441 +4887 4884 4891 5542 +4886 4885 4890 5443 +4889 4890 4883 4536 +4888 4891 4882 5589 +4891 4888 4887 4538 +4890 4889 4886 5591 +4893 4894 4897 4880 +4892 4895 4896 4701 +4895 4892 4901 4882 +4894 4893 4900 4703 +4897 4898 4893 4716 +4896 4899 4892 4865 +4899 4896 4905 4718 +4898 4897 4904 4867 +4901 4902 4895 5196 +4900 4903 4894 5593 +4903 4900 4907 5198 +4902 4901 4906 5595 +4905 4906 4899 10628 +4904 4907 4898 10569 +4907 4904 4903 10630 +4906 4905 4902 10571 +4909 4910 4912 4836 +4908 4911 4913 4925 +4911 4908 4916 4838 +4910 4909 4917 4927 +4913 4914 4908 4852 +4912 4915 4909 4935 +4915 4912 4920 4854 +4914 4913 4921 4937 +4917 4918 4910 5384 +4916 4919 4911 5375 +4919 4916 4922 5386 +4918 4917 4923 5377 +4921 4922 4914 10528 +4920 4923 4915 10519 +4923 4920 4918 10530 +4922 4921 4919 10521 +4925 4926 4929 4628 +4924 4927 4928 4909 +4927 4924 4931 4630 +4926 4925 4930 4911 +4929 -1 4925 4932 +4928 -1 4924 4619 +4931 -1 4927 5372 +4930 -1 4926 5251 +4933 -1 4935 4928 +4932 -1 4934 4779 +4935 4936 4933 4788 +4934 4937 4932 4913 +4937 4934 4939 4790 +4936 4935 4938 4915 +4939 -1 4937 10516 +4938 -1 4936 10479 +4941 -1 4942 4944 +4940 -1 4943 1915 +4943 -1 4940 4952 +4942 -1 4941 1947 +4945 -1 4946 4940 +4944 -1 4947 4611 +4947 4948 4944 4954 +4946 4949 4945 4601 +4949 4946 4950 4956 +4948 4947 4951 4603 +4951 -1 4948 4984 +4950 -1 4949 4819 +4953 -1 4954 4942 +4952 -1 4955 4961 +4955 4956 4952 4946 +4954 4957 4953 4969 +4957 4954 4958 4948 +4956 4955 4959 4971 +4959 -1 4956 4986 +4958 -1 4957 5017 +4961 -1 4963 1946 +4960 -1 4962 4953 +4963 4964 4961 4972 +4962 4965 4960 1929 +4965 4962 4967 4974 +4964 4963 4966 1931 +4967 -1 4965 2154 +4966 -1 4964 5057 +4969 4970 4973 4600 +4968 4971 4972 4955 +4971 4968 4977 4602 +4970 4969 4976 4957 +4973 4974 4969 4962 +4972 4975 4968 4313 +4975 4972 4981 4964 +4974 4973 4980 4315 +4977 4978 4971 5012 +4976 4979 4970 4657 +4979 4976 4983 5014 +4978 4977 4982 4659 +4981 4982 4975 4344 +4980 4983 4974 5053 +4983 4980 4979 4346 +4982 4981 4978 5055 +4985 -1 4986 4950 +4984 -1 4987 4989 +4987 -1 4984 4958 +4986 -1 4985 5021 +4989 -1 4991 4818 +4988 -1 4990 4985 +4991 4992 4989 5022 +4990 4993 4988 4805 +4993 4990 4995 5024 +4992 4991 4994 4807 +4995 -1 4993 10340 +4994 -1 4992 10323 +4997 4998 5000 4656 +4996 4999 5001 5013 +4999 4996 5004 4658 +4998 4997 5005 5015 +5001 5002 4996 4804 +5000 5003 4997 5023 +5003 5000 5008 4806 +5002 5001 5009 5025 +5005 5006 4998 4732 +5004 5007 4999 5119 +5007 5004 5010 4734 +5006 5005 5011 5121 +5009 5010 5002 10348 +5008 5011 5003 10331 +5011 5008 5006 10350 +5010 5009 5007 10333 +5013 5014 5017 4976 +5012 5015 5016 4997 +5015 5012 5019 4978 +5014 5013 5018 4999 +5017 -1 5013 5020 +5016 -1 5012 4959 +5019 -1 5015 5116 +5018 -1 5014 5059 +5021 -1 5023 5016 +5020 -1 5022 4987 +5023 5024 5021 4990 +5022 5025 5020 5001 +5025 5022 5027 4992 +5024 5023 5026 5003 +5027 -1 5025 10328 +5026 -1 5024 10321 +5029 5030 5032 5044 +5028 5031 5033 4297 +5031 5028 5036 5046 +5030 5029 5037 4299 +5033 5034 5028 5052 +5032 5035 5029 4345 +5035 5032 5040 5054 +5034 5033 5041 4347 +5037 5038 5030 5060 +5036 5039 5031 4485 +5039 5036 5042 5062 +5038 5037 5043 4487 +5041 5042 5034 5092 +5040 5043 5035 4749 +5043 5040 5038 5094 +5042 5041 5039 4751 +5045 5046 5048 5028 +5044 5047 5049 2201 +5047 5044 5050 5030 +5046 5045 5051 2203 +5049 -1 5044 5056 +5048 -1 5045 2155 +5051 -1 5046 5064 +5050 -1 5047 2723 +5053 5054 5056 5032 +5052 5055 5057 4981 +5055 5052 5058 5034 +5054 5053 5059 4983 +5057 -1 5052 5048 +5056 -1 5053 4967 +5059 -1 5054 5096 +5058 -1 5055 5019 +5061 5062 5064 5036 +5060 5063 5065 5069 +5063 5060 5066 5038 +5062 5061 5067 5071 +5065 -1 5060 5050 +5064 -1 5061 5085 +5067 -1 5062 5098 +5066 -1 5063 5225 +5069 5070 5073 4484 +5068 5071 5072 5061 +5071 5068 5077 4486 +5070 5069 5076 5063 +5073 5074 5069 5086 +5072 5075 5068 4469 +5075 5072 5081 5088 +5074 5073 5080 4471 +5077 5078 5071 5220 +5076 5079 5070 5133 +5079 5076 5083 5222 +5078 5077 5082 5135 +5081 5082 5075 8840 +5080 5083 5074 10147 +5083 5080 5079 8842 +5082 5081 5078 10149 +5085 -1 5087 2722 +5084 -1 5086 5065 +5087 5088 5085 5072 +5086 5089 5084 2709 +5089 5086 5091 5074 +5088 5087 5090 2711 +5091 -1 5089 10090 +5090 -1 5088 10145 +5093 5094 5096 5040 +5092 5095 5097 5101 +5095 5092 5098 5042 +5094 5093 5099 5103 +5097 -1 5092 5058 +5096 -1 5093 5117 +5099 -1 5094 5066 +5098 -1 5095 5229 +5101 5102 5105 4748 +5100 5103 5104 5093 +5103 5100 5109 4750 +5102 5101 5108 5095 +5105 5106 5101 5118 +5104 5107 5100 4733 +5107 5104 5113 5120 +5106 5105 5112 4735 +5109 5110 5103 5230 +5108 5111 5102 5149 +5111 5108 5115 5232 +5110 5109 5114 5151 +5113 5114 5107 10408 +5112 5115 5106 10387 +5115 5112 5111 10410 +5114 5113 5110 10389 +5117 -1 5119 5018 +5116 -1 5118 5097 +5119 5120 5117 5104 +5118 5121 5116 5005 +5121 5118 5123 5106 +5120 5119 5122 5007 +5123 -1 5121 10334 +5122 -1 5120 10385 +5125 5126 5128 5140 +5124 5127 5129 4489 +5127 5124 5132 5142 +5126 5125 5133 4491 +5129 5130 5124 5156 +5128 5131 5125 4501 +5131 5128 5136 5158 +5130 5129 5137 4503 +5133 5134 5126 5204 +5132 5135 5127 5077 +5135 5132 5138 5206 +5134 5133 5139 5079 +5137 5138 5130 8884 +5136 5139 5131 8837 +5139 5136 5134 8886 +5138 5137 5135 8839 +5141 5142 5144 5124 +5140 5143 5145 4753 +5143 5140 5148 5126 +5142 5141 5149 4755 +5145 5146 5140 5160 +5144 5147 5141 4765 +5147 5144 5154 5162 +5146 5145 5155 4767 +5149 5150 5142 5208 +5148 5151 5143 5109 +5151 5148 5152 5210 +5150 5149 5153 5111 +5153 5154 5150 10436 +5152 5155 5151 10417 +5155 5152 5146 10438 +5154 5153 5147 10419 +5157 5158 5160 5128 +5156 5159 5161 5173 +5159 5156 5164 5130 +5158 5157 5165 5175 +5161 5162 5156 5144 +5160 5163 5157 5193 +5163 5160 5168 5146 +5162 5161 5169 5195 +5165 5166 5158 8888 +5164 5167 5159 8869 +5167 5164 5170 8890 +5166 5165 5171 8871 +5169 5170 5162 10444 +5168 5171 5163 10601 +5171 5168 5166 10446 +5170 5169 5167 10603 +5173 5174 5177 4500 +5172 5175 5176 5157 +5175 5172 5187 4502 +5174 5173 5186 5159 +5177 5178 5173 5188 +5176 5179 5172 4441 +5179 5176 5181 5190 +5178 5177 5180 4443 +5181 5182 5179 4548 +5180 5183 5178 5605 +5183 5180 5185 4550 +5182 5181 5184 5607 +5185 5186 5183 8860 +5184 5187 5182 8801 +5187 5184 5175 8862 +5186 5185 5174 8803 +5189 5190 5193 5176 +5188 5191 5192 4705 +5191 5188 5197 5178 +5190 5189 5196 4707 +5193 5194 5189 4764 +5192 5195 5188 5161 +5195 5192 5201 4766 +5194 5193 5200 5163 +5197 5198 5191 4900 +5196 5199 5190 5609 +5199 5196 5203 4902 +5198 5197 5202 5611 +5201 5202 5195 10596 +5200 5203 5194 10565 +5203 5200 5199 10598 +5202 5201 5198 10567 +5205 5206 5208 5132 +5204 5207 5209 5221 +5207 5204 5212 5134 +5206 5205 5213 5223 +5209 5210 5204 5148 +5208 5211 5205 5231 +5211 5208 5216 5150 +5210 5209 5217 5233 +5213 5214 5206 8892 +5212 5215 5207 10167 +5215 5212 5218 8894 +5214 5213 5219 10169 +5217 5218 5210 10440 +5216 5219 5211 10431 +5219 5216 5214 10442 +5218 5217 5215 10433 +5221 5222 5225 5076 +5220 5223 5224 5205 +5223 5220 5227 5078 +5222 5221 5226 5207 +5225 -1 5221 5228 +5224 -1 5220 5067 +5227 -1 5223 10164 +5226 -1 5222 10151 +5229 -1 5231 5224 +5228 -1 5230 5099 +5231 5232 5229 5108 +5230 5233 5228 5209 +5233 5230 5235 5110 +5232 5231 5234 5211 +5235 -1 5233 10428 +5234 -1 5232 10391 +5237 -1 5238 5244 +5236 -1 5239 2899 +5239 5240 5236 5252 +5238 5241 5237 2945 +5241 5238 5242 5254 +5240 5239 5243 2947 +5243 -1 5240 5300 +5242 -1 5241 3507 +5245 -1 5246 5236 +5244 -1 5247 4643 +5247 5248 5244 5256 +5246 5249 5245 4633 +5249 5246 5250 5258 +5248 5247 5251 4635 +5251 -1 5248 5364 +5250 -1 5249 4931 +5253 5254 5256 5238 +5252 5255 5257 5269 +5255 5252 5260 5240 +5254 5253 5261 5271 +5257 5258 5252 5246 +5256 5259 5253 5285 +5259 5256 5264 5248 +5258 5257 5265 5287 +5261 5262 5254 5302 +5260 5263 5255 5337 +5263 5260 5266 5304 +5262 5261 5267 5339 +5265 5266 5258 5366 +5264 5267 5259 5401 +5267 5264 5262 5368 +5266 5265 5263 5403 +5269 5270 5273 2944 +5268 5271 5272 5253 +5271 5268 5277 2946 +5270 5269 5276 5255 +5273 5274 5269 5288 +5272 5275 5268 2913 +5275 5272 5281 5290 +5274 5273 5280 2915 +5277 5278 5271 5332 +5276 5279 5270 3465 +5279 5276 5283 5334 +5278 5277 5282 3467 +5281 5282 5275 3352 +5280 5283 5274 5465 +5283 5280 5279 3354 +5282 5281 5278 5467 +5285 5286 5289 4632 +5284 5287 5288 5257 +5287 5284 5293 4634 +5286 5285 5292 5259 +5289 5290 5285 5272 +5288 5291 5284 4393 +5291 5288 5297 5274 +5290 5289 5296 4395 +5293 5294 5287 5396 +5292 5295 5286 4841 +5295 5292 5299 5398 +5294 5293 5298 4843 +5297 5298 5291 4424 +5296 5299 5290 5461 +5299 5296 5295 4426 +5298 5297 5294 5463 +5301 -1 5302 5242 +5300 -1 5303 5309 +5303 5304 5300 5260 +5302 5305 5301 5349 +5305 5302 5306 5262 +5304 5303 5307 5351 +5307 -1 5304 5370 +5306 -1 5305 5865 +5309 -1 5311 3506 +5308 -1 5310 5301 +5311 5312 5309 5352 +5310 5313 5308 3493 +5313 5310 5315 5354 +5312 5311 5314 3495 +5315 -1 5313 7282 +5314 -1 5312 9881 +5317 5318 5320 3464 +5316 5319 5321 5333 +5319 5316 5324 3466 +5318 5317 5325 5335 +5321 5322 5316 3492 +5320 5323 5317 5353 +5323 5320 5330 3494 +5322 5321 5331 5355 +5325 5326 5318 3524 +5324 5327 5319 5705 +5327 5324 5328 3526 +5326 5325 5329 5707 +5329 5330 5326 7296 +5328 5331 5327 9369 +5331 5328 5322 7298 +5330 5329 5323 9371 +5333 5334 5337 5276 +5332 5335 5336 5317 +5335 5332 5341 5278 +5334 5333 5340 5319 +5337 5338 5333 5348 +5336 5339 5332 5261 +5339 5336 5345 5350 +5338 5337 5344 5263 +5341 5342 5335 5700 +5340 5343 5334 5473 +5343 5340 5347 5702 +5342 5341 5346 5475 +5345 5346 5339 5408 +5344 5347 5338 5813 +5347 5344 5343 5410 +5346 5345 5342 5815 +5349 5350 5353 5336 +5348 5351 5352 5303 +5351 5348 5357 5338 +5350 5349 5356 5305 +5353 5354 5349 5310 +5352 5355 5348 5321 +5355 5352 5361 5312 +5354 5353 5360 5323 +5357 5358 5351 5860 +5356 5359 5350 5817 +5359 5356 5363 5862 +5358 5357 5362 5819 +5361 5362 5355 9376 +5360 5363 5354 9877 +5363 5360 5359 9378 +5362 5361 5358 9879 +5365 -1 5366 5250 +5364 -1 5367 5373 +5367 5368 5364 5264 +5366 5369 5365 5413 +5369 5366 5370 5266 +5368 5367 5371 5415 +5371 -1 5368 5306 +5370 -1 5369 5869 +5373 -1 5375 4930 +5372 -1 5374 5365 +5375 5376 5373 5416 +5374 5377 5372 4917 +5377 5374 5379 5418 +5376 5375 5378 4919 +5379 -1 5377 10522 +5378 -1 5376 10757 +5381 5382 5384 4840 +5380 5383 5385 5397 +5383 5380 5388 4842 +5382 5381 5389 5399 +5385 5386 5380 4916 +5384 5387 5381 5417 +5387 5384 5392 4918 +5386 5385 5393 5419 +5389 5390 5382 4868 +5388 5391 5383 5561 +5391 5388 5394 4870 +5390 5389 5395 5563 +5393 5394 5386 10536 +5392 5395 5387 10785 +5395 5392 5390 10538 +5394 5393 5391 10787 +5397 5398 5401 5292 +5396 5399 5400 5381 +5399 5396 5405 5294 +5398 5397 5404 5383 +5401 5402 5397 5412 +5400 5403 5396 5265 +5403 5400 5409 5414 +5402 5401 5408 5267 +5405 5406 5399 5556 +5404 5407 5398 5469 +5407 5404 5411 5558 +5406 5405 5410 5471 +5409 5410 5403 5344 +5408 5411 5402 5829 +5411 5408 5407 5346 +5410 5409 5406 5831 +5413 5414 5417 5400 +5412 5415 5416 5367 +5415 5412 5421 5402 +5414 5413 5420 5369 +5417 5418 5413 5374 +5416 5419 5412 5385 +5419 5416 5425 5376 +5418 5417 5424 5387 +5421 5422 5415 5870 +5420 5423 5414 5833 +5423 5420 5427 5872 +5422 5421 5426 5835 +5425 5426 5419 10780 +5424 5427 5418 10759 +5427 5424 5423 10782 +5426 5425 5422 10761 +5429 5430 5432 5444 +5428 5431 5433 4377 +5431 5428 5436 5446 +5430 5429 5437 4379 +5433 5434 5428 5460 +5432 5435 5429 4425 +5435 5432 5440 5462 +5434 5433 5441 4427 +5437 5438 5430 5476 +5436 5439 5431 4533 +5439 5436 5442 5478 +5438 5437 5443 4535 +5441 5442 5434 5524 +5440 5443 5435 4885 +5443 5440 5438 5526 +5442 5441 5439 4887 +5445 5446 5448 5428 +5444 5447 5449 3369 +5447 5444 5452 5430 +5446 5445 5453 3371 +5449 5450 5444 5464 +5448 5451 5445 3353 +5451 5448 5456 5466 +5450 5449 5457 3355 +5453 5454 5446 5480 +5452 5455 5447 3701 +5455 5452 5458 5482 +5454 5453 5459 3703 +5457 5458 5450 5668 +5456 5459 5451 3541 +5459 5456 5454 5670 +5458 5457 5455 3543 +5461 5462 5464 5432 +5460 5463 5465 5297 +5463 5460 5468 5434 +5462 5461 5469 5299 +5465 5466 5460 5448 +5464 5467 5461 5281 +5467 5464 5472 5450 +5466 5465 5473 5283 +5469 5470 5462 5528 +5468 5471 5463 5405 +5471 5468 5474 5530 +5470 5469 5475 5407 +5473 5474 5466 5672 +5472 5475 5467 5341 +5475 5472 5470 5674 +5474 5473 5471 5343 +5477 5478 5480 5436 +5476 5479 5481 5493 +5479 5476 5484 5438 +5478 5477 5485 5495 +5481 5482 5476 5452 +5480 5483 5477 5509 +5483 5480 5488 5454 +5482 5481 5489 5511 +5485 5486 5478 5532 +5484 5487 5479 5641 +5487 5484 5490 5534 +5486 5485 5491 5643 +5489 5490 5482 5676 +5488 5491 5483 5769 +5491 5488 5486 5678 +5490 5489 5487 5771 +5493 5494 5497 4532 +5492 5495 5496 5477 +5495 5492 5501 4534 +5494 5493 5500 5479 +5497 5498 5493 5512 +5496 5499 5492 4517 +5499 5496 5505 5514 +5498 5497 5504 4519 +5501 5502 5495 5636 +5500 5503 5494 5581 +5503 5500 5507 5638 +5502 5501 5506 5583 +5505 5506 5499 8604 +5504 5507 5498 8577 +5507 5504 5503 8606 +5506 5505 5502 8579 +5509 5510 5513 3700 +5508 5511 5512 5481 +5511 5508 5517 3702 +5510 5509 5516 5483 +5513 5514 5509 5496 +5512 5515 5508 3685 +5515 5512 5521 5498 +5514 5513 5520 3687 +5517 5518 5511 5764 +5516 5519 5510 5721 +5519 5516 5523 5766 +5518 5517 5522 5723 +5521 5522 5515 7960 +5520 5523 5514 8573 +5523 5520 5519 7962 +5522 5521 5518 8575 +5525 5526 5528 5440 +5524 5527 5529 5541 +5527 5524 5532 5442 +5526 5525 5533 5543 +5529 5530 5524 5468 +5528 5531 5525 5557 +5531 5528 5536 5470 +5530 5529 5537 5559 +5533 5534 5526 5484 +5532 5535 5527 5653 +5535 5532 5538 5486 +5534 5533 5539 5655 +5537 5538 5530 5680 +5536 5539 5531 5909 +5539 5536 5534 5682 +5538 5537 5535 5911 +5541 5542 5545 4884 +5540 5543 5544 5525 +5543 5540 5549 4886 +5542 5541 5548 5527 +5545 5546 5541 5560 +5544 5547 5540 4869 +5547 5544 5553 5562 +5546 5545 5552 4871 +5549 5550 5543 5656 +5548 5551 5542 5597 +5551 5548 5555 5658 +5550 5549 5554 5599 +5553 5554 5547 10640 +5552 5555 5546 10861 +5555 5552 5551 10642 +5554 5553 5550 10863 +5557 5558 5561 5404 +5556 5559 5560 5529 +5559 5556 5565 5406 +5558 5557 5564 5531 +5561 5562 5557 5544 +5560 5563 5556 5389 +5563 5560 5569 5546 +5562 5561 5568 5391 +5565 5566 5559 5912 +5564 5567 5558 5837 +5567 5564 5571 5914 +5566 5565 5570 5839 +5569 5570 5563 10792 +5568 5571 5562 10857 +5571 5568 5567 10794 +5570 5569 5566 10859 +5573 5574 5576 5588 +5572 5575 5577 4537 +5575 5572 5580 5590 +5574 5573 5581 4539 +5577 5578 5572 5604 +5576 5579 5573 4549 +5579 5576 5586 5606 +5578 5577 5587 4551 +5581 5582 5574 5620 +5580 5583 5575 5501 +5583 5580 5584 5622 +5582 5581 5585 5503 +5585 5586 5582 8676 +5584 5587 5583 8613 +5587 5584 5578 8678 +5586 5585 5579 8615 +5589 5590 5592 5572 +5588 5591 5593 4889 +5591 5588 5596 5574 +5590 5589 5597 4891 +5593 5594 5588 5608 +5592 5595 5589 4901 +5595 5592 5600 5610 +5594 5593 5601 4903 +5597 5598 5590 5624 +5596 5599 5591 5549 +5599 5596 5602 5626 +5598 5597 5603 5551 +5601 5602 5594 10656 +5600 5603 5595 10637 +5603 5600 5598 10658 +5602 5601 5599 10639 +5605 5606 5608 5576 +5604 5607 5609 5181 +5607 5604 5612 5578 +5606 5605 5613 5183 +5609 5610 5604 5592 +5608 5611 5605 5197 +5611 5608 5616 5594 +5610 5609 5617 5199 +5613 5614 5606 8684 +5612 5615 5607 8865 +5615 5612 5618 8686 +5614 5613 5619 8867 +5617 5618 5610 10652 +5616 5619 5611 10605 +5619 5616 5614 10654 +5618 5617 5615 10607 +5621 5622 5624 5580 +5620 5623 5625 5637 +5623 5620 5628 5582 +5622 5621 5629 5639 +5625 5626 5620 5596 +5624 5627 5621 5657 +5627 5624 5632 5598 +5626 5625 5633 5659 +5629 5630 5622 8680 +5628 5631 5623 8665 +5631 5628 5634 8682 +5630 5629 5635 8667 +5633 5634 5626 10664 +5632 5635 5627 10925 +5635 5632 5630 10666 +5634 5633 5631 10927 +5637 5638 5641 5500 +5636 5639 5640 5621 +5639 5636 5645 5502 +5638 5637 5644 5623 +5641 5642 5637 5652 +5640 5643 5636 5485 +5643 5640 5651 5654 +5642 5641 5650 5487 +5645 5646 5639 8660 +5644 5647 5638 8585 +5647 5644 5649 8662 +5646 5645 5648 8587 +5649 5650 5647 5776 +5648 5651 5646 8725 +5651 5648 5643 5778 +5650 5649 5642 8727 +5653 5654 5657 5640 +5652 5655 5656 5533 +5655 5652 5661 5642 +5654 5653 5660 5535 +5657 5658 5653 5548 +5656 5659 5652 5625 +5659 5656 5665 5550 +5658 5657 5664 5627 +5661 5662 5655 5916 +5660 5663 5654 8733 +5663 5660 5667 5918 +5662 5661 5666 8735 +5665 5666 5659 10920 +5664 5667 5658 10869 +5667 5664 5663 10922 +5666 5665 5662 10871 +5669 5670 5672 5456 +5668 5671 5673 5685 +5671 5668 5676 5458 +5670 5669 5677 5687 +5673 5674 5668 5472 +5672 5675 5669 5701 +5675 5672 5680 5474 +5674 5673 5681 5703 +5677 5678 5670 5488 +5676 5679 5671 5781 +5679 5676 5682 5490 +5678 5677 5683 5783 +5681 5682 5674 5536 +5680 5683 5675 5897 +5683 5680 5678 5538 +5682 5681 5679 5899 +5685 5686 5689 3540 +5684 5687 5688 5669 +5687 5684 5693 3542 +5686 5685 5692 5671 +5689 5690 5685 5704 +5688 5691 5684 3525 +5691 5688 5699 5706 +5690 5689 5698 3527 +5693 5694 5687 5784 +5692 5695 5686 5737 +5695 5692 5697 5786 +5694 5693 5696 5739 +5697 5698 5695 7664 +5696 5699 5694 9269 +5699 5696 5691 7666 +5698 5697 5690 9271 +5701 5702 5705 5340 +5700 5703 5704 5673 +5703 5700 5709 5342 +5702 5701 5708 5675 +5705 5706 5701 5688 +5704 5707 5700 5325 +5707 5704 5713 5690 +5706 5705 5712 5327 +5709 5710 5703 5892 +5708 5711 5702 5821 +5711 5708 5715 5894 +5710 5709 5714 5823 +5713 5714 5707 9364 +5712 5715 5706 9277 +5715 5712 5711 9366 +5714 5713 5710 9279 +5717 5718 5720 5732 +5716 5719 5721 3705 +5719 5716 5724 5734 +5718 5717 5725 3707 +5721 5722 5716 5748 +5720 5723 5717 5517 +5723 5720 5730 5750 +5722 5721 5731 5519 +5725 5726 5718 5800 +5724 5727 5719 3717 +5727 5724 5728 5802 +5726 5725 5729 3719 +5729 5730 5726 8052 +5728 5731 5727 7957 +5731 5728 5722 8054 +5730 5729 5723 7959 +5733 5734 5736 5716 +5732 5735 5737 3545 +5735 5732 5740 5718 +5734 5733 5741 3547 +5737 5738 5732 5752 +5736 5739 5733 5693 +5739 5736 5746 5754 +5738 5737 5747 5695 +5741 5742 5734 5796 +5740 5743 5735 3557 +5743 5740 5744 5798 +5742 5741 5745 3559 +5745 5746 5742 7688 +5744 5747 5743 7661 +5747 5744 5738 7690 +5746 5745 5739 7663 +5749 5750 5752 5720 +5748 5751 5753 5765 +5751 5748 5756 5722 +5750 5749 5757 5767 +5753 5754 5748 5736 +5752 5755 5749 5785 +5755 5752 5760 5738 +5754 5753 5761 5787 +5757 5758 5750 8060 +5756 5759 5751 8641 +5759 5756 5762 8062 +5758 5757 5763 8643 +5761 5762 5754 7696 +5760 5763 5755 9321 +5763 5760 5758 7698 +5762 5761 5759 9323 +5765 5766 5769 5516 +5764 5767 5768 5749 +5767 5764 5773 5518 +5766 5765 5772 5751 +5769 5770 5765 5780 +5768 5771 5764 5489 +5771 5768 5779 5782 +5770 5769 5778 5491 +5773 5774 5767 8636 +5772 5775 5766 8581 +5775 5772 5777 8638 +5774 5773 5776 8583 +5777 5778 5775 5648 +5776 5779 5774 8709 +5779 5776 5771 5650 +5778 5777 5770 8711 +5781 5782 5785 5768 +5780 5783 5784 5677 +5783 5780 5789 5770 +5782 5781 5788 5679 +5785 5786 5781 5692 +5784 5787 5780 5753 +5787 5784 5793 5694 +5786 5785 5792 5755 +5789 5790 5783 5900 +5788 5791 5782 8717 +5791 5788 5795 5902 +5790 5789 5794 8719 +5793 5794 5787 9316 +5792 5795 5786 9273 +5795 5792 5791 9318 +5794 5793 5790 9275 +5797 5798 5800 5740 +5796 5799 5801 4149 +5799 5796 5804 5742 +5798 5797 5805 4151 +5801 5802 5796 5724 +5800 5803 5797 4165 +5803 5800 5808 5726 +5802 5801 5809 4167 +5805 5806 5798 7684 +5804 5807 5799 7485 +5807 5804 5810 7686 +5806 5805 5811 7487 +5809 5810 5802 8056 +5808 5811 5803 8013 +5811 5808 5806 8058 +5810 5809 5807 8015 +5813 5814 5816 5828 +5812 5815 5817 5345 +5815 5812 5820 5830 +5814 5813 5821 5347 +5817 5818 5812 5844 +5816 5819 5813 5357 +5819 5816 5826 5846 +5818 5817 5827 5359 +5821 5822 5814 5876 +5820 5823 5815 5709 +5823 5820 5824 5878 +5822 5821 5825 5711 +5825 5826 5822 9476 +5824 5827 5823 9373 +5827 5824 5818 9478 +5826 5825 5819 9375 +5829 5830 5832 5812 +5828 5831 5833 5409 +5831 5828 5836 5814 +5830 5829 5837 5411 +5833 5834 5828 5848 +5832 5835 5829 5421 +5835 5832 5840 5850 +5834 5833 5841 5423 +5837 5838 5830 5880 +5836 5839 5831 5565 +5839 5836 5842 5882 +5838 5837 5843 5567 +5841 5842 5834 10808 +5840 5843 5835 10789 +5843 5840 5838 10810 +5842 5841 5839 10791 +5845 5846 5848 5816 +5844 5847 5849 5861 +5847 5844 5852 5818 +5846 5845 5853 5863 +5849 5850 5844 5832 +5848 5851 5845 5871 +5851 5848 5856 5834 +5850 5849 5857 5873 +5853 5854 5846 9484 +5852 5855 5847 9919 +5855 5852 5858 9486 +5854 5853 5859 9921 +5857 5858 5850 10812 +5856 5859 5851 10803 +5859 5856 5854 10814 +5858 5857 5855 10805 +5861 5862 5865 5356 +5860 5863 5864 5845 +5863 5860 5867 5358 +5862 5861 5866 5847 +5865 -1 5861 5868 +5864 -1 5860 5307 +5867 -1 5863 9916 +5866 -1 5862 9883 +5869 -1 5871 5864 +5868 -1 5870 5371 +5871 5872 5869 5420 +5870 5873 5868 5849 +5873 5870 5875 5422 +5872 5871 5874 5851 +5875 -1 5873 10800 +5874 -1 5872 10763 +5877 5878 5880 5820 +5876 5879 5881 5893 +5879 5876 5884 5822 +5878 5877 5885 5895 +5881 5882 5876 5836 +5880 5883 5877 5913 +5883 5880 5888 5838 +5882 5881 5889 5915 +5885 5886 5878 9480 +5884 5887 5879 9421 +5887 5884 5890 9482 +5886 5885 5891 9423 +5889 5890 5882 10816 +5888 5891 5883 10893 +5891 5888 5886 10818 +5890 5889 5887 10895 +5893 5894 5897 5708 +5892 5895 5896 5877 +5895 5892 5907 5710 +5894 5893 5906 5879 +5897 5898 5893 5908 +5896 5899 5892 5681 +5899 5896 5901 5910 +5898 5897 5900 5683 +5901 5902 5899 5788 +5900 5903 5898 8773 +5903 5900 5905 5790 +5902 5901 5904 8775 +5905 5906 5903 9412 +5904 5907 5902 9281 +5907 5904 5895 9414 +5906 5905 5894 9283 +5909 5910 5913 5896 +5908 5911 5912 5537 +5911 5908 5917 5898 +5910 5909 5916 5539 +5913 5914 5909 5564 +5912 5915 5908 5881 +5915 5912 5921 5566 +5914 5913 5920 5883 +5917 5918 5911 5660 +5916 5919 5910 8777 +5919 5916 5923 5662 +5918 5917 5922 8779 +5921 5922 5915 10888 +5920 5923 5914 10865 +5923 5920 5919 10890 +5922 5921 5918 10867 +5925 -1 5926 5928 +5924 -1 5927 539 +5927 -1 5924 5936 +5926 -1 5925 571 +5929 -1 5930 5924 +5928 -1 5931 3195 +5931 5932 5928 5938 +5930 5933 5929 3241 +5933 5930 5934 5940 +5932 5931 5935 3243 +5935 -1 5932 5968 +5934 -1 5933 4083 +5937 -1 5938 5926 +5936 -1 5939 5945 +5939 5940 5936 5930 +5938 5941 5937 5953 +5941 5938 5942 5932 +5940 5939 5943 5955 +5943 -1 5940 5970 +5942 -1 5941 6001 +5945 -1 5947 570 +5944 -1 5946 5937 +5947 5948 5945 5956 +5946 5949 5944 553 +5949 5946 5951 5958 +5948 5947 5950 555 +5951 -1 5949 1570 +5950 -1 5948 6013 +5953 5954 5957 3240 +5952 5955 5956 5939 +5955 5952 5961 3242 +5954 5953 5960 5941 +5957 5958 5953 5946 +5956 5959 5952 3209 +5959 5956 5965 5948 +5958 5957 5964 3211 +5961 5962 5955 5996 +5960 5963 5954 3993 +5963 5960 5967 5998 +5962 5961 5966 3995 +5965 5966 5959 3832 +5964 5967 5958 6015 +5967 5964 5963 3834 +5966 5965 5962 6017 +5969 -1 5970 5934 +5968 -1 5971 5973 +5971 -1 5968 5942 +5970 -1 5969 6005 +5973 -1 5975 4082 +5972 -1 5974 5969 +5975 5976 5973 6006 +5974 5977 5972 4069 +5977 5974 5979 6008 +5976 5975 5978 4071 +5979 -1 5977 6578 +5978 -1 5976 6909 +5981 5982 5984 3992 +5980 5983 5985 5997 +5983 5980 5988 3994 +5982 5981 5989 5999 +5985 5986 5980 4068 +5984 5987 5981 6007 +5987 5984 5992 4070 +5986 5985 5993 6009 +5989 5990 5982 4020 +5988 5991 5983 6055 +5991 5988 5994 4022 +5990 5989 5995 6057 +5993 5994 5986 6280 +5992 5995 5987 6931 +5995 5992 5990 6282 +5994 5993 5991 6933 +5997 5998 6001 5960 +5996 5999 6000 5981 +5999 5996 6003 5962 +5998 5997 6002 5983 +6001 -1 5997 6004 +6000 -1 5996 5943 +6003 -1 5999 6052 +6002 -1 5998 6019 +6005 -1 6007 6000 +6004 -1 6006 5971 +6007 6008 6005 5974 +6006 6009 6004 5985 +6009 6006 6011 5976 +6008 6007 6010 5987 +6011 -1 6009 6928 +6010 -1 6008 6911 +6013 -1 6014 6020 +6012 -1 6015 5951 +6015 6016 6012 6028 +6014 6017 6013 5965 +6017 6014 6018 6030 +6016 6015 6019 5967 +6019 -1 6016 6044 +6018 -1 6017 6003 +6021 -1 6022 6012 +6020 -1 6023 1571 +6023 6024 6020 6032 +6022 6025 6021 1561 +6025 6022 6026 6034 +6024 6023 6027 1563 +6027 -1 6024 6076 +6026 -1 6025 1707 +6029 6030 6032 6014 +6028 6031 6033 3833 +6031 6028 6036 6016 +6030 6029 6037 3835 +6033 6034 6028 6022 +6032 6035 6029 3817 +6035 6032 6040 6024 +6034 6033 6041 3819 +6037 6038 6030 6046 +6036 6039 6031 4037 +6039 6036 6042 6048 +6038 6037 6043 4039 +6041 6042 6034 6078 +6040 6043 6035 3909 +6043 6040 6038 6080 +6042 6041 6039 3911 +6045 -1 6046 6018 +6044 -1 6047 6053 +6047 6048 6044 6036 +6046 6049 6045 6061 +6049 6046 6050 6038 +6048 6047 6051 6063 +6051 -1 6048 6082 +6050 -1 6049 6161 +6053 -1 6055 6002 +6052 -1 6054 6045 +6055 6056 6053 6064 +6054 6057 6052 5989 +6057 6054 6059 6066 +6056 6055 6058 5991 +6059 -1 6057 6934 +6058 -1 6056 7017 +6061 6062 6065 4036 +6060 6063 6064 6047 +6063 6060 6069 4038 +6062 6061 6068 6049 +6065 6066 6061 6054 +6064 6067 6060 4021 +6067 6064 6073 6056 +6066 6065 6072 4023 +6069 6070 6063 6156 +6068 6071 6062 6113 +6071 6068 6075 6158 +6070 6069 6074 6115 +6073 6074 6067 6264 +6072 6075 6066 7013 +6075 6072 6071 6266 +6074 6073 6070 7015 +6077 -1 6078 6026 +6076 -1 6079 6085 +6079 6080 6076 6040 +6078 6081 6077 6093 +6081 6078 6082 6042 +6080 6079 6083 6095 +6083 -1 6080 6050 +6082 -1 6081 6165 +6085 -1 6087 1706 +6084 -1 6086 6077 +6087 6088 6085 6096 +6086 6089 6084 1693 +6089 6086 6091 6098 +6088 6087 6090 1695 +6091 -1 6089 10230 +6090 -1 6088 10257 +6093 6094 6097 3908 +6092 6095 6096 6079 +6095 6092 6101 3910 +6094 6093 6100 6081 +6097 6098 6093 6086 +6096 6099 6092 3893 +6099 6096 6105 6088 +6098 6097 6104 3895 +6101 6102 6095 6166 +6100 6103 6094 6129 +6103 6100 6107 6168 +6102 6101 6106 6131 +6105 6106 6099 8368 +6104 6107 6098 10253 +6107 6104 6103 8370 +6106 6105 6102 10255 +6109 6110 6112 6124 +6108 6111 6113 4041 +6111 6108 6116 6126 +6110 6109 6117 4043 +6113 6114 6108 6140 +6112 6115 6109 6069 +6115 6112 6122 6142 +6114 6113 6123 6071 +6117 6118 6110 6172 +6116 6119 6111 4053 +6119 6116 6120 6174 +6118 6117 6121 4055 +6121 6122 6118 6428 +6120 6123 6119 6261 +6123 6120 6114 6430 +6122 6121 6115 6263 +6125 6126 6128 6108 +6124 6127 6129 3913 +6127 6124 6132 6110 +6126 6125 6133 3915 +6129 6130 6124 6144 +6128 6131 6125 6101 +6131 6128 6138 6146 +6130 6129 6139 6103 +6133 6134 6126 6176 +6132 6135 6127 3925 +6135 6132 6136 6178 +6134 6133 6137 3927 +6137 6138 6134 8408 +6136 6139 6135 8365 +6139 6136 6130 8410 +6138 6137 6131 8367 +6141 6142 6144 6112 +6140 6143 6145 6157 +6143 6140 6148 6114 +6142 6141 6149 6159 +6145 6146 6140 6128 +6144 6147 6141 6167 +6147 6144 6152 6130 +6146 6145 6153 6169 +6149 6150 6142 6436 +6148 6151 6143 7055 +6151 6148 6154 6438 +6150 6149 6155 7057 +6153 6154 6146 8416 +6152 6155 6147 10275 +6155 6152 6150 8418 +6154 6153 6151 10277 +6157 6158 6161 6068 +6156 6159 6160 6141 +6159 6156 6163 6070 +6158 6157 6162 6143 +6161 -1 6157 6164 +6160 -1 6156 6051 +6163 -1 6159 7052 +6162 -1 6158 7019 +6165 -1 6167 6160 +6164 -1 6166 6083 +6167 6168 6165 6100 +6166 6169 6164 6145 +6169 6166 6171 6102 +6168 6167 6170 6147 +6171 -1 6169 10272 +6170 -1 6168 10259 +6173 6174 6176 6116 +6172 6175 6177 4197 +6175 6172 6180 6118 +6174 6173 6181 4199 +6177 6178 6172 6132 +6176 6179 6173 4213 +6179 6176 6184 6134 +6178 6177 6185 4215 +6181 6182 6174 6432 +6180 6183 6175 6417 +6183 6180 6186 6434 +6182 6181 6187 6419 +6185 6186 6178 8404 +6184 6187 6179 8341 +6187 6184 6182 8406 +6186 6185 6183 8343 +6189 6190 6192 6204 +6188 6191 6193 3961 +6191 6188 6196 6206 +6190 6189 6197 3963 +6193 6194 6188 6236 +6192 6195 6189 4057 +6195 6192 6200 6238 +6194 6193 6201 4059 +6197 6198 6190 6316 +6196 6199 6191 3977 +6199 6196 6202 6318 +6198 6197 6203 3979 +6201 6202 6194 6396 +6200 6203 6195 4201 +6203 6200 6198 6398 +6202 6201 6199 4203 +6205 6206 6208 6188 +6204 6207 6209 6221 +6207 6204 6212 6190 +6206 6205 6213 6223 +6209 6210 6204 6240 +6208 6211 6205 6289 +6211 6208 6216 6242 +6210 6209 6217 6291 +6213 6214 6206 6320 +6212 6215 6207 6369 +6215 6212 6218 6322 +6214 6213 6219 6371 +6217 6218 6210 6660 +6216 6219 6211 6649 +6219 6216 6214 6662 +6218 6217 6215 6651 +6221 6222 6225 3960 +6220 6223 6224 6205 +6223 6220 6229 3962 +6222 6221 6228 6207 +6225 6226 6221 6284 +6224 6227 6220 4009 +6227 6224 6233 6286 +6226 6225 6232 4011 +6229 6230 6223 6364 +6228 6231 6222 3145 +6231 6228 6235 6366 +6230 6229 6234 3147 +6233 6234 6227 3176 +6232 6235 6226 6525 +6235 6232 6231 3178 +6234 6233 6230 6527 +6237 6238 6240 6192 +6236 6239 6241 6253 +6239 6236 6244 6194 +6238 6237 6245 6255 +6241 6242 6236 6208 +6240 6243 6237 6301 +6243 6240 6248 6210 +6242 6241 6249 6303 +6245 6246 6238 6400 +6244 6247 6239 6449 +6247 6244 6250 6402 +6246 6245 6251 6451 +6249 6250 6242 6664 +6248 6251 6243 6713 +6251 6248 6246 6666 +6250 6249 6247 6715 +6253 6254 6257 4056 +6252 6255 6256 6237 +6255 6252 6261 4058 +6254 6253 6260 6239 +6257 6258 6253 6304 +6256 6259 6252 4025 +6259 6256 6265 6306 +6258 6257 6264 4027 +6261 6262 6255 6444 +6260 6263 6254 6121 +6263 6260 6267 6446 +6262 6261 6266 6123 +6265 6266 6259 6072 +6264 6267 6258 6997 +6267 6264 6263 6074 +6266 6265 6262 6999 +6269 6270 6272 4008 +6268 6271 6273 6285 +6271 6268 6276 4010 +6270 6269 6277 6287 +6273 6274 6268 4024 +6272 6275 6269 6305 +6275 6272 6282 4026 +6274 6273 6283 6307 +6277 6278 6270 4072 +6276 6279 6271 6561 +6279 6276 6280 4074 +6278 6277 6281 6563 +6281 6282 6278 5992 +6280 6283 6279 6941 +6283 6280 6274 5994 +6282 6281 6275 6943 +6285 6286 6289 6224 +6284 6287 6288 6269 +6287 6284 6293 6226 +6286 6285 6292 6271 +6289 6290 6285 6300 +6288 6291 6284 6209 +6291 6288 6297 6302 +6290 6289 6296 6211 +6293 6294 6287 6556 +6292 6295 6286 6529 +6295 6292 6299 6558 +6294 6293 6298 6531 +6297 6298 6291 6644 +6296 6299 6290 6613 +6299 6296 6295 6646 +6298 6297 6294 6615 +6301 6302 6305 6288 +6300 6303 6304 6241 +6303 6300 6309 6290 +6302 6301 6308 6243 +6305 6306 6301 6256 +6304 6307 6300 6273 +6307 6304 6313 6258 +6306 6305 6312 6275 +6309 6310 6303 6708 +6308 6311 6302 6617 +6311 6308 6315 6710 +6310 6309 6314 6619 +6313 6314 6307 6948 +6312 6315 6306 7001 +6315 6312 6311 6950 +6314 6313 6310 7003 +6317 6318 6320 6196 +6316 6319 6321 6333 +6319 6316 6324 6198 +6318 6317 6325 6335 +6321 6322 6316 6212 +6320 6323 6317 6381 +6323 6320 6328 6214 +6322 6321 6329 6383 +6325 6326 6318 6404 +6324 6327 6319 6497 +6327 6324 6330 6406 +6326 6325 6331 6499 +6329 6330 6322 6668 +6328 6331 6323 6849 +6331 6328 6326 6670 +6330 6329 6327 6851 +6333 6334 6337 3976 +6332 6335 6336 6317 +6335 6332 6341 3978 +6334 6333 6340 6319 +6337 6338 6333 6384 +6336 6339 6332 3417 +6339 6336 6345 6386 +6338 6337 6344 3419 +6341 6342 6335 6492 +6340 6343 6334 4105 +6343 6340 6347 6494 +6342 6341 6346 4107 +6345 6346 6339 3448 +6344 6347 6338 7397 +6347 6344 6343 3450 +6346 6345 6342 7399 +6349 6350 6352 3144 +6348 6351 6353 6365 +6351 6348 6356 3146 +6350 6349 6357 6367 +6353 6354 6348 3416 +6352 6355 6349 6385 +6355 6352 6362 3418 +6354 6353 6363 6387 +6357 6358 6350 3040 +6356 6359 6351 6593 +6359 6356 6360 3042 +6358 6357 6361 6595 +6361 6362 6358 3080 +6360 6363 6359 7257 +6363 6360 6354 3082 +6362 6361 6355 7259 +6365 6366 6369 6228 +6364 6367 6368 6349 +6367 6364 6373 6230 +6366 6365 6372 6351 +6369 6370 6365 6380 +6368 6371 6364 6213 +6371 6368 6377 6382 +6370 6369 6376 6215 +6373 6374 6367 6588 +6372 6375 6366 6533 +6375 6372 6379 6590 +6374 6373 6378 6535 +6377 6378 6371 6656 +6376 6379 6370 6797 +6379 6376 6375 6658 +6378 6377 6374 6799 +6381 6382 6385 6368 +6380 6383 6384 6321 +6383 6380 6389 6370 +6382 6381 6388 6323 +6385 6386 6381 6336 +6384 6387 6380 6353 +6387 6384 6393 6338 +6386 6385 6392 6355 +6389 6390 6383 6844 +6388 6391 6382 6801 +6391 6388 6395 6846 +6390 6389 6394 6803 +6393 6394 6387 7264 +6392 6395 6386 7401 +6395 6392 6391 7266 +6394 6393 6390 7403 +6397 6398 6400 6200 +6396 6399 6401 6413 +6399 6396 6404 6202 +6398 6397 6405 6415 +6401 6402 6396 6244 +6400 6403 6397 6461 +6403 6400 6408 6246 +6402 6401 6409 6463 +6405 6406 6398 6324 +6404 6407 6399 6509 +6407 6404 6410 6326 +6406 6405 6411 6511 +6409 6410 6402 6672 +6408 6411 6403 7145 +6411 6408 6406 6674 +6410 6409 6407 7147 +6413 6414 6417 4200 +6412 6415 6416 6397 +6415 6412 6421 4202 +6414 6413 6420 6399 +6417 6418 6413 6464 +6416 6419 6412 6181 +6419 6416 6427 6466 +6418 6417 6426 6183 +6421 6422 6415 6512 +6420 6423 6414 4181 +6423 6420 6425 6514 +6422 6421 6424 4183 +6425 6426 6423 8344 +6424 6427 6422 9141 +6427 6424 6419 8346 +6426 6425 6418 9143 +6429 6430 6432 6120 +6428 6431 6433 6445 +6431 6428 6436 6122 +6430 6429 6437 6447 +6433 6434 6428 6180 +6432 6435 6429 6465 +6435 6432 6440 6182 +6434 6433 6441 6467 +6437 6438 6430 6148 +6436 6439 6431 7041 +6439 6436 6442 6150 +6438 6437 6443 7043 +6441 6442 6434 8412 +6440 6443 6435 9185 +6443 6440 6438 8414 +6442 6441 6439 9187 +6445 6446 6449 6260 +6444 6447 6448 6429 +6447 6444 6453 6262 +6446 6445 6452 6431 +6449 6450 6445 6460 +6448 6451 6444 6245 +6451 6448 6457 6462 +6450 6449 6456 6247 +6453 6454 6447 7036 +6452 6455 6446 7005 +6455 6452 6459 7038 +6454 6453 6458 7007 +6457 6458 6451 6720 +6456 6459 6450 7093 +6459 6456 6455 6722 +6458 6457 6454 7095 +6461 6462 6465 6448 +6460 6463 6464 6401 +6463 6460 6469 6450 +6462 6461 6468 6403 +6465 6466 6461 6416 +6464 6467 6460 6433 +6467 6464 6473 6418 +6466 6465 6472 6435 +6469 6470 6463 7140 +6468 6471 6462 7097 +6471 6468 6475 7142 +6470 6469 6474 7099 +6473 6474 6467 9180 +6472 6475 6466 9149 +6475 6472 6471 9182 +6474 6473 6470 9151 +6477 6478 6480 4104 +6476 6479 6481 6493 +6479 6476 6484 4106 +6478 6477 6485 6495 +6481 6482 6476 4180 +6480 6483 6477 6513 +6483 6480 6490 4182 +6482 6481 6491 6515 +6485 6486 6478 4132 +6484 6487 6479 7465 +6487 6484 6488 4134 +6486 6485 6489 7467 +6489 6490 6486 8032 +6488 6491 6487 8961 +6491 6488 6482 8034 +6490 6489 6483 8963 +6493 6494 6497 6340 +6492 6495 6496 6477 +6495 6492 6501 6342 +6494 6493 6500 6479 +6497 6498 6493 6508 +6496 6499 6492 6325 +6499 6496 6505 6510 +6498 6497 6504 6327 +6501 6502 6495 7460 +6500 6503 6494 7405 +6503 6500 6507 7462 +6502 6501 6506 7407 +6505 6506 6499 6856 +6504 6507 6498 7541 +6507 6504 6503 6858 +6506 6505 6502 7543 +6509 6510 6513 6496 +6508 6511 6512 6405 +6511 6508 6517 6498 +6510 6509 6516 6407 +6513 6514 6509 6420 +6512 6515 6508 6481 +6515 6512 6521 6422 +6514 6513 6520 6483 +6517 6518 6511 7148 +6516 6519 6510 7545 +6519 6516 6523 7150 +6518 6517 6522 7547 +6521 6522 6515 8968 +6520 6523 6514 9145 +6523 6520 6519 8970 +6522 6521 6518 9147 +6525 6526 6528 6540 +6524 6527 6529 6233 +6527 6524 6532 6542 +6526 6525 6533 6235 +6529 6530 6524 6548 +6528 6531 6525 6293 +6531 6528 6536 6550 +6530 6529 6537 6295 +6533 6534 6526 6580 +6532 6535 6527 6373 +6535 6532 6538 6582 +6534 6533 6539 6375 +6537 6538 6530 6740 +6536 6539 6531 6653 +6539 6536 6534 6742 +6538 6537 6535 6655 +6541 6542 6544 6524 +6540 6543 6545 3177 +6543 6540 6546 6526 +6542 6541 6547 3179 +6545 -1 6540 6552 +6544 -1 6541 4091 +6547 -1 6542 6584 +6546 -1 6543 3131 +6549 6550 6552 6528 +6548 6551 6553 6557 +6551 6548 6554 6530 +6550 6549 6555 6559 +6553 -1 6548 6544 +6552 -1 6549 6573 +6555 -1 6550 6744 +6554 -1 6551 6785 +6557 6558 6561 6292 +6556 6559 6560 6549 +6559 6556 6565 6294 +6558 6557 6564 6551 +6561 6562 6557 6574 +6560 6563 6556 6277 +6563 6560 6569 6576 +6562 6561 6568 6279 +6565 6566 6559 6780 +6564 6567 6558 6621 +6567 6564 6571 6782 +6566 6565 6570 6623 +6569 6570 6563 6936 +6568 6571 6562 6915 +6571 6568 6567 6938 +6570 6569 6566 6917 +6573 -1 6575 4090 +6572 -1 6574 6553 +6575 6576 6573 6560 +6574 6577 6572 4073 +6577 6574 6579 6562 +6576 6575 6578 4075 +6579 -1 6577 5978 +6578 -1 6576 6913 +6581 6582 6584 6532 +6580 6583 6585 6589 +6583 6580 6586 6534 +6582 6581 6587 6591 +6585 -1 6580 6546 +6584 -1 6581 6605 +6587 -1 6582 6746 +6586 -1 6583 6897 +6589 6590 6593 6372 +6588 6591 6592 6581 +6591 6588 6597 6374 +6590 6589 6596 6583 +6593 6594 6589 6606 +6592 6595 6588 6357 +6595 6592 6601 6608 +6594 6593 6600 6359 +6597 6598 6591 6892 +6596 6599 6590 6805 +6599 6596 6603 6894 +6598 6597 6602 6807 +6601 6602 6595 7252 +6600 6603 6594 7215 +6603 6600 6599 7254 +6602 6601 6598 7217 +6605 -1 6607 3130 +6604 -1 6606 6585 +6607 6608 6605 6592 +6606 6609 6604 3041 +6609 6606 6611 6594 +6608 6607 6610 3043 +6611 -1 6609 3066 +6610 -1 6608 7213 +6613 6614 6616 6628 +6612 6615 6617 6297 +6615 6612 6620 6630 +6614 6613 6621 6299 +6617 6618 6612 6692 +6616 6619 6613 6309 +6619 6616 6626 6694 +6618 6617 6627 6311 +6621 6622 6614 6764 +6620 6623 6615 6565 +6623 6620 6624 6766 +6622 6621 6625 6567 +6625 6626 6622 6964 +6624 6627 6623 6945 +6627 6624 6618 6966 +6626 6625 6619 6947 +6629 6630 6632 6612 +6628 6631 6633 6645 +6631 6628 6636 6614 +6630 6629 6637 6647 +6633 6634 6628 6696 +6632 6635 6629 6681 +6635 6632 6642 6698 +6634 6633 6643 6683 +6637 6638 6630 6768 +6636 6639 6631 6753 +6639 6636 6640 6770 +6638 6637 6641 6755 +6641 6642 6638 11300 +6640 6643 6639 11357 +6643 6640 6634 11302 +6642 6641 6635 11359 +6645 6646 6649 6296 +6644 6647 6648 6629 +6647 6644 6653 6298 +6646 6645 6652 6631 +6649 6650 6645 6676 +6648 6651 6644 6217 +6651 6648 6657 6678 +6650 6649 6656 6219 +6653 6654 6647 6748 +6652 6655 6646 6537 +6655 6652 6659 6750 +6654 6653 6658 6539 +6657 6658 6651 6376 +6656 6659 6650 6813 +6659 6656 6655 6378 +6658 6657 6654 6815 +6661 6662 6664 6216 +6660 6663 6665 6677 +6663 6660 6668 6218 +6662 6661 6669 6679 +6665 6666 6660 6248 +6664 6667 6661 6725 +6667 6664 6672 6250 +6666 6665 6673 6727 +6669 6670 6662 6328 +6668 6671 6663 6861 +6671 6668 6674 6330 +6670 6669 6675 6863 +6673 6674 6666 6408 +6672 6675 6667 7157 +6675 6672 6670 6410 +6674 6673 6671 7159 +6677 6678 6681 6648 +6676 6679 6680 6661 +6679 6676 6685 6650 +6678 6677 6684 6663 +6681 6682 6677 6728 +6680 6683 6676 6633 +6683 6680 6689 6730 +6682 6681 6688 6635 +6685 6686 6679 6864 +6684 6687 6678 6817 +6687 6684 6691 6866 +6686 6685 6690 6819 +6689 6690 6683 11364 +6688 6691 6682 11501 +6691 6688 6687 11366 +6690 6689 6686 11503 +6693 6694 6696 6616 +6692 6695 6697 6709 +6695 6692 6700 6618 +6694 6693 6701 6711 +6697 6698 6692 6632 +6696 6699 6693 6729 +6699 6696 6706 6634 +6698 6697 6707 6731 +6701 6702 6694 6972 +6700 6703 6695 7073 +6703 6700 6704 6974 +6702 6701 6705 7075 +6705 6706 6702 11304 +6704 6707 6703 11445 +6707 6704 6698 11306 +6706 6705 6699 11447 +6709 6710 6713 6308 +6708 6711 6712 6693 +6711 6708 6717 6310 +6710 6709 6716 6695 +6713 6714 6709 6724 +6712 6715 6708 6249 +6715 6712 6721 6726 +6714 6713 6720 6251 +6717 6718 6711 7068 +6716 6719 6710 7009 +6719 6716 6723 7070 +6718 6717 6722 7011 +6721 6722 6715 6456 +6720 6723 6714 7109 +6723 6720 6719 6458 +6722 6721 6718 7111 +6725 6726 6729 6712 +6724 6727 6728 6665 +6727 6724 6733 6714 +6726 6725 6732 6667 +6729 6730 6725 6680 +6728 6731 6724 6697 +6731 6728 6737 6682 +6730 6729 6736 6699 +6733 6734 6727 7160 +6732 6735 6726 7113 +6735 6732 6739 7162 +6734 6733 6738 7115 +6737 6738 6731 11452 +6736 6739 6730 11505 +6739 6736 6735 11454 +6738 6737 6734 11507 +6741 6742 6744 6536 +6740 6743 6745 6749 +6743 6740 6746 6538 +6742 6741 6747 6751 +6745 -1 6740 6554 +6744 -1 6741 6789 +6747 -1 6742 6586 +6746 -1 6743 6901 +6749 6750 6753 6652 +6748 6751 6752 6741 +6751 6748 6757 6654 +6750 6749 6756 6743 +6753 6754 6749 6790 +6752 6755 6748 6637 +6755 6752 6761 6792 +6754 6753 6760 6639 +6757 6758 6751 6902 +6756 6759 6750 6821 +6759 6756 6763 6904 +6758 6757 6762 6823 +6761 6762 6755 11352 +6760 6763 6754 11331 +6763 6760 6759 11354 +6762 6761 6758 11333 +6765 6766 6768 6620 +6764 6767 6769 6781 +6767 6764 6772 6622 +6766 6765 6773 6783 +6769 6770 6764 6636 +6768 6771 6765 6791 +6771 6768 6778 6638 +6770 6769 6779 6793 +6773 6774 6766 6968 +6772 6775 6767 6959 +6775 6772 6776 6970 +6774 6773 6777 6961 +6777 6778 6774 11292 +6776 6779 6775 11275 +6779 6776 6770 11294 +6778 6777 6771 11277 +6781 6782 6785 6564 +6780 6783 6784 6765 +6783 6780 6787 6566 +6782 6781 6786 6767 +6785 -1 6781 6788 +6784 -1 6780 6555 +6787 -1 6783 6956 +6786 -1 6782 6919 +6789 -1 6791 6784 +6788 -1 6790 6745 +6791 6792 6789 6752 +6790 6793 6788 6769 +6793 6790 6795 6754 +6792 6791 6794 6771 +6795 -1 6793 11278 +6794 -1 6792 11329 +6797 6798 6800 6812 +6796 6799 6801 6377 +6799 6796 6804 6814 +6798 6797 6805 6379 +6801 6802 6796 6828 +6800 6803 6797 6389 +6803 6800 6810 6830 +6802 6801 6811 6391 +6805 6806 6798 6876 +6804 6807 6799 6597 +6807 6804 6808 6878 +6806 6805 6809 6599 +6809 6810 6806 7348 +6808 6811 6807 7261 +6811 6808 6802 7350 +6810 6809 6803 7263 +6813 6814 6816 6796 +6812 6815 6817 6657 +6815 6812 6820 6798 +6814 6813 6821 6659 +6817 6818 6812 6832 +6816 6819 6813 6685 +6819 6816 6826 6834 +6818 6817 6827 6687 +6821 6822 6814 6880 +6820 6823 6815 6757 +6823 6820 6824 6882 +6822 6821 6825 6759 +6825 6826 6822 11380 +6824 6827 6823 11361 +6827 6824 6818 11382 +6826 6825 6819 11363 +6829 6830 6832 6800 +6828 6831 6833 6845 +6831 6828 6836 6802 +6830 6829 6837 6847 +6833 6834 6828 6816 +6832 6835 6829 6865 +6835 6832 6840 6818 +6834 6833 6841 6867 +6837 6838 6830 7356 +6836 6839 6831 7513 +6839 6836 6842 7358 +6838 6837 6843 7515 +6841 6842 6834 11388 +6840 6843 6835 11545 +6843 6840 6838 11390 +6842 6841 6839 11547 +6845 6846 6849 6388 +6844 6847 6848 6829 +6847 6844 6853 6390 +6846 6845 6852 6831 +6849 6850 6845 6860 +6848 6851 6844 6329 +6851 6848 6857 6862 +6850 6849 6856 6331 +6853 6854 6847 7508 +6852 6855 6846 7409 +6855 6852 6859 7510 +6854 6853 6858 7411 +6857 6858 6851 6504 +6856 6859 6850 7557 +6859 6856 6855 6506 +6858 6857 6854 7559 +6861 6862 6865 6848 +6860 6863 6864 6669 +6863 6860 6869 6850 +6862 6861 6868 6671 +6865 6866 6861 6684 +6864 6867 6860 6833 +6867 6864 6873 6686 +6866 6865 6872 6835 +6869 6870 6863 7164 +6868 6871 6862 7561 +6871 6868 6875 7166 +6870 6869 6874 7563 +6873 6874 6867 11540 +6872 6875 6866 11509 +6875 6872 6871 11542 +6874 6873 6870 11511 +6877 6878 6880 6804 +6876 6879 6881 6893 +6879 6876 6884 6806 +6878 6877 6885 6895 +6881 6882 6876 6820 +6880 6883 6877 6903 +6883 6880 6888 6822 +6882 6881 6889 6905 +6885 6886 6878 7352 +6884 6887 6879 7343 +6887 6884 6890 7354 +6886 6885 6891 7345 +6889 6890 6882 11384 +6888 6891 6883 11375 +6891 6888 6886 11386 +6890 6889 6887 11377 +6893 6894 6897 6596 +6892 6895 6896 6877 +6895 6892 6899 6598 +6894 6893 6898 6879 +6897 -1 6893 6900 +6896 -1 6892 6587 +6899 -1 6895 7340 +6898 -1 6894 7219 +6901 -1 6903 6896 +6900 -1 6902 6747 +6903 6904 6901 6756 +6902 6905 6900 6881 +6905 6902 6907 6758 +6904 6903 6906 6883 +6907 -1 6905 11372 +6906 -1 6904 11335 +6909 -1 6910 6912 +6908 -1 6911 5979 +6911 -1 6908 6920 +6910 -1 6909 6011 +6913 -1 6914 6908 +6912 -1 6915 6579 +6915 6916 6912 6922 +6914 6917 6913 6569 +6917 6914 6918 6924 +6916 6915 6919 6571 +6919 -1 6916 6952 +6918 -1 6917 6787 +6921 -1 6922 6910 +6920 -1 6923 6929 +6923 6924 6920 6914 +6922 6925 6921 6937 +6925 6922 6926 6916 +6924 6923 6927 6939 +6927 -1 6924 6954 +6926 -1 6925 6985 +6929 -1 6931 6010 +6928 -1 6930 6921 +6931 6932 6929 6940 +6930 6933 6928 5993 +6933 6930 6935 6942 +6932 6931 6934 5995 +6935 -1 6933 6058 +6934 -1 6932 7025 +6937 6938 6941 6568 +6936 6939 6940 6923 +6939 6936 6945 6570 +6938 6937 6944 6925 +6941 6942 6937 6930 +6940 6943 6936 6281 +6943 6940 6949 6932 +6942 6941 6948 6283 +6945 6946 6939 6980 +6944 6947 6938 6625 +6947 6944 6951 6982 +6946 6945 6950 6627 +6949 6950 6943 6312 +6948 6951 6942 7021 +6951 6948 6947 6314 +6950 6949 6946 7023 +6953 -1 6954 6918 +6952 -1 6955 6957 +6955 -1 6952 6926 +6954 -1 6953 6989 +6957 -1 6959 6786 +6956 -1 6958 6953 +6959 6960 6957 6990 +6958 6961 6956 6773 +6961 6958 6963 6992 +6960 6959 6962 6775 +6963 -1 6961 11272 +6962 -1 6960 11265 +6965 6966 6968 6624 +6964 6967 6969 6981 +6967 6964 6972 6626 +6966 6965 6973 6983 +6969 6970 6964 6772 +6968 6971 6965 6991 +6971 6968 6976 6774 +6970 6969 6977 6993 +6973 6974 6966 6700 +6972 6975 6967 7087 +6975 6972 6978 6702 +6974 6973 6979 7089 +6977 6978 6970 11296 +6976 6979 6971 11287 +6979 6976 6974 11298 +6978 6977 6975 11289 +6981 6982 6985 6944 +6980 6983 6984 6965 +6983 6980 6987 6946 +6982 6981 6986 6967 +6985 -1 6981 6988 +6984 -1 6980 6927 +6987 -1 6983 7084 +6986 -1 6982 7027 +6989 -1 6991 6984 +6988 -1 6990 6955 +6991 6992 6989 6958 +6990 6993 6988 6969 +6993 6990 6995 6960 +6992 6991 6994 6971 +6995 -1 6993 11284 +6994 -1 6992 11267 +6997 6998 7000 7012 +6996 6999 7001 6265 +6999 6996 7004 7014 +6998 6997 7005 6267 +7001 7002 6996 7020 +7000 7003 6997 6313 +7003 7000 7008 7022 +7002 7001 7009 6315 +7005 7006 6998 7028 +7004 7007 6999 6453 +7007 7004 7010 7030 +7006 7005 7011 6455 +7009 7010 7002 7060 +7008 7011 7003 6717 +7011 7008 7006 7062 +7010 7009 7007 6719 +7013 7014 7016 6996 +7012 7015 7017 6073 +7015 7012 7018 6998 +7014 7013 7019 6075 +7017 -1 7012 7024 +7016 -1 7013 6059 +7019 -1 7014 7032 +7018 -1 7015 6163 +7021 7022 7024 7000 +7020 7023 7025 6949 +7023 7020 7026 7002 +7022 7021 7027 6951 +7025 -1 7020 7016 +7024 -1 7021 6935 +7027 -1 7022 7064 +7026 -1 7023 6987 +7029 7030 7032 7004 +7028 7031 7033 7037 +7031 7028 7034 7006 +7030 7029 7035 7039 +7033 -1 7028 7018 +7032 -1 7029 7053 +7035 -1 7030 7066 +7034 -1 7031 7193 +7037 7038 7041 6452 +7036 7039 7040 7029 +7039 7036 7045 6454 +7038 7037 7044 7031 +7041 7042 7037 7054 +7040 7043 7036 6437 +7043 7040 7049 7056 +7042 7041 7048 6439 +7045 7046 7039 7188 +7044 7047 7038 7101 +7047 7044 7051 7190 +7046 7045 7050 7103 +7049 7050 7043 9192 +7048 7051 7042 10295 +7051 7048 7047 9194 +7050 7049 7046 10297 +7053 -1 7055 6162 +7052 -1 7054 7033 +7055 7056 7053 7040 +7054 7057 7052 6149 +7057 7054 7059 7042 +7056 7055 7058 6151 +7059 -1 7057 10278 +7058 -1 7056 10293 +7061 7062 7064 7008 +7060 7063 7065 7069 +7063 7060 7066 7010 +7062 7061 7067 7071 +7065 -1 7060 7026 +7064 -1 7061 7085 +7067 -1 7062 7034 +7066 -1 7063 7197 +7069 7070 7073 6716 +7068 7071 7072 7061 +7071 7068 7077 6718 +7070 7069 7076 7063 +7073 7074 7069 7086 +7072 7075 7068 6701 +7075 7072 7081 7088 +7074 7073 7080 6703 +7077 7078 7071 7198 +7076 7079 7070 7117 +7079 7076 7083 7200 +7078 7077 7082 7119 +7081 7082 7075 11440 +7080 7083 7074 11419 +7083 7080 7079 11442 +7082 7081 7078 11421 +7085 -1 7087 6986 +7084 -1 7086 7065 +7087 7088 7085 7072 +7086 7089 7084 6973 +7089 7086 7091 7074 +7088 7087 7090 6975 +7091 -1 7089 11290 +7090 -1 7088 11417 +7093 7094 7096 7108 +7092 7095 7097 6457 +7095 7092 7100 7110 +7094 7093 7101 6459 +7097 7098 7092 7124 +7096 7099 7093 6469 +7099 7096 7104 7126 +7098 7097 7105 6471 +7101 7102 7094 7172 +7100 7103 7095 7045 +7103 7100 7106 7174 +7102 7101 7107 7047 +7105 7106 7098 9236 +7104 7107 7099 9189 +7107 7104 7102 9238 +7106 7105 7103 9191 +7109 7110 7112 7092 +7108 7111 7113 6721 +7111 7108 7116 7094 +7110 7109 7117 6723 +7113 7114 7108 7128 +7112 7115 7109 6733 +7115 7112 7122 7130 +7114 7113 7123 6735 +7117 7118 7110 7176 +7116 7119 7111 7077 +7119 7116 7120 7178 +7118 7117 7121 7079 +7121 7122 7118 11468 +7120 7123 7119 11449 +7123 7120 7114 11470 +7122 7121 7115 11451 +7125 7126 7128 7096 +7124 7127 7129 7141 +7127 7124 7132 7098 +7126 7125 7133 7143 +7129 7130 7124 7112 +7128 7131 7125 7161 +7131 7128 7136 7114 +7130 7129 7137 7163 +7133 7134 7126 9240 +7132 7135 7127 9221 +7135 7132 7138 9242 +7134 7133 7139 9223 +7137 7138 7130 11476 +7136 7139 7131 11577 +7139 7136 7134 11478 +7138 7137 7135 11579 +7141 7142 7145 6468 +7140 7143 7144 7125 +7143 7140 7155 6470 +7142 7141 7154 7127 +7145 7146 7141 7156 +7144 7147 7140 6409 +7147 7144 7149 7158 +7146 7145 7148 6411 +7149 7150 7147 6516 +7148 7151 7146 7573 +7151 7148 7153 6518 +7150 7149 7152 7575 +7153 7154 7151 9212 +7152 7155 7150 9153 +7155 7152 7143 9214 +7154 7153 7142 9155 +7157 7158 7161 7144 +7156 7159 7160 6673 +7159 7156 7165 7146 +7158 7157 7164 6675 +7161 7162 7157 6732 +7160 7163 7156 7129 +7163 7160 7169 6734 +7162 7161 7168 7131 +7165 7166 7159 6868 +7164 7167 7158 7577 +7167 7164 7171 6870 +7166 7165 7170 7579 +7169 7170 7163 11572 +7168 7171 7162 11513 +7171 7168 7167 11574 +7170 7169 7166 11515 +7173 7174 7176 7100 +7172 7175 7177 7189 +7175 7172 7180 7102 +7174 7173 7181 7191 +7177 7178 7172 7116 +7176 7179 7173 7199 +7179 7176 7184 7118 +7178 7177 7185 7201 +7181 7182 7174 9244 +7180 7183 7175 10315 +7183 7180 7186 9246 +7182 7181 7187 10317 +7185 7186 7178 11472 +7184 7187 7179 11463 +7187 7184 7182 11474 +7186 7185 7183 11465 +7189 7190 7193 7044 +7188 7191 7192 7173 +7191 7188 7195 7046 +7190 7189 7194 7175 +7193 -1 7189 7196 +7192 -1 7188 7035 +7195 -1 7191 10312 +7194 -1 7190 10299 +7197 -1 7199 7192 +7196 -1 7198 7067 +7199 7200 7197 7076 +7198 7201 7196 7177 +7201 7198 7203 7078 +7200 7199 7202 7179 +7203 -1 7201 11460 +7202 -1 7200 11423 +7205 -1 7206 7212 +7204 -1 7207 3067 +7207 7208 7204 7220 +7206 7209 7205 3113 +7209 7206 7210 7222 +7208 7207 7211 3115 +7211 -1 7208 7268 +7210 -1 7209 3515 +7213 -1 7214 7204 +7212 -1 7215 6611 +7215 7216 7212 7224 +7214 7217 7213 6601 +7217 7214 7218 7226 +7216 7215 7219 6603 +7219 -1 7216 7332 +7218 -1 7217 6899 +7221 7222 7224 7206 +7220 7223 7225 7237 +7223 7220 7228 7208 +7222 7221 7229 7239 +7225 7226 7220 7214 +7224 7227 7221 7253 +7227 7224 7232 7216 +7226 7225 7233 7255 +7229 7230 7222 7270 +7228 7231 7223 7305 +7231 7228 7234 7272 +7230 7229 7235 7307 +7233 7234 7226 7334 +7232 7235 7227 7369 +7235 7232 7230 7336 +7234 7233 7231 7371 +7237 7238 7241 3112 +7236 7239 7240 7221 +7239 7236 7245 3114 +7238 7237 7244 7223 +7241 7242 7237 7256 +7240 7243 7236 3081 +7243 7240 7249 7258 +7242 7241 7248 3083 +7245 7246 7239 7300 +7244 7247 7238 3481 +7247 7244 7251 7302 +7246 7245 7250 3483 +7249 7250 7243 3400 +7248 7251 7242 7433 +7251 7248 7247 3402 +7250 7249 7246 7435 +7253 7254 7257 6600 +7252 7255 7256 7225 +7255 7252 7261 6602 +7254 7253 7260 7227 +7257 7258 7253 7240 +7256 7259 7252 6361 +7259 7256 7265 7242 +7258 7257 7264 6363 +7261 7262 7255 7364 +7260 7263 7254 6809 +7263 7260 7267 7366 +7262 7261 7266 6811 +7265 7266 7259 6392 +7264 7267 7258 7429 +7267 7264 7263 6394 +7266 7265 7262 7431 +7269 -1 7270 7210 +7268 -1 7271 7277 +7271 7272 7268 7228 +7270 7273 7269 7317 +7273 7270 7274 7230 +7272 7271 7275 7319 +7275 -1 7272 7338 +7274 -1 7273 7785 +7277 -1 7279 3514 +7276 -1 7278 7269 +7279 7280 7277 7320 +7278 7281 7276 3497 +7281 7278 7283 7322 +7280 7279 7282 3499 +7283 -1 7281 5314 +7282 -1 7280 9889 +7285 7286 7288 3480 +7284 7287 7289 7301 +7287 7284 7292 3482 +7286 7285 7293 7303 +7289 7290 7284 3496 +7288 7291 7285 7321 +7291 7288 7298 3498 +7290 7289 7299 7323 +7293 7294 7286 3528 +7292 7295 7287 7673 +7295 7292 7296 3530 +7294 7293 7297 7675 +7297 7298 7294 5328 +7296 7299 7295 9385 +7299 7296 7290 5330 +7298 7297 7291 9387 +7301 7302 7305 7244 +7300 7303 7304 7285 +7303 7300 7309 7246 +7302 7301 7308 7287 +7305 7306 7301 7316 +7304 7307 7300 7229 +7307 7304 7313 7318 +7306 7305 7312 7231 +7309 7310 7303 7668 +7308 7311 7302 7441 +7311 7308 7315 7670 +7310 7309 7314 7443 +7313 7314 7307 7376 +7312 7315 7306 7733 +7315 7312 7311 7378 +7314 7313 7310 7735 +7317 7318 7321 7304 +7316 7319 7320 7271 +7319 7316 7325 7306 +7318 7317 7324 7273 +7321 7322 7317 7278 +7320 7323 7316 7289 +7323 7320 7329 7280 +7322 7321 7328 7291 +7325 7326 7319 7780 +7324 7327 7318 7737 +7327 7324 7331 7782 +7326 7325 7330 7739 +7329 7330 7323 9392 +7328 7331 7322 9885 +7331 7328 7327 9394 +7330 7329 7326 9887 +7333 -1 7334 7218 +7332 -1 7335 7341 +7335 7336 7332 7232 +7334 7337 7333 7381 +7337 7334 7338 7234 +7336 7335 7339 7383 +7339 -1 7336 7274 +7338 -1 7337 7789 +7341 -1 7343 6898 +7340 -1 7342 7333 +7343 7344 7341 7384 +7342 7345 7340 6885 +7345 7342 7347 7386 +7344 7343 7346 6887 +7347 -1 7345 11378 +7346 -1 7344 11633 +7349 7350 7352 6808 +7348 7351 7353 7365 +7351 7348 7356 6810 +7350 7349 7357 7367 +7353 7354 7348 6884 +7352 7355 7349 7385 +7355 7352 7360 6886 +7354 7353 7361 7387 +7357 7358 7350 6836 +7356 7359 7351 7529 +7359 7356 7362 6838 +7358 7357 7363 7531 +7361 7362 7354 11392 +7360 7363 7355 11661 +7363 7360 7358 11394 +7362 7361 7359 11663 +7365 7366 7369 7260 +7364 7367 7368 7349 +7367 7364 7373 7262 +7366 7365 7372 7351 +7369 7370 7365 7380 +7368 7371 7364 7233 +7371 7368 7377 7382 +7370 7369 7376 7235 +7373 7374 7367 7524 +7372 7375 7366 7437 +7375 7372 7379 7526 +7374 7373 7378 7439 +7377 7378 7371 7312 +7376 7379 7370 7749 +7379 7376 7375 7314 +7378 7377 7374 7751 +7381 7382 7385 7368 +7380 7383 7384 7335 +7383 7380 7389 7370 +7382 7381 7388 7337 +7385 7386 7381 7342 +7384 7387 7380 7353 +7387 7384 7393 7344 +7386 7385 7392 7355 +7389 7390 7383 7790 +7388 7391 7382 7753 +7391 7388 7395 7792 +7390 7389 7394 7755 +7393 7394 7387 11656 +7392 7395 7386 11635 +7395 7392 7391 11658 +7394 7393 7390 11637 +7397 7398 7400 7412 +7396 7399 7401 6345 +7399 7396 7404 7414 +7398 7397 7405 6347 +7401 7402 7396 7428 +7400 7403 7397 6393 +7403 7400 7408 7430 +7402 7401 7409 6395 +7405 7406 7398 7444 +7404 7407 7399 6501 +7407 7404 7410 7446 +7406 7405 7411 6503 +7409 7410 7402 7492 +7408 7411 7403 6853 +7411 7408 7406 7494 +7410 7409 7407 6855 +7413 7414 7416 7396 +7412 7415 7417 3449 +7415 7412 7420 7398 +7414 7413 7421 3451 +7417 7418 7412 7432 +7416 7419 7413 3401 +7419 7416 7424 7434 +7418 7417 7425 3403 +7421 7422 7414 7448 +7420 7423 7415 4153 +7423 7420 7426 7450 +7422 7421 7427 4155 +7425 7426 7418 7636 +7424 7427 7419 3561 +7427 7424 7422 7638 +7426 7425 7423 3563 +7429 7430 7432 7400 +7428 7431 7433 7265 +7431 7428 7436 7402 +7430 7429 7437 7267 +7433 7434 7428 7416 +7432 7435 7429 7249 +7435 7432 7440 7418 +7434 7433 7441 7251 +7437 7438 7430 7496 +7436 7439 7431 7373 +7439 7436 7442 7498 +7438 7437 7443 7375 +7441 7442 7434 7640 +7440 7443 7435 7309 +7443 7440 7438 7642 +7442 7441 7439 7311 +7445 7446 7448 7404 +7444 7447 7449 7461 +7447 7444 7452 7406 +7446 7445 7453 7463 +7449 7450 7444 7420 +7448 7451 7445 7477 +7451 7448 7456 7422 +7450 7449 7457 7479 +7453 7454 7446 7500 +7452 7455 7447 7609 +7455 7452 7458 7502 +7454 7453 7459 7611 +7457 7458 7450 7644 +7456 7459 7451 7705 +7459 7456 7454 7646 +7458 7457 7455 7707 +7461 7462 7465 6500 +7460 7463 7464 7445 +7463 7460 7469 6502 +7462 7461 7468 7447 +7465 7466 7461 7480 +7464 7467 7460 6485 +7467 7464 7473 7482 +7466 7465 7472 6487 +7469 7470 7463 7604 +7468 7471 7462 7549 +7471 7468 7475 7606 +7470 7469 7474 7551 +7473 7474 7467 8956 +7472 7475 7466 8929 +7475 7472 7471 8958 +7474 7473 7470 8931 +7477 7478 7481 4152 +7476 7479 7480 7449 +7479 7476 7485 4154 +7478 7477 7484 7451 +7481 7482 7477 7464 +7480 7483 7476 4133 +7483 7480 7489 7466 +7482 7481 7488 4135 +7485 7486 7479 7700 +7484 7487 7478 5805 +7487 7484 7491 7702 +7486 7485 7490 5807 +7489 7490 7483 8016 +7488 7491 7482 8925 +7491 7488 7487 8018 +7490 7489 7486 8927 +7493 7494 7496 7408 +7492 7495 7497 7509 +7495 7492 7500 7410 +7494 7493 7501 7511 +7497 7498 7492 7436 +7496 7499 7493 7525 +7499 7496 7504 7438 +7498 7497 7505 7527 +7501 7502 7494 7452 +7500 7503 7495 7621 +7503 7500 7506 7454 +7502 7501 7507 7623 +7505 7506 7498 7648 +7504 7507 7499 7829 +7507 7504 7502 7650 +7506 7505 7503 7831 +7509 7510 7513 6852 +7508 7511 7512 7493 +7511 7508 7517 6854 +7510 7509 7516 7495 +7513 7514 7509 7528 +7512 7515 7508 6837 +7515 7512 7521 7530 +7514 7513 7520 6839 +7517 7518 7511 7624 +7516 7519 7510 7565 +7519 7516 7523 7626 +7518 7517 7522 7567 +7521 7522 7515 11552 +7520 7523 7514 11737 +7523 7520 7519 11554 +7522 7521 7518 11739 +7525 7526 7529 7372 +7524 7527 7528 7497 +7527 7524 7533 7374 +7526 7525 7532 7499 +7529 7530 7525 7512 +7528 7531 7524 7357 +7531 7528 7537 7514 +7530 7529 7536 7359 +7533 7534 7527 7832 +7532 7535 7526 7757 +7535 7532 7539 7834 +7534 7533 7538 7759 +7537 7538 7531 11668 +7536 7539 7530 11733 +7539 7536 7535 11670 +7538 7537 7534 11735 +7541 7542 7544 7556 +7540 7543 7545 6505 +7543 7540 7548 7558 +7542 7541 7549 6507 +7545 7546 7540 7572 +7544 7547 7541 6517 +7547 7544 7554 7574 +7546 7545 7555 6519 +7549 7550 7542 7588 +7548 7551 7543 7469 +7551 7548 7552 7590 +7550 7549 7553 7471 +7553 7554 7550 9028 +7552 7555 7551 8965 +7555 7552 7546 9030 +7554 7553 7547 8967 +7557 7558 7560 7540 +7556 7559 7561 6857 +7559 7556 7564 7542 +7558 7557 7565 6859 +7561 7562 7556 7576 +7560 7563 7557 6869 +7563 7560 7568 7578 +7562 7561 7569 6871 +7565 7566 7558 7592 +7564 7567 7559 7517 +7567 7564 7570 7594 +7566 7565 7571 7519 +7569 7570 7562 11596 +7568 7571 7563 11549 +7571 7568 7566 11598 +7570 7569 7567 11551 +7573 7574 7576 7544 +7572 7575 7577 7149 +7575 7572 7580 7546 +7574 7573 7581 7151 +7577 7578 7572 7560 +7576 7579 7573 7165 +7579 7576 7584 7562 +7578 7577 7585 7167 +7581 7582 7574 9036 +7580 7583 7575 9217 +7583 7580 7586 9038 +7582 7581 7587 9219 +7585 7586 7578 11600 +7584 7587 7579 11581 +7587 7584 7582 11602 +7586 7585 7583 11583 +7589 7590 7592 7548 +7588 7591 7593 7605 +7591 7588 7596 7550 +7590 7589 7597 7607 +7593 7594 7588 7564 +7592 7595 7589 7625 +7595 7592 7600 7566 +7594 7593 7601 7627 +7597 7598 7590 9032 +7596 7599 7591 9017 +7599 7596 7602 9034 +7598 7597 7603 9019 +7601 7602 7594 11604 +7600 7603 7595 11801 +7603 7600 7598 11606 +7602 7601 7599 11803 +7605 7606 7609 7468 +7604 7607 7608 7589 +7607 7604 7613 7470 +7606 7605 7612 7591 +7609 7610 7605 7620 +7608 7611 7604 7453 +7611 7608 7619 7622 +7610 7609 7618 7455 +7613 7614 7607 9012 +7612 7615 7606 8937 +7615 7612 7617 9014 +7614 7613 7616 8939 +7617 7618 7615 7712 +7616 7619 7614 9077 +7619 7616 7611 7714 +7618 7617 7610 9079 +7621 7622 7625 7608 +7620 7623 7624 7501 +7623 7620 7629 7610 +7622 7621 7628 7503 +7625 7626 7621 7516 +7624 7627 7620 7593 +7627 7624 7633 7518 +7626 7625 7632 7595 +7629 7630 7623 7836 +7628 7631 7622 9085 +7631 7628 7635 7838 +7630 7629 7634 9087 +7633 7634 7627 11796 +7632 7635 7626 11745 +7635 7632 7631 11798 +7634 7633 7630 11747 +7637 7638 7640 7424 +7636 7639 7641 7653 +7639 7636 7644 7426 +7638 7637 7645 7655 +7641 7642 7636 7440 +7640 7643 7637 7669 +7643 7640 7648 7442 +7642 7641 7649 7671 +7645 7646 7638 7456 +7644 7647 7639 7717 +7647 7644 7650 7458 +7646 7645 7651 7719 +7649 7650 7642 7504 +7648 7651 7643 7817 +7651 7648 7646 7506 +7650 7649 7647 7819 +7653 7654 7657 3560 +7652 7655 7656 7637 +7655 7652 7661 3562 +7654 7653 7660 7639 +7657 7658 7653 7672 +7656 7659 7652 3529 +7659 7656 7667 7674 +7658 7657 7666 3531 +7661 7662 7655 7720 +7660 7663 7654 5745 +7663 7660 7665 7722 +7662 7661 7664 5747 +7665 7666 7663 5696 +7664 7667 7662 9285 +7667 7664 7659 5698 +7666 7665 7658 9287 +7669 7670 7673 7308 +7668 7671 7672 7641 +7671 7668 7677 7310 +7670 7669 7676 7643 +7673 7674 7669 7656 +7672 7675 7668 7293 +7675 7672 7681 7658 +7674 7673 7680 7295 +7677 7678 7671 7812 +7676 7679 7670 7741 +7679 7676 7683 7814 +7678 7677 7682 7743 +7681 7682 7675 9380 +7680 7683 7674 9293 +7683 7680 7679 9382 +7682 7681 7678 9295 +7685 7686 7688 5804 +7684 7687 7689 7701 +7687 7684 7692 5806 +7686 7685 7693 7703 +7689 7690 7684 5744 +7688 7691 7685 7721 +7691 7688 7696 5746 +7690 7689 7697 7723 +7693 7694 7686 8064 +7692 7695 7687 8993 +7695 7692 7698 8066 +7694 7693 7699 8995 +7697 7698 7690 5760 +7696 7699 7691 9337 +7699 7696 7694 5762 +7698 7697 7695 9339 +7701 7702 7705 7484 +7700 7703 7704 7685 +7703 7700 7709 7486 +7702 7701 7708 7687 +7705 7706 7701 7716 +7704 7707 7700 7457 +7707 7704 7715 7718 +7706 7705 7714 7459 +7709 7710 7703 8988 +7708 7711 7702 8933 +7711 7708 7713 8990 +7710 7709 7712 8935 +7713 7714 7711 7616 +7712 7715 7710 9061 +7715 7712 7707 7618 +7714 7713 7706 9063 +7717 7718 7721 7704 +7716 7719 7720 7645 +7719 7716 7725 7706 +7718 7717 7724 7647 +7721 7722 7717 7660 +7720 7723 7716 7689 +7723 7720 7729 7662 +7722 7721 7728 7691 +7725 7726 7719 7820 +7724 7727 7718 9069 +7727 7724 7731 7822 +7726 7725 7730 9071 +7729 7730 7723 9332 +7728 7731 7722 9289 +7731 7728 7727 9334 +7730 7729 7726 9291 +7733 7734 7736 7748 +7732 7735 7737 7313 +7735 7732 7740 7750 +7734 7733 7741 7315 +7737 7738 7732 7764 +7736 7739 7733 7325 +7739 7736 7746 7766 +7738 7737 7747 7327 +7741 7742 7734 7796 +7740 7743 7735 7677 +7743 7740 7744 7798 +7742 7741 7745 7679 +7745 7746 7742 9604 +7744 7747 7743 9389 +7747 7744 7738 9606 +7746 7745 7739 9391 +7749 7750 7752 7732 +7748 7751 7753 7377 +7751 7748 7756 7734 +7750 7749 7757 7379 +7753 7754 7748 7768 +7752 7755 7749 7389 +7755 7752 7760 7770 +7754 7753 7761 7391 +7757 7758 7750 7800 +7756 7759 7751 7533 +7759 7756 7762 7802 +7758 7757 7763 7535 +7761 7762 7754 11684 +7760 7763 7755 11665 +7763 7760 7758 11686 +7762 7761 7759 11667 +7765 7766 7768 7736 +7764 7767 7769 7781 +7767 7764 7772 7738 +7766 7765 7773 7783 +7769 7770 7764 7752 +7768 7771 7765 7791 +7771 7768 7776 7754 +7770 7769 7777 7793 +7773 7774 7766 9612 +7772 7775 7767 9951 +7775 7772 7778 9614 +7774 7773 7779 9953 +7777 7778 7770 11688 +7776 7779 7771 11679 +7779 7776 7774 11690 +7778 7777 7775 11681 +7781 7782 7785 7324 +7780 7783 7784 7765 +7783 7780 7787 7326 +7782 7781 7786 7767 +7785 -1 7781 7788 +7784 -1 7780 7275 +7787 -1 7783 9948 +7786 -1 7782 9891 +7789 -1 7791 7784 +7788 -1 7790 7339 +7791 7792 7789 7388 +7790 7793 7788 7769 +7793 7790 7795 7390 +7792 7791 7794 7771 +7795 -1 7793 11676 +7794 -1 7792 11639 +7797 7798 7800 7740 +7796 7799 7801 7813 +7799 7796 7804 7742 +7798 7797 7805 7815 +7801 7802 7796 7756 +7800 7803 7797 7833 +7803 7800 7808 7758 +7802 7801 7809 7835 +7805 7806 7798 9608 +7804 7807 7799 9549 +7807 7804 7810 9610 +7806 7805 7811 9551 +7809 7810 7802 11692 +7808 7811 7803 11769 +7811 7808 7806 11694 +7810 7809 7807 11771 +7813 7814 7817 7676 +7812 7815 7816 7797 +7815 7812 7827 7678 +7814 7813 7826 7799 +7817 7818 7813 7828 +7816 7819 7812 7649 +7819 7816 7821 7830 +7818 7817 7820 7651 +7821 7822 7819 7724 +7820 7823 7818 9125 +7823 7820 7825 7726 +7822 7821 7824 9127 +7825 7826 7823 9540 +7824 7827 7822 9297 +7827 7824 7815 9542 +7826 7825 7814 9299 +7829 7830 7833 7816 +7828 7831 7832 7505 +7831 7828 7837 7818 +7830 7829 7836 7507 +7833 7834 7829 7532 +7832 7835 7828 7801 +7835 7832 7841 7534 +7834 7833 7840 7803 +7837 7838 7831 7628 +7836 7839 7830 9129 +7839 7836 7843 7630 +7838 7837 7842 9131 +7841 7842 7835 11764 +7840 7843 7834 11741 +7843 7840 7839 11766 +7842 7841 7838 11743 +7845 7846 7848 7860 +7844 7847 7849 3593 +7847 7844 7852 7862 +7846 7845 7853 3595 +7849 7850 7844 7884 +7848 7851 7845 3641 +7851 7848 7856 7886 +7850 7849 7857 3643 +7853 7854 7846 7940 +7852 7855 7847 3721 +7855 7852 7858 7942 +7854 7853 7859 3723 +7857 7858 7850 7996 +7856 7859 7851 4169 +7859 7856 7854 7998 +7858 7857 7855 4171 +7861 7862 7864 7844 +7860 7863 7865 7869 +7863 7860 7866 7846 +7862 7861 7867 7871 +7865 -1 7860 7888 +7864 -1 7861 7929 +7867 -1 7862 7944 +7866 -1 7863 7985 +7869 7870 7873 3592 +7868 7871 7872 7861 +7871 7868 7877 3594 +7870 7869 7876 7863 +7873 7874 7869 7924 +7872 7875 7868 2473 +7875 7872 7881 7926 +7874 7873 7880 2475 +7877 7878 7871 7980 +7876 7879 7870 3673 +7879 7876 7883 7982 +7878 7877 7882 3675 +7881 7882 7875 2504 +7880 7883 7874 8085 +7883 7880 7879 2506 +7882 7881 7878 8087 +7885 7886 7888 7848 +7884 7887 7889 7893 +7887 7884 7890 7850 +7886 7885 7891 7895 +7889 -1 7884 7864 +7888 -1 7885 7933 +7891 -1 7886 8000 +7890 -1 7887 8041 +7893 7894 7897 3640 +7892 7895 7896 7885 +7895 7892 7901 3642 +7894 7893 7900 7887 +7897 7898 7893 7934 +7896 7899 7892 3609 +7899 7896 7905 7936 +7898 7897 7904 3611 +7901 7902 7895 8036 +7900 7903 7894 4121 +7903 7900 7907 8038 +7902 7901 7906 4123 +7905 7906 7899 3880 +7904 7907 7898 8261 +7907 7904 7903 3882 +7906 7905 7902 8263 +7909 7910 7912 2472 +7908 7911 7913 7925 +7911 7908 7916 2474 +7910 7909 7917 7927 +7913 7914 7908 3608 +7912 7915 7909 7935 +7915 7912 7920 3610 +7914 7913 7921 7937 +7917 7918 7910 2440 +7916 7919 7911 8119 +7919 7916 7922 2442 +7918 7917 7923 8121 +7921 7922 7914 2456 +7920 7923 7915 8295 +7923 7920 7918 2458 +7922 7921 7919 8297 +7925 7926 7929 7872 +7924 7927 7928 7909 +7927 7924 7931 7874 +7926 7925 7930 7911 +7929 -1 7925 7932 +7928 -1 7924 7865 +7931 -1 7927 8116 +7930 -1 7926 8089 +7933 -1 7935 7928 +7932 -1 7934 7889 +7935 7936 7933 7896 +7934 7937 7932 7913 +7937 7934 7939 7898 +7936 7935 7938 7915 +7939 -1 7937 8292 +7938 -1 7936 8265 +7941 7942 7944 7852 +7940 7943 7945 7949 +7943 7940 7946 7854 +7942 7941 7947 7951 +7945 -1 7940 7866 +7944 -1 7941 7989 +7947 -1 7942 8002 +7946 -1 7943 8073 +7949 7950 7953 3720 +7948 7951 7952 7941 +7951 7948 7957 3722 +7950 7949 7956 7943 +7953 7954 7949 7990 +7952 7955 7948 3689 +7955 7952 7961 7992 +7954 7953 7960 3691 +7957 7958 7951 8068 +7956 7959 7950 5729 +7959 7956 7963 8070 +7958 7957 7962 5731 +7961 7962 7955 5520 +7960 7963 7954 8565 +7963 7960 7959 5522 +7962 7961 7958 8567 +7965 7966 7968 3672 +7964 7967 7969 7981 +7967 7964 7972 3674 +7966 7965 7973 7983 +7969 7970 7964 3688 +7968 7971 7965 7991 +7971 7968 7976 3690 +7970 7969 7977 7993 +7973 7974 7966 3736 +7972 7975 7967 8151 +7975 7972 7978 3738 +7974 7973 7979 8153 +7977 7978 7970 4520 +7976 7979 7971 8599 +7979 7976 7974 4522 +7978 7977 7975 8601 +7981 7982 7985 7876 +7980 7983 7984 7965 +7983 7980 7987 7878 +7982 7981 7986 7967 +7985 -1 7981 7988 +7984 -1 7980 7867 +7987 -1 7983 8148 +7986 -1 7982 8091 +7989 -1 7991 7984 +7988 -1 7990 7945 +7991 7992 7989 7952 +7990 7993 7988 7969 +7993 7990 7995 7954 +7992 7991 7994 7971 +7995 -1 7993 8596 +7994 -1 7992 8569 +7997 7998 8000 7856 +7996 7999 8001 8005 +7999 7996 8002 7858 +7998 7997 8003 8007 +8001 -1 7996 7890 +8000 -1 7997 8045 +8003 -1 7998 7946 +8002 -1 7999 8077 +8005 8006 8009 4168 +8004 8007 8008 7997 +8007 8004 8013 4170 +8006 8005 8012 7999 +8009 8010 8005 8046 +8008 8011 8004 4137 +8011 8008 8017 8048 +8010 8009 8016 4139 +8013 8014 8007 8078 +8012 8015 8006 5809 +8015 8012 8019 8080 +8014 8013 8018 5811 +8017 8018 8011 7488 +8016 8019 8010 8917 +8019 8016 8015 7490 +8018 8017 8014 8919 +8021 8022 8024 4120 +8020 8023 8025 8037 +8023 8020 8028 4122 +8022 8021 8029 8039 +8025 8026 8020 4136 +8024 8027 8021 8047 +8027 8024 8032 4138 +8026 8025 8033 8049 +8029 8030 8022 4184 +8028 8031 8023 8327 +8031 8028 8034 4186 +8030 8029 8035 8329 +8033 8034 8026 6488 +8032 8035 8027 8951 +8035 8032 8030 6490 +8034 8033 8031 8953 +8037 8038 8041 7900 +8036 8039 8040 8021 +8039 8036 8043 7902 +8038 8037 8042 8023 +8041 -1 8037 8044 +8040 -1 8036 7891 +8043 -1 8039 8324 +8042 -1 8038 8267 +8045 -1 8047 8040 +8044 -1 8046 8001 +8047 8048 8045 8008 +8046 8049 8044 8025 +8049 8046 8051 8010 +8048 8047 8050 8027 +8051 -1 8049 8948 +8050 -1 8048 8921 +8053 8054 8056 5728 +8052 8055 8057 8069 +8055 8052 8060 5730 +8054 8053 8061 8071 +8057 8058 8052 5808 +8056 8059 8053 8079 +8059 8056 8064 5810 +8058 8057 8065 8081 +8061 8062 8054 5756 +8060 8063 8055 8631 +8063 8060 8066 5758 +8062 8061 8067 8633 +8065 8066 8058 7692 +8064 8067 8059 8983 +8067 8064 8062 7694 +8066 8065 8063 8985 +8069 8070 8073 7956 +8068 8071 8072 8053 +8071 8068 8075 7958 +8070 8069 8074 8055 +8073 -1 8069 8076 +8072 -1 8068 7947 +8075 -1 8071 8628 +8074 -1 8070 8571 +8077 -1 8079 8072 +8076 -1 8078 8003 +8079 8080 8077 8012 +8078 8081 8076 8057 +8081 8078 8083 8014 +8080 8079 8082 8059 +8083 -1 8081 8980 +8082 -1 8080 8923 +8085 8086 8088 8092 +8084 8087 8089 7881 +8087 8084 8090 8094 +8086 8085 8091 7883 +8089 -1 8084 8108 +8088 -1 8085 7931 +8091 -1 8086 8140 +8090 -1 8087 7987 +8093 8094 8096 8084 +8092 8095 8097 2505 +8095 8092 8100 8086 +8094 8093 8101 2507 +8097 8098 8092 8110 +8096 8099 8093 2393 +8099 8096 8104 8112 +8098 8097 8105 2395 +8101 8102 8094 8142 +8100 8103 8095 2777 +8103 8100 8106 8144 +8102 8101 8107 2779 +8105 8106 8098 8172 +8104 8107 8099 2409 +8107 8104 8102 8174 +8106 8105 8103 2411 +8109 -1 8110 8088 +8108 -1 8111 8117 +8111 8112 8108 8096 +8110 8113 8109 8125 +8113 8110 8114 8098 +8112 8111 8115 8127 +8115 -1 8112 8176 +8114 -1 8113 8217 +8117 -1 8119 7930 +8116 -1 8118 8109 +8119 8120 8117 8128 +8118 8121 8116 7917 +8121 8118 8123 8130 +8120 8119 8122 7919 +8123 -1 8121 8298 +8122 -1 8120 8457 +8125 8126 8129 2392 +8124 8127 8128 8111 +8127 8124 8133 2394 +8126 8125 8132 8113 +8129 8130 8125 8118 +8128 8131 8124 2441 +8131 8128 8137 8120 +8130 8129 8136 2443 +8133 8134 8127 8212 +8132 8135 8126 1353 +8135 8132 8139 8214 +8134 8133 8138 1355 +8137 8138 8131 1384 +8136 8139 8130 8453 +8139 8136 8135 1386 +8138 8137 8134 8455 +8141 -1 8142 8090 +8140 -1 8143 8149 +8143 8144 8140 8100 +8142 8145 8141 8157 +8145 8142 8146 8102 +8144 8143 8147 8159 +8147 -1 8144 8178 +8146 -1 8145 8249 +8149 -1 8151 7986 +8148 -1 8150 8141 +8151 8152 8149 8160 +8150 8153 8148 7973 +8153 8150 8155 8162 +8152 8151 8154 7975 +8155 -1 8153 8602 +8154 -1 8152 8809 +8157 8158 8161 2776 +8156 8159 8160 8143 +8159 8156 8165 2778 +8158 8157 8164 8145 +8161 8162 8157 8150 +8160 8163 8156 3737 +8163 8160 8169 8152 +8162 8161 8168 3739 +8165 8166 8159 8244 +8164 8167 8158 2745 +8167 8164 8171 8246 +8166 8165 8170 2747 +8169 8170 8163 4456 +8168 8171 8162 8805 +8171 8168 8167 4458 +8170 8169 8166 8807 +8173 8174 8176 8104 +8172 8175 8177 8181 +8175 8172 8178 8106 +8174 8173 8179 8183 +8177 -1 8172 8114 +8176 -1 8173 8221 +8179 -1 8174 8146 +8178 -1 8175 8253 +8181 8182 8185 2408 +8180 8183 8184 8173 +8183 8180 8189 2410 +8182 8181 8188 8175 +8185 8186 8181 8222 +8184 8187 8180 2233 +8187 8184 8193 8224 +8186 8185 8192 2235 +8189 8190 8183 8254 +8188 8191 8182 2697 +8191 8188 8195 8256 +8190 8189 8194 2699 +8193 8194 8187 2264 +8192 8195 8186 10037 +8195 8192 8191 2266 +8194 8193 8190 10039 +8197 8198 8200 1352 +8196 8199 8201 8213 +8199 8196 8204 1354 +8198 8197 8205 8215 +8201 8202 8196 2232 +8200 8203 8197 8223 +8203 8200 8208 2234 +8202 8201 8209 8225 +8205 8206 8198 1336 +8204 8207 8199 8495 +8207 8204 8210 1338 +8206 8205 8211 8497 +8209 8210 8202 1400 +8208 8211 8203 10059 +8211 8208 8206 1402 +8210 8209 8207 10061 +8213 8214 8217 8132 +8212 8215 8216 8197 +8215 8212 8219 8134 +8214 8213 8218 8199 +8217 -1 8213 8220 +8216 -1 8212 8115 +8219 -1 8215 8492 +8218 -1 8214 8459 +8221 -1 8223 8216 +8220 -1 8222 8177 +8223 8224 8221 8184 +8222 8225 8220 8201 +8225 8222 8227 8186 +8224 8223 8226 8203 +8227 -1 8225 10056 +8226 -1 8224 10041 +8229 8230 8232 2744 +8228 8231 8233 8245 +8231 8228 8236 2746 +8230 8229 8237 8247 +8233 8234 8228 2696 +8232 8235 8229 8255 +8235 8232 8240 2698 +8234 8233 8241 8257 +8237 8238 8230 4472 +8236 8239 8231 8847 +8239 8236 8242 4474 +8238 8237 8243 8849 +8241 8242 8234 2712 +8240 8243 8235 10079 +8243 8240 8238 2714 +8242 8241 8239 10081 +8245 8246 8249 8164 +8244 8247 8248 8229 +8247 8244 8251 8166 +8246 8245 8250 8231 +8249 -1 8245 8252 +8248 -1 8244 8147 +8251 -1 8247 8844 +8250 -1 8246 8811 +8253 -1 8255 8248 +8252 -1 8254 8179 +8255 8256 8253 8188 +8254 8257 8252 8233 +8257 8254 8259 8190 +8256 8255 8258 8235 +8259 -1 8257 10076 +8258 -1 8256 10043 +8261 8262 8264 8268 +8260 8263 8265 7905 +8263 8260 8266 8270 +8262 8261 8267 7907 +8265 -1 8260 8284 +8264 -1 8261 7939 +8267 -1 8262 8316 +8266 -1 8263 8043 +8269 8270 8272 8260 +8268 8271 8273 3881 +8271 8268 8276 8262 +8270 8269 8277 3883 +8273 8274 8268 8286 +8272 8275 8269 3865 +8275 8272 8280 8288 +8274 8273 8281 3867 +8277 8278 8270 8318 +8276 8279 8271 4217 +8279 8276 8282 8320 +8278 8277 8283 4219 +8281 8282 8274 8348 +8280 8283 8275 3929 +8283 8280 8278 8350 +8282 8281 8279 3931 +8285 -1 8286 8264 +8284 -1 8287 8293 +8287 8288 8284 8272 +8286 8289 8285 8301 +8289 8286 8290 8274 +8288 8287 8291 8303 +8291 -1 8288 8352 +8290 -1 8289 8393 +8293 -1 8295 7938 +8292 -1 8294 8285 +8295 8296 8293 8304 +8294 8297 8292 7921 +8297 8294 8299 8306 +8296 8295 8298 7923 +8299 -1 8297 8122 +8298 -1 8296 8465 +8301 8302 8305 3864 +8300 8303 8304 8287 +8303 8300 8309 3866 +8302 8301 8308 8289 +8305 8306 8301 8294 +8304 8307 8300 2457 +8307 8304 8313 8296 +8306 8305 8312 2459 +8309 8310 8303 8388 +8308 8311 8302 1649 +8311 8308 8315 8390 +8310 8309 8314 1651 +8313 8314 8307 1680 +8312 8315 8306 8461 +8315 8312 8311 1682 +8314 8313 8310 8463 +8317 -1 8318 8266 +8316 -1 8319 8325 +8319 8320 8316 8276 +8318 8321 8317 8333 +8321 8318 8322 8278 +8320 8319 8323 8335 +8323 -1 8320 8354 +8322 -1 8321 8425 +8325 -1 8327 8042 +8324 -1 8326 8317 +8327 8328 8325 8336 +8326 8329 8324 8029 +8329 8326 8331 8338 +8328 8327 8330 8031 +8331 -1 8329 8954 +8330 -1 8328 9161 +8333 8334 8337 4216 +8332 8335 8336 8319 +8335 8332 8341 4218 +8334 8333 8340 8321 +8337 8338 8333 8326 +8336 8339 8332 4185 +8339 8336 8345 8328 +8338 8337 8344 4187 +8341 8342 8335 8420 +8340 8343 8334 6185 +8343 8340 8347 8422 +8342 8341 8346 6187 +8345 8346 8339 6424 +8344 8347 8338 9157 +8347 8344 8343 6426 +8346 8345 8342 9159 +8349 8350 8352 8280 +8348 8351 8353 8357 +8351 8348 8354 8282 +8350 8349 8355 8359 +8353 -1 8348 8290 +8352 -1 8349 8397 +8355 -1 8350 8322 +8354 -1 8351 8429 +8357 8358 8361 3928 +8356 8359 8360 8349 +8359 8356 8365 3930 +8358 8357 8364 8351 +8361 8362 8357 8398 +8360 8363 8356 3897 +8363 8360 8369 8400 +8362 8361 8368 3899 +8365 8366 8359 8430 +8364 8367 8358 6137 +8367 8364 8371 8432 +8366 8365 8370 6139 +8369 8370 8363 6104 +8368 8371 8362 10243 +8371 8368 8367 6106 +8370 8369 8366 10245 +8373 8374 8376 1648 +8372 8375 8377 8389 +8375 8372 8380 1650 +8374 8373 8381 8391 +8377 8378 8372 3896 +8376 8379 8373 8399 +8379 8376 8386 3898 +8378 8377 8387 8401 +8381 8382 8374 1632 +8380 8383 8375 8527 +8383 8380 8384 1634 +8382 8381 8385 8529 +8385 8386 8382 1696 +8384 8387 8383 10235 +8387 8384 8378 1698 +8386 8385 8379 10237 +8389 8390 8393 8308 +8388 8391 8392 8373 +8391 8388 8395 8310 +8390 8389 8394 8375 +8393 -1 8389 8396 +8392 -1 8388 8291 +8395 -1 8391 8524 +8394 -1 8390 8467 +8397 -1 8399 8392 +8396 -1 8398 8353 +8399 8400 8397 8360 +8398 8401 8396 8377 +8401 8398 8403 8362 +8400 8399 8402 8379 +8403 -1 8401 10238 +8402 -1 8400 10241 +8405 8406 8408 6184 +8404 8407 8409 8421 +8407 8404 8412 6186 +8406 8405 8413 8423 +8409 8410 8404 6136 +8408 8411 8405 8431 +8411 8408 8416 6138 +8410 8409 8417 8433 +8413 8414 8406 6440 +8412 8415 8407 9199 +8415 8412 8418 6442 +8414 8413 8419 9201 +8417 8418 8410 6152 +8416 8419 8411 10267 +8419 8416 8414 6154 +8418 8417 8415 10269 +8421 8422 8425 8340 +8420 8423 8424 8405 +8423 8420 8427 8342 +8422 8421 8426 8407 +8425 -1 8421 8428 +8424 -1 8420 8323 +8427 -1 8423 9196 +8426 -1 8422 9163 +8429 -1 8431 8424 +8428 -1 8430 8355 +8431 8432 8429 8364 +8430 8433 8428 8409 +8433 8430 8435 8366 +8432 8431 8434 8411 +8435 -1 8433 10264 +8434 -1 8432 10247 +8437 8438 8440 8452 +8436 8439 8441 1385 +8439 8436 8444 8454 +8438 8437 8445 1387 +8441 8442 8436 8460 +8440 8443 8437 1681 +8443 8440 8448 8462 +8442 8441 8449 1683 +8445 8446 8438 8468 +8444 8447 8439 1201 +8447 8444 8450 8470 +8446 8445 8451 1203 +8449 8450 8442 8500 +8448 8451 8443 1249 +8451 8448 8446 8502 +8450 8449 8447 1251 +8453 8454 8456 8436 +8452 8455 8457 8137 +8455 8452 8458 8438 +8454 8453 8459 8139 +8457 -1 8452 8464 +8456 -1 8453 8123 +8459 -1 8454 8472 +8458 -1 8455 8219 +8461 8462 8464 8440 +8460 8463 8465 8313 +8463 8460 8466 8442 +8462 8461 8467 8315 +8465 -1 8460 8456 +8464 -1 8461 8299 +8467 -1 8462 8504 +8466 -1 8463 8395 +8469 8470 8472 8444 +8468 8471 8473 8477 +8471 8468 8474 8446 +8470 8469 8475 8479 +8473 -1 8468 8458 +8472 -1 8469 8493 +8475 -1 8470 8506 +8474 -1 8471 8553 +8477 8478 8481 1200 +8476 8479 8480 8469 +8479 8476 8485 1202 +8478 8477 8484 8471 +8481 8482 8477 8494 +8480 8483 8476 1337 +8483 8480 8489 8496 +8482 8481 8488 1339 +8485 8486 8479 8548 +8484 8487 8478 1153 +8487 8484 8491 8550 +8486 8485 8490 1155 +8489 8490 8483 1272 +8488 8491 8482 10099 +8491 8488 8487 1274 +8490 8489 8486 10101 +8493 -1 8495 8218 +8492 -1 8494 8473 +8495 8496 8493 8480 +8494 8497 8492 8205 +8497 8494 8499 8482 +8496 8495 8498 8207 +8499 -1 8497 10062 +8498 -1 8496 10097 +8501 8502 8504 8448 +8500 8503 8505 8509 +8503 8500 8506 8450 +8502 8501 8507 8511 +8505 -1 8500 8466 +8504 -1 8501 8525 +8507 -1 8502 8474 +8506 -1 8503 8557 +8509 8510 8513 1248 +8508 8511 8512 8501 +8511 8508 8517 1250 +8510 8509 8516 8503 +8513 8514 8509 8526 +8512 8515 8508 1633 +8515 8512 8523 8528 +8514 8513 8522 1635 +8517 8518 8511 8558 +8516 8519 8510 1217 +8519 8516 8521 8560 +8518 8517 8520 1219 +8521 8522 8519 1592 +8520 8523 8518 10215 +8523 8520 8515 1594 +8522 8521 8514 10217 +8525 -1 8527 8394 +8524 -1 8526 8505 +8527 8528 8525 8512 +8526 8529 8524 8381 +8529 8526 8531 8514 +8528 8527 8530 8383 +8531 -1 8529 10232 +8530 -1 8528 10219 +8533 8534 8536 1152 +8532 8535 8537 8549 +8535 8532 8540 1154 +8534 8533 8541 8551 +8537 8538 8532 1216 +8536 8539 8533 8559 +8539 8536 8546 1218 +8538 8537 8547 8561 +8541 8542 8534 1288 +8540 8543 8535 10119 +8543 8540 8544 1290 +8542 8541 8545 10121 +8545 8546 8542 1488 +8544 8547 8543 10195 +8547 8544 8538 1490 +8546 8545 8539 10197 +8549 8550 8553 8484 +8548 8551 8552 8533 +8551 8548 8555 8486 +8550 8549 8554 8535 +8553 -1 8549 8556 +8552 -1 8548 8475 +8555 -1 8551 10116 +8554 -1 8550 10103 +8557 -1 8559 8552 +8556 -1 8558 8507 +8559 8560 8557 8516 +8558 8561 8556 8537 +8561 8558 8563 8518 +8560 8559 8562 8539 +8563 -1 8561 10198 +8562 -1 8560 10213 +8565 8566 8568 8572 +8564 8567 8569 7961 +8567 8564 8570 8574 +8566 8565 8571 7963 +8569 -1 8564 8588 +8568 -1 8565 7995 +8571 -1 8566 8620 +8570 -1 8567 8075 +8573 8574 8576 8564 +8572 8575 8577 5521 +8575 8572 8580 8566 +8574 8573 8581 5523 +8577 8578 8572 8590 +8576 8579 8573 5505 +8579 8576 8584 8592 +8578 8577 8585 5507 +8581 8582 8574 8622 +8580 8583 8575 5773 +8583 8580 8586 8624 +8582 8581 8587 5775 +8585 8586 8578 8652 +8584 8587 8579 5645 +8587 8584 8582 8654 +8586 8585 8583 5647 +8589 -1 8590 8568 +8588 -1 8591 8597 +8591 8592 8588 8576 +8590 8593 8589 8605 +8593 8590 8594 8578 +8592 8591 8595 8607 +8595 -1 8592 8656 +8594 -1 8593 8697 +8597 -1 8599 7994 +8596 -1 8598 8589 +8599 8600 8597 8608 +8598 8601 8596 7977 +8601 8598 8603 8610 +8600 8599 8602 7979 +8603 -1 8601 8154 +8602 -1 8600 8817 +8605 8606 8609 5504 +8604 8607 8608 8591 +8607 8604 8613 5506 +8606 8605 8612 8593 +8609 8610 8605 8598 +8608 8611 8604 4521 +8611 8608 8617 8600 +8610 8609 8616 4523 +8613 8614 8607 8692 +8612 8615 8606 5585 +8615 8612 8619 8694 +8614 8613 8618 5587 +8617 8618 8611 4552 +8616 8619 8610 8813 +8619 8616 8615 4554 +8618 8617 8614 8815 +8621 -1 8622 8570 +8620 -1 8623 8629 +8623 8624 8620 8580 +8622 8625 8621 8637 +8625 8622 8626 8582 +8624 8623 8627 8639 +8627 -1 8624 8658 +8626 -1 8625 8761 +8629 -1 8631 8074 +8628 -1 8630 8621 +8631 8632 8629 8640 +8630 8633 8628 8061 +8633 8630 8635 8642 +8632 8631 8634 8063 +8635 -1 8633 8986 +8634 -1 8632 9673 +8637 8638 8641 5772 +8636 8639 8640 8623 +8639 8636 8645 5774 +8638 8637 8644 8625 +8641 8642 8637 8630 +8640 8643 8636 5757 +8643 8640 8649 8632 +8642 8641 8648 5759 +8645 8646 8639 8756 +8644 8647 8638 8713 +8647 8644 8651 8758 +8646 8645 8650 8715 +8649 8650 8643 9328 +8648 8651 8642 9669 +8651 8648 8647 9330 +8650 8649 8646 9671 +8653 8654 8656 8584 +8652 8655 8657 8661 +8655 8652 8658 8586 +8654 8653 8659 8663 +8657 -1 8652 8594 +8656 -1 8653 8701 +8659 -1 8654 8626 +8658 -1 8655 8765 +8661 8662 8665 5644 +8660 8663 8664 8653 +8663 8660 8669 5646 +8662 8661 8668 8655 +8665 8666 8661 8702 +8664 8667 8660 5629 +8667 8664 8673 8704 +8666 8665 8672 5631 +8669 8670 8663 8766 +8668 8671 8662 8729 +8671 8668 8675 8768 +8670 8669 8674 8731 +8673 8674 8667 10932 +8672 8675 8666 11185 +8675 8672 8671 10934 +8674 8673 8670 11187 +8677 8678 8680 5584 +8676 8679 8681 8693 +8679 8676 8684 5586 +8678 8677 8685 8695 +8681 8682 8676 5628 +8680 8683 8677 8703 +8683 8680 8690 5630 +8682 8681 8691 8705 +8685 8686 8678 5612 +8684 8687 8679 8879 +8687 8684 8688 5614 +8686 8685 8689 8881 +8689 8690 8686 10660 +8688 8691 8687 10747 +8691 8688 8682 10662 +8690 8689 8683 10749 +8693 8694 8697 8612 +8692 8695 8696 8677 +8695 8692 8699 8614 +8694 8693 8698 8679 +8697 -1 8693 8700 +8696 -1 8692 8595 +8699 -1 8695 8876 +8698 -1 8694 8819 +8701 -1 8703 8696 +8700 -1 8702 8657 +8703 8704 8701 8664 +8702 8705 8700 8681 +8705 8702 8707 8666 +8704 8703 8706 8683 +8707 -1 8705 10750 +8706 -1 8704 11189 +8709 8710 8712 8724 +8708 8711 8713 5777 +8711 8708 8716 8726 +8710 8709 8717 5779 +8713 8714 8708 8740 +8712 8715 8709 8645 +8715 8712 8722 8742 +8714 8713 8723 8647 +8717 8718 8710 8772 +8716 8719 8711 5789 +8719 8716 8720 8774 +8718 8717 8721 5791 +8721 8722 8718 9428 +8720 8723 8719 9325 +8723 8720 8714 9430 +8722 8721 8715 9327 +8725 8726 8728 8708 +8724 8727 8729 5649 +8727 8724 8732 8710 +8726 8725 8733 5651 +8729 8730 8724 8744 +8728 8731 8725 8669 +8731 8728 8738 8746 +8730 8729 8739 8671 +8733 8734 8726 8776 +8732 8735 8727 5661 +8735 8732 8736 8778 +8734 8733 8737 5663 +8737 8738 8734 10940 +8736 8739 8735 10929 +8739 8736 8730 10942 +8738 8737 8731 10931 +8741 8742 8744 8712 +8740 8743 8745 8757 +8743 8740 8748 8714 +8742 8741 8749 8759 +8745 8746 8740 8728 +8744 8747 8741 8767 +8747 8744 8752 8730 +8746 8745 8753 8769 +8749 8750 8742 9436 +8748 8751 8743 9711 +8751 8748 8754 9438 +8750 8749 8755 9713 +8753 8754 8746 10948 +8752 8755 8747 11211 +8755 8752 8750 10950 +8754 8753 8751 11213 +8757 8758 8761 8644 +8756 8759 8760 8741 +8759 8756 8763 8646 +8758 8757 8762 8743 +8761 -1 8757 8764 +8760 -1 8756 8627 +8763 -1 8759 9708 +8762 -1 8758 9675 +8765 -1 8767 8760 +8764 -1 8766 8659 +8767 8768 8765 8668 +8766 8769 8764 8745 +8769 8766 8771 8670 +8768 8767 8770 8747 +8771 -1 8769 11208 +8770 -1 8768 11191 +8773 8774 8776 8716 +8772 8775 8777 5901 +8775 8772 8780 8718 +8774 8773 8781 5903 +8777 8778 8772 8732 +8776 8779 8773 5917 +8779 8776 8784 8734 +8778 8777 8785 5919 +8781 8782 8774 9432 +8780 8783 8775 9417 +8783 8780 8786 9434 +8782 8781 8787 9419 +8785 8786 8778 10936 +8784 8787 8779 10897 +8787 8784 8782 10938 +8786 8785 8783 10899 +8789 8790 8792 8804 +8788 8791 8793 4457 +8791 8788 8796 8806 +8790 8789 8797 4459 +8793 8794 8788 8812 +8792 8795 8789 4553 +8795 8792 8800 8814 +8794 8793 8801 4555 +8797 8798 8790 8820 +8796 8799 8791 4505 +8799 8796 8802 8822 +8798 8797 8803 4507 +8801 8802 8794 8852 +8800 8803 8795 5185 +8803 8800 8798 8854 +8802 8801 8799 5187 +8805 8806 8808 8788 +8804 8807 8809 8169 +8807 8804 8810 8790 +8806 8805 8811 8171 +8809 -1 8804 8816 +8808 -1 8805 8155 +8811 -1 8806 8824 +8810 -1 8807 8251 +8813 8814 8816 8792 +8812 8815 8817 8617 +8815 8812 8818 8794 +8814 8813 8819 8619 +8817 -1 8812 8808 +8816 -1 8813 8603 +8819 -1 8814 8856 +8818 -1 8815 8699 +8821 8822 8824 8796 +8820 8823 8825 8829 +8823 8820 8826 8798 +8822 8821 8827 8831 +8825 -1 8820 8810 +8824 -1 8821 8845 +8827 -1 8822 8858 +8826 -1 8823 8905 +8829 8830 8833 4504 +8828 8831 8832 8821 +8831 8828 8837 4506 +8830 8829 8836 8823 +8833 8834 8829 8846 +8832 8835 8828 4473 +8835 8832 8841 8848 +8834 8833 8840 4475 +8837 8838 8831 8900 +8836 8839 8830 5137 +8839 8836 8843 8902 +8838 8837 8842 5139 +8841 8842 8835 5080 +8840 8843 8834 10139 +8843 8840 8839 5082 +8842 8841 8838 10141 +8845 -1 8847 8250 +8844 -1 8846 8825 +8847 8848 8845 8832 +8846 8849 8844 8237 +8849 8846 8851 8834 +8848 8847 8850 8239 +8851 -1 8849 10082 +8850 -1 8848 10137 +8853 8854 8856 8800 +8852 8855 8857 8861 +8855 8852 8858 8802 +8854 8853 8859 8863 +8857 -1 8852 8818 +8856 -1 8853 8877 +8859 -1 8854 8826 +8858 -1 8855 8909 +8861 8862 8865 5184 +8860 8863 8864 8853 +8863 8860 8869 5186 +8862 8861 8868 8855 +8865 8866 8861 8878 +8864 8867 8860 5613 +8867 8864 8875 8880 +8866 8865 8874 5615 +8869 8870 8863 8910 +8868 8871 8862 5165 +8871 8868 8873 8912 +8870 8869 8872 5167 +8873 8874 8871 10608 +8872 8875 8870 10727 +8875 8872 8867 10610 +8874 8873 8866 10729 +8877 -1 8879 8698 +8876 -1 8878 8857 +8879 8880 8877 8864 +8878 8881 8876 8685 +8881 8878 8883 8866 +8880 8879 8882 8687 +8883 -1 8881 10744 +8882 -1 8880 10731 +8885 8886 8888 5136 +8884 8887 8889 8901 +8887 8884 8892 5138 +8886 8885 8893 8903 +8889 8890 8884 5164 +8888 8891 8885 8911 +8891 8888 8898 5166 +8890 8889 8899 8913 +8893 8894 8886 5212 +8892 8895 8887 10159 +8895 8892 8896 5214 +8894 8893 8897 10161 +8897 8898 8894 10448 +8896 8899 8895 10707 +8899 8896 8890 10450 +8898 8897 8891 10709 +8901 8902 8905 8836 +8900 8903 8904 8885 +8903 8900 8907 8838 +8902 8901 8906 8887 +8905 -1 8901 8908 +8904 -1 8900 8827 +8907 -1 8903 10156 +8906 -1 8902 10143 +8909 -1 8911 8904 +8908 -1 8910 8859 +8911 8912 8909 8868 +8910 8913 8908 8889 +8913 8910 8915 8870 +8912 8911 8914 8891 +8915 -1 8913 10710 +8914 -1 8912 10725 +8917 8918 8920 8924 +8916 8919 8921 8017 +8919 8916 8922 8926 +8918 8917 8923 8019 +8921 -1 8916 8940 +8920 -1 8917 8051 +8923 -1 8918 8972 +8922 -1 8919 8083 +8925 8926 8928 8916 +8924 8927 8929 7489 +8927 8924 8932 8918 +8926 8925 8933 7491 +8929 8930 8924 8942 +8928 8931 8925 7473 +8931 8928 8936 8944 +8930 8929 8937 7475 +8933 8934 8926 8974 +8932 8935 8927 7709 +8935 8932 8938 8976 +8934 8933 8939 7711 +8937 8938 8930 9004 +8936 8939 8931 7613 +8939 8936 8934 9006 +8938 8937 8935 7615 +8941 -1 8942 8920 +8940 -1 8943 8949 +8943 8944 8940 8928 +8942 8945 8941 8957 +8945 8942 8946 8930 +8944 8943 8947 8959 +8947 -1 8944 9008 +8946 -1 8945 9049 +8949 -1 8951 8050 +8948 -1 8950 8941 +8951 8952 8949 8960 +8950 8953 8948 8033 +8953 8950 8955 8962 +8952 8951 8954 8035 +8955 -1 8953 8330 +8954 -1 8952 9169 +8957 8958 8961 7472 +8956 8959 8960 8943 +8959 8956 8965 7474 +8958 8957 8964 8945 +8961 8962 8957 8950 +8960 8963 8956 6489 +8963 8960 8969 8952 +8962 8961 8968 6491 +8965 8966 8959 9044 +8964 8967 8958 7553 +8967 8964 8971 9046 +8966 8965 8970 7555 +8969 8970 8963 6520 +8968 8971 8962 9165 +8971 8968 8967 6522 +8970 8969 8966 9167 +8973 -1 8974 8922 +8972 -1 8975 8981 +8975 8976 8972 8932 +8974 8977 8973 8989 +8977 8974 8978 8934 +8976 8975 8979 8991 +8979 -1 8976 9010 +8978 -1 8977 9113 +8981 -1 8983 8082 +8980 -1 8982 8973 +8983 8984 8981 8992 +8982 8985 8980 8065 +8985 8982 8987 8994 +8984 8983 8986 8067 +8987 -1 8985 8634 +8986 -1 8984 9681 +8989 8990 8993 7708 +8988 8991 8992 8975 +8991 8988 8997 7710 +8990 8989 8996 8977 +8993 8994 8989 8982 +8992 8995 8988 7693 +8995 8992 9001 8984 +8994 8993 9000 7695 +8997 8998 8991 9108 +8996 8999 8990 9065 +8999 8996 9003 9110 +8998 8997 9002 9067 +9001 9002 8995 9344 +9000 9003 8994 9677 +9003 9000 8999 9346 +9002 9001 8998 9679 +9005 9006 9008 8936 +9004 9007 9009 9013 +9007 9004 9010 8938 +9006 9005 9011 9015 +9009 -1 9004 8946 +9008 -1 9005 9053 +9011 -1 9006 8978 +9010 -1 9007 9117 +9013 9014 9017 7612 +9012 9015 9016 9005 +9015 9012 9021 7614 +9014 9013 9020 9007 +9017 9018 9013 9054 +9016 9019 9012 7597 +9019 9016 9025 9056 +9018 9017 9024 7599 +9021 9022 9015 9118 +9020 9023 9014 9081 +9023 9020 9027 9120 +9022 9021 9026 9083 +9025 9026 9019 11808 +9024 9027 9018 12129 +9027 9024 9023 11810 +9026 9025 9022 12131 +9029 9030 9032 7552 +9028 9031 9033 9045 +9031 9028 9036 7554 +9030 9029 9037 9047 +9033 9034 9028 7596 +9032 9035 9029 9055 +9035 9032 9042 7598 +9034 9033 9043 9057 +9037 9038 9030 7580 +9036 9039 9031 9231 +9039 9036 9040 7582 +9038 9037 9041 9233 +9041 9042 9038 11608 +9040 9043 9039 12123 +9043 9040 9034 11610 +9042 9041 9035 12125 +9045 9046 9049 8964 +9044 9047 9048 9029 +9047 9044 9051 8966 +9046 9045 9050 9031 +9049 -1 9045 9052 +9048 -1 9044 8947 +9051 -1 9047 9228 +9050 -1 9046 9171 +9053 -1 9055 9048 +9052 -1 9054 9009 +9055 9056 9053 9016 +9054 9057 9052 9033 +9057 9054 9059 9018 +9056 9055 9058 9035 +9059 -1 9057 12126 +9058 -1 9056 12133 +9061 9062 9064 9076 +9060 9063 9065 7713 +9063 9060 9068 9078 +9062 9061 9069 7715 +9065 9066 9060 9092 +9064 9067 9061 8997 +9067 9064 9074 9094 +9066 9065 9075 8999 +9069 9070 9062 9124 +9068 9071 9063 7725 +9071 9068 9072 9126 +9070 9069 9073 7727 +9073 9074 9070 9556 +9072 9075 9071 9341 +9075 9072 9066 9558 +9074 9073 9067 9343 +9077 9078 9080 9060 +9076 9079 9081 7617 +9079 9076 9084 9062 +9078 9077 9085 7619 +9081 9082 9076 9096 +9080 9083 9077 9021 +9083 9080 9090 9098 +9082 9081 9091 9023 +9085 9086 9078 9128 +9084 9087 9079 7629 +9087 9084 9088 9130 +9086 9085 9089 7631 +9089 9090 9086 11816 +9088 9091 9087 11805 +9091 9088 9082 11818 +9090 9089 9083 11807 +9093 9094 9096 9064 +9092 9095 9097 9109 +9095 9092 9100 9066 +9094 9093 9101 9111 +9097 9098 9092 9080 +9096 9099 9093 9119 +9099 9096 9104 9082 +9098 9097 9105 9121 +9101 9102 9094 9564 +9100 9103 9095 9743 +9103 9100 9106 9566 +9102 9101 9107 9745 +9105 9106 9098 11824 +9104 9107 9099 12155 +9107 9104 9102 11826 +9106 9105 9103 12157 +9109 9110 9113 8996 +9108 9111 9112 9093 +9111 9108 9115 8998 +9110 9109 9114 9095 +9113 -1 9109 9116 +9112 -1 9108 8979 +9115 -1 9111 9740 +9114 -1 9110 9683 +9117 -1 9119 9112 +9116 -1 9118 9011 +9119 9120 9117 9020 +9118 9121 9116 9097 +9121 9118 9123 9022 +9120 9119 9122 9099 +9123 -1 9121 12152 +9122 -1 9120 12135 +9125 9126 9128 9068 +9124 9127 9129 7821 +9127 9124 9132 9070 +9126 9125 9133 7823 +9129 9130 9124 9084 +9128 9131 9125 7837 +9131 9128 9136 9086 +9130 9129 9137 7839 +9133 9134 9126 9560 +9132 9135 9127 9545 +9135 9132 9138 9562 +9134 9133 9139 9547 +9137 9138 9130 11812 +9136 9139 9131 11773 +9139 9136 9134 11814 +9138 9137 9135 11775 +9141 9142 9144 9156 +9140 9143 9145 6425 +9143 9140 9148 9158 +9142 9141 9149 6427 +9145 9146 9140 9164 +9144 9147 9141 6521 +9147 9144 9152 9166 +9146 9145 9153 6523 +9149 9150 9142 9172 +9148 9151 9143 6473 +9151 9148 9154 9174 +9150 9149 9155 6475 +9153 9154 9146 9204 +9152 9155 9147 7153 +9155 9152 9150 9206 +9154 9153 9151 7155 +9157 9158 9160 9140 +9156 9159 9161 8345 +9159 9156 9162 9142 +9158 9157 9163 8347 +9161 -1 9156 9168 +9160 -1 9157 8331 +9163 -1 9158 9176 +9162 -1 9159 8427 +9165 9166 9168 9144 +9164 9167 9169 8969 +9167 9164 9170 9146 +9166 9165 9171 8971 +9169 -1 9164 9160 +9168 -1 9165 8955 +9171 -1 9166 9208 +9170 -1 9167 9051 +9173 9174 9176 9148 +9172 9175 9177 9181 +9175 9172 9178 9150 +9174 9173 9179 9183 +9177 -1 9172 9162 +9176 -1 9173 9197 +9179 -1 9174 9210 +9178 -1 9175 9257 +9181 9182 9185 6472 +9180 9183 9184 9173 +9183 9180 9189 6474 +9182 9181 9188 9175 +9185 9186 9181 9198 +9184 9187 9180 6441 +9187 9184 9193 9200 +9186 9185 9192 6443 +9189 9190 9183 9252 +9188 9191 9182 7105 +9191 9188 9195 9254 +9190 9189 9194 7107 +9193 9194 9187 7048 +9192 9195 9186 10287 +9195 9192 9191 7050 +9194 9193 9190 10289 +9197 -1 9199 8426 +9196 -1 9198 9177 +9199 9200 9197 9184 +9198 9201 9196 8413 +9201 9198 9203 9186 +9200 9199 9202 8415 +9203 -1 9201 10270 +9202 -1 9200 10285 +9205 9206 9208 9152 +9204 9207 9209 9213 +9207 9204 9210 9154 +9206 9205 9211 9215 +9209 -1 9204 9170 +9208 -1 9205 9229 +9211 -1 9206 9178 +9210 -1 9207 9261 +9213 9214 9217 7152 +9212 9215 9216 9205 +9215 9212 9221 7154 +9214 9213 9220 9207 +9217 9218 9213 9230 +9216 9219 9212 7581 +9219 9216 9227 9232 +9218 9217 9226 7583 +9221 9222 9215 9262 +9220 9223 9214 7133 +9223 9220 9225 9264 +9222 9221 9224 7135 +9225 9226 9223 11584 +9224 9227 9222 12103 +9227 9224 9219 11586 +9226 9225 9218 12105 +9229 -1 9231 9050 +9228 -1 9230 9209 +9231 9232 9229 9216 +9230 9233 9228 9037 +9233 9230 9235 9218 +9232 9231 9234 9039 +9235 -1 9233 12120 +9234 -1 9232 12107 +9237 9238 9240 7104 +9236 9239 9241 9253 +9239 9236 9244 7106 +9238 9237 9245 9255 +9241 9242 9236 7132 +9240 9243 9237 9263 +9243 9240 9250 7134 +9242 9241 9251 9265 +9245 9246 9238 7180 +9244 9247 9239 10307 +9247 9244 9248 7182 +9246 9245 9249 10309 +9249 9250 9246 11480 +9248 9251 9247 12083 +9251 9248 9242 11482 +9250 9249 9243 12085 +9253 9254 9257 9188 +9252 9255 9256 9237 +9255 9252 9259 9190 +9254 9253 9258 9239 +9257 -1 9253 9260 +9256 -1 9252 9179 +9259 -1 9255 10304 +9258 -1 9254 10291 +9261 -1 9263 9256 +9260 -1 9262 9211 +9263 9264 9261 9220 +9262 9265 9260 9241 +9265 9262 9267 9222 +9264 9263 9266 9243 +9267 -1 9265 12086 +9266 -1 9264 12101 +9269 9270 9272 9284 +9268 9271 9273 5697 +9271 9268 9276 9286 +9270 9269 9277 5699 +9273 9274 9268 9300 +9272 9275 9269 5793 +9275 9272 9280 9302 +9274 9273 9281 5795 +9277 9278 9270 9348 +9276 9279 9271 5713 +9279 9276 9282 9350 +9278 9277 9283 5715 +9281 9282 9274 9396 +9280 9283 9275 5905 +9283 9280 9278 9398 +9282 9281 9279 5907 +9285 9286 9288 9268 +9284 9287 9289 7665 +9287 9284 9292 9270 +9286 9285 9293 7667 +9289 9290 9284 9304 +9288 9291 9285 7729 +9291 9288 9296 9306 +9290 9289 9297 7731 +9293 9294 9286 9352 +9292 9295 9287 7681 +9295 9292 9298 9354 +9294 9293 9299 7683 +9297 9298 9290 9524 +9296 9299 9291 7825 +9299 9296 9294 9526 +9298 9297 9295 7827 +9301 9302 9304 9272 +9300 9303 9305 9317 +9303 9300 9308 9274 +9302 9301 9309 9319 +9305 9306 9300 9288 +9304 9307 9301 9333 +9307 9304 9312 9290 +9306 9305 9313 9335 +9309 9310 9302 9400 +9308 9311 9303 9449 +9311 9308 9314 9402 +9310 9309 9315 9451 +9313 9314 9306 9528 +9312 9315 9307 9577 +9315 9312 9310 9530 +9314 9313 9311 9579 +9317 9318 9321 5792 +9316 9319 9320 9301 +9319 9316 9325 5794 +9318 9317 9324 9303 +9321 9322 9317 9336 +9320 9323 9316 5761 +9323 9320 9329 9338 +9322 9321 9328 5763 +9325 9326 9319 9444 +9324 9327 9318 8721 +9327 9324 9331 9446 +9326 9325 9330 8723 +9329 9330 9323 8648 +9328 9331 9322 9653 +9331 9328 9327 8650 +9330 9329 9326 9655 +9333 9334 9337 7728 +9332 9335 9336 9305 +9335 9332 9341 7730 +9334 9333 9340 9307 +9337 9338 9333 9320 +9336 9339 9332 7697 +9339 9336 9345 9322 +9338 9337 9344 7699 +9341 9342 9335 9572 +9340 9343 9334 9073 +9343 9340 9347 9574 +9342 9341 9346 9075 +9345 9346 9339 9000 +9344 9347 9338 9657 +9347 9344 9343 9002 +9346 9345 9342 9659 +9349 9350 9352 9276 +9348 9351 9353 9365 +9351 9348 9356 9278 +9350 9349 9357 9367 +9353 9354 9348 9292 +9352 9355 9349 9381 +9355 9352 9360 9294 +9354 9353 9361 9383 +9357 9358 9350 9404 +9356 9359 9351 9497 +9359 9356 9362 9406 +9358 9357 9363 9499 +9361 9362 9354 9532 +9360 9363 9355 9625 +9363 9360 9358 9534 +9362 9361 9359 9627 +9365 9366 9369 5712 +9364 9367 9368 9349 +9367 9364 9373 5714 +9366 9365 9372 9351 +9369 9370 9365 9384 +9368 9371 9364 5329 +9371 9368 9377 9386 +9370 9369 9376 5331 +9373 9374 9367 9492 +9372 9375 9366 5825 +9375 9372 9379 9494 +9374 9373 9378 5827 +9377 9378 9371 5360 +9376 9379 9370 9861 +9379 9376 9375 5362 +9378 9377 9374 9863 +9381 9382 9385 7680 +9380 9383 9384 9353 +9383 9380 9389 7682 +9382 9381 9388 9355 +9385 9386 9381 9368 +9384 9387 9380 7297 +9387 9384 9393 9370 +9386 9385 9392 7299 +9389 9390 9383 9620 +9388 9391 9382 7745 +9391 9388 9395 9622 +9390 9389 9394 7747 +9393 9394 9387 7328 +9392 9395 9386 9865 +9395 9392 9391 7330 +9394 9393 9390 9867 +9397 9398 9400 9280 +9396 9399 9401 9413 +9399 9396 9404 9282 +9398 9397 9405 9415 +9401 9402 9396 9308 +9400 9403 9397 9461 +9403 9400 9408 9310 +9402 9401 9409 9463 +9405 9406 9398 9356 +9404 9407 9399 9509 +9407 9404 9410 9358 +9406 9405 9411 9511 +9409 9410 9402 9536 +9408 9411 9403 9801 +9411 9408 9406 9538 +9410 9409 9407 9803 +9413 9414 9417 5904 +9412 9415 9416 9397 +9415 9412 9421 5906 +9414 9413 9420 9399 +9417 9418 9413 9464 +9416 9419 9412 8781 +9419 9416 9427 9466 +9418 9417 9426 8783 +9421 9422 9415 9512 +9420 9423 9414 5885 +9423 9420 9425 9514 +9422 9421 9424 5887 +9425 9426 9423 10900 +9424 9427 9422 11057 +9427 9424 9419 10902 +9426 9425 9418 11059 +9429 9430 9432 8720 +9428 9431 9433 9445 +9431 9428 9436 8722 +9430 9429 9437 9447 +9433 9434 9428 8780 +9432 9435 9429 9465 +9435 9432 9440 8782 +9434 9433 9441 9467 +9437 9438 9430 8748 +9436 9439 9431 9697 +9439 9436 9442 8750 +9438 9437 9443 9699 +9441 9442 9434 10944 +9440 9443 9435 11101 +9443 9440 9438 10946 +9442 9441 9439 11103 +9445 9446 9449 9324 +9444 9447 9448 9429 +9447 9444 9453 9326 +9446 9445 9452 9431 +9449 9450 9445 9460 +9448 9451 9444 9309 +9451 9448 9457 9462 +9450 9449 9456 9311 +9453 9454 9447 9692 +9452 9455 9446 9661 +9455 9452 9459 9694 +9454 9453 9458 9663 +9457 9458 9451 9584 +9456 9459 9450 9749 +9459 9456 9455 9586 +9458 9457 9454 9751 +9461 9462 9465 9448 +9460 9463 9464 9401 +9463 9460 9469 9450 +9462 9461 9468 9403 +9465 9466 9461 9416 +9464 9467 9460 9433 +9467 9464 9473 9418 +9466 9465 9472 9435 +9469 9470 9463 9796 +9468 9471 9462 9753 +9471 9468 9475 9798 +9470 9469 9474 9755 +9473 9474 9467 11096 +9472 9475 9466 11065 +9475 9472 9471 11098 +9474 9473 9470 11067 +9477 9478 9480 5824 +9476 9479 9481 9493 +9479 9476 9484 5826 +9478 9477 9485 9495 +9481 9482 9476 5884 +9480 9483 9477 9513 +9483 9480 9490 5886 +9482 9481 9491 9515 +9485 9486 9478 5852 +9484 9487 9479 9905 +9487 9484 9488 5854 +9486 9485 9489 9907 +9489 9490 9486 10820 +9488 9491 9487 11001 +9491 9488 9482 10822 +9490 9489 9483 11003 +9493 9494 9497 9372 +9492 9495 9496 9477 +9495 9492 9501 9374 +9494 9493 9500 9479 +9497 9498 9493 9508 +9496 9499 9492 9357 +9499 9496 9505 9510 +9498 9497 9504 9359 +9501 9502 9495 9900 +9500 9503 9494 9869 +9503 9500 9507 9902 +9502 9501 9506 9871 +9505 9506 9499 9632 +9504 9507 9498 9957 +9507 9504 9503 9634 +9506 9505 9502 9959 +9509 9510 9513 9496 +9508 9511 9512 9405 +9511 9508 9517 9498 +9510 9509 9516 9407 +9513 9514 9509 9420 +9512 9515 9508 9481 +9515 9512 9521 9422 +9514 9513 9520 9483 +9517 9518 9511 9804 +9516 9519 9510 9961 +9519 9516 9523 9806 +9518 9517 9522 9963 +9521 9522 9515 11008 +9520 9523 9514 11061 +9523 9520 9519 11010 +9522 9521 9518 11063 +9525 9526 9528 9296 +9524 9527 9529 9541 +9527 9524 9532 9298 +9526 9525 9533 9543 +9529 9530 9524 9312 +9528 9531 9525 9589 +9531 9528 9536 9314 +9530 9529 9537 9591 +9533 9534 9526 9360 +9532 9535 9527 9637 +9535 9532 9538 9362 +9534 9533 9539 9639 +9537 9538 9530 9408 +9536 9539 9531 9813 +9539 9536 9534 9410 +9538 9537 9535 9815 +9541 9542 9545 7824 +9540 9543 9544 9525 +9543 9540 9549 7826 +9542 9541 9548 9527 +9545 9546 9541 9592 +9544 9547 9540 9133 +9547 9544 9555 9594 +9546 9545 9554 9135 +9549 9550 9543 9640 +9548 9551 9542 7805 +9551 9548 9553 9642 +9550 9549 9552 7807 +9553 9554 9551 11776 +9552 9555 9550 11933 +9555 9552 9547 11778 +9554 9553 9546 11935 +9557 9558 9560 9072 +9556 9559 9561 9573 +9559 9556 9564 9074 +9558 9557 9565 9575 +9561 9562 9556 9132 +9560 9563 9557 9593 +9563 9560 9568 9134 +9562 9561 9569 9595 +9565 9566 9558 9100 +9564 9567 9559 9729 +9567 9564 9570 9102 +9566 9565 9571 9731 +9569 9570 9562 11820 +9568 9571 9563 11977 +9571 9568 9566 11822 +9570 9569 9567 11979 +9573 9574 9577 9340 +9572 9575 9576 9557 +9575 9572 9581 9342 +9574 9573 9580 9559 +9577 9578 9573 9588 +9576 9579 9572 9313 +9579 9576 9585 9590 +9578 9577 9584 9315 +9581 9582 9575 9724 +9580 9583 9574 9665 +9583 9580 9587 9726 +9582 9581 9586 9667 +9585 9586 9579 9456 +9584 9587 9578 9765 +9587 9584 9583 9458 +9586 9585 9582 9767 +9589 9590 9593 9576 +9588 9591 9592 9529 +9591 9588 9597 9578 +9590 9589 9596 9531 +9593 9594 9589 9544 +9592 9595 9588 9561 +9595 9592 9601 9546 +9594 9593 9600 9563 +9597 9598 9591 9816 +9596 9599 9590 9769 +9599 9596 9603 9818 +9598 9597 9602 9771 +9601 9602 9595 11972 +9600 9603 9594 11941 +9603 9600 9599 11974 +9602 9601 9598 11943 +9605 9606 9608 7744 +9604 9607 9609 9621 +9607 9604 9612 7746 +9606 9605 9613 9623 +9609 9610 9604 7804 +9608 9611 9605 9641 +9611 9608 9618 7806 +9610 9609 9619 9643 +9613 9614 9606 7772 +9612 9615 9607 9937 +9615 9612 9616 7774 +9614 9613 9617 9939 +9617 9618 9614 11696 +9616 9619 9615 11877 +9619 9616 9610 11698 +9618 9617 9611 11879 +9621 9622 9625 9388 +9620 9623 9624 9605 +9623 9620 9629 9390 +9622 9621 9628 9607 +9625 9626 9621 9636 +9624 9627 9620 9361 +9627 9624 9633 9638 +9626 9625 9632 9363 +9629 9630 9623 9932 +9628 9631 9622 9873 +9631 9628 9635 9934 +9630 9629 9634 9875 +9633 9634 9627 9504 +9632 9635 9626 9973 +9635 9632 9631 9506 +9634 9633 9630 9975 +9637 9638 9641 9624 +9636 9639 9640 9533 +9639 9636 9645 9626 +9638 9637 9644 9535 +9641 9642 9637 9548 +9640 9643 9636 9609 +9643 9640 9649 9550 +9642 9641 9648 9611 +9645 9646 9639 9820 +9644 9647 9638 9977 +9647 9644 9651 9822 +9646 9645 9650 9979 +9649 9650 9643 11884 +9648 9651 9642 11937 +9651 9648 9647 11886 +9650 9649 9646 11939 +9653 9654 9656 9668 +9652 9655 9657 9329 +9655 9652 9660 9670 +9654 9653 9661 9331 +9657 9658 9652 9676 +9656 9659 9653 9345 +9659 9656 9664 9678 +9658 9657 9665 9347 +9661 9662 9654 9684 +9660 9663 9655 9453 +9663 9660 9666 9686 +9662 9661 9667 9455 +9665 9666 9658 9716 +9664 9667 9659 9581 +9667 9664 9662 9718 +9666 9665 9663 9583 +9669 9670 9672 9652 +9668 9671 9673 8649 +9671 9668 9674 9654 +9670 9669 9675 8651 +9673 -1 9668 9680 +9672 -1 9669 8635 +9675 -1 9670 9688 +9674 -1 9671 8763 +9677 9678 9680 9656 +9676 9679 9681 9001 +9679 9676 9682 9658 +9678 9677 9683 9003 +9681 -1 9676 9672 +9680 -1 9677 8987 +9683 -1 9678 9720 +9682 -1 9679 9115 +9685 9686 9688 9660 +9684 9687 9689 9693 +9687 9684 9690 9662 +9686 9685 9691 9695 +9689 -1 9684 9674 +9688 -1 9685 9709 +9691 -1 9686 9722 +9690 -1 9687 9849 +9693 9694 9697 9452 +9692 9695 9696 9685 +9695 9692 9701 9454 +9694 9693 9700 9687 +9697 9698 9693 9710 +9696 9699 9692 9437 +9699 9696 9705 9712 +9698 9697 9704 9439 +9701 9702 9695 9844 +9700 9703 9694 9757 +9703 9700 9707 9846 +9702 9701 9706 9759 +9705 9706 9699 11108 +9704 9707 9698 11231 +9707 9704 9703 11110 +9706 9705 9702 11233 +9709 -1 9711 8762 +9708 -1 9710 9689 +9711 9712 9709 9696 +9710 9713 9708 8749 +9713 9710 9715 9698 +9712 9711 9714 8751 +9715 -1 9713 11214 +9714 -1 9712 11229 +9717 9718 9720 9664 +9716 9719 9721 9725 +9719 9716 9722 9666 +9718 9717 9723 9727 +9721 -1 9716 9682 +9720 -1 9717 9741 +9723 -1 9718 9690 +9722 -1 9719 9853 +9725 9726 9729 9580 +9724 9727 9728 9717 +9727 9724 9733 9582 +9726 9725 9732 9719 +9729 9730 9725 9742 +9728 9731 9724 9565 +9731 9728 9737 9744 +9730 9729 9736 9567 +9733 9734 9727 9854 +9732 9735 9726 9773 +9735 9732 9739 9856 +9734 9733 9738 9775 +9737 9738 9731 11984 +9736 9739 9730 12175 +9739 9736 9735 11986 +9738 9737 9734 12177 +9741 -1 9743 9114 +9740 -1 9742 9721 +9743 9744 9741 9728 +9742 9745 9740 9101 +9745 9742 9747 9730 +9744 9743 9746 9103 +9747 -1 9745 12158 +9746 -1 9744 12173 +9749 9750 9752 9764 +9748 9751 9753 9457 +9751 9748 9756 9766 +9750 9749 9757 9459 +9753 9754 9748 9780 +9752 9755 9749 9469 +9755 9752 9760 9782 +9754 9753 9761 9471 +9757 9758 9750 9828 +9756 9759 9751 9701 +9759 9756 9762 9830 +9758 9757 9763 9703 +9761 9762 9754 11152 +9760 9763 9755 11105 +9763 9760 9758 11154 +9762 9761 9759 11107 +9765 9766 9768 9748 +9764 9767 9769 9585 +9767 9764 9772 9750 +9766 9765 9773 9587 +9769 9770 9764 9784 +9768 9771 9765 9597 +9771 9768 9776 9786 +9770 9769 9777 9599 +9773 9774 9766 9832 +9772 9775 9767 9733 +9775 9772 9778 9834 +9774 9773 9779 9735 +9777 9778 9770 12028 +9776 9779 9771 11981 +9779 9776 9774 12030 +9778 9777 9775 11983 +9781 9782 9784 9752 +9780 9783 9785 9797 +9783 9780 9788 9754 +9782 9781 9789 9799 +9785 9786 9780 9768 +9784 9787 9781 9817 +9787 9784 9792 9770 +9786 9785 9793 9819 +9789 9790 9782 11156 +9788 9791 9783 11137 +9791 9788 9794 11158 +9790 9789 9795 11139 +9793 9794 9786 12032 +9792 9795 9787 12013 +9795 9792 9790 12034 +9794 9793 9791 12015 +9797 9798 9801 9468 +9796 9799 9800 9781 +9799 9796 9811 9470 +9798 9797 9810 9783 +9801 9802 9797 9812 +9800 9803 9796 9409 +9803 9800 9805 9814 +9802 9801 9804 9411 +9805 9806 9803 9516 +9804 9807 9802 9989 +9807 9804 9809 9518 +9806 9805 9808 9991 +9809 9810 9807 11128 +9808 9811 9806 11069 +9811 9808 9799 11130 +9810 9809 9798 11071 +9813 9814 9817 9800 +9812 9815 9816 9537 +9815 9812 9821 9802 +9814 9813 9820 9539 +9817 9818 9813 9596 +9816 9819 9812 9785 +9819 9816 9827 9598 +9818 9817 9826 9787 +9821 9822 9815 9644 +9820 9823 9814 9993 +9823 9820 9825 9646 +9822 9821 9824 9995 +9825 9826 9823 12004 +9824 9827 9822 11945 +9827 9824 9819 12006 +9826 9825 9818 11947 +9829 9830 9832 9756 +9828 9831 9833 9845 +9831 9828 9836 9758 +9830 9829 9837 9847 +9833 9834 9828 9772 +9832 9835 9829 9855 +9835 9832 9840 9774 +9834 9833 9841 9857 +9837 9838 9830 11160 +9836 9839 9831 11251 +9839 9836 9842 11162 +9838 9837 9843 11253 +9841 9842 9834 12036 +9840 9843 9835 12195 +9843 9840 9838 12038 +9842 9841 9839 12197 +9845 9846 9849 9700 +9844 9847 9848 9829 +9847 9844 9851 9702 +9846 9845 9850 9831 +9849 -1 9845 9852 +9848 -1 9844 9691 +9851 -1 9847 11248 +9850 -1 9846 11235 +9853 -1 9855 9848 +9852 -1 9854 9723 +9855 9856 9853 9732 +9854 9857 9852 9833 +9857 9854 9859 9734 +9856 9855 9858 9835 +9859 -1 9857 12192 +9858 -1 9856 12179 +9861 9862 9864 9876 +9860 9863 9865 9377 +9863 9860 9868 9878 +9862 9861 9869 9379 +9865 9866 9860 9884 +9864 9867 9861 9393 +9867 9864 9872 9886 +9866 9865 9873 9395 +9869 9870 9862 9892 +9868 9871 9863 9501 +9871 9868 9874 9894 +9870 9869 9875 9503 +9873 9874 9866 9924 +9872 9875 9867 9629 +9875 9872 9870 9926 +9874 9873 9871 9631 +9877 9878 9880 9860 +9876 9879 9881 5361 +9879 9876 9882 9862 +9878 9877 9883 5363 +9881 -1 9876 9888 +9880 -1 9877 5315 +9883 -1 9878 9896 +9882 -1 9879 5867 +9885 9886 9888 9864 +9884 9887 9889 7329 +9887 9884 9890 9866 +9886 9885 9891 7331 +9889 -1 9884 9880 +9888 -1 9885 7283 +9891 -1 9886 9928 +9890 -1 9887 7787 +9893 9894 9896 9868 +9892 9895 9897 9901 +9895 9892 9898 9870 +9894 9893 9899 9903 +9897 -1 9892 9882 +9896 -1 9893 9917 +9899 -1 9894 9930 +9898 -1 9895 10025 +9901 9902 9905 9500 +9900 9903 9904 9893 +9903 9900 9909 9502 +9902 9901 9908 9895 +9905 9906 9901 9918 +9904 9907 9900 9485 +9907 9904 9913 9920 +9906 9905 9912 9487 +9909 9910 9903 10020 +9908 9911 9902 9965 +9911 9908 9915 10022 +9910 9909 9914 9967 +9913 9914 9907 10996 +9912 9915 9906 10975 +9915 9912 9911 10998 +9914 9913 9910 10977 +9917 -1 9919 5866 +9916 -1 9918 9897 +9919 9920 9917 9904 +9918 9921 9916 5853 +9921 9918 9923 9906 +9920 9919 9922 5855 +9923 -1 9921 10806 +9922 -1 9920 10973 +9925 9926 9928 9872 +9924 9927 9929 9933 +9927 9924 9930 9874 +9926 9925 9931 9935 +9929 -1 9924 9890 +9928 -1 9925 9949 +9931 -1 9926 9898 +9930 -1 9927 10029 +9933 9934 9937 9628 +9932 9935 9936 9925 +9935 9932 9941 9630 +9934 9933 9940 9927 +9937 9938 9933 9950 +9936 9939 9932 9613 +9939 9936 9945 9952 +9938 9937 9944 9615 +9941 9942 9935 10030 +9940 9943 9934 9981 +9943 9940 9947 10032 +9942 9941 9946 9983 +9945 9946 9939 11872 +9944 9947 9938 11851 +9947 9944 9943 11874 +9946 9945 9942 11853 +9949 -1 9951 7786 +9948 -1 9950 9929 +9951 9952 9949 9936 +9950 9953 9948 7773 +9953 9950 9955 9938 +9952 9951 9954 7775 +9955 -1 9953 11682 +9954 -1 9952 11849 +9957 9958 9960 9972 +9956 9959 9961 9505 +9959 9956 9964 9974 +9958 9957 9965 9507 +9961 9962 9956 9988 +9960 9963 9957 9517 +9963 9960 9970 9990 +9962 9961 9971 9519 +9965 9966 9958 10004 +9964 9967 9959 9909 +9967 9964 9968 10006 +9966 9965 9969 9911 +9969 9970 9966 11024 +9968 9971 9967 11005 +9971 9968 9962 11026 +9970 9969 9963 11007 +9973 9974 9976 9956 +9972 9975 9977 9633 +9975 9972 9980 9958 +9974 9973 9981 9635 +9977 9978 9972 9992 +9976 9979 9973 9645 +9979 9976 9986 9994 +9978 9977 9987 9647 +9981 9982 9974 10008 +9980 9983 9975 9941 +9983 9980 9984 10010 +9982 9981 9985 9943 +9985 9986 9982 11900 +9984 9987 9983 11881 +9987 9984 9978 11902 +9986 9985 9979 11883 +9989 9990 9992 9960 +9988 9991 9993 9805 +9991 9988 9996 9962 +9990 9989 9997 9807 +9993 9994 9988 9976 +9992 9995 9989 9821 +9995 9992 10000 9978 +9994 9993 10001 9823 +9997 9998 9990 11032 +9996 9999 9991 11133 +9999 9996 10002 11034 +9998 9997 10003 11135 +10001 10002 9994 11908 +10000 10003 9995 12009 +10003 10000 9998 11910 +10002 10001 9999 12011 +10005 10006 10008 9964 +10004 10007 10009 10021 +10007 10004 10012 9966 +10006 10005 10013 10023 +10009 10010 10004 9980 +10008 10011 10005 10031 +10011 10008 10016 9982 +10010 10009 10017 10033 +10013 10014 10006 11028 +10012 10015 10007 11019 +10015 10012 10018 11030 +10014 10013 10019 11021 +10017 10018 10010 11904 +10016 10019 10011 11895 +10019 10016 10014 11906 +10018 10017 10015 11897 +10021 10022 10025 9908 +10020 10023 10024 10005 +10023 10020 10027 9910 +10022 10021 10026 10007 +10025 -1 10021 10028 +10024 -1 10020 9899 +10027 -1 10023 11016 +10026 -1 10022 10979 +10029 -1 10031 10024 +10028 -1 10030 9931 +10031 10032 10029 9940 +10030 10033 10028 10009 +10033 10030 10035 9942 +10032 10031 10034 10011 +10035 -1 10033 11892 +10034 -1 10032 11855 +10037 10038 10040 10044 +10036 10039 10041 8193 +10039 10036 10042 10046 +10038 10037 10043 8195 +10041 -1 10036 10052 +10040 -1 10037 8227 +10043 -1 10038 10072 +10042 -1 10039 8259 +10045 10046 10048 10036 +10044 10047 10049 2265 +10047 10044 10050 10038 +10046 10045 10051 2267 +10049 -1 10044 10054 +10048 -1 10045 2219 +10051 -1 10046 10074 +10050 -1 10047 2731 +10053 -1 10054 10040 +10052 -1 10055 10057 +10055 -1 10052 10048 +10054 -1 10053 10065 +10057 -1 10059 8226 +10056 -1 10058 10053 +10059 10060 10057 10066 +10058 10061 10056 8209 +10061 10058 10063 10068 +10060 10059 10062 8211 +10063 -1 10061 8498 +10062 -1 10060 10093 +10065 -1 10067 2218 +10064 -1 10066 10055 +10067 10068 10065 10058 +10066 10069 10064 1401 +10069 10066 10071 10060 +10068 10067 10070 1403 +10071 -1 10069 1418 +10070 -1 10068 10095 +10073 -1 10074 10042 +10072 -1 10075 10077 +10075 -1 10072 10050 +10074 -1 10073 10085 +10077 -1 10079 8258 +10076 -1 10078 10073 +10079 10080 10077 10086 +10078 10081 10076 8241 +10081 10078 10083 10088 +10080 10079 10082 8243 +10083 -1 10081 8850 +10082 -1 10080 10133 +10085 -1 10087 2730 +10084 -1 10086 10075 +10087 10088 10085 10078 +10086 10089 10084 2713 +10089 10086 10091 10080 +10088 10087 10090 2715 +10091 -1 10089 5090 +10090 -1 10088 10135 +10093 -1 10094 10096 +10092 -1 10095 10063 +10095 -1 10092 10104 +10094 -1 10093 10071 +10097 -1 10098 10092 +10096 -1 10099 8499 +10099 10100 10096 10106 +10098 10101 10097 8489 +10101 10098 10102 10108 +10100 10099 10103 8491 +10103 -1 10100 10112 +10102 -1 10101 8555 +10105 -1 10106 10094 +10104 -1 10107 1419 +10107 10108 10104 10098 +10106 10109 10105 1273 +10109 10106 10110 10100 +10108 10107 10111 1275 +10111 -1 10108 10114 +10110 -1 10109 1307 +10113 -1 10114 10102 +10112 -1 10115 10117 +10115 -1 10112 10110 +10114 -1 10113 10125 +10117 -1 10119 8554 +10116 -1 10118 10113 +10119 10120 10117 10126 +10118 10121 10116 8541 +10121 10118 10123 10128 +10120 10119 10122 8543 +10123 -1 10121 10192 +10122 -1 10120 10179 +10125 -1 10127 1306 +10124 -1 10126 10115 +10127 10128 10125 10118 +10126 10129 10124 1289 +10129 10126 10131 10120 +10128 10127 10130 1291 +10131 -1 10129 1474 +10130 -1 10128 10177 +10133 -1 10134 10136 +10132 -1 10135 10083 +10135 -1 10132 10144 +10134 -1 10133 10091 +10137 -1 10138 10132 +10136 -1 10139 8851 +10139 10140 10136 10146 +10138 10141 10137 8841 +10141 10138 10142 10148 +10140 10139 10143 8843 +10143 -1 10140 10152 +10142 -1 10141 8907 +10145 -1 10146 10134 +10144 -1 10147 5091 +10147 10148 10144 10138 +10146 10149 10145 5081 +10149 10146 10150 10140 +10148 10147 10151 5083 +10151 -1 10148 10154 +10150 -1 10149 5227 +10153 -1 10154 10142 +10152 -1 10155 10157 +10155 -1 10152 10150 +10154 -1 10153 10165 +10157 -1 10159 8906 +10156 -1 10158 10153 +10159 10160 10157 10166 +10158 10161 10156 8893 +10161 10158 10163 10168 +10160 10159 10162 8895 +10163 -1 10161 10704 +10162 -1 10160 10691 +10165 -1 10167 5226 +10164 -1 10166 10155 +10167 10168 10165 10158 +10166 10169 10164 5213 +10169 10166 10171 10160 +10168 10167 10170 5215 +10171 -1 10169 10434 +10170 -1 10168 10689 +10173 -1 10174 10176 +10172 -1 10175 1475 +10175 -1 10172 10180 +10174 -1 10173 1507 +10177 -1 10178 10172 +10176 -1 10179 10131 +10179 -1 10176 10182 +10178 -1 10177 10123 +10181 -1 10182 10174 +10180 -1 10183 10185 +10183 -1 10180 10178 +10182 -1 10181 10193 +10185 -1 10187 1506 +10184 -1 10186 10181 +10187 10188 10185 10194 +10186 10189 10184 1489 +10189 10186 10191 10196 +10188 10187 10190 1491 +10191 -1 10189 1602 +10190 -1 10188 10201 +10193 -1 10195 10122 +10192 -1 10194 10183 +10195 10196 10193 10186 +10194 10197 10192 8545 +10197 10194 10199 10188 +10196 10195 10198 8547 +10199 -1 10197 8562 +10198 -1 10196 10203 +10201 -1 10202 10204 +10200 -1 10203 10191 +10203 -1 10200 10212 +10202 -1 10201 10199 +10205 -1 10206 10200 +10204 -1 10207 1603 +10207 10208 10204 10214 +10206 10209 10205 1593 +10209 10206 10210 10216 +10208 10207 10211 1595 +10211 -1 10208 10220 +10210 -1 10209 1715 +10213 -1 10214 10202 +10212 -1 10215 8563 +10215 10216 10212 10206 +10214 10217 10213 8521 +10217 10214 10218 10208 +10216 10215 10219 8523 +10219 -1 10216 10222 +10218 -1 10217 8531 +10221 -1 10222 10210 +10220 -1 10223 10225 +10223 -1 10220 10218 +10222 -1 10221 10233 +10225 -1 10227 1714 +10224 -1 10226 10221 +10227 10228 10225 10234 +10226 10229 10224 1697 +10229 10226 10231 10236 +10228 10227 10230 1699 +10231 -1 10229 6090 +10230 -1 10228 10251 +10233 -1 10235 8530 +10232 -1 10234 10223 +10235 10236 10233 10226 +10234 10237 10232 8385 +10237 10234 10239 10228 +10236 10235 10238 8387 +10239 -1 10237 8402 +10238 -1 10236 10249 +10241 -1 10242 10248 +10240 -1 10243 8403 +10243 10244 10240 10252 +10242 10245 10241 8369 +10245 10242 10246 10254 +10244 10243 10247 8371 +10247 -1 10244 10260 +10246 -1 10245 8435 +10249 -1 10250 10240 +10248 -1 10251 10239 +10251 -1 10248 10256 +10250 -1 10249 10231 +10253 10254 10256 10242 +10252 10255 10257 6105 +10255 10252 10258 10244 +10254 10253 10259 6107 +10257 -1 10252 10250 +10256 -1 10253 6091 +10259 -1 10254 10262 +10258 -1 10255 6171 +10261 -1 10262 10246 +10260 -1 10263 10265 +10263 -1 10260 10258 +10262 -1 10261 10273 +10265 -1 10267 8434 +10264 -1 10266 10261 +10267 10268 10265 10274 +10266 10269 10264 8417 +10269 10266 10271 10276 +10268 10267 10270 8419 +10271 -1 10269 9202 +10270 -1 10268 10281 +10273 -1 10275 6170 +10272 -1 10274 10263 +10275 10276 10273 10266 +10274 10277 10272 6153 +10277 10274 10279 10268 +10276 10275 10278 6155 +10279 -1 10277 7058 +10278 -1 10276 10283 +10281 -1 10282 10284 +10280 -1 10283 10271 +10283 -1 10280 10292 +10282 -1 10281 10279 +10285 -1 10286 10280 +10284 -1 10287 9203 +10287 10288 10284 10294 +10286 10289 10285 9193 +10289 10286 10290 10296 +10288 10287 10291 9195 +10291 -1 10288 10300 +10290 -1 10289 9259 +10293 -1 10294 10282 +10292 -1 10295 7059 +10295 10296 10292 10286 +10294 10297 10293 7049 +10297 10294 10298 10288 +10296 10295 10299 7051 +10299 -1 10296 10302 +10298 -1 10297 7195 +10301 -1 10302 10290 +10300 -1 10303 10305 +10303 -1 10300 10298 +10302 -1 10301 10313 +10305 -1 10307 9258 +10304 -1 10306 10301 +10307 10308 10305 10314 +10306 10309 10304 9245 +10309 10306 10311 10316 +10308 10307 10310 9247 +10311 -1 10309 12080 +10310 -1 10308 12067 +10313 -1 10315 7194 +10312 -1 10314 10303 +10315 10316 10313 10306 +10314 10317 10312 7181 +10317 10314 10319 10308 +10316 10315 10318 7183 +10319 -1 10317 11466 +10318 -1 10316 12065 +10321 -1 10322 10324 +10320 -1 10323 5027 +10323 -1 10320 10336 +10322 -1 10321 4995 +10325 -1 10326 10320 +10324 -1 10327 10329 +10327 -1 10324 10338 +10326 -1 10325 10369 +10329 -1 10331 5026 +10328 -1 10330 10325 +10331 10332 10329 10364 +10330 10333 10328 5009 +10333 10330 10335 10366 +10332 10331 10334 5011 +10335 -1 10333 5122 +10334 -1 10332 10381 +10337 -1 10338 10322 +10336 -1 10339 10341 +10339 -1 10336 10326 +10338 -1 10337 10373 +10341 -1 10343 4994 +10340 -1 10342 10337 +10343 10344 10341 10374 +10342 10345 10340 4809 +10345 10342 10347 10376 +10344 10343 10346 4811 +10347 -1 10345 4826 +10346 -1 10344 10469 +10349 10350 10352 5008 +10348 10351 10353 10365 +10351 10348 10356 5010 +10350 10349 10357 10367 +10353 10354 10348 4808 +10352 10355 10349 10375 +10355 10352 10360 4810 +10354 10353 10361 10377 +10357 10358 10350 4736 +10356 10359 10351 10403 +10359 10356 10362 4738 +10358 10357 10363 10405 +10361 10362 10354 4672 +10360 10363 10355 10491 +10363 10360 10358 4674 +10362 10361 10359 10493 +10365 10366 10369 10330 +10364 10367 10368 10349 +10367 10364 10371 10332 +10366 10365 10370 10351 +10369 -1 10365 10372 +10368 -1 10364 10327 +10371 -1 10367 10400 +10370 -1 10366 10383 +10373 -1 10375 10368 +10372 -1 10374 10339 +10375 10376 10373 10342 +10374 10377 10372 10353 +10377 10374 10379 10344 +10376 10375 10378 10355 +10379 -1 10377 10488 +10378 -1 10376 10471 +10381 -1 10382 10384 +10380 -1 10383 10335 +10383 -1 10380 10392 +10382 -1 10381 10371 +10385 -1 10386 10380 +10384 -1 10387 5123 +10387 10388 10384 10394 +10386 10389 10385 5113 +10389 10386 10390 10396 +10388 10387 10391 5115 +10391 -1 10388 10424 +10390 -1 10389 5235 +10393 -1 10394 10382 +10392 -1 10395 10401 +10395 10396 10392 10386 +10394 10397 10393 10409 +10397 10394 10398 10388 +10396 10395 10399 10411 +10399 -1 10396 10426 +10398 -1 10397 10457 +10401 -1 10403 10370 +10400 -1 10402 10393 +10403 10404 10401 10412 +10402 10405 10400 10357 +10405 10402 10407 10414 +10404 10403 10406 10359 +10407 -1 10405 10494 +10406 -1 10404 10577 +10409 10410 10413 5112 +10408 10411 10412 10395 +10411 10408 10417 5114 +10410 10409 10416 10397 +10413 10414 10409 10402 +10412 10415 10408 4737 +10415 10412 10421 10404 +10414 10413 10420 4739 +10417 10418 10411 10452 +10416 10419 10410 5153 +10419 10416 10423 10454 +10418 10417 10422 5155 +10421 10422 10415 4768 +10420 10423 10414 10573 +10423 10420 10419 4770 +10422 10421 10418 10575 +10425 -1 10426 10390 +10424 -1 10427 10429 +10427 -1 10424 10398 +10426 -1 10425 10461 +10429 -1 10431 5234 +10428 -1 10430 10425 +10431 10432 10429 10462 +10430 10433 10428 5217 +10433 10430 10435 10464 +10432 10431 10434 5219 +10435 -1 10433 10170 +10434 -1 10432 10685 +10437 10438 10440 5152 +10436 10439 10441 10453 +10439 10436 10444 5154 +10438 10437 10445 10455 +10441 10442 10436 5216 +10440 10443 10437 10463 +10443 10440 10448 5218 +10442 10441 10449 10465 +10445 10446 10438 5168 +10444 10447 10439 10615 +10447 10444 10450 5170 +10446 10445 10451 10617 +10449 10450 10442 8896 +10448 10451 10443 10699 +10451 10448 10446 8898 +10450 10449 10447 10701 +10453 10454 10457 10416 +10452 10455 10456 10437 +10455 10452 10459 10418 +10454 10453 10458 10439 +10457 -1 10453 10460 +10456 -1 10452 10399 +10459 -1 10455 10612 +10458 -1 10454 10579 +10461 -1 10463 10456 +10460 -1 10462 10427 +10463 10464 10461 10430 +10462 10465 10460 10441 +10465 10462 10467 10432 +10464 10463 10466 10443 +10467 -1 10465 10696 +10466 -1 10464 10687 +10469 -1 10470 10472 +10468 -1 10471 10347 +10471 -1 10468 10480 +10470 -1 10469 10379 +10473 -1 10474 10468 +10472 -1 10475 4827 +10475 10476 10472 10482 +10474 10477 10473 4793 +10477 10474 10478 10484 +10476 10475 10479 4795 +10479 -1 10476 10512 +10478 -1 10477 4939 +10481 -1 10482 10470 +10480 -1 10483 10489 +10483 10484 10480 10474 +10482 10485 10481 10497 +10485 10482 10486 10476 +10484 10483 10487 10499 +10487 -1 10484 10514 +10486 -1 10485 10545 +10489 -1 10491 10378 +10488 -1 10490 10481 +10491 10492 10489 10500 +10490 10493 10488 10361 +10493 10490 10495 10502 +10492 10491 10494 10363 +10495 -1 10493 10406 +10494 -1 10492 10585 +10497 10498 10501 4792 +10496 10499 10500 10483 +10499 10496 10505 4794 +10498 10497 10504 10485 +10501 10502 10497 10490 +10500 10503 10496 4673 +10503 10500 10509 10492 +10502 10501 10508 4675 +10505 10506 10499 10540 +10504 10507 10498 4857 +10507 10504 10511 10542 +10506 10505 10510 4859 +10509 10510 10503 4720 +10508 10511 10502 10581 +10511 10508 10507 4722 +10510 10509 10506 10583 +10513 -1 10514 10478 +10512 -1 10515 10517 +10515 -1 10512 10486 +10514 -1 10513 10549 +10517 -1 10519 4938 +10516 -1 10518 10513 +10519 10520 10517 10550 +10518 10521 10516 4921 +10521 10518 10523 10552 +10520 10519 10522 4923 +10523 -1 10521 5378 +10522 -1 10520 10753 +10525 10526 10528 4856 +10524 10527 10529 10541 +10527 10524 10532 4858 +10526 10525 10533 10543 +10529 10530 10524 4920 +10528 10531 10525 10551 +10531 10528 10536 4922 +10530 10529 10537 10553 +10533 10534 10526 4872 +10532 10535 10527 10647 +10535 10532 10538 4874 +10534 10533 10539 10649 +10537 10538 10530 5392 +10536 10539 10531 10775 +10539 10536 10534 5394 +10538 10537 10535 10777 +10541 10542 10545 10504 +10540 10543 10544 10525 +10543 10540 10547 10506 +10542 10541 10546 10527 +10545 -1 10541 10548 +10544 -1 10540 10487 +10547 -1 10543 10644 +10546 -1 10542 10587 +10549 -1 10551 10544 +10548 -1 10550 10515 +10551 10552 10549 10518 +10550 10553 10548 10529 +10553 10550 10555 10520 +10552 10551 10554 10531 +10555 -1 10553 10772 +10554 -1 10552 10755 +10557 10558 10560 10572 +10556 10559 10561 4769 +10559 10556 10564 10574 +10558 10557 10565 4771 +10561 10562 10556 10580 +10560 10563 10557 4721 +10563 10560 10568 10582 +10562 10561 10569 4723 +10565 10566 10558 10588 +10564 10567 10559 5201 +10567 10564 10570 10590 +10566 10565 10571 5203 +10569 10570 10562 10620 +10568 10571 10563 4905 +10571 10568 10566 10622 +10570 10569 10567 4907 +10573 10574 10576 10556 +10572 10575 10577 10421 +10575 10572 10578 10558 +10574 10573 10579 10423 +10577 -1 10572 10584 +10576 -1 10573 10407 +10579 -1 10574 10592 +10578 -1 10575 10459 +10581 10582 10584 10560 +10580 10583 10585 10509 +10583 10580 10586 10562 +10582 10581 10587 10511 +10585 -1 10580 10576 +10584 -1 10581 10495 +10587 -1 10582 10624 +10586 -1 10583 10547 +10589 10590 10592 10564 +10588 10591 10593 10597 +10591 10588 10594 10566 +10590 10589 10595 10599 +10593 -1 10588 10578 +10592 -1 10589 10613 +10595 -1 10590 10626 +10594 -1 10591 10673 +10597 10598 10601 5200 +10596 10599 10600 10589 +10599 10596 10605 5202 +10598 10597 10604 10591 +10601 10602 10597 10614 +10600 10603 10596 5169 +10603 10600 10609 10616 +10602 10601 10608 5171 +10605 10606 10599 10668 +10604 10607 10598 5617 +10607 10604 10611 10670 +10606 10605 10610 5619 +10609 10610 10603 8872 +10608 10611 10602 10719 +10611 10608 10607 8874 +10610 10609 10606 10721 +10613 -1 10615 10458 +10612 -1 10614 10593 +10615 10616 10613 10600 +10614 10617 10612 10445 +10617 10614 10619 10602 +10616 10615 10618 10447 +10619 -1 10617 10702 +10618 -1 10616 10717 +10621 10622 10624 10568 +10620 10623 10625 10629 +10623 10620 10626 10570 +10622 10621 10627 10631 +10625 -1 10620 10586 +10624 -1 10621 10645 +10627 -1 10622 10594 +10626 -1 10623 10677 +10629 10630 10633 4904 +10628 10631 10632 10621 +10631 10628 10637 4906 +10630 10629 10636 10623 +10633 10634 10629 10646 +10632 10635 10628 4873 +10635 10632 10641 10648 +10634 10633 10640 4875 +10637 10638 10631 10678 +10636 10639 10630 5601 +10639 10636 10643 10680 +10638 10637 10642 5603 +10641 10642 10635 5552 +10640 10643 10634 10851 +10643 10640 10639 5554 +10642 10641 10638 10853 +10645 -1 10647 10546 +10644 -1 10646 10625 +10647 10648 10645 10632 +10646 10649 10644 10533 +10649 10646 10651 10634 +10648 10647 10650 10535 +10651 -1 10649 10778 +10650 -1 10648 10849 +10653 10654 10656 5616 +10652 10655 10657 10669 +10655 10652 10660 5618 +10654 10653 10661 10671 +10657 10658 10652 5600 +10656 10659 10653 10679 +10659 10656 10664 5602 +10658 10657 10665 10681 +10661 10662 10654 8688 +10660 10663 10655 10739 +10663 10660 10666 8690 +10662 10661 10667 10741 +10665 10666 10658 5632 +10664 10667 10659 10915 +10667 10664 10662 5634 +10666 10665 10663 10917 +10669 10670 10673 10604 +10668 10671 10672 10653 +10671 10668 10675 10606 +10670 10669 10674 10655 +10673 -1 10669 10676 +10672 -1 10668 10595 +10675 -1 10671 10736 +10674 -1 10670 10723 +10677 -1 10679 10672 +10676 -1 10678 10627 +10679 10680 10677 10636 +10678 10681 10676 10657 +10681 10678 10683 10638 +10680 10679 10682 10659 +10683 -1 10681 10912 +10682 -1 10680 10855 +10685 -1 10686 10688 +10684 -1 10687 10435 +10687 -1 10684 10692 +10686 -1 10685 10467 +10689 -1 10690 10684 +10688 -1 10691 10171 +10691 -1 10688 10694 +10690 -1 10689 10163 +10693 -1 10694 10686 +10692 -1 10695 10697 +10695 -1 10692 10690 +10694 -1 10693 10705 +10697 -1 10699 10466 +10696 -1 10698 10693 +10699 10700 10697 10706 +10698 10701 10696 10449 +10701 10698 10703 10708 +10700 10699 10702 10451 +10703 -1 10701 10618 +10702 -1 10700 10713 +10705 -1 10707 10162 +10704 -1 10706 10695 +10707 10708 10705 10698 +10706 10709 10704 8897 +10709 10706 10711 10700 +10708 10707 10710 8899 +10711 -1 10709 8914 +10710 -1 10708 10715 +10713 -1 10714 10716 +10712 -1 10715 10703 +10715 -1 10712 10724 +10714 -1 10713 10711 +10717 -1 10718 10712 +10716 -1 10719 10619 +10719 10720 10716 10726 +10718 10721 10717 10609 +10721 10718 10722 10728 +10720 10719 10723 10611 +10723 -1 10720 10732 +10722 -1 10721 10675 +10725 -1 10726 10714 +10724 -1 10727 8915 +10727 10728 10724 10718 +10726 10729 10725 8873 +10729 10726 10730 10720 +10728 10727 10731 8875 +10731 -1 10728 10734 +10730 -1 10729 8883 +10733 -1 10734 10722 +10732 -1 10735 10737 +10735 -1 10732 10730 +10734 -1 10733 10745 +10737 -1 10739 10674 +10736 -1 10738 10733 +10739 10740 10737 10746 +10738 10741 10736 10661 +10741 10738 10743 10748 +10740 10739 10742 10663 +10743 -1 10741 10918 +10742 -1 10740 11203 +10745 -1 10747 8882 +10744 -1 10746 10735 +10747 10748 10745 10738 +10746 10749 10744 8689 +10749 10746 10751 10740 +10748 10747 10750 8691 +10751 -1 10749 8706 +10750 -1 10748 11201 +10753 -1 10754 10756 +10752 -1 10755 10523 +10755 -1 10752 10764 +10754 -1 10753 10555 +10757 -1 10758 10752 +10756 -1 10759 5379 +10759 10760 10756 10766 +10758 10761 10757 5425 +10761 10758 10762 10768 +10760 10759 10763 5427 +10763 -1 10760 10796 +10762 -1 10761 5875 +10765 -1 10766 10754 +10764 -1 10767 10773 +10767 10768 10764 10758 +10766 10769 10765 10781 +10769 10766 10770 10760 +10768 10767 10771 10783 +10771 -1 10768 10798 +10770 -1 10769 10829 +10773 -1 10775 10554 +10772 -1 10774 10765 +10775 10776 10773 10784 +10774 10777 10772 10537 +10777 10774 10779 10786 +10776 10775 10778 10539 +10779 -1 10777 10650 +10778 -1 10776 10841 +10781 10782 10785 5424 +10780 10783 10784 10767 +10783 10780 10789 5426 +10782 10781 10788 10769 +10785 10786 10781 10774 +10784 10787 10780 5393 +10787 10784 10793 10776 +10786 10785 10792 5395 +10789 10790 10783 10824 +10788 10791 10782 5841 +10791 10788 10795 10826 +10790 10789 10794 5843 +10793 10794 10787 5568 +10792 10795 10786 10843 +10795 10792 10791 5570 +10794 10793 10790 10845 +10797 -1 10798 10762 +10796 -1 10799 10801 +10799 -1 10796 10770 +10798 -1 10797 10833 +10801 -1 10803 5874 +10800 -1 10802 10797 +10803 10804 10801 10834 +10802 10805 10800 5857 +10805 10802 10807 10836 +10804 10803 10806 5859 +10807 -1 10805 9922 +10806 -1 10804 10969 +10809 10810 10812 5840 +10808 10811 10813 10825 +10811 10808 10816 5842 +10810 10809 10817 10827 +10813 10814 10808 5856 +10812 10815 10809 10835 +10815 10812 10820 5858 +10814 10813 10821 10837 +10817 10818 10810 5888 +10816 10819 10811 10883 +10819 10816 10822 5890 +10818 10817 10823 10885 +10821 10822 10814 9488 +10820 10823 10815 10991 +10823 10820 10818 9490 +10822 10821 10819 10993 +10825 10826 10829 10788 +10824 10827 10828 10809 +10827 10824 10831 10790 +10826 10825 10830 10811 +10829 -1 10825 10832 +10828 -1 10824 10771 +10831 -1 10827 10880 +10830 -1 10826 10847 +10833 -1 10835 10828 +10832 -1 10834 10799 +10835 10836 10833 10802 +10834 10837 10832 10813 +10837 10834 10839 10804 +10836 10835 10838 10815 +10839 -1 10837 10988 +10838 -1 10836 10971 +10841 -1 10842 10848 +10840 -1 10843 10779 +10843 10844 10840 10856 +10842 10845 10841 10793 +10845 10842 10846 10858 +10844 10843 10847 10795 +10847 -1 10844 10872 +10846 -1 10845 10831 +10849 -1 10850 10840 +10848 -1 10851 10651 +10851 10852 10848 10860 +10850 10853 10849 10641 +10853 10850 10854 10862 +10852 10851 10855 10643 +10855 -1 10852 10904 +10854 -1 10853 10683 +10857 10858 10860 10842 +10856 10859 10861 5569 +10859 10856 10864 10844 +10858 10857 10865 5571 +10861 10862 10856 10850 +10860 10863 10857 5553 +10863 10860 10868 10852 +10862 10861 10869 5555 +10865 10866 10858 10874 +10864 10867 10859 5921 +10867 10864 10870 10876 +10866 10865 10871 5923 +10869 10870 10862 10906 +10868 10871 10863 5665 +10871 10868 10866 10908 +10870 10869 10867 5667 +10873 -1 10874 10846 +10872 -1 10875 10881 +10875 10876 10872 10864 +10874 10877 10873 10889 +10877 10874 10878 10866 +10876 10875 10879 10891 +10879 -1 10876 10910 +10878 -1 10877 10957 +10881 -1 10883 10830 +10880 -1 10882 10873 +10883 10884 10881 10892 +10882 10885 10880 10817 +10885 10882 10887 10894 +10884 10883 10886 10819 +10887 -1 10885 10994 +10886 -1 10884 11077 +10889 10890 10893 5920 +10888 10891 10892 10875 +10891 10888 10897 5922 +10890 10889 10896 10877 +10893 10894 10889 10882 +10892 10895 10888 5889 +10895 10892 10901 10884 +10894 10893 10900 5891 +10897 10898 10891 10952 +10896 10899 10890 8785 +10899 10896 10903 10954 +10898 10897 10902 8787 +10901 10902 10895 9424 +10900 10903 10894 11073 +10903 10900 10899 9426 +10902 10901 10898 11075 +10905 -1 10906 10854 +10904 -1 10907 10913 +10907 10908 10904 10868 +10906 10909 10905 10921 +10909 10906 10910 10870 +10908 10907 10911 10923 +10911 -1 10908 10878 +10910 -1 10909 10961 +10913 -1 10915 10682 +10912 -1 10914 10905 +10915 10916 10913 10924 +10914 10917 10912 10665 +10917 10914 10919 10926 +10916 10915 10918 10667 +10919 -1 10917 10742 +10918 -1 10916 11197 +10921 10922 10925 5664 +10920 10923 10924 10907 +10923 10920 10929 5666 +10922 10921 10928 10909 +10925 10926 10921 10914 +10924 10927 10920 5633 +10927 10924 10933 10916 +10926 10925 10932 5635 +10929 10930 10923 10962 +10928 10931 10922 8737 +10931 10928 10935 10964 +10930 10929 10934 8739 +10933 10934 10927 8672 +10932 10935 10926 11193 +10935 10932 10931 8674 +10934 10933 10930 11195 +10937 10938 10940 8784 +10936 10939 10941 10953 +10939 10936 10944 8786 +10938 10937 10945 10955 +10941 10942 10936 8736 +10940 10943 10937 10963 +10943 10940 10948 8738 +10942 10941 10949 10965 +10945 10946 10938 9440 +10944 10947 10939 11115 +10947 10944 10950 9442 +10946 10945 10951 11117 +10949 10950 10942 8752 +10948 10951 10943 11219 +10951 10948 10946 8754 +10950 10949 10947 11221 +10953 10954 10957 10896 +10952 10955 10956 10937 +10955 10952 10959 10898 +10954 10953 10958 10939 +10957 -1 10953 10960 +10956 -1 10952 10879 +10959 -1 10955 11112 +10958 -1 10954 11079 +10961 -1 10963 10956 +10960 -1 10962 10911 +10963 10964 10961 10928 +10962 10965 10960 10941 +10965 10962 10967 10930 +10964 10963 10966 10943 +10967 -1 10965 11216 +10966 -1 10964 11199 +10969 -1 10970 10972 +10968 -1 10971 10807 +10971 -1 10968 10980 +10970 -1 10969 10839 +10973 -1 10974 10968 +10972 -1 10975 9923 +10975 10976 10972 10982 +10974 10977 10973 9913 +10977 10974 10978 10984 +10976 10975 10979 9915 +10979 -1 10976 11012 +10978 -1 10977 10027 +10981 -1 10982 10970 +10980 -1 10983 10989 +10983 10984 10980 10974 +10982 10985 10981 10997 +10985 10982 10986 10976 +10984 10983 10987 10999 +10987 -1 10984 11014 +10986 -1 10985 11045 +10989 -1 10991 10838 +10988 -1 10990 10981 +10991 10992 10989 11000 +10990 10993 10988 10821 +10993 10990 10995 11002 +10992 10991 10994 10823 +10995 -1 10993 10886 +10994 -1 10992 11085 +10997 10998 11001 9912 +10996 10999 11000 10983 +10999 10996 11005 9914 +10998 10997 11004 10985 +11001 11002 10997 10990 +11000 11003 10996 9489 +11003 11000 11009 10992 +11002 11001 11008 9491 +11005 11006 10999 11040 +11004 11007 10998 9969 +11007 11004 11011 11042 +11006 11005 11010 9971 +11009 11010 11003 9520 +11008 11011 11002 11081 +11011 11008 11007 9522 +11010 11009 11006 11083 +11013 -1 11014 10978 +11012 -1 11015 11017 +11015 -1 11012 10986 +11014 -1 11013 11049 +11017 -1 11019 10026 +11016 -1 11018 11013 +11019 11020 11017 11050 +11018 11021 11016 10013 +11021 11018 11023 11052 +11020 11019 11022 10015 +11023 -1 11021 11898 +11022 -1 11020 12209 +11025 11026 11028 9968 +11024 11027 11029 11041 +11027 11024 11032 9970 +11026 11025 11033 11043 +11029 11030 11024 10012 +11028 11031 11025 11051 +11031 11028 11036 10014 +11030 11029 11037 11053 +11033 11034 11026 9996 +11032 11035 11027 11147 +11035 11032 11038 9998 +11034 11033 11039 11149 +11037 11038 11030 11912 +11036 11039 11031 12223 +11039 11036 11034 11914 +11038 11037 11035 12225 +11041 11042 11045 11004 +11040 11043 11044 11025 +11043 11040 11047 11006 +11042 11041 11046 11027 +11045 -1 11041 11048 +11044 -1 11040 10987 +11047 -1 11043 11144 +11046 -1 11042 11087 +11049 -1 11051 11044 +11048 -1 11050 11015 +11051 11052 11049 11018 +11050 11053 11048 11029 +11053 11050 11055 11020 +11052 11051 11054 11031 +11055 -1 11053 12220 +11054 -1 11052 12211 +11057 11058 11060 11072 +11056 11059 11061 9425 +11059 11056 11064 11074 +11058 11057 11065 9427 +11061 11062 11056 11080 +11060 11063 11057 9521 +11063 11060 11068 11082 +11062 11061 11069 9523 +11065 11066 11058 11088 +11064 11067 11059 9473 +11067 11064 11070 11090 +11066 11065 11071 9475 +11069 11070 11062 11120 +11068 11071 11063 9809 +11071 11068 11066 11122 +11070 11069 11067 9811 +11073 11074 11076 11056 +11072 11075 11077 10901 +11075 11072 11078 11058 +11074 11073 11079 10903 +11077 -1 11072 11084 +11076 -1 11073 10887 +11079 -1 11074 11092 +11078 -1 11075 10959 +11081 11082 11084 11060 +11080 11083 11085 11009 +11083 11080 11086 11062 +11082 11081 11087 11011 +11085 -1 11080 11076 +11084 -1 11081 10995 +11087 -1 11082 11124 +11086 -1 11083 11047 +11089 11090 11092 11064 +11088 11091 11093 11097 +11091 11088 11094 11066 +11090 11089 11095 11099 +11093 -1 11088 11078 +11092 -1 11089 11113 +11095 -1 11090 11126 +11094 -1 11091 11173 +11097 11098 11101 9472 +11096 11099 11100 11089 +11099 11096 11105 9474 +11098 11097 11104 11091 +11101 11102 11097 11114 +11100 11103 11096 9441 +11103 11100 11109 11116 +11102 11101 11108 9443 +11105 11106 11099 11168 +11104 11107 11098 9761 +11107 11104 11111 11170 +11106 11105 11110 9763 +11109 11110 11103 9704 +11108 11111 11102 11239 +11111 11108 11107 9706 +11110 11109 11106 11241 +11113 -1 11115 10958 +11112 -1 11114 11093 +11115 11116 11113 11100 +11114 11117 11112 10945 +11117 11114 11119 11102 +11116 11115 11118 10947 +11119 -1 11117 11222 +11118 -1 11116 11237 +11121 11122 11124 11068 +11120 11123 11125 11129 +11123 11120 11126 11070 +11122 11121 11127 11131 +11125 -1 11120 11086 +11124 -1 11121 11145 +11127 -1 11122 11094 +11126 -1 11123 11177 +11129 11130 11133 9808 +11128 11131 11132 11121 +11131 11128 11137 9810 +11130 11129 11136 11123 +11133 11134 11129 11146 +11132 11135 11128 9997 +11135 11132 11141 11148 +11134 11133 11140 9999 +11137 11138 11131 11178 +11136 11139 11130 9789 +11139 11136 11143 11180 +11138 11137 11142 9791 +11141 11142 11135 12016 +11140 11143 11134 12243 +11143 11140 11139 12018 +11142 11141 11138 12245 +11145 -1 11147 11046 +11144 -1 11146 11125 +11147 11148 11145 11132 +11146 11149 11144 11033 +11149 11146 11151 11134 +11148 11147 11150 11035 +11151 -1 11149 12226 +11150 -1 11148 12241 +11153 11154 11156 9760 +11152 11155 11157 11169 +11155 11152 11160 9762 +11154 11153 11161 11171 +11157 11158 11152 9788 +11156 11159 11153 11179 +11159 11156 11164 9790 +11158 11157 11165 11181 +11161 11162 11154 9836 +11160 11163 11155 11259 +11163 11160 11166 9838 +11162 11161 11167 11261 +11165 11166 11158 12040 +11164 11167 11159 12263 +11167 11164 11162 12042 +11166 11165 11163 12265 +11169 11170 11173 11104 +11168 11171 11172 11153 +11171 11168 11175 11106 +11170 11169 11174 11155 +11173 -1 11169 11176 +11172 -1 11168 11095 +11175 -1 11171 11256 +11174 -1 11170 11243 +11177 -1 11179 11172 +11176 -1 11178 11127 +11179 11180 11177 11136 +11178 11181 11176 11157 +11181 11178 11183 11138 +11180 11179 11182 11159 +11183 -1 11181 12260 +11182 -1 11180 12247 +11185 11186 11188 11192 +11184 11187 11189 8673 +11187 11184 11190 11194 +11186 11185 11191 8675 +11189 -1 11184 11200 +11188 -1 11185 8707 +11191 -1 11186 11204 +11190 -1 11187 8771 +11193 11194 11196 11184 +11192 11195 11197 10933 +11195 11192 11198 11186 +11194 11193 11199 10935 +11197 -1 11192 11202 +11196 -1 11193 10919 +11199 -1 11194 11206 +11198 -1 11195 10967 +11201 -1 11202 11188 +11200 -1 11203 10751 +11203 -1 11200 11196 +11202 -1 11201 10743 +11205 -1 11206 11190 +11204 -1 11207 11209 +11207 -1 11204 11198 +11206 -1 11205 11217 +11209 -1 11211 8770 +11208 -1 11210 11205 +11211 11212 11209 11218 +11210 11213 11208 8753 +11213 11210 11215 11220 +11212 11211 11214 8755 +11215 -1 11213 9714 +11214 -1 11212 11225 +11217 -1 11219 10966 +11216 -1 11218 11207 +11219 11220 11217 11210 +11218 11221 11216 10949 +11221 11218 11223 11212 +11220 11219 11222 10951 +11223 -1 11221 11118 +11222 -1 11220 11227 +11225 -1 11226 11228 +11224 -1 11227 11215 +11227 -1 11224 11236 +11226 -1 11225 11223 +11229 -1 11230 11224 +11228 -1 11231 9715 +11231 11232 11228 11238 +11230 11233 11229 9705 +11233 11230 11234 11240 +11232 11231 11235 9707 +11235 -1 11232 11244 +11234 -1 11233 9851 +11237 -1 11238 11226 +11236 -1 11239 11119 +11239 11240 11236 11230 +11238 11241 11237 11109 +11241 11238 11242 11232 +11240 11239 11243 11111 +11243 -1 11240 11246 +11242 -1 11241 11175 +11245 -1 11246 11234 +11244 -1 11247 11249 +11247 -1 11244 11242 +11246 -1 11245 11257 +11249 -1 11251 9850 +11248 -1 11250 11245 +11251 11252 11249 11258 +11250 11253 11248 9837 +11253 11250 11255 11260 +11252 11251 11254 9839 +11255 -1 11253 12198 +11254 -1 11252 12283 +11257 -1 11259 11174 +11256 -1 11258 11247 +11259 11260 11257 11250 +11258 11261 11256 11161 +11261 11258 11263 11252 +11260 11259 11262 11163 +11263 -1 11261 12266 +11262 -1 11260 12281 +11265 -1 11266 11268 +11264 -1 11267 6963 +11267 -1 11264 11280 +11266 -1 11265 6995 +11269 -1 11270 11264 +11268 -1 11271 11273 +11271 -1 11268 11282 +11270 -1 11269 11313 +11273 -1 11275 6962 +11272 -1 11274 11269 +11275 11276 11273 11308 +11274 11277 11272 6777 +11277 11274 11279 11310 +11276 11275 11278 6779 +11279 -1 11277 6794 +11278 -1 11276 11325 +11281 -1 11282 11266 +11280 -1 11283 11285 +11283 -1 11280 11270 +11282 -1 11281 11317 +11285 -1 11287 6994 +11284 -1 11286 11281 +11287 11288 11285 11318 +11286 11289 11284 6977 +11289 11286 11291 11320 +11288 11287 11290 6979 +11291 -1 11289 7090 +11290 -1 11288 11413 +11293 11294 11296 6776 +11292 11295 11297 11309 +11295 11292 11300 6778 +11294 11293 11301 11311 +11297 11298 11292 6976 +11296 11299 11293 11319 +11299 11296 11304 6978 +11298 11297 11305 11321 +11301 11302 11294 6640 +11300 11303 11295 11347 +11303 11300 11306 6642 +11302 11301 11307 11349 +11305 11306 11298 6704 +11304 11307 11299 11435 +11307 11304 11302 6706 +11306 11305 11303 11437 +11309 11310 11313 11274 +11308 11311 11312 11293 +11311 11308 11315 11276 +11310 11309 11314 11295 +11313 -1 11309 11316 +11312 -1 11308 11271 +11315 -1 11311 11344 +11314 -1 11310 11327 +11317 -1 11319 11312 +11316 -1 11318 11283 +11319 11320 11317 11286 +11318 11321 11316 11297 +11321 11318 11323 11288 +11320 11319 11322 11299 +11323 -1 11321 11432 +11322 -1 11320 11415 +11325 -1 11326 11328 +11324 -1 11327 11279 +11327 -1 11324 11336 +11326 -1 11325 11315 +11329 -1 11330 11324 +11328 -1 11331 6795 +11331 11332 11328 11338 +11330 11333 11329 6761 +11333 11330 11334 11340 +11332 11331 11335 6763 +11335 -1 11332 11368 +11334 -1 11333 6907 +11337 -1 11338 11326 +11336 -1 11339 11345 +11339 11340 11336 11330 +11338 11341 11337 11353 +11341 11338 11342 11332 +11340 11339 11343 11355 +11343 -1 11340 11370 +11342 -1 11341 11401 +11345 -1 11347 11314 +11344 -1 11346 11337 +11347 11348 11345 11356 +11346 11349 11344 11301 +11349 11346 11351 11358 +11348 11347 11350 11303 +11351 -1 11349 11438 +11350 -1 11348 11521 +11353 11354 11357 6760 +11352 11355 11356 11339 +11355 11352 11361 6762 +11354 11353 11360 11341 +11357 11358 11353 11346 +11356 11359 11352 6641 +11359 11356 11365 11348 +11358 11357 11364 6643 +11361 11362 11355 11396 +11360 11363 11354 6825 +11363 11360 11367 11398 +11362 11361 11366 6827 +11365 11366 11359 6688 +11364 11367 11358 11517 +11367 11364 11363 6690 +11366 11365 11362 11519 +11369 -1 11370 11334 +11368 -1 11371 11373 +11371 -1 11368 11342 +11370 -1 11369 11405 +11373 -1 11375 6906 +11372 -1 11374 11369 +11375 11376 11373 11406 +11374 11377 11372 6889 +11377 11374 11379 11408 +11376 11375 11378 6891 +11379 -1 11377 7346 +11378 -1 11376 11629 +11381 11382 11384 6824 +11380 11383 11385 11397 +11383 11380 11388 6826 +11382 11381 11389 11399 +11385 11386 11380 6888 +11384 11387 11381 11407 +11387 11384 11392 6890 +11386 11385 11393 11409 +11389 11390 11382 6840 +11388 11391 11383 11559 +11391 11388 11394 6842 +11390 11389 11395 11561 +11393 11394 11386 7360 +11392 11395 11387 11651 +11395 11392 11390 7362 +11394 11393 11391 11653 +11397 11398 11401 11360 +11396 11399 11400 11381 +11399 11396 11403 11362 +11398 11397 11402 11383 +11401 -1 11397 11404 +11400 -1 11396 11343 +11403 -1 11399 11556 +11402 -1 11398 11523 +11405 -1 11407 11400 +11404 -1 11406 11371 +11407 11408 11405 11374 +11406 11409 11404 11385 +11409 11406 11411 11376 +11408 11407 11410 11387 +11411 -1 11409 11648 +11410 -1 11408 11631 +11413 -1 11414 11416 +11412 -1 11415 11291 +11415 -1 11412 11424 +11414 -1 11413 11323 +11417 -1 11418 11412 +11416 -1 11419 7091 +11419 11420 11416 11426 +11418 11421 11417 7081 +11421 11418 11422 11428 +11420 11419 11423 7083 +11423 -1 11420 11456 +11422 -1 11421 7203 +11425 -1 11426 11414 +11424 -1 11427 11433 +11427 11428 11424 11418 +11426 11429 11425 11441 +11429 11426 11430 11420 +11428 11427 11431 11443 +11431 -1 11428 11458 +11430 -1 11429 11489 +11433 -1 11435 11322 +11432 -1 11434 11425 +11435 11436 11433 11444 +11434 11437 11432 11305 +11437 11434 11439 11446 +11436 11435 11438 11307 +11439 -1 11437 11350 +11438 -1 11436 11529 +11441 11442 11445 7080 +11440 11443 11444 11427 +11443 11440 11449 7082 +11442 11441 11448 11429 +11445 11446 11441 11434 +11444 11447 11440 6705 +11447 11444 11453 11436 +11446 11445 11452 6707 +11449 11450 11443 11484 +11448 11451 11442 7121 +11451 11448 11455 11486 +11450 11449 11454 7123 +11453 11454 11447 6736 +11452 11455 11446 11525 +11455 11452 11451 6738 +11454 11453 11450 11527 +11457 -1 11458 11422 +11456 -1 11459 11461 +11459 -1 11456 11430 +11458 -1 11457 11493 +11461 -1 11463 7202 +11460 -1 11462 11457 +11463 11464 11461 11494 +11462 11465 11460 7185 +11465 11462 11467 11496 +11464 11463 11466 7187 +11467 -1 11465 10318 +11466 -1 11464 12061 +11469 11470 11472 7120 +11468 11471 11473 11485 +11471 11468 11476 7122 +11470 11469 11477 11487 +11473 11474 11468 7184 +11472 11475 11469 11495 +11475 11472 11480 7186 +11474 11473 11481 11497 +11477 11478 11470 7136 +11476 11479 11471 11591 +11479 11476 11482 7138 +11478 11477 11483 11593 +11481 11482 11474 9248 +11480 11483 11475 12075 +11483 11480 11478 9250 +11482 11481 11479 12077 +11485 11486 11489 11448 +11484 11487 11488 11469 +11487 11484 11491 11450 +11486 11485 11490 11471 +11489 -1 11485 11492 +11488 -1 11484 11431 +11491 -1 11487 11588 +11490 -1 11486 11531 +11493 -1 11495 11488 +11492 -1 11494 11459 +11495 11496 11493 11462 +11494 11497 11492 11473 +11497 11494 11499 11464 +11496 11495 11498 11475 +11499 -1 11497 12072 +11498 -1 11496 12063 +11501 11502 11504 11516 +11500 11503 11505 6689 +11503 11500 11508 11518 +11502 11501 11509 6691 +11505 11506 11500 11524 +11504 11507 11501 6737 +11507 11504 11512 11526 +11506 11505 11513 6739 +11509 11510 11502 11532 +11508 11511 11503 6873 +11511 11508 11514 11534 +11510 11509 11515 6875 +11513 11514 11506 11564 +11512 11515 11507 7169 +11515 11512 11510 11566 +11514 11513 11511 7171 +11517 11518 11520 11500 +11516 11519 11521 11365 +11519 11516 11522 11502 +11518 11517 11523 11367 +11521 -1 11516 11528 +11520 -1 11517 11351 +11523 -1 11518 11536 +11522 -1 11519 11403 +11525 11526 11528 11504 +11524 11527 11529 11453 +11527 11524 11530 11506 +11526 11525 11531 11455 +11529 -1 11524 11520 +11528 -1 11525 11439 +11531 -1 11526 11568 +11530 -1 11527 11491 +11533 11534 11536 11508 +11532 11535 11537 11541 +11535 11532 11538 11510 +11534 11533 11539 11543 +11537 -1 11532 11522 +11536 -1 11533 11557 +11539 -1 11534 11570 +11538 -1 11535 11617 +11541 11542 11545 6872 +11540 11543 11544 11533 +11543 11540 11549 6874 +11542 11541 11548 11535 +11545 11546 11541 11558 +11544 11547 11540 6841 +11547 11544 11553 11560 +11546 11545 11552 6843 +11549 11550 11543 11612 +11548 11551 11542 7569 +11551 11548 11555 11614 +11550 11549 11554 7571 +11553 11554 11547 7520 +11552 11555 11546 11727 +11555 11552 11551 7522 +11554 11553 11550 11729 +11557 -1 11559 11402 +11556 -1 11558 11537 +11559 11560 11557 11544 +11558 11561 11556 11389 +11561 11558 11563 11546 +11560 11559 11562 11391 +11563 -1 11561 11654 +11562 -1 11560 11725 +11565 11566 11568 11512 +11564 11567 11569 11573 +11567 11564 11570 11514 +11566 11565 11571 11575 +11569 -1 11564 11530 +11568 -1 11565 11589 +11571 -1 11566 11538 +11570 -1 11567 11621 +11573 11574 11577 7168 +11572 11575 11576 11565 +11575 11572 11581 7170 +11574 11573 11580 11567 +11577 11578 11573 11590 +11576 11579 11572 7137 +11579 11576 11585 11592 +11578 11577 11584 7139 +11581 11582 11575 11622 +11580 11583 11574 7585 +11583 11580 11587 11624 +11582 11581 11586 7587 +11585 11586 11579 9224 +11584 11587 11578 12095 +11587 11584 11583 9226 +11586 11585 11582 12097 +11589 -1 11591 11490 +11588 -1 11590 11569 +11591 11592 11589 11576 +11590 11593 11588 11477 +11593 11590 11595 11578 +11592 11591 11594 11479 +11595 -1 11593 12078 +11594 -1 11592 12093 +11597 11598 11600 7568 +11596 11599 11601 11613 +11599 11596 11604 7570 +11598 11597 11605 11615 +11601 11602 11596 7584 +11600 11603 11597 11623 +11603 11600 11608 7586 +11602 11601 11609 11625 +11605 11606 11598 7600 +11604 11607 11599 11791 +11607 11604 11610 7602 +11606 11605 11611 11793 +11609 11610 11602 9040 +11608 11611 11603 12115 +11611 11608 11606 9042 +11610 11609 11607 12117 +11613 11614 11617 11548 +11612 11615 11616 11597 +11615 11612 11619 11550 +11614 11613 11618 11599 +11617 -1 11613 11620 +11616 -1 11612 11539 +11619 -1 11615 11788 +11618 -1 11614 11731 +11621 -1 11623 11616 +11620 -1 11622 11571 +11623 11624 11621 11580 +11622 11625 11620 11601 +11625 11622 11627 11582 +11624 11623 11626 11603 +11627 -1 11625 12112 +11626 -1 11624 12099 +11629 -1 11630 11632 +11628 -1 11631 11379 +11631 -1 11628 11640 +11630 -1 11629 11411 +11633 -1 11634 11628 +11632 -1 11635 7347 +11635 11636 11632 11642 +11634 11637 11633 7393 +11637 11634 11638 11644 +11636 11635 11639 7395 +11639 -1 11636 11672 +11638 -1 11637 7795 +11641 -1 11642 11630 +11640 -1 11643 11649 +11643 11644 11640 11634 +11642 11645 11641 11657 +11645 11642 11646 11636 +11644 11643 11647 11659 +11647 -1 11644 11674 +11646 -1 11645 11705 +11649 -1 11651 11410 +11648 -1 11650 11641 +11651 11652 11649 11660 +11650 11653 11648 11393 +11653 11650 11655 11662 +11652 11651 11654 11395 +11655 -1 11653 11562 +11654 -1 11652 11717 +11657 11658 11661 7392 +11656 11659 11660 11643 +11659 11656 11665 7394 +11658 11657 11664 11645 +11661 11662 11657 11650 +11660 11663 11656 7361 +11663 11660 11669 11652 +11662 11661 11668 7363 +11665 11666 11659 11700 +11664 11667 11658 7761 +11667 11664 11671 11702 +11666 11665 11670 7763 +11669 11670 11663 7536 +11668 11671 11662 11719 +11671 11668 11667 7538 +11670 11669 11666 11721 +11673 -1 11674 11638 +11672 -1 11675 11677 +11675 -1 11672 11646 +11674 -1 11673 11709 +11677 -1 11679 7794 +11676 -1 11678 11673 +11679 11680 11677 11710 +11678 11681 11676 7777 +11681 11678 11683 11712 +11680 11679 11682 7779 +11683 -1 11681 9954 +11682 -1 11680 11845 +11685 11686 11688 7760 +11684 11687 11689 11701 +11687 11684 11692 7762 +11686 11685 11693 11703 +11689 11690 11684 7776 +11688 11691 11685 11711 +11691 11688 11696 7778 +11690 11689 11697 11713 +11693 11694 11686 7808 +11692 11695 11687 11759 +11695 11692 11698 7810 +11694 11693 11699 11761 +11697 11698 11690 9616 +11696 11699 11691 11867 +11699 11696 11694 9618 +11698 11697 11695 11869 +11701 11702 11705 11664 +11700 11703 11704 11685 +11703 11700 11707 11666 +11702 11701 11706 11687 +11705 -1 11701 11708 +11704 -1 11700 11647 +11707 -1 11703 11756 +11706 -1 11702 11723 +11709 -1 11711 11704 +11708 -1 11710 11675 +11711 11712 11709 11678 +11710 11713 11708 11689 +11713 11710 11715 11680 +11712 11711 11714 11691 +11715 -1 11713 11864 +11714 -1 11712 11847 +11717 -1 11718 11724 +11716 -1 11719 11655 +11719 11720 11716 11732 +11718 11721 11717 11669 +11721 11718 11722 11734 +11720 11719 11723 11671 +11723 -1 11720 11748 +11722 -1 11721 11707 +11725 -1 11726 11716 +11724 -1 11727 11563 +11727 11728 11724 11736 +11726 11729 11725 11553 +11729 11726 11730 11738 +11728 11727 11731 11555 +11731 -1 11728 11780 +11730 -1 11729 11619 +11733 11734 11736 11718 +11732 11735 11737 7537 +11735 11732 11740 11720 +11734 11733 11741 7539 +11737 11738 11732 11726 +11736 11739 11733 7521 +11739 11736 11744 11728 +11738 11737 11745 7523 +11741 11742 11734 11750 +11740 11743 11735 7841 +11743 11740 11746 11752 +11742 11741 11747 7843 +11745 11746 11738 11782 +11744 11747 11739 7633 +11747 11744 11742 11784 +11746 11745 11743 7635 +11749 -1 11750 11722 +11748 -1 11751 11757 +11751 11752 11748 11740 +11750 11753 11749 11765 +11753 11750 11754 11742 +11752 11751 11755 11767 +11755 -1 11752 11786 +11754 -1 11753 11833 +11757 -1 11759 11706 +11756 -1 11758 11749 +11759 11760 11757 11768 +11758 11761 11756 11693 +11761 11758 11763 11770 +11760 11759 11762 11695 +11763 -1 11761 11870 +11762 -1 11760 11953 +11765 11766 11769 7840 +11764 11767 11768 11751 +11767 11764 11773 7842 +11766 11765 11772 11753 +11769 11770 11765 11758 +11768 11771 11764 7809 +11771 11768 11777 11760 +11770 11769 11776 7811 +11773 11774 11767 11828 +11772 11775 11766 9137 +11775 11772 11779 11830 +11774 11773 11778 9139 +11777 11778 11771 9552 +11776 11779 11770 11949 +11779 11776 11775 9554 +11778 11777 11774 11951 +11781 -1 11782 11730 +11780 -1 11783 11789 +11783 11784 11780 11744 +11782 11785 11781 11797 +11785 11782 11786 11746 +11784 11783 11787 11799 +11787 -1 11784 11754 +11786 -1 11785 11837 +11789 -1 11791 11618 +11788 -1 11790 11781 +11791 11792 11789 11800 +11790 11793 11788 11605 +11793 11790 11795 11802 +11792 11791 11794 11607 +11795 -1 11793 12118 +11794 -1 11792 12141 +11797 11798 11801 7632 +11796 11799 11800 11783 +11799 11796 11805 7634 +11798 11797 11804 11785 +11801 11802 11797 11790 +11800 11803 11796 7601 +11803 11800 11809 11792 +11802 11801 11808 7603 +11805 11806 11799 11838 +11804 11807 11798 9089 +11807 11804 11811 11840 +11806 11805 11810 9091 +11809 11810 11803 9024 +11808 11811 11802 12137 +11811 11808 11807 9026 +11810 11809 11806 12139 +11813 11814 11816 9136 +11812 11815 11817 11829 +11815 11812 11820 9138 +11814 11813 11821 11831 +11817 11818 11812 9088 +11816 11819 11813 11839 +11819 11816 11824 9090 +11818 11817 11825 11841 +11821 11822 11814 9568 +11820 11823 11815 11991 +11823 11820 11826 9570 +11822 11821 11827 11993 +11825 11826 11818 9104 +11824 11827 11819 12163 +11827 11824 11822 9106 +11826 11825 11823 12165 +11829 11830 11833 11772 +11828 11831 11832 11813 +11831 11828 11835 11774 +11830 11829 11834 11815 +11833 -1 11829 11836 +11832 -1 11828 11755 +11835 -1 11831 11988 +11834 -1 11830 11955 +11837 -1 11839 11832 +11836 -1 11838 11787 +11839 11840 11837 11804 +11838 11841 11836 11817 +11841 11838 11843 11806 +11840 11839 11842 11819 +11843 -1 11841 12160 +11842 -1 11840 12143 +11845 -1 11846 11848 +11844 -1 11847 11683 +11847 -1 11844 11856 +11846 -1 11845 11715 +11849 -1 11850 11844 +11848 -1 11851 9955 +11851 11852 11848 11858 +11850 11853 11849 9945 +11853 11850 11854 11860 +11852 11851 11855 9947 +11855 -1 11852 11888 +11854 -1 11853 10035 +11857 -1 11858 11846 +11856 -1 11859 11865 +11859 11860 11856 11850 +11858 11861 11857 11873 +11861 11858 11862 11852 +11860 11859 11863 11875 +11863 -1 11860 11890 +11862 -1 11861 11921 +11865 -1 11867 11714 +11864 -1 11866 11857 +11867 11868 11865 11876 +11866 11869 11864 11697 +11869 11866 11871 11878 +11868 11867 11870 11699 +11871 -1 11869 11762 +11870 -1 11868 11961 +11873 11874 11877 9944 +11872 11875 11876 11859 +11875 11872 11881 9946 +11874 11873 11880 11861 +11877 11878 11873 11866 +11876 11879 11872 9617 +11879 11876 11885 11868 +11878 11877 11884 9619 +11881 11882 11875 11916 +11880 11883 11874 9985 +11883 11880 11887 11918 +11882 11881 11886 9987 +11885 11886 11879 9648 +11884 11887 11878 11957 +11887 11884 11883 9650 +11886 11885 11882 11959 +11889 -1 11890 11854 +11888 -1 11891 11893 +11891 -1 11888 11862 +11890 -1 11889 11925 +11893 -1 11895 10034 +11892 -1 11894 11889 +11895 11896 11893 11926 +11894 11897 11892 10017 +11897 11894 11899 11928 +11896 11895 11898 10019 +11899 -1 11897 11022 +11898 -1 11896 12213 +11901 11902 11904 9984 +11900 11903 11905 11917 +11903 11900 11908 9986 +11902 11901 11909 11919 +11905 11906 11900 10016 +11904 11907 11901 11927 +11907 11904 11912 10018 +11906 11905 11913 11929 +11909 11910 11902 10000 +11908 11911 11903 12023 +11911 11908 11914 10002 +11910 11909 11915 12025 +11913 11914 11906 11036 +11912 11915 11907 12231 +11915 11912 11910 11038 +11914 11913 11911 12233 +11917 11918 11921 11880 +11916 11919 11920 11901 +11919 11916 11923 11882 +11918 11917 11922 11903 +11921 -1 11917 11924 +11920 -1 11916 11863 +11923 -1 11919 12020 +11922 -1 11918 11963 +11925 -1 11927 11920 +11924 -1 11926 11891 +11927 11928 11925 11894 +11926 11929 11924 11905 +11929 11926 11931 11896 +11928 11927 11930 11907 +11931 -1 11929 12228 +11930 -1 11928 12215 +11933 11934 11936 11948 +11932 11935 11937 9553 +11935 11932 11940 11950 +11934 11933 11941 9555 +11937 11938 11932 11956 +11936 11939 11933 9649 +11939 11936 11944 11958 +11938 11937 11945 9651 +11941 11942 11934 11964 +11940 11943 11935 9601 +11943 11940 11946 11966 +11942 11941 11947 9603 +11945 11946 11938 11996 +11944 11947 11939 9825 +11947 11944 11942 11998 +11946 11945 11943 9827 +11949 11950 11952 11932 +11948 11951 11953 11777 +11951 11948 11954 11934 +11950 11949 11955 11779 +11953 -1 11948 11960 +11952 -1 11949 11763 +11955 -1 11950 11968 +11954 -1 11951 11835 +11957 11958 11960 11936 +11956 11959 11961 11885 +11959 11956 11962 11938 +11958 11957 11963 11887 +11961 -1 11956 11952 +11960 -1 11957 11871 +11963 -1 11958 12000 +11962 -1 11959 11923 +11965 11966 11968 11940 +11964 11967 11969 11973 +11967 11964 11970 11942 +11966 11965 11971 11975 +11969 -1 11964 11954 +11968 -1 11965 11989 +11971 -1 11966 12002 +11970 -1 11967 12049 +11973 11974 11977 9600 +11972 11975 11976 11965 +11975 11972 11981 9602 +11974 11973 11980 11967 +11977 11978 11973 11990 +11976 11979 11972 9569 +11979 11976 11985 11992 +11978 11977 11984 9571 +11981 11982 11975 12044 +11980 11983 11974 9777 +11983 11980 11987 12046 +11982 11981 11986 9779 +11985 11986 11979 9736 +11984 11987 11978 12183 +11987 11984 11983 9738 +11986 11985 11982 12185 +11989 -1 11991 11834 +11988 -1 11990 11969 +11991 11992 11989 11976 +11990 11993 11988 11821 +11993 11990 11995 11978 +11992 11991 11994 11823 +11995 -1 11993 12166 +11994 -1 11992 12181 +11997 11998 12000 11944 +11996 11999 12001 12005 +11999 11996 12002 11946 +11998 11997 12003 12007 +12001 -1 11996 11962 +12000 -1 11997 12021 +12003 -1 11998 11970 +12002 -1 11999 12053 +12005 12006 12009 9824 +12004 12007 12008 11997 +12007 12004 12013 9826 +12006 12005 12012 11999 +12009 12010 12005 12022 +12008 12011 12004 10001 +12011 12008 12017 12024 +12010 12009 12016 10003 +12013 12014 12007 12054 +12012 12015 12006 9793 +12015 12012 12019 12056 +12014 12013 12018 9795 +12017 12018 12011 11140 +12016 12019 12010 12251 +12019 12016 12015 11142 +12018 12017 12014 12253 +12021 -1 12023 11922 +12020 -1 12022 12001 +12023 12024 12021 12008 +12022 12025 12020 11909 +12025 12022 12027 12010 +12024 12023 12026 11911 +12027 -1 12025 12234 +12026 -1 12024 12249 +12029 12030 12032 9776 +12028 12031 12033 12045 +12031 12028 12036 9778 +12030 12029 12037 12047 +12033 12034 12028 9792 +12032 12035 12029 12055 +12035 12032 12040 9794 +12034 12033 12041 12057 +12037 12038 12030 9840 +12036 12039 12031 12203 +12039 12036 12042 9842 +12038 12037 12043 12205 +12041 12042 12034 11164 +12040 12043 12035 12271 +12043 12040 12038 11166 +12042 12041 12039 12273 +12045 12046 12049 11980 +12044 12047 12048 12029 +12047 12044 12051 11982 +12046 12045 12050 12031 +12049 -1 12045 12052 +12048 -1 12044 11971 +12051 -1 12047 12200 +12050 -1 12046 12187 +12053 -1 12055 12048 +12052 -1 12054 12003 +12055 12056 12053 12012 +12054 12057 12052 12033 +12057 12054 12059 12014 +12056 12055 12058 12035 +12059 -1 12057 12268 +12058 -1 12056 12255 +12061 -1 12062 12064 +12060 -1 12063 11467 +12063 -1 12060 12068 +12062 -1 12061 11499 +12065 -1 12066 12060 +12064 -1 12067 10319 +12067 -1 12064 12070 +12066 -1 12065 10311 +12069 -1 12070 12062 +12068 -1 12071 12073 +12071 -1 12068 12066 +12070 -1 12069 12081 +12073 -1 12075 11498 +12072 -1 12074 12069 +12075 12076 12073 12082 +12074 12077 12072 11481 +12077 12074 12079 12084 +12076 12075 12078 11483 +12079 -1 12077 11594 +12078 -1 12076 12089 +12081 -1 12083 10310 +12080 -1 12082 12071 +12083 12084 12081 12074 +12082 12085 12080 9249 +12085 12082 12087 12076 +12084 12083 12086 9251 +12087 -1 12085 9266 +12086 -1 12084 12091 +12089 -1 12090 12092 +12088 -1 12091 12079 +12091 -1 12088 12100 +12090 -1 12089 12087 +12093 -1 12094 12088 +12092 -1 12095 11595 +12095 12096 12092 12102 +12094 12097 12093 11585 +12097 12094 12098 12104 +12096 12095 12099 11587 +12099 -1 12096 12108 +12098 -1 12097 11627 +12101 -1 12102 12090 +12100 -1 12103 9267 +12103 12104 12100 12094 +12102 12105 12101 9225 +12105 12102 12106 12096 +12104 12103 12107 9227 +12107 -1 12104 12110 +12106 -1 12105 9235 +12109 -1 12110 12098 +12108 -1 12111 12113 +12111 -1 12108 12106 +12110 -1 12109 12121 +12113 -1 12115 11626 +12112 -1 12114 12109 +12115 12116 12113 12122 +12114 12117 12112 11609 +12117 12114 12119 12124 +12116 12115 12118 11611 +12119 -1 12117 11794 +12118 -1 12116 12147 +12121 -1 12123 9234 +12120 -1 12122 12111 +12123 12124 12121 12114 +12122 12125 12120 9041 +12125 12122 12127 12116 +12124 12123 12126 9043 +12127 -1 12125 9058 +12126 -1 12124 12145 +12129 12130 12132 12136 +12128 12131 12133 9025 +12131 12128 12134 12138 +12130 12129 12135 9027 +12133 -1 12128 12144 +12132 -1 12129 9059 +12135 -1 12130 12148 +12134 -1 12131 9123 +12137 12138 12140 12128 +12136 12139 12141 11809 +12139 12136 12142 12130 +12138 12137 12143 11811 +12141 -1 12136 12146 +12140 -1 12137 11795 +12143 -1 12138 12150 +12142 -1 12139 11843 +12145 -1 12146 12132 +12144 -1 12147 12127 +12147 -1 12144 12140 +12146 -1 12145 12119 +12149 -1 12150 12134 +12148 -1 12151 12153 +12151 -1 12148 12142 +12150 -1 12149 12161 +12153 -1 12155 9122 +12152 -1 12154 12149 +12155 12156 12153 12162 +12154 12157 12152 9105 +12157 12154 12159 12164 +12156 12155 12158 9107 +12159 -1 12157 9746 +12158 -1 12156 12169 +12161 -1 12163 11842 +12160 -1 12162 12151 +12163 12164 12161 12154 +12162 12165 12160 11825 +12165 12162 12167 12156 +12164 12163 12166 11827 +12167 -1 12165 11994 +12166 -1 12164 12171 +12169 -1 12170 12172 +12168 -1 12171 12159 +12171 -1 12168 12180 +12170 -1 12169 12167 +12173 -1 12174 12168 +12172 -1 12175 9747 +12175 12176 12172 12182 +12174 12177 12173 9737 +12177 12174 12178 12184 +12176 12175 12179 9739 +12179 -1 12176 12188 +12178 -1 12177 9859 +12181 -1 12182 12170 +12180 -1 12183 11995 +12183 12184 12180 12174 +12182 12185 12181 11985 +12185 12182 12186 12176 +12184 12183 12187 11987 +12187 -1 12184 12190 +12186 -1 12185 12051 +12189 -1 12190 12178 +12188 -1 12191 12193 +12191 -1 12188 12186 +12190 -1 12189 12201 +12193 -1 12195 9858 +12192 -1 12194 12189 +12195 12196 12193 12202 +12194 12197 12192 9841 +12197 12194 12199 12204 +12196 12195 12198 9843 +12199 -1 12197 11254 +12198 -1 12196 12287 +12201 -1 12203 12050 +12200 -1 12202 12191 +12203 12204 12201 12194 +12202 12205 12200 12037 +12205 12202 12207 12196 +12204 12203 12206 12039 +12207 -1 12205 12274 +12206 -1 12204 12285 +12209 -1 12210 12212 +12208 -1 12211 11023 +12211 -1 12208 12216 +12210 -1 12209 11055 +12213 -1 12214 12208 +12212 -1 12215 11899 +12215 -1 12212 12218 +12214 -1 12213 11931 +12217 -1 12218 12210 +12216 -1 12219 12221 +12219 -1 12216 12214 +12218 -1 12217 12229 +12221 -1 12223 11054 +12220 -1 12222 12217 +12223 12224 12221 12230 +12222 12225 12220 11037 +12225 12222 12227 12232 +12224 12223 12226 11039 +12227 -1 12225 11150 +12226 -1 12224 12237 +12229 -1 12231 11930 +12228 -1 12230 12219 +12231 12232 12229 12222 +12230 12233 12228 11913 +12233 12230 12235 12224 +12232 12231 12234 11915 +12235 -1 12233 12026 +12234 -1 12232 12239 +12237 -1 12238 12240 +12236 -1 12239 12227 +12239 -1 12236 12248 +12238 -1 12237 12235 +12241 -1 12242 12236 +12240 -1 12243 11151 +12243 12244 12240 12250 +12242 12245 12241 11141 +12245 12242 12246 12252 +12244 12243 12247 11143 +12247 -1 12244 12256 +12246 -1 12245 11183 +12249 -1 12250 12238 +12248 -1 12251 12027 +12251 12252 12248 12242 +12250 12253 12249 12017 +12253 12250 12254 12244 +12252 12251 12255 12019 +12255 -1 12252 12258 +12254 -1 12253 12059 +12257 -1 12258 12246 +12256 -1 12259 12261 +12259 -1 12256 12254 +12258 -1 12257 12269 +12261 -1 12263 11182 +12260 -1 12262 12257 +12263 12264 12261 12270 +12262 12265 12260 11165 +12265 12262 12267 12272 +12264 12263 12266 11167 +12267 -1 12265 11262 +12266 -1 12264 12277 +12269 -1 12271 12058 +12268 -1 12270 12259 +12271 12272 12269 12262 +12270 12273 12268 12041 +12273 12270 12275 12264 +12272 12271 12274 12043 +12275 -1 12273 12206 +12274 -1 12272 12279 +12277 -1 12278 12280 +12276 -1 12279 12267 +12279 -1 12276 12284 +12278 -1 12277 12275 +12281 -1 12282 12276 +12280 -1 12283 11263 +12283 -1 12280 12286 +12282 -1 12281 11255 +12285 -1 12286 12278 +12284 -1 12287 12207 +12287 -1 12284 12282 +12286 -1 12285 12199 + diff --git a/test/other/macro/macro.square.2d b/test/other/macro/macro.square.2d new file mode 100644 index 0000000000000000000000000000000000000000..7d310bfbb624959589f9fa057df7154400383bed --- /dev/null +++ b/test/other/macro/macro.square.2d @@ -0,0 +1,47 @@ +DIM: 2 +DIM_OF_WORLD: 2 + +number of elements: 8 +number of vertices: 9 + +vertex coordinates: +-1 -1 +0 -1 +1 -1 +-1 0 +0 0 +1 0 +-1 1 +0 1 +1 1 + +element vertices: +0 4 3 +4 0 1 +1 5 4 +5 1 2 +3 7 6 +7 3 4 +4 8 7 +8 4 5 + +element boundaries: +0 1 0 +3 0 0 +0 0 0 +3 2 0 +4 1 0 +0 0 0 +4 0 0 +0 2 0 + +element neighbours: +5 -1 1 +-1 2 0 +7 1 3 +-1 -1 2 +-1 -1 5 +0 6 4 +-1 5 7 +2 -1 6 + diff --git a/test/other/macro/macro.stand.1d b/test/other/macro/macro.stand.1d new file mode 100644 index 0000000000000000000000000000000000000000..97f7dd2d6d8b373454b0b4aa2fefc6925c14f9b7 --- /dev/null +++ b/test/other/macro/macro.stand.1d @@ -0,0 +1,15 @@ +DIM: 1 +DIM_OF_WORLD: 1 + +number of elements: 1 +number of vertices: 2 + +element vertices: +0 1 + +element boundaries: +2 3 + +vertex coordinates: + 0.0 + 1.0 diff --git a/test/other/macro/macro.stand.2d b/test/other/macro/macro.stand.2d new file mode 100644 index 0000000000000000000000000000000000000000..7b0c2db020993373c50bf520a46a7b375f0825b5 --- /dev/null +++ b/test/other/macro/macro.stand.2d @@ -0,0 +1,30 @@ +DIM: 2 +DIM_OF_WORLD: 2 + +number of elements: 4 +number of vertices: 5 + +element vertices: +0 1 4 +1 2 4 +2 3 4 +3 0 4 + +element boundaries: +0 0 1 +0 0 2 +0 0 3 +0 0 4 + +vertex coordinates: + 0.0 0.0 + 1.0 0.0 + 1.0 1.0 + 0.0 1.0 + 0.5 0.5 + +element neighbours: +1 3 -1 +2 0 -1 +3 1 -1 +0 2 -1 diff --git a/test/other/macro/macro.stand.3d b/test/other/macro/macro.stand.3d new file mode 100644 index 0000000000000000000000000000000000000000..2bde72fd05fdaf113903d2f185a727eb9ed2a7da --- /dev/null +++ b/test/other/macro/macro.stand.3d @@ -0,0 +1,39 @@ +DIM: 3 +DIM_OF_WORLD: 3 + +number of vertices: 8 +number of elements: 6 + +vertex coordinates: + 0.0 0.0 0.0 + 1.0 0.0 0.0 + 0.0 0.0 1.0 + 1.0 0.0 1.0 + 1.0 1.0 0.0 + 1.0 1.0 1.0 + 0.0 1.0 0.0 + 0.0 1.0 1.0 + +element vertices: + 0 5 4 1 + 0 5 3 1 + 0 5 3 2 + 0 5 4 6 + 0 5 7 6 + 0 5 7 2 + +element boundaries: + 1 1 0 0 + 1 1 0 0 + 1 1 0 0 + 1 1 0 0 + 1 1 0 0 + 1 1 0 0 + +element neighbours: + -1 -1 1 3 + -1 -1 0 2 + -1 -1 5 1 + -1 -1 4 0 + -1 -1 3 5 + -1 -1 2 4 diff --git a/test/other/src/Test_Arh2.cc b/test/other/src/Test_Arh2.cc new file mode 100644 index 0000000000000000000000000000000000000000..7d2a40c6d74bbceb1dff0e624e8893e6f7ad0b84 --- /dev/null +++ b/test/other/src/Test_Arh2.cc @@ -0,0 +1,39 @@ +#include +#include + +#include "Test_Arh2.h" + +using namespace boost::unit_test; + +test_suite* +init_unit_test_suite( int argc, char* argv[] ) +{ + using namespace AMDiS; + + AMDiS::init(argc, argv); + // --------------------------------------------------------------------------- + // Test the ARH2 filewriter + + if (Global::getGeo(WORLD) == 3) { + std::cout << "test_arh2... \n"; + using amdis_tests::Test_Arh2; + test_suite* ts_arh2 = BOOST_TEST_SUITE( "test_suite_arh2" ); + + boost::shared_ptr tester_arh2( new Test_Arh2(argc, argv) ); + + ts_arh2->add( BOOST_TEST_CASE( boost::bind( &Test_Arh2::test1, tester_arh2 ))); + +#ifndef HAVE_PARALLEL_DOMAIN_AMDIS + //parallel model doesn't support multiple mesh + ts_arh2->add( BOOST_TEST_CASE( boost::bind( &Test_Arh2::test2, tester_arh2 ))); + ts_arh2->add( BOOST_TEST_CASE( boost::bind( &Test_Arh2::test3, tester_arh2 ))); + // ts_arh2->add( BOOST_TEST_CASE( boost::bind( &Test_Arh2::test4, tester_arh2 ))); + ts_arh2->add( BOOST_TEST_CASE( boost::bind( &Test_Arh2::test5, tester_arh2 ))); +#endif + + framework::master_test_suite().add(ts_arh2); + } + + AMDiS::finalize(); + return 0; +} diff --git a/test/other/src/Test_Arh2.h b/test/other/src/Test_Arh2.h new file mode 100644 index 0000000000000000000000000000000000000000..4d74102c10c8a321941276b93019d10993960219 --- /dev/null +++ b/test/other/src/Test_Arh2.h @@ -0,0 +1,557 @@ +/****************************************************************************** + * + * AMDiS - Adaptive multidimensional simulations + * + * Copyright (C) 2013 Dresden University of Technology. All Rights Reserved. + * Web: https://fusionforge.zih.tu-dresden.de/projects/amdis + * + * Authors: + * Simon Vey, Thomas Witkowski, Andreas Naumann, Simon Praetorius, et al. + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * + * This file is part of AMDiS + * + * See also license.opensource.txt in the distribution. + * + ******************************************************************************/ + + + +/** \file Test_Arh2.h */ + +#ifndef AMDIS_TEST_ARH2_H +#define AMDIS_TEST_ARH2_H + +#include "AMDiS.h" + +namespace amdis_tests +{ + using namespace std; + using namespace AMDiS; + using namespace AMDiS::io; + + + // =========================================================================== + // ===== function definitions ================================================ + // =========================================================================== + + class F1 : public AbstractFunction > + { + public: + F1(int degree) : AbstractFunction >(degree) {} + + double operator()(const WorldVector& x) const + { + switch(x.getSize()) + { + case 3: return sin(x[0]) + sin(x[1]) + sin(x[2]); + case 2: return sin(x[0]) + sin(x[1]); + default: return -2.0 * x[0]; + } + } + }; + + + class F2 : public AbstractFunction > + { + public: + F2(int degree) : AbstractFunction >(degree) {} + + double operator()(const WorldVector& x) const + { + switch(x.getSize()) + { + case 3: return sin(x[0] + x[1] + x[2]); + case 2: return sin(x[0] + x[1]); + default: return x[0] * x[0]; + } + } + }; + + class F3 : public AbstractFunction > + { + public: + F3(int degree) : AbstractFunction >(degree) {} + + double operator()(const WorldVector& x) const + { + switch(x.getSize()) + { + case 3: return cos(x[0]) + sin(x[1]) + cos(x[2]); + case 2: return cos(x[0]) + cos(x[1]); + default: return cos(x[0]); + } + } + }; + + typedef vector > DataVec; + + // =========================================================================== + // ===== main program ======================================================== + // =========================================================================== + + class Test_Arh2 + { + private: + ProblemStat* sphere31; + ProblemStat* sphere32; + ProblemStat* sphere33; + ProblemStat* sphere33_b; + ProblemStat* sphere33_c; + ProblemStat* sphere33_d; + ProblemStat* ellipt; + + public: + Test_Arh2(int argc, char** argv) + { + functionVec.push_back(dynamic_cast >*>(new F1(3))); + functionVec.push_back(dynamic_cast >*>(new F2(3))); + functionVec.push_back(dynamic_cast >*>(new F3(3))); + + sphere31 = new ProblemStat("sphere31"); + sphere32 = new ProblemStat("sphere32"); + sphere33 = new ProblemStat("sphere33"); + sphere33_b = new ProblemStat("sphere33_b"); + sphere33_c = new ProblemStat("sphere33_c"); + sphere33_d = new ProblemStat("sphere33_d"); + ellipt = new ProblemStat("ellipt"); + sphere31->initialize(INIT_ALL); + sphere32->initialize(INIT_ALL); + sphere33->initialize(INIT_ALL); + sphere33_b->initialize(INIT_ALL); + sphere33_c->initialize(INIT_ALL); + sphere33_d->initialize(INIT_ALL); + ellipt->initialize(INIT_ALL); + } + + ~Test_Arh2() + { +