summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2022-10-13 14:05:51 -0700
committerJohn Baldwin <jhb@FreeBSD.org>2022-10-13 14:05:51 -0700
commit2df9f9bf324b3537e8d31e83deb707990a5b906b (patch)
tree6176035a22779705c567a2b735ac0e08e565ad9d
parent8ff1bd02227d35386cbcff210be686c68e1865c8 (diff)
downloadbinutils-gdb-2df9f9bf324b3537e8d31e83deb707990a5b906b.tar.gz
git subrepo clone https://github.com/CTSRD-CHERI/cheri-compressed-cap gdb/cheri-compressed-cap
subrepo: subdir: "gdb/cheri-compressed-cap" merged: "6762a19ba9f" upstream: origin: "https://github.com/CTSRD-CHERI/cheri-compressed-cap" branch: "master" commit: "6762a19ba9f" git-subrepo: version: "0.4.3" origin: "???" commit: "???"
-rw-r--r--gdb/cheri-compressed-cap/.clang-format10
-rw-r--r--gdb/cheri-compressed-cap/.editorconfig10
-rw-r--r--gdb/cheri-compressed-cap/.github/workflows/c-cpp.yml22
-rw-r--r--gdb/cheri-compressed-cap/.gitignore2
-rw-r--r--gdb/cheri-compressed-cap/.gitrepo12
-rw-r--r--gdb/cheri-compressed-cap/CMakeLists.txt179
-rw-r--r--gdb/cheri-compressed-cap/LICENSE29
-rw-r--r--gdb/cheri-compressed-cap/README.md7
-rw-r--r--gdb/cheri-compressed-cap/cheri_compressed_cap.c42
-rw-r--r--gdb/cheri-compressed-cap/cheri_compressed_cap.h168
-rw-r--r--gdb/cheri-compressed-cap/cheri_compressed_cap_128.h178
-rw-r--r--gdb/cheri-compressed-cap/cheri_compressed_cap_128m.h194
-rw-r--r--gdb/cheri-compressed-cap/cheri_compressed_cap_64.h147
-rw-r--r--gdb/cheri-compressed-cap/cheri_compressed_cap_common.h987
-rw-r--r--gdb/cheri-compressed-cap/cheri_compressed_cap_macros.h99
-rw-r--r--gdb/cheri-compressed-cap/decompress_cap_128.c110
-rw-r--r--gdb/cheri-compressed-cap/decompress_cap_128m.c110
-rw-r--r--gdb/cheri-compressed-cap/test/FuzzedDataProvider.h299
-rw-r--r--gdb/cheri-compressed-cap/test/catch.hpp17702
-rw-r--r--gdb/cheri-compressed-cap/test/compression_test.sail33
-rw-r--r--gdb/cheri-compressed-cap/test/decode_inputs_128.cpp5009
-rw-r--r--gdb/cheri-compressed-cap/test/decode_inputs_64.cpp2509
-rw-r--r--gdb/cheri-compressed-cap/test/elf.h1
-rw-r--r--gdb/cheri-compressed-cap/test/fuzz_decompress_128.cpp4
-rw-r--r--gdb/cheri-compressed-cap/test/fuzz_decompress_128m.cpp5
-rw-r--r--gdb/cheri-compressed-cap/test/fuzz_decompress_64.cpp4
-rw-r--r--gdb/cheri-compressed-cap/test/fuzz_decompress_common.cpp137
-rw-r--r--gdb/cheri-compressed-cap/test/random_inputs_test_128.cpp4
-rw-r--r--gdb/cheri-compressed-cap/test/random_inputs_test_128m.cpp5
-rw-r--r--gdb/cheri-compressed-cap/test/random_inputs_test_64.cpp4
-rw-r--r--gdb/cheri-compressed-cap/test/random_inputs_test_common.cpp150
-rwxr-xr-xgdb/cheri-compressed-cap/test/regen_sail_c_code.sh42
-rwxr-xr-xgdb/cheri-compressed-cap/test/regen_sail_c_code_morello.sh23
-rw-r--r--gdb/cheri-compressed-cap/test/rts.c21
-rw-r--r--gdb/cheri-compressed-cap/test/rts.h12
-rw-r--r--gdb/cheri-compressed-cap/test/sail.c1731
-rw-r--r--gdb/cheri-compressed-cap/test/sail.h445
-rw-r--r--gdb/cheri-compressed-cap/test/sail_compression_128.c9127
-rw-r--r--gdb/cheri-compressed-cap/test/sail_compression_128m.c2922
-rw-r--r--gdb/cheri-compressed-cap/test/sail_compression_64.c9293
-rw-r--r--gdb/cheri-compressed-cap/test/sail_failure.c14
-rw-r--r--gdb/cheri-compressed-cap/test/sail_failure.h18
-rw-r--r--gdb/cheri-compressed-cap/test/sail_wrapper.h140
-rw-r--r--gdb/cheri-compressed-cap/test/sail_wrapper_128.c106
-rw-r--r--gdb/cheri-compressed-cap/test/sail_wrapper_128m.c89
-rw-r--r--gdb/cheri-compressed-cap/test/sail_wrapper_64.c77
-rw-r--r--gdb/cheri-compressed-cap/test/sail_wrapper_common.c279
-rw-r--r--gdb/cheri-compressed-cap/test/setbounds_inputs_128.cpp10016
-rw-r--r--gdb/cheri-compressed-cap/test/setbounds_test_128.cpp63
-rw-r--r--gdb/cheri-compressed-cap/test/setbounds_test_128m.cpp7
-rw-r--r--gdb/cheri-compressed-cap/test/setbounds_test_64.cpp6
-rw-r--r--gdb/cheri-compressed-cap/test/setbounds_test_common.cpp181
-rw-r--r--gdb/cheri-compressed-cap/test/simple_test_128.cpp16
-rw-r--r--gdb/cheri-compressed-cap/test/simple_test_128m.cpp5
-rw-r--r--gdb/cheri-compressed-cap/test/simple_test_256.cpp48
-rw-r--r--gdb/cheri-compressed-cap/test/simple_test_64.cpp4
-rw-r--r--gdb/cheri-compressed-cap/test/simple_test_common.cpp137
-rw-r--r--gdb/cheri-compressed-cap/test/test_common.cpp6
-rw-r--r--gdb/cheri-compressed-cap/test/test_util.h95
59 files changed, 63095 insertions, 0 deletions
diff --git a/gdb/cheri-compressed-cap/.clang-format b/gdb/cheri-compressed-cap/.clang-format
new file mode 100644
index 00000000000..e300f3dff55
--- /dev/null
+++ b/gdb/cheri-compressed-cap/.clang-format
@@ -0,0 +1,10 @@
+BasedOnStyle: LLVM
+IndentWidth: 4
+ColumnLimit: 120
+TabWidth: 8
+UseTab: Never
+# Force pointers to the type
+DerivePointerAlignment: false
+PointerAlignment: Left
+AllowShortCaseLabelsOnASingleLine: true
+AccessModifierOffset: -4
diff --git a/gdb/cheri-compressed-cap/.editorconfig b/gdb/cheri-compressed-cap/.editorconfig
new file mode 100644
index 00000000000..6343526cc35
--- /dev/null
+++ b/gdb/cheri-compressed-cap/.editorconfig
@@ -0,0 +1,10 @@
+root = true
+[*]
+end_of_line = lf
+charset = utf-8
+indent_size = 4
+indent_style = space
+insert_final_newline = true
+tab_width = 8
+max_line_length = 120
+trim_trailing_whitespace = true
diff --git a/gdb/cheri-compressed-cap/.github/workflows/c-cpp.yml b/gdb/cheri-compressed-cap/.github/workflows/c-cpp.yml
new file mode 100644
index 00000000000..4041550a90d
--- /dev/null
+++ b/gdb/cheri-compressed-cap/.github/workflows/c-cpp.yml
@@ -0,0 +1,22 @@
+name: C/C++ CI
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: 'Run CMake and build'
+ run: |
+ mkdir -p build
+ cd build && cmake ..
+ make -j`nproc`
+ - name: Run tests
+ run: cd build && ctest -V -j`nproc`
diff --git a/gdb/cheri-compressed-cap/.gitignore b/gdb/cheri-compressed-cap/.gitignore
new file mode 100644
index 00000000000..2f88b187144
--- /dev/null
+++ b/gdb/cheri-compressed-cap/.gitignore
@@ -0,0 +1,2 @@
+/cmake-build-debug
+/.idea
diff --git a/gdb/cheri-compressed-cap/.gitrepo b/gdb/cheri-compressed-cap/.gitrepo
new file mode 100644
index 00000000000..9e05155a699
--- /dev/null
+++ b/gdb/cheri-compressed-cap/.gitrepo
@@ -0,0 +1,12 @@
+; DO NOT EDIT (unless you know what you are doing)
+;
+; This subdirectory is a git "subrepo", and this file is maintained by the
+; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme
+;
+[subrepo]
+ remote = https://github.com/CTSRD-CHERI/cheri-compressed-cap
+ branch = master
+ commit = 6762a19ba9fb6a4291011fa690ce9a2647af10b2
+ parent = 8ff1bd02227d35386cbcff210be686c68e1865c8
+ method = merge
+ cmdver = 0.4.3
diff --git a/gdb/cheri-compressed-cap/CMakeLists.txt b/gdb/cheri-compressed-cap/CMakeLists.txt
new file mode 100644
index 00000000000..1b68e5c1fdf
--- /dev/null
+++ b/gdb/cheri-compressed-cap/CMakeLists.txt
@@ -0,0 +1,179 @@
+cmake_minimum_required(VERSION 3.10)
+project(cheri_compressed_cap C CXX)
+set(CMAKE_C_STANDARD 11)
+set(CMAKE_CXX_STANDARD 14)
+if(APPLE AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang"))
+ # XXX: ugly hack, would be nice if llvm could find this
+ include_directories(SYSTEM /Library/Developer/CommandLineTools/usr/include/c++/v1)
+endif()
+
+include(CheckCXXCompilerFlag)
+# CMAKE_REQUIRED_LINK_OPTIONS needs cmake 3.13
+set(CMAKE_REQUIRED_LIBRARIES -fsanitize=undefined)
+check_cxx_compiler_flag(-fsanitize=undefined HAVE_UBSAN)
+set(CMAKE_REQUIRED_LIBRARIES -fsanitize=address)
+check_cxx_compiler_flag(-fsanitize=address HAVE_ASAN)
+set(CMAKE_REQUIRED_LIBRARIES -fsanitize=memory)
+check_cxx_compiler_flag(-fsanitize=memory HAVE_MSAN)
+# XXX: needs instrumented system libraries
+set(HAVE_MSAN FALSE)
+set(CMAKE_REQUIRED_LIBRARIES -fsanitize=fuzzer)
+check_cxx_compiler_flag(-fsanitize=fuzzer HAVE_LIBFUZZER)
+
+include(CheckCCompilerFlag)
+check_c_compiler_flag(-Wunused-but-set-variable HAVE_UNUSED_BUT_SET_VARIABLE)
+if (HAVE_UNUSED_BUT_SET_VARIABLE)
+ add_compile_options(-DHAVE_UNUSED_BUT_SET_VARIABLE)
+endif()
+
+if (HAVE_UBSAN)
+ add_compile_options(-fsanitize=undefined)
+ if (${CMAKE_VERSION} VERSION_GREATER 3.12)
+ add_link_options(-fsanitize=undefined)
+ else()
+ link_libraries(-fsanitize=undefined)
+ endif()
+endif()
+
+add_compile_options(-Wno-gnu-statement-expression)
+add_compile_options(-fno-common)
+
+add_compile_options(-pedantic -Wall -Wextra -Wno-old-style-cast -Wno-c++98-compat-pedantic -Wno-c++98-c++11-compat-binary-literal -Wno-c11-extensions -Wno-padded)
+# TODO: -Weverything
+add_library(cheri_compressed_cap14 cheri_compressed_cap.c cheri_compressed_cap.h)
+
+function(add_decompress_cap _format)
+ add_executable(decompress_cap_${_format} decompress_cap_${_format}.c)
+ include(GNUInstallDirs)
+ install(TARGETS decompress_cap_${_format} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+endfunction()
+
+# TODO: add_decompress_cap(64)
+add_decompress_cap(128)
+add_decompress_cap(128m)
+
+# Test against sail generated C code:
+# This needs GMP (and CMake doesn't include a find module)
+find_package(PkgConfig)
+pkg_check_modules(PC_GMP gmp)
+find_path(GMP_INCLUDE_DIR gmp.h
+ HINTS ${PC_GMP_INCLUDEDIR} ${PC_GMP_INCLUDE_DIRS}
+ PATH_SUFFIXES gmp)
+message(STATUS "GMP include dir: ${GMP_INCLUDE_DIR}")
+find_library(GMP_LIBRARY NAMES gmp
+ HINTS ${PC_GMPL_LIBDIR} ${PC_GMP_LIBRARY_DIRS})
+message(STATUS "GMP library: ${GMP_LIBRARY}")
+
+if (NOT GMP_LIBRARY)
+ message(FATAL_ERROR "Cannot find GMP library")
+endif()
+if (NOT GMP_INCLUDE_DIR)
+ message(FATAL_ERROR "Cannot find GMP includes")
+endif()
+add_library(GMP::GMP UNKNOWN IMPORTED)
+set_target_properties(GMP::GMP PROPERTIES
+ IMPORTED_LOCATION "${GMP_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES "${GMP_INCLUDE_DIR}"
+)
+
+function(add_sail_wrapper _format _suffix _sanitizer_flags)
+ add_library(sail_wrapper_${_format}${_suffix} STATIC test/sail_wrapper_${_format}.c test/sail.c test/rts.c test/sail_failure.c)
+ if (_sanitizer_flags)
+ target_compile_options(sail_wrapper_${_format}${_suffix} PRIVATE "${_sanitizer_flags}")
+ target_link_libraries(sail_wrapper_${_format}${_suffix} PRIVATE "${_sanitizer_flags}")
+ endif()
+ target_link_libraries(sail_wrapper_${_format}${_suffix} PUBLIC GMP::GMP) # needs GMP, should propagate to all users
+ target_compile_options(sail_wrapper_${_format}${_suffix} PRIVATE -Wno-unused-function -Wno-unused-parameter -Wno-sign-compare -Wno-unused-label -Wno-extra-semi -Wno-gnu-binary-literal)
+endfunction()
+
+function(add_sail_wrappers _format)
+ add_sail_wrapper(${_format} "" "")
+ if (HAVE_ASAN)
+ add_sail_wrapper(${_format} "-asan-ubsan" "-fsanitize=undefined,address")
+ endif()
+ if (HAVE_MSAN)
+ add_sail_wrapper(${_format} "-msan-ubsan" "-fsanitize=undefined,memory")
+ endif()
+endfunction()
+
+add_sail_wrappers(64)
+add_sail_wrappers(128)
+add_sail_wrappers(128m)
+
+# Add test exes for sail generated code
+
+function(add_test_sail_wrapper _format)
+ add_executable(test_sail_wrapper_${_format} decompress_cap_${_format}.c)
+ target_compile_definitions(test_sail_wrapper_${_format} PRIVATE DECOMPRESS_WITH_SAIL_GENERATED_CODE=1)
+ target_link_libraries(test_sail_wrapper_${_format} PRIVATE sail_wrapper_${_format})
+endfunction()
+
+# TODO: add_test_sail_wrapper(64)
+add_test_sail_wrapper(128)
+add_test_sail_wrapper(128m)
+
+enable_testing()
+
+function(add_cc_test _format _target _suffix _sanitizer_flags)
+ add_executable(${_target}_${_format}${_suffix} test/${_target}_${_format}.cpp)
+ if (_sanitizer_flags)
+ target_compile_options(${_target}_${_format}${_suffix} PRIVATE "${_sanitizer_flags}")
+ target_link_libraries(${_target}_${_format}${_suffix} PRIVATE "${_sanitizer_flags}")
+ endif()
+ if (NOT _format STREQUAL "256")
+ target_link_libraries(${_target}_${_format}${_suffix} PRIVATE sail_wrapper_${_format}${_suffix})
+ endif()
+ add_test(NAME test-${_target}_${_format}${_suffix} COMMAND ${_target}_${_format}${_suffix})
+endfunction()
+
+function(add_cc_tests_target _format _target)
+ add_cc_test(${_format} ${_target} "" "")
+ if (HAVE_ASAN)
+ add_cc_test(${_format} ${_target} "-asan-ubsan" "-fsanitize=undefined,address")
+ endif()
+ if (HAVE_MSAN)
+ add_cc_test(${_format} ${_target} "-msan-ubsan" "-fsanitize=undefined,memory")
+ endif()
+endfunction()
+
+function(add_cc_tests _format)
+ add_cc_tests_target(${_format} simple_test)
+ if (NOT _format STREQUAL "256")
+ # TODO: sail_setbounds_128m not yet implemented
+ if (NOT _format STREQUAL "128m")
+ add_cc_tests_target(${_format} setbounds_test)
+ endif()
+ # TODO: 41047 failed assertions
+ if (NOT _format STREQUAL "128m")
+ add_cc_tests_target(${_format} random_inputs_test)
+ endif()
+ endif()
+endfunction()
+
+add_cc_tests(64)
+add_cc_tests(128)
+add_cc_tests(128m)
+add_cc_tests(256)
+
+function(add_fuzz_tests _format)
+ if (HAVE_LIBFUZZER)
+ if (HAVE_ASAN)
+ add_sail_wrapper(${_format} "-fuzzer-asan-ubsan" "-fsanitize=undefined,address,fuzzer")
+ add_executable(fuzz_decompress_${_format}-asan test/fuzz_decompress_${_format}.cpp)
+ target_compile_options(fuzz_decompress_${_format}-asan PRIVATE -fsanitize=undefined,address,fuzzer)
+ target_link_libraries(fuzz_decompress_${_format}-asan PRIVATE -fsanitize=undefined,address,fuzzer)
+ target_link_libraries(fuzz_decompress_${_format}-asan PRIVATE sail_wrapper_${_format}-fuzzer-asan-ubsan)
+ endif()
+ if (HAVE_MSAN)
+ add_sail_wrapper(${_format} "-fuzzer-msan-ubsan" "-fsanitize=undefined,memory,fuzzer")
+ add_executable(fuzz_decompress_${_format}-msan test/fuzz_decompress_${_format}.cpp)
+ target_compile_options(fuzz_decompress_${_format}-msan PRIVATE -fsanitize=undefined,memory,fuzzer)
+ target_link_libraries(fuzz_decompress_${_format}-msan PRIVATE -fsanitize=undefined,memory,fuzzer)
+ target_link_libraries(fuzz_decompress_${_format}-msan PRIVATE sail_wrapper_${_format}-fuzzer-msan-ubsan)
+ endif()
+ endif()
+endfunction()
+
+add_fuzz_tests(64)
+add_fuzz_tests(128)
+add_fuzz_tests(128m)
diff --git a/gdb/cheri-compressed-cap/LICENSE b/gdb/cheri-compressed-cap/LICENSE
new file mode 100644
index 00000000000..2bbc1315194
--- /dev/null
+++ b/gdb/cheri-compressed-cap/LICENSE
@@ -0,0 +1,29 @@
+SPDX-License-Identifier: BSD-2-Clause
+
+Copyright (c) 2018 (holder)
+All rights reserved.
+
+This software was developed by SRI International and the University of
+Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237
+("CTSRD"), as part of the DARPA CRASH research programme.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
diff --git a/gdb/cheri-compressed-cap/README.md b/gdb/cheri-compressed-cap/README.md
new file mode 100644
index 00000000000..b29a105058a
--- /dev/null
+++ b/gdb/cheri-compressed-cap/README.md
@@ -0,0 +1,7 @@
+# cheri-compressed-cap ![CI](https://github.com/CTSRD-CHERI/cheri-compressed-cap/workflows/C/C++%20CI/badge.svg)
+A C library to compress/decompress CHERI capabilities
+
+See Section 3.4.4 and 3.4.5 of [the instruction set architecture document](https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-927.pdf) for an explanation of how the compression works.
+
+## Usage instructions
+Simply include `cheri_compressed_cap.h` in your C project and you can use the provided functions to compress and decompress your capabilities.
diff --git a/gdb/cheri-compressed-cap/cheri_compressed_cap.c b/gdb/cheri-compressed-cap/cheri_compressed_cap.c
new file mode 100644
index 00000000000..f2eb12ace4b
--- /dev/null
+++ b/gdb/cheri-compressed-cap/cheri_compressed_cap.c
@@ -0,0 +1,42 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2018 Alex Richardson
+ * All rights reserved.
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237
+ * ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#include "cheri_compressed_cap.h"
+
+// Just check that everything compiles
+uint64_t test(void) {
+ uint64_t pesbt = 0x1234567;
+ uint64_t cursor = 0x98765431;
+ cc128_cap_t result;
+ cc128_decompress_mem(pesbt, cursor, false, &result);
+ uint64_t new_pesbt = cc128_compress_mem(&result);
+ return cc128_is_representable_cap_exact(&result) + new_pesbt;
+}
diff --git a/gdb/cheri-compressed-cap/cheri_compressed_cap.h b/gdb/cheri-compressed-cap/cheri_compressed_cap.h
new file mode 100644
index 00000000000..35355eadd07
--- /dev/null
+++ b/gdb/cheri-compressed-cap/cheri_compressed_cap.h
@@ -0,0 +1,168 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2018 Lawrence Esswood
+ * Copyright (c) 2018-2020 Alex Richardson
+ * All rights reserved.
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237
+ * ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef CHERI_COMPRESSED_CAP_H
+#define CHERI_COMPRESSED_CAP_H
+
+#ifdef CC_IS_MORELLO
+#error "Use new cc128m/CC128M definitions instead of defining CC_IS_MORELLO"
+#endif
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <string.h>
+
+#include "cheri_compressed_cap_64.h"
+#include "cheri_compressed_cap_128.h"
+#include "cheri_compressed_cap_128m.h"
+
+/* Legacy CHERI256 things: */
+
+/* For CHERI256 all permissions are shifted by one since the sealed bit comes first */
+#define CC256_HWPERMS_COUNT (12)
+#define CC256_HWPERMS_RESERVED_COUNT (3)
+#define CC256_UPERMS_COUNT (16)
+#define CC256_MAX_UPERM CC256_UPERMS_COUNT
+#define CC256_FLAGS_COUNT (1)
+#define CC256_FLAGS_ALL_BITS _CC_BITMASK64(CC256_FLAGS_COUNT) /* 1 bit */
+#define CC256_PERMS_MEM_SHFT CC256_FLAGS_COUNT /* flags bit comes first */
+#define CC256_UPERMS_MEM_SHFT (CC256_PERMS_MEM_SHFT + CC256_HWPERMS_COUNT + CC256_HWPERMS_RESERVED_COUNT)
+#define CC256_UPERMS_SHFT (15)
+_CC_STATIC_ASSERT(CC128_UPERMS_SHFT >= CC256_HWPERMS_COUNT + CC256_HWPERMS_RESERVED_COUNT, "");
+_CC_STATIC_ASSERT_SAME(CC256_PERMS_MEM_SHFT + CC256_HWPERMS_COUNT + CC256_HWPERMS_RESERVED_COUNT, CC256_UPERMS_MEM_SHFT);
+#define CC256_PERMS_ALL_BITS _CC_BITMASK64(CC256_HWPERMS_COUNT) /* 12 bits */
+#define CC256_PERMS_ALL_BITS_UNTAGGED _CC_BITMASK64(CC256_HWPERMS_COUNT + CC256_HWPERMS_RESERVED_COUNT) /* 15 bits */
+#define CC256_UPERMS_ALL_BITS _CC_BITMASK64(CC256_UPERMS_COUNT) /* 19 bits */
+#define CC256_OTYPE_ALL_BITS _CC_BITMASK64(CC256_OTYPE_BITS)
+#define CC256_RESERVED_ALL_BITS _CC_BITMASK64(CC256_RESERVED_BITS)
+#define CC256_OTYPE_MEM_SHFT (32)
+_CC_STATIC_ASSERT_SAME(CC256_UPERMS_MEM_SHFT + CC256_UPERMS_COUNT, CC256_OTYPE_MEM_SHFT);
+#define CC256_OTYPE_BITS (24)
+#define CC256_RESERVED_MEM_SHFT (CC256_OTYPE_MEM_SHFT + CC256_OTYPE_BITS)
+#define CC256_RESERVED_BITS (8)
+#define CC256_NULL_LENGTH ((cc128_length_t)UINT64_MAX)
+#define CC256_NULL_TOP ((cc128_length_t)UINT64_MAX)
+_CC_STATIC_ASSERT_SAME(CC256_FLAGS_COUNT + CC256_HWPERMS_COUNT + CC256_HWPERMS_RESERVED_COUNT + CC256_UPERMS_COUNT +
+ CC256_OTYPE_BITS + CC256_RESERVED_BITS,
+ 64);
+
+#define CC256_SPECIAL_OTYPE(name, subtract) CC256_##name = (CC256_MAX_REPRESENTABLE_OTYPE - subtract##u)
+// Reserve 16 otypes
+enum CC256_OTypes {
+ CC256_MAX_REPRESENTABLE_OTYPE = ((1u << CC256_OTYPE_BITS) - 1u),
+ CC256_SPECIAL_OTYPE(OTYPE_UNSEALED, 0),
+ CC256_SPECIAL_OTYPE(OTYPE_SENTRY, 1),
+ CC256_SPECIAL_OTYPE(MAX_RESERVED_OTYPE, 0),
+ CC256_SPECIAL_OTYPE(MIN_RESERVED_OTYPE, 15),
+};
+
+#define CC256_LS_SPECIAL_OTYPES(ITEM, ...) \
+ ITEM(OTYPE_UNSEALED, __VA_ARGS__) \
+ ITEM(OTYPE_SENTRY, __VA_ARGS__)
+
+typedef struct cc256_cap {
+ uint64_t cr_cursor;
+ uint64_t cr_base;
+ uint64_t cr_length;
+ uint32_t cr_otype;
+ uint16_t cr_perms;
+ uint16_t cr_uperms;
+ uint8_t cr_tag;
+ uint8_t cr_flags;
+ uint8_t cr_reserved;
+#ifdef __cplusplus
+ inline uint64_t base() const { return cr_base; }
+ inline uint64_t address() const { return cr_cursor; }
+ inline int64_t offset() const { return cr_cursor - cr_base; }
+ inline cc128_length_t top() const { return (cc128_length_t)cr_base + cr_length; }
+ inline cc128_addr_t top64() const {
+ const cc128_length_t t = top();
+ return t > CC128_MAX_ADDR ? CC128_MAX_ADDR : (cc128_addr_t)t;
+ }
+ inline uint64_t length() const { return cr_length; }
+ inline uint64_t length64() const { return cr_length; }
+ inline uint32_t software_permissions() const { return cr_uperms; }
+ inline uint32_t permissions() const { return cr_perms; }
+ inline uint32_t type() const { return cr_otype; }
+ inline bool is_sealed() const { return type() != CC256_OTYPE_UNSEALED; }
+ inline uint8_t flags() const { return cr_flags; }
+ inline uint8_t reserved_bits() const { return cr_reserved; }
+#endif
+} cc256_cap_t;
+
+/* Also support decoding of the raw 256-bit capabilities */
+typedef union _inmemory_chericap256 {
+ uint8_t bytes[32];
+ uint32_t u32s[8];
+ uint64_t u64s[4];
+} inmemory_chericap256;
+
+static inline bool cc256_is_cap_sealed(const cc256_cap_t* cp) { return cp->cr_otype != CC256_OTYPE_UNSEALED; }
+
+static inline void decompress_256cap(inmemory_chericap256 mem, cc256_cap_t* cdp, bool tagged) {
+ /* See CHERI ISA: Figure 3.1: 256-bit memory representation of a capability */
+ uint32_t hwperms_mask = tagged ? CC256_PERMS_ALL_BITS : CC256_PERMS_ALL_BITS_UNTAGGED;
+ cdp->cr_flags = mem.u64s[0] & CC256_FLAGS_ALL_BITS;
+ cdp->cr_perms = (mem.u64s[0] >> CC256_PERMS_MEM_SHFT) & hwperms_mask;
+ cdp->cr_uperms = (mem.u64s[0] >> CC256_UPERMS_MEM_SHFT) & CC256_UPERMS_ALL_BITS;
+ cdp->cr_otype = ((mem.u64s[0] >> CC256_OTYPE_MEM_SHFT) & CC256_OTYPE_ALL_BITS) ^ CC256_OTYPE_UNSEALED;
+ cdp->cr_reserved = (mem.u64s[0] >> CC256_RESERVED_MEM_SHFT) & CC256_RESERVED_ALL_BITS;
+ cdp->cr_base = mem.u64s[2];
+ /* Length is xor'ed with -1 to ensure that NULL is all zeroes in memory */
+ uint64_t length = mem.u64s[3] ^ CC256_NULL_LENGTH;
+ cdp->cr_length = length;
+ cdp->cr_cursor = mem.u64s[1];
+ cdp->cr_tag = tagged;
+ _cc_debug_assert(!(cdp->cr_tag && cdp->cr_reserved) && "Unknown reserved bits set it tagged capability");
+}
+
+static inline void compress_256cap(inmemory_chericap256* buffer, const cc256_cap_t* csp) {
+ _cc_debug_assert(!(csp->cr_tag && csp->cr_reserved) && "Unknown reserved bits set it tagged capability");
+ bool flags_bits = csp->cr_flags & CC256_FLAGS_ALL_BITS;
+ // When writing an untagged value, just write back the bits that were loaded (including the reserved HWPERMS)
+ uint64_t hwperms_mask = csp->cr_tag ? CC256_PERMS_ALL_BITS : CC256_PERMS_ALL_BITS_UNTAGGED;
+ buffer->u64s[0] =
+ flags_bits | ((csp->cr_perms & hwperms_mask) << CC256_PERMS_MEM_SHFT) |
+ ((csp->cr_uperms & CC256_UPERMS_ALL_BITS) << CC256_UPERMS_MEM_SHFT) |
+ ((uint64_t)((csp->cr_otype ^ CC256_OTYPE_UNSEALED) & CC256_OTYPE_ALL_BITS) << CC256_OTYPE_MEM_SHFT) |
+ ((uint64_t)(csp->cr_reserved & CC256_RESERVED_ALL_BITS) << CC256_RESERVED_MEM_SHFT);
+ buffer->u64s[1] = csp->cr_cursor;
+ buffer->u64s[2] = csp->cr_base;
+ buffer->u64s[3] = csp->cr_length ^ CC256_NULL_LENGTH;
+}
+
+#endif /* CHERI_COMPRESSED_CAP_H */
diff --git a/gdb/cheri-compressed-cap/cheri_compressed_cap_128.h b/gdb/cheri-compressed-cap/cheri_compressed_cap_128.h
new file mode 100644
index 00000000000..028caff2727
--- /dev/null
+++ b/gdb/cheri-compressed-cap/cheri_compressed_cap_128.h
@@ -0,0 +1,178 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2018-2020 Alex Richardson
+ * All rights reserved.
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237
+ * ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+// The following macros are expected to be defined
+#define CC_FORMAT_LOWER 128
+#define CC_FORMAT_UPPER 128
+/* These should match the definitions in sail! */
+#define CC128_CAP_SIZE 16
+#define CC128_CAP_BITS 128
+#define CC128_ADDR_WIDTH 64
+#define CC128_LEN_WIDTH 65
+/* Max exponent is the largest exponent _required_, not that can be encoded. */
+#define CC128_MANTISSA_WIDTH 14
+#define CC128_MAX_EXPONENT 52
+#define CC128_CURSOR_MASK 0xFFFFFFFFFFFFFFFF
+#define CC128_MAX_ADDRESS_PLUS_ONE ((cc128_length_t)1u << CC128_ADDR_WIDTH)
+#define CC128_NULL_TOP CC128_MAX_ADDRESS_PLUS_ONE
+#define CC128_NULL_LENGTH CC128_MAX_ADDRESS_PLUS_ONE
+#define CC128_MAX_LENGTH CC128_MAX_ADDRESS_PLUS_ONE
+#define CC128_MAX_TOP CC128_MAX_ADDRESS_PLUS_ONE
+#define CC128_MAX_ADDR UINT64_MAX
+/* Special otypes are allocated downwards from -1 */
+#define CC128_SPECIAL_OTYPE_VAL(subtract) (CC128_MAX_REPRESENTABLE_OTYPE - subtract##u)
+#define CC128_SPECIAL_OTYPE_VAL_SIGNED(subtract) (((int64_t)-1) - subtract##u)
+
+/* Use __uint128 to represent 65 bit length */
+__extension__ typedef unsigned __int128 cc128_length_t;
+__extension__ typedef signed __int128 cc128_offset_t;
+typedef uint64_t cc128_addr_t;
+#include "cheri_compressed_cap_macros.h"
+
+/* ignore ISO C restricts enumerator values to range of 'int' */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+enum {
+ _CC_FIELD(UPERMS, 127, 124),
+ _CC_FIELD(HWPERMS, 123, 112),
+ _CC_FIELD(RESERVED, 111, 110),
+ _CC_FIELD(FLAGS, 109, 109),
+ _CC_FIELD(OTYPE, 108, 91),
+ _CC_FIELD(EBT, 90, 64),
+
+ _CC_FIELD(INTERNAL_EXPONENT, 90, 90),
+ _CC_FIELD(TOP_ENCODED, 89, 78),
+ _CC_FIELD(BOTTOM_ENCODED, 77, 64),
+
+ // Top/bottom offsets depending in INTERNAL_EXPONENT flag:
+ // Without internal exponent:
+ _CC_FIELD(EXP_ZERO_TOP, 89, 78),
+ _CC_FIELD(EXP_ZERO_BOTTOM, 77, 64),
+ // With internal exponent:
+ _CC_FIELD(EXP_NONZERO_TOP, 89, 81),
+ _CC_FIELD(EXPONENT_HIGH_PART, 80, 78),
+ _CC_FIELD(EXP_NONZERO_BOTTOM, 77, 67),
+ _CC_FIELD(EXPONENT_LOW_PART, 66, 64),
+};
+#pragma GCC diagnostic pop
+
+#define CC128_OTYPE_BITS CC128_FIELD_OTYPE_SIZE
+#define CC128_BOT_WIDTH CC128_FIELD_EXP_ZERO_BOTTOM_SIZE
+#define CC128_BOT_INTERNAL_EXP_WIDTH CC128_FIELD_EXP_NONZERO_BOTTOM_SIZE
+#define CC128_EXP_LOW_WIDTH CC128_FIELD_EXPONENT_LOW_PART_SIZE
+
+#define CC128_PERM_GLOBAL (1 << 0)
+#define CC128_PERM_EXECUTE (1 << 1)
+#define CC128_PERM_LOAD (1 << 2)
+#define CC128_PERM_STORE (1 << 3)
+#define CC128_PERM_LOAD_CAP (1 << 4)
+#define CC128_PERM_STORE_CAP (1 << 5)
+#define CC128_PERM_STORE_LOCAL (1 << 6)
+#define CC128_PERM_SEAL (1 << 7)
+#define CC128_PERM_CINVOKE (1 << 8)
+#define CC128_PERM_UNSEAL (1 << 9)
+#define CC128_PERM_ACCESS_SYS_REGS (1 << 10)
+#define CC128_PERM_SETCID (1 << 11)
+
+#define CC128_HIGHEST_PERM CC128_PERM_SETCID
+
+_CC_STATIC_ASSERT(CC128_HIGHEST_PERM < CC128_FIELD_HWPERMS_MAX_VALUE, "permissions not representable?");
+_CC_STATIC_ASSERT((CC128_HIGHEST_PERM << 1) > CC128_FIELD_HWPERMS_MAX_VALUE, "all permission bits should be used");
+
+#define CC128_PERMS_ALL (0xfff) /* [0...11] */
+#define CC128_UPERMS_ALL (0xf) /* [15...18] */
+#define CC128_UPERMS_SHFT (15)
+#define CC128_UPERMS_MEM_SHFT (12)
+#define CC128_MAX_UPERM (3)
+
+// We reserve 16 otypes
+enum _CC_N(OTypes) {
+ CC128_FIRST_NONRESERVED_OTYPE = 0,
+ CC128_MAX_REPRESENTABLE_OTYPE = ((1u << CC128_OTYPE_BITS) - 1u),
+ _CC_SPECIAL_OTYPE(OTYPE_UNSEALED, 0),
+ _CC_SPECIAL_OTYPE(OTYPE_SENTRY, 1),
+ _CC_SPECIAL_OTYPE(OTYPE_INDIRECT_PAIR, 2),
+ _CC_SPECIAL_OTYPE(OTYPE_INDIRECT_SENTRY, 3),
+ _CC_SPECIAL_OTYPE(OTYPE_RESERVED_LAST, 15),
+ /*
+ * We allocate otypes subtracting from the maximum value, so the smallest is
+ * actually the one with the largest _CC_SPECIAL_OTYPE() argument.
+ * With 16 reserved otypes, this is currently -16, i.e. 0x3fff0.
+ */
+ _CC_N(MIN_RESERVED_OTYPE) = _CC_N(OTYPE_RESERVED_LAST),
+ _CC_N(MAX_RESERVED_OTYPE) = _CC_N(OTYPE_UNSEALED),
+};
+
+#define CC128_LS_SPECIAL_OTYPES(ITEM, ...) \
+ ITEM(OTYPE_UNSEALED, __VA_ARGS__) \
+ ITEM(OTYPE_SENTRY, __VA_ARGS__) \
+ ITEM(OTYPE_INDIRECT_PAIR, __VA_ARGS__) \
+ ITEM(OTYPE_INDIRECT_SENTRY, __VA_ARGS__)
+
+_CC_STATIC_ASSERT_SAME(CC128_MANTISSA_WIDTH, CC128_FIELD_EXP_ZERO_BOTTOM_SIZE);
+
+#include "cheri_compressed_cap_common.h"
+
+// Sanity-check mask is the expected NULL encoding
+_CC_STATIC_ASSERT_SAME(CC128_NULL_XOR_MASK, UINT64_C(0x00001ffffc018004));
+
+__attribute__((deprecated("Use cc128_compress_raw"))) static inline uint64_t
+compress_128cap_without_xor(const cc128_cap_t* csp) {
+ return cc128_compress_raw(csp);
+}
+
+__attribute__((deprecated("Use cc128_compress_mem"))) static inline uint64_t compress_128cap(const cc128_cap_t* csp) {
+ return cc128_compress_mem(csp);
+}
+
+__attribute__((deprecated("Use cc128_decompress_raw"))) static inline void
+decompress_128cap_already_xored(uint64_t pesbt, uint64_t cursor, cc128_cap_t* cdp) {
+ cc128_decompress_raw(pesbt, cursor, cdp->cr_tag, cdp);
+}
+
+__attribute__((deprecated("Use cc128_decompress_mem"))) static inline void
+decompress_128cap(uint64_t pesbt, uint64_t cursor, _cc_cap_t* cdp) {
+ cc128_decompress_mem(pesbt, cursor, cdp->cr_tag, cdp);
+}
+
+#define CC128_FIELD(name, last, start) _CC_FIELD(name, last, start)
+#define CC128_ENCODE_FIELD(value, name) _CC_ENCODE_FIELD(value, name)
+#define CC128_EXTRACT_FIELD(value, name) _CC_EXTRACT_FIELD(value, name)
+#define CC128_ENCODE_EBT_FIELD(value, name) _CC_ENCODE_EBT_FIELD(value, name)
+
+#undef CC_FORMAT_LOWER
+#undef CC_FORMAT_UPPER
diff --git a/gdb/cheri-compressed-cap/cheri_compressed_cap_128m.h b/gdb/cheri-compressed-cap/cheri_compressed_cap_128m.h
new file mode 100644
index 00000000000..71426a56876
--- /dev/null
+++ b/gdb/cheri-compressed-cap/cheri_compressed_cap_128m.h
@@ -0,0 +1,194 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2018-2020 Alex Richardson
+ * All rights reserved.
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237
+ * ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* Notes on Morello Vs Other CHERI platforms:
+ * The Morello Psuedo-code thinks of fields as inverted on each use, rather than being
+ * XOR-ED as they come from memory. To keep the style the same, I am inverting on load
+ * like we do with other CHERI platforms.
+ * Morello does NOT invert otype.
+ *
+ * An all 1's exponent, REGARDLESS of other bits in top and bottom, means max length
+ * cap!
+ * This gives rise to a whole bunch of non-canon max length caps in buildcap =(
+ *
+ * Flag bits are the same as top byte ignore bits.
+ * When adding to the address, representability checks mask the address AND the increment
+ * For bounds calculation, flags are ignored, and 56-bit addresses are SIGN EXTENDED?!?!?
+ * To avoid bugs around this, the highest non-flag bit is not allowed to change
+ *
+ * This means doing a set bounds on a cap with this bit set is out of bounds???
+ * Also, caps with flag bits in the address are out of bounds, if length around 2^56 (unless they match the 58th bit)
+ *
+ * Morello embeds the user permissions in the middle of the hardware permissions.
+ */
+#define CC_IS_MORELLO
+
+// The following macros are expected to be defined
+#define CC_FORMAT_LOWER 128m
+#define CC_FORMAT_UPPER 128M
+/* These should match the definitions in sail! */
+#define CC128M_CAP_SIZE 16
+#define CC128M_CAP_BITS 128
+#define CC128M_ADDR_WIDTH 64
+#define CC128M_LEN_WIDTH 65
+/* Max exponent is the largest exponent _required_, not that can be encoded. */
+#define CC128M_MANTISSA_WIDTH 16
+#define CC128M_MAX_EXPONENT 50
+#define CC128M_MAX_ENCODABLE_EXPONENT 63
+#define CC128M_CURSOR_MASK 0x00FFFFFFFFFFFFFF
+#define CC128M_MAX_ADDRESS_PLUS_ONE ((cc128m_length_t)1u << CC128M_ADDR_WIDTH)
+#define CC128M_NULL_TOP CC128M_MAX_ADDRESS_PLUS_ONE
+#define CC128M_NULL_LENGTH CC128M_MAX_ADDRESS_PLUS_ONE
+#define CC128M_MAX_LENGTH CC128M_MAX_ADDRESS_PLUS_ONE
+#define CC128M_MAX_TOP CC128M_MAX_ADDRESS_PLUS_ONE
+#define CC128M_MAX_ADDR UINT64_MAX
+/* Special otypes are allocated upwards from 0 */
+#define CC128M_SPECIAL_OTYPE_VAL(val) (val##u)
+#define CC128M_SPECIAL_OTYPE_VAL_SIGNED(val) (val##u)
+
+/* Use __uint128 to represent 65 bit length */
+__extension__ typedef unsigned __int128 cc128m_length_t;
+__extension__ typedef signed __int128 cc128m_offset_t;
+typedef uint64_t cc128m_addr_t;
+#include "cheri_compressed_cap_macros.h"
+
+/* ignore ISO C restricts enumerator values to range of 'int' */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+enum {
+ // Morello HW perms actually 127..116, and 111...100. But seperating the fields is just a headache, and would make
+ // other code more complex. Pretend that they are all HW Perms.
+ _CC_FIELD(HWPERMS, 127, 110),
+ _CC_FIELD(UPERMS, 111, 112),
+ // Should _CC_FIELD(UPERMS, 115, 112), if that wouldn't cause a double count because of above.
+ _CC_FIELD(OTYPE, 109, 95),
+ _CC_FIELD(EBT, 94, 64),
+// This is a bit dodgy. This enum only really works for non-address bits.
+// Just provide nonsense values that will make the length of the range 0.
+// Should really be `_CC_FIELD(FLAGS, 63, 56)', if this stuff applied to the address
+#define MORELLO_FLAG_BITS 8
+ _CC_FIELD(FLAGS, 64, 65),
+ _CC_FIELD(RESERVED, 64, 65),
+
+ _CC_FIELD(INTERNAL_EXPONENT, 94, 94),
+ _CC_FIELD(TOP_ENCODED, 93, 80),
+ _CC_FIELD(BOTTOM_ENCODED, 79, 64),
+
+ // Top/bottom offsets depending in INTERNAL_EXPONENT flag:
+ // Without internal exponent:
+ _CC_FIELD(EXP_ZERO_TOP, 93, 80),
+ _CC_FIELD(EXP_ZERO_BOTTOM, 79, 64),
+ // With internal exponent:
+ _CC_FIELD(EXP_NONZERO_TOP, 93, 83),
+ _CC_FIELD(EXPONENT_HIGH_PART, 82, 80),
+ _CC_FIELD(EXP_NONZERO_BOTTOM, 79, 67),
+ _CC_FIELD(EXPONENT_LOW_PART, 66, 64),
+};
+#pragma GCC diagnostic pop
+
+#define CC128M_OTYPE_BITS CC128M_FIELD_OTYPE_SIZE
+#define CC128M_BOT_WIDTH CC128M_FIELD_EXP_ZERO_BOTTOM_SIZE
+#define CC128M_BOT_INTERNAL_EXP_WIDTH CC128M_FIELD_EXP_NONZERO_BOTTOM_SIZE
+#define CC128M_EXP_LOW_WIDTH CC128M_FIELD_EXPONENT_LOW_PART_SIZE
+
+#define CC128M_PERM_GLOBAL (1 << 0)
+#define CC128M_PERM_EXECUTIVE (1 << 1)
+// Then 4 user types
+#define CC128M_PERM_MUTABLE_LOAD (1 << 6)
+#define CC128M_PERM_SETCID (1 << 7)
+#define CC128M_PERM_BRANCH_SEALED_PAIR (1 << 8)
+#define CC128M_PERM_CINVOKE CC128M_PERM_BRANCH_SEALED_PAIR
+#define CC128M_PERM_SYSTEM (1 << 9)
+#define CC128M_PERM_ACCESS_SYS_REGS CC128M_PERM_SYSTEM
+#define CC128M_PERM_UNSEAL (1 << 10)
+#define CC128M_PERM_SEAL (1 << 11)
+#define CC128M_PERM_STORE_LOCAL (1 << 12)
+#define CC128M_PERM_STORE_CAP (1 << 13)
+#define CC128M_PERM_LOAD_CAP (1 << 14)
+#define CC128M_PERM_EXECUTE (1 << 15)
+#define CC128M_PERM_STORE (1 << 16)
+#define CC128M_PERM_LOAD (1 << 17)
+
+#define CC128M_HIGHEST_PERM CC128M_PERM_LOAD
+
+_CC_STATIC_ASSERT(CC128M_HIGHEST_PERM < CC128M_FIELD_HWPERMS_MAX_VALUE, "permissions not representable?");
+_CC_STATIC_ASSERT((CC128M_HIGHEST_PERM << 1) > CC128M_FIELD_HWPERMS_MAX_VALUE, "all permission bits should be used");
+
+#define CC128M_PERMS_ALL (0x3FFFF) /* [0...1,6..17] */
+#define CC128M_UPERMS_ALL (0x0) /* [15...18] */
+#define CC128M_UPERMS_SHFT (0)
+#define CC128M_MAX_UPERM (3)
+
+/* Morello calls the special otypes LB, LPB and RB.
+ * LPB is "load pair branch". It loads the first two caps pointed to and ccalls them.
+ * LB is "load branch". It loads, plus an immediate, the cap pointed to and jumps to it.
+ * RB is a sentry. God knows what it stands for. Restricted Branch?
+ */
+
+// We reserve 3 otypes
+enum _CC_N(OTypes) {
+ CC128M_FIRST_NONRESERVED_OTYPE = 0,
+ CC128M_MAX_REPRESENTABLE_OTYPE = ((1u << CC128M_OTYPE_BITS) - 1u),
+ _CC_SPECIAL_OTYPE(OTYPE_UNSEALED, 0),
+ _CC_SPECIAL_OTYPE(OTYPE_SENTRY, 1),
+ _CC_SPECIAL_OTYPE(OTYPE_LOAD_PAIR_BRANCH, 2),
+ _CC_SPECIAL_OTYPE(OTYPE_LOAD_BRANCH, 3),
+ _CC_N(MIN_RESERVED_OTYPE) = _CC_N(OTYPE_UNSEALED),
+ _CC_N(MAX_RESERVED_OTYPE) = _CC_N(OTYPE_LOAD_BRANCH),
+};
+
+#define CC128M_LS_SPECIAL_OTYPES(ITEM, ...) \
+ ITEM(OTYPE_UNSEALED, __VA_ARGS__) \
+ ITEM(OTYPE_SENTRY, __VA_ARGS__) \
+ ITEM(OTYPE_LOAD_PAIR_BRANCH, __VA_ARGS__) \
+ ITEM(OTYPE_LOAD_BRANCH, __VA_ARGS__)
+
+_CC_STATIC_ASSERT_SAME(CC128M_MANTISSA_WIDTH, CC128M_FIELD_EXP_ZERO_BOTTOM_SIZE);
+
+#include "cheri_compressed_cap_common.h"
+
+// Sanity-check mask is the expected NULL encoding
+_CC_STATIC_ASSERT_SAME(CC128M_NULL_XOR_MASK, UINT64_C(0x0000000040070007));
+
+#define CC128M_FIELD(name, last, start) _CC_FIELD(name, last, start)
+#define CC128M_ENCODE_FIELD(value, name) _CC_ENCODE_FIELD(value, name)
+#define CC128M_EXTRACT_FIELD(value, name) _CC_EXTRACT_FIELD(value, name)
+#define CC128M_ENCODE_EBT_FIELD(value, name) _CC_ENCODE_EBT_FIELD(value, name)
+
+#undef CC_IS_MORELLO
+#undef CC_FORMAT_LOWER
+#undef CC_FORMAT_UPPER
diff --git a/gdb/cheri-compressed-cap/cheri_compressed_cap_64.h b/gdb/cheri-compressed-cap/cheri_compressed_cap_64.h
new file mode 100644
index 00000000000..3df64823fea
--- /dev/null
+++ b/gdb/cheri-compressed-cap/cheri_compressed_cap_64.h
@@ -0,0 +1,147 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2018-2020 Alex Richardson
+ * All rights reserved.
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237
+ * ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+// The following macros are expected to be defined
+#define CC_FORMAT_LOWER 64
+#define CC_FORMAT_UPPER 64
+/* These should match the definitions in sail! */
+#define CC64_CAP_SIZE 8
+#define CC64_CAP_BITS 64
+#define CC64_ADDR_WIDTH 32
+#define CC64_LEN_WIDTH 33
+#define CC64_MANTISSA_WIDTH 8
+#define CC64_MAX_EXPONENT 26
+#define CC64_CURSOR_MASK 0xFFFFFFFF
+
+#define CC64_MAX_ADDRESS_PLUS_ONE ((cc64_length_t)1u << CC64_ADDR_WIDTH)
+#define CC64_NULL_TOP CC64_MAX_ADDRESS_PLUS_ONE
+#define CC64_NULL_LENGTH CC64_MAX_ADDRESS_PLUS_ONE
+#define CC64_MAX_LENGTH CC64_MAX_ADDRESS_PLUS_ONE
+#define CC64_MAX_TOP CC64_MAX_ADDRESS_PLUS_ONE
+#define CC64_MAX_ADDR UINT32_MAX
+/* Special otypes are allocated downwards from -1 */
+#define CC64_SPECIAL_OTYPE_VAL(subtract) (CC64_MAX_REPRESENTABLE_OTYPE - subtract##u)
+#define CC64_SPECIAL_OTYPE_VAL_SIGNED(subtract) (((int64_t)-1) - subtract##u)
+
+/* Use uint64_t to represent 33 bit length */
+typedef uint64_t cc64_length_t;
+typedef int64_t cc64_offset_t;
+typedef uint32_t cc64_addr_t;
+#include "cheri_compressed_cap_macros.h"
+
+/* ignore ISO C restricts enumerator values to range of 'int' */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+enum {
+ _CC_FIELD(HWPERMS, 63, 52),
+ _CC_FIELD(FLAGS, 51, 51),
+ _CC_FIELD(OTYPE, 50, 47),
+ _CC_FIELD(EBT, 46, 32),
+
+ _CC_FIELD(INTERNAL_EXPONENT, 46, 46),
+ _CC_FIELD(TOP_ENCODED, 45, 40),
+ _CC_FIELD(BOTTOM_ENCODED, 39, 32),
+
+ // Top/bottom offsets depending in INTERNAL_EXPONENT flag:
+ // Without internal exponent:
+ _CC_FIELD(EXP_ZERO_TOP, 45, 40),
+ _CC_FIELD(EXP_ZERO_BOTTOM, 39, 32),
+ // With internal exponent:
+ _CC_FIELD(EXP_NONZERO_TOP, 45, 43),
+ _CC_FIELD(EXPONENT_HIGH_PART, 42, 40),
+ _CC_FIELD(EXP_NONZERO_BOTTOM, 39, 35),
+ _CC_FIELD(EXPONENT_LOW_PART, 34, 32),
+ _CC_FIELD(RESERVED, 31, 32), /* No reserved bits */
+ _CC_FIELD(UPERMS, 31, 32), /* No uperms */
+};
+#pragma GCC diagnostic pop
+_CC_STATIC_ASSERT_SAME(CC64_FIELD_UPERMS_SIZE, 0);
+_CC_STATIC_ASSERT_SAME(CC64_FIELD_RESERVED_SIZE, 0);
+
+#define CC64_OTYPE_BITS CC64_FIELD_OTYPE_SIZE
+#define CC64_BOT_WIDTH CC64_FIELD_EXP_ZERO_BOTTOM_SIZE
+#define CC64_BOT_INTERNAL_EXP_WIDTH CC64_FIELD_EXP_NONZERO_BOTTOM_SIZE
+#define CC64_EXP_LOW_WIDTH CC64_FIELD_EXPONENT_LOW_PART_SIZE
+
+#define CC64_PERM_GLOBAL (1 << 0)
+#define CC64_PERM_EXECUTE (1 << 1)
+#define CC64_PERM_LOAD (1 << 2)
+#define CC64_PERM_STORE (1 << 3)
+#define CC64_PERM_LOAD_CAP (1 << 4)
+#define CC64_PERM_STORE_CAP (1 << 5)
+#define CC64_PERM_STORE_LOCAL (1 << 6)
+#define CC64_PERM_SEAL (1 << 7)
+#define CC64_PERM_CINVOKE (1 << 8)
+#define CC64_PERM_UNSEAL (1 << 9)
+#define CC64_PERM_ACCESS_SYS_REGS (1 << 10)
+#define CC64_PERM_SETCID (1 << 11)
+_CC_STATIC_ASSERT(CC64_PERM_SETCID < CC64_FIELD_HWPERMS_MAX_VALUE, "permissions not representable?");
+
+#define CC64_PERMS_ALL (0xfff) /* [0...11] */
+#define CC64_UPERMS_ALL (0) /* [15...18] */
+#define CC64_UPERMS_SHFT (15)
+#define CC64_MAX_UPERM (0)
+
+// We reserve 16 otypes
+enum _CC_N(OTypes) {
+ CC64_MAX_REPRESENTABLE_OTYPE = ((1u << CC64_OTYPE_BITS) - 1u),
+ _CC_SPECIAL_OTYPE(OTYPE_UNSEALED, 0),
+ _CC_SPECIAL_OTYPE(OTYPE_SENTRY, 1),
+ _CC_SPECIAL_OTYPE(OTYPE_RESERVED2, 2),
+ _CC_SPECIAL_OTYPE(OTYPE_RESERVED3, 3),
+ _CC_N(MIN_RESERVED_OTYPE) = _CC_N(OTYPE_RESERVED3),
+ _CC_N(MAX_RESERVED_OTYPE) = _CC_N(OTYPE_UNSEALED),
+};
+
+#define CC64_LS_SPECIAL_OTYPES(ITEM, ...) \
+ ITEM(OTYPE_UNSEALED, __VA_ARGS__) \
+ ITEM(OTYPE_SENTRY, __VA_ARGS__)
+
+_CC_STATIC_ASSERT_SAME(CC64_MANTISSA_WIDTH, CC64_FIELD_EXP_ZERO_BOTTOM_SIZE);
+
+#include "cheri_compressed_cap_common.h"
+
+// Sanity-check mask is the expected NULL encoding
+_CC_STATIC_ASSERT_SAME(CC64_NULL_XOR_MASK, UINT32_C(0x7c302));
+
+#define CC64_FIELD(name, last, start) _CC_FIELD(name, last, start)
+#define CC64_ENCODE_FIELD(value, name) _CC_ENCODE_FIELD(value, name)
+#define CC64_EXTRACT_FIELD(value, name) _CC_EXTRACT_FIELD(value, name)
+#define CC64_ENCODE_EBT_FIELD(value, name) _CC_ENCODE_EBT_FIELD(value, name)
+
+#undef CC_FORMAT_LOWER
+#undef CC_FORMAT_UPPER
diff --git a/gdb/cheri-compressed-cap/cheri_compressed_cap_common.h b/gdb/cheri-compressed-cap/cheri_compressed_cap_common.h
new file mode 100644
index 00000000000..1adc85edf3a
--- /dev/null
+++ b/gdb/cheri-compressed-cap/cheri_compressed_cap_common.h
@@ -0,0 +1,987 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2018 Lawrence Esswood
+ * Copyright (c) 2018-2020 Alex Richardson
+ * All rights reserved.
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237
+ * ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <stdbool.h>
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+enum {
+ // For the reset capability we use an internal exponent and need
+ // 2^ADDR_WIDTH, which uses the max exponent.
+ _CC_N(RESET_EXP) = _CC_N(MAX_EXPONENT),
+ _CC_N(RESET_T) = 1u << (_CC_N(ADDR_WIDTH) - _CC_N(RESET_EXP) - _CC_N(FIELD_EXPONENT_HIGH_PART_SIZE)),
+#ifdef CC_IS_MORELLO
+ // Due to magic constant XOR aversion (i.e. fields are either entirely
+ // inverted or not at all, rather than select bits within them like in
+ // normal CHERI Concentrate), NULL is special in Morello.
+ _CC_N(NULL_EXP) = _CC_N(MAX_ENCODABLE_EXPONENT),
+ _CC_N(NULL_T) = 0,
+#else
+ // NULL uses identical bounds encoding to the reset capability.
+ _CC_N(NULL_EXP) = _CC_N(RESET_EXP),
+ _CC_N(NULL_T) = _CC_N(RESET_T),
+#endif
+ _CC_N(RESET_EBT) =
+ _CC_ENCODE_EBT_FIELD(1, INTERNAL_EXPONENT) | _CC_ENCODE_EBT_FIELD(_CC_N(RESET_T), EXP_NONZERO_TOP) |
+ _CC_ENCODE_EBT_FIELD(0, EXP_NONZERO_BOTTOM) |
+ _CC_ENCODE_EBT_FIELD(_CC_N(RESET_EXP) >> _CC_N(FIELD_EXPONENT_LOW_PART_SIZE), EXPONENT_HIGH_PART) |
+ _CC_ENCODE_EBT_FIELD(_CC_N(RESET_EXP) & _CC_N(FIELD_EXPONENT_LOW_PART_MAX_VALUE), EXPONENT_LOW_PART),
+ _CC_N(NULL_PESBT) = _CC_ENCODE_FIELD(0, UPERMS) | _CC_ENCODE_FIELD(0, HWPERMS) | _CC_ENCODE_FIELD(0, RESERVED) |
+ _CC_ENCODE_FIELD(0, FLAGS) | _CC_ENCODE_FIELD(1, INTERNAL_EXPONENT) |
+ _CC_ENCODE_FIELD(_CC_N(OTYPE_UNSEALED), OTYPE) |
+ _CC_ENCODE_FIELD(_CC_N(NULL_T), EXP_NONZERO_TOP) | _CC_ENCODE_FIELD(0, EXP_NONZERO_BOTTOM) |
+ _CC_ENCODE_FIELD(_CC_N(NULL_EXP) >> _CC_N(FIELD_EXPONENT_LOW_PART_SIZE), EXPONENT_HIGH_PART) |
+ _CC_ENCODE_FIELD(_CC_N(NULL_EXP) & _CC_N(FIELD_EXPONENT_LOW_PART_MAX_VALUE), EXPONENT_LOW_PART),
+ // We mask on store/load so this invisibly keeps null 0 whatever we choose
+ // it to be.
+ _CC_N(NULL_XOR_MASK) = _CC_N(NULL_PESBT),
+};
+#pragma GCC diagnostic pop
+
+#define _cc_length_t _cc_N(length_t)
+#define _cc_offset_t _cc_N(offset_t)
+#define _cc_addr_t _cc_N(addr_t)
+
+#define _CC_MANTISSA_WIDTH _CC_N(MANTISSA_WIDTH)
+#define _CC_MAX_EXPONENT _CC_N(MAX_EXPONENT)
+#define _CC_BOT_INTERNAL_EXP_WIDTH _CC_N(FIELD_EXP_NONZERO_BOTTOM_SIZE)
+#define _CC_EXP_LOW_WIDTH _CC_N(FIELD_EXPONENT_LOW_PART_SIZE)
+#define _CC_EXP_HIGH_WIDTH _CC_N(FIELD_EXPONENT_HIGH_PART_SIZE)
+#define _CC_ADDR_WIDTH _CC_N(ADDR_WIDTH)
+#define _CC_LEN_WIDTH _CC_N(LEN_WIDTH)
+#define _CC_MAX_ADDR _CC_N(MAX_ADDR)
+#define _CC_MAX_TOP _CC_N(MAX_TOP)
+#define _CC_CURSOR_MASK _CC_N(CURSOR_MASK)
+// Check that the sizes of the individual fields match up
+_CC_STATIC_ASSERT_SAME(_CC_N(FIELD_EBT_SIZE) + _CC_N(FIELD_OTYPE_SIZE) + _CC_N(FIELD_FLAGS_SIZE) +
+ _CC_N(FIELD_RESERVED_SIZE) + _CC_N(FIELD_HWPERMS_SIZE) + _CC_N(FIELD_UPERMS_SIZE),
+ _CC_ADDR_WIDTH);
+_CC_STATIC_ASSERT_SAME(_CC_N(FIELD_INTERNAL_EXPONENT_SIZE) + _CC_N(FIELD_EXP_ZERO_TOP_SIZE) +
+ _CC_N(FIELD_EXP_ZERO_BOTTOM_SIZE),
+ _CC_N(FIELD_EBT_SIZE));
+_CC_STATIC_ASSERT_SAME(_CC_N(FIELD_INTERNAL_EXPONENT_SIZE) + _CC_N(FIELD_TOP_ENCODED_SIZE) +
+ _CC_N(FIELD_BOTTOM_ENCODED_SIZE),
+ _CC_N(FIELD_EBT_SIZE));
+_CC_STATIC_ASSERT_SAME(_CC_N(FIELD_INTERNAL_EXPONENT_SIZE) + _CC_N(FIELD_EXP_NONZERO_TOP_SIZE) +
+ _CC_N(FIELD_EXP_NONZERO_BOTTOM_SIZE) + _CC_N(FIELD_EXPONENT_HIGH_PART_SIZE) +
+ _CC_N(FIELD_EXPONENT_LOW_PART_SIZE),
+ _CC_N(FIELD_EBT_SIZE));
+
+// Sanity-check the min/max otype macros:
+_CC_STATIC_ASSERT(_CC_N(MIN_RESERVED_OTYPE) >= 0, "MIN_RESERVED_OTYPE is signed?");
+_CC_STATIC_ASSERT(_CC_N(MIN_RESERVED_OTYPE) < _CC_N(MAX_RESERVED_OTYPE),
+ "MIN_RESERVED_OTYPE greater than MAX_RESERVED_OTYPE?");
+_CC_STATIC_ASSERT(_CC_N(MIN_RESERVED_OTYPE) <= _CC_N(MAX_REPRESENTABLE_OTYPE), "MIN_RESERVED_OTYPE out of range?");
+_CC_STATIC_ASSERT(_CC_N(MAX_RESERVED_OTYPE) <= _CC_N(MAX_REPRESENTABLE_OTYPE), "MAX_RESERVED_OTYPE out of range?");
+
+// Forward-declare the accessors since we use them inside the struct body:
+struct _cc_N(cap);
+static inline uint8_t _cc_N(get_flags)(const struct _cc_N(cap)* cap);
+static inline uint32_t _cc_N(get_otype)(const struct _cc_N(cap)* cap);
+static inline uint32_t _cc_N(get_perms)(const struct _cc_N(cap)* cap);
+static inline uint8_t _cc_N(get_reserved)(const struct _cc_N(cap)* cap);
+static inline uint32_t _cc_N(get_uperms)(const struct _cc_N(cap)* cap);
+
+// In order to allow vector loads and store from memory we can optionally reverse the first two fields.
+struct _cc_N(cap) {
+ /* offset = cursor - base */
+#ifdef _CC_REVERSE_PESBT_CURSOR_ORDER
+ /* Original PESBT from the decompressed capability. If you modify
+ * other fields, you must be sure to either recalculate this field to match */
+ _cc_addr_t cr_pesbt;
+ _cc_addr_t _cr_cursor; /* Capability cursor */
+#else
+ _cc_addr_t _cr_cursor;
+ _cc_addr_t cr_pesbt;
+#endif
+ _cc_length_t _cr_top; /* Capability top */
+ _cc_addr_t cr_base; /* Capability base addr */
+ uint8_t cr_tag; /* Tag */
+ uint8_t cr_bounds_valid; /* Set if bounds decode was given an invalid cap */
+ uint8_t cr_exp; /* Exponent */
+ uint8_t cr_extra; /* Additional data stored by the caller */
+#ifdef __cplusplus
+ inline _cc_addr_t base() const { return cr_base; }
+ inline _cc_addr_t address() const { return _cr_cursor; }
+ inline _cc_offset_t offset() const { return (_cc_offset_t)_cr_cursor - (_cc_offset_t)cr_base; }
+ inline _cc_length_t top() const { return _cr_top; }
+ inline _cc_addr_t top64() const {
+ const _cc_length_t t = top();
+ return t > _CC_MAX_ADDR ? _CC_MAX_ADDR : (_cc_addr_t)t;
+ }
+ inline _cc_length_t length() const { return _cr_top - cr_base; }
+ inline _cc_addr_t length64() const {
+ const _cc_length_t l = length();
+ return l > _CC_MAX_ADDR ? _CC_MAX_ADDR : (_cc_addr_t)l;
+ }
+ inline uint32_t software_permissions() const { return _cc_N(get_uperms)(this); }
+ inline uint32_t permissions() const { return _cc_N(get_perms)(this); }
+ inline uint32_t type() const { return _cc_N(get_otype)(this); }
+ inline bool is_sealed() const { return type() != _CC_N(OTYPE_UNSEALED); }
+ inline uint8_t reserved_bits() const { return _cc_N(get_reserved)(this); }
+ inline uint8_t flags() const { return _cc_N(get_flags)(this); }
+ inline bool operator==(const _cc_N(cap) & other) const;
+#endif
+};
+typedef struct _cc_N(cap) _cc_N(cap_t);
+#define _cc_cap_t _cc_N(cap_t)
+
+static inline bool _cc_N(exactly_equal)(const _cc_cap_t* a, const _cc_cap_t* b) {
+ return a->cr_tag == b->cr_tag && a->_cr_cursor == b->_cr_cursor && a->cr_pesbt == b->cr_pesbt;
+}
+
+static inline bool _cc_N(raw_equal)(const _cc_cap_t* a, const _cc_cap_t* b) {
+ return a->_cr_cursor == b->_cr_cursor &&
+ a->cr_pesbt == b->cr_pesbt &&
+ a->_cr_top == b->_cr_top &&
+ a->cr_base == b->cr_base &&
+ a->cr_tag == b->cr_tag &&
+ a->cr_bounds_valid == b->cr_bounds_valid &&
+ a->cr_exp == b->cr_exp &&
+ a->cr_extra == b->cr_extra;
+}
+
+/* Returns the index of the most significant bit set in x */
+static inline uint32_t _cc_N(idx_MSNZ)(uint64_t x) {
+#if defined(__GNUC__) && !defined(__clang__)
+#define CAP_HAVE_BUILTIN_CLZ
+#elif defined(__has_builtin)
+#if __has_builtin(__builtin_clzll)
+#define CAP_HAVE_BUILTIN_CLZ
+#endif
+#endif
+
+#ifndef CAP_HAVE_BUILTIN_CLZ
+/* floor(log2(x)) != floor(log2(y)) */
+#warning "__builtin_clzll not supported, using slower path"
+#define ld_neq(x, y) (((x) ^ (y)) > ((x) & (y)))
+ uint32_t r = ld_neq(x, x & 0x5555555555555555ull) + (ld_neq(x, x & 0x3333333333333333ull) << 1) +
+ (ld_neq(x, x & 0x0f0f0f0f0f0f0f0full) << 2) + (ld_neq(x, x & 0x00ff00ff00ff00ffull) << 3) +
+ (ld_neq(x, x & 0x0000ffff0000ffffull) << 4) + (ld_neq(x, x & 0x00000000ffffffffull) << 5);
+#undef ld_neq
+#else
+ _cc_debug_assert(x != 0);
+ uint32_t r = 63u - (uint32_t)__builtin_clzll(x);
+#endif
+ return r;
+}
+
+/*
+ * e = idxMSNZ( (rlength + (rlength >> 6)) >> 19 )
+ * where (rlength + (rlength >> 6)) needs to be a 65 bit integer
+ */
+static inline uint32_t _cc_N(compute_e)(_cc_addr_t rlength, uint32_t bwidth) {
+ if (rlength < (1u << (bwidth - 1)))
+ return 0;
+
+ return (_cc_N(idx_MSNZ)(rlength) - (bwidth - 2));
+}
+
+static inline uint32_t _cc_N(get_exponent)(_cc_length_t length) {
+ const uint32_t bwidth = _CC_MANTISSA_WIDTH;
+ if (length > _CC_MAX_ADDR) {
+ return _CC_LEN_WIDTH - (bwidth - 1);
+ } else {
+ return _cc_N(compute_e)((_cc_addr_t)length, bwidth);
+ }
+}
+
+static inline uint64_t _cc_N(getbits)(uint64_t src, uint32_t start, uint32_t size) {
+ return ((src >> start) & ((UINT64_C(1) << size) - UINT64_C(1)));
+}
+
+// truncates `value`, keeping only the _least_ significant `n` bits.
+static inline uint64_t _cc_N(truncate64)(uint64_t value, size_t n) { return value & ((UINT64_C(1) << n) - 1); }
+
+// truncates `value`, keeping only the _most_ significant `n` bits.
+#define TRUNCATE_LSB_FUNC(type_width) \
+ static inline uint64_t _CC_CONCAT(_cc_N(truncateLSB_), type_width)(uint64_t value, size_t n) { \
+ _CC_STATIC_ASSERT(type_width <= 64, ""); \
+ return value >> (type_width - n); \
+ }
+TRUNCATE_LSB_FUNC(_CC_MANTISSA_WIDTH)
+TRUNCATE_LSB_FUNC(32)
+TRUNCATE_LSB_FUNC(64)
+
+#define _cc_truncateLSB_generic(type_width) _CC_CONCAT(_cc_N(truncateLSB_), _CC_EXPAND(type_width))
+#define _cc_truncateLSB(type_width) _cc_N(_CC_CONCAT(truncateLSB_, type_width))
+
+struct _cc_N(bounds_bits) {
+ uint16_t B; // bottom bits (currently 14 bits)
+ uint16_t T; // top bits (12 bits plus two implied bits)
+ uint8_t E; // exponent
+ bool IE; // internal exponent flag
+};
+#define _cc_bounds_bits struct _cc_N(bounds_bits)
+
+#define ALL_WRAPPERS(X, FN, type) \
+ static inline _cc_addr_t _cc_N(cap_pesbt_extract_##FN)(_cc_addr_t pesbt) { return _CC_EXTRACT_FIELD(pesbt, X); } \
+ static inline _cc_addr_t _cc_N(cap_pesbt_encode_##FN)(type value) { return _CC_ENCODE_FIELD(value, X); } \
+ static inline _cc_addr_t _cc_N(cap_pesbt_deposit_##FN)(_cc_addr_t pesbt, type value) { \
+ _cc_debug_assert(value <= _CC_N(FIELD_##X##_MAX_VALUE)); \
+ return (pesbt & ~_CC_N(FIELD_##X##_MASK64)) | _CC_ENCODE_FIELD(value, X); \
+ } \
+ static inline type _cc_N(get_##FN)(const _cc_cap_t* cap) { return _cc_N(cap_pesbt_extract_##FN)(cap->cr_pesbt); } \
+ static inline void _cc_N(update_##FN)(_cc_cap_t * cap, _cc_addr_t value) { \
+ cap->cr_pesbt = _cc_N(cap_pesbt_deposit_##FN)(cap->cr_pesbt, value); \
+ }
+ALL_WRAPPERS(HWPERMS, perms, uint32_t)
+ALL_WRAPPERS(UPERMS, uperms, uint32_t)
+ALL_WRAPPERS(OTYPE, otype, uint32_t)
+ALL_WRAPPERS(FLAGS, flags, uint8_t)
+ALL_WRAPPERS(RESERVED, reserved, uint8_t)
+#undef ALL_WRAPPERS
+
+/// Extract the bits used for bounds and infer the top two bits of T
+static inline _cc_bounds_bits _cc_N(extract_bounds_bits)(_cc_addr_t pesbt) {
+ _CC_STATIC_ASSERT(_CC_MANTISSA_WIDTH == _CC_N(BOT_WIDTH), "Wrong bot width?");
+ uint32_t BWidth = _CC_MANTISSA_WIDTH;
+ uint32_t BMask = (1u << BWidth) - 1;
+ uint32_t TMask = BMask >> 2;
+ _cc_bounds_bits result;
+ _CC_STATIC_ASSERT(sizeof(result.B) * __CHAR_BIT__ >= _CC_MANTISSA_WIDTH, "B field too small");
+ _CC_STATIC_ASSERT(sizeof(result.T) * __CHAR_BIT__ >= _CC_MANTISSA_WIDTH, "T field too small");
+ _CC_STATIC_ASSERT(sizeof(result.E) * __CHAR_BIT__ >=
+ _CC_N(FIELD_EXPONENT_LOW_PART_SIZE) + _CC_N(FIELD_EXPONENT_HIGH_PART_SIZE),
+ "E field too small");
+ result.IE = (bool)(uint32_t)_CC_EXTRACT_FIELD(pesbt, INTERNAL_EXPONENT);
+ uint8_t L_msb;
+ if (result.IE) {
+ result.E = (uint8_t)(_CC_EXTRACT_FIELD(pesbt, EXPONENT_LOW_PART) |
+ (_CC_EXTRACT_FIELD(pesbt, EXPONENT_HIGH_PART) << _CC_N(FIELD_EXPONENT_LOW_PART_SIZE)));
+ // Do not offset by 1! We also need to encode E=0 even with IE
+ // Also allow nonsense values over 64 - BWidth + 2: this is expected by sail-generated tests
+ // E = MIN(64 - BWidth + 2, E);
+#ifdef CC_IS_MORELLO
+ if (result.E == _CC_N(MAX_ENCODABLE_EXPONENT)) {
+ result.B = 0;
+ // This isn't top, its T. We just special case again when top is calculated.
+ result.T = 0;
+ return result;
+ }
+#endif
+ result.B = (uint16_t)_CC_EXTRACT_FIELD(pesbt, EXP_NONZERO_BOTTOM) << _CC_N(FIELD_EXPONENT_LOW_PART_SIZE);
+ result.T = (uint16_t)_CC_EXTRACT_FIELD(pesbt, EXP_NONZERO_TOP) << _CC_N(FIELD_EXPONENT_HIGH_PART_SIZE);
+ L_msb = 1;
+ } else {
+ // So, I cheated by inverting E on memory load (to match the rest of CHERI), which Morello does not do.
+ // This means parts of B and T are incorrectly inverted. So invert back again.
+#ifdef CC_IS_MORELLO
+ pesbt ^= _CC_N(NULL_XOR_MASK);
+#endif
+ result.E = 0;
+ L_msb = 0;
+ result.B = (uint16_t)_CC_EXTRACT_FIELD(pesbt, EXP_ZERO_BOTTOM);
+ result.T = (uint16_t)_CC_EXTRACT_FIELD(pesbt, EXP_ZERO_TOP);
+ }
+ /*
+ Reconstruct top two bits of T given T = B + len and:
+ 1) the top two bits of B
+ 2) most significant two bits of length derived from format above
+ 3) carry out of B[20..0] + len[20..0] that is implied if T[20..0] < B[20..0]
+ */
+ uint8_t L_carry = result.T < (result.B & TMask) ? 1 : 0;
+ uint64_t BTop2 = _cc_N(getbits)(result.B, _CC_MANTISSA_WIDTH - 2, 2);
+ uint8_t T_infer = (BTop2 + L_carry + L_msb) & 0x3;
+ result.T |= ((uint16_t)T_infer) << (BWidth - 2);
+ return result;
+}
+
+// Certain bit patterns can result in invalid bounds bits. These values must never be tagged!
+static inline bool _cc_N(bounds_bits_valid)(_cc_bounds_bits bounds) {
+ // https://github.com/CTSRD-CHERI/sail-cheri-riscv/blob/7a308ef3661e43461c8431c391aaece7fba6e992/src/cheri_properties.sail#L104
+ _cc_addr_t Bmsb = _cc_N(getbits)(bounds.B, _CC_MANTISSA_WIDTH - 1, 1);
+ _cc_addr_t Bmsb2 = _cc_N(getbits)(bounds.B, _CC_MANTISSA_WIDTH - 2, 2);
+ _cc_addr_t Tmsb = _cc_N(getbits)(bounds.T, _CC_MANTISSA_WIDTH - 1, 1);
+ if (bounds.E >= _CC_MAX_EXPONENT) {
+ return Tmsb == 0 && Bmsb2 == 0;
+ } else if (bounds.E == _CC_MAX_EXPONENT - 1) {
+ return Bmsb == 0;
+ } else {
+ return true;
+ }
+}
+
+static inline bool _cc_N(compute_base_top)(_cc_bounds_bits bounds, _cc_addr_t cursor, _cc_addr_t* base_out,
+ _cc_length_t* top_out) {
+#ifdef CC_IS_MORELLO
+ if (bounds.E > _CC_MAX_EXPONENT) {
+ bool valid = bounds.E == _CC_N(MAX_ENCODABLE_EXPONENT);
+ *base_out = 0;
+ *top_out = _CC_N(MAX_TOP);
+ return valid;
+ }
+
+ // Remove flags bits
+ cursor = cursor & _CC_CURSOR_MASK;
+ // Sign extend
+ if (cursor & ((_CC_CURSOR_MASK >> 1) + 1))
+ cursor |= ~_CC_CURSOR_MASK;
+#endif
+
+ // For the remaining computations we have to clamp E to max_E
+ // let E = min(maxE, unsigned(c.E)) in
+ uint8_t E = _CC_MIN(_CC_MAX_EXPONENT, bounds.E);
+ /* Extract bits we need to make the top correction and calculate representable limit */
+ // let a3 = truncate(a >> (E + mantissa_width - 3), 3) in
+ // let B3 = truncateLSB(c.B, 3) in
+ // let T3 = truncateLSB(c.T, 3) in
+ unsigned a3 = (unsigned)_cc_N(truncate64)(cursor >> (E + _CC_MANTISSA_WIDTH - 3), 3);
+ unsigned B3 = (unsigned)_cc_truncateLSB(_CC_MANTISSA_WIDTH)(bounds.B, 3);
+ unsigned T3 = (unsigned)_cc_truncateLSB(_CC_MANTISSA_WIDTH)(bounds.T, 3);
+ // let R3 = B3 - 0b001 in /* wraps */
+ unsigned R3 = (unsigned)_cc_N(truncate64)(B3 - 1, 3); // B3 == 0 ? 7 : B3 - 1;
+ /* Do address, base and top lie in the R aligned region above the one containing R? */
+ // let aHi = if a3 <_u R3 then 1 else 0 in
+ // let bHi = if B3 <_u R3 then 1 else 0 in
+ // let tHi = if T3 <_u R3 then 1 else 0 in
+ int aHi = a3 < R3 ? 1 : 0;
+ int bHi = B3 < R3 ? 1 : 0;
+ int tHi = T3 < R3 ? 1 : 0;
+
+ /* Compute region corrections for top and base relative to a */
+ // let correction_base = bHi - aHi in
+ // let correction_top = tHi - aHi in
+ int correction_base = bHi - aHi;
+ int correction_top = tHi - aHi;
+ // Note: shifting by 64 is UB and causes wrong results -> clamp the shift value!
+ const unsigned a_top_shift = E + _CC_MANTISSA_WIDTH;
+ // let a_top = (a >> (E + mantissa_width)) in
+ _cc_addr_t a_top = a_top_shift >= _CC_ADDR_WIDTH ? 0 : cursor >> a_top_shift;
+
+ // base : CapLenBits = truncate((a_top + correction_base) @ c.B @ zeros(E), cap_len_width);
+ _cc_length_t base = (_cc_addr_t)((int64_t)a_top + correction_base);
+ base <<= _CC_MANTISSA_WIDTH;
+ base |= bounds.B;
+ base <<= E;
+ base &= ((_cc_length_t)1 << _CC_LEN_WIDTH) - 1;
+ _cc_debug_assert((_cc_addr_t)(base >> _CC_ADDR_WIDTH) <= 1); // max 65/33 bits
+ // top : truncate((a_top + correction_top) @ c.T @ zeros(E), cap_len_width);
+ _cc_length_t top = (_cc_addr_t)((int64_t)a_top + correction_top);
+ top <<= _CC_MANTISSA_WIDTH;
+ top |= bounds.T;
+ top <<= E;
+ top &= ((_cc_length_t)1 << _CC_LEN_WIDTH) - 1;
+ _cc_debug_assert((_cc_addr_t)(top >> _CC_ADDR_WIDTH) <= 1); // max 65 bits
+
+ /* If the base and top are more than an address space away from each other,
+ invert the MSB of top. This corrects for errors that happen when the
+ representable space wraps the address space. */
+ // let base2 : bits(2) = 0b0 @ [base[cap_addr_width - 1]];
+ // Note: we ignore the top bit of base here. If we don't we can get cases
+ // where setbounds/incoffset/etc. break monotonicity.
+ unsigned base2 = _cc_N(truncate64)(base >> (_CC_ADDR_WIDTH - 1), 1);
+ // let top2 : bits(2) = top[cap_addr_width .. cap_addr_width - 1];
+ unsigned top2 = _cc_N(truncate64)(top >> (_CC_ADDR_WIDTH - 1), 2);
+ // if (E < (maxE - 1)) & (unsigned(top2 - base2) > 1) then {
+ // top[cap_addr_width] = ~(top[cap_addr_width]);
+ // };
+ if (E < (_CC_MAX_EXPONENT - 1) && (top2 - base2) > 1) {
+ top = top ^ ((_cc_length_t)1 << _CC_ADDR_WIDTH);
+ }
+
+ _cc_debug_assert((_cc_addr_t)(top >> _CC_ADDR_WIDTH) <= 1); // should be at most 1 bit over
+ // Check that base <= top for valid inputs
+ if (_cc_N(bounds_bits_valid)(bounds)) {
+ // Note: base can be > 2^64 for some (untagged) inputs with E near maxE
+ // It can also be > top for some (untagged) inputs.
+ _cc_debug_assert((_cc_addr_t)base <= top);
+ } else {
+ // _cc_debug_assert(!tagged && "Should not create invalid tagged capabilities");
+ }
+ *base_out = (_cc_addr_t)base; // strip the (invalid) top bit
+ *top_out = top;
+
+ return true;
+}
+
+static inline void _cc_N(decompress_raw)(_cc_addr_t pesbt, _cc_addr_t cursor, bool tag, _cc_cap_t* cdp) {
+ cdp->cr_tag = tag;
+ cdp->_cr_cursor = cursor;
+ cdp->cr_pesbt = pesbt;
+
+ _cc_bounds_bits bounds = _cc_N(extract_bounds_bits)(pesbt);
+ bool valid = _cc_N(compute_base_top)(bounds, cursor, &cdp->cr_base, &cdp->_cr_top);
+ cdp->cr_bounds_valid = valid;
+ cdp->cr_exp = bounds.E;
+ if (tag) {
+ _cc_debug_assert(cdp->cr_base <= _CC_N(MAX_ADDR));
+#ifndef CC_IS_MORELLO
+ // Morello is perfectly happy using settag to create capabilities with length greater than 2^64.
+ _cc_debug_assert(cdp->_cr_top <= _CC_N(MAX_TOP));
+ _cc_debug_assert(cdp->cr_base <= cdp->_cr_top);
+#endif
+ _cc_debug_assert(_CC_EXTRACT_FIELD(pesbt, RESERVED) == 0);
+ }
+}
+
+/*
+ * Decompress a 128-bit capability.
+ */
+static inline void _cc_N(decompress_mem)(uint64_t pesbt, uint64_t cursor, bool tag, _cc_cap_t* cdp) {
+ _cc_N(decompress_raw)(pesbt ^ _CC_N(NULL_XOR_MASK), cursor, tag, cdp);
+}
+
+static inline bool _cc_N(is_cap_sealed)(const _cc_cap_t* cp) { return _cc_N(get_otype)(cp) != _CC_N(OTYPE_UNSEALED); }
+
+// Update ebt bits in pesbt
+static inline void _cc_N(update_ebt)(_cc_cap_t* csp, _cc_addr_t new_ebt) {
+ csp->cr_pesbt = (csp->cr_pesbt & ~_CC_N(FIELD_EBT_MASK64)) | new_ebt;
+}
+
+/*
+ * Compress a capability to 128 bits.
+ * Note: if you have not been manually modifying fields, just access csp->cr_pesbt.
+ * cap_set_decompressed_X will set fields and keep pesbt in sync.
+ */
+static inline _cc_addr_t _cc_N(compress_raw)(const _cc_cap_t* csp) {
+ _cc_debug_assert((!csp->cr_tag || _cc_N(get_reserved)(csp) == 0) &&
+ "Unknown reserved bits set it tagged capability");
+ return csp->cr_pesbt;
+}
+
+static inline _cc_addr_t _cc_N(compress_mem)(const _cc_cap_t* csp) {
+ return _cc_N(compress_raw)(csp) ^ _CC_N(NULL_XOR_MASK);
+}
+
+/*
+ * Define the following to do the is_representable() check by simply
+ * compressing and decompressing the capability and checking to
+ * see if it is the same.
+ */
+// #define SIMPLE_REPRESENT_CHECK
+
+#ifndef SIMPLE_REPRESENT_CHECK
+static inline bool _cc_N(all_ones)(uint64_t offset, uint32_t e, uint32_t bwidth) {
+ uint64_t Itop;
+ uint32_t shift = e + bwidth;
+
+ if (shift >= 63)
+ return false;
+ Itop = offset >> shift;
+ return Itop == (0xfffffffffffffffful >> shift);
+}
+
+static inline bool _cc_N(all_zeroes)(uint64_t offset, uint32_t e, uint32_t bwidth) {
+ uint32_t shift = e + bwidth;
+ uint64_t Itop;
+
+ if (shift >= 63)
+ Itop = 0ul;
+ else
+ Itop = offset >> shift;
+ return Itop == 0ul;
+}
+#endif /* ! SIMPLE_REPRESENT_CHECK */
+
+static bool _cc_N(fast_is_representable_new_addr)(bool sealed, _cc_addr_t base, _cc_length_t length, _cc_addr_t cursor,
+ _cc_addr_t new_cursor);
+
+/// Check that a capability is representable by compressing and recompressing
+static inline bool _cc_N(is_representable_cap_exact)(const _cc_cap_t* cap) {
+ _cc_addr_t pesbt = _cc_N(compress_raw)(cap);
+ _cc_cap_t decompressed_cap;
+ _cc_N(decompress_raw)(pesbt, cap->_cr_cursor, cap->cr_tag, &decompressed_cap);
+ // These fields must not change:
+ _cc_debug_assert(decompressed_cap._cr_cursor == cap->_cr_cursor);
+ _cc_debug_assert(decompressed_cap.cr_pesbt == cap->cr_pesbt);
+ // If any of these fields changed then the capability is not representable:
+ if (decompressed_cap.cr_base != cap->cr_base || decompressed_cap._cr_top != cap->_cr_top) {
+ return false;
+ }
+ return true;
+}
+
+static inline uint32_t _cc_N(compute_ebt)(_cc_addr_t req_base, _cc_length_t req_top, _cc_addr_t* alignment_mask,
+ bool* exact) {
+#ifdef CC_IS_MORELLO
+ if (req_base == 0 && req_top == _CC_N(MAX_TOP)) {
+ *exact = true;
+ if (alignment_mask)
+ *alignment_mask = _CC_MAX_ADDR;
+ return _CC_N(RESET_EBT);
+ }
+#else
+ _cc_debug_assert(req_base <= req_top && "Cannot invert base and top");
+#endif
+ /*
+ * With compressed capabilities we may need to increase the range of
+ * memory addresses to be wider than requested so it is
+ * representable.
+ */
+ _cc_length_t req_length65 = req_top - req_base;
+ // function setCapBounds(cap, base, top) : (Capability, bits(64), bits(65)) -> (bool, Capability) = {
+ // /* {cap with base=base; length=(bits(64)) length; offset=0} */
+ // let base65 = 0b0 @ base;
+ // let length = top - base65;
+ // /* Find an exponent that will put the most significant bit of length
+ // second from the top as assumed during decoding. We ignore the bottom
+ // MW - 1 bits because those are handled by the ie = 0 format. */
+ // let e = 52 - CountLeadingZeros(length[64..13]);
+ uint8_t E = (uint8_t)_cc_N(get_exponent)(req_length65);
+ const uint64_t req_length64 = (uint64_t)req_length65;
+ // Use internal exponent if e is non-zero or if e is zero but
+ // but the implied bit of length is not zero (denormal vs. normal case)
+ // let ie = (e != 0) | length[12];
+ //
+ const bool InternalExponent = E != 0 || _cc_N(getbits)(req_length64, _CC_BOT_INTERNAL_EXP_WIDTH + 1, 1);
+ if (!InternalExponent) {
+ // /* The non-ie e == 0 case is easy. It is exact so just extract relevant bits. */
+ // Bbits = truncate(base, 14);
+ // Tbits = truncate(top, 14);
+ // lostSignificantTop : bool = false;
+ // lostSignificantBase : bool = false;
+ // incE : bool = false;
+ uint32_t ebt_bits = _CC_ENCODE_EBT_FIELD(0, INTERNAL_EXPONENT) | _CC_ENCODE_EBT_FIELD(req_top, EXP_ZERO_TOP) |
+ _CC_ENCODE_EBT_FIELD(req_base, EXP_ZERO_BOTTOM);
+#ifdef CC_IS_MORELLO
+ // Due to morello conditionally inverting bits, we need to invert the bits that would be an internal exponent
+ // here
+ ebt_bits ^= _CC_ENCODE_EBT_FIELD(~0, EXPONENT_HIGH_PART) | _CC_ENCODE_EBT_FIELD(~0, EXPONENT_LOW_PART);
+#endif
+ if (alignment_mask)
+ *alignment_mask = _CC_MAX_ADDR; // no adjustment to base required
+ *exact = true;
+ return ebt_bits; /* Exactly representable */
+ }
+ // Handle IE case:
+ // if ie then {
+ // /* the internal exponent case is trickier */
+ //
+ // /* Extract B and T bits (we lose 3 bits of each to store the exponent) */
+ // B_ie = truncate(base >> (e + 3), 11);
+ // T_ie = truncate(top >> (e + 3), 11);
+ //
+ _cc_addr_t bot_ie = _cc_N(truncate64)(req_base >> (E + _CC_EXP_LOW_WIDTH), _CC_BOT_INTERNAL_EXP_WIDTH);
+ if (alignment_mask) {
+ *alignment_mask = UINT64_MAX << (E + _CC_EXP_LOW_WIDTH);
+ }
+ _cc_addr_t top_ie = _cc_N(truncate64)((_cc_addr_t)(req_top >> (E + _CC_EXP_LOW_WIDTH)), _CC_BOT_INTERNAL_EXP_WIDTH);
+ // /* Find out whether we have lost significant bits of base and top using a
+ // mask of bits that we will lose (including 3 extra for exp). */
+ // maskLo : bits(65) = zero_extend(replicate_bits(0b1, e + 3));
+ // z65 : bits(65) = zeros();
+ // lostSignificantBase = (base65 & maskLo) != z65;
+ // lostSignificantTop = (top & maskLo) != z65;
+ // TODO: stop using _cc_length_t and just handle bit65 set specially?
+ const _cc_length_t maskLo = (((_cc_length_t)1u) << (E + _CC_EXP_LOW_WIDTH)) - 1;
+ const _cc_length_t zero65 = 0;
+ bool lostSignificantBase = (req_base & maskLo) != zero65;
+ bool lostSignificantTop = (req_top & maskLo) != zero65;
+ // if lostSignificantTop then {
+ // /* we must increment T to make sure it is still above top even with lost bits.
+ // It might wrap around but if that makes B<T then decoding will compensate. */
+ // T_ie = T_ie + 1;
+ // };
+ if (lostSignificantTop) {
+ top_ie = _cc_N(truncate64)(top_ie + 1, _CC_BOT_INTERNAL_EXP_WIDTH);
+ }
+ // /* Has the length overflowed? We chose e so that the top two bits of len would be 0b01,
+ // but either because of incrementing T or losing bits of base it might have grown. */
+ // len_ie = T_ie - B_ie;
+ // if len_ie[10] then {
+ // /* length overflow -- increment E by one and then recalculate
+ // T, B etc accordingly */
+ // incE = true;
+ //
+ // lostSignificantBase = lostSignificantBase | B_ie[0];
+ // lostSignificantTop = lostSignificantTop | T_ie[0];
+ //
+ // B_ie = truncate(base >> (e + 4), 11);
+ // let incT : range(0,1) = if lostSignificantTop then 1 else 0;
+ // T_ie = truncate(top >> (e + 4), 11) + incT;
+ // };
+ const _cc_addr_t len_ie = _cc_N(truncate64)(top_ie - bot_ie, _CC_BOT_INTERNAL_EXP_WIDTH);
+ bool incE = false;
+ if (_cc_N(getbits)(len_ie, _CC_BOT_INTERNAL_EXP_WIDTH - 1, 1)) {
+ incE = true;
+ lostSignificantBase = lostSignificantBase || _cc_N(getbits)(bot_ie, 0, 1);
+ lostSignificantTop = lostSignificantTop || _cc_N(getbits)(top_ie, 0, 1);
+ bot_ie = _cc_N(truncate64)(req_base >> (E + _CC_EXP_LOW_WIDTH + 1), _CC_BOT_INTERNAL_EXP_WIDTH);
+ // If we had to adjust bot_ie (shift by one more) also update alignment_mask
+ if (alignment_mask) {
+ *alignment_mask = UINT64_MAX << (E + _CC_EXP_LOW_WIDTH + 1);
+ }
+ const bool incT = lostSignificantTop;
+ top_ie = _cc_N(truncate64)((_cc_addr_t)(req_top >> (E + _CC_EXP_LOW_WIDTH + 1)), _CC_BOT_INTERNAL_EXP_WIDTH);
+ if (incT) {
+ top_ie = _cc_N(truncate64)(top_ie + 1, _CC_BOT_INTERNAL_EXP_WIDTH);
+ }
+ }
+ //
+ // Bbits = B_ie @ 0b000;
+ // Tbits = T_ie @ 0b000;
+ const _cc_addr_t Bbits = bot_ie << _CC_N(FIELD_EXPONENT_LOW_PART_SIZE);
+ const _cc_addr_t Tbits = top_ie << _CC_N(FIELD_EXPONENT_LOW_PART_SIZE);
+ const uint8_t newE = E + (incE ? 1 : 0);
+
+ // };
+ // let exact = not(lostSignificantBase | lostSignificantTop);
+ *exact = !lostSignificantBase && !lostSignificantTop;
+ // Split E between T and B
+ const _cc_addr_t expHighBits =
+ _cc_N(getbits)(newE >> _CC_N(FIELD_EXPONENT_LOW_PART_SIZE), 0, _CC_N(FIELD_EXPONENT_HIGH_PART_SIZE));
+ const _cc_addr_t expLowBits = _cc_N(getbits)(newE, 0, _CC_N(FIELD_EXPONENT_LOW_PART_SIZE));
+ const _cc_addr_t Te = Tbits | expHighBits;
+ const _cc_addr_t Be = Bbits | expLowBits;
+ return _CC_ENCODE_EBT_FIELD(1, INTERNAL_EXPONENT) | _CC_ENCODE_EBT_FIELD(Te, TOP_ENCODED) |
+ _CC_ENCODE_EBT_FIELD(Be, BOTTOM_ENCODED);
+}
+
+/*
+ * Check to see if a memory region is representable by a compressed
+ * capability. It is representable if:
+ *
+ * representable = (inRange && inLimits) || (E >= 44)
+ *
+ * where:
+ *
+ * E = compression exponent (see _cc_N(compute_e)() above)
+ *
+ * inRange = -s < i < s where i is the increment (or offset)
+ * (In other words, all the bits of i<63, E+20> are the same.)
+ *
+ * inLimits = (i < 0) ? (Imid >= (R - Amid)) && (R != Amid) : (R - Amid - 1)
+ * where Imid = i<E+19, E>, Amid = a<E+19, E>, R = B - 2^12 and a =
+ * base + offset.
+ */
+static inline bool _cc_N(is_representable_new_addr)(bool sealed, _cc_addr_t base, _cc_length_t length,
+ _cc_addr_t cursor, _cc_addr_t new_cursor) {
+ _cc_length_t top = (_cc_length_t)base + length;
+
+ cursor &= _CC_CURSOR_MASK;
+ new_cursor &= _CC_CURSOR_MASK;
+
+ // in-bounds capabilities are always representable
+ if (__builtin_expect(new_cursor >= base && new_cursor < top, true)) {
+ return true;
+ }
+
+#if defined(_CC_USE_FAST_REP_CHECK)
+ const bool slow_representable_check = false;
+#else
+ const bool slow_representable_check = true;
+#endif
+
+ if (slow_representable_check) {
+ /* Simply compress and uncompress to check. */
+ _cc_cap_t c;
+ memset(&c, 0, sizeof(c));
+ c.cr_base = base;
+ c._cr_top = top;
+ c._cr_cursor = cursor;
+ // important to set as compress assumes this is in bounds
+ c.cr_pesbt = _CC_ENCODE_FIELD(_CC_N(UPERMS_ALL), UPERMS) | _CC_ENCODE_FIELD(_CC_N(PERMS_ALL), HWPERMS) |
+ _CC_ENCODE_FIELD(sealed ? 42 : _CC_N(OTYPE_UNSEALED), OTYPE);
+ /* Get an EBT */
+ bool exact_input = false;
+ _cc_N(update_ebt)(&c, _cc_N(compute_ebt)(base, top, NULL, &exact_input));
+ // Looks like this assert gets hit by negative length capabilities. Probably the "exact input" return is wrong.
+ if (top > (_cc_length_t)base)
+ _cc_debug_assert(exact_input &&
+ "Input capability bounds not representable? They should have been rounded before!");
+ /* Check with new cursor */
+ c._cr_cursor = new_cursor;
+ return _cc_N(is_representable_cap_exact)(&c);
+ } else {
+ return _cc_N(fast_is_representable_new_addr)(sealed, base, length, cursor, new_cursor);
+ }
+}
+
+static inline _cc_addr_t _cc_N(cap_bounds_address)(const _cc_cap_t* cap) {
+ // Remove flags bits
+ _cc_addr_t cursor = cap->_cr_cursor & _CC_CURSOR_MASK;
+ // Sign extend
+ if (cursor & ((_CC_CURSOR_MASK >> 1) + 1))
+ cursor |= ~_CC_CURSOR_MASK;
+ return cursor;
+}
+
+// This should only be used on decompressed caps, as it relies on the exp field
+static inline bool _cc_N(cap_bounds_uses_value)(const _cc_cap_t* cap) {
+ return cap->cr_exp < (sizeof(_cc_addr_t) * 8) - _CC_N(FIELD_BOTTOM_ENCODED_SIZE);
+}
+
+static inline bool _cc_N(cap_sign_change)(_cc_addr_t addr1, _cc_addr_t addr2) {
+#ifdef CC_IS_MORELLO
+ return ((addr1 ^ addr2) & (1ULL << (63 - MORELLO_FLAG_BITS)));
+#else
+ (void)addr1;
+ (void)addr2;
+ return false;
+#endif
+}
+
+static inline bool _cc_N(cap_sign_change_causes_unrepresentability)(const _cc_cap_t* cap, _cc_addr_t addr1,
+ _cc_addr_t addr2) {
+ return _cc_N(cap_sign_change)(addr1, addr2) && _cc_N(cap_bounds_uses_value)(cap);
+}
+
+static inline bool _cc_N(is_representable_with_addr)(const _cc_cap_t* cap, _cc_addr_t new_addr) {
+ new_addr &= _CC_CURSOR_MASK;
+#ifdef CC_IS_MORELLO
+ // If the top bit is changed on morello this can change bounds
+ if (_cc_N(cap_sign_change_causes_unrepresentability)(cap, new_addr, cap->_cr_cursor)) {
+ return false;
+ }
+ if (!cap->cr_bounds_valid)
+ return false;
+#endif
+ // in-bounds capabilities are otherwise always representable
+ if (__builtin_expect(new_addr >= cap->cr_base && new_addr < cap->_cr_top, true)) {
+ return true;
+ }
+ const _cc_length_t length = cap->_cr_top - cap->cr_base;
+ return _cc_N(is_representable_new_addr)(_cc_N(is_cap_sealed)(cap), cap->cr_base, length, cap->_cr_cursor, new_addr);
+}
+
+static bool _cc_N(fast_is_representable_new_addr)(bool sealed, _cc_addr_t base, _cc_length_t length, _cc_addr_t cursor,
+ _cc_addr_t new_cursor) {
+ (void)sealed;
+ uint32_t bwidth = _CC_MANTISSA_WIDTH;
+
+ cursor &= _CC_CURSOR_MASK;
+ new_cursor &= _CC_CURSOR_MASK;
+
+ uint32_t highest_exp = (_CC_ADDR_WIDTH - bwidth + 2);
+
+ _cc_length_t top = base + length;
+
+ if (top == _CC_MAX_TOP && base == 0) {
+ return true; // 1 << 65 is always representable
+ }
+ if (length == 0) {
+ return true; // length 0 is always representable
+ }
+
+ uint32_t e = _cc_N(get_exponent)(length);
+
+ int64_t b, r, Imid, Amid;
+ bool inRange, inLimits;
+ int64_t inc = (int64_t)(new_cursor - cursor);
+
+#define MOD_MASK ((UINT64_C(1) << bwidth) - UINT64_C(1))
+
+ /* Check for the boundary cases. */
+
+ b = (int64_t)((base >> e) & MOD_MASK);
+ Imid = (int64_t)((uint64_t)(inc >> e) & MOD_MASK);
+ Amid = (int64_t)(((cursor) >> e) & MOD_MASK);
+
+ r = (int64_t)(((uint64_t)((b >> (bwidth - 3)) - 1) << (bwidth - 3)) & MOD_MASK);
+
+ /* inRange, test if bits are all the same */
+ inRange = _cc_N(all_ones)((uint64_t)inc, e, bwidth) || _cc_N(all_zeroes)((uint64_t)inc, e, bwidth);
+
+ /* inLimits */
+ if (inc >= 0) {
+ inLimits = ((uint64_t)Imid < (((uint64_t)(r - Amid - 1l)) & MOD_MASK));
+ } else {
+ inLimits = ((uint64_t)Imid >= (((uint64_t)(r - Amid)) & MOD_MASK)) && (r != Amid);
+ }
+#undef MOD_MASK
+
+ return ((inRange && inLimits) || (e >= highest_exp - 2));
+}
+
+/* @return whether the operation was able to set precise bounds precise or not */
+static inline bool _cc_N(setbounds_impl)(_cc_cap_t* cap, _cc_addr_t req_base, _cc_length_t req_top,
+ _cc_addr_t* alignment_mask) {
+#ifdef CC_IS_MORELLO
+ if (!cap->cr_bounds_valid) {
+ cap->cr_tag = 0;
+ }
+ bool from_large = !_cc_N(cap_bounds_uses_value)(cap);
+#else
+ // Morello allows setbounds to do weird things and will just result in untagged results
+ _cc_debug_assert((cap->cr_tag) && "Cannot be used on untagged capabilities");
+ _cc_debug_assert((!_cc_N(is_cap_sealed)(cap)) && "Cannot be used on sealed capabilities");
+#endif
+ _cc_debug_assert(req_base <= req_top && "Cannot invert base and top");
+ /*
+ * With compressed capabilities we may need to increase the range of
+ * memory addresses to be wider than requested so it is
+ * representable.
+ */
+ const _cc_addr_t cursor = cap->_cr_cursor;
+#ifndef CC_IS_MORELLO
+ _cc_debug_assert(((cap->_cr_top - cap->cr_base) >> _CC_ADDR_WIDTH) <= 1 && "Length must be smaller than 1 << 65");
+ _cc_debug_assert((req_top >> _CC_ADDR_WIDTH) <= 1 && "New top must be smaller than 1 << 65");
+ _cc_debug_assert(req_base >= cap->cr_base && "Cannot decrease base");
+ _cc_debug_assert(req_top <= cap->_cr_top && "Cannot increase top");
+ assert((cursor < cap->_cr_top || (cursor == cap->_cr_top && req_base == cap->_cr_top && req_base == req_top)) &&
+ "Must be used on inbounds caps or request zero-length cap at top");
+ assert((cursor >= cap->cr_base) && "Must be used on inbounds caps");
+#endif
+ _CC_STATIC_ASSERT(_CC_EXP_LOW_WIDTH == 3, "expected 3 bits to be used by"); // expected 3 bits to
+ _CC_STATIC_ASSERT(_CC_EXP_HIGH_WIDTH == 3, "expected 3 bits to be used by"); // expected 3 bits to
+ bool exact = false;
+ uint32_t new_ebt = _cc_N(compute_ebt)(req_base, req_top, alignment_mask, &exact);
+
+ // TODO: find a faster way to compute top and bot:
+ const _cc_addr_t pesbt = _CC_ENCODE_FIELD(0, UPERMS) | _CC_ENCODE_FIELD(0, HWPERMS) |
+ _CC_ENCODE_FIELD(_CC_N(OTYPE_UNSEALED), OTYPE) | _CC_ENCODE_FIELD(new_ebt, EBT);
+ _cc_cap_t new_cap;
+ _cc_N(decompress_raw)(pesbt, cursor, cap->cr_tag, &new_cap);
+ _cc_addr_t new_base = new_cap.cr_base;
+ _cc_length_t new_top = new_cap._cr_top;
+
+ if (exact) {
+#ifndef CC_IS_MORELLO
+ // Morello considers a setbounds that takes a capability from "large" (non-sign extended bounds) to "small"
+ // to still be exact, even if this results in a change in requested bounds. The exact assert would be tedious
+ // to express so I have turned it off for morello.
+ _cc_debug_assert(new_base == req_base && "Should be exact");
+ _cc_debug_assert(new_top == req_top && "Should be exact");
+#endif
+ } else {
+ _cc_debug_assert((new_base != req_base || new_top != req_top) &&
+ "Was inexact, but neither base nor top different?");
+ }
+
+ _cc_debug_assert(new_top >= new_base);
+ _cc_debug_assert((!cap->cr_tag || _cc_N(get_reserved)(cap) == 0) &&
+ "Unknown reserved bits set in tagged capability");
+ cap->cr_base = new_base;
+ cap->_cr_top = new_top;
+ cap->cr_exp = new_cap.cr_exp;
+ _cc_N(update_ebt)(cap, new_ebt);
+#ifdef CC_IS_MORELLO
+ cap->cr_bounds_valid = new_cap.cr_bounds_valid;
+ bool to_small = _cc_N(cap_bounds_uses_value)(cap);
+ // On morello we may end up with a length that could have been exact, but has changed the flag bits.
+ if ((from_large && to_small) && ((new_base ^ req_base) >> (64 - MORELLO_FLAG_BITS))) {
+ cap->cr_tag = 0;
+ }
+#endif
+
+ // let newCap = {cap with address=base, E=to_bits(6, if incE then e + 1 else e), B=Bbits, T=Tbits, internal_e=ie};
+ // (exact, newCap)
+ return exact;
+}
+
+/* @return whether the operation was able to set precise bounds precise or not */
+static inline bool _cc_N(setbounds)(_cc_cap_t* cap, _cc_addr_t req_base, _cc_length_t req_top) {
+ return _cc_N(setbounds_impl)(cap, req_base, req_top, NULL);
+}
+
+/* @return the mask that needs to be applied to base in order to get a precisely representable capability */
+static inline _cc_addr_t _cc_N(get_alignment_mask)(_cc_addr_t req_length) {
+ if (req_length == 0) {
+ // With a lenght of zero we know it is precise so we can just return an
+ // all ones mask.
+ // This avoids undefined behaviour when counting most significant bit later.
+ return _CC_MAX_ADDR;
+ }
+ // To compute the mask we set bounds on a maximum permissions capability and
+ // return the mask that was used to adjust the length
+ _cc_cap_t tmpcap;
+ memset(&tmpcap, 0, sizeof(tmpcap));
+ tmpcap.cr_tag = 1;
+ tmpcap._cr_top = _CC_MAX_TOP;
+ _cc_N(update_otype)(&tmpcap, _CC_N(OTYPE_UNSEALED));
+ _cc_N(update_ebt)(&tmpcap, _CC_N(RESET_EBT));
+ _cc_addr_t mask = 0;
+ _cc_N(setbounds_impl)(&tmpcap, 0, req_length, &mask);
+ return mask;
+}
+
+static inline _cc_cap_t _cc_N(make_max_perms_cap)(_cc_addr_t base, _cc_addr_t cursor, _cc_length_t top) {
+ _cc_cap_t creg;
+ memset(&creg, 0, sizeof(creg));
+ assert(base <= top && "Invalid arguments");
+ creg.cr_base = base;
+ creg._cr_cursor = cursor;
+ creg.cr_bounds_valid = true;
+ creg._cr_top = top;
+ creg.cr_pesbt = _CC_ENCODE_FIELD(_CC_N(UPERMS_ALL), UPERMS) | _CC_ENCODE_FIELD(_CC_N(PERMS_ALL), HWPERMS) |
+ _CC_ENCODE_FIELD(_CC_N(OTYPE_UNSEALED), OTYPE);
+ creg.cr_tag = true;
+ creg.cr_exp = _CC_N(NULL_EXP);
+ bool exact_input = false;
+ _cc_N(update_ebt)(&creg, _cc_N(compute_ebt)(creg.cr_base, creg._cr_top, NULL, &exact_input));
+ assert(exact_input && "Invalid arguments");
+ assert(_cc_N(is_representable_cap_exact)(&creg));
+ return creg;
+}
+
+static inline _cc_addr_t _cc_N(get_required_alignment)(_cc_addr_t req_length) {
+ // To get the required alignment from the CRAM mask we can just invert
+ // the bits and add one to get a power-of-two
+ return ~_cc_N(get_alignment_mask)(req_length) + 1;
+}
+
+static inline _cc_addr_t _cc_N(get_representable_length)(_cc_addr_t req_length) {
+ _cc_addr_t mask = _cc_N(get_alignment_mask)(req_length);
+ return (req_length + ~mask) & mask;
+}
+
+/// Provide a C++ class with the same function names
+/// to simplify writing code that handles both 128 and 64-bit capabilities
+#ifdef __cplusplus
+inline bool _cc_N(cap)::operator==(const _cc_N(cap) & other) const { return _cc_N(exactly_equal)(this, &other); }
+
+class _CC_CONCAT(CompressedCap, CC_FORMAT_LOWER) {
+public:
+ using length_t = _cc_length_t;
+ using offset_t = _cc_offset_t;
+ using addr_t = _cc_addr_t;
+ using cap_t = _cc_cap_t;
+ using bounds_bits = _cc_bounds_bits;
+
+ static inline addr_t compress_raw(const cap_t* csp) { return _cc_N(compress_raw)(csp); }
+ static inline void decompress_raw(addr_t pesbt, addr_t cursor, bool tag, cap_t* cdp) {
+ _cc_N(decompress_raw)(pesbt, cursor, tag, cdp);
+ }
+ static inline addr_t compress_mem(const cap_t* csp) { return _cc_N(compress_mem)(csp); }
+ static inline void decompress_mem(addr_t pesbt, addr_t cursor, bool tag, cap_t* cdp) {
+ _cc_N(decompress_mem)(pesbt, cursor, tag, cdp);
+ }
+ static inline bounds_bits extract_bounds_bits(addr_t pesbt) { return _cc_N(extract_bounds_bits)(pesbt); }
+ static inline bool setbounds(cap_t* cap, addr_t req_base, length_t req_top) {
+ return _cc_N(setbounds)(cap, req_base, req_top);
+ }
+ static inline bool is_representable_cap_exact(const cap_t* cap) { return _cc_N(is_representable_cap_exact)(cap); }
+ static inline cap_t make_max_perms_cap(addr_t base, addr_t cursor, length_t top) {
+ return _cc_N(make_max_perms_cap)(base, cursor, top);
+ }
+ static inline addr_t representable_length(addr_t len) { return _cc_N(get_representable_length)(len); }
+ static inline addr_t representable_mask(addr_t len) { return _cc_N(get_alignment_mask)(len); }
+};
+#define CompressedCapCC _CC_CONCAT(CompressedCap, CC_FORMAT_LOWER)
+#endif
diff --git a/gdb/cheri-compressed-cap/cheri_compressed_cap_macros.h b/gdb/cheri-compressed-cap/cheri_compressed_cap_macros.h
new file mode 100644
index 00000000000..74324ef4d18
--- /dev/null
+++ b/gdb/cheri-compressed-cap/cheri_compressed_cap_macros.h
@@ -0,0 +1,99 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2018-2020 Alex Richardson
+ * All rights reserved.
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237
+ * ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef _cc_debug_assert
+#ifdef cheri_debug_assert
+#define _cc_debug_assert(cond) cheri_debug_assert(cond)
+#else
+#include <assert.h>
+#define _cc_debug_assert(cond) assert(cond)
+#endif
+#endif
+
+#ifndef _CC_CONCAT
+#define _CC_CONCAT1(x, y) x##y
+#define _CC_CONCAT(x, y) _CC_CONCAT1(x, y)
+#define _CC_EXPAND1(x) x
+#define _CC_EXPAND(x) _CC_EXPAND1(x)
+
+#ifdef __cplusplus
+// Some versions of GCC dont't like _Static_assert() in C++ mode
+#define _CC_STATIC_ASSERT(cond, msg) static_assert(cond, msg)
+#else
+#define _CC_STATIC_ASSERT(cond, msg) _Static_assert(cond, msg)
+#endif
+
+#define _cc_N(name) _CC_CONCAT(_CC_CONCAT(_CC_CONCAT(cc, CC_FORMAT_LOWER), _), name)
+#define _CC_N(name) _CC_CONCAT(_CC_CONCAT(_CC_CONCAT(CC, CC_FORMAT_UPPER), _), name)
+
+#define _CC_BITMASK64(nbits) ((UINT64_C(1) << (nbits)) - UINT64_C(1))
+
+// NB: Do not use GNU statement expressions as this is used by LLVM which warns
+// on any uses during its build. These are therefore unsafe if any arguments
+// have side-effects.
+#define _CC_MIN(a, b) ((a) < (b) ? (a) : (b))
+#define _CC_MAX(a, b) ((a) > (b) ? (a) : (b))
+
+#define _CC_FIELD(name, last, start) \
+ _CC_N(FIELD_##name##_START) = (start - _CC_N(ADDR_WIDTH)), \
+ _CC_N(FIELD_##name##_LAST) = (last - _CC_N(ADDR_WIDTH)), \
+ _CC_N(FIELD_##name##_SIZE) = _CC_N(FIELD_##name##_LAST) - _CC_N(FIELD_##name##_START) + 1, \
+ _CC_N(FIELD_##name##_MASK_NOT_SHIFTED) = _CC_BITMASK64(_CC_N(FIELD_##name##_SIZE)), \
+ _CC_N(FIELD_##name##_MASK64) = (uint64_t)_CC_N(FIELD_##name##_MASK_NOT_SHIFTED) << _CC_N(FIELD_##name##_START), \
+ _CC_N(FIELD_##name##_MAX_VALUE) = _CC_N(FIELD_##name##_MASK_NOT_SHIFTED)
+
+#define _CC_ENCODE_FIELD(value, name) \
+ ((uint64_t)((value)&_CC_N(FIELD_##name##_MAX_VALUE)) << _CC_N(FIELD_##name##_START))
+
+#define _CC_EXTRACT_FIELD(value, name) _cc_N(getbits)((value), _CC_N(FIELD_##name##_START), _CC_N(FIELD_##name##_SIZE))
+
+#define _CC_ENCODE_EBT_FIELD(value, name) \
+ ((uint64_t)((value)&_CC_N(FIELD_##name##_MAX_VALUE)) << (_CC_N(FIELD_##name##_START) + _CC_N(FIELD_EBT_START)))
+
+#define _CC_SPECIAL_OTYPE(name, val) \
+ _CC_N(name) = (_CC_N(SPECIAL_OTYPE_VAL)(val)), _CC_N(name##_SIGNED) = (_CC_N(SPECIAL_OTYPE_VAL_SIGNED)(val))
+
+#ifdef __cplusplus
+template <size_t a, size_t b> static constexpr bool check_same() {
+ static_assert(a == b, "");
+ return true;
+}
+#define _CC_STATIC_ASSERT_SAME(a, b) static_assert(check_same<a, b>(), "")
+#else
+#define _CC_STATIC_ASSERT_SAME(a, b) _Static_assert((a) == (b), "")
+#endif
+
+#endif // _CC_CONCAT
diff --git a/gdb/cheri-compressed-cap/decompress_cap_128.c b/gdb/cheri-compressed-cap/decompress_cap_128.c
new file mode 100644
index 00000000000..975175cc335
--- /dev/null
+++ b/gdb/cheri-compressed-cap/decompress_cap_128.c
@@ -0,0 +1,110 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2018 Alex Richardson
+ * All rights reserved.
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237
+ * ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#include <err.h>
+#include <errno.h>
+#include <inttypes.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+
+#include "cheri_compressed_cap.h"
+// #include "cheri_compressed_cap.h"
+#ifdef DECOMPRESS_WITH_SAIL_GENERATED_CODE
+#include "test/sail_wrapper.h"
+#endif
+
+static const char* otype_suffix(uint32_t otype) {
+ switch (otype) {
+#define OTYPE_CASE(Name, ...) \
+ case CC128_##Name: return " (CC128_" #Name ")";
+ CC128_LS_SPECIAL_OTYPES(OTYPE_CASE, )
+ default: return "";
+ }
+}
+
+static void dump_cap_fields(const cc128_cap_t* result) {
+ fprintf(stderr, "Permissions: 0x%" PRIx32 "\n", cc128_get_perms(result)); // TODO: decode perms
+ fprintf(stderr, "User Perms: 0x%" PRIx32 "\n", cc128_get_uperms(result));
+ fprintf(stderr, "Base: 0x%016" PRIx64 "\n", result->cr_base);
+ fprintf(stderr, "Offset: 0x%016" PRIx64 "\n", result->_cr_cursor - result->cr_base);
+ fprintf(stderr, "Cursor: 0x%016" PRIx64 "\n", result->_cr_cursor);
+ cc128_length_t length = result->_cr_top - result->cr_base;
+ fprintf(stderr, "Length: 0x%" PRIx64 "%016" PRIx64 " %s\n", (uint64_t)(length >> 64), (uint64_t)length,
+ length > UINT64_MAX ? " (greater than UINT64_MAX)" : "");
+ cc128_length_t top_full = result->_cr_top;
+ fprintf(stderr, "Top: 0x%" PRIx64 "%016" PRIx64 " %s\n", (uint64_t)(top_full >> 64), (uint64_t)top_full,
+ top_full > UINT64_MAX ? " (greater than UINT64_MAX)" : "");
+ fprintf(stderr, "Sealed: %d\n", cc128_is_cap_sealed(result) ? 1 : 0);
+ uint32_t otype = cc128_get_otype(result);
+ fprintf(stderr, "OType: 0x%" PRIx32 "%s\n", otype, otype_suffix(otype));
+ fprintf(stderr, "Flags: 0x%" PRIx8 "\n", cc128_get_flags(result));
+ fprintf(stderr, "Reserved: 0x%" PRIx8 "\n", cc128_get_reserved(result));
+ fprintf(stderr, "Valid decompress: %s", result->cr_bounds_valid ? "yes" : "no");
+ fprintf(stderr, "\n");
+}
+
+int main(int argc, char** argv) {
+ //fprintf(stderr, "CC128_NULL_XOR_MASK=0x%llx\n", (long long)CC128_NULL_XOR_MASK);
+ //fprintf(stderr, "CC128_NULL_PESBT =0x%llx\n", (long long)CC128_NULL_PESBT);
+ if (argc < 3) {
+ fprintf(stderr, "Usage: %s PESBT CURSOR\n", argv[0]);
+ return EXIT_FAILURE;
+ }
+ errno = 0;
+ char* end;
+ uint64_t pesbt = strtoull(argv[1], &end, 16);
+ if (errno != 0 || !end || *end != '\0') {
+ err(EX_DATAERR, "pesbt not a valid hex number: %s", argv[1]);
+ }
+ uint64_t cursor = strtoull(argv[2], &end, 16);
+ if (errno != 0 || !end || *end != '\0') {
+ err(EX_DATAERR, "cursor not a valid hex number: %s", argv[2]);
+ }
+ cc128_cap_t result;
+ memset(&result, 0, sizeof(result));
+ printf("Decompressing pesbt = %016" PRIx64 ", cursor = %016" PRIx64 "\n", pesbt, cursor);
+#ifdef DECOMPRESS_WITH_SAIL_GENERATED_CODE
+ sail_decode_128_mem(pesbt, cursor, false, &result);
+#else
+ cc128_decompress_mem(pesbt, cursor, false, &result);
+#endif
+ dump_cap_fields(&result);
+#ifdef DECOMPRESS_WITH_SAIL_GENERATED_CODE
+ uint64_t rt_pesbt = sail_compress_128_mem(&result);
+#else
+ uint64_t rt_pesbt = cc128_compress_mem(&result);
+#endif
+ printf("Re-compressed pesbt = %016" PRIx64 "%s\n", rt_pesbt, pesbt == rt_pesbt ? "" : " - WAS DESTRUCTIVE");
+ return EXIT_SUCCESS;
+}
diff --git a/gdb/cheri-compressed-cap/decompress_cap_128m.c b/gdb/cheri-compressed-cap/decompress_cap_128m.c
new file mode 100644
index 00000000000..8b9c1aadade
--- /dev/null
+++ b/gdb/cheri-compressed-cap/decompress_cap_128m.c
@@ -0,0 +1,110 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2018 Alex Richardson
+ * All rights reserved.
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237
+ * ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#include <err.h>
+#include <errno.h>
+#include <inttypes.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+
+#include "cheri_compressed_cap.h"
+// #include "cheri_compressed_cap.h"
+#ifdef DECOMPRESS_WITH_SAIL_GENERATED_CODE
+#include "test/sail_wrapper.h"
+#endif
+
+static const char* otype_suffix(uint32_t otype) {
+ switch (otype) {
+#define OTYPE_CASE(Name, ...) \
+ case CC128M_##Name: return " (CC128M_" #Name ")";
+ CC128M_LS_SPECIAL_OTYPES(OTYPE_CASE, )
+ default: return "";
+ }
+}
+
+static void dump_cap_fields(const cc128m_cap_t* result) {
+ fprintf(stderr, "Permissions: 0x%" PRIx32 "\n", cc128m_get_perms(result)); // TODO: decode perms
+ fprintf(stderr, "User Perms: 0x%" PRIx32 "\n", cc128m_get_uperms(result));
+ fprintf(stderr, "Base: 0x%016" PRIx64 "\n", result->cr_base);
+ fprintf(stderr, "Offset: 0x%016" PRIx64 "\n", result->_cr_cursor - result->cr_base);
+ fprintf(stderr, "Cursor: 0x%016" PRIx64 "\n", result->_cr_cursor);
+ cc128m_length_t length = result->_cr_top - result->cr_base;
+ fprintf(stderr, "Length: 0x%" PRIx64 "%016" PRIx64 " %s\n", (uint64_t)(length >> 64), (uint64_t)length,
+ length > UINT64_MAX ? " (greater than UINT64_MAX)" : "");
+ cc128m_length_t top_full = result->_cr_top;
+ fprintf(stderr, "Top: 0x%" PRIx64 "%016" PRIx64 " %s\n", (uint64_t)(top_full >> 64), (uint64_t)top_full,
+ top_full > UINT64_MAX ? " (greater than UINT64_MAX)" : "");
+ fprintf(stderr, "Sealed: %d\n", cc128m_is_cap_sealed(result) ? 1 : 0);
+ uint32_t otype = cc128m_get_otype(result);
+ fprintf(stderr, "OType: 0x%" PRIx32 "%s\n", otype, otype_suffix(otype));
+ fprintf(stderr, "Flags: 0x%" PRIx8 "\n", cc128m_get_flags(result));
+ fprintf(stderr, "Reserved: 0x%" PRIx8 "\n", cc128m_get_reserved(result));
+ fprintf(stderr, "Valid decompress: %s", result->cr_bounds_valid ? "yes" : "no");
+ fprintf(stderr, "\n");
+}
+
+int main(int argc, char** argv) {
+ //fprintf(stderr, "CC128M_NULL_XOR_MASK=0x%llx\n", (long long)CC128M_NULL_XOR_MASK);
+ //fprintf(stderr, "CC128M_NULL_PESBT =0x%llx\n", (long long)CC128M_NULL_PESBT);
+ if (argc < 3) {
+ fprintf(stderr, "Usage: %s PESBT CURSOR\n", argv[0]);
+ return EXIT_FAILURE;
+ }
+ errno = 0;
+ char* end;
+ uint64_t pesbt = strtoull(argv[1], &end, 16);
+ if (errno != 0 || !end || *end != '\0') {
+ err(EX_DATAERR, "pesbt not a valid hex number: %s", argv[1]);
+ }
+ uint64_t cursor = strtoull(argv[2], &end, 16);
+ if (errno != 0 || !end || *end != '\0') {
+ err(EX_DATAERR, "cursor not a valid hex number: %s", argv[2]);
+ }
+ cc128m_cap_t result;
+ memset(&result, 0, sizeof(result));
+ printf("Decompressing pesbt = %016" PRIx64 ", cursor = %016" PRIx64 "\n", pesbt, cursor);
+#ifdef DECOMPRESS_WITH_SAIL_GENERATED_CODE
+ sail_decode_128m_mem(pesbt, cursor, false, &result);
+#else
+ cc128m_decompress_mem(pesbt, cursor, false, &result);
+#endif
+ dump_cap_fields(&result);
+#ifdef DECOMPRESS_WITH_SAIL_GENERATED_CODE
+ uint64_t rt_pesbt = sail_compress_128m_mem(&result);
+#else
+ uint64_t rt_pesbt = cc128m_compress_mem(&result);
+#endif
+ printf("Re-compressed pesbt = %016" PRIx64 "%s\n", rt_pesbt, pesbt == rt_pesbt ? "" : " - WAS DESTRUCTIVE");
+ return EXIT_SUCCESS;
+}
diff --git a/gdb/cheri-compressed-cap/test/FuzzedDataProvider.h b/gdb/cheri-compressed-cap/test/FuzzedDataProvider.h
new file mode 100644
index 00000000000..f7018d71e2b
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/FuzzedDataProvider.h
@@ -0,0 +1,299 @@
+//===- FuzzedDataProvider.h - Utility header for fuzz targets ---*- C++ -* ===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+// A single header library providing an utility class to break up an array of
+// bytes. Whenever run on the same input, provides the same output, as long as
+// its methods are called in the same order, with the same arguments.
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_FUZZER_FUZZED_DATA_PROVIDER_H_
+#define LLVM_FUZZER_FUZZED_DATA_PROVIDER_H_
+
+#include <algorithm>
+#include <climits>
+#include <cstddef>
+#include <cstdint>
+#include <cstring>
+#include <initializer_list>
+#include <string>
+#include <type_traits>
+#include <utility>
+#include <vector>
+
+// In addition to the comments below, the API is also briefly documented at
+// https://github.com/google/fuzzing/blob/master/docs/split-inputs.md#fuzzed-data-provider
+class FuzzedDataProvider {
+public:
+ // |data| is an array of length |size| that the FuzzedDataProvider wraps to
+ // provide more granular access. |data| must outlive the FuzzedDataProvider.
+ FuzzedDataProvider(const uint8_t *data, size_t size)
+ : data_ptr_(data), remaining_bytes_(size) {}
+ ~FuzzedDataProvider() = default;
+
+ // Returns a std::vector containing |num_bytes| of input data. If fewer than
+ // |num_bytes| of data remain, returns a shorter std::vector containing all
+ // of the data that's left. Can be used with any byte sized type, such as
+ // char, unsigned char, uint8_t, etc.
+ template <typename T> std::vector<T> ConsumeBytes(size_t num_bytes) {
+ num_bytes = std::min(num_bytes, remaining_bytes_);
+ return ConsumeBytes<T>(num_bytes, num_bytes);
+ }
+
+ // Similar to |ConsumeBytes|, but also appends the terminator value at the end
+ // of the resulting vector. Useful, when a mutable null-terminated C-string is
+ // needed, for example. But that is a rare case. Better avoid it, if possible,
+ // and prefer using |ConsumeBytes| or |ConsumeBytesAsString| methods.
+ template <typename T>
+ std::vector<T> ConsumeBytesWithTerminator(size_t num_bytes,
+ T terminator = 0) {
+ num_bytes = std::min(num_bytes, remaining_bytes_);
+ std::vector<T> result = ConsumeBytes<T>(num_bytes + 1, num_bytes);
+ result.back() = terminator;
+ return result;
+ }
+
+ // Returns a std::string containing |num_bytes| of input data. Using this and
+ // |.c_str()| on the resulting string is the best way to get an immutable
+ // null-terminated C string. If fewer than |num_bytes| of data remain, returns
+ // a shorter std::string containing all of the data that's left.
+ std::string ConsumeBytesAsString(size_t num_bytes) {
+ static_assert(sizeof(std::string::value_type) == sizeof(uint8_t),
+ "ConsumeBytesAsString cannot convert the data to a string.");
+
+ num_bytes = std::min(num_bytes, remaining_bytes_);
+ std::string result(
+ reinterpret_cast<const std::string::value_type *>(data_ptr_),
+ num_bytes);
+ Advance(num_bytes);
+ return result;
+ }
+
+ // Returns a number in the range [min, max] by consuming bytes from the
+ // input data. The value might not be uniformly distributed in the given
+ // range. If there's no input data left, always returns |min|. |min| must
+ // be less than or equal to |max|.
+ template <typename T> T ConsumeIntegralInRange(T min, T max) {
+ static_assert(std::is_integral<T>::value, "An integral type is required.");
+ static_assert(sizeof(T) <= sizeof(uint64_t), "Unsupported integral type.");
+
+ if (min > max)
+ abort();
+
+ // Use the biggest type possible to hold the range and the result.
+ uint64_t range = static_cast<uint64_t>(max) - min;
+ uint64_t result = 0;
+ size_t offset = 0;
+
+ while (offset < sizeof(T) * CHAR_BIT && (range >> offset) > 0 &&
+ remaining_bytes_ != 0) {
+ // Pull bytes off the end of the seed data. Experimentally, this seems to
+ // allow the fuzzer to more easily explore the input space. This makes
+ // sense, since it works by modifying inputs that caused new code to run,
+ // and this data is often used to encode length of data read by
+ // |ConsumeBytes|. Separating out read lengths makes it easier modify the
+ // contents of the data that is actually read.
+ --remaining_bytes_;
+ result = (result << CHAR_BIT) | data_ptr_[remaining_bytes_];
+ offset += CHAR_BIT;
+ }
+
+ // Avoid division by 0, in case |range + 1| results in overflow.
+ if (range != std::numeric_limits<decltype(range)>::max())
+ result = result % (range + 1);
+
+ return static_cast<T>(min + result);
+ }
+
+ // Returns a std::string of length from 0 to |max_length|. When it runs out of
+ // input data, returns what remains of the input. Designed to be more stable
+ // with respect to a fuzzer inserting characters than just picking a random
+ // length and then consuming that many bytes with |ConsumeBytes|.
+ std::string ConsumeRandomLengthString(size_t max_length) {
+ // Reads bytes from the start of |data_ptr_|. Maps "\\" to "\", and maps "\"
+ // followed by anything else to the end of the string. As a result of this
+ // logic, a fuzzer can insert characters into the string, and the string
+ // will be lengthened to include those new characters, resulting in a more
+ // stable fuzzer than picking the length of a string independently from
+ // picking its contents.
+ std::string result;
+
+ // Reserve the anticipated capaticity to prevent several reallocations.
+ result.reserve(std::min(max_length, remaining_bytes_));
+ for (size_t i = 0; i < max_length && remaining_bytes_ != 0; ++i) {
+ char next = ConvertUnsignedToSigned<char>(data_ptr_[0]);
+ Advance(1);
+ if (next == '\\' && remaining_bytes_ != 0) {
+ next = ConvertUnsignedToSigned<char>(data_ptr_[0]);
+ Advance(1);
+ if (next != '\\')
+ break;
+ }
+ result += next;
+ }
+
+ result.shrink_to_fit();
+ return result;
+ }
+
+ // Returns a std::vector containing all remaining bytes of the input data.
+ template <typename T> std::vector<T> ConsumeRemainingBytes() {
+ return ConsumeBytes<T>(remaining_bytes_);
+ }
+
+ // Returns a std::string containing all remaining bytes of the input data.
+ // Prefer using |ConsumeRemainingBytes| unless you actually need a std::string
+ // object.
+ std::string ConsumeRemainingBytesAsString() {
+ return ConsumeBytesAsString(remaining_bytes_);
+ }
+
+ // Returns a number in the range [Type's min, Type's max]. The value might
+ // not be uniformly distributed in the given range. If there's no input data
+ // left, always returns |min|.
+ template <typename T> T ConsumeIntegral() {
+ return ConsumeIntegralInRange(std::numeric_limits<T>::min(),
+ std::numeric_limits<T>::max());
+ }
+
+ // Reads one byte and returns a bool, or false when no data remains.
+ bool ConsumeBool() { return 1 & ConsumeIntegral<uint8_t>(); }
+
+ // Returns a copy of the value selected from the given fixed-size |array|.
+ template <typename T, size_t size>
+ T PickValueInArray(const T (&array)[size]) {
+ static_assert(size > 0, "The array must be non empty.");
+ return array[ConsumeIntegralInRange<size_t>(0, size - 1)];
+ }
+
+ template <typename T>
+ T PickValueInArray(std::initializer_list<const T> list) {
+ // TODO(Dor1s): switch to static_assert once C++14 is allowed.
+ if (!list.size())
+ abort();
+
+ return *(list.begin() + ConsumeIntegralInRange<size_t>(0, list.size() - 1));
+ }
+
+ // Returns an enum value. The enum must start at 0 and be contiguous. It must
+ // also contain |kMaxValue| aliased to its largest (inclusive) value. Such as:
+ // enum class Foo { SomeValue, OtherValue, kMaxValue = OtherValue };
+ template <typename T> T ConsumeEnum() {
+ static_assert(std::is_enum<T>::value, "|T| must be an enum type.");
+ return static_cast<T>(ConsumeIntegralInRange<uint32_t>(
+ 0, static_cast<uint32_t>(T::kMaxValue)));
+ }
+
+ // Returns a floating point number in the range [0.0, 1.0]. If there's no
+ // input data left, always returns 0.
+ template <typename T> T ConsumeProbability() {
+ static_assert(std::is_floating_point<T>::value,
+ "A floating point type is required.");
+
+ // Use different integral types for different floating point types in order
+ // to provide better density of the resulting values.
+ using IntegralType =
+ typename std::conditional<(sizeof(T) <= sizeof(uint32_t)), uint32_t,
+ uint64_t>::type;
+
+ T result = static_cast<T>(ConsumeIntegral<IntegralType>());
+ result /= static_cast<T>(std::numeric_limits<IntegralType>::max());
+ return result;
+ }
+
+ // Returns a floating point value in the range [Type's lowest, Type's max] by
+ // consuming bytes from the input data. If there's no input data left, always
+ // returns approximately 0.
+ template <typename T> T ConsumeFloatingPoint() {
+ return ConsumeFloatingPointInRange<T>(std::numeric_limits<T>::lowest(),
+ std::numeric_limits<T>::max());
+ }
+
+ // Returns a floating point value in the given range by consuming bytes from
+ // the input data. If there's no input data left, returns |min|. Note that
+ // |min| must be less than or equal to |max|.
+ template <typename T> T ConsumeFloatingPointInRange(T min, T max) {
+ if (min > max)
+ abort();
+
+ T range = .0;
+ T result = min;
+ constexpr T zero(.0);
+ if (max > zero && min < zero && max > min + std::numeric_limits<T>::max()) {
+ // The diff |max - min| would overflow the given floating point type. Use
+ // the half of the diff as the range and consume a bool to decide whether
+ // the result is in the first of the second part of the diff.
+ range = (max / 2.0) - (min / 2.0);
+ if (ConsumeBool()) {
+ result += range;
+ }
+ } else {
+ range = max - min;
+ }
+
+ return result + range * ConsumeProbability<T>();
+ }
+
+ // Reports the remaining bytes available for fuzzed input.
+ size_t remaining_bytes() { return remaining_bytes_; }
+
+private:
+ FuzzedDataProvider(const FuzzedDataProvider &) = delete;
+ FuzzedDataProvider &operator=(const FuzzedDataProvider &) = delete;
+
+ void Advance(size_t num_bytes) {
+ if (num_bytes > remaining_bytes_)
+ abort();
+
+ data_ptr_ += num_bytes;
+ remaining_bytes_ -= num_bytes;
+ }
+
+ template <typename T>
+ std::vector<T> ConsumeBytes(size_t size, size_t num_bytes_to_consume) {
+ static_assert(sizeof(T) == sizeof(uint8_t), "Incompatible data type.");
+
+ // The point of using the size-based constructor below is to increase the
+ // odds of having a vector object with capacity being equal to the length.
+ // That part is always implementation specific, but at least both libc++ and
+ // libstdc++ allocate the requested number of bytes in that constructor,
+ // which seems to be a natural choice for other implementations as well.
+ // To increase the odds even more, we also call |shrink_to_fit| below.
+ std::vector<T> result(size);
+ std::memcpy(result.data(), data_ptr_, num_bytes_to_consume);
+ Advance(num_bytes_to_consume);
+
+ // Even though |shrink_to_fit| is also implementation specific, we expect it
+ // to provide an additional assurance in case vector's constructor allocated
+ // a buffer which is larger than the actual amount of data we put inside it.
+ result.shrink_to_fit();
+ return result;
+ }
+
+ template <typename TS, typename TU> TS ConvertUnsignedToSigned(TU value) {
+ static_assert(sizeof(TS) == sizeof(TU), "Incompatible data types.");
+ static_assert(!std::numeric_limits<TU>::is_signed,
+ "Source type must be unsigned.");
+
+ // TODO(Dor1s): change to `if constexpr` once C++17 becomes mainstream.
+ if (std::numeric_limits<TS>::is_modulo)
+ return static_cast<TS>(value);
+
+ // Avoid using implementation-defined unsigned to signer conversions.
+ // To learn more, see https://stackoverflow.com/questions/13150449.
+ if (value <= std::numeric_limits<TS>::max()) {
+ return static_cast<TS>(value);
+ } else {
+ constexpr auto TS_min = std::numeric_limits<TS>::min();
+ return TS_min + static_cast<char>(value - TS_min);
+ }
+ }
+
+ const uint8_t *data_ptr_;
+ size_t remaining_bytes_;
+};
+
+#endif // LLVM_FUZZER_FUZZED_DATA_PROVIDER_H_
diff --git a/gdb/cheri-compressed-cap/test/catch.hpp b/gdb/cheri-compressed-cap/test/catch.hpp
new file mode 100644
index 00000000000..1077080b134
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/catch.hpp
@@ -0,0 +1,17702 @@
+/*
+ * Catch v2.12.1
+ * Generated: 2020-04-21 19:29:20.964532
+ * ----------------------------------------------------------
+ * This file has been merged from multiple headers. Please don't edit it directly
+ * Copyright (c) 2020 Two Blue Cubes Ltd. All rights reserved.
+ *
+ * Distributed under the Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ */
+#ifndef TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED
+#define TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED
+// start catch.hpp
+
+
+#define CATCH_VERSION_MAJOR 2
+#define CATCH_VERSION_MINOR 12
+#define CATCH_VERSION_PATCH 1
+
+#ifdef __clang__
+# pragma clang system_header
+#elif defined __GNUC__
+# pragma GCC system_header
+#endif
+
+// start catch_suppress_warnings.h
+
+#ifdef __clang__
+# ifdef __ICC // icpc defines the __clang__ macro
+# pragma warning(push)
+# pragma warning(disable: 161 1682)
+# else // __ICC
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wpadded"
+# pragma clang diagnostic ignored "-Wswitch-enum"
+# pragma clang diagnostic ignored "-Wcovered-switch-default"
+# endif
+#elif defined __GNUC__
+ // Because REQUIREs trigger GCC's -Wparentheses, and because still
+ // supported version of g++ have only buggy support for _Pragmas,
+ // Wparentheses have to be suppressed globally.
+# pragma GCC diagnostic ignored "-Wparentheses" // See #674 for details
+
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wunused-variable"
+# pragma GCC diagnostic ignored "-Wpadded"
+#endif
+// end catch_suppress_warnings.h
+#if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER)
+# define CATCH_IMPL
+# define CATCH_CONFIG_ALL_PARTS
+#endif
+
+// In the impl file, we want to have access to all parts of the headers
+// Can also be used to sanely support PCHs
+#if defined(CATCH_CONFIG_ALL_PARTS)
+# define CATCH_CONFIG_EXTERNAL_INTERFACES
+# if defined(CATCH_CONFIG_DISABLE_MATCHERS)
+# undef CATCH_CONFIG_DISABLE_MATCHERS
+# endif
+# if !defined(CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER)
+# define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
+# endif
+#endif
+
+#if !defined(CATCH_CONFIG_IMPL_ONLY)
+// start catch_platform.h
+
+#ifdef __APPLE__
+# include <TargetConditionals.h>
+# if TARGET_OS_OSX == 1
+# define CATCH_PLATFORM_MAC
+# elif TARGET_OS_IPHONE == 1
+# define CATCH_PLATFORM_IPHONE
+# endif
+
+#elif defined(linux) || defined(__linux) || defined(__linux__)
+# define CATCH_PLATFORM_LINUX
+
+#elif defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__)
+# define CATCH_PLATFORM_WINDOWS
+#endif
+
+// end catch_platform.h
+
+#ifdef CATCH_IMPL
+# ifndef CLARA_CONFIG_MAIN
+# define CLARA_CONFIG_MAIN_NOT_DEFINED
+# define CLARA_CONFIG_MAIN
+# endif
+#endif
+
+// start catch_user_interfaces.h
+
+namespace Catch {
+ unsigned int rngSeed();
+}
+
+// end catch_user_interfaces.h
+// start catch_tag_alias_autoregistrar.h
+
+// start catch_common.h
+
+// start catch_compiler_capabilities.h
+
+// Detect a number of compiler features - by compiler
+// The following features are defined:
+//
+// CATCH_CONFIG_COUNTER : is the __COUNTER__ macro supported?
+// CATCH_CONFIG_WINDOWS_SEH : is Windows SEH supported?
+// CATCH_CONFIG_POSIX_SIGNALS : are POSIX signals supported?
+// CATCH_CONFIG_DISABLE_EXCEPTIONS : Are exceptions enabled?
+// ****************
+// Note to maintainers: if new toggles are added please document them
+// in configuration.md, too
+// ****************
+
+// In general each macro has a _NO_<feature name> form
+// (e.g. CATCH_CONFIG_NO_POSIX_SIGNALS) which disables the feature.
+// Many features, at point of detection, define an _INTERNAL_ macro, so they
+// can be combined, en-mass, with the _NO_ forms later.
+
+#ifdef __cplusplus
+
+# if (__cplusplus >= 201402L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201402L)
+# define CATCH_CPP14_OR_GREATER
+# endif
+
+# if (__cplusplus >= 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L)
+# define CATCH_CPP17_OR_GREATER
+# endif
+
+#endif
+
+#if defined(__cpp_lib_uncaught_exceptions)
+# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
+#endif
+
+// We have to avoid both ICC and Clang, because they try to mask themselves
+// as gcc, and we want only GCC in this block
+#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC)
+# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic push" )
+# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic pop" )
+
+# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__)
+
+#endif
+
+#if defined(__clang__)
+
+# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic push" )
+# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic pop" )
+
+// As of this writing, IBM XL's implementation of __builtin_constant_p has a bug
+// which results in calls to destructors being emitted for each temporary,
+// without a matching initialization. In practice, this can result in something
+// like `std::string::~string` being called on an uninitialized value.
+//
+// For example, this code will likely segfault under IBM XL:
+// ```
+// REQUIRE(std::string("12") + "34" == "1234")
+// ```
+//
+// Therefore, `CATCH_INTERNAL_IGNORE_BUT_WARN` is not implemented.
+# if !defined(__ibmxl__)
+# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) /* NOLINT(cppcoreguidelines-pro-type-vararg) */
+# endif
+
+# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ _Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \
+ _Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"")
+
+# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \
+ _Pragma( "clang diagnostic ignored \"-Wparentheses\"" )
+
+# define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS \
+ _Pragma( "clang diagnostic ignored \"-Wunused-variable\"" )
+
+# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
+ _Pragma( "clang diagnostic ignored \"-Wgnu-zero-variadic-macro-arguments\"" )
+
+# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ _Pragma( "clang diagnostic ignored \"-Wunused-template\"" )
+
+#endif // __clang__
+
+////////////////////////////////////////////////////////////////////////////////
+// Assume that non-Windows platforms support posix signals by default
+#if !defined(CATCH_PLATFORM_WINDOWS)
+ #define CATCH_INTERNAL_CONFIG_POSIX_SIGNALS
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// We know some environments not to support full POSIX signals
+#if defined(__CYGWIN__) || defined(__QNX__) || defined(__EMSCRIPTEN__) || defined(__DJGPP__)
+ #define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS
+#endif
+
+#ifdef __OS400__
+# define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS
+# define CATCH_CONFIG_COLOUR_NONE
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// Android somehow still does not support std::to_string
+#if defined(__ANDROID__)
+# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING
+# define CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// Not all Windows environments support SEH properly
+#if defined(__MINGW32__)
+# define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// PS4
+#if defined(__ORBIS__)
+# define CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// Cygwin
+#ifdef __CYGWIN__
+
+// Required for some versions of Cygwin to declare gettimeofday
+// see: http://stackoverflow.com/questions/36901803/gettimeofday-not-declared-in-this-scope-cygwin
+# define _BSD_SOURCE
+// some versions of cygwin (most) do not support std::to_string. Use the libstd check.
+// https://gcc.gnu.org/onlinedocs/gcc-4.8.2/libstdc++/api/a01053_source.html line 2812-2813
+# if !((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
+ && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
+
+# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING
+
+# endif
+#endif // __CYGWIN__
+
+////////////////////////////////////////////////////////////////////////////////
+// Visual C++
+#if defined(_MSC_VER)
+
+# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION __pragma( warning(push) )
+# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION __pragma( warning(pop) )
+
+# if _MSC_VER >= 1900 // Visual Studio 2015 or newer
+# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
+# endif
+
+// Universal Windows platform does not support SEH
+// Or console colours (or console at all...)
+# if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP)
+# define CATCH_CONFIG_COLOUR_NONE
+# else
+# define CATCH_INTERNAL_CONFIG_WINDOWS_SEH
+# endif
+
+// MSVC traditional preprocessor needs some workaround for __VA_ARGS__
+// _MSVC_TRADITIONAL == 0 means new conformant preprocessor
+// _MSVC_TRADITIONAL == 1 means old traditional non-conformant preprocessor
+# if !defined(__clang__) // Handle Clang masquerading for msvc
+# if !defined(_MSVC_TRADITIONAL) || (defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL)
+# define CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+# endif // MSVC_TRADITIONAL
+# endif // __clang__
+
+#endif // _MSC_VER
+
+#if defined(_REENTRANT) || defined(_MSC_VER)
+// Enable async processing, as -pthread is specified or no additional linking is required
+# define CATCH_INTERNAL_CONFIG_USE_ASYNC
+#endif // _MSC_VER
+
+////////////////////////////////////////////////////////////////////////////////
+// Check if we are compiled with -fno-exceptions or equivalent
+#if defined(__EXCEPTIONS) || defined(__cpp_exceptions) || defined(_CPPUNWIND)
+# define CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// DJGPP
+#ifdef __DJGPP__
+# define CATCH_INTERNAL_CONFIG_NO_WCHAR
+#endif // __DJGPP__
+
+////////////////////////////////////////////////////////////////////////////////
+// Embarcadero C++Build
+#if defined(__BORLANDC__)
+ #define CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+
+// Use of __COUNTER__ is suppressed during code analysis in
+// CLion/AppCode 2017.2.x and former, because __COUNTER__ is not properly
+// handled by it.
+// Otherwise all supported compilers support COUNTER macro,
+// but user still might want to turn it off
+#if ( !defined(__JETBRAINS_IDE__) || __JETBRAINS_IDE__ >= 20170300L )
+ #define CATCH_INTERNAL_CONFIG_COUNTER
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+
+// RTX is a special version of Windows that is real time.
+// This means that it is detected as Windows, but does not provide
+// the same set of capabilities as real Windows does.
+#if defined(UNDER_RTSS) || defined(RTX64_BUILD)
+ #define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH
+ #define CATCH_INTERNAL_CONFIG_NO_ASYNC
+ #define CATCH_CONFIG_COLOUR_NONE
+#endif
+
+#if !defined(_GLIBCXX_USE_C99_MATH_TR1)
+#define CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER
+#endif
+
+// Various stdlib support checks that require __has_include
+#if defined(__has_include)
+ // Check if string_view is available and usable
+ #if __has_include(<string_view>) && defined(CATCH_CPP17_OR_GREATER)
+ # define CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW
+ #endif
+
+ // Check if optional is available and usable
+ # if __has_include(<optional>) && defined(CATCH_CPP17_OR_GREATER)
+ # define CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL
+ # endif // __has_include(<optional>) && defined(CATCH_CPP17_OR_GREATER)
+
+ // Check if byte is available and usable
+ # if __has_include(<cstddef>) && defined(CATCH_CPP17_OR_GREATER)
+ # define CATCH_INTERNAL_CONFIG_CPP17_BYTE
+ # endif // __has_include(<cstddef>) && defined(CATCH_CPP17_OR_GREATER)
+
+ // Check if variant is available and usable
+ # if __has_include(<variant>) && defined(CATCH_CPP17_OR_GREATER)
+ # if defined(__clang__) && (__clang_major__ < 8)
+ // work around clang bug with libstdc++ https://bugs.llvm.org/show_bug.cgi?id=31852
+ // fix should be in clang 8, workaround in libstdc++ 8.2
+ # include <ciso646>
+ # if defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9)
+ # define CATCH_CONFIG_NO_CPP17_VARIANT
+ # else
+ # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT
+ # endif // defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9)
+ # else
+ # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT
+ # endif // defined(__clang__) && (__clang_major__ < 8)
+ # endif // __has_include(<variant>) && defined(CATCH_CPP17_OR_GREATER)
+#endif // defined(__has_include)
+
+#if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER)
+# define CATCH_CONFIG_COUNTER
+#endif
+#if defined(CATCH_INTERNAL_CONFIG_WINDOWS_SEH) && !defined(CATCH_CONFIG_NO_WINDOWS_SEH) && !defined(CATCH_CONFIG_WINDOWS_SEH) && !defined(CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH)
+# define CATCH_CONFIG_WINDOWS_SEH
+#endif
+// This is set by default, because we assume that unix compilers are posix-signal-compatible by default.
+#if defined(CATCH_INTERNAL_CONFIG_POSIX_SIGNALS) && !defined(CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_POSIX_SIGNALS)
+# define CATCH_CONFIG_POSIX_SIGNALS
+#endif
+// This is set by default, because we assume that compilers with no wchar_t support are just rare exceptions.
+#if !defined(CATCH_INTERNAL_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_WCHAR)
+# define CATCH_CONFIG_WCHAR
+#endif
+
+#if !defined(CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_CPP11_TO_STRING)
+# define CATCH_CONFIG_CPP11_TO_STRING
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_NO_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_CPP17_OPTIONAL)
+# define CATCH_CONFIG_CPP17_OPTIONAL
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS)
+# define CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_NO_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_CPP17_STRING_VIEW)
+# define CATCH_CONFIG_CPP17_STRING_VIEW
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_CPP17_VARIANT) && !defined(CATCH_CONFIG_NO_CPP17_VARIANT) && !defined(CATCH_CONFIG_CPP17_VARIANT)
+# define CATCH_CONFIG_CPP17_VARIANT
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_CPP17_BYTE) && !defined(CATCH_CONFIG_NO_CPP17_BYTE) && !defined(CATCH_CONFIG_CPP17_BYTE)
+# define CATCH_CONFIG_CPP17_BYTE
+#endif
+
+#if defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT)
+# define CATCH_INTERNAL_CONFIG_NEW_CAPTURE
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_NEW_CAPTURE) && !defined(CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NEW_CAPTURE)
+# define CATCH_CONFIG_NEW_CAPTURE
+#endif
+
+#if !defined(CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED) && !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+# define CATCH_CONFIG_DISABLE_EXCEPTIONS
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_NO_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_POLYFILL_ISNAN)
+# define CATCH_CONFIG_POLYFILL_ISNAN
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_USE_ASYNC) && !defined(CATCH_INTERNAL_CONFIG_NO_ASYNC) && !defined(CATCH_CONFIG_NO_USE_ASYNC) && !defined(CATCH_CONFIG_USE_ASYNC)
+# define CATCH_CONFIG_USE_ASYNC
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_NO_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_ANDROID_LOGWRITE)
+# define CATCH_CONFIG_ANDROID_LOGWRITE
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_NO_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_GLOBAL_NEXTAFTER)
+# define CATCH_CONFIG_GLOBAL_NEXTAFTER
+#endif
+
+// Even if we do not think the compiler has that warning, we still have
+// to provide a macro that can be used by the code.
+#if !defined(CATCH_INTERNAL_START_WARNINGS_SUPPRESSION)
+# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION
+#endif
+#if !defined(CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION)
+# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+#endif
+#if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS)
+# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS
+#endif
+#if !defined(CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS)
+# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS
+#endif
+#if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS)
+# define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS
+#endif
+#if !defined(CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS)
+# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS
+#endif
+
+// The goal of this macro is to avoid evaluation of the arguments, but
+// still have the compiler warn on problems inside...
+#if !defined(CATCH_INTERNAL_IGNORE_BUT_WARN)
+# define CATCH_INTERNAL_IGNORE_BUT_WARN(...)
+#endif
+
+#if defined(__APPLE__) && defined(__apple_build_version__) && (__clang_major__ < 10)
+# undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS
+#elif defined(__clang__) && (__clang_major__ < 5)
+# undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS
+#endif
+
+#if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS)
+# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS
+#endif
+
+#if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+#define CATCH_TRY if ((true))
+#define CATCH_CATCH_ALL if ((false))
+#define CATCH_CATCH_ANON(type) if ((false))
+#else
+#define CATCH_TRY try
+#define CATCH_CATCH_ALL catch (...)
+#define CATCH_CATCH_ANON(type) catch (type)
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_NO_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR)
+#define CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#endif
+
+// end catch_compiler_capabilities.h
+#define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line
+#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line )
+#ifdef CATCH_CONFIG_COUNTER
+# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ )
+#else
+# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ )
+#endif
+
+#include <iosfwd>
+#include <string>
+#include <cstdint>
+
+// We need a dummy global operator<< so we can bring it into Catch namespace later
+struct Catch_global_namespace_dummy {};
+std::ostream& operator<<(std::ostream&, Catch_global_namespace_dummy);
+
+namespace Catch {
+
+ struct CaseSensitive { enum Choice {
+ Yes,
+ No
+ }; };
+
+ class NonCopyable {
+ NonCopyable( NonCopyable const& ) = delete;
+ NonCopyable( NonCopyable && ) = delete;
+ NonCopyable& operator = ( NonCopyable const& ) = delete;
+ NonCopyable& operator = ( NonCopyable && ) = delete;
+
+ protected:
+ NonCopyable();
+ virtual ~NonCopyable();
+ };
+
+ struct SourceLineInfo {
+
+ SourceLineInfo() = delete;
+ SourceLineInfo( char const* _file, std::size_t _line ) noexcept
+ : file( _file ),
+ line( _line )
+ {}
+
+ SourceLineInfo( SourceLineInfo const& other ) = default;
+ SourceLineInfo& operator = ( SourceLineInfo const& ) = default;
+ SourceLineInfo( SourceLineInfo&& ) noexcept = default;
+ SourceLineInfo& operator = ( SourceLineInfo&& ) noexcept = default;
+
+ bool empty() const noexcept { return file[0] == '\0'; }
+ bool operator == ( SourceLineInfo const& other ) const noexcept;
+ bool operator < ( SourceLineInfo const& other ) const noexcept;
+
+ char const* file;
+ std::size_t line;
+ };
+
+ std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info );
+
+ // Bring in operator<< from global namespace into Catch namespace
+ // This is necessary because the overload of operator<< above makes
+ // lookup stop at namespace Catch
+ using ::operator<<;
+
+ // Use this in variadic streaming macros to allow
+ // >> +StreamEndStop
+ // as well as
+ // >> stuff +StreamEndStop
+ struct StreamEndStop {
+ std::string operator+() const;
+ };
+ template<typename T>
+ T const& operator + ( T const& value, StreamEndStop ) {
+ return value;
+ }
+}
+
+#define CATCH_INTERNAL_LINEINFO \
+ ::Catch::SourceLineInfo( __FILE__, static_cast<std::size_t>( __LINE__ ) )
+
+// end catch_common.h
+namespace Catch {
+
+ struct RegistrarForTagAliases {
+ RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo );
+ };
+
+} // end namespace Catch
+
+#define CATCH_REGISTER_TAG_ALIAS( alias, spec ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::RegistrarForTagAliases INTERNAL_CATCH_UNIQUE_NAME( AutoRegisterTagAlias )( alias, spec, CATCH_INTERNAL_LINEINFO ); } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+// end catch_tag_alias_autoregistrar.h
+// start catch_test_registry.h
+
+// start catch_interfaces_testcase.h
+
+#include <vector>
+
+namespace Catch {
+
+ class TestSpec;
+
+ struct ITestInvoker {
+ virtual void invoke () const = 0;
+ virtual ~ITestInvoker();
+ };
+
+ class TestCase;
+ struct IConfig;
+
+ struct ITestCaseRegistry {
+ virtual ~ITestCaseRegistry();
+ virtual std::vector<TestCase> const& getAllTests() const = 0;
+ virtual std::vector<TestCase> const& getAllTestsSorted( IConfig const& config ) const = 0;
+ };
+
+ bool isThrowSafe( TestCase const& testCase, IConfig const& config );
+ bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config );
+ std::vector<TestCase> filterTests( std::vector<TestCase> const& testCases, TestSpec const& testSpec, IConfig const& config );
+ std::vector<TestCase> const& getAllTestCasesSorted( IConfig const& config );
+
+}
+
+// end catch_interfaces_testcase.h
+// start catch_stringref.h
+
+#include <cstddef>
+#include <string>
+#include <iosfwd>
+#include <cassert>
+
+namespace Catch {
+
+ /// A non-owning string class (similar to the forthcoming std::string_view)
+ /// Note that, because a StringRef may be a substring of another string,
+ /// it may not be null terminated.
+ class StringRef {
+ public:
+ using size_type = std::size_t;
+ using const_iterator = const char*;
+
+ private:
+ static constexpr char const* const s_empty = "";
+
+ char const* m_start = s_empty;
+ size_type m_size = 0;
+
+ public: // construction
+ constexpr StringRef() noexcept = default;
+
+ StringRef( char const* rawChars ) noexcept;
+
+ constexpr StringRef( char const* rawChars, size_type size ) noexcept
+ : m_start( rawChars ),
+ m_size( size )
+ {}
+
+ StringRef( std::string const& stdString ) noexcept
+ : m_start( stdString.c_str() ),
+ m_size( stdString.size() )
+ {}
+
+ explicit operator std::string() const {
+ return std::string(m_start, m_size);
+ }
+
+ public: // operators
+ auto operator == ( StringRef const& other ) const noexcept -> bool;
+ auto operator != (StringRef const& other) const noexcept -> bool {
+ return !(*this == other);
+ }
+
+ auto operator[] ( size_type index ) const noexcept -> char {
+ assert(index < m_size);
+ return m_start[index];
+ }
+
+ public: // named queries
+ constexpr auto empty() const noexcept -> bool {
+ return m_size == 0;
+ }
+ constexpr auto size() const noexcept -> size_type {
+ return m_size;
+ }
+
+ // Returns the current start pointer. If the StringRef is not
+ // null-terminated, throws std::domain_exception
+ auto c_str() const -> char const*;
+
+ public: // substrings and searches
+ // Returns a substring of [start, start + length).
+ // If start + length > size(), then the substring is [start, size()).
+ // If start > size(), then the substring is empty.
+ auto substr( size_type start, size_type length ) const noexcept -> StringRef;
+
+ // Returns the current start pointer. May not be null-terminated.
+ auto data() const noexcept -> char const*;
+
+ constexpr auto isNullTerminated() const noexcept -> bool {
+ return m_start[m_size] == '\0';
+ }
+
+ public: // iterators
+ constexpr const_iterator begin() const { return m_start; }
+ constexpr const_iterator end() const { return m_start + m_size; }
+ };
+
+ auto operator += ( std::string& lhs, StringRef const& sr ) -> std::string&;
+ auto operator << ( std::ostream& os, StringRef const& sr ) -> std::ostream&;
+
+ constexpr auto operator "" _sr( char const* rawChars, std::size_t size ) noexcept -> StringRef {
+ return StringRef( rawChars, size );
+ }
+} // namespace Catch
+
+constexpr auto operator "" _catch_sr( char const* rawChars, std::size_t size ) noexcept -> Catch::StringRef {
+ return Catch::StringRef( rawChars, size );
+}
+
+// end catch_stringref.h
+// start catch_preprocessor.hpp
+
+
+#define CATCH_RECURSION_LEVEL0(...) __VA_ARGS__
+#define CATCH_RECURSION_LEVEL1(...) CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(__VA_ARGS__)))
+#define CATCH_RECURSION_LEVEL2(...) CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(__VA_ARGS__)))
+#define CATCH_RECURSION_LEVEL3(...) CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(__VA_ARGS__)))
+#define CATCH_RECURSION_LEVEL4(...) CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(__VA_ARGS__)))
+#define CATCH_RECURSION_LEVEL5(...) CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(__VA_ARGS__)))
+
+#ifdef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define INTERNAL_CATCH_EXPAND_VARGS(...) __VA_ARGS__
+// MSVC needs more evaluations
+#define CATCH_RECURSION_LEVEL6(...) CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(__VA_ARGS__)))
+#define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL6(CATCH_RECURSION_LEVEL6(__VA_ARGS__))
+#else
+#define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL5(__VA_ARGS__)
+#endif
+
+#define CATCH_REC_END(...)
+#define CATCH_REC_OUT
+
+#define CATCH_EMPTY()
+#define CATCH_DEFER(id) id CATCH_EMPTY()
+
+#define CATCH_REC_GET_END2() 0, CATCH_REC_END
+#define CATCH_REC_GET_END1(...) CATCH_REC_GET_END2
+#define CATCH_REC_GET_END(...) CATCH_REC_GET_END1
+#define CATCH_REC_NEXT0(test, next, ...) next CATCH_REC_OUT
+#define CATCH_REC_NEXT1(test, next) CATCH_DEFER ( CATCH_REC_NEXT0 ) ( test, next, 0)
+#define CATCH_REC_NEXT(test, next) CATCH_REC_NEXT1(CATCH_REC_GET_END test, next)
+
+#define CATCH_REC_LIST0(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ )
+#define CATCH_REC_LIST1(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0) ) ( f, peek, __VA_ARGS__ )
+#define CATCH_REC_LIST2(f, x, peek, ...) f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ )
+
+#define CATCH_REC_LIST0_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ )
+#define CATCH_REC_LIST1_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0_UD) ) ( f, userdata, peek, __VA_ARGS__ )
+#define CATCH_REC_LIST2_UD(f, userdata, x, peek, ...) f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ )
+
+// Applies the function macro `f` to each of the remaining parameters, inserts commas between the results,
+// and passes userdata as the first parameter to each invocation,
+// e.g. CATCH_REC_LIST_UD(f, x, a, b, c) evaluates to f(x, a), f(x, b), f(x, c)
+#define CATCH_REC_LIST_UD(f, userdata, ...) CATCH_RECURSE(CATCH_REC_LIST2_UD(f, userdata, __VA_ARGS__, ()()(), ()()(), ()()(), 0))
+
+#define CATCH_REC_LIST(f, ...) CATCH_RECURSE(CATCH_REC_LIST2(f, __VA_ARGS__, ()()(), ()()(), ()()(), 0))
+
+#define INTERNAL_CATCH_EXPAND1(param) INTERNAL_CATCH_EXPAND2(param)
+#define INTERNAL_CATCH_EXPAND2(...) INTERNAL_CATCH_NO## __VA_ARGS__
+#define INTERNAL_CATCH_DEF(...) INTERNAL_CATCH_DEF __VA_ARGS__
+#define INTERNAL_CATCH_NOINTERNAL_CATCH_DEF
+#define INTERNAL_CATCH_STRINGIZE(...) INTERNAL_CATCH_STRINGIZE2(__VA_ARGS__)
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define INTERNAL_CATCH_STRINGIZE2(...) #__VA_ARGS__
+#define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param))
+#else
+// MSVC is adding extra space and needs another indirection to expand INTERNAL_CATCH_NOINTERNAL_CATCH_DEF
+#define INTERNAL_CATCH_STRINGIZE2(...) INTERNAL_CATCH_STRINGIZE3(__VA_ARGS__)
+#define INTERNAL_CATCH_STRINGIZE3(...) #__VA_ARGS__
+#define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) (INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) + 1)
+#endif
+
+#define INTERNAL_CATCH_MAKE_NAMESPACE2(...) ns_##__VA_ARGS__
+#define INTERNAL_CATCH_MAKE_NAMESPACE(name) INTERNAL_CATCH_MAKE_NAMESPACE2(name)
+
+#define INTERNAL_CATCH_REMOVE_PARENS(...) INTERNAL_CATCH_EXPAND1(INTERNAL_CATCH_DEF __VA_ARGS__)
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS_GEN(__VA_ARGS__)>())
+#define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__))
+#else
+#define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) INTERNAL_CATCH_EXPAND_VARGS(decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS_GEN(__VA_ARGS__)>()))
+#define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__)))
+#endif
+
+#define INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(...)\
+ CATCH_REC_LIST(INTERNAL_CATCH_MAKE_TYPE_LIST,__VA_ARGS__)
+
+#define INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_0) INTERNAL_CATCH_REMOVE_PARENS(_0)
+#define INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_0, _1) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_1)
+#define INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_0, _1, _2) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_1, _2)
+#define INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_0, _1, _2, _3) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_1, _2, _3)
+#define INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_0, _1, _2, _3, _4) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_1, _2, _3, _4)
+#define INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_0, _1, _2, _3, _4, _5) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_1, _2, _3, _4, _5)
+#define INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_0, _1, _2, _3, _4, _5, _6) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_1, _2, _4, _5, _6)
+#define INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_0, _1, _2, _3, _4, _5, _6, _7) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_1, _2, _3, _4, _5, _6, _7)
+#define INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_1, _2, _3, _4, _5, _6, _7, _8)
+#define INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9)
+#define INTERNAL_CATCH_REMOVE_PARENS_11_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10)
+
+#define INTERNAL_CATCH_VA_NARGS_IMPL(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N
+
+#define INTERNAL_CATCH_TYPE_GEN\
+ template<typename...> struct TypeList {};\
+ template<typename...Ts>\
+ constexpr auto get_wrapper() noexcept -> TypeList<Ts...> { return {}; }\
+ template<template<typename...> class...> struct TemplateTypeList{};\
+ template<template<typename...> class...Cs>\
+ constexpr auto get_wrapper() noexcept -> TemplateTypeList<Cs...> { return {}; }\
+ template<typename...>\
+ struct append;\
+ template<typename...>\
+ struct rewrap;\
+ template<template<typename...> class, typename...>\
+ struct create;\
+ template<template<typename...> class, typename>\
+ struct convert;\
+ \
+ template<typename T> \
+ struct append<T> { using type = T; };\
+ template< template<typename...> class L1, typename...E1, template<typename...> class L2, typename...E2, typename...Rest>\
+ struct append<L1<E1...>, L2<E2...>, Rest...> { using type = typename append<L1<E1...,E2...>, Rest...>::type; };\
+ template< template<typename...> class L1, typename...E1, typename...Rest>\
+ struct append<L1<E1...>, TypeList<mpl_::na>, Rest...> { using type = L1<E1...>; };\
+ \
+ template< template<typename...> class Container, template<typename...> class List, typename...elems>\
+ struct rewrap<TemplateTypeList<Container>, List<elems...>> { using type = TypeList<Container<elems...>>; };\
+ template< template<typename...> class Container, template<typename...> class List, class...Elems, typename...Elements>\
+ struct rewrap<TemplateTypeList<Container>, List<Elems...>, Elements...> { using type = typename append<TypeList<Container<Elems...>>, typename rewrap<TemplateTypeList<Container>, Elements...>::type>::type; };\
+ \
+ template<template <typename...> class Final, template< typename...> class...Containers, typename...Types>\
+ struct create<Final, TemplateTypeList<Containers...>, TypeList<Types...>> { using type = typename append<Final<>, typename rewrap<TemplateTypeList<Containers>, Types...>::type...>::type; };\
+ template<template <typename...> class Final, template <typename...> class List, typename...Ts>\
+ struct convert<Final, List<Ts...>> { using type = typename append<Final<>,TypeList<Ts>...>::type; };
+
+#define INTERNAL_CATCH_NTTP_1(signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)> struct Nttp{};\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ constexpr auto get_wrapper() noexcept -> Nttp<__VA_ARGS__> { return {}; } \
+ template<template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class...> struct NttpTemplateTypeList{};\
+ template<template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class...Cs>\
+ constexpr auto get_wrapper() noexcept -> NttpTemplateTypeList<Cs...> { return {}; } \
+ \
+ template< template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class Container, template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class List, INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ struct rewrap<NttpTemplateTypeList<Container>, List<__VA_ARGS__>> { using type = TypeList<Container<__VA_ARGS__>>; };\
+ template< template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class Container, template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class List, INTERNAL_CATCH_REMOVE_PARENS(signature), typename...Elements>\
+ struct rewrap<NttpTemplateTypeList<Container>, List<__VA_ARGS__>, Elements...> { using type = typename append<TypeList<Container<__VA_ARGS__>>, typename rewrap<NttpTemplateTypeList<Container>, Elements...>::type>::type; };\
+ template<template <typename...> class Final, template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class...Containers, typename...Types>\
+ struct create<Final, NttpTemplateTypeList<Containers...>, TypeList<Types...>> { using type = typename append<Final<>, typename rewrap<NttpTemplateTypeList<Containers>, Types...>::type...>::type; };
+
+#define INTERNAL_CATCH_DECLARE_SIG_TEST0(TestName)
+#define INTERNAL_CATCH_DECLARE_SIG_TEST1(TestName, signature)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ static void TestName()
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_X(TestName, signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ static void TestName()
+
+#define INTERNAL_CATCH_DEFINE_SIG_TEST0(TestName)
+#define INTERNAL_CATCH_DEFINE_SIG_TEST1(TestName, signature)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ static void TestName()
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_X(TestName, signature,...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ static void TestName()
+
+#define INTERNAL_CATCH_NTTP_REGISTER0(TestFunc, signature)\
+ template<typename Type>\
+ void reg_test(TypeList<Type>, Catch::NameAndTags nameAndTags)\
+ {\
+ Catch::AutoReg( Catch::makeTestInvoker(&TestFunc<Type>), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), nameAndTags);\
+ }
+
+#define INTERNAL_CATCH_NTTP_REGISTER(TestFunc, signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ void reg_test(Nttp<__VA_ARGS__>, Catch::NameAndTags nameAndTags)\
+ {\
+ Catch::AutoReg( Catch::makeTestInvoker(&TestFunc<__VA_ARGS__>), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), nameAndTags);\
+ }
+
+#define INTERNAL_CATCH_NTTP_REGISTER_METHOD0(TestName, signature, ...)\
+ template<typename Type>\
+ void reg_test(TypeList<Type>, Catch::StringRef className, Catch::NameAndTags nameAndTags)\
+ {\
+ Catch::AutoReg( Catch::makeTestInvoker(&TestName<Type>::test), CATCH_INTERNAL_LINEINFO, className, nameAndTags);\
+ }
+
+#define INTERNAL_CATCH_NTTP_REGISTER_METHOD(TestName, signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ void reg_test(Nttp<__VA_ARGS__>, Catch::StringRef className, Catch::NameAndTags nameAndTags)\
+ {\
+ Catch::AutoReg( Catch::makeTestInvoker(&TestName<__VA_ARGS__>::test), CATCH_INTERNAL_LINEINFO, className, nameAndTags);\
+ }
+
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD0(TestName, ClassName)
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD1(TestName, ClassName, signature)\
+ template<typename TestType> \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName)<TestType> { \
+ void test();\
+ }
+
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X(TestName, ClassName, signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)> \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName)<__VA_ARGS__> { \
+ void test();\
+ }
+
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD0(TestName)
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD1(TestName, signature)\
+ template<typename TestType> \
+ void INTERNAL_CATCH_MAKE_NAMESPACE(TestName)::TestName<TestType>::test()
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X(TestName, signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)> \
+ void INTERNAL_CATCH_MAKE_NAMESPACE(TestName)::TestName<__VA_ARGS__>::test()
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define INTERNAL_CATCH_NTTP_0
+#define INTERNAL_CATCH_NTTP_GEN(...) INTERNAL_CATCH_VA_NARGS_IMPL(__VA_ARGS__, INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1( __VA_ARGS__), INTERNAL_CATCH_NTTP_1( __VA_ARGS__), INTERNAL_CATCH_NTTP_1( __VA_ARGS__), INTERNAL_CATCH_NTTP_1( __VA_ARGS__),INTERNAL_CATCH_NTTP_1( __VA_ARGS__), INTERNAL_CATCH_NTTP_0)
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD(TestName, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD1, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD0)(TestName, __VA_ARGS__)
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD(TestName, ClassName, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD1, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD0)(TestName, ClassName, __VA_ARGS__)
+#define INTERNAL_CATCH_NTTP_REG_METHOD_GEN(TestName, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD0, INTERNAL_CATCH_NTTP_REGISTER_METHOD0)(TestName, __VA_ARGS__)
+#define INTERNAL_CATCH_NTTP_REG_GEN(TestFunc, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER0, INTERNAL_CATCH_NTTP_REGISTER0)(TestFunc, __VA_ARGS__)
+#define INTERNAL_CATCH_DEFINE_SIG_TEST(TestName, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DEFINE_SIG_TEST1, INTERNAL_CATCH_DEFINE_SIG_TEST0)(TestName, __VA_ARGS__)
+#define INTERNAL_CATCH_DECLARE_SIG_TEST(TestName, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DECLARE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST1, INTERNAL_CATCH_DECLARE_SIG_TEST0)(TestName, __VA_ARGS__)
+#define INTERNAL_CATCH_REMOVE_PARENS_GEN(...) INTERNAL_CATCH_VA_NARGS_IMPL(__VA_ARGS__, INTERNAL_CATCH_REMOVE_PARENS_11_ARG,INTERNAL_CATCH_REMOVE_PARENS_10_ARG,INTERNAL_CATCH_REMOVE_PARENS_9_ARG,INTERNAL_CATCH_REMOVE_PARENS_8_ARG,INTERNAL_CATCH_REMOVE_PARENS_7_ARG,INTERNAL_CATCH_REMOVE_PARENS_6_ARG,INTERNAL_CATCH_REMOVE_PARENS_5_ARG,INTERNAL_CATCH_REMOVE_PARENS_4_ARG,INTERNAL_CATCH_REMOVE_PARENS_3_ARG,INTERNAL_CATCH_REMOVE_PARENS_2_ARG,INTERNAL_CATCH_REMOVE_PARENS_1_ARG)(__VA_ARGS__)
+#else
+#define INTERNAL_CATCH_NTTP_0(signature)
+#define INTERNAL_CATCH_NTTP_GEN(...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL(__VA_ARGS__, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1,INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_0)( __VA_ARGS__))
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD(TestName, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD1, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD0)(TestName, __VA_ARGS__))
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD(TestName, ClassName, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD1, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD0)(TestName, ClassName, __VA_ARGS__))
+#define INTERNAL_CATCH_NTTP_REG_METHOD_GEN(TestName, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD0, INTERNAL_CATCH_NTTP_REGISTER_METHOD0)(TestName, __VA_ARGS__))
+#define INTERNAL_CATCH_NTTP_REG_GEN(TestFunc, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER0, INTERNAL_CATCH_NTTP_REGISTER0)(TestFunc, __VA_ARGS__))
+#define INTERNAL_CATCH_DEFINE_SIG_TEST(TestName, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DEFINE_SIG_TEST1, INTERNAL_CATCH_DEFINE_SIG_TEST0)(TestName, __VA_ARGS__))
+#define INTERNAL_CATCH_DECLARE_SIG_TEST(TestName, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DECLARE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST1, INTERNAL_CATCH_DECLARE_SIG_TEST0)(TestName, __VA_ARGS__))
+#define INTERNAL_CATCH_REMOVE_PARENS_GEN(...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL(__VA_ARGS__, INTERNAL_CATCH_REMOVE_PARENS_11_ARG,INTERNAL_CATCH_REMOVE_PARENS_10_ARG,INTERNAL_CATCH_REMOVE_PARENS_9_ARG,INTERNAL_CATCH_REMOVE_PARENS_8_ARG,INTERNAL_CATCH_REMOVE_PARENS_7_ARG,INTERNAL_CATCH_REMOVE_PARENS_6_ARG,INTERNAL_CATCH_REMOVE_PARENS_5_ARG,INTERNAL_CATCH_REMOVE_PARENS_4_ARG,INTERNAL_CATCH_REMOVE_PARENS_3_ARG,INTERNAL_CATCH_REMOVE_PARENS_2_ARG,INTERNAL_CATCH_REMOVE_PARENS_1_ARG)(__VA_ARGS__))
+#endif
+
+// end catch_preprocessor.hpp
+// start catch_meta.hpp
+
+
+#include <type_traits>
+
+namespace Catch {
+ template<typename T>
+ struct always_false : std::false_type {};
+
+ template <typename> struct true_given : std::true_type {};
+ struct is_callable_tester {
+ template <typename Fun, typename... Args>
+ true_given<decltype(std::declval<Fun>()(std::declval<Args>()...))> static test(int);
+ template <typename...>
+ std::false_type static test(...);
+ };
+
+ template <typename T>
+ struct is_callable;
+
+ template <typename Fun, typename... Args>
+ struct is_callable<Fun(Args...)> : decltype(is_callable_tester::test<Fun, Args...>(0)) {};
+
+#if defined(__cpp_lib_is_invocable) && __cpp_lib_is_invocable >= 201703
+ // std::result_of is deprecated in C++17 and removed in C++20. Hence, it is
+ // replaced with std::invoke_result here. Also *_t format is preferred over
+ // typename *::type format.
+ template <typename Func, typename U>
+ using FunctionReturnType = std::remove_reference_t<std::remove_cv_t<std::invoke_result_t<Func, U>>>;
+#else
+ template <typename Func, typename U>
+ using FunctionReturnType = typename std::remove_reference<typename std::remove_cv<typename std::result_of<Func(U)>::type>::type>::type;
+#endif
+
+} // namespace Catch
+
+namespace mpl_{
+ struct na;
+}
+
+// end catch_meta.hpp
+namespace Catch {
+
+template<typename C>
+class TestInvokerAsMethod : public ITestInvoker {
+ void (C::*m_testAsMethod)();
+public:
+ TestInvokerAsMethod( void (C::*testAsMethod)() ) noexcept : m_testAsMethod( testAsMethod ) {}
+
+ void invoke() const override {
+ C obj;
+ (obj.*m_testAsMethod)();
+ }
+};
+
+auto makeTestInvoker( void(*testAsFunction)() ) noexcept -> ITestInvoker*;
+
+template<typename C>
+auto makeTestInvoker( void (C::*testAsMethod)() ) noexcept -> ITestInvoker* {
+ return new(std::nothrow) TestInvokerAsMethod<C>( testAsMethod );
+}
+
+struct NameAndTags {
+ NameAndTags( StringRef const& name_ = StringRef(), StringRef const& tags_ = StringRef() ) noexcept;
+ StringRef name;
+ StringRef tags;
+};
+
+struct AutoReg : NonCopyable {
+ AutoReg( ITestInvoker* invoker, SourceLineInfo const& lineInfo, StringRef const& classOrMethod, NameAndTags const& nameAndTags ) noexcept;
+ ~AutoReg();
+};
+
+} // end namespace Catch
+
+#if defined(CATCH_CONFIG_DISABLE)
+ #define INTERNAL_CATCH_TESTCASE_NO_REGISTRATION( TestName, ... ) \
+ static void TestName()
+ #define INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION( TestName, ClassName, ... ) \
+ namespace{ \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName) { \
+ void test(); \
+ }; \
+ } \
+ void TestName::test()
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION_2( TestName, TestFunc, Name, Tags, Signature, ... ) \
+ INTERNAL_CATCH_DEFINE_SIG_TEST(TestFunc, INTERNAL_CATCH_REMOVE_PARENS(Signature))
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION_2( TestNameClass, TestName, ClassName, Name, Tags, Signature, ... ) \
+ namespace{ \
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName) { \
+ INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD(TestName, ClassName, INTERNAL_CATCH_REMOVE_PARENS(Signature));\
+ } \
+ } \
+ INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD(TestName, INTERNAL_CATCH_REMOVE_PARENS(Signature))
+
+ #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(Name, Tags, ...) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), Name, Tags, typename TestType, __VA_ARGS__ )
+ #else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(Name, Tags, ...) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), Name, Tags, typename TestType, __VA_ARGS__ ) )
+ #endif
+
+ #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(Name, Tags, Signature, ...) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), Name, Tags, Signature, __VA_ARGS__ )
+ #else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(Name, Tags, Signature, ...) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), Name, Tags, Signature, __VA_ARGS__ ) )
+ #endif
+
+ #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION( ClassName, Name, Tags,... ) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____C_L_A_S_S____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ) , ClassName, Name, Tags, typename T, __VA_ARGS__ )
+ #else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION( ClassName, Name, Tags,... ) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____C_L_A_S_S____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ) , ClassName, Name, Tags, typename T, __VA_ARGS__ ) )
+ #endif
+
+ #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION( ClassName, Name, Tags, Signature, ... ) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____C_L_A_S_S____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ) , ClassName, Name, Tags, Signature, __VA_ARGS__ )
+ #else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION( ClassName, Name, Tags, Signature, ... ) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____C_L_A_S_S____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ) , ClassName, Name, Tags, Signature, __VA_ARGS__ ) )
+ #endif
+#endif
+
+ ///////////////////////////////////////////////////////////////////////////////
+ #define INTERNAL_CATCH_TESTCASE2( TestName, ... ) \
+ static void TestName(); \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( Catch::makeTestInvoker( &TestName ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), Catch::NameAndTags{ __VA_ARGS__ } ); } /* NOLINT */ \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ static void TestName()
+ #define INTERNAL_CATCH_TESTCASE( ... ) \
+ INTERNAL_CATCH_TESTCASE2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), __VA_ARGS__ )
+
+ ///////////////////////////////////////////////////////////////////////////////
+ #define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, ... ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( Catch::makeTestInvoker( &QualifiedMethod ), CATCH_INTERNAL_LINEINFO, "&" #QualifiedMethod, Catch::NameAndTags{ __VA_ARGS__ } ); } /* NOLINT */ \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+ ///////////////////////////////////////////////////////////////////////////////
+ #define INTERNAL_CATCH_TEST_CASE_METHOD2( TestName, ClassName, ... )\
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName) { \
+ void test(); \
+ }; \
+ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( Catch::makeTestInvoker( &TestName::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ __VA_ARGS__ } ); /* NOLINT */ \
+ } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ void TestName::test()
+ #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, ... ) \
+ INTERNAL_CATCH_TEST_CASE_METHOD2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), ClassName, __VA_ARGS__ )
+
+ ///////////////////////////////////////////////////////////////////////////////
+ #define INTERNAL_CATCH_REGISTER_TESTCASE( Function, ... ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( Catch::makeTestInvoker( Function ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), Catch::NameAndTags{ __VA_ARGS__ } ); /* NOLINT */ \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+ ///////////////////////////////////////////////////////////////////////////////
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_2(TestName, TestFunc, Name, Tags, Signature, ... )\
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ INTERNAL_CATCH_DECLARE_SIG_TEST(TestFunc, INTERNAL_CATCH_REMOVE_PARENS(Signature));\
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){\
+ INTERNAL_CATCH_TYPE_GEN\
+ INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\
+ INTERNAL_CATCH_NTTP_REG_GEN(TestFunc,INTERNAL_CATCH_REMOVE_PARENS(Signature))\
+ template<typename...Types> \
+ struct TestName{\
+ TestName(){\
+ int index = 0; \
+ constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, __VA_ARGS__)};\
+ using expander = int[];\
+ (void)expander{(reg_test(Types{}, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index]), Tags } ), index++, 0)... };/* NOLINT */ \
+ }\
+ };\
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
+ TestName<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(__VA_ARGS__)>();\
+ return 0;\
+ }();\
+ }\
+ }\
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ INTERNAL_CATCH_DEFINE_SIG_TEST(TestFunc,INTERNAL_CATCH_REMOVE_PARENS(Signature))
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE(Name, Tags, ...) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), Name, Tags, typename TestType, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE(Name, Tags, ...) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), Name, Tags, typename TestType, __VA_ARGS__ ) )
+#endif
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG(Name, Tags, Signature, ...) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), Name, Tags, Signature, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG(Name, Tags, Signature, ...) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), Name, Tags, Signature, __VA_ARGS__ ) )
+#endif
+
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE2(TestName, TestFuncName, Name, Tags, Signature, TmplTypes, TypesList) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ template<typename TestType> static void TestFuncName(); \
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName) { \
+ INTERNAL_CATCH_TYPE_GEN \
+ INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature)) \
+ template<typename... Types> \
+ struct TestName { \
+ void reg_tests() { \
+ int index = 0; \
+ using expander = int[]; \
+ constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TmplTypes))};\
+ constexpr char const* types_list[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TypesList))};\
+ constexpr auto num_types = sizeof(types_list) / sizeof(types_list[0]);\
+ (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestFuncName<Types> ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + "<" + std::string(types_list[index % num_types]) + ">", Tags } ), index++, 0)... };/* NOLINT */\
+ } \
+ }; \
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){ \
+ using TestInit = typename create<TestName, decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS(TmplTypes)>()), TypeList<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(INTERNAL_CATCH_REMOVE_PARENS(TypesList))>>::type; \
+ TestInit t; \
+ t.reg_tests(); \
+ return 0; \
+ }(); \
+ } \
+ } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ template<typename TestType> \
+ static void TestFuncName()
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE(Name, Tags, ...)\
+ INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE2(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), Name, Tags, typename T,__VA_ARGS__)
+#else
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE(Name, Tags, ...)\
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), Name, Tags, typename T, __VA_ARGS__ ) )
+#endif
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG(Name, Tags, Signature, ...)\
+ INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE2(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), Name, Tags, Signature, __VA_ARGS__)
+#else
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG(Name, Tags, Signature, ...)\
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), Name, Tags, Signature, __VA_ARGS__ ) )
+#endif
+
+ #define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_2(TestName, TestFunc, Name, Tags, TmplList)\
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ template<typename TestType> static void TestFunc(); \
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){\
+ INTERNAL_CATCH_TYPE_GEN\
+ template<typename... Types> \
+ struct TestName { \
+ void reg_tests() { \
+ int index = 0; \
+ using expander = int[]; \
+ (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestFunc<Types> ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), Catch::NameAndTags{ Name " - " + std::string(INTERNAL_CATCH_STRINGIZE(TmplList)) + " - " + std::to_string(index), Tags } ), index++, 0)... };/* NOLINT */\
+ } \
+ };\
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){ \
+ using TestInit = typename convert<TestName, TmplList>::type; \
+ TestInit t; \
+ t.reg_tests(); \
+ return 0; \
+ }(); \
+ }}\
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ template<typename TestType> \
+ static void TestFunc()
+
+ #define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE(Name, Tags, TmplList) \
+ INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), Name, Tags, TmplList )
+
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( TestNameClass, TestName, ClassName, Name, Tags, Signature, ... ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){ \
+ INTERNAL_CATCH_TYPE_GEN\
+ INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\
+ INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD(TestName, ClassName, INTERNAL_CATCH_REMOVE_PARENS(Signature));\
+ INTERNAL_CATCH_NTTP_REG_METHOD_GEN(TestName, INTERNAL_CATCH_REMOVE_PARENS(Signature))\
+ template<typename...Types> \
+ struct TestNameClass{\
+ TestNameClass(){\
+ int index = 0; \
+ constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, __VA_ARGS__)};\
+ using expander = int[];\
+ (void)expander{(reg_test(Types{}, #ClassName, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index]), Tags } ), index++, 0)... };/* NOLINT */ \
+ }\
+ };\
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
+ TestNameClass<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(__VA_ARGS__)>();\
+ return 0;\
+ }();\
+ }\
+ }\
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD(TestName, INTERNAL_CATCH_REMOVE_PARENS(Signature))
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( ClassName, Name, Tags,... ) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____C_L_A_S_S____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ) , ClassName, Name, Tags, typename T, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( ClassName, Name, Tags,... ) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____C_L_A_S_S____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ) , ClassName, Name, Tags, typename T, __VA_ARGS__ ) )
+#endif
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( ClassName, Name, Tags, Signature, ... ) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____C_L_A_S_S____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ) , ClassName, Name, Tags, Signature, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( ClassName, Name, Tags, Signature, ... ) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____C_L_A_S_S____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ) , ClassName, Name, Tags, Signature, __VA_ARGS__ ) )
+#endif
+
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2(TestNameClass, TestName, ClassName, Name, Tags, Signature, TmplTypes, TypesList)\
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ template<typename TestType> \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName <TestType>) { \
+ void test();\
+ };\
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestNameClass) {\
+ INTERNAL_CATCH_TYPE_GEN \
+ INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\
+ template<typename...Types>\
+ struct TestNameClass{\
+ void reg_tests(){\
+ int index = 0;\
+ using expander = int[];\
+ constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TmplTypes))};\
+ constexpr char const* types_list[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TypesList))};\
+ constexpr auto num_types = sizeof(types_list) / sizeof(types_list[0]);\
+ (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + "<" + std::string(types_list[index % num_types]) + ">", Tags } ), index++, 0)... };/* NOLINT */ \
+ }\
+ };\
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
+ using TestInit = typename create<TestNameClass, decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS(TmplTypes)>()), TypeList<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(INTERNAL_CATCH_REMOVE_PARENS(TypesList))>>::type;\
+ TestInit t;\
+ t.reg_tests();\
+ return 0;\
+ }(); \
+ }\
+ }\
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ template<typename TestType> \
+ void TestName<TestType>::test()
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( ClassName, Name, Tags, ... )\
+ INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), ClassName, Name, Tags, typename T, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( ClassName, Name, Tags, ... )\
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), ClassName, Name, Tags, typename T,__VA_ARGS__ ) )
+#endif
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( ClassName, Name, Tags, Signature, ... )\
+ INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), ClassName, Name, Tags, Signature, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( ClassName, Name, Tags, Signature, ... )\
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), ClassName, Name, Tags, Signature,__VA_ARGS__ ) )
+#endif
+
+ #define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD_2( TestNameClass, TestName, ClassName, Name, Tags, TmplList) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ template<typename TestType> \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName <TestType>) { \
+ void test();\
+ };\
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){ \
+ INTERNAL_CATCH_TYPE_GEN\
+ template<typename...Types>\
+ struct TestNameClass{\
+ void reg_tests(){\
+ int index = 0;\
+ using expander = int[];\
+ (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ Name " - " + std::string(INTERNAL_CATCH_STRINGIZE(TmplList)) + " - " + std::to_string(index), Tags } ), index++, 0)... };/* NOLINT */ \
+ }\
+ };\
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
+ using TestInit = typename convert<TestNameClass, TmplList>::type;\
+ TestInit t;\
+ t.reg_tests();\
+ return 0;\
+ }(); \
+ }}\
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ template<typename TestType> \
+ void TestName<TestType>::test()
+
+#define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD(ClassName, Name, Tags, TmplList) \
+ INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), ClassName, Name, Tags, TmplList )
+
+// end catch_test_registry.h
+// start catch_capture.hpp
+
+// start catch_assertionhandler.h
+
+// start catch_assertioninfo.h
+
+// start catch_result_type.h
+
+namespace Catch {
+
+ // ResultWas::OfType enum
+ struct ResultWas { enum OfType {
+ Unknown = -1,
+ Ok = 0,
+ Info = 1,
+ Warning = 2,
+
+ FailureBit = 0x10,
+
+ ExpressionFailed = FailureBit | 1,
+ ExplicitFailure = FailureBit | 2,
+
+ Exception = 0x100 | FailureBit,
+
+ ThrewException = Exception | 1,
+ DidntThrowException = Exception | 2,
+
+ FatalErrorCondition = 0x200 | FailureBit
+
+ }; };
+
+ bool isOk( ResultWas::OfType resultType );
+ bool isJustInfo( int flags );
+
+ // ResultDisposition::Flags enum
+ struct ResultDisposition { enum Flags {
+ Normal = 0x01,
+
+ ContinueOnFailure = 0x02, // Failures fail test, but execution continues
+ FalseTest = 0x04, // Prefix expression with !
+ SuppressFail = 0x08 // Failures are reported but do not fail the test
+ }; };
+
+ ResultDisposition::Flags operator | ( ResultDisposition::Flags lhs, ResultDisposition::Flags rhs );
+
+ bool shouldContinueOnFailure( int flags );
+ inline bool isFalseTest( int flags ) { return ( flags & ResultDisposition::FalseTest ) != 0; }
+ bool shouldSuppressFailure( int flags );
+
+} // end namespace Catch
+
+// end catch_result_type.h
+namespace Catch {
+
+ struct AssertionInfo
+ {
+ StringRef macroName;
+ SourceLineInfo lineInfo;
+ StringRef capturedExpression;
+ ResultDisposition::Flags resultDisposition;
+
+ // We want to delete this constructor but a compiler bug in 4.8 means
+ // the struct is then treated as non-aggregate
+ //AssertionInfo() = delete;
+ };
+
+} // end namespace Catch
+
+// end catch_assertioninfo.h
+// start catch_decomposer.h
+
+// start catch_tostring.h
+
+#include <vector>
+#include <cstddef>
+#include <type_traits>
+#include <string>
+// start catch_stream.h
+
+#include <iosfwd>
+#include <cstddef>
+#include <ostream>
+
+namespace Catch {
+
+ std::ostream& cout();
+ std::ostream& cerr();
+ std::ostream& clog();
+
+ class StringRef;
+
+ struct IStream {
+ virtual ~IStream();
+ virtual std::ostream& stream() const = 0;
+ };
+
+ auto makeStream( StringRef const &filename ) -> IStream const*;
+
+ class ReusableStringStream : NonCopyable {
+ std::size_t m_index;
+ std::ostream* m_oss;
+ public:
+ ReusableStringStream();
+ ~ReusableStringStream();
+
+ auto str() const -> std::string;
+
+ template<typename T>
+ auto operator << ( T const& value ) -> ReusableStringStream& {
+ *m_oss << value;
+ return *this;
+ }
+ auto get() -> std::ostream& { return *m_oss; }
+ };
+}
+
+// end catch_stream.h
+// start catch_interfaces_enum_values_registry.h
+
+#include <vector>
+
+namespace Catch {
+
+ namespace Detail {
+ struct EnumInfo {
+ StringRef m_name;
+ std::vector<std::pair<int, StringRef>> m_values;
+
+ ~EnumInfo();
+
+ StringRef lookup( int value ) const;
+ };
+ } // namespace Detail
+
+ struct IMutableEnumValuesRegistry {
+ virtual ~IMutableEnumValuesRegistry();
+
+ virtual Detail::EnumInfo const& registerEnum( StringRef enumName, StringRef allEnums, std::vector<int> const& values ) = 0;
+
+ template<typename E>
+ Detail::EnumInfo const& registerEnum( StringRef enumName, StringRef allEnums, std::initializer_list<E> values ) {
+ static_assert(sizeof(int) >= sizeof(E), "Cannot serialize enum to int");
+ std::vector<int> intValues;
+ intValues.reserve( values.size() );
+ for( auto enumValue : values )
+ intValues.push_back( static_cast<int>( enumValue ) );
+ return registerEnum( enumName, allEnums, intValues );
+ }
+ };
+
+} // Catch
+
+// end catch_interfaces_enum_values_registry.h
+
+#ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+#include <string_view>
+#endif
+
+#ifdef __OBJC__
+// start catch_objc_arc.hpp
+
+#import <Foundation/Foundation.h>
+
+#ifdef __has_feature
+#define CATCH_ARC_ENABLED __has_feature(objc_arc)
+#else
+#define CATCH_ARC_ENABLED 0
+#endif
+
+void arcSafeRelease( NSObject* obj );
+id performOptionalSelector( id obj, SEL sel );
+
+#if !CATCH_ARC_ENABLED
+inline void arcSafeRelease( NSObject* obj ) {
+ [obj release];
+}
+inline id performOptionalSelector( id obj, SEL sel ) {
+ if( [obj respondsToSelector: sel] )
+ return [obj performSelector: sel];
+ return nil;
+}
+#define CATCH_UNSAFE_UNRETAINED
+#define CATCH_ARC_STRONG
+#else
+inline void arcSafeRelease( NSObject* ){}
+inline id performOptionalSelector( id obj, SEL sel ) {
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
+#endif
+ if( [obj respondsToSelector: sel] )
+ return [obj performSelector: sel];
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+ return nil;
+}
+#define CATCH_UNSAFE_UNRETAINED __unsafe_unretained
+#define CATCH_ARC_STRONG __strong
+#endif
+
+// end catch_objc_arc.hpp
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable:4180) // We attempt to stream a function (address) by const&, which MSVC complains about but is harmless
+#endif
+
+namespace Catch {
+ namespace Detail {
+
+ extern const std::string unprintableString;
+
+ std::string rawMemoryToString( const void *object, std::size_t size );
+
+ template<typename T>
+ std::string rawMemoryToString( const T& object ) {
+ return rawMemoryToString( &object, sizeof(object) );
+ }
+
+ template<typename T>
+ class IsStreamInsertable {
+ template<typename Stream, typename U>
+ static auto test(int)
+ -> decltype(std::declval<Stream&>() << std::declval<U>(), std::true_type());
+
+ template<typename, typename>
+ static auto test(...)->std::false_type;
+
+ public:
+ static const bool value = decltype(test<std::ostream, const T&>(0))::value;
+ };
+
+ template<typename E>
+ std::string convertUnknownEnumToString( E e );
+
+ template<typename T>
+ typename std::enable_if<
+ !std::is_enum<T>::value && !std::is_base_of<std::exception, T>::value,
+ std::string>::type convertUnstreamable( T const& ) {
+ return Detail::unprintableString;
+ }
+ template<typename T>
+ typename std::enable_if<
+ !std::is_enum<T>::value && std::is_base_of<std::exception, T>::value,
+ std::string>::type convertUnstreamable(T const& ex) {
+ return ex.what();
+ }
+
+ template<typename T>
+ typename std::enable_if<
+ std::is_enum<T>::value
+ , std::string>::type convertUnstreamable( T const& value ) {
+ return convertUnknownEnumToString( value );
+ }
+
+#if defined(_MANAGED)
+ //! Convert a CLR string to a utf8 std::string
+ template<typename T>
+ std::string clrReferenceToString( T^ ref ) {
+ if (ref == nullptr)
+ return std::string("null");
+ auto bytes = System::Text::Encoding::UTF8->GetBytes(ref->ToString());
+ cli::pin_ptr<System::Byte> p = &bytes[0];
+ return std::string(reinterpret_cast<char const *>(p), bytes->Length);
+ }
+#endif
+
+ } // namespace Detail
+
+ // If we decide for C++14, change these to enable_if_ts
+ template <typename T, typename = void>
+ struct StringMaker {
+ template <typename Fake = T>
+ static
+ typename std::enable_if<::Catch::Detail::IsStreamInsertable<Fake>::value, std::string>::type
+ convert(const Fake& value) {
+ ReusableStringStream rss;
+ // NB: call using the function-like syntax to avoid ambiguity with
+ // user-defined templated operator<< under clang.
+ rss.operator<<(value);
+ return rss.str();
+ }
+
+ template <typename Fake = T>
+ static
+ typename std::enable_if<!::Catch::Detail::IsStreamInsertable<Fake>::value, std::string>::type
+ convert( const Fake& value ) {
+#if !defined(CATCH_CONFIG_FALLBACK_STRINGIFIER)
+ return Detail::convertUnstreamable(value);
+#else
+ return CATCH_CONFIG_FALLBACK_STRINGIFIER(value);
+#endif
+ }
+ };
+
+ namespace Detail {
+
+ // This function dispatches all stringification requests inside of Catch.
+ // Should be preferably called fully qualified, like ::Catch::Detail::stringify
+ template <typename T>
+ std::string stringify(const T& e) {
+ return ::Catch::StringMaker<typename std::remove_cv<typename std::remove_reference<T>::type>::type>::convert(e);
+ }
+
+ template<typename E>
+ std::string convertUnknownEnumToString( E e ) {
+ return ::Catch::Detail::stringify(static_cast<typename std::underlying_type<E>::type>(e));
+ }
+
+#if defined(_MANAGED)
+ template <typename T>
+ std::string stringify( T^ e ) {
+ return ::Catch::StringMaker<T^>::convert(e);
+ }
+#endif
+
+ } // namespace Detail
+
+ // Some predefined specializations
+
+ template<>
+ struct StringMaker<std::string> {
+ static std::string convert(const std::string& str);
+ };
+
+#ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+ template<>
+ struct StringMaker<std::string_view> {
+ static std::string convert(std::string_view str);
+ };
+#endif
+
+ template<>
+ struct StringMaker<char const *> {
+ static std::string convert(char const * str);
+ };
+ template<>
+ struct StringMaker<char *> {
+ static std::string convert(char * str);
+ };
+
+#ifdef CATCH_CONFIG_WCHAR
+ template<>
+ struct StringMaker<std::wstring> {
+ static std::string convert(const std::wstring& wstr);
+ };
+
+# ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+ template<>
+ struct StringMaker<std::wstring_view> {
+ static std::string convert(std::wstring_view str);
+ };
+# endif
+
+ template<>
+ struct StringMaker<wchar_t const *> {
+ static std::string convert(wchar_t const * str);
+ };
+ template<>
+ struct StringMaker<wchar_t *> {
+ static std::string convert(wchar_t * str);
+ };
+#endif
+
+ // TBD: Should we use `strnlen` to ensure that we don't go out of the buffer,
+ // while keeping string semantics?
+ template<int SZ>
+ struct StringMaker<char[SZ]> {
+ static std::string convert(char const* str) {
+ return ::Catch::Detail::stringify(std::string{ str });
+ }
+ };
+ template<int SZ>
+ struct StringMaker<signed char[SZ]> {
+ static std::string convert(signed char const* str) {
+ return ::Catch::Detail::stringify(std::string{ reinterpret_cast<char const *>(str) });
+ }
+ };
+ template<int SZ>
+ struct StringMaker<unsigned char[SZ]> {
+ static std::string convert(unsigned char const* str) {
+ return ::Catch::Detail::stringify(std::string{ reinterpret_cast<char const *>(str) });
+ }
+ };
+
+#if defined(CATCH_CONFIG_CPP17_BYTE)
+ template<>
+ struct StringMaker<std::byte> {
+ static std::string convert(std::byte value);
+ };
+#endif // defined(CATCH_CONFIG_CPP17_BYTE)
+ template<>
+ struct StringMaker<int> {
+ static std::string convert(int value);
+ };
+ template<>
+ struct StringMaker<long> {
+ static std::string convert(long value);
+ };
+ template<>
+ struct StringMaker<long long> {
+ static std::string convert(long long value);
+ };
+ template<>
+ struct StringMaker<unsigned int> {
+ static std::string convert(unsigned int value);
+ };
+ template<>
+ struct StringMaker<unsigned long> {
+ static std::string convert(unsigned long value);
+ };
+ template<>
+ struct StringMaker<unsigned long long> {
+ static std::string convert(unsigned long long value);
+ };
+
+ template<>
+ struct StringMaker<bool> {
+ static std::string convert(bool b);
+ };
+
+ template<>
+ struct StringMaker<char> {
+ static std::string convert(char c);
+ };
+ template<>
+ struct StringMaker<signed char> {
+ static std::string convert(signed char c);
+ };
+ template<>
+ struct StringMaker<unsigned char> {
+ static std::string convert(unsigned char c);
+ };
+
+ template<>
+ struct StringMaker<std::nullptr_t> {
+ static std::string convert(std::nullptr_t);
+ };
+
+ template<>
+ struct StringMaker<float> {
+ static std::string convert(float value);
+ static int precision;
+ };
+
+ template<>
+ struct StringMaker<double> {
+ static std::string convert(double value);
+ static int precision;
+ };
+
+ template <typename T>
+ struct StringMaker<T*> {
+ template <typename U>
+ static std::string convert(U* p) {
+ if (p) {
+ return ::Catch::Detail::rawMemoryToString(p);
+ } else {
+ return "nullptr";
+ }
+ }
+ };
+
+ template <typename R, typename C>
+ struct StringMaker<R C::*> {
+ static std::string convert(R C::* p) {
+ if (p) {
+ return ::Catch::Detail::rawMemoryToString(p);
+ } else {
+ return "nullptr";
+ }
+ }
+ };
+
+#if defined(_MANAGED)
+ template <typename T>
+ struct StringMaker<T^> {
+ static std::string convert( T^ ref ) {
+ return ::Catch::Detail::clrReferenceToString(ref);
+ }
+ };
+#endif
+
+ namespace Detail {
+ template<typename InputIterator>
+ std::string rangeToString(InputIterator first, InputIterator last) {
+ ReusableStringStream rss;
+ rss << "{ ";
+ if (first != last) {
+ rss << ::Catch::Detail::stringify(*first);
+ for (++first; first != last; ++first)
+ rss << ", " << ::Catch::Detail::stringify(*first);
+ }
+ rss << " }";
+ return rss.str();
+ }
+ }
+
+#ifdef __OBJC__
+ template<>
+ struct StringMaker<NSString*> {
+ static std::string convert(NSString * nsstring) {
+ if (!nsstring)
+ return "nil";
+ return std::string("@") + [nsstring UTF8String];
+ }
+ };
+ template<>
+ struct StringMaker<NSObject*> {
+ static std::string convert(NSObject* nsObject) {
+ return ::Catch::Detail::stringify([nsObject description]);
+ }
+
+ };
+ namespace Detail {
+ inline std::string stringify( NSString* nsstring ) {
+ return StringMaker<NSString*>::convert( nsstring );
+ }
+
+ } // namespace Detail
+#endif // __OBJC__
+
+} // namespace Catch
+
+//////////////////////////////////////////////////////
+// Separate std-lib types stringification, so it can be selectively enabled
+// This means that we do not bring in
+
+#if defined(CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS)
+# define CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER
+# define CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER
+# define CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER
+# define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
+# define CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER
+#endif
+
+// Separate std::pair specialization
+#if defined(CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER)
+#include <utility>
+namespace Catch {
+ template<typename T1, typename T2>
+ struct StringMaker<std::pair<T1, T2> > {
+ static std::string convert(const std::pair<T1, T2>& pair) {
+ ReusableStringStream rss;
+ rss << "{ "
+ << ::Catch::Detail::stringify(pair.first)
+ << ", "
+ << ::Catch::Detail::stringify(pair.second)
+ << " }";
+ return rss.str();
+ }
+ };
+}
+#endif // CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER
+
+#if defined(CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER) && defined(CATCH_CONFIG_CPP17_OPTIONAL)
+#include <optional>
+namespace Catch {
+ template<typename T>
+ struct StringMaker<std::optional<T> > {
+ static std::string convert(const std::optional<T>& optional) {
+ ReusableStringStream rss;
+ if (optional.has_value()) {
+ rss << ::Catch::Detail::stringify(*optional);
+ } else {
+ rss << "{ }";
+ }
+ return rss.str();
+ }
+ };
+}
+#endif // CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER
+
+// Separate std::tuple specialization
+#if defined(CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER)
+#include <tuple>
+namespace Catch {
+ namespace Detail {
+ template<
+ typename Tuple,
+ std::size_t N = 0,
+ bool = (N < std::tuple_size<Tuple>::value)
+ >
+ struct TupleElementPrinter {
+ static void print(const Tuple& tuple, std::ostream& os) {
+ os << (N ? ", " : " ")
+ << ::Catch::Detail::stringify(std::get<N>(tuple));
+ TupleElementPrinter<Tuple, N + 1>::print(tuple, os);
+ }
+ };
+
+ template<
+ typename Tuple,
+ std::size_t N
+ >
+ struct TupleElementPrinter<Tuple, N, false> {
+ static void print(const Tuple&, std::ostream&) {}
+ };
+
+ }
+
+ template<typename ...Types>
+ struct StringMaker<std::tuple<Types...>> {
+ static std::string convert(const std::tuple<Types...>& tuple) {
+ ReusableStringStream rss;
+ rss << '{';
+ Detail::TupleElementPrinter<std::tuple<Types...>>::print(tuple, rss.get());
+ rss << " }";
+ return rss.str();
+ }
+ };
+}
+#endif // CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER
+
+#if defined(CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER) && defined(CATCH_CONFIG_CPP17_VARIANT)
+#include <variant>
+namespace Catch {
+ template<>
+ struct StringMaker<std::monostate> {
+ static std::string convert(const std::monostate&) {
+ return "{ }";
+ }
+ };
+
+ template<typename... Elements>
+ struct StringMaker<std::variant<Elements...>> {
+ static std::string convert(const std::variant<Elements...>& variant) {
+ if (variant.valueless_by_exception()) {
+ return "{valueless variant}";
+ } else {
+ return std::visit(
+ [](const auto& value) {
+ return ::Catch::Detail::stringify(value);
+ },
+ variant
+ );
+ }
+ }
+ };
+}
+#endif // CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER
+
+namespace Catch {
+ struct not_this_one {}; // Tag type for detecting which begin/ end are being selected
+
+ // Import begin/ end from std here so they are considered alongside the fallback (...) overloads in this namespace
+ using std::begin;
+ using std::end;
+
+ not_this_one begin( ... );
+ not_this_one end( ... );
+
+ template <typename T>
+ struct is_range {
+ static const bool value =
+ !std::is_same<decltype(begin(std::declval<T>())), not_this_one>::value &&
+ !std::is_same<decltype(end(std::declval<T>())), not_this_one>::value;
+ };
+
+#if defined(_MANAGED) // Managed types are never ranges
+ template <typename T>
+ struct is_range<T^> {
+ static const bool value = false;
+ };
+#endif
+
+ template<typename Range>
+ std::string rangeToString( Range const& range ) {
+ return ::Catch::Detail::rangeToString( begin( range ), end( range ) );
+ }
+
+ // Handle vector<bool> specially
+ template<typename Allocator>
+ std::string rangeToString( std::vector<bool, Allocator> const& v ) {
+ ReusableStringStream rss;
+ rss << "{ ";
+ bool first = true;
+ for( bool b : v ) {
+ if( first )
+ first = false;
+ else
+ rss << ", ";
+ rss << ::Catch::Detail::stringify( b );
+ }
+ rss << " }";
+ return rss.str();
+ }
+
+ template<typename R>
+ struct StringMaker<R, typename std::enable_if<is_range<R>::value && !::Catch::Detail::IsStreamInsertable<R>::value>::type> {
+ static std::string convert( R const& range ) {
+ return rangeToString( range );
+ }
+ };
+
+ template <typename T, int SZ>
+ struct StringMaker<T[SZ]> {
+ static std::string convert(T const(&arr)[SZ]) {
+ return rangeToString(arr);
+ }
+ };
+
+} // namespace Catch
+
+// Separate std::chrono::duration specialization
+#if defined(CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER)
+#include <ctime>
+#include <ratio>
+#include <chrono>
+
+namespace Catch {
+
+template <class Ratio>
+struct ratio_string {
+ static std::string symbol();
+};
+
+template <class Ratio>
+std::string ratio_string<Ratio>::symbol() {
+ Catch::ReusableStringStream rss;
+ rss << '[' << Ratio::num << '/'
+ << Ratio::den << ']';
+ return rss.str();
+}
+template <>
+struct ratio_string<std::atto> {
+ static std::string symbol();
+};
+template <>
+struct ratio_string<std::femto> {
+ static std::string symbol();
+};
+template <>
+struct ratio_string<std::pico> {
+ static std::string symbol();
+};
+template <>
+struct ratio_string<std::nano> {
+ static std::string symbol();
+};
+template <>
+struct ratio_string<std::micro> {
+ static std::string symbol();
+};
+template <>
+struct ratio_string<std::milli> {
+ static std::string symbol();
+};
+
+ ////////////
+ // std::chrono::duration specializations
+ template<typename Value, typename Ratio>
+ struct StringMaker<std::chrono::duration<Value, Ratio>> {
+ static std::string convert(std::chrono::duration<Value, Ratio> const& duration) {
+ ReusableStringStream rss;
+ rss << duration.count() << ' ' << ratio_string<Ratio>::symbol() << 's';
+ return rss.str();
+ }
+ };
+ template<typename Value>
+ struct StringMaker<std::chrono::duration<Value, std::ratio<1>>> {
+ static std::string convert(std::chrono::duration<Value, std::ratio<1>> const& duration) {
+ ReusableStringStream rss;
+ rss << duration.count() << " s";
+ return rss.str();
+ }
+ };
+ template<typename Value>
+ struct StringMaker<std::chrono::duration<Value, std::ratio<60>>> {
+ static std::string convert(std::chrono::duration<Value, std::ratio<60>> const& duration) {
+ ReusableStringStream rss;
+ rss << duration.count() << " m";
+ return rss.str();
+ }
+ };
+ template<typename Value>
+ struct StringMaker<std::chrono::duration<Value, std::ratio<3600>>> {
+ static std::string convert(std::chrono::duration<Value, std::ratio<3600>> const& duration) {
+ ReusableStringStream rss;
+ rss << duration.count() << " h";
+ return rss.str();
+ }
+ };
+
+ ////////////
+ // std::chrono::time_point specialization
+ // Generic time_point cannot be specialized, only std::chrono::time_point<system_clock>
+ template<typename Clock, typename Duration>
+ struct StringMaker<std::chrono::time_point<Clock, Duration>> {
+ static std::string convert(std::chrono::time_point<Clock, Duration> const& time_point) {
+ return ::Catch::Detail::stringify(time_point.time_since_epoch()) + " since epoch";
+ }
+ };
+ // std::chrono::time_point<system_clock> specialization
+ template<typename Duration>
+ struct StringMaker<std::chrono::time_point<std::chrono::system_clock, Duration>> {
+ static std::string convert(std::chrono::time_point<std::chrono::system_clock, Duration> const& time_point) {
+ auto converted = std::chrono::system_clock::to_time_t(time_point);
+
+#ifdef _MSC_VER
+ std::tm timeInfo = {};
+ gmtime_s(&timeInfo, &converted);
+#else
+ std::tm* timeInfo = std::gmtime(&converted);
+#endif
+
+ auto const timeStampSize = sizeof("2017-01-16T17:06:45Z");
+ char timeStamp[timeStampSize];
+ const char * const fmt = "%Y-%m-%dT%H:%M:%SZ";
+
+#ifdef _MSC_VER
+ std::strftime(timeStamp, timeStampSize, fmt, &timeInfo);
+#else
+ std::strftime(timeStamp, timeStampSize, fmt, timeInfo);
+#endif
+ return std::string(timeStamp);
+ }
+ };
+}
+#endif // CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
+
+#define INTERNAL_CATCH_REGISTER_ENUM( enumName, ... ) \
+namespace Catch { \
+ template<> struct StringMaker<enumName> { \
+ static std::string convert( enumName value ) { \
+ static const auto& enumInfo = ::Catch::getMutableRegistryHub().getMutableEnumValuesRegistry().registerEnum( #enumName, #__VA_ARGS__, { __VA_ARGS__ } ); \
+ return static_cast<std::string>(enumInfo.lookup( static_cast<int>( value ) )); \
+ } \
+ }; \
+}
+
+#define CATCH_REGISTER_ENUM( enumName, ... ) INTERNAL_CATCH_REGISTER_ENUM( enumName, __VA_ARGS__ )
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+// end catch_tostring.h
+#include <iosfwd>
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable:4389) // '==' : signed/unsigned mismatch
+#pragma warning(disable:4018) // more "signed/unsigned mismatch"
+#pragma warning(disable:4312) // Converting int to T* using reinterpret_cast (issue on x64 platform)
+#pragma warning(disable:4180) // qualifier applied to function type has no meaning
+#pragma warning(disable:4800) // Forcing result to true or false
+#endif
+
+namespace Catch {
+
+ struct ITransientExpression {
+ auto isBinaryExpression() const -> bool { return m_isBinaryExpression; }
+ auto getResult() const -> bool { return m_result; }
+ virtual void streamReconstructedExpression( std::ostream &os ) const = 0;
+
+ ITransientExpression( bool isBinaryExpression, bool result )
+ : m_isBinaryExpression( isBinaryExpression ),
+ m_result( result )
+ {}
+
+ // We don't actually need a virtual destructor, but many static analysers
+ // complain if it's not here :-(
+ virtual ~ITransientExpression();
+
+ bool m_isBinaryExpression;
+ bool m_result;
+
+ };
+
+ void formatReconstructedExpression( std::ostream &os, std::string const& lhs, StringRef op, std::string const& rhs );
+
+ template<typename LhsT, typename RhsT>
+ class BinaryExpr : public ITransientExpression {
+ LhsT m_lhs;
+ StringRef m_op;
+ RhsT m_rhs;
+
+ void streamReconstructedExpression( std::ostream &os ) const override {
+ formatReconstructedExpression
+ ( os, Catch::Detail::stringify( m_lhs ), m_op, Catch::Detail::stringify( m_rhs ) );
+ }
+
+ public:
+ BinaryExpr( bool comparisonResult, LhsT lhs, StringRef op, RhsT rhs )
+ : ITransientExpression{ true, comparisonResult },
+ m_lhs( lhs ),
+ m_op( op ),
+ m_rhs( rhs )
+ {}
+
+ template<typename T>
+ auto operator && ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator || ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator == ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator != ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator > ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator < ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator >= ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator <= ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+ };
+
+ template<typename LhsT>
+ class UnaryExpr : public ITransientExpression {
+ LhsT m_lhs;
+
+ void streamReconstructedExpression( std::ostream &os ) const override {
+ os << Catch::Detail::stringify( m_lhs );
+ }
+
+ public:
+ explicit UnaryExpr( LhsT lhs )
+ : ITransientExpression{ false, static_cast<bool>(lhs) },
+ m_lhs( lhs )
+ {}
+ };
+
+ // Specialised comparison functions to handle equality comparisons between ints and pointers (NULL deduces as an int)
+ template<typename LhsT, typename RhsT>
+ auto compareEqual( LhsT const& lhs, RhsT const& rhs ) -> bool { return static_cast<bool>(lhs == rhs); }
+ template<typename T>
+ auto compareEqual( T* const& lhs, int rhs ) -> bool { return lhs == reinterpret_cast<void const*>( rhs ); }
+ template<typename T>
+ auto compareEqual( T* const& lhs, long rhs ) -> bool { return lhs == reinterpret_cast<void const*>( rhs ); }
+ template<typename T>
+ auto compareEqual( int lhs, T* const& rhs ) -> bool { return reinterpret_cast<void const*>( lhs ) == rhs; }
+ template<typename T>
+ auto compareEqual( long lhs, T* const& rhs ) -> bool { return reinterpret_cast<void const*>( lhs ) == rhs; }
+
+ template<typename LhsT, typename RhsT>
+ auto compareNotEqual( LhsT const& lhs, RhsT&& rhs ) -> bool { return static_cast<bool>(lhs != rhs); }
+ template<typename T>
+ auto compareNotEqual( T* const& lhs, int rhs ) -> bool { return lhs != reinterpret_cast<void const*>( rhs ); }
+ template<typename T>
+ auto compareNotEqual( T* const& lhs, long rhs ) -> bool { return lhs != reinterpret_cast<void const*>( rhs ); }
+ template<typename T>
+ auto compareNotEqual( int lhs, T* const& rhs ) -> bool { return reinterpret_cast<void const*>( lhs ) != rhs; }
+ template<typename T>
+ auto compareNotEqual( long lhs, T* const& rhs ) -> bool { return reinterpret_cast<void const*>( lhs ) != rhs; }
+
+ template<typename LhsT>
+ class ExprLhs {
+ LhsT m_lhs;
+ public:
+ explicit ExprLhs( LhsT lhs ) : m_lhs( lhs ) {}
+
+ template<typename RhsT>
+ auto operator == ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { compareEqual( m_lhs, rhs ), m_lhs, "==", rhs };
+ }
+ auto operator == ( bool rhs ) -> BinaryExpr<LhsT, bool> const {
+ return { m_lhs == rhs, m_lhs, "==", rhs };
+ }
+
+ template<typename RhsT>
+ auto operator != ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { compareNotEqual( m_lhs, rhs ), m_lhs, "!=", rhs };
+ }
+ auto operator != ( bool rhs ) -> BinaryExpr<LhsT, bool> const {
+ return { m_lhs != rhs, m_lhs, "!=", rhs };
+ }
+
+ template<typename RhsT>
+ auto operator > ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs > rhs), m_lhs, ">", rhs };
+ }
+ template<typename RhsT>
+ auto operator < ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs < rhs), m_lhs, "<", rhs };
+ }
+ template<typename RhsT>
+ auto operator >= ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs >= rhs), m_lhs, ">=", rhs };
+ }
+ template<typename RhsT>
+ auto operator <= ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs <= rhs), m_lhs, "<=", rhs };
+ }
+ template <typename RhsT>
+ auto operator | (RhsT const& rhs) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs | rhs), m_lhs, "|", rhs };
+ }
+ template <typename RhsT>
+ auto operator & (RhsT const& rhs) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs & rhs), m_lhs, "&", rhs };
+ }
+ template <typename RhsT>
+ auto operator ^ (RhsT const& rhs) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs ^ rhs), m_lhs, "^", rhs };
+ }
+
+ template<typename RhsT>
+ auto operator && ( RhsT const& ) -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<RhsT>::value,
+ "operator&& is not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename RhsT>
+ auto operator || ( RhsT const& ) -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<RhsT>::value,
+ "operator|| is not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ auto makeUnaryExpr() const -> UnaryExpr<LhsT> {
+ return UnaryExpr<LhsT>{ m_lhs };
+ }
+ };
+
+ void handleExpression( ITransientExpression const& expr );
+
+ template<typename T>
+ void handleExpression( ExprLhs<T> const& expr ) {
+ handleExpression( expr.makeUnaryExpr() );
+ }
+
+ struct Decomposer {
+ template<typename T>
+ auto operator <= ( T const& lhs ) -> ExprLhs<T const&> {
+ return ExprLhs<T const&>{ lhs };
+ }
+
+ auto operator <=( bool value ) -> ExprLhs<bool> {
+ return ExprLhs<bool>{ value };
+ }
+ };
+
+} // end namespace Catch
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+// end catch_decomposer.h
+// start catch_interfaces_capture.h
+
+#include <string>
+#include <chrono>
+
+namespace Catch {
+
+ class AssertionResult;
+ struct AssertionInfo;
+ struct SectionInfo;
+ struct SectionEndInfo;
+ struct MessageInfo;
+ struct MessageBuilder;
+ struct Counts;
+ struct AssertionReaction;
+ struct SourceLineInfo;
+
+ struct ITransientExpression;
+ struct IGeneratorTracker;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ struct BenchmarkInfo;
+ template <typename Duration = std::chrono::duration<double, std::nano>>
+ struct BenchmarkStats;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ struct IResultCapture {
+
+ virtual ~IResultCapture();
+
+ virtual bool sectionStarted( SectionInfo const& sectionInfo,
+ Counts& assertions ) = 0;
+ virtual void sectionEnded( SectionEndInfo const& endInfo ) = 0;
+ virtual void sectionEndedEarly( SectionEndInfo const& endInfo ) = 0;
+
+ virtual auto acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IGeneratorTracker& = 0;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ virtual void benchmarkPreparing( std::string const& name ) = 0;
+ virtual void benchmarkStarting( BenchmarkInfo const& info ) = 0;
+ virtual void benchmarkEnded( BenchmarkStats<> const& stats ) = 0;
+ virtual void benchmarkFailed( std::string const& error ) = 0;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ virtual void pushScopedMessage( MessageInfo const& message ) = 0;
+ virtual void popScopedMessage( MessageInfo const& message ) = 0;
+
+ virtual void emplaceUnscopedMessage( MessageBuilder const& builder ) = 0;
+
+ virtual void handleFatalErrorCondition( StringRef message ) = 0;
+
+ virtual void handleExpr
+ ( AssertionInfo const& info,
+ ITransientExpression const& expr,
+ AssertionReaction& reaction ) = 0;
+ virtual void handleMessage
+ ( AssertionInfo const& info,
+ ResultWas::OfType resultType,
+ StringRef const& message,
+ AssertionReaction& reaction ) = 0;
+ virtual void handleUnexpectedExceptionNotThrown
+ ( AssertionInfo const& info,
+ AssertionReaction& reaction ) = 0;
+ virtual void handleUnexpectedInflightException
+ ( AssertionInfo const& info,
+ std::string const& message,
+ AssertionReaction& reaction ) = 0;
+ virtual void handleIncomplete
+ ( AssertionInfo const& info ) = 0;
+ virtual void handleNonExpr
+ ( AssertionInfo const &info,
+ ResultWas::OfType resultType,
+ AssertionReaction &reaction ) = 0;
+
+ virtual bool lastAssertionPassed() = 0;
+ virtual void assertionPassed() = 0;
+
+ // Deprecated, do not use:
+ virtual std::string getCurrentTestName() const = 0;
+ virtual const AssertionResult* getLastResult() const = 0;
+ virtual void exceptionEarlyReported() = 0;
+ };
+
+ IResultCapture& getResultCapture();
+}
+
+// end catch_interfaces_capture.h
+namespace Catch {
+
+ struct TestFailureException{};
+ struct AssertionResultData;
+ struct IResultCapture;
+ class RunContext;
+
+ class LazyExpression {
+ friend class AssertionHandler;
+ friend struct AssertionStats;
+ friend class RunContext;
+
+ ITransientExpression const* m_transientExpression = nullptr;
+ bool m_isNegated;
+ public:
+ LazyExpression( bool isNegated );
+ LazyExpression( LazyExpression const& other );
+ LazyExpression& operator = ( LazyExpression const& ) = delete;
+
+ explicit operator bool() const;
+
+ friend auto operator << ( std::ostream& os, LazyExpression const& lazyExpr ) -> std::ostream&;
+ };
+
+ struct AssertionReaction {
+ bool shouldDebugBreak = false;
+ bool shouldThrow = false;
+ };
+
+ class AssertionHandler {
+ AssertionInfo m_assertionInfo;
+ AssertionReaction m_reaction;
+ bool m_completed = false;
+ IResultCapture& m_resultCapture;
+
+ public:
+ AssertionHandler
+ ( StringRef const& macroName,
+ SourceLineInfo const& lineInfo,
+ StringRef capturedExpression,
+ ResultDisposition::Flags resultDisposition );
+ ~AssertionHandler() {
+ if ( !m_completed ) {
+ m_resultCapture.handleIncomplete( m_assertionInfo );
+ }
+ }
+
+ template<typename T>
+ void handleExpr( ExprLhs<T> const& expr ) {
+ handleExpr( expr.makeUnaryExpr() );
+ }
+ void handleExpr( ITransientExpression const& expr );
+
+ void handleMessage(ResultWas::OfType resultType, StringRef const& message);
+
+ void handleExceptionThrownAsExpected();
+ void handleUnexpectedExceptionNotThrown();
+ void handleExceptionNotThrownAsExpected();
+ void handleThrowingCallSkipped();
+ void handleUnexpectedInflightException();
+
+ void complete();
+ void setCompleted();
+
+ // query
+ auto allowThrows() const -> bool;
+ };
+
+ void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str, StringRef const& matcherString );
+
+} // namespace Catch
+
+// end catch_assertionhandler.h
+// start catch_message.h
+
+#include <string>
+#include <vector>
+
+namespace Catch {
+
+ struct MessageInfo {
+ MessageInfo( StringRef const& _macroName,
+ SourceLineInfo const& _lineInfo,
+ ResultWas::OfType _type );
+
+ StringRef macroName;
+ std::string message;
+ SourceLineInfo lineInfo;
+ ResultWas::OfType type;
+ unsigned int sequence;
+
+ bool operator == ( MessageInfo const& other ) const;
+ bool operator < ( MessageInfo const& other ) const;
+ private:
+ static unsigned int globalCount;
+ };
+
+ struct MessageStream {
+
+ template<typename T>
+ MessageStream& operator << ( T const& value ) {
+ m_stream << value;
+ return *this;
+ }
+
+ ReusableStringStream m_stream;
+ };
+
+ struct MessageBuilder : MessageStream {
+ MessageBuilder( StringRef const& macroName,
+ SourceLineInfo const& lineInfo,
+ ResultWas::OfType type );
+
+ template<typename T>
+ MessageBuilder& operator << ( T const& value ) {
+ m_stream << value;
+ return *this;
+ }
+
+ MessageInfo m_info;
+ };
+
+ class ScopedMessage {
+ public:
+ explicit ScopedMessage( MessageBuilder const& builder );
+ ScopedMessage( ScopedMessage& duplicate ) = delete;
+ ScopedMessage( ScopedMessage&& old );
+ ~ScopedMessage();
+
+ MessageInfo m_info;
+ bool m_moved;
+ };
+
+ class Capturer {
+ std::vector<MessageInfo> m_messages;
+ IResultCapture& m_resultCapture = getResultCapture();
+ size_t m_captured = 0;
+ public:
+ Capturer( StringRef macroName, SourceLineInfo const& lineInfo, ResultWas::OfType resultType, StringRef names );
+ ~Capturer();
+
+ void captureValue( size_t index, std::string const& value );
+
+ template<typename T>
+ void captureValues( size_t index, T const& value ) {
+ captureValue( index, Catch::Detail::stringify( value ) );
+ }
+
+ template<typename T, typename... Ts>
+ void captureValues( size_t index, T const& value, Ts const&... values ) {
+ captureValue( index, Catch::Detail::stringify(value) );
+ captureValues( index+1, values... );
+ }
+ };
+
+} // end namespace Catch
+
+// end catch_message.h
+#if !defined(CATCH_CONFIG_DISABLE)
+
+#if !defined(CATCH_CONFIG_DISABLE_STRINGIFICATION)
+ #define CATCH_INTERNAL_STRINGIFY(...) #__VA_ARGS__
+#else
+ #define CATCH_INTERNAL_STRINGIFY(...) "Disabled by CATCH_CONFIG_DISABLE_STRINGIFICATION"
+#endif
+
+#if defined(CATCH_CONFIG_FAST_COMPILE) || defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+
+///////////////////////////////////////////////////////////////////////////////
+// Another way to speed-up compilation is to omit local try-catch for REQUIRE*
+// macros.
+#define INTERNAL_CATCH_TRY
+#define INTERNAL_CATCH_CATCH( capturer )
+
+#else // CATCH_CONFIG_FAST_COMPILE
+
+#define INTERNAL_CATCH_TRY try
+#define INTERNAL_CATCH_CATCH( handler ) catch(...) { handler.handleUnexpectedInflightException(); }
+
+#endif
+
+#define INTERNAL_CATCH_REACT( handler ) handler.complete();
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_TEST( macroName, resultDisposition, ... ) \
+ do { \
+ CATCH_INTERNAL_IGNORE_BUT_WARN(__VA_ARGS__); \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__), resultDisposition ); \
+ INTERNAL_CATCH_TRY { \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \
+ catchAssertionHandler.handleExpr( Catch::Decomposer() <= __VA_ARGS__ ); \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ } INTERNAL_CATCH_CATCH( catchAssertionHandler ) \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( (void)0, (false) && static_cast<bool>( !!(__VA_ARGS__) ) )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_IF( macroName, resultDisposition, ... ) \
+ INTERNAL_CATCH_TEST( macroName, resultDisposition, __VA_ARGS__ ); \
+ if( Catch::getResultCapture().lastAssertionPassed() )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_ELSE( macroName, resultDisposition, ... ) \
+ INTERNAL_CATCH_TEST( macroName, resultDisposition, __VA_ARGS__ ); \
+ if( !Catch::getResultCapture().lastAssertionPassed() )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_NO_THROW( macroName, resultDisposition, ... ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__), resultDisposition ); \
+ try { \
+ static_cast<void>(__VA_ARGS__); \
+ catchAssertionHandler.handleExceptionNotThrownAsExpected(); \
+ } \
+ catch( ... ) { \
+ catchAssertionHandler.handleUnexpectedInflightException(); \
+ } \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_THROWS( macroName, resultDisposition, ... ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__), resultDisposition); \
+ if( catchAssertionHandler.allowThrows() ) \
+ try { \
+ static_cast<void>(__VA_ARGS__); \
+ catchAssertionHandler.handleUnexpectedExceptionNotThrown(); \
+ } \
+ catch( ... ) { \
+ catchAssertionHandler.handleExceptionThrownAsExpected(); \
+ } \
+ else \
+ catchAssertionHandler.handleThrowingCallSkipped(); \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_THROWS_AS( macroName, exceptionType, resultDisposition, expr ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(expr) ", " CATCH_INTERNAL_STRINGIFY(exceptionType), resultDisposition ); \
+ if( catchAssertionHandler.allowThrows() ) \
+ try { \
+ static_cast<void>(expr); \
+ catchAssertionHandler.handleUnexpectedExceptionNotThrown(); \
+ } \
+ catch( exceptionType const& ) { \
+ catchAssertionHandler.handleExceptionThrownAsExpected(); \
+ } \
+ catch( ... ) { \
+ catchAssertionHandler.handleUnexpectedInflightException(); \
+ } \
+ else \
+ catchAssertionHandler.handleThrowingCallSkipped(); \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_MSG( macroName, messageType, resultDisposition, ... ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::StringRef(), resultDisposition ); \
+ catchAssertionHandler.handleMessage( messageType, ( Catch::MessageStream() << __VA_ARGS__ + ::Catch::StreamEndStop() ).m_stream.str() ); \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_CAPTURE( varName, macroName, ... ) \
+ auto varName = Catch::Capturer( macroName, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info, #__VA_ARGS__ ); \
+ varName.captureValues( 0, __VA_ARGS__ )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_INFO( macroName, log ) \
+ Catch::ScopedMessage INTERNAL_CATCH_UNIQUE_NAME( scopedMessage )( Catch::MessageBuilder( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log );
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_UNSCOPED_INFO( macroName, log ) \
+ Catch::getResultCapture().emplaceUnscopedMessage( Catch::MessageBuilder( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log )
+
+///////////////////////////////////////////////////////////////////////////////
+// Although this is matcher-based, it can be used with just a string
+#define INTERNAL_CATCH_THROWS_STR_MATCHES( macroName, resultDisposition, matcher, ... ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__) ", " CATCH_INTERNAL_STRINGIFY(matcher), resultDisposition ); \
+ if( catchAssertionHandler.allowThrows() ) \
+ try { \
+ static_cast<void>(__VA_ARGS__); \
+ catchAssertionHandler.handleUnexpectedExceptionNotThrown(); \
+ } \
+ catch( ... ) { \
+ Catch::handleExceptionMatchExpr( catchAssertionHandler, matcher, #matcher##_catch_sr ); \
+ } \
+ else \
+ catchAssertionHandler.handleThrowingCallSkipped(); \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+#endif // CATCH_CONFIG_DISABLE
+
+// end catch_capture.hpp
+// start catch_section.h
+
+// start catch_section_info.h
+
+// start catch_totals.h
+
+#include <cstddef>
+
+namespace Catch {
+
+ struct Counts {
+ Counts operator - ( Counts const& other ) const;
+ Counts& operator += ( Counts const& other );
+
+ std::size_t total() const;
+ bool allPassed() const;
+ bool allOk() const;
+
+ std::size_t passed = 0;
+ std::size_t failed = 0;
+ std::size_t failedButOk = 0;
+ };
+
+ struct Totals {
+
+ Totals operator - ( Totals const& other ) const;
+ Totals& operator += ( Totals const& other );
+
+ Totals delta( Totals const& prevTotals ) const;
+
+ int error = 0;
+ Counts assertions;
+ Counts testCases;
+ };
+}
+
+// end catch_totals.h
+#include <string>
+
+namespace Catch {
+
+ struct SectionInfo {
+ SectionInfo
+ ( SourceLineInfo const& _lineInfo,
+ std::string const& _name );
+
+ // Deprecated
+ SectionInfo
+ ( SourceLineInfo const& _lineInfo,
+ std::string const& _name,
+ std::string const& ) : SectionInfo( _lineInfo, _name ) {}
+
+ std::string name;
+ std::string description; // !Deprecated: this will always be empty
+ SourceLineInfo lineInfo;
+ };
+
+ struct SectionEndInfo {
+ SectionInfo sectionInfo;
+ Counts prevAssertions;
+ double durationInSeconds;
+ };
+
+} // end namespace Catch
+
+// end catch_section_info.h
+// start catch_timer.h
+
+#include <cstdint>
+
+namespace Catch {
+
+ auto getCurrentNanosecondsSinceEpoch() -> uint64_t;
+ auto getEstimatedClockResolution() -> uint64_t;
+
+ class Timer {
+ uint64_t m_nanoseconds = 0;
+ public:
+ void start();
+ auto getElapsedNanoseconds() const -> uint64_t;
+ auto getElapsedMicroseconds() const -> uint64_t;
+ auto getElapsedMilliseconds() const -> unsigned int;
+ auto getElapsedSeconds() const -> double;
+ };
+
+} // namespace Catch
+
+// end catch_timer.h
+#include <string>
+
+namespace Catch {
+
+ class Section : NonCopyable {
+ public:
+ Section( SectionInfo const& info );
+ ~Section();
+
+ // This indicates whether the section should be executed or not
+ explicit operator bool() const;
+
+ private:
+ SectionInfo m_info;
+
+ std::string m_name;
+ Counts m_assertions;
+ bool m_sectionIncluded;
+ Timer m_timer;
+ };
+
+} // end namespace Catch
+
+#define INTERNAL_CATCH_SECTION( ... ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS \
+ if( Catch::Section const& INTERNAL_CATCH_UNIQUE_NAME( catch_internal_Section ) = Catch::SectionInfo( CATCH_INTERNAL_LINEINFO, __VA_ARGS__ ) ) \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+#define INTERNAL_CATCH_DYNAMIC_SECTION( ... ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS \
+ if( Catch::Section const& INTERNAL_CATCH_UNIQUE_NAME( catch_internal_Section ) = Catch::SectionInfo( CATCH_INTERNAL_LINEINFO, (Catch::ReusableStringStream() << __VA_ARGS__).str() ) ) \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+// end catch_section.h
+// start catch_interfaces_exception.h
+
+// start catch_interfaces_registry_hub.h
+
+#include <string>
+#include <memory>
+
+namespace Catch {
+
+ class TestCase;
+ struct ITestCaseRegistry;
+ struct IExceptionTranslatorRegistry;
+ struct IExceptionTranslator;
+ struct IReporterRegistry;
+ struct IReporterFactory;
+ struct ITagAliasRegistry;
+ struct IMutableEnumValuesRegistry;
+
+ class StartupExceptionRegistry;
+
+ using IReporterFactoryPtr = std::shared_ptr<IReporterFactory>;
+
+ struct IRegistryHub {
+ virtual ~IRegistryHub();
+
+ virtual IReporterRegistry const& getReporterRegistry() const = 0;
+ virtual ITestCaseRegistry const& getTestCaseRegistry() const = 0;
+ virtual ITagAliasRegistry const& getTagAliasRegistry() const = 0;
+ virtual IExceptionTranslatorRegistry const& getExceptionTranslatorRegistry() const = 0;
+
+ virtual StartupExceptionRegistry const& getStartupExceptionRegistry() const = 0;
+ };
+
+ struct IMutableRegistryHub {
+ virtual ~IMutableRegistryHub();
+ virtual void registerReporter( std::string const& name, IReporterFactoryPtr const& factory ) = 0;
+ virtual void registerListener( IReporterFactoryPtr const& factory ) = 0;
+ virtual void registerTest( TestCase const& testInfo ) = 0;
+ virtual void registerTranslator( const IExceptionTranslator* translator ) = 0;
+ virtual void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) = 0;
+ virtual void registerStartupException() noexcept = 0;
+ virtual IMutableEnumValuesRegistry& getMutableEnumValuesRegistry() = 0;
+ };
+
+ IRegistryHub const& getRegistryHub();
+ IMutableRegistryHub& getMutableRegistryHub();
+ void cleanUp();
+ std::string translateActiveException();
+
+}
+
+// end catch_interfaces_registry_hub.h
+#if defined(CATCH_CONFIG_DISABLE)
+ #define INTERNAL_CATCH_TRANSLATE_EXCEPTION_NO_REG( translatorName, signature) \
+ static std::string translatorName( signature )
+#endif
+
+#include <exception>
+#include <string>
+#include <vector>
+
+namespace Catch {
+ using exceptionTranslateFunction = std::string(*)();
+
+ struct IExceptionTranslator;
+ using ExceptionTranslators = std::vector<std::unique_ptr<IExceptionTranslator const>>;
+
+ struct IExceptionTranslator {
+ virtual ~IExceptionTranslator();
+ virtual std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const = 0;
+ };
+
+ struct IExceptionTranslatorRegistry {
+ virtual ~IExceptionTranslatorRegistry();
+
+ virtual std::string translateActiveException() const = 0;
+ };
+
+ class ExceptionTranslatorRegistrar {
+ template<typename T>
+ class ExceptionTranslator : public IExceptionTranslator {
+ public:
+
+ ExceptionTranslator( std::string(*translateFunction)( T& ) )
+ : m_translateFunction( translateFunction )
+ {}
+
+ std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const override {
+#if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ return "";
+#else
+ try {
+ if( it == itEnd )
+ std::rethrow_exception(std::current_exception());
+ else
+ return (*it)->translate( it+1, itEnd );
+ }
+ catch( T& ex ) {
+ return m_translateFunction( ex );
+ }
+#endif
+ }
+
+ protected:
+ std::string(*m_translateFunction)( T& );
+ };
+
+ public:
+ template<typename T>
+ ExceptionTranslatorRegistrar( std::string(*translateFunction)( T& ) ) {
+ getMutableRegistryHub().registerTranslator
+ ( new ExceptionTranslator<T>( translateFunction ) );
+ }
+ };
+}
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_TRANSLATE_EXCEPTION2( translatorName, signature ) \
+ static std::string translatorName( signature ); \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::ExceptionTranslatorRegistrar INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionRegistrar )( &translatorName ); } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ static std::string translatorName( signature )
+
+#define INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION2( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature )
+
+// end catch_interfaces_exception.h
+// start catch_approx.h
+
+#include <type_traits>
+
+namespace Catch {
+namespace Detail {
+
+ class Approx {
+ private:
+ bool equalityComparisonImpl(double other) const;
+ // Validates the new margin (margin >= 0)
+ // out-of-line to avoid including stdexcept in the header
+ void setMargin(double margin);
+ // Validates the new epsilon (0 < epsilon < 1)
+ // out-of-line to avoid including stdexcept in the header
+ void setEpsilon(double epsilon);
+
+ public:
+ explicit Approx ( double value );
+
+ static Approx custom();
+
+ Approx operator-() const;
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ Approx operator()( T const& value ) {
+ Approx approx( static_cast<double>(value) );
+ approx.m_epsilon = m_epsilon;
+ approx.m_margin = m_margin;
+ approx.m_scale = m_scale;
+ return approx;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ explicit Approx( T const& value ): Approx(static_cast<double>(value))
+ {}
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator == ( const T& lhs, Approx const& rhs ) {
+ auto lhs_v = static_cast<double>(lhs);
+ return rhs.equalityComparisonImpl(lhs_v);
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator == ( Approx const& lhs, const T& rhs ) {
+ return operator==( rhs, lhs );
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator != ( T const& lhs, Approx const& rhs ) {
+ return !operator==( lhs, rhs );
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator != ( Approx const& lhs, T const& rhs ) {
+ return !operator==( rhs, lhs );
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator <= ( T const& lhs, Approx const& rhs ) {
+ return static_cast<double>(lhs) < rhs.m_value || lhs == rhs;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator <= ( Approx const& lhs, T const& rhs ) {
+ return lhs.m_value < static_cast<double>(rhs) || lhs == rhs;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator >= ( T const& lhs, Approx const& rhs ) {
+ return static_cast<double>(lhs) > rhs.m_value || lhs == rhs;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator >= ( Approx const& lhs, T const& rhs ) {
+ return lhs.m_value > static_cast<double>(rhs) || lhs == rhs;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ Approx& epsilon( T const& newEpsilon ) {
+ double epsilonAsDouble = static_cast<double>(newEpsilon);
+ setEpsilon(epsilonAsDouble);
+ return *this;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ Approx& margin( T const& newMargin ) {
+ double marginAsDouble = static_cast<double>(newMargin);
+ setMargin(marginAsDouble);
+ return *this;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ Approx& scale( T const& newScale ) {
+ m_scale = static_cast<double>(newScale);
+ return *this;
+ }
+
+ std::string toString() const;
+
+ private:
+ double m_epsilon;
+ double m_margin;
+ double m_scale;
+ double m_value;
+ };
+} // end namespace Detail
+
+namespace literals {
+ Detail::Approx operator "" _a(long double val);
+ Detail::Approx operator "" _a(unsigned long long val);
+} // end namespace literals
+
+template<>
+struct StringMaker<Catch::Detail::Approx> {
+ static std::string convert(Catch::Detail::Approx const& value);
+};
+
+} // end namespace Catch
+
+// end catch_approx.h
+// start catch_string_manip.h
+
+#include <string>
+#include <iosfwd>
+#include <vector>
+
+namespace Catch {
+
+ bool startsWith( std::string const& s, std::string const& prefix );
+ bool startsWith( std::string const& s, char prefix );
+ bool endsWith( std::string const& s, std::string const& suffix );
+ bool endsWith( std::string const& s, char suffix );
+ bool contains( std::string const& s, std::string const& infix );
+ void toLowerInPlace( std::string& s );
+ std::string toLower( std::string const& s );
+ //! Returns a new string without whitespace at the start/end
+ std::string trim( std::string const& str );
+ //! Returns a substring of the original ref without whitespace. Beware lifetimes!
+ StringRef trim(StringRef ref);
+
+ // !!! Be aware, returns refs into original string - make sure original string outlives them
+ std::vector<StringRef> splitStringRef( StringRef str, char delimiter );
+ bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis );
+
+ struct pluralise {
+ pluralise( std::size_t count, std::string const& label );
+
+ friend std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser );
+
+ std::size_t m_count;
+ std::string m_label;
+ };
+}
+
+// end catch_string_manip.h
+#ifndef CATCH_CONFIG_DISABLE_MATCHERS
+// start catch_capture_matchers.h
+
+// start catch_matchers.h
+
+#include <string>
+#include <vector>
+
+namespace Catch {
+namespace Matchers {
+ namespace Impl {
+
+ template<typename ArgT> struct MatchAllOf;
+ template<typename ArgT> struct MatchAnyOf;
+ template<typename ArgT> struct MatchNotOf;
+
+ class MatcherUntypedBase {
+ public:
+ MatcherUntypedBase() = default;
+ MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
+ MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = delete;
+ std::string toString() const;
+
+ protected:
+ virtual ~MatcherUntypedBase();
+ virtual std::string describe() const = 0;
+ mutable std::string m_cachedToString;
+ };
+
+#ifdef __clang__
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wnon-virtual-dtor"
+#endif
+
+ template<typename ObjectT>
+ struct MatcherMethod {
+ virtual bool match( ObjectT const& arg ) const = 0;
+ };
+
+#if defined(__OBJC__)
+ // Hack to fix Catch GH issue #1661. Could use id for generic Object support.
+ // use of const for Object pointers is very uncommon and under ARC it causes some kind of signature mismatch that breaks compilation
+ template<>
+ struct MatcherMethod<NSString*> {
+ virtual bool match( NSString* arg ) const = 0;
+ };
+#endif
+
+#ifdef __clang__
+# pragma clang diagnostic pop
+#endif
+
+ template<typename T>
+ struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
+
+ MatchAllOf<T> operator && ( MatcherBase const& other ) const;
+ MatchAnyOf<T> operator || ( MatcherBase const& other ) const;
+ MatchNotOf<T> operator ! () const;
+ };
+
+ template<typename ArgT>
+ struct MatchAllOf : MatcherBase<ArgT> {
+ bool match( ArgT const& arg ) const override {
+ for( auto matcher : m_matchers ) {
+ if (!matcher->match(arg))
+ return false;
+ }
+ return true;
+ }
+ std::string describe() const override {
+ std::string description;
+ description.reserve( 4 + m_matchers.size()*32 );
+ description += "( ";
+ bool first = true;
+ for( auto matcher : m_matchers ) {
+ if( first )
+ first = false;
+ else
+ description += " and ";
+ description += matcher->toString();
+ }
+ description += " )";
+ return description;
+ }
+
+ MatchAllOf<ArgT> operator && ( MatcherBase<ArgT> const& other ) {
+ auto copy(*this);
+ copy.m_matchers.push_back( &other );
+ return copy;
+ }
+
+ std::vector<MatcherBase<ArgT> const*> m_matchers;
+ };
+ template<typename ArgT>
+ struct MatchAnyOf : MatcherBase<ArgT> {
+
+ bool match( ArgT const& arg ) const override {
+ for( auto matcher : m_matchers ) {
+ if (matcher->match(arg))
+ return true;
+ }
+ return false;
+ }
+ std::string describe() const override {
+ std::string description;
+ description.reserve( 4 + m_matchers.size()*32 );
+ description += "( ";
+ bool first = true;
+ for( auto matcher : m_matchers ) {
+ if( first )
+ first = false;
+ else
+ description += " or ";
+ description += matcher->toString();
+ }
+ description += " )";
+ return description;
+ }
+
+ MatchAnyOf<ArgT> operator || ( MatcherBase<ArgT> const& other ) {
+ auto copy(*this);
+ copy.m_matchers.push_back( &other );
+ return copy;
+ }
+
+ std::vector<MatcherBase<ArgT> const*> m_matchers;
+ };
+
+ template<typename ArgT>
+ struct MatchNotOf : MatcherBase<ArgT> {
+
+ MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_underlyingMatcher( underlyingMatcher ) {}
+
+ bool match( ArgT const& arg ) const override {
+ return !m_underlyingMatcher.match( arg );
+ }
+
+ std::string describe() const override {
+ return "not " + m_underlyingMatcher.toString();
+ }
+ MatcherBase<ArgT> const& m_underlyingMatcher;
+ };
+
+ template<typename T>
+ MatchAllOf<T> MatcherBase<T>::operator && ( MatcherBase const& other ) const {
+ return MatchAllOf<T>() && *this && other;
+ }
+ template<typename T>
+ MatchAnyOf<T> MatcherBase<T>::operator || ( MatcherBase const& other ) const {
+ return MatchAnyOf<T>() || *this || other;
+ }
+ template<typename T>
+ MatchNotOf<T> MatcherBase<T>::operator ! () const {
+ return MatchNotOf<T>( *this );
+ }
+
+ } // namespace Impl
+
+} // namespace Matchers
+
+using namespace Matchers;
+using Matchers::Impl::MatcherBase;
+
+} // namespace Catch
+
+// end catch_matchers.h
+// start catch_matchers_exception.hpp
+
+namespace Catch {
+namespace Matchers {
+namespace Exception {
+
+class ExceptionMessageMatcher : public MatcherBase<std::exception> {
+ std::string m_message;
+public:
+
+ ExceptionMessageMatcher(std::string const& message):
+ m_message(message)
+ {}
+
+ bool match(std::exception const& ex) const override;
+
+ std::string describe() const override;
+};
+
+} // namespace Exception
+
+Exception::ExceptionMessageMatcher Message(std::string const& message);
+
+} // namespace Matchers
+} // namespace Catch
+
+// end catch_matchers_exception.hpp
+// start catch_matchers_floating.h
+
+namespace Catch {
+namespace Matchers {
+
+ namespace Floating {
+
+ enum class FloatingPointKind : uint8_t;
+
+ struct WithinAbsMatcher : MatcherBase<double> {
+ WithinAbsMatcher(double target, double margin);
+ bool match(double const& matchee) const override;
+ std::string describe() const override;
+ private:
+ double m_target;
+ double m_margin;
+ };
+
+ struct WithinUlpsMatcher : MatcherBase<double> {
+ WithinUlpsMatcher(double target, uint64_t ulps, FloatingPointKind baseType);
+ bool match(double const& matchee) const override;
+ std::string describe() const override;
+ private:
+ double m_target;
+ uint64_t m_ulps;
+ FloatingPointKind m_type;
+ };
+
+ // Given IEEE-754 format for floats and doubles, we can assume
+ // that float -> double promotion is lossless. Given this, we can
+ // assume that if we do the standard relative comparison of
+ // |lhs - rhs| <= epsilon * max(fabs(lhs), fabs(rhs)), then we get
+ // the same result if we do this for floats, as if we do this for
+ // doubles that were promoted from floats.
+ struct WithinRelMatcher : MatcherBase<double> {
+ WithinRelMatcher(double target, double epsilon);
+ bool match(double const& matchee) const override;
+ std::string describe() const override;
+ private:
+ double m_target;
+ double m_epsilon;
+ };
+
+ } // namespace Floating
+
+ // The following functions create the actual matcher objects.
+ // This allows the types to be inferred
+ Floating::WithinUlpsMatcher WithinULP(double target, uint64_t maxUlpDiff);
+ Floating::WithinUlpsMatcher WithinULP(float target, uint64_t maxUlpDiff);
+ Floating::WithinAbsMatcher WithinAbs(double target, double margin);
+ Floating::WithinRelMatcher WithinRel(double target, double eps);
+ // defaults epsilon to 100*numeric_limits<double>::epsilon()
+ Floating::WithinRelMatcher WithinRel(double target);
+ Floating::WithinRelMatcher WithinRel(float target, float eps);
+ // defaults epsilon to 100*numeric_limits<float>::epsilon()
+ Floating::WithinRelMatcher WithinRel(float target);
+
+} // namespace Matchers
+} // namespace Catch
+
+// end catch_matchers_floating.h
+// start catch_matchers_generic.hpp
+
+#include <functional>
+#include <string>
+
+namespace Catch {
+namespace Matchers {
+namespace Generic {
+
+namespace Detail {
+ std::string finalizeDescription(const std::string& desc);
+}
+
+template <typename T>
+class PredicateMatcher : public MatcherBase<T> {
+ std::function<bool(T const&)> m_predicate;
+ std::string m_description;
+public:
+
+ PredicateMatcher(std::function<bool(T const&)> const& elem, std::string const& descr)
+ :m_predicate(std::move(elem)),
+ m_description(Detail::finalizeDescription(descr))
+ {}
+
+ bool match( T const& item ) const override {
+ return m_predicate(item);
+ }
+
+ std::string describe() const override {
+ return m_description;
+ }
+};
+
+} // namespace Generic
+
+ // The following functions create the actual matcher objects.
+ // The user has to explicitly specify type to the function, because
+ // inferring std::function<bool(T const&)> is hard (but possible) and
+ // requires a lot of TMP.
+ template<typename T>
+ Generic::PredicateMatcher<T> Predicate(std::function<bool(T const&)> const& predicate, std::string const& description = "") {
+ return Generic::PredicateMatcher<T>(predicate, description);
+ }
+
+} // namespace Matchers
+} // namespace Catch
+
+// end catch_matchers_generic.hpp
+// start catch_matchers_string.h
+
+#include <string>
+
+namespace Catch {
+namespace Matchers {
+
+ namespace StdString {
+
+ struct CasedString
+ {
+ CasedString( std::string const& str, CaseSensitive::Choice caseSensitivity );
+ std::string adjustString( std::string const& str ) const;
+ std::string caseSensitivitySuffix() const;
+
+ CaseSensitive::Choice m_caseSensitivity;
+ std::string m_str;
+ };
+
+ struct StringMatcherBase : MatcherBase<std::string> {
+ StringMatcherBase( std::string const& operation, CasedString const& comparator );
+ std::string describe() const override;
+
+ CasedString m_comparator;
+ std::string m_operation;
+ };
+
+ struct EqualsMatcher : StringMatcherBase {
+ EqualsMatcher( CasedString const& comparator );
+ bool match( std::string const& source ) const override;
+ };
+ struct ContainsMatcher : StringMatcherBase {
+ ContainsMatcher( CasedString const& comparator );
+ bool match( std::string const& source ) const override;
+ };
+ struct StartsWithMatcher : StringMatcherBase {
+ StartsWithMatcher( CasedString const& comparator );
+ bool match( std::string const& source ) const override;
+ };
+ struct EndsWithMatcher : StringMatcherBase {
+ EndsWithMatcher( CasedString const& comparator );
+ bool match( std::string const& source ) const override;
+ };
+
+ struct RegexMatcher : MatcherBase<std::string> {
+ RegexMatcher( std::string regex, CaseSensitive::Choice caseSensitivity );
+ bool match( std::string const& matchee ) const override;
+ std::string describe() const override;
+
+ private:
+ std::string m_regex;
+ CaseSensitive::Choice m_caseSensitivity;
+ };
+
+ } // namespace StdString
+
+ // The following functions create the actual matcher objects.
+ // This allows the types to be inferred
+
+ StdString::EqualsMatcher Equals( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes );
+ StdString::ContainsMatcher Contains( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes );
+ StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes );
+ StdString::StartsWithMatcher StartsWith( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes );
+ StdString::RegexMatcher Matches( std::string const& regex, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes );
+
+} // namespace Matchers
+} // namespace Catch
+
+// end catch_matchers_string.h
+// start catch_matchers_vector.h
+
+#include <algorithm>
+
+namespace Catch {
+namespace Matchers {
+
+ namespace Vector {
+ template<typename T, typename Alloc>
+ struct ContainsElementMatcher : MatcherBase<std::vector<T, Alloc>> {
+
+ ContainsElementMatcher(T const &comparator) : m_comparator( comparator) {}
+
+ bool match(std::vector<T, Alloc> const &v) const override {
+ for (auto const& el : v) {
+ if (el == m_comparator) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ std::string describe() const override {
+ return "Contains: " + ::Catch::Detail::stringify( m_comparator );
+ }
+
+ T const& m_comparator;
+ };
+
+ template<typename T, typename AllocComp, typename AllocMatch>
+ struct ContainsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
+
+ ContainsMatcher(std::vector<T, AllocComp> const &comparator) : m_comparator( comparator ) {}
+
+ bool match(std::vector<T, AllocMatch> const &v) const override {
+ // !TBD: see note in EqualsMatcher
+ if (m_comparator.size() > v.size())
+ return false;
+ for (auto const& comparator : m_comparator) {
+ auto present = false;
+ for (const auto& el : v) {
+ if (el == comparator) {
+ present = true;
+ break;
+ }
+ }
+ if (!present) {
+ return false;
+ }
+ }
+ return true;
+ }
+ std::string describe() const override {
+ return "Contains: " + ::Catch::Detail::stringify( m_comparator );
+ }
+
+ std::vector<T, AllocComp> const& m_comparator;
+ };
+
+ template<typename T, typename AllocComp, typename AllocMatch>
+ struct EqualsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
+
+ EqualsMatcher(std::vector<T, AllocComp> const &comparator) : m_comparator( comparator ) {}
+
+ bool match(std::vector<T, AllocMatch> const &v) const override {
+ // !TBD: This currently works if all elements can be compared using !=
+ // - a more general approach would be via a compare template that defaults
+ // to using !=. but could be specialised for, e.g. std::vector<T, Alloc> etc
+ // - then just call that directly
+ if (m_comparator.size() != v.size())
+ return false;
+ for (std::size_t i = 0; i < v.size(); ++i)
+ if (m_comparator[i] != v[i])
+ return false;
+ return true;
+ }
+ std::string describe() const override {
+ return "Equals: " + ::Catch::Detail::stringify( m_comparator );
+ }
+ std::vector<T, AllocComp> const& m_comparator;
+ };
+
+ template<typename T, typename AllocComp, typename AllocMatch>
+ struct ApproxMatcher : MatcherBase<std::vector<T, AllocMatch>> {
+
+ ApproxMatcher(std::vector<T, AllocComp> const& comparator) : m_comparator( comparator ) {}
+
+ bool match(std::vector<T, AllocMatch> const &v) const override {
+ if (m_comparator.size() != v.size())
+ return false;
+ for (std::size_t i = 0; i < v.size(); ++i)
+ if (m_comparator[i] != approx(v[i]))
+ return false;
+ return true;
+ }
+ std::string describe() const override {
+ return "is approx: " + ::Catch::Detail::stringify( m_comparator );
+ }
+ template <typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ ApproxMatcher& epsilon( T const& newEpsilon ) {
+ approx.epsilon(newEpsilon);
+ return *this;
+ }
+ template <typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ ApproxMatcher& margin( T const& newMargin ) {
+ approx.margin(newMargin);
+ return *this;
+ }
+ template <typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ ApproxMatcher& scale( T const& newScale ) {
+ approx.scale(newScale);
+ return *this;
+ }
+
+ std::vector<T, AllocComp> const& m_comparator;
+ mutable Catch::Detail::Approx approx = Catch::Detail::Approx::custom();
+ };
+
+ template<typename T, typename AllocComp, typename AllocMatch>
+ struct UnorderedEqualsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
+ UnorderedEqualsMatcher(std::vector<T, AllocComp> const& target) : m_target(target) {}
+ bool match(std::vector<T, AllocMatch> const& vec) const override {
+ // Note: This is a reimplementation of std::is_permutation,
+ // because I don't want to include <algorithm> inside the common path
+ if (m_target.size() != vec.size()) {
+ return false;
+ }
+ return std::is_permutation(m_target.begin(), m_target.end(), vec.begin());
+ }
+
+ std::string describe() const override {
+ return "UnorderedEquals: " + ::Catch::Detail::stringify(m_target);
+ }
+ private:
+ std::vector<T, AllocComp> const& m_target;
+ };
+
+ } // namespace Vector
+
+ // The following functions create the actual matcher objects.
+ // This allows the types to be inferred
+
+ template<typename T, typename AllocComp = std::allocator<T>, typename AllocMatch = AllocComp>
+ Vector::ContainsMatcher<T, AllocComp, AllocMatch> Contains( std::vector<T, AllocComp> const& comparator ) {
+ return Vector::ContainsMatcher<T, AllocComp, AllocMatch>( comparator );
+ }
+
+ template<typename T, typename Alloc = std::allocator<T>>
+ Vector::ContainsElementMatcher<T, Alloc> VectorContains( T const& comparator ) {
+ return Vector::ContainsElementMatcher<T, Alloc>( comparator );
+ }
+
+ template<typename T, typename AllocComp = std::allocator<T>, typename AllocMatch = AllocComp>
+ Vector::EqualsMatcher<T, AllocComp, AllocMatch> Equals( std::vector<T, AllocComp> const& comparator ) {
+ return Vector::EqualsMatcher<T, AllocComp, AllocMatch>( comparator );
+ }
+
+ template<typename T, typename AllocComp = std::allocator<T>, typename AllocMatch = AllocComp>
+ Vector::ApproxMatcher<T, AllocComp, AllocMatch> Approx( std::vector<T, AllocComp> const& comparator ) {
+ return Vector::ApproxMatcher<T, AllocComp, AllocMatch>( comparator );
+ }
+
+ template<typename T, typename AllocComp = std::allocator<T>, typename AllocMatch = AllocComp>
+ Vector::UnorderedEqualsMatcher<T, AllocComp, AllocMatch> UnorderedEquals(std::vector<T, AllocComp> const& target) {
+ return Vector::UnorderedEqualsMatcher<T, AllocComp, AllocMatch>( target );
+ }
+
+} // namespace Matchers
+} // namespace Catch
+
+// end catch_matchers_vector.h
+namespace Catch {
+
+ template<typename ArgT, typename MatcherT>
+ class MatchExpr : public ITransientExpression {
+ ArgT const& m_arg;
+ MatcherT m_matcher;
+ StringRef m_matcherString;
+ public:
+ MatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef const& matcherString )
+ : ITransientExpression{ true, matcher.match( arg ) },
+ m_arg( arg ),
+ m_matcher( matcher ),
+ m_matcherString( matcherString )
+ {}
+
+ void streamReconstructedExpression( std::ostream &os ) const override {
+ auto matcherAsString = m_matcher.toString();
+ os << Catch::Detail::stringify( m_arg ) << ' ';
+ if( matcherAsString == Detail::unprintableString )
+ os << m_matcherString;
+ else
+ os << matcherAsString;
+ }
+ };
+
+ using StringMatcher = Matchers::Impl::MatcherBase<std::string>;
+
+ void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef const& matcherString );
+
+ template<typename ArgT, typename MatcherT>
+ auto makeMatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef const& matcherString ) -> MatchExpr<ArgT, MatcherT> {
+ return MatchExpr<ArgT, MatcherT>( arg, matcher, matcherString );
+ }
+
+} // namespace Catch
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CHECK_THAT( macroName, matcher, resultDisposition, arg ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(arg) ", " CATCH_INTERNAL_STRINGIFY(matcher), resultDisposition ); \
+ INTERNAL_CATCH_TRY { \
+ catchAssertionHandler.handleExpr( Catch::makeMatchExpr( arg, matcher, #matcher##_catch_sr ) ); \
+ } INTERNAL_CATCH_CATCH( catchAssertionHandler ) \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_THROWS_MATCHES( macroName, exceptionType, resultDisposition, matcher, ... ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__) ", " CATCH_INTERNAL_STRINGIFY(exceptionType) ", " CATCH_INTERNAL_STRINGIFY(matcher), resultDisposition ); \
+ if( catchAssertionHandler.allowThrows() ) \
+ try { \
+ static_cast<void>(__VA_ARGS__ ); \
+ catchAssertionHandler.handleUnexpectedExceptionNotThrown(); \
+ } \
+ catch( exceptionType const& ex ) { \
+ catchAssertionHandler.handleExpr( Catch::makeMatchExpr( ex, matcher, #matcher##_catch_sr ) ); \
+ } \
+ catch( ... ) { \
+ catchAssertionHandler.handleUnexpectedInflightException(); \
+ } \
+ else \
+ catchAssertionHandler.handleThrowingCallSkipped(); \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+// end catch_capture_matchers.h
+#endif
+// start catch_generators.hpp
+
+// start catch_interfaces_generatortracker.h
+
+
+#include <memory>
+
+namespace Catch {
+
+ namespace Generators {
+ class GeneratorUntypedBase {
+ public:
+ GeneratorUntypedBase() = default;
+ virtual ~GeneratorUntypedBase();
+ // Attempts to move the generator to the next element
+ //
+ // Returns true iff the move succeeded (and a valid element
+ // can be retrieved).
+ virtual bool next() = 0;
+ };
+ using GeneratorBasePtr = std::unique_ptr<GeneratorUntypedBase>;
+
+ } // namespace Generators
+
+ struct IGeneratorTracker {
+ virtual ~IGeneratorTracker();
+ virtual auto hasGenerator() const -> bool = 0;
+ virtual auto getGenerator() const -> Generators::GeneratorBasePtr const& = 0;
+ virtual void setGenerator( Generators::GeneratorBasePtr&& generator ) = 0;
+ };
+
+} // namespace Catch
+
+// end catch_interfaces_generatortracker.h
+// start catch_enforce.h
+
+#include <exception>
+
+namespace Catch {
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ template <typename Ex>
+ [[noreturn]]
+ void throw_exception(Ex const& e) {
+ throw e;
+ }
+#else // ^^ Exceptions are enabled // Exceptions are disabled vv
+ [[noreturn]]
+ void throw_exception(std::exception const& e);
+#endif
+
+ [[noreturn]]
+ void throw_logic_error(std::string const& msg);
+ [[noreturn]]
+ void throw_domain_error(std::string const& msg);
+ [[noreturn]]
+ void throw_runtime_error(std::string const& msg);
+
+} // namespace Catch;
+
+#define CATCH_MAKE_MSG(...) \
+ (Catch::ReusableStringStream() << __VA_ARGS__).str()
+
+#define CATCH_INTERNAL_ERROR(...) \
+ Catch::throw_logic_error(CATCH_MAKE_MSG( CATCH_INTERNAL_LINEINFO << ": Internal Catch2 error: " << __VA_ARGS__))
+
+#define CATCH_ERROR(...) \
+ Catch::throw_domain_error(CATCH_MAKE_MSG( __VA_ARGS__ ))
+
+#define CATCH_RUNTIME_ERROR(...) \
+ Catch::throw_runtime_error(CATCH_MAKE_MSG( __VA_ARGS__ ))
+
+#define CATCH_ENFORCE( condition, ... ) \
+ do{ if( !(condition) ) CATCH_ERROR( __VA_ARGS__ ); } while(false)
+
+// end catch_enforce.h
+#include <memory>
+#include <vector>
+#include <cassert>
+
+#include <utility>
+#include <exception>
+
+namespace Catch {
+
+class GeneratorException : public std::exception {
+ const char* const m_msg = "";
+
+public:
+ GeneratorException(const char* msg):
+ m_msg(msg)
+ {}
+
+ const char* what() const noexcept override final;
+};
+
+namespace Generators {
+
+ // !TBD move this into its own location?
+ namespace pf{
+ template<typename T, typename... Args>
+ std::unique_ptr<T> make_unique( Args&&... args ) {
+ return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
+ }
+ }
+
+ template<typename T>
+ struct IGenerator : GeneratorUntypedBase {
+ virtual ~IGenerator() = default;
+
+ // Returns the current element of the generator
+ //
+ // \Precondition The generator is either freshly constructed,
+ // or the last call to `next()` returned true
+ virtual T const& get() const = 0;
+ using type = T;
+ };
+
+ template<typename T>
+ class SingleValueGenerator final : public IGenerator<T> {
+ T m_value;
+ public:
+ SingleValueGenerator(T&& value) : m_value(std::move(value)) {}
+
+ T const& get() const override {
+ return m_value;
+ }
+ bool next() override {
+ return false;
+ }
+ };
+
+ template<typename T>
+ class FixedValuesGenerator final : public IGenerator<T> {
+ static_assert(!std::is_same<T, bool>::value,
+ "FixedValuesGenerator does not support bools because of std::vector<bool>"
+ "specialization, use SingleValue Generator instead.");
+ std::vector<T> m_values;
+ size_t m_idx = 0;
+ public:
+ FixedValuesGenerator( std::initializer_list<T> values ) : m_values( values ) {}
+
+ T const& get() const override {
+ return m_values[m_idx];
+ }
+ bool next() override {
+ ++m_idx;
+ return m_idx < m_values.size();
+ }
+ };
+
+ template <typename T>
+ class GeneratorWrapper final {
+ std::unique_ptr<IGenerator<T>> m_generator;
+ public:
+ GeneratorWrapper(std::unique_ptr<IGenerator<T>> generator):
+ m_generator(std::move(generator))
+ {}
+ T const& get() const {
+ return m_generator->get();
+ }
+ bool next() {
+ return m_generator->next();
+ }
+ };
+
+ template <typename T>
+ GeneratorWrapper<T> value(T&& value) {
+ return GeneratorWrapper<T>(pf::make_unique<SingleValueGenerator<T>>(std::forward<T>(value)));
+ }
+ template <typename T>
+ GeneratorWrapper<T> values(std::initializer_list<T> values) {
+ return GeneratorWrapper<T>(pf::make_unique<FixedValuesGenerator<T>>(values));
+ }
+
+ template<typename T>
+ class Generators : public IGenerator<T> {
+ std::vector<GeneratorWrapper<T>> m_generators;
+ size_t m_current = 0;
+
+ void populate(GeneratorWrapper<T>&& generator) {
+ m_generators.emplace_back(std::move(generator));
+ }
+ void populate(T&& val) {
+ m_generators.emplace_back(value(std::forward<T>(val)));
+ }
+ template<typename U>
+ void populate(U&& val) {
+ populate(T(std::forward<U>(val)));
+ }
+ template<typename U, typename... Gs>
+ void populate(U&& valueOrGenerator, Gs &&... moreGenerators) {
+ populate(std::forward<U>(valueOrGenerator));
+ populate(std::forward<Gs>(moreGenerators)...);
+ }
+
+ public:
+ template <typename... Gs>
+ Generators(Gs &&... moreGenerators) {
+ m_generators.reserve(sizeof...(Gs));
+ populate(std::forward<Gs>(moreGenerators)...);
+ }
+
+ T const& get() const override {
+ return m_generators[m_current].get();
+ }
+
+ bool next() override {
+ if (m_current >= m_generators.size()) {
+ return false;
+ }
+ const bool current_status = m_generators[m_current].next();
+ if (!current_status) {
+ ++m_current;
+ }
+ return m_current < m_generators.size();
+ }
+ };
+
+ template<typename... Ts>
+ GeneratorWrapper<std::tuple<Ts...>> table( std::initializer_list<std::tuple<typename std::decay<Ts>::type...>> tuples ) {
+ return values<std::tuple<Ts...>>( tuples );
+ }
+
+ // Tag type to signal that a generator sequence should convert arguments to a specific type
+ template <typename T>
+ struct as {};
+
+ template<typename T, typename... Gs>
+ auto makeGenerators( GeneratorWrapper<T>&& generator, Gs &&... moreGenerators ) -> Generators<T> {
+ return Generators<T>(std::move(generator), std::forward<Gs>(moreGenerators)...);
+ }
+ template<typename T>
+ auto makeGenerators( GeneratorWrapper<T>&& generator ) -> Generators<T> {
+ return Generators<T>(std::move(generator));
+ }
+ template<typename T, typename... Gs>
+ auto makeGenerators( T&& val, Gs &&... moreGenerators ) -> Generators<T> {
+ return makeGenerators( value( std::forward<T>( val ) ), std::forward<Gs>( moreGenerators )... );
+ }
+ template<typename T, typename U, typename... Gs>
+ auto makeGenerators( as<T>, U&& val, Gs &&... moreGenerators ) -> Generators<T> {
+ return makeGenerators( value( T( std::forward<U>( val ) ) ), std::forward<Gs>( moreGenerators )... );
+ }
+
+ auto acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IGeneratorTracker&;
+
+ template<typename L>
+ // Note: The type after -> is weird, because VS2015 cannot parse
+ // the expression used in the typedef inside, when it is in
+ // return type. Yeah.
+ auto generate( SourceLineInfo const& lineInfo, L const& generatorExpression ) -> decltype(std::declval<decltype(generatorExpression())>().get()) {
+ using UnderlyingType = typename decltype(generatorExpression())::type;
+
+ IGeneratorTracker& tracker = acquireGeneratorTracker( lineInfo );
+ if (!tracker.hasGenerator()) {
+ tracker.setGenerator(pf::make_unique<Generators<UnderlyingType>>(generatorExpression()));
+ }
+
+ auto const& generator = static_cast<IGenerator<UnderlyingType> const&>( *tracker.getGenerator() );
+ return generator.get();
+ }
+
+} // namespace Generators
+} // namespace Catch
+
+#define GENERATE( ... ) \
+ Catch::Generators::generate( CATCH_INTERNAL_LINEINFO, [ ]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace)
+#define GENERATE_COPY( ... ) \
+ Catch::Generators::generate( CATCH_INTERNAL_LINEINFO, [=]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace)
+#define GENERATE_REF( ... ) \
+ Catch::Generators::generate( CATCH_INTERNAL_LINEINFO, [&]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace)
+
+// end catch_generators.hpp
+// start catch_generators_generic.hpp
+
+namespace Catch {
+namespace Generators {
+
+ template <typename T>
+ class TakeGenerator : public IGenerator<T> {
+ GeneratorWrapper<T> m_generator;
+ size_t m_returned = 0;
+ size_t m_target;
+ public:
+ TakeGenerator(size_t target, GeneratorWrapper<T>&& generator):
+ m_generator(std::move(generator)),
+ m_target(target)
+ {
+ assert(target != 0 && "Empty generators are not allowed");
+ }
+ T const& get() const override {
+ return m_generator.get();
+ }
+ bool next() override {
+ ++m_returned;
+ if (m_returned >= m_target) {
+ return false;
+ }
+
+ const auto success = m_generator.next();
+ // If the underlying generator does not contain enough values
+ // then we cut short as well
+ if (!success) {
+ m_returned = m_target;
+ }
+ return success;
+ }
+ };
+
+ template <typename T>
+ GeneratorWrapper<T> take(size_t target, GeneratorWrapper<T>&& generator) {
+ return GeneratorWrapper<T>(pf::make_unique<TakeGenerator<T>>(target, std::move(generator)));
+ }
+
+ template <typename T, typename Predicate>
+ class FilterGenerator : public IGenerator<T> {
+ GeneratorWrapper<T> m_generator;
+ Predicate m_predicate;
+ public:
+ template <typename P = Predicate>
+ FilterGenerator(P&& pred, GeneratorWrapper<T>&& generator):
+ m_generator(std::move(generator)),
+ m_predicate(std::forward<P>(pred))
+ {
+ if (!m_predicate(m_generator.get())) {
+ // It might happen that there are no values that pass the
+ // filter. In that case we throw an exception.
+ auto has_initial_value = next();
+ if (!has_initial_value) {
+ Catch::throw_exception(GeneratorException("No valid value found in filtered generator"));
+ }
+ }
+ }
+
+ T const& get() const override {
+ return m_generator.get();
+ }
+
+ bool next() override {
+ bool success = m_generator.next();
+ if (!success) {
+ return false;
+ }
+ while (!m_predicate(m_generator.get()) && (success = m_generator.next()) == true);
+ return success;
+ }
+ };
+
+ template <typename T, typename Predicate>
+ GeneratorWrapper<T> filter(Predicate&& pred, GeneratorWrapper<T>&& generator) {
+ return GeneratorWrapper<T>(std::unique_ptr<IGenerator<T>>(pf::make_unique<FilterGenerator<T, Predicate>>(std::forward<Predicate>(pred), std::move(generator))));
+ }
+
+ template <typename T>
+ class RepeatGenerator : public IGenerator<T> {
+ static_assert(!std::is_same<T, bool>::value,
+ "RepeatGenerator currently does not support bools"
+ "because of std::vector<bool> specialization");
+ GeneratorWrapper<T> m_generator;
+ mutable std::vector<T> m_returned;
+ size_t m_target_repeats;
+ size_t m_current_repeat = 0;
+ size_t m_repeat_index = 0;
+ public:
+ RepeatGenerator(size_t repeats, GeneratorWrapper<T>&& generator):
+ m_generator(std::move(generator)),
+ m_target_repeats(repeats)
+ {
+ assert(m_target_repeats > 0 && "Repeat generator must repeat at least once");
+ }
+
+ T const& get() const override {
+ if (m_current_repeat == 0) {
+ m_returned.push_back(m_generator.get());
+ return m_returned.back();
+ }
+ return m_returned[m_repeat_index];
+ }
+
+ bool next() override {
+ // There are 2 basic cases:
+ // 1) We are still reading the generator
+ // 2) We are reading our own cache
+
+ // In the first case, we need to poke the underlying generator.
+ // If it happily moves, we are left in that state, otherwise it is time to start reading from our cache
+ if (m_current_repeat == 0) {
+ const auto success = m_generator.next();
+ if (!success) {
+ ++m_current_repeat;
+ }
+ return m_current_repeat < m_target_repeats;
+ }
+
+ // In the second case, we need to move indices forward and check that we haven't run up against the end
+ ++m_repeat_index;
+ if (m_repeat_index == m_returned.size()) {
+ m_repeat_index = 0;
+ ++m_current_repeat;
+ }
+ return m_current_repeat < m_target_repeats;
+ }
+ };
+
+ template <typename T>
+ GeneratorWrapper<T> repeat(size_t repeats, GeneratorWrapper<T>&& generator) {
+ return GeneratorWrapper<T>(pf::make_unique<RepeatGenerator<T>>(repeats, std::move(generator)));
+ }
+
+ template <typename T, typename U, typename Func>
+ class MapGenerator : public IGenerator<T> {
+ // TBD: provide static assert for mapping function, for friendly error message
+ GeneratorWrapper<U> m_generator;
+ Func m_function;
+ // To avoid returning dangling reference, we have to save the values
+ T m_cache;
+ public:
+ template <typename F2 = Func>
+ MapGenerator(F2&& function, GeneratorWrapper<U>&& generator) :
+ m_generator(std::move(generator)),
+ m_function(std::forward<F2>(function)),
+ m_cache(m_function(m_generator.get()))
+ {}
+
+ T const& get() const override {
+ return m_cache;
+ }
+ bool next() override {
+ const auto success = m_generator.next();
+ if (success) {
+ m_cache = m_function(m_generator.get());
+ }
+ return success;
+ }
+ };
+
+ template <typename Func, typename U, typename T = FunctionReturnType<Func, U>>
+ GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<U>&& generator) {
+ return GeneratorWrapper<T>(
+ pf::make_unique<MapGenerator<T, U, Func>>(std::forward<Func>(function), std::move(generator))
+ );
+ }
+
+ template <typename T, typename U, typename Func>
+ GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<U>&& generator) {
+ return GeneratorWrapper<T>(
+ pf::make_unique<MapGenerator<T, U, Func>>(std::forward<Func>(function), std::move(generator))
+ );
+ }
+
+ template <typename T>
+ class ChunkGenerator final : public IGenerator<std::vector<T>> {
+ std::vector<T> m_chunk;
+ size_t m_chunk_size;
+ GeneratorWrapper<T> m_generator;
+ bool m_used_up = false;
+ public:
+ ChunkGenerator(size_t size, GeneratorWrapper<T> generator) :
+ m_chunk_size(size), m_generator(std::move(generator))
+ {
+ m_chunk.reserve(m_chunk_size);
+ if (m_chunk_size != 0) {
+ m_chunk.push_back(m_generator.get());
+ for (size_t i = 1; i < m_chunk_size; ++i) {
+ if (!m_generator.next()) {
+ Catch::throw_exception(GeneratorException("Not enough values to initialize the first chunk"));
+ }
+ m_chunk.push_back(m_generator.get());
+ }
+ }
+ }
+ std::vector<T> const& get() const override {
+ return m_chunk;
+ }
+ bool next() override {
+ m_chunk.clear();
+ for (size_t idx = 0; idx < m_chunk_size; ++idx) {
+ if (!m_generator.next()) {
+ return false;
+ }
+ m_chunk.push_back(m_generator.get());
+ }
+ return true;
+ }
+ };
+
+ template <typename T>
+ GeneratorWrapper<std::vector<T>> chunk(size_t size, GeneratorWrapper<T>&& generator) {
+ return GeneratorWrapper<std::vector<T>>(
+ pf::make_unique<ChunkGenerator<T>>(size, std::move(generator))
+ );
+ }
+
+} // namespace Generators
+} // namespace Catch
+
+// end catch_generators_generic.hpp
+// start catch_generators_specific.hpp
+
+// start catch_context.h
+
+#include <memory>
+
+namespace Catch {
+
+ struct IResultCapture;
+ struct IRunner;
+ struct IConfig;
+ struct IMutableContext;
+
+ using IConfigPtr = std::shared_ptr<IConfig const>;
+
+ struct IContext
+ {
+ virtual ~IContext();
+
+ virtual IResultCapture* getResultCapture() = 0;
+ virtual IRunner* getRunner() = 0;
+ virtual IConfigPtr const& getConfig() const = 0;
+ };
+
+ struct IMutableContext : IContext
+ {
+ virtual ~IMutableContext();
+ virtual void setResultCapture( IResultCapture* resultCapture ) = 0;
+ virtual void setRunner( IRunner* runner ) = 0;
+ virtual void setConfig( IConfigPtr const& config ) = 0;
+
+ private:
+ static IMutableContext *currentContext;
+ friend IMutableContext& getCurrentMutableContext();
+ friend void cleanUpContext();
+ static void createContext();
+ };
+
+ inline IMutableContext& getCurrentMutableContext()
+ {
+ if( !IMutableContext::currentContext )
+ IMutableContext::createContext();
+ // NOLINTNEXTLINE(clang-analyzer-core.uninitialized.UndefReturn)
+ return *IMutableContext::currentContext;
+ }
+
+ inline IContext& getCurrentContext()
+ {
+ return getCurrentMutableContext();
+ }
+
+ void cleanUpContext();
+
+ class SimplePcg32;
+ SimplePcg32& rng();
+}
+
+// end catch_context.h
+// start catch_interfaces_config.h
+
+// start catch_option.hpp
+
+namespace Catch {
+
+ // An optional type
+ template<typename T>
+ class Option {
+ public:
+ Option() : nullableValue( nullptr ) {}
+ Option( T const& _value )
+ : nullableValue( new( storage ) T( _value ) )
+ {}
+ Option( Option const& _other )
+ : nullableValue( _other ? new( storage ) T( *_other ) : nullptr )
+ {}
+
+ ~Option() {
+ reset();
+ }
+
+ Option& operator= ( Option const& _other ) {
+ if( &_other != this ) {
+ reset();
+ if( _other )
+ nullableValue = new( storage ) T( *_other );
+ }
+ return *this;
+ }
+ Option& operator = ( T const& _value ) {
+ reset();
+ nullableValue = new( storage ) T( _value );
+ return *this;
+ }
+
+ void reset() {
+ if( nullableValue )
+ nullableValue->~T();
+ nullableValue = nullptr;
+ }
+
+ T& operator*() { return *nullableValue; }
+ T const& operator*() const { return *nullableValue; }
+ T* operator->() { return nullableValue; }
+ const T* operator->() const { return nullableValue; }
+
+ T valueOr( T const& defaultValue ) const {
+ return nullableValue ? *nullableValue : defaultValue;
+ }
+
+ bool some() const { return nullableValue != nullptr; }
+ bool none() const { return nullableValue == nullptr; }
+
+ bool operator !() const { return nullableValue == nullptr; }
+ explicit operator bool() const {
+ return some();
+ }
+
+ private:
+ T *nullableValue;
+ alignas(alignof(T)) char storage[sizeof(T)];
+ };
+
+} // end namespace Catch
+
+// end catch_option.hpp
+#include <chrono>
+#include <iosfwd>
+#include <string>
+#include <vector>
+#include <memory>
+
+namespace Catch {
+
+ enum class Verbosity {
+ Quiet = 0,
+ Normal,
+ High
+ };
+
+ struct WarnAbout { enum What {
+ Nothing = 0x00,
+ NoAssertions = 0x01,
+ NoTests = 0x02
+ }; };
+
+ struct ShowDurations { enum OrNot {
+ DefaultForReporter,
+ Always,
+ Never
+ }; };
+ struct RunTests { enum InWhatOrder {
+ InDeclarationOrder,
+ InLexicographicalOrder,
+ InRandomOrder
+ }; };
+ struct UseColour { enum YesOrNo {
+ Auto,
+ Yes,
+ No
+ }; };
+ struct WaitForKeypress { enum When {
+ Never,
+ BeforeStart = 1,
+ BeforeExit = 2,
+ BeforeStartAndExit = BeforeStart | BeforeExit
+ }; };
+
+ class TestSpec;
+
+ struct IConfig : NonCopyable {
+
+ virtual ~IConfig();
+
+ virtual bool allowThrows() const = 0;
+ virtual std::ostream& stream() const = 0;
+ virtual std::string name() const = 0;
+ virtual bool includeSuccessfulResults() const = 0;
+ virtual bool shouldDebugBreak() const = 0;
+ virtual bool warnAboutMissingAssertions() const = 0;
+ virtual bool warnAboutNoTests() const = 0;
+ virtual int abortAfter() const = 0;
+ virtual bool showInvisibles() const = 0;
+ virtual ShowDurations::OrNot showDurations() const = 0;
+ virtual TestSpec const& testSpec() const = 0;
+ virtual bool hasTestFilters() const = 0;
+ virtual std::vector<std::string> const& getTestsOrTags() const = 0;
+ virtual RunTests::InWhatOrder runOrder() const = 0;
+ virtual unsigned int rngSeed() const = 0;
+ virtual UseColour::YesOrNo useColour() const = 0;
+ virtual std::vector<std::string> const& getSectionsToRun() const = 0;
+ virtual Verbosity verbosity() const = 0;
+
+ virtual bool benchmarkNoAnalysis() const = 0;
+ virtual int benchmarkSamples() const = 0;
+ virtual double benchmarkConfidenceInterval() const = 0;
+ virtual unsigned int benchmarkResamples() const = 0;
+ virtual std::chrono::milliseconds benchmarkWarmupTime() const = 0;
+ };
+
+ using IConfigPtr = std::shared_ptr<IConfig const>;
+}
+
+// end catch_interfaces_config.h
+// start catch_random_number_generator.h
+
+#include <cstdint>
+
+namespace Catch {
+
+ // This is a simple implementation of C++11 Uniform Random Number
+ // Generator. It does not provide all operators, because Catch2
+ // does not use it, but it should behave as expected inside stdlib's
+ // distributions.
+ // The implementation is based on the PCG family (http://pcg-random.org)
+ class SimplePcg32 {
+ using state_type = std::uint64_t;
+ public:
+ using result_type = std::uint32_t;
+ static constexpr result_type (min)() {
+ return 0;
+ }
+ static constexpr result_type (max)() {
+ return static_cast<result_type>(-1);
+ }
+
+ // Provide some default initial state for the default constructor
+ SimplePcg32():SimplePcg32(0xed743cc4U) {}
+
+ explicit SimplePcg32(result_type seed_);
+
+ void seed(result_type seed_);
+ void discard(uint64_t skip);
+
+ result_type operator()();
+
+ private:
+ friend bool operator==(SimplePcg32 const& lhs, SimplePcg32 const& rhs);
+ friend bool operator!=(SimplePcg32 const& lhs, SimplePcg32 const& rhs);
+
+ // In theory we also need operator<< and operator>>
+ // In practice we do not use them, so we will skip them for now
+
+ std::uint64_t m_state;
+ // This part of the state determines which "stream" of the numbers
+ // is chosen -- we take it as a constant for Catch2, so we only
+ // need to deal with seeding the main state.
+ // Picked by reading 8 bytes from `/dev/random` :-)
+ static const std::uint64_t s_inc = (0x13ed0cc53f939476ULL << 1ULL) | 1ULL;
+ };
+
+} // end namespace Catch
+
+// end catch_random_number_generator.h
+#include <random>
+
+namespace Catch {
+namespace Generators {
+
+template <typename Float>
+class RandomFloatingGenerator final : public IGenerator<Float> {
+ Catch::SimplePcg32& m_rng;
+ std::uniform_real_distribution<Float> m_dist;
+ Float m_current_number;
+public:
+
+ RandomFloatingGenerator(Float a, Float b):
+ m_rng(rng()),
+ m_dist(a, b) {
+ static_cast<void>(next());
+ }
+
+ Float const& get() const override {
+ return m_current_number;
+ }
+ bool next() override {
+ m_current_number = m_dist(m_rng);
+ return true;
+ }
+};
+
+template <typename Integer>
+class RandomIntegerGenerator final : public IGenerator<Integer> {
+ Catch::SimplePcg32& m_rng;
+ std::uniform_int_distribution<Integer> m_dist;
+ Integer m_current_number;
+public:
+
+ RandomIntegerGenerator(Integer a, Integer b):
+ m_rng(rng()),
+ m_dist(a, b) {
+ static_cast<void>(next());
+ }
+
+ Integer const& get() const override {
+ return m_current_number;
+ }
+ bool next() override {
+ m_current_number = m_dist(m_rng);
+ return true;
+ }
+};
+
+// TODO: Ideally this would be also constrained against the various char types,
+// but I don't expect users to run into that in practice.
+template <typename T>
+typename std::enable_if<std::is_integral<T>::value && !std::is_same<T, bool>::value,
+GeneratorWrapper<T>>::type
+random(T a, T b) {
+ return GeneratorWrapper<T>(
+ pf::make_unique<RandomIntegerGenerator<T>>(a, b)
+ );
+}
+
+template <typename T>
+typename std::enable_if<std::is_floating_point<T>::value,
+GeneratorWrapper<T>>::type
+random(T a, T b) {
+ return GeneratorWrapper<T>(
+ pf::make_unique<RandomFloatingGenerator<T>>(a, b)
+ );
+}
+
+template <typename T>
+class RangeGenerator final : public IGenerator<T> {
+ T m_current;
+ T m_end;
+ T m_step;
+ bool m_positive;
+
+public:
+ RangeGenerator(T const& start, T const& end, T const& step):
+ m_current(start),
+ m_end(end),
+ m_step(step),
+ m_positive(m_step > T(0))
+ {
+ assert(m_current != m_end && "Range start and end cannot be equal");
+ assert(m_step != T(0) && "Step size cannot be zero");
+ assert(((m_positive && m_current <= m_end) || (!m_positive && m_current >= m_end)) && "Step moves away from end");
+ }
+
+ RangeGenerator(T const& start, T const& end):
+ RangeGenerator(start, end, (start < end) ? T(1) : T(-1))
+ {}
+
+ T const& get() const override {
+ return m_current;
+ }
+
+ bool next() override {
+ m_current += m_step;
+ return (m_positive) ? (m_current < m_end) : (m_current > m_end);
+ }
+};
+
+template <typename T>
+GeneratorWrapper<T> range(T const& start, T const& end, T const& step) {
+ static_assert(std::is_arithmetic<T>::value && !std::is_same<T, bool>::value, "Type must be numeric");
+ return GeneratorWrapper<T>(pf::make_unique<RangeGenerator<T>>(start, end, step));
+}
+
+template <typename T>
+GeneratorWrapper<T> range(T const& start, T const& end) {
+ static_assert(std::is_integral<T>::value && !std::is_same<T, bool>::value, "Type must be an integer");
+ return GeneratorWrapper<T>(pf::make_unique<RangeGenerator<T>>(start, end));
+}
+
+template <typename T>
+class IteratorGenerator final : public IGenerator<T> {
+ static_assert(!std::is_same<T, bool>::value,
+ "IteratorGenerator currently does not support bools"
+ "because of std::vector<bool> specialization");
+
+ std::vector<T> m_elems;
+ size_t m_current = 0;
+public:
+ template <typename InputIterator, typename InputSentinel>
+ IteratorGenerator(InputIterator first, InputSentinel last):m_elems(first, last) {
+ if (m_elems.empty()) {
+ Catch::throw_exception(GeneratorException("IteratorGenerator received no valid values"));
+ }
+ }
+
+ T const& get() const override {
+ return m_elems[m_current];
+ }
+
+ bool next() override {
+ ++m_current;
+ return m_current != m_elems.size();
+ }
+};
+
+template <typename InputIterator,
+ typename InputSentinel,
+ typename ResultType = typename std::iterator_traits<InputIterator>::value_type>
+GeneratorWrapper<ResultType> from_range(InputIterator from, InputSentinel to) {
+ return GeneratorWrapper<ResultType>(pf::make_unique<IteratorGenerator<ResultType>>(from, to));
+}
+
+template <typename Container,
+ typename ResultType = typename Container::value_type>
+GeneratorWrapper<ResultType> from_range(Container const& cnt) {
+ return GeneratorWrapper<ResultType>(pf::make_unique<IteratorGenerator<ResultType>>(cnt.begin(), cnt.end()));
+}
+
+} // namespace Generators
+} // namespace Catch
+
+// end catch_generators_specific.hpp
+
+// These files are included here so the single_include script doesn't put them
+// in the conditionally compiled sections
+// start catch_test_case_info.h
+
+#include <string>
+#include <vector>
+#include <memory>
+
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wpadded"
+#endif
+
+namespace Catch {
+
+ struct ITestInvoker;
+
+ struct TestCaseInfo {
+ enum SpecialProperties{
+ None = 0,
+ IsHidden = 1 << 1,
+ ShouldFail = 1 << 2,
+ MayFail = 1 << 3,
+ Throws = 1 << 4,
+ NonPortable = 1 << 5,
+ Benchmark = 1 << 6
+ };
+
+ TestCaseInfo( std::string const& _name,
+ std::string const& _className,
+ std::string const& _description,
+ std::vector<std::string> const& _tags,
+ SourceLineInfo const& _lineInfo );
+
+ friend void setTags( TestCaseInfo& testCaseInfo, std::vector<std::string> tags );
+
+ bool isHidden() const;
+ bool throws() const;
+ bool okToFail() const;
+ bool expectedToFail() const;
+
+ std::string tagsAsString() const;
+
+ std::string name;
+ std::string className;
+ std::string description;
+ std::vector<std::string> tags;
+ std::vector<std::string> lcaseTags;
+ SourceLineInfo lineInfo;
+ SpecialProperties properties;
+ };
+
+ class TestCase : public TestCaseInfo {
+ public:
+
+ TestCase( ITestInvoker* testCase, TestCaseInfo&& info );
+
+ TestCase withName( std::string const& _newName ) const;
+
+ void invoke() const;
+
+ TestCaseInfo const& getTestCaseInfo() const;
+
+ bool operator == ( TestCase const& other ) const;
+ bool operator < ( TestCase const& other ) const;
+
+ private:
+ std::shared_ptr<ITestInvoker> test;
+ };
+
+ TestCase makeTestCase( ITestInvoker* testCase,
+ std::string const& className,
+ NameAndTags const& nameAndTags,
+ SourceLineInfo const& lineInfo );
+}
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+// end catch_test_case_info.h
+// start catch_interfaces_runner.h
+
+namespace Catch {
+
+ struct IRunner {
+ virtual ~IRunner();
+ virtual bool aborting() const = 0;
+ };
+}
+
+// end catch_interfaces_runner.h
+
+#ifdef __OBJC__
+// start catch_objc.hpp
+
+#import <objc/runtime.h>
+
+#include <string>
+
+// NB. Any general catch headers included here must be included
+// in catch.hpp first to make sure they are included by the single
+// header for non obj-usage
+
+///////////////////////////////////////////////////////////////////////////////
+// This protocol is really only here for (self) documenting purposes, since
+// all its methods are optional.
+@protocol OcFixture
+
+@optional
+
+-(void) setUp;
+-(void) tearDown;
+
+@end
+
+namespace Catch {
+
+ class OcMethod : public ITestInvoker {
+
+ public:
+ OcMethod( Class cls, SEL sel ) : m_cls( cls ), m_sel( sel ) {}
+
+ virtual void invoke() const {
+ id obj = [[m_cls alloc] init];
+
+ performOptionalSelector( obj, @selector(setUp) );
+ performOptionalSelector( obj, m_sel );
+ performOptionalSelector( obj, @selector(tearDown) );
+
+ arcSafeRelease( obj );
+ }
+ private:
+ virtual ~OcMethod() {}
+
+ Class m_cls;
+ SEL m_sel;
+ };
+
+ namespace Detail{
+
+ inline std::string getAnnotation( Class cls,
+ std::string const& annotationName,
+ std::string const& testCaseName ) {
+ NSString* selStr = [[NSString alloc] initWithFormat:@"Catch_%s_%s", annotationName.c_str(), testCaseName.c_str()];
+ SEL sel = NSSelectorFromString( selStr );
+ arcSafeRelease( selStr );
+ id value = performOptionalSelector( cls, sel );
+ if( value )
+ return [(NSString*)value UTF8String];
+ return "";
+ }
+ }
+
+ inline std::size_t registerTestMethods() {
+ std::size_t noTestMethods = 0;
+ int noClasses = objc_getClassList( nullptr, 0 );
+
+ Class* classes = (CATCH_UNSAFE_UNRETAINED Class *)malloc( sizeof(Class) * noClasses);
+ objc_getClassList( classes, noClasses );
+
+ for( int c = 0; c < noClasses; c++ ) {
+ Class cls = classes[c];
+ {
+ u_int count;
+ Method* methods = class_copyMethodList( cls, &count );
+ for( u_int m = 0; m < count ; m++ ) {
+ SEL selector = method_getName(methods[m]);
+ std::string methodName = sel_getName(selector);
+ if( startsWith( methodName, "Catch_TestCase_" ) ) {
+ std::string testCaseName = methodName.substr( 15 );
+ std::string name = Detail::getAnnotation( cls, "Name", testCaseName );
+ std::string desc = Detail::getAnnotation( cls, "Description", testCaseName );
+ const char* className = class_getName( cls );
+
+ getMutableRegistryHub().registerTest( makeTestCase( new OcMethod( cls, selector ), className, NameAndTags( name.c_str(), desc.c_str() ), SourceLineInfo("",0) ) );
+ noTestMethods++;
+ }
+ }
+ free(methods);
+ }
+ }
+ return noTestMethods;
+ }
+
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+
+ namespace Matchers {
+ namespace Impl {
+ namespace NSStringMatchers {
+
+ struct StringHolder : MatcherBase<NSString*>{
+ StringHolder( NSString* substr ) : m_substr( [substr copy] ){}
+ StringHolder( StringHolder const& other ) : m_substr( [other.m_substr copy] ){}
+ StringHolder() {
+ arcSafeRelease( m_substr );
+ }
+
+ bool match( NSString* str ) const override {
+ return false;
+ }
+
+ NSString* CATCH_ARC_STRONG m_substr;
+ };
+
+ struct Equals : StringHolder {
+ Equals( NSString* substr ) : StringHolder( substr ){}
+
+ bool match( NSString* str ) const override {
+ return (str != nil || m_substr == nil ) &&
+ [str isEqualToString:m_substr];
+ }
+
+ std::string describe() const override {
+ return "equals string: " + Catch::Detail::stringify( m_substr );
+ }
+ };
+
+ struct Contains : StringHolder {
+ Contains( NSString* substr ) : StringHolder( substr ){}
+
+ bool match( NSString* str ) const override {
+ return (str != nil || m_substr == nil ) &&
+ [str rangeOfString:m_substr].location != NSNotFound;
+ }
+
+ std::string describe() const override {
+ return "contains string: " + Catch::Detail::stringify( m_substr );
+ }
+ };
+
+ struct StartsWith : StringHolder {
+ StartsWith( NSString* substr ) : StringHolder( substr ){}
+
+ bool match( NSString* str ) const override {
+ return (str != nil || m_substr == nil ) &&
+ [str rangeOfString:m_substr].location == 0;
+ }
+
+ std::string describe() const override {
+ return "starts with: " + Catch::Detail::stringify( m_substr );
+ }
+ };
+ struct EndsWith : StringHolder {
+ EndsWith( NSString* substr ) : StringHolder( substr ){}
+
+ bool match( NSString* str ) const override {
+ return (str != nil || m_substr == nil ) &&
+ [str rangeOfString:m_substr].location == [str length] - [m_substr length];
+ }
+
+ std::string describe() const override {
+ return "ends with: " + Catch::Detail::stringify( m_substr );
+ }
+ };
+
+ } // namespace NSStringMatchers
+ } // namespace Impl
+
+ inline Impl::NSStringMatchers::Equals
+ Equals( NSString* substr ){ return Impl::NSStringMatchers::Equals( substr ); }
+
+ inline Impl::NSStringMatchers::Contains
+ Contains( NSString* substr ){ return Impl::NSStringMatchers::Contains( substr ); }
+
+ inline Impl::NSStringMatchers::StartsWith
+ StartsWith( NSString* substr ){ return Impl::NSStringMatchers::StartsWith( substr ); }
+
+ inline Impl::NSStringMatchers::EndsWith
+ EndsWith( NSString* substr ){ return Impl::NSStringMatchers::EndsWith( substr ); }
+
+ } // namespace Matchers
+
+ using namespace Matchers;
+
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+
+} // namespace Catch
+
+///////////////////////////////////////////////////////////////////////////////
+#define OC_MAKE_UNIQUE_NAME( root, uniqueSuffix ) root##uniqueSuffix
+#define OC_TEST_CASE2( name, desc, uniqueSuffix ) \
++(NSString*) OC_MAKE_UNIQUE_NAME( Catch_Name_test_, uniqueSuffix ) \
+{ \
+return @ name; \
+} \
++(NSString*) OC_MAKE_UNIQUE_NAME( Catch_Description_test_, uniqueSuffix ) \
+{ \
+return @ desc; \
+} \
+-(void) OC_MAKE_UNIQUE_NAME( Catch_TestCase_test_, uniqueSuffix )
+
+#define OC_TEST_CASE( name, desc ) OC_TEST_CASE2( name, desc, __LINE__ )
+
+// end catch_objc.hpp
+#endif
+
+// Benchmarking needs the externally-facing parts of reporters to work
+#if defined(CATCH_CONFIG_EXTERNAL_INTERFACES) || defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+// start catch_external_interfaces.h
+
+// start catch_reporter_bases.hpp
+
+// start catch_interfaces_reporter.h
+
+// start catch_config.hpp
+
+// start catch_test_spec_parser.h
+
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wpadded"
+#endif
+
+// start catch_test_spec.h
+
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wpadded"
+#endif
+
+// start catch_wildcard_pattern.h
+
+namespace Catch
+{
+ class WildcardPattern {
+ enum WildcardPosition {
+ NoWildcard = 0,
+ WildcardAtStart = 1,
+ WildcardAtEnd = 2,
+ WildcardAtBothEnds = WildcardAtStart | WildcardAtEnd
+ };
+
+ public:
+
+ WildcardPattern( std::string const& pattern, CaseSensitive::Choice caseSensitivity );
+ virtual ~WildcardPattern() = default;
+ virtual bool matches( std::string const& str ) const;
+
+ private:
+ std::string normaliseString( std::string const& str ) const;
+ CaseSensitive::Choice m_caseSensitivity;
+ WildcardPosition m_wildcard = NoWildcard;
+ std::string m_pattern;
+ };
+}
+
+// end catch_wildcard_pattern.h
+#include <string>
+#include <vector>
+#include <memory>
+
+namespace Catch {
+
+ struct IConfig;
+
+ class TestSpec {
+ class Pattern {
+ public:
+ explicit Pattern( std::string const& name );
+ virtual ~Pattern();
+ virtual bool matches( TestCaseInfo const& testCase ) const = 0;
+ std::string const& name() const;
+ private:
+ std::string const m_name;
+ };
+ using PatternPtr = std::shared_ptr<Pattern>;
+
+ class NamePattern : public Pattern {
+ public:
+ explicit NamePattern( std::string const& name, std::string const& filterString );
+ bool matches( TestCaseInfo const& testCase ) const override;
+ private:
+ WildcardPattern m_wildcardPattern;
+ };
+
+ class TagPattern : public Pattern {
+ public:
+ explicit TagPattern( std::string const& tag, std::string const& filterString );
+ bool matches( TestCaseInfo const& testCase ) const override;
+ private:
+ std::string m_tag;
+ };
+
+ class ExcludedPattern : public Pattern {
+ public:
+ explicit ExcludedPattern( PatternPtr const& underlyingPattern );
+ bool matches( TestCaseInfo const& testCase ) const override;
+ private:
+ PatternPtr m_underlyingPattern;
+ };
+
+ struct Filter {
+ std::vector<PatternPtr> m_patterns;
+
+ bool matches( TestCaseInfo const& testCase ) const;
+ std::string name() const;
+ };
+
+ public:
+ struct FilterMatch {
+ std::string name;
+ std::vector<TestCase const*> tests;
+ };
+ using Matches = std::vector<FilterMatch>;
+ using vectorStrings = std::vector<std::string>;
+
+ bool hasFilters() const;
+ bool matches( TestCaseInfo const& testCase ) const;
+ Matches matchesByFilter( std::vector<TestCase> const& testCases, IConfig const& config ) const;
+ const vectorStrings & getInvalidArgs() const;
+
+ private:
+ std::vector<Filter> m_filters;
+ std::vector<std::string> m_invalidArgs;
+ friend class TestSpecParser;
+ };
+}
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+// end catch_test_spec.h
+// start catch_interfaces_tag_alias_registry.h
+
+#include <string>
+
+namespace Catch {
+
+ struct TagAlias;
+
+ struct ITagAliasRegistry {
+ virtual ~ITagAliasRegistry();
+ // Nullptr if not present
+ virtual TagAlias const* find( std::string const& alias ) const = 0;
+ virtual std::string expandAliases( std::string const& unexpandedTestSpec ) const = 0;
+
+ static ITagAliasRegistry const& get();
+ };
+
+} // end namespace Catch
+
+// end catch_interfaces_tag_alias_registry.h
+namespace Catch {
+
+ class TestSpecParser {
+ enum Mode{ None, Name, QuotedName, Tag, EscapedName };
+ Mode m_mode = None;
+ Mode lastMode = None;
+ bool m_exclusion = false;
+ std::size_t m_pos = 0;
+ std::size_t m_realPatternPos = 0;
+ std::string m_arg;
+ std::string m_substring;
+ std::string m_patternName;
+ std::vector<std::size_t> m_escapeChars;
+ TestSpec::Filter m_currentFilter;
+ TestSpec m_testSpec;
+ ITagAliasRegistry const* m_tagAliases = nullptr;
+
+ public:
+ TestSpecParser( ITagAliasRegistry const& tagAliases );
+
+ TestSpecParser& parse( std::string const& arg );
+ TestSpec testSpec();
+
+ private:
+ bool visitChar( char c );
+ void startNewMode( Mode mode );
+ bool processNoneChar( char c );
+ void processNameChar( char c );
+ bool processOtherChar( char c );
+ void endMode();
+ void escape();
+ bool isControlChar( char c ) const;
+ void saveLastMode();
+ void revertBackToLastMode();
+ void addFilter();
+ bool separate();
+
+ // Handles common preprocessing of the pattern for name/tag patterns
+ std::string preprocessPattern();
+ // Adds the current pattern as a test name
+ void addNamePattern();
+ // Adds the current pattern as a tag
+ void addTagPattern();
+
+ inline void addCharToPattern(char c) {
+ m_substring += c;
+ m_patternName += c;
+ m_realPatternPos++;
+ }
+
+ };
+ TestSpec parseTestSpec( std::string const& arg );
+
+} // namespace Catch
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+// end catch_test_spec_parser.h
+// Libstdc++ doesn't like incomplete classes for unique_ptr
+
+#include <memory>
+#include <vector>
+#include <string>
+
+#ifndef CATCH_CONFIG_CONSOLE_WIDTH
+#define CATCH_CONFIG_CONSOLE_WIDTH 80
+#endif
+
+namespace Catch {
+
+ struct IStream;
+
+ struct ConfigData {
+ bool listTests = false;
+ bool listTags = false;
+ bool listReporters = false;
+ bool listTestNamesOnly = false;
+
+ bool showSuccessfulTests = false;
+ bool shouldDebugBreak = false;
+ bool noThrow = false;
+ bool showHelp = false;
+ bool showInvisibles = false;
+ bool filenamesAsTags = false;
+ bool libIdentify = false;
+
+ int abortAfter = -1;
+ unsigned int rngSeed = 0;
+
+ bool benchmarkNoAnalysis = false;
+ unsigned int benchmarkSamples = 100;
+ double benchmarkConfidenceInterval = 0.95;
+ unsigned int benchmarkResamples = 100000;
+ std::chrono::milliseconds::rep benchmarkWarmupTime = 100;
+
+ Verbosity verbosity = Verbosity::Normal;
+ WarnAbout::What warnings = WarnAbout::Nothing;
+ ShowDurations::OrNot showDurations = ShowDurations::DefaultForReporter;
+ RunTests::InWhatOrder runOrder = RunTests::InDeclarationOrder;
+ UseColour::YesOrNo useColour = UseColour::Auto;
+ WaitForKeypress::When waitForKeypress = WaitForKeypress::Never;
+
+ std::string outputFilename;
+ std::string name;
+ std::string processName;
+#ifndef CATCH_CONFIG_DEFAULT_REPORTER
+#define CATCH_CONFIG_DEFAULT_REPORTER "console"
+#endif
+ std::string reporterName = CATCH_CONFIG_DEFAULT_REPORTER;
+#undef CATCH_CONFIG_DEFAULT_REPORTER
+
+ std::vector<std::string> testsOrTags;
+ std::vector<std::string> sectionsToRun;
+ };
+
+ class Config : public IConfig {
+ public:
+
+ Config() = default;
+ Config( ConfigData const& data );
+ virtual ~Config() = default;
+
+ std::string const& getFilename() const;
+
+ bool listTests() const;
+ bool listTestNamesOnly() const;
+ bool listTags() const;
+ bool listReporters() const;
+
+ std::string getProcessName() const;
+ std::string const& getReporterName() const;
+
+ std::vector<std::string> const& getTestsOrTags() const override;
+ std::vector<std::string> const& getSectionsToRun() const override;
+
+ TestSpec const& testSpec() const override;
+ bool hasTestFilters() const override;
+
+ bool showHelp() const;
+
+ // IConfig interface
+ bool allowThrows() const override;
+ std::ostream& stream() const override;
+ std::string name() const override;
+ bool includeSuccessfulResults() const override;
+ bool warnAboutMissingAssertions() const override;
+ bool warnAboutNoTests() const override;
+ ShowDurations::OrNot showDurations() const override;
+ RunTests::InWhatOrder runOrder() const override;
+ unsigned int rngSeed() const override;
+ UseColour::YesOrNo useColour() const override;
+ bool shouldDebugBreak() const override;
+ int abortAfter() const override;
+ bool showInvisibles() const override;
+ Verbosity verbosity() const override;
+ bool benchmarkNoAnalysis() const override;
+ int benchmarkSamples() const override;
+ double benchmarkConfidenceInterval() const override;
+ unsigned int benchmarkResamples() const override;
+ std::chrono::milliseconds benchmarkWarmupTime() const override;
+
+ private:
+
+ IStream const* openStream();
+ ConfigData m_data;
+
+ std::unique_ptr<IStream const> m_stream;
+ TestSpec m_testSpec;
+ bool m_hasTestFilters = false;
+ };
+
+} // end namespace Catch
+
+// end catch_config.hpp
+// start catch_assertionresult.h
+
+#include <string>
+
+namespace Catch {
+
+ struct AssertionResultData
+ {
+ AssertionResultData() = delete;
+
+ AssertionResultData( ResultWas::OfType _resultType, LazyExpression const& _lazyExpression );
+
+ std::string message;
+ mutable std::string reconstructedExpression;
+ LazyExpression lazyExpression;
+ ResultWas::OfType resultType;
+
+ std::string reconstructExpression() const;
+ };
+
+ class AssertionResult {
+ public:
+ AssertionResult() = delete;
+ AssertionResult( AssertionInfo const& info, AssertionResultData const& data );
+
+ bool isOk() const;
+ bool succeeded() const;
+ ResultWas::OfType getResultType() const;
+ bool hasExpression() const;
+ bool hasMessage() const;
+ std::string getExpression() const;
+ std::string getExpressionInMacro() const;
+ bool hasExpandedExpression() const;
+ std::string getExpandedExpression() const;
+ std::string getMessage() const;
+ SourceLineInfo getSourceInfo() const;
+ StringRef getTestMacroName() const;
+
+ //protected:
+ AssertionInfo m_info;
+ AssertionResultData m_resultData;
+ };
+
+} // end namespace Catch
+
+// end catch_assertionresult.h
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+// start catch_estimate.hpp
+
+ // Statistics estimates
+
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Duration>
+ struct Estimate {
+ Duration point;
+ Duration lower_bound;
+ Duration upper_bound;
+ double confidence_interval;
+
+ template <typename Duration2>
+ operator Estimate<Duration2>() const {
+ return { point, lower_bound, upper_bound, confidence_interval };
+ }
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_estimate.hpp
+// start catch_outlier_classification.hpp
+
+// Outlier information
+
+namespace Catch {
+ namespace Benchmark {
+ struct OutlierClassification {
+ int samples_seen = 0;
+ int low_severe = 0; // more than 3 times IQR below Q1
+ int low_mild = 0; // 1.5 to 3 times IQR below Q1
+ int high_mild = 0; // 1.5 to 3 times IQR above Q3
+ int high_severe = 0; // more than 3 times IQR above Q3
+
+ int total() const {
+ return low_severe + low_mild + high_mild + high_severe;
+ }
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_outlier_classification.hpp
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+#include <string>
+#include <iosfwd>
+#include <map>
+#include <set>
+#include <memory>
+#include <algorithm>
+
+namespace Catch {
+
+ struct ReporterConfig {
+ explicit ReporterConfig( IConfigPtr const& _fullConfig );
+
+ ReporterConfig( IConfigPtr const& _fullConfig, std::ostream& _stream );
+
+ std::ostream& stream() const;
+ IConfigPtr fullConfig() const;
+
+ private:
+ std::ostream* m_stream;
+ IConfigPtr m_fullConfig;
+ };
+
+ struct ReporterPreferences {
+ bool shouldRedirectStdOut = false;
+ bool shouldReportAllAssertions = false;
+ };
+
+ template<typename T>
+ struct LazyStat : Option<T> {
+ LazyStat& operator=( T const& _value ) {
+ Option<T>::operator=( _value );
+ used = false;
+ return *this;
+ }
+ void reset() {
+ Option<T>::reset();
+ used = false;
+ }
+ bool used = false;
+ };
+
+ struct TestRunInfo {
+ TestRunInfo( std::string const& _name );
+ std::string name;
+ };
+ struct GroupInfo {
+ GroupInfo( std::string const& _name,
+ std::size_t _groupIndex,
+ std::size_t _groupsCount );
+
+ std::string name;
+ std::size_t groupIndex;
+ std::size_t groupsCounts;
+ };
+
+ struct AssertionStats {
+ AssertionStats( AssertionResult const& _assertionResult,
+ std::vector<MessageInfo> const& _infoMessages,
+ Totals const& _totals );
+
+ AssertionStats( AssertionStats const& ) = default;
+ AssertionStats( AssertionStats && ) = default;
+ AssertionStats& operator = ( AssertionStats const& ) = delete;
+ AssertionStats& operator = ( AssertionStats && ) = delete;
+ virtual ~AssertionStats();
+
+ AssertionResult assertionResult;
+ std::vector<MessageInfo> infoMessages;
+ Totals totals;
+ };
+
+ struct SectionStats {
+ SectionStats( SectionInfo const& _sectionInfo,
+ Counts const& _assertions,
+ double _durationInSeconds,
+ bool _missingAssertions );
+ SectionStats( SectionStats const& ) = default;
+ SectionStats( SectionStats && ) = default;
+ SectionStats& operator = ( SectionStats const& ) = default;
+ SectionStats& operator = ( SectionStats && ) = default;
+ virtual ~SectionStats();
+
+ SectionInfo sectionInfo;
+ Counts assertions;
+ double durationInSeconds;
+ bool missingAssertions;
+ };
+
+ struct TestCaseStats {
+ TestCaseStats( TestCaseInfo const& _testInfo,
+ Totals const& _totals,
+ std::string const& _stdOut,
+ std::string const& _stdErr,
+ bool _aborting );
+
+ TestCaseStats( TestCaseStats const& ) = default;
+ TestCaseStats( TestCaseStats && ) = default;
+ TestCaseStats& operator = ( TestCaseStats const& ) = default;
+ TestCaseStats& operator = ( TestCaseStats && ) = default;
+ virtual ~TestCaseStats();
+
+ TestCaseInfo testInfo;
+ Totals totals;
+ std::string stdOut;
+ std::string stdErr;
+ bool aborting;
+ };
+
+ struct TestGroupStats {
+ TestGroupStats( GroupInfo const& _groupInfo,
+ Totals const& _totals,
+ bool _aborting );
+ TestGroupStats( GroupInfo const& _groupInfo );
+
+ TestGroupStats( TestGroupStats const& ) = default;
+ TestGroupStats( TestGroupStats && ) = default;
+ TestGroupStats& operator = ( TestGroupStats const& ) = default;
+ TestGroupStats& operator = ( TestGroupStats && ) = default;
+ virtual ~TestGroupStats();
+
+ GroupInfo groupInfo;
+ Totals totals;
+ bool aborting;
+ };
+
+ struct TestRunStats {
+ TestRunStats( TestRunInfo const& _runInfo,
+ Totals const& _totals,
+ bool _aborting );
+
+ TestRunStats( TestRunStats const& ) = default;
+ TestRunStats( TestRunStats && ) = default;
+ TestRunStats& operator = ( TestRunStats const& ) = default;
+ TestRunStats& operator = ( TestRunStats && ) = default;
+ virtual ~TestRunStats();
+
+ TestRunInfo runInfo;
+ Totals totals;
+ bool aborting;
+ };
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ struct BenchmarkInfo {
+ std::string name;
+ double estimatedDuration;
+ int iterations;
+ int samples;
+ unsigned int resamples;
+ double clockResolution;
+ double clockCost;
+ };
+
+ template <class Duration>
+ struct BenchmarkStats {
+ BenchmarkInfo info;
+
+ std::vector<Duration> samples;
+ Benchmark::Estimate<Duration> mean;
+ Benchmark::Estimate<Duration> standardDeviation;
+ Benchmark::OutlierClassification outliers;
+ double outlierVariance;
+
+ template <typename Duration2>
+ operator BenchmarkStats<Duration2>() const {
+ std::vector<Duration2> samples2;
+ samples2.reserve(samples.size());
+ std::transform(samples.begin(), samples.end(), std::back_inserter(samples2), [](Duration d) { return Duration2(d); });
+ return {
+ info,
+ std::move(samples2),
+ mean,
+ standardDeviation,
+ outliers,
+ outlierVariance,
+ };
+ }
+ };
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ struct IStreamingReporter {
+ virtual ~IStreamingReporter() = default;
+
+ // Implementing class must also provide the following static methods:
+ // static std::string getDescription();
+ // static std::set<Verbosity> getSupportedVerbosities()
+
+ virtual ReporterPreferences getPreferences() const = 0;
+
+ virtual void noMatchingTestCases( std::string const& spec ) = 0;
+
+ virtual void reportInvalidArguments(std::string const&) {}
+
+ virtual void testRunStarting( TestRunInfo const& testRunInfo ) = 0;
+ virtual void testGroupStarting( GroupInfo const& groupInfo ) = 0;
+
+ virtual void testCaseStarting( TestCaseInfo const& testInfo ) = 0;
+ virtual void sectionStarting( SectionInfo const& sectionInfo ) = 0;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ virtual void benchmarkPreparing( std::string const& ) {}
+ virtual void benchmarkStarting( BenchmarkInfo const& ) {}
+ virtual void benchmarkEnded( BenchmarkStats<> const& ) {}
+ virtual void benchmarkFailed( std::string const& ) {}
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ virtual void assertionStarting( AssertionInfo const& assertionInfo ) = 0;
+
+ // The return value indicates if the messages buffer should be cleared:
+ virtual bool assertionEnded( AssertionStats const& assertionStats ) = 0;
+
+ virtual void sectionEnded( SectionStats const& sectionStats ) = 0;
+ virtual void testCaseEnded( TestCaseStats const& testCaseStats ) = 0;
+ virtual void testGroupEnded( TestGroupStats const& testGroupStats ) = 0;
+ virtual void testRunEnded( TestRunStats const& testRunStats ) = 0;
+
+ virtual void skipTest( TestCaseInfo const& testInfo ) = 0;
+
+ // Default empty implementation provided
+ virtual void fatalErrorEncountered( StringRef name );
+
+ virtual bool isMulti() const;
+ };
+ using IStreamingReporterPtr = std::unique_ptr<IStreamingReporter>;
+
+ struct IReporterFactory {
+ virtual ~IReporterFactory();
+ virtual IStreamingReporterPtr create( ReporterConfig const& config ) const = 0;
+ virtual std::string getDescription() const = 0;
+ };
+ using IReporterFactoryPtr = std::shared_ptr<IReporterFactory>;
+
+ struct IReporterRegistry {
+ using FactoryMap = std::map<std::string, IReporterFactoryPtr>;
+ using Listeners = std::vector<IReporterFactoryPtr>;
+
+ virtual ~IReporterRegistry();
+ virtual IStreamingReporterPtr create( std::string const& name, IConfigPtr const& config ) const = 0;
+ virtual FactoryMap const& getFactories() const = 0;
+ virtual Listeners const& getListeners() const = 0;
+ };
+
+} // end namespace Catch
+
+// end catch_interfaces_reporter.h
+#include <algorithm>
+#include <cstring>
+#include <cfloat>
+#include <cstdio>
+#include <cassert>
+#include <memory>
+#include <ostream>
+
+namespace Catch {
+ void prepareExpandedExpression(AssertionResult& result);
+
+ // Returns double formatted as %.3f (format expected on output)
+ std::string getFormattedDuration( double duration );
+
+ std::string serializeFilters( std::vector<std::string> const& container );
+
+ template<typename DerivedT>
+ struct StreamingReporterBase : IStreamingReporter {
+
+ StreamingReporterBase( ReporterConfig const& _config )
+ : m_config( _config.fullConfig() ),
+ stream( _config.stream() )
+ {
+ m_reporterPrefs.shouldRedirectStdOut = false;
+ if( !DerivedT::getSupportedVerbosities().count( m_config->verbosity() ) )
+ CATCH_ERROR( "Verbosity level not supported by this reporter" );
+ }
+
+ ReporterPreferences getPreferences() const override {
+ return m_reporterPrefs;
+ }
+
+ static std::set<Verbosity> getSupportedVerbosities() {
+ return { Verbosity::Normal };
+ }
+
+ ~StreamingReporterBase() override = default;
+
+ void noMatchingTestCases(std::string const&) override {}
+
+ void reportInvalidArguments(std::string const&) override {}
+
+ void testRunStarting(TestRunInfo const& _testRunInfo) override {
+ currentTestRunInfo = _testRunInfo;
+ }
+
+ void testGroupStarting(GroupInfo const& _groupInfo) override {
+ currentGroupInfo = _groupInfo;
+ }
+
+ void testCaseStarting(TestCaseInfo const& _testInfo) override {
+ currentTestCaseInfo = _testInfo;
+ }
+ void sectionStarting(SectionInfo const& _sectionInfo) override {
+ m_sectionStack.push_back(_sectionInfo);
+ }
+
+ void sectionEnded(SectionStats const& /* _sectionStats */) override {
+ m_sectionStack.pop_back();
+ }
+ void testCaseEnded(TestCaseStats const& /* _testCaseStats */) override {
+ currentTestCaseInfo.reset();
+ }
+ void testGroupEnded(TestGroupStats const& /* _testGroupStats */) override {
+ currentGroupInfo.reset();
+ }
+ void testRunEnded(TestRunStats const& /* _testRunStats */) override {
+ currentTestCaseInfo.reset();
+ currentGroupInfo.reset();
+ currentTestRunInfo.reset();
+ }
+
+ void skipTest(TestCaseInfo const&) override {
+ // Don't do anything with this by default.
+ // It can optionally be overridden in the derived class.
+ }
+
+ IConfigPtr m_config;
+ std::ostream& stream;
+
+ LazyStat<TestRunInfo> currentTestRunInfo;
+ LazyStat<GroupInfo> currentGroupInfo;
+ LazyStat<TestCaseInfo> currentTestCaseInfo;
+
+ std::vector<SectionInfo> m_sectionStack;
+ ReporterPreferences m_reporterPrefs;
+ };
+
+ template<typename DerivedT>
+ struct CumulativeReporterBase : IStreamingReporter {
+ template<typename T, typename ChildNodeT>
+ struct Node {
+ explicit Node( T const& _value ) : value( _value ) {}
+ virtual ~Node() {}
+
+ using ChildNodes = std::vector<std::shared_ptr<ChildNodeT>>;
+ T value;
+ ChildNodes children;
+ };
+ struct SectionNode {
+ explicit SectionNode(SectionStats const& _stats) : stats(_stats) {}
+ virtual ~SectionNode() = default;
+
+ bool operator == (SectionNode const& other) const {
+ return stats.sectionInfo.lineInfo == other.stats.sectionInfo.lineInfo;
+ }
+ bool operator == (std::shared_ptr<SectionNode> const& other) const {
+ return operator==(*other);
+ }
+
+ SectionStats stats;
+ using ChildSections = std::vector<std::shared_ptr<SectionNode>>;
+ using Assertions = std::vector<AssertionStats>;
+ ChildSections childSections;
+ Assertions assertions;
+ std::string stdOut;
+ std::string stdErr;
+ };
+
+ struct BySectionInfo {
+ BySectionInfo( SectionInfo const& other ) : m_other( other ) {}
+ BySectionInfo( BySectionInfo const& other ) : m_other( other.m_other ) {}
+ bool operator() (std::shared_ptr<SectionNode> const& node) const {
+ return ((node->stats.sectionInfo.name == m_other.name) &&
+ (node->stats.sectionInfo.lineInfo == m_other.lineInfo));
+ }
+ void operator=(BySectionInfo const&) = delete;
+
+ private:
+ SectionInfo const& m_other;
+ };
+
+ using TestCaseNode = Node<TestCaseStats, SectionNode>;
+ using TestGroupNode = Node<TestGroupStats, TestCaseNode>;
+ using TestRunNode = Node<TestRunStats, TestGroupNode>;
+
+ CumulativeReporterBase( ReporterConfig const& _config )
+ : m_config( _config.fullConfig() ),
+ stream( _config.stream() )
+ {
+ m_reporterPrefs.shouldRedirectStdOut = false;
+ if( !DerivedT::getSupportedVerbosities().count( m_config->verbosity() ) )
+ CATCH_ERROR( "Verbosity level not supported by this reporter" );
+ }
+ ~CumulativeReporterBase() override = default;
+
+ ReporterPreferences getPreferences() const override {
+ return m_reporterPrefs;
+ }
+
+ static std::set<Verbosity> getSupportedVerbosities() {
+ return { Verbosity::Normal };
+ }
+
+ void testRunStarting( TestRunInfo const& ) override {}
+ void testGroupStarting( GroupInfo const& ) override {}
+
+ void testCaseStarting( TestCaseInfo const& ) override {}
+
+ void sectionStarting( SectionInfo const& sectionInfo ) override {
+ SectionStats incompleteStats( sectionInfo, Counts(), 0, false );
+ std::shared_ptr<SectionNode> node;
+ if( m_sectionStack.empty() ) {
+ if( !m_rootSection )
+ m_rootSection = std::make_shared<SectionNode>( incompleteStats );
+ node = m_rootSection;
+ }
+ else {
+ SectionNode& parentNode = *m_sectionStack.back();
+ auto it =
+ std::find_if( parentNode.childSections.begin(),
+ parentNode.childSections.end(),
+ BySectionInfo( sectionInfo ) );
+ if( it == parentNode.childSections.end() ) {
+ node = std::make_shared<SectionNode>( incompleteStats );
+ parentNode.childSections.push_back( node );
+ }
+ else
+ node = *it;
+ }
+ m_sectionStack.push_back( node );
+ m_deepestSection = std::move(node);
+ }
+
+ void assertionStarting(AssertionInfo const&) override {}
+
+ bool assertionEnded(AssertionStats const& assertionStats) override {
+ assert(!m_sectionStack.empty());
+ // AssertionResult holds a pointer to a temporary DecomposedExpression,
+ // which getExpandedExpression() calls to build the expression string.
+ // Our section stack copy of the assertionResult will likely outlive the
+ // temporary, so it must be expanded or discarded now to avoid calling
+ // a destroyed object later.
+ prepareExpandedExpression(const_cast<AssertionResult&>( assertionStats.assertionResult ) );
+ SectionNode& sectionNode = *m_sectionStack.back();
+ sectionNode.assertions.push_back(assertionStats);
+ return true;
+ }
+ void sectionEnded(SectionStats const& sectionStats) override {
+ assert(!m_sectionStack.empty());
+ SectionNode& node = *m_sectionStack.back();
+ node.stats = sectionStats;
+ m_sectionStack.pop_back();
+ }
+ void testCaseEnded(TestCaseStats const& testCaseStats) override {
+ auto node = std::make_shared<TestCaseNode>(testCaseStats);
+ assert(m_sectionStack.size() == 0);
+ node->children.push_back(m_rootSection);
+ m_testCases.push_back(node);
+ m_rootSection.reset();
+
+ assert(m_deepestSection);
+ m_deepestSection->stdOut = testCaseStats.stdOut;
+ m_deepestSection->stdErr = testCaseStats.stdErr;
+ }
+ void testGroupEnded(TestGroupStats const& testGroupStats) override {
+ auto node = std::make_shared<TestGroupNode>(testGroupStats);
+ node->children.swap(m_testCases);
+ m_testGroups.push_back(node);
+ }
+ void testRunEnded(TestRunStats const& testRunStats) override {
+ auto node = std::make_shared<TestRunNode>(testRunStats);
+ node->children.swap(m_testGroups);
+ m_testRuns.push_back(node);
+ testRunEndedCumulative();
+ }
+ virtual void testRunEndedCumulative() = 0;
+
+ void skipTest(TestCaseInfo const&) override {}
+
+ IConfigPtr m_config;
+ std::ostream& stream;
+ std::vector<AssertionStats> m_assertions;
+ std::vector<std::vector<std::shared_ptr<SectionNode>>> m_sections;
+ std::vector<std::shared_ptr<TestCaseNode>> m_testCases;
+ std::vector<std::shared_ptr<TestGroupNode>> m_testGroups;
+
+ std::vector<std::shared_ptr<TestRunNode>> m_testRuns;
+
+ std::shared_ptr<SectionNode> m_rootSection;
+ std::shared_ptr<SectionNode> m_deepestSection;
+ std::vector<std::shared_ptr<SectionNode>> m_sectionStack;
+ ReporterPreferences m_reporterPrefs;
+ };
+
+ template<char C>
+ char const* getLineOfChars() {
+ static char line[CATCH_CONFIG_CONSOLE_WIDTH] = {0};
+ if( !*line ) {
+ std::memset( line, C, CATCH_CONFIG_CONSOLE_WIDTH-1 );
+ line[CATCH_CONFIG_CONSOLE_WIDTH-1] = 0;
+ }
+ return line;
+ }
+
+ struct TestEventListenerBase : StreamingReporterBase<TestEventListenerBase> {
+ TestEventListenerBase( ReporterConfig const& _config );
+
+ static std::set<Verbosity> getSupportedVerbosities();
+
+ void assertionStarting(AssertionInfo const&) override;
+ bool assertionEnded(AssertionStats const&) override;
+ };
+
+} // end namespace Catch
+
+// end catch_reporter_bases.hpp
+// start catch_console_colour.h
+
+namespace Catch {
+
+ struct Colour {
+ enum Code {
+ None = 0,
+
+ White,
+ Red,
+ Green,
+ Blue,
+ Cyan,
+ Yellow,
+ Grey,
+
+ Bright = 0x10,
+
+ BrightRed = Bright | Red,
+ BrightGreen = Bright | Green,
+ LightGrey = Bright | Grey,
+ BrightWhite = Bright | White,
+ BrightYellow = Bright | Yellow,
+
+ // By intention
+ FileName = LightGrey,
+ Warning = BrightYellow,
+ ResultError = BrightRed,
+ ResultSuccess = BrightGreen,
+ ResultExpectedFailure = Warning,
+
+ Error = BrightRed,
+ Success = Green,
+
+ OriginalExpression = Cyan,
+ ReconstructedExpression = BrightYellow,
+
+ SecondaryText = LightGrey,
+ Headers = White
+ };
+
+ // Use constructed object for RAII guard
+ Colour( Code _colourCode );
+ Colour( Colour&& other ) noexcept;
+ Colour& operator=( Colour&& other ) noexcept;
+ ~Colour();
+
+ // Use static method for one-shot changes
+ static void use( Code _colourCode );
+
+ private:
+ bool m_moved = false;
+ };
+
+ std::ostream& operator << ( std::ostream& os, Colour const& );
+
+} // end namespace Catch
+
+// end catch_console_colour.h
+// start catch_reporter_registrars.hpp
+
+
+namespace Catch {
+
+ template<typename T>
+ class ReporterRegistrar {
+
+ class ReporterFactory : public IReporterFactory {
+
+ IStreamingReporterPtr create( ReporterConfig const& config ) const override {
+ return std::unique_ptr<T>( new T( config ) );
+ }
+
+ std::string getDescription() const override {
+ return T::getDescription();
+ }
+ };
+
+ public:
+
+ explicit ReporterRegistrar( std::string const& name ) {
+ getMutableRegistryHub().registerReporter( name, std::make_shared<ReporterFactory>() );
+ }
+ };
+
+ template<typename T>
+ class ListenerRegistrar {
+
+ class ListenerFactory : public IReporterFactory {
+
+ IStreamingReporterPtr create( ReporterConfig const& config ) const override {
+ return std::unique_ptr<T>( new T( config ) );
+ }
+ std::string getDescription() const override {
+ return std::string();
+ }
+ };
+
+ public:
+
+ ListenerRegistrar() {
+ getMutableRegistryHub().registerListener( std::make_shared<ListenerFactory>() );
+ }
+ };
+}
+
+#if !defined(CATCH_CONFIG_DISABLE)
+
+#define CATCH_REGISTER_REPORTER( name, reporterType ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::ReporterRegistrar<reporterType> catch_internal_RegistrarFor##reporterType( name ); } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+#define CATCH_REGISTER_LISTENER( listenerType ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::ListenerRegistrar<listenerType> catch_internal_RegistrarFor##listenerType; } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+#else // CATCH_CONFIG_DISABLE
+
+#define CATCH_REGISTER_REPORTER(name, reporterType)
+#define CATCH_REGISTER_LISTENER(listenerType)
+
+#endif // CATCH_CONFIG_DISABLE
+
+// end catch_reporter_registrars.hpp
+// Allow users to base their work off existing reporters
+// start catch_reporter_compact.h
+
+namespace Catch {
+
+ struct CompactReporter : StreamingReporterBase<CompactReporter> {
+
+ using StreamingReporterBase::StreamingReporterBase;
+
+ ~CompactReporter() override;
+
+ static std::string getDescription();
+
+ ReporterPreferences getPreferences() const override;
+
+ void noMatchingTestCases(std::string const& spec) override;
+
+ void assertionStarting(AssertionInfo const&) override;
+
+ bool assertionEnded(AssertionStats const& _assertionStats) override;
+
+ void sectionEnded(SectionStats const& _sectionStats) override;
+
+ void testRunEnded(TestRunStats const& _testRunStats) override;
+
+ };
+
+} // end namespace Catch
+
+// end catch_reporter_compact.h
+// start catch_reporter_console.h
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4061) // Not all labels are EXPLICITLY handled in switch
+ // Note that 4062 (not all labels are handled
+ // and default is missing) is enabled
+#endif
+
+namespace Catch {
+ // Fwd decls
+ struct SummaryColumn;
+ class TablePrinter;
+
+ struct ConsoleReporter : StreamingReporterBase<ConsoleReporter> {
+ std::unique_ptr<TablePrinter> m_tablePrinter;
+
+ ConsoleReporter(ReporterConfig const& config);
+ ~ConsoleReporter() override;
+ static std::string getDescription();
+
+ void noMatchingTestCases(std::string const& spec) override;
+
+ void reportInvalidArguments(std::string const&arg) override;
+
+ void assertionStarting(AssertionInfo const&) override;
+
+ bool assertionEnded(AssertionStats const& _assertionStats) override;
+
+ void sectionStarting(SectionInfo const& _sectionInfo) override;
+ void sectionEnded(SectionStats const& _sectionStats) override;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void benchmarkPreparing(std::string const& name) override;
+ void benchmarkStarting(BenchmarkInfo const& info) override;
+ void benchmarkEnded(BenchmarkStats<> const& stats) override;
+ void benchmarkFailed(std::string const& error) override;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ void testCaseEnded(TestCaseStats const& _testCaseStats) override;
+ void testGroupEnded(TestGroupStats const& _testGroupStats) override;
+ void testRunEnded(TestRunStats const& _testRunStats) override;
+ void testRunStarting(TestRunInfo const& _testRunInfo) override;
+ private:
+
+ void lazyPrint();
+
+ void lazyPrintWithoutClosingBenchmarkTable();
+ void lazyPrintRunInfo();
+ void lazyPrintGroupInfo();
+ void printTestCaseAndSectionHeader();
+
+ void printClosedHeader(std::string const& _name);
+ void printOpenHeader(std::string const& _name);
+
+ // if string has a : in first line will set indent to follow it on
+ // subsequent lines
+ void printHeaderString(std::string const& _string, std::size_t indent = 0);
+
+ void printTotals(Totals const& totals);
+ void printSummaryRow(std::string const& label, std::vector<SummaryColumn> const& cols, std::size_t row);
+
+ void printTotalsDivider(Totals const& totals);
+ void printSummaryDivider();
+ void printTestFilters();
+
+ private:
+ bool m_headerPrinted = false;
+ };
+
+} // end namespace Catch
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+// end catch_reporter_console.h
+// start catch_reporter_junit.h
+
+// start catch_xmlwriter.h
+
+#include <vector>
+
+namespace Catch {
+ enum class XmlFormatting {
+ None = 0x00,
+ Indent = 0x01,
+ Newline = 0x02,
+ };
+
+ XmlFormatting operator | (XmlFormatting lhs, XmlFormatting rhs);
+ XmlFormatting operator & (XmlFormatting lhs, XmlFormatting rhs);
+
+ class XmlEncode {
+ public:
+ enum ForWhat { ForTextNodes, ForAttributes };
+
+ XmlEncode( std::string const& str, ForWhat forWhat = ForTextNodes );
+
+ void encodeTo( std::ostream& os ) const;
+
+ friend std::ostream& operator << ( std::ostream& os, XmlEncode const& xmlEncode );
+
+ private:
+ std::string m_str;
+ ForWhat m_forWhat;
+ };
+
+ class XmlWriter {
+ public:
+
+ class ScopedElement {
+ public:
+ ScopedElement( XmlWriter* writer, XmlFormatting fmt );
+
+ ScopedElement( ScopedElement&& other ) noexcept;
+ ScopedElement& operator=( ScopedElement&& other ) noexcept;
+
+ ~ScopedElement();
+
+ ScopedElement& writeText( std::string const& text, XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent );
+
+ template<typename T>
+ ScopedElement& writeAttribute( std::string const& name, T const& attribute ) {
+ m_writer->writeAttribute( name, attribute );
+ return *this;
+ }
+
+ private:
+ mutable XmlWriter* m_writer = nullptr;
+ XmlFormatting m_fmt;
+ };
+
+ XmlWriter( std::ostream& os = Catch::cout() );
+ ~XmlWriter();
+
+ XmlWriter( XmlWriter const& ) = delete;
+ XmlWriter& operator=( XmlWriter const& ) = delete;
+
+ XmlWriter& startElement( std::string const& name, XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent);
+
+ ScopedElement scopedElement( std::string const& name, XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent);
+
+ XmlWriter& endElement(XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent);
+
+ XmlWriter& writeAttribute( std::string const& name, std::string const& attribute );
+
+ XmlWriter& writeAttribute( std::string const& name, bool attribute );
+
+ template<typename T>
+ XmlWriter& writeAttribute( std::string const& name, T const& attribute ) {
+ ReusableStringStream rss;
+ rss << attribute;
+ return writeAttribute( name, rss.str() );
+ }
+
+ XmlWriter& writeText( std::string const& text, XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent);
+
+ XmlWriter& writeComment(std::string const& text, XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent);
+
+ void writeStylesheetRef( std::string const& url );
+
+ XmlWriter& writeBlankLine();
+
+ void ensureTagClosed();
+
+ private:
+
+ void applyFormatting(XmlFormatting fmt);
+
+ void writeDeclaration();
+
+ void newlineIfNecessary();
+
+ bool m_tagIsOpen = false;
+ bool m_needsNewline = false;
+ std::vector<std::string> m_tags;
+ std::string m_indent;
+ std::ostream& m_os;
+ };
+
+}
+
+// end catch_xmlwriter.h
+namespace Catch {
+
+ class JunitReporter : public CumulativeReporterBase<JunitReporter> {
+ public:
+ JunitReporter(ReporterConfig const& _config);
+
+ ~JunitReporter() override;
+
+ static std::string getDescription();
+
+ void noMatchingTestCases(std::string const& /*spec*/) override;
+
+ void testRunStarting(TestRunInfo const& runInfo) override;
+
+ void testGroupStarting(GroupInfo const& groupInfo) override;
+
+ void testCaseStarting(TestCaseInfo const& testCaseInfo) override;
+ bool assertionEnded(AssertionStats const& assertionStats) override;
+
+ void testCaseEnded(TestCaseStats const& testCaseStats) override;
+
+ void testGroupEnded(TestGroupStats const& testGroupStats) override;
+
+ void testRunEndedCumulative() override;
+
+ void writeGroup(TestGroupNode const& groupNode, double suiteTime);
+
+ void writeTestCase(TestCaseNode const& testCaseNode);
+
+ void writeSection(std::string const& className,
+ std::string const& rootName,
+ SectionNode const& sectionNode);
+
+ void writeAssertions(SectionNode const& sectionNode);
+ void writeAssertion(AssertionStats const& stats);
+
+ XmlWriter xml;
+ Timer suiteTimer;
+ std::string stdOutForSuite;
+ std::string stdErrForSuite;
+ unsigned int unexpectedExceptions = 0;
+ bool m_okToFail = false;
+ };
+
+} // end namespace Catch
+
+// end catch_reporter_junit.h
+// start catch_reporter_xml.h
+
+namespace Catch {
+ class XmlReporter : public StreamingReporterBase<XmlReporter> {
+ public:
+ XmlReporter(ReporterConfig const& _config);
+
+ ~XmlReporter() override;
+
+ static std::string getDescription();
+
+ virtual std::string getStylesheetRef() const;
+
+ void writeSourceInfo(SourceLineInfo const& sourceInfo);
+
+ public: // StreamingReporterBase
+
+ void noMatchingTestCases(std::string const& s) override;
+
+ void testRunStarting(TestRunInfo const& testInfo) override;
+
+ void testGroupStarting(GroupInfo const& groupInfo) override;
+
+ void testCaseStarting(TestCaseInfo const& testInfo) override;
+
+ void sectionStarting(SectionInfo const& sectionInfo) override;
+
+ void assertionStarting(AssertionInfo const&) override;
+
+ bool assertionEnded(AssertionStats const& assertionStats) override;
+
+ void sectionEnded(SectionStats const& sectionStats) override;
+
+ void testCaseEnded(TestCaseStats const& testCaseStats) override;
+
+ void testGroupEnded(TestGroupStats const& testGroupStats) override;
+
+ void testRunEnded(TestRunStats const& testRunStats) override;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void benchmarkPreparing(std::string const& name) override;
+ void benchmarkStarting(BenchmarkInfo const&) override;
+ void benchmarkEnded(BenchmarkStats<> const&) override;
+ void benchmarkFailed(std::string const&) override;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ private:
+ Timer m_testCaseTimer;
+ XmlWriter m_xml;
+ int m_sectionDepth = 0;
+ };
+
+} // end namespace Catch
+
+// end catch_reporter_xml.h
+
+// end catch_external_interfaces.h
+#endif
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+// start catch_benchmarking_all.hpp
+
+// A proxy header that includes all of the benchmarking headers to allow
+// concise include of the benchmarking features. You should prefer the
+// individual includes in standard use.
+
+// start catch_benchmark.hpp
+
+ // Benchmark
+
+// start catch_chronometer.hpp
+
+// User-facing chronometer
+
+
+// start catch_clock.hpp
+
+// Clocks
+
+
+#include <chrono>
+#include <ratio>
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Clock>
+ using ClockDuration = typename Clock::duration;
+ template <typename Clock>
+ using FloatDuration = std::chrono::duration<double, typename Clock::period>;
+
+ template <typename Clock>
+ using TimePoint = typename Clock::time_point;
+
+ using default_clock = std::chrono::steady_clock;
+
+ template <typename Clock>
+ struct now {
+ TimePoint<Clock> operator()() const {
+ return Clock::now();
+ }
+ };
+
+ using fp_seconds = std::chrono::duration<double, std::ratio<1>>;
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_clock.hpp
+// start catch_optimizer.hpp
+
+ // Hinting the optimizer
+
+
+#if defined(_MSC_VER)
+# include <atomic> // atomic_thread_fence
+#endif
+
+namespace Catch {
+ namespace Benchmark {
+#if defined(__GNUC__) || defined(__clang__)
+ template <typename T>
+ inline void keep_memory(T* p) {
+ asm volatile("" : : "g"(p) : "memory");
+ }
+ inline void keep_memory() {
+ asm volatile("" : : : "memory");
+ }
+
+ namespace Detail {
+ inline void optimizer_barrier() { keep_memory(); }
+ } // namespace Detail
+#elif defined(_MSC_VER)
+
+#pragma optimize("", off)
+ template <typename T>
+ inline void keep_memory(T* p) {
+ // thanks @milleniumbug
+ *reinterpret_cast<char volatile*>(p) = *reinterpret_cast<char const volatile*>(p);
+ }
+ // TODO equivalent keep_memory()
+#pragma optimize("", on)
+
+ namespace Detail {
+ inline void optimizer_barrier() {
+ std::atomic_thread_fence(std::memory_order_seq_cst);
+ }
+ } // namespace Detail
+
+#endif
+
+ template <typename T>
+ inline void deoptimize_value(T&& x) {
+ keep_memory(&x);
+ }
+
+ template <typename Fn, typename... Args>
+ inline auto invoke_deoptimized(Fn&& fn, Args&&... args) -> typename std::enable_if<!std::is_same<void, decltype(fn(args...))>::value>::type {
+ deoptimize_value(std::forward<Fn>(fn) (std::forward<Args...>(args...)));
+ }
+
+ template <typename Fn, typename... Args>
+ inline auto invoke_deoptimized(Fn&& fn, Args&&... args) -> typename std::enable_if<std::is_same<void, decltype(fn(args...))>::value>::type {
+ std::forward<Fn>(fn) (std::forward<Args...>(args...));
+ }
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_optimizer.hpp
+// start catch_complete_invoke.hpp
+
+// Invoke with a special case for void
+
+
+#include <type_traits>
+#include <utility>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename T>
+ struct CompleteType { using type = T; };
+ template <>
+ struct CompleteType<void> { struct type {}; };
+
+ template <typename T>
+ using CompleteType_t = typename CompleteType<T>::type;
+
+ template <typename Result>
+ struct CompleteInvoker {
+ template <typename Fun, typename... Args>
+ static Result invoke(Fun&& fun, Args&&... args) {
+ return std::forward<Fun>(fun)(std::forward<Args>(args)...);
+ }
+ };
+ template <>
+ struct CompleteInvoker<void> {
+ template <typename Fun, typename... Args>
+ static CompleteType_t<void> invoke(Fun&& fun, Args&&... args) {
+ std::forward<Fun>(fun)(std::forward<Args>(args)...);
+ return {};
+ }
+ };
+ template <typename Sig>
+ using ResultOf_t = typename std::result_of<Sig>::type;
+
+ // invoke and not return void :(
+ template <typename Fun, typename... Args>
+ CompleteType_t<ResultOf_t<Fun(Args...)>> complete_invoke(Fun&& fun, Args&&... args) {
+ return CompleteInvoker<ResultOf_t<Fun(Args...)>>::invoke(std::forward<Fun>(fun), std::forward<Args>(args)...);
+ }
+
+ const std::string benchmarkErrorMsg = "a benchmark failed to run successfully";
+ } // namespace Detail
+
+ template <typename Fun>
+ Detail::CompleteType_t<Detail::ResultOf_t<Fun()>> user_code(Fun&& fun) {
+ CATCH_TRY{
+ return Detail::complete_invoke(std::forward<Fun>(fun));
+ } CATCH_CATCH_ALL{
+ getResultCapture().benchmarkFailed(translateActiveException());
+ CATCH_RUNTIME_ERROR(Detail::benchmarkErrorMsg);
+ }
+ }
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_complete_invoke.hpp
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ struct ChronometerConcept {
+ virtual void start() = 0;
+ virtual void finish() = 0;
+ virtual ~ChronometerConcept() = default;
+ };
+ template <typename Clock>
+ struct ChronometerModel final : public ChronometerConcept {
+ void start() override { started = Clock::now(); }
+ void finish() override { finished = Clock::now(); }
+
+ ClockDuration<Clock> elapsed() const { return finished - started; }
+
+ TimePoint<Clock> started;
+ TimePoint<Clock> finished;
+ };
+ } // namespace Detail
+
+ struct Chronometer {
+ public:
+ template <typename Fun>
+ void measure(Fun&& fun) { measure(std::forward<Fun>(fun), is_callable<Fun(int)>()); }
+
+ int runs() const { return k; }
+
+ Chronometer(Detail::ChronometerConcept& meter, int k)
+ : impl(&meter)
+ , k(k) {}
+
+ private:
+ template <typename Fun>
+ void measure(Fun&& fun, std::false_type) {
+ measure([&fun](int) { return fun(); }, std::true_type());
+ }
+
+ template <typename Fun>
+ void measure(Fun&& fun, std::true_type) {
+ Detail::optimizer_barrier();
+ impl->start();
+ for (int i = 0; i < k; ++i) invoke_deoptimized(fun, i);
+ impl->finish();
+ Detail::optimizer_barrier();
+ }
+
+ Detail::ChronometerConcept* impl;
+ int k;
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_chronometer.hpp
+// start catch_environment.hpp
+
+// Environment information
+
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Duration>
+ struct EnvironmentEstimate {
+ Duration mean;
+ OutlierClassification outliers;
+
+ template <typename Duration2>
+ operator EnvironmentEstimate<Duration2>() const {
+ return { mean, outliers };
+ }
+ };
+ template <typename Clock>
+ struct Environment {
+ using clock_type = Clock;
+ EnvironmentEstimate<FloatDuration<Clock>> clock_resolution;
+ EnvironmentEstimate<FloatDuration<Clock>> clock_cost;
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_environment.hpp
+// start catch_execution_plan.hpp
+
+ // Execution plan
+
+
+// start catch_benchmark_function.hpp
+
+ // Dumb std::function implementation for consistent call overhead
+
+
+#include <cassert>
+#include <type_traits>
+#include <utility>
+#include <memory>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename T>
+ using Decay = typename std::decay<T>::type;
+ template <typename T, typename U>
+ struct is_related
+ : std::is_same<Decay<T>, Decay<U>> {};
+
+ /// We need to reinvent std::function because every piece of code that might add overhead
+ /// in a measurement context needs to have consistent performance characteristics so that we
+ /// can account for it in the measurement.
+ /// Implementations of std::function with optimizations that aren't always applicable, like
+ /// small buffer optimizations, are not uncommon.
+ /// This is effectively an implementation of std::function without any such optimizations;
+ /// it may be slow, but it is consistently slow.
+ struct BenchmarkFunction {
+ private:
+ struct callable {
+ virtual void call(Chronometer meter) const = 0;
+ virtual callable* clone() const = 0;
+ virtual ~callable() = default;
+ };
+ template <typename Fun>
+ struct model : public callable {
+ model(Fun&& fun) : fun(std::move(fun)) {}
+ model(Fun const& fun) : fun(fun) {}
+
+ model<Fun>* clone() const override { return new model<Fun>(*this); }
+
+ void call(Chronometer meter) const override {
+ call(meter, is_callable<Fun(Chronometer)>());
+ }
+ void call(Chronometer meter, std::true_type) const {
+ fun(meter);
+ }
+ void call(Chronometer meter, std::false_type) const {
+ meter.measure(fun);
+ }
+
+ Fun fun;
+ };
+
+ struct do_nothing { void operator()() const {} };
+
+ template <typename T>
+ BenchmarkFunction(model<T>* c) : f(c) {}
+
+ public:
+ BenchmarkFunction()
+ : f(new model<do_nothing>{ {} }) {}
+
+ template <typename Fun,
+ typename std::enable_if<!is_related<Fun, BenchmarkFunction>::value, int>::type = 0>
+ BenchmarkFunction(Fun&& fun)
+ : f(new model<typename std::decay<Fun>::type>(std::forward<Fun>(fun))) {}
+
+ BenchmarkFunction(BenchmarkFunction&& that)
+ : f(std::move(that.f)) {}
+
+ BenchmarkFunction(BenchmarkFunction const& that)
+ : f(that.f->clone()) {}
+
+ BenchmarkFunction& operator=(BenchmarkFunction&& that) {
+ f = std::move(that.f);
+ return *this;
+ }
+
+ BenchmarkFunction& operator=(BenchmarkFunction const& that) {
+ f.reset(that.f->clone());
+ return *this;
+ }
+
+ void operator()(Chronometer meter) const { f->call(meter); }
+
+ private:
+ std::unique_ptr<callable> f;
+ };
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_benchmark_function.hpp
+// start catch_repeat.hpp
+
+// repeat algorithm
+
+
+#include <type_traits>
+#include <utility>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename Fun>
+ struct repeater {
+ void operator()(int k) const {
+ for (int i = 0; i < k; ++i) {
+ fun();
+ }
+ }
+ Fun fun;
+ };
+ template <typename Fun>
+ repeater<typename std::decay<Fun>::type> repeat(Fun&& fun) {
+ return { std::forward<Fun>(fun) };
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_repeat.hpp
+// start catch_run_for_at_least.hpp
+
+// Run a function for a minimum amount of time
+
+
+// start catch_measure.hpp
+
+// Measure
+
+
+// start catch_timing.hpp
+
+// Timing
+
+
+#include <tuple>
+#include <type_traits>
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Duration, typename Result>
+ struct Timing {
+ Duration elapsed;
+ Result result;
+ int iterations;
+ };
+ template <typename Clock, typename Sig>
+ using TimingOf = Timing<ClockDuration<Clock>, Detail::CompleteType_t<Detail::ResultOf_t<Sig>>>;
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_timing.hpp
+#include <utility>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename Clock, typename Fun, typename... Args>
+ TimingOf<Clock, Fun(Args...)> measure(Fun&& fun, Args&&... args) {
+ auto start = Clock::now();
+ auto&& r = Detail::complete_invoke(fun, std::forward<Args>(args)...);
+ auto end = Clock::now();
+ auto delta = end - start;
+ return { delta, std::forward<decltype(r)>(r), 1 };
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_measure.hpp
+#include <utility>
+#include <type_traits>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename Clock, typename Fun>
+ TimingOf<Clock, Fun(int)> measure_one(Fun&& fun, int iters, std::false_type) {
+ return Detail::measure<Clock>(fun, iters);
+ }
+ template <typename Clock, typename Fun>
+ TimingOf<Clock, Fun(Chronometer)> measure_one(Fun&& fun, int iters, std::true_type) {
+ Detail::ChronometerModel<Clock> meter;
+ auto&& result = Detail::complete_invoke(fun, Chronometer(meter, iters));
+
+ return { meter.elapsed(), std::move(result), iters };
+ }
+
+ template <typename Clock, typename Fun>
+ using run_for_at_least_argument_t = typename std::conditional<is_callable<Fun(Chronometer)>::value, Chronometer, int>::type;
+
+ struct optimized_away_error : std::exception {
+ const char* what() const noexcept override {
+ return "could not measure benchmark, maybe it was optimized away";
+ }
+ };
+
+ template <typename Clock, typename Fun>
+ TimingOf<Clock, Fun(run_for_at_least_argument_t<Clock, Fun>)> run_for_at_least(ClockDuration<Clock> how_long, int seed, Fun&& fun) {
+ auto iters = seed;
+ while (iters < (1 << 30)) {
+ auto&& Timing = measure_one<Clock>(fun, iters, is_callable<Fun(Chronometer)>());
+
+ if (Timing.elapsed >= how_long) {
+ return { Timing.elapsed, std::move(Timing.result), iters };
+ }
+ iters *= 2;
+ }
+ throw optimized_away_error{};
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_run_for_at_least.hpp
+#include <algorithm>
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Duration>
+ struct ExecutionPlan {
+ int iterations_per_sample;
+ Duration estimated_duration;
+ Detail::BenchmarkFunction benchmark;
+ Duration warmup_time;
+ int warmup_iterations;
+
+ template <typename Duration2>
+ operator ExecutionPlan<Duration2>() const {
+ return { iterations_per_sample, estimated_duration, benchmark, warmup_time, warmup_iterations };
+ }
+
+ template <typename Clock>
+ std::vector<FloatDuration<Clock>> run(const IConfig &cfg, Environment<FloatDuration<Clock>> env) const {
+ // warmup a bit
+ Detail::run_for_at_least<Clock>(std::chrono::duration_cast<ClockDuration<Clock>>(warmup_time), warmup_iterations, Detail::repeat(now<Clock>{}));
+
+ std::vector<FloatDuration<Clock>> times;
+ times.reserve(cfg.benchmarkSamples());
+ std::generate_n(std::back_inserter(times), cfg.benchmarkSamples(), [this, env] {
+ Detail::ChronometerModel<Clock> model;
+ this->benchmark(Chronometer(model, iterations_per_sample));
+ auto sample_time = model.elapsed() - env.clock_cost.mean;
+ if (sample_time < FloatDuration<Clock>::zero()) sample_time = FloatDuration<Clock>::zero();
+ return sample_time / iterations_per_sample;
+ });
+ return times;
+ }
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_execution_plan.hpp
+// start catch_estimate_clock.hpp
+
+ // Environment measurement
+
+
+// start catch_stats.hpp
+
+// Statistical analysis tools
+
+
+#include <algorithm>
+#include <functional>
+#include <vector>
+#include <iterator>
+#include <numeric>
+#include <tuple>
+#include <cmath>
+#include <utility>
+#include <cstddef>
+#include <random>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ using sample = std::vector<double>;
+
+ double weighted_average_quantile(int k, int q, std::vector<double>::iterator first, std::vector<double>::iterator last);
+
+ template <typename Iterator>
+ OutlierClassification classify_outliers(Iterator first, Iterator last) {
+ std::vector<double> copy(first, last);
+
+ auto q1 = weighted_average_quantile(1, 4, copy.begin(), copy.end());
+ auto q3 = weighted_average_quantile(3, 4, copy.begin(), copy.end());
+ auto iqr = q3 - q1;
+ auto los = q1 - (iqr * 3.);
+ auto lom = q1 - (iqr * 1.5);
+ auto him = q3 + (iqr * 1.5);
+ auto his = q3 + (iqr * 3.);
+
+ OutlierClassification o;
+ for (; first != last; ++first) {
+ auto&& t = *first;
+ if (t < los) ++o.low_severe;
+ else if (t < lom) ++o.low_mild;
+ else if (t > his) ++o.high_severe;
+ else if (t > him) ++o.high_mild;
+ ++o.samples_seen;
+ }
+ return o;
+ }
+
+ template <typename Iterator>
+ double mean(Iterator first, Iterator last) {
+ auto count = last - first;
+ double sum = std::accumulate(first, last, 0.);
+ return sum / count;
+ }
+
+ template <typename URng, typename Iterator, typename Estimator>
+ sample resample(URng& rng, int resamples, Iterator first, Iterator last, Estimator& estimator) {
+ auto n = last - first;
+ std::uniform_int_distribution<decltype(n)> dist(0, n - 1);
+
+ sample out;
+ out.reserve(resamples);
+ std::generate_n(std::back_inserter(out), resamples, [n, first, &estimator, &dist, &rng] {
+ std::vector<double> resampled;
+ resampled.reserve(n);
+ std::generate_n(std::back_inserter(resampled), n, [first, &dist, &rng] { return first[dist(rng)]; });
+ return estimator(resampled.begin(), resampled.end());
+ });
+ std::sort(out.begin(), out.end());
+ return out;
+ }
+
+ template <typename Estimator, typename Iterator>
+ sample jackknife(Estimator&& estimator, Iterator first, Iterator last) {
+ auto n = last - first;
+ auto second = std::next(first);
+ sample results;
+ results.reserve(n);
+
+ for (auto it = first; it != last; ++it) {
+ std::iter_swap(it, first);
+ results.push_back(estimator(second, last));
+ }
+
+ return results;
+ }
+
+ inline double normal_cdf(double x) {
+ return std::erfc(-x / std::sqrt(2.0)) / 2.0;
+ }
+
+ double erfc_inv(double x);
+
+ double normal_quantile(double p);
+
+ template <typename Iterator, typename Estimator>
+ Estimate<double> bootstrap(double confidence_level, Iterator first, Iterator last, sample const& resample, Estimator&& estimator) {
+ auto n_samples = last - first;
+
+ double point = estimator(first, last);
+ // Degenerate case with a single sample
+ if (n_samples == 1) return { point, point, point, confidence_level };
+
+ sample jack = jackknife(estimator, first, last);
+ double jack_mean = mean(jack.begin(), jack.end());
+ double sum_squares, sum_cubes;
+ std::tie(sum_squares, sum_cubes) = std::accumulate(jack.begin(), jack.end(), std::make_pair(0., 0.), [jack_mean](std::pair<double, double> sqcb, double x) -> std::pair<double, double> {
+ auto d = jack_mean - x;
+ auto d2 = d * d;
+ auto d3 = d2 * d;
+ return { sqcb.first + d2, sqcb.second + d3 };
+ });
+
+ double accel = sum_cubes / (6 * std::pow(sum_squares, 1.5));
+ int n = static_cast<int>(resample.size());
+ double prob_n = std::count_if(resample.begin(), resample.end(), [point](double x) { return x < point; }) / (double)n;
+ // degenerate case with uniform samples
+ if (prob_n == 0) return { point, point, point, confidence_level };
+
+ double bias = normal_quantile(prob_n);
+ double z1 = normal_quantile((1. - confidence_level) / 2.);
+
+ auto cumn = [n](double x) -> int {
+ return std::lround(normal_cdf(x) * n); };
+ auto a = [bias, accel](double b) { return bias + b / (1. - accel * b); };
+ double b1 = bias + z1;
+ double b2 = bias - z1;
+ double a1 = a(b1);
+ double a2 = a(b2);
+ auto lo = std::max(cumn(a1), 0);
+ auto hi = std::min(cumn(a2), n - 1);
+
+ return { point, resample[lo], resample[hi], confidence_level };
+ }
+
+ double outlier_variance(Estimate<double> mean, Estimate<double> stddev, int n);
+
+ struct bootstrap_analysis {
+ Estimate<double> mean;
+ Estimate<double> standard_deviation;
+ double outlier_variance;
+ };
+
+ bootstrap_analysis analyse_samples(double confidence_level, int n_resamples, std::vector<double>::iterator first, std::vector<double>::iterator last);
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_stats.hpp
+#include <algorithm>
+#include <iterator>
+#include <tuple>
+#include <vector>
+#include <cmath>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename Clock>
+ std::vector<double> resolution(int k) {
+ std::vector<TimePoint<Clock>> times;
+ times.reserve(k + 1);
+ std::generate_n(std::back_inserter(times), k + 1, now<Clock>{});
+
+ std::vector<double> deltas;
+ deltas.reserve(k);
+ std::transform(std::next(times.begin()), times.end(), times.begin(),
+ std::back_inserter(deltas),
+ [](TimePoint<Clock> a, TimePoint<Clock> b) { return static_cast<double>((a - b).count()); });
+
+ return deltas;
+ }
+
+ const auto warmup_iterations = 10000;
+ const auto warmup_time = std::chrono::milliseconds(100);
+ const auto minimum_ticks = 1000;
+ const auto warmup_seed = 10000;
+ const auto clock_resolution_estimation_time = std::chrono::milliseconds(500);
+ const auto clock_cost_estimation_time_limit = std::chrono::seconds(1);
+ const auto clock_cost_estimation_tick_limit = 100000;
+ const auto clock_cost_estimation_time = std::chrono::milliseconds(10);
+ const auto clock_cost_estimation_iterations = 10000;
+
+ template <typename Clock>
+ int warmup() {
+ return run_for_at_least<Clock>(std::chrono::duration_cast<ClockDuration<Clock>>(warmup_time), warmup_seed, &resolution<Clock>)
+ .iterations;
+ }
+ template <typename Clock>
+ EnvironmentEstimate<FloatDuration<Clock>> estimate_clock_resolution(int iterations) {
+ auto r = run_for_at_least<Clock>(std::chrono::duration_cast<ClockDuration<Clock>>(clock_resolution_estimation_time), iterations, &resolution<Clock>)
+ .result;
+ return {
+ FloatDuration<Clock>(mean(r.begin(), r.end())),
+ classify_outliers(r.begin(), r.end()),
+ };
+ }
+ template <typename Clock>
+ EnvironmentEstimate<FloatDuration<Clock>> estimate_clock_cost(FloatDuration<Clock> resolution) {
+ auto time_limit = std::min(resolution * clock_cost_estimation_tick_limit, FloatDuration<Clock>(clock_cost_estimation_time_limit));
+ auto time_clock = [](int k) {
+ return Detail::measure<Clock>([k] {
+ for (int i = 0; i < k; ++i) {
+ volatile auto ignored = Clock::now();
+ (void)ignored;
+ }
+ }).elapsed;
+ };
+ time_clock(1);
+ int iters = clock_cost_estimation_iterations;
+ auto&& r = run_for_at_least<Clock>(std::chrono::duration_cast<ClockDuration<Clock>>(clock_cost_estimation_time), iters, time_clock);
+ std::vector<double> times;
+ int nsamples = static_cast<int>(std::ceil(time_limit / r.elapsed));
+ times.reserve(nsamples);
+ std::generate_n(std::back_inserter(times), nsamples, [time_clock, &r] {
+ return static_cast<double>((time_clock(r.iterations) / r.iterations).count());
+ });
+ return {
+ FloatDuration<Clock>(mean(times.begin(), times.end())),
+ classify_outliers(times.begin(), times.end()),
+ };
+ }
+
+ template <typename Clock>
+ Environment<FloatDuration<Clock>> measure_environment() {
+ static Environment<FloatDuration<Clock>>* env = nullptr;
+ if (env) {
+ return *env;
+ }
+
+ auto iters = Detail::warmup<Clock>();
+ auto resolution = Detail::estimate_clock_resolution<Clock>(iters);
+ auto cost = Detail::estimate_clock_cost<Clock>(resolution.mean);
+
+ env = new Environment<FloatDuration<Clock>>{ resolution, cost };
+ return *env;
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_estimate_clock.hpp
+// start catch_analyse.hpp
+
+ // Run and analyse one benchmark
+
+
+// start catch_sample_analysis.hpp
+
+// Benchmark results
+
+
+#include <algorithm>
+#include <vector>
+#include <string>
+#include <iterator>
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Duration>
+ struct SampleAnalysis {
+ std::vector<Duration> samples;
+ Estimate<Duration> mean;
+ Estimate<Duration> standard_deviation;
+ OutlierClassification outliers;
+ double outlier_variance;
+
+ template <typename Duration2>
+ operator SampleAnalysis<Duration2>() const {
+ std::vector<Duration2> samples2;
+ samples2.reserve(samples.size());
+ std::transform(samples.begin(), samples.end(), std::back_inserter(samples2), [](Duration d) { return Duration2(d); });
+ return {
+ std::move(samples2),
+ mean,
+ standard_deviation,
+ outliers,
+ outlier_variance,
+ };
+ }
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_sample_analysis.hpp
+#include <algorithm>
+#include <iterator>
+#include <vector>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename Duration, typename Iterator>
+ SampleAnalysis<Duration> analyse(const IConfig &cfg, Environment<Duration>, Iterator first, Iterator last) {
+ if (!cfg.benchmarkNoAnalysis()) {
+ std::vector<double> samples;
+ samples.reserve(last - first);
+ std::transform(first, last, std::back_inserter(samples), [](Duration d) { return d.count(); });
+
+ auto analysis = Catch::Benchmark::Detail::analyse_samples(cfg.benchmarkConfidenceInterval(), cfg.benchmarkResamples(), samples.begin(), samples.end());
+ auto outliers = Catch::Benchmark::Detail::classify_outliers(samples.begin(), samples.end());
+
+ auto wrap_estimate = [](Estimate<double> e) {
+ return Estimate<Duration> {
+ Duration(e.point),
+ Duration(e.lower_bound),
+ Duration(e.upper_bound),
+ e.confidence_interval,
+ };
+ };
+ std::vector<Duration> samples2;
+ samples2.reserve(samples.size());
+ std::transform(samples.begin(), samples.end(), std::back_inserter(samples2), [](double d) { return Duration(d); });
+ return {
+ std::move(samples2),
+ wrap_estimate(analysis.mean),
+ wrap_estimate(analysis.standard_deviation),
+ outliers,
+ analysis.outlier_variance,
+ };
+ } else {
+ std::vector<Duration> samples;
+ samples.reserve(last - first);
+
+ Duration mean = Duration(0);
+ int i = 0;
+ for (auto it = first; it < last; ++it, ++i) {
+ samples.push_back(Duration(*it));
+ mean += Duration(*it);
+ }
+ mean /= i;
+
+ return {
+ std::move(samples),
+ Estimate<Duration>{mean, mean, mean, 0.0},
+ Estimate<Duration>{Duration(0), Duration(0), Duration(0), 0.0},
+ OutlierClassification{},
+ 0.0
+ };
+ }
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_analyse.hpp
+#include <algorithm>
+#include <functional>
+#include <string>
+#include <vector>
+#include <cmath>
+
+namespace Catch {
+ namespace Benchmark {
+ struct Benchmark {
+ Benchmark(std::string &&name)
+ : name(std::move(name)) {}
+
+ template <class FUN>
+ Benchmark(std::string &&name, FUN &&func)
+ : fun(std::move(func)), name(std::move(name)) {}
+
+ template <typename Clock>
+ ExecutionPlan<FloatDuration<Clock>> prepare(const IConfig &cfg, Environment<FloatDuration<Clock>> env) const {
+ auto min_time = env.clock_resolution.mean * Detail::minimum_ticks;
+ auto run_time = std::max(min_time, std::chrono::duration_cast<decltype(min_time)>(cfg.benchmarkWarmupTime()));
+ auto&& test = Detail::run_for_at_least<Clock>(std::chrono::duration_cast<ClockDuration<Clock>>(run_time), 1, fun);
+ int new_iters = static_cast<int>(std::ceil(min_time * test.iterations / test.elapsed));
+ return { new_iters, test.elapsed / test.iterations * new_iters * cfg.benchmarkSamples(), fun, std::chrono::duration_cast<FloatDuration<Clock>>(cfg.benchmarkWarmupTime()), Detail::warmup_iterations };
+ }
+
+ template <typename Clock = default_clock>
+ void run() {
+ IConfigPtr cfg = getCurrentContext().getConfig();
+
+ auto env = Detail::measure_environment<Clock>();
+
+ getResultCapture().benchmarkPreparing(name);
+ CATCH_TRY{
+ auto plan = user_code([&] {
+ return prepare<Clock>(*cfg, env);
+ });
+
+ BenchmarkInfo info {
+ name,
+ plan.estimated_duration.count(),
+ plan.iterations_per_sample,
+ cfg->benchmarkSamples(),
+ cfg->benchmarkResamples(),
+ env.clock_resolution.mean.count(),
+ env.clock_cost.mean.count()
+ };
+
+ getResultCapture().benchmarkStarting(info);
+
+ auto samples = user_code([&] {
+ return plan.template run<Clock>(*cfg, env);
+ });
+
+ auto analysis = Detail::analyse(*cfg, env, samples.begin(), samples.end());
+ BenchmarkStats<FloatDuration<Clock>> stats{ info, analysis.samples, analysis.mean, analysis.standard_deviation, analysis.outliers, analysis.outlier_variance };
+ getResultCapture().benchmarkEnded(stats);
+
+ } CATCH_CATCH_ALL{
+ if (translateActiveException() != Detail::benchmarkErrorMsg) // benchmark errors have been reported, otherwise rethrow.
+ std::rethrow_exception(std::current_exception());
+ }
+ }
+
+ // sets lambda to be used in fun *and* executes benchmark!
+ template <typename Fun,
+ typename std::enable_if<!Detail::is_related<Fun, Benchmark>::value, int>::type = 0>
+ Benchmark & operator=(Fun func) {
+ fun = Detail::BenchmarkFunction(func);
+ run();
+ return *this;
+ }
+
+ explicit operator bool() {
+ return true;
+ }
+
+ private:
+ Detail::BenchmarkFunction fun;
+ std::string name;
+ };
+ }
+} // namespace Catch
+
+#define INTERNAL_CATCH_GET_1_ARG(arg1, arg2, ...) arg1
+#define INTERNAL_CATCH_GET_2_ARG(arg1, arg2, ...) arg2
+
+#define INTERNAL_CATCH_BENCHMARK(BenchmarkName, name, benchmarkIndex)\
+ if( Catch::Benchmark::Benchmark BenchmarkName{name} ) \
+ BenchmarkName = [&](int benchmarkIndex)
+
+#define INTERNAL_CATCH_BENCHMARK_ADVANCED(BenchmarkName, name)\
+ if( Catch::Benchmark::Benchmark BenchmarkName{name} ) \
+ BenchmarkName = [&]
+
+// end catch_benchmark.hpp
+// start catch_constructor.hpp
+
+// Constructor and destructor helpers
+
+
+#include <type_traits>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename T, bool Destruct>
+ struct ObjectStorage
+ {
+ using TStorage = typename std::aligned_storage<sizeof(T), std::alignment_of<T>::value>::type;
+
+ ObjectStorage() : data() {}
+
+ ObjectStorage(const ObjectStorage& other)
+ {
+ new(&data) T(other.stored_object());
+ }
+
+ ObjectStorage(ObjectStorage&& other)
+ {
+ new(&data) T(std::move(other.stored_object()));
+ }
+
+ ~ObjectStorage() { destruct_on_exit<T>(); }
+
+ template <typename... Args>
+ void construct(Args&&... args)
+ {
+ new (&data) T(std::forward<Args>(args)...);
+ }
+
+ template <bool AllowManualDestruction = !Destruct>
+ typename std::enable_if<AllowManualDestruction>::type destruct()
+ {
+ stored_object().~T();
+ }
+
+ private:
+ // If this is a constructor benchmark, destruct the underlying object
+ template <typename U>
+ void destruct_on_exit(typename std::enable_if<Destruct, U>::type* = 0) { destruct<true>(); }
+ // Otherwise, don't
+ template <typename U>
+ void destruct_on_exit(typename std::enable_if<!Destruct, U>::type* = 0) { }
+
+ T& stored_object() {
+ return *static_cast<T*>(static_cast<void*>(&data));
+ }
+
+ T const& stored_object() const {
+ return *static_cast<T*>(static_cast<void*>(&data));
+ }
+
+ TStorage data;
+ };
+ }
+
+ template <typename T>
+ using storage_for = Detail::ObjectStorage<T, true>;
+
+ template <typename T>
+ using destructable_object = Detail::ObjectStorage<T, false>;
+ }
+}
+
+// end catch_constructor.hpp
+// end catch_benchmarking_all.hpp
+#endif
+
+#endif // ! CATCH_CONFIG_IMPL_ONLY
+
+#ifdef CATCH_IMPL
+// start catch_impl.hpp
+
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wweak-vtables"
+#endif
+
+// Keep these here for external reporters
+// start catch_test_case_tracker.h
+
+#include <string>
+#include <vector>
+#include <memory>
+
+namespace Catch {
+namespace TestCaseTracking {
+
+ struct NameAndLocation {
+ std::string name;
+ SourceLineInfo location;
+
+ NameAndLocation( std::string const& _name, SourceLineInfo const& _location );
+ };
+
+ struct ITracker;
+
+ using ITrackerPtr = std::shared_ptr<ITracker>;
+
+ struct ITracker {
+ virtual ~ITracker();
+
+ // static queries
+ virtual NameAndLocation const& nameAndLocation() const = 0;
+
+ // dynamic queries
+ virtual bool isComplete() const = 0; // Successfully completed or failed
+ virtual bool isSuccessfullyCompleted() const = 0;
+ virtual bool isOpen() const = 0; // Started but not complete
+ virtual bool hasChildren() const = 0;
+
+ virtual ITracker& parent() = 0;
+
+ // actions
+ virtual void close() = 0; // Successfully complete
+ virtual void fail() = 0;
+ virtual void markAsNeedingAnotherRun() = 0;
+
+ virtual void addChild( ITrackerPtr const& child ) = 0;
+ virtual ITrackerPtr findChild( NameAndLocation const& nameAndLocation ) = 0;
+ virtual void openChild() = 0;
+
+ // Debug/ checking
+ virtual bool isSectionTracker() const = 0;
+ virtual bool isGeneratorTracker() const = 0;
+ };
+
+ class TrackerContext {
+
+ enum RunState {
+ NotStarted,
+ Executing,
+ CompletedCycle
+ };
+
+ ITrackerPtr m_rootTracker;
+ ITracker* m_currentTracker = nullptr;
+ RunState m_runState = NotStarted;
+
+ public:
+
+ ITracker& startRun();
+ void endRun();
+
+ void startCycle();
+ void completeCycle();
+
+ bool completedCycle() const;
+ ITracker& currentTracker();
+ void setCurrentTracker( ITracker* tracker );
+ };
+
+ class TrackerBase : public ITracker {
+ protected:
+ enum CycleState {
+ NotStarted,
+ Executing,
+ ExecutingChildren,
+ NeedsAnotherRun,
+ CompletedSuccessfully,
+ Failed
+ };
+
+ using Children = std::vector<ITrackerPtr>;
+ NameAndLocation m_nameAndLocation;
+ TrackerContext& m_ctx;
+ ITracker* m_parent;
+ Children m_children;
+ CycleState m_runState = NotStarted;
+
+ public:
+ TrackerBase( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent );
+
+ NameAndLocation const& nameAndLocation() const override;
+ bool isComplete() const override;
+ bool isSuccessfullyCompleted() const override;
+ bool isOpen() const override;
+ bool hasChildren() const override;
+
+ void addChild( ITrackerPtr const& child ) override;
+
+ ITrackerPtr findChild( NameAndLocation const& nameAndLocation ) override;
+ ITracker& parent() override;
+
+ void openChild() override;
+
+ bool isSectionTracker() const override;
+ bool isGeneratorTracker() const override;
+
+ void open();
+
+ void close() override;
+ void fail() override;
+ void markAsNeedingAnotherRun() override;
+
+ private:
+ void moveToParent();
+ void moveToThis();
+ };
+
+ class SectionTracker : public TrackerBase {
+ std::vector<std::string> m_filters;
+ std::string m_trimmed_name;
+ public:
+ SectionTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent );
+
+ bool isSectionTracker() const override;
+
+ bool isComplete() const override;
+
+ static SectionTracker& acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation );
+
+ void tryOpen();
+
+ void addInitialFilters( std::vector<std::string> const& filters );
+ void addNextFilters( std::vector<std::string> const& filters );
+ };
+
+} // namespace TestCaseTracking
+
+using TestCaseTracking::ITracker;
+using TestCaseTracking::TrackerContext;
+using TestCaseTracking::SectionTracker;
+
+} // namespace Catch
+
+// end catch_test_case_tracker.h
+
+// start catch_leak_detector.h
+
+namespace Catch {
+
+ struct LeakDetector {
+ LeakDetector();
+ ~LeakDetector();
+ };
+
+}
+// end catch_leak_detector.h
+// Cpp files will be included in the single-header file here
+// start catch_stats.cpp
+
+// Statistical analysis tools
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+
+#include <cassert>
+#include <random>
+
+#if defined(CATCH_CONFIG_USE_ASYNC)
+#include <future>
+#endif
+
+namespace {
+ double erf_inv(double x) {
+ // Code accompanying the article "Approximating the erfinv function" in GPU Computing Gems, Volume 2
+ double w, p;
+
+ w = -log((1.0 - x) * (1.0 + x));
+
+ if (w < 6.250000) {
+ w = w - 3.125000;
+ p = -3.6444120640178196996e-21;
+ p = -1.685059138182016589e-19 + p * w;
+ p = 1.2858480715256400167e-18 + p * w;
+ p = 1.115787767802518096e-17 + p * w;
+ p = -1.333171662854620906e-16 + p * w;
+ p = 2.0972767875968561637e-17 + p * w;
+ p = 6.6376381343583238325e-15 + p * w;
+ p = -4.0545662729752068639e-14 + p * w;
+ p = -8.1519341976054721522e-14 + p * w;
+ p = 2.6335093153082322977e-12 + p * w;
+ p = -1.2975133253453532498e-11 + p * w;
+ p = -5.4154120542946279317e-11 + p * w;
+ p = 1.051212273321532285e-09 + p * w;
+ p = -4.1126339803469836976e-09 + p * w;
+ p = -2.9070369957882005086e-08 + p * w;
+ p = 4.2347877827932403518e-07 + p * w;
+ p = -1.3654692000834678645e-06 + p * w;
+ p = -1.3882523362786468719e-05 + p * w;
+ p = 0.0001867342080340571352 + p * w;
+ p = -0.00074070253416626697512 + p * w;
+ p = -0.0060336708714301490533 + p * w;
+ p = 0.24015818242558961693 + p * w;
+ p = 1.6536545626831027356 + p * w;
+ } else if (w < 16.000000) {
+ w = sqrt(w) - 3.250000;
+ p = 2.2137376921775787049e-09;
+ p = 9.0756561938885390979e-08 + p * w;
+ p = -2.7517406297064545428e-07 + p * w;
+ p = 1.8239629214389227755e-08 + p * w;
+ p = 1.5027403968909827627e-06 + p * w;
+ p = -4.013867526981545969e-06 + p * w;
+ p = 2.9234449089955446044e-06 + p * w;
+ p = 1.2475304481671778723e-05 + p * w;
+ p = -4.7318229009055733981e-05 + p * w;
+ p = 6.8284851459573175448e-05 + p * w;
+ p = 2.4031110387097893999e-05 + p * w;
+ p = -0.0003550375203628474796 + p * w;
+ p = 0.00095328937973738049703 + p * w;
+ p = -0.0016882755560235047313 + p * w;
+ p = 0.0024914420961078508066 + p * w;
+ p = -0.0037512085075692412107 + p * w;
+ p = 0.005370914553590063617 + p * w;
+ p = 1.0052589676941592334 + p * w;
+ p = 3.0838856104922207635 + p * w;
+ } else {
+ w = sqrt(w) - 5.000000;
+ p = -2.7109920616438573243e-11;
+ p = -2.5556418169965252055e-10 + p * w;
+ p = 1.5076572693500548083e-09 + p * w;
+ p = -3.7894654401267369937e-09 + p * w;
+ p = 7.6157012080783393804e-09 + p * w;
+ p = -1.4960026627149240478e-08 + p * w;
+ p = 2.9147953450901080826e-08 + p * w;
+ p = -6.7711997758452339498e-08 + p * w;
+ p = 2.2900482228026654717e-07 + p * w;
+ p = -9.9298272942317002539e-07 + p * w;
+ p = 4.5260625972231537039e-06 + p * w;
+ p = -1.9681778105531670567e-05 + p * w;
+ p = 7.5995277030017761139e-05 + p * w;
+ p = -0.00021503011930044477347 + p * w;
+ p = -0.00013871931833623122026 + p * w;
+ p = 1.0103004648645343977 + p * w;
+ p = 4.8499064014085844221 + p * w;
+ }
+ return p * x;
+ }
+
+ double standard_deviation(std::vector<double>::iterator first, std::vector<double>::iterator last) {
+ auto m = Catch::Benchmark::Detail::mean(first, last);
+ double variance = std::accumulate(first, last, 0., [m](double a, double b) {
+ double diff = b - m;
+ return a + diff * diff;
+ }) / (last - first);
+ return std::sqrt(variance);
+ }
+
+}
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+
+ double weighted_average_quantile(int k, int q, std::vector<double>::iterator first, std::vector<double>::iterator last) {
+ auto count = last - first;
+ double idx = (count - 1) * k / static_cast<double>(q);
+ int j = static_cast<int>(idx);
+ double g = idx - j;
+ std::nth_element(first, first + j, last);
+ auto xj = first[j];
+ if (g == 0) return xj;
+
+ auto xj1 = *std::min_element(first + (j + 1), last);
+ return xj + g * (xj1 - xj);
+ }
+
+ double erfc_inv(double x) {
+ return erf_inv(1.0 - x);
+ }
+
+ double normal_quantile(double p) {
+ static const double ROOT_TWO = std::sqrt(2.0);
+
+ double result = 0.0;
+ assert(p >= 0 && p <= 1);
+ if (p < 0 || p > 1) {
+ return result;
+ }
+
+ result = -erfc_inv(2.0 * p);
+ // result *= normal distribution standard deviation (1.0) * sqrt(2)
+ result *= /*sd * */ ROOT_TWO;
+ // result += normal disttribution mean (0)
+ return result;
+ }
+
+ double outlier_variance(Estimate<double> mean, Estimate<double> stddev, int n) {
+ double sb = stddev.point;
+ double mn = mean.point / n;
+ double mg_min = mn / 2.;
+ double sg = std::min(mg_min / 4., sb / std::sqrt(n));
+ double sg2 = sg * sg;
+ double sb2 = sb * sb;
+
+ auto c_max = [n, mn, sb2, sg2](double x) -> double {
+ double k = mn - x;
+ double d = k * k;
+ double nd = n * d;
+ double k0 = -n * nd;
+ double k1 = sb2 - n * sg2 + nd;
+ double det = k1 * k1 - 4 * sg2 * k0;
+ return (int)(-2. * k0 / (k1 + std::sqrt(det)));
+ };
+
+ auto var_out = [n, sb2, sg2](double c) {
+ double nc = n - c;
+ return (nc / n) * (sb2 - nc * sg2);
+ };
+
+ return std::min(var_out(1), var_out(std::min(c_max(0.), c_max(mg_min)))) / sb2;
+ }
+
+ bootstrap_analysis analyse_samples(double confidence_level, int n_resamples, std::vector<double>::iterator first, std::vector<double>::iterator last) {
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS
+ static std::random_device entropy;
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+ auto n = static_cast<int>(last - first); // seriously, one can't use integral types without hell in C++
+
+ auto mean = &Detail::mean<std::vector<double>::iterator>;
+ auto stddev = &standard_deviation;
+
+#if defined(CATCH_CONFIG_USE_ASYNC)
+ auto Estimate = [=](double(*f)(std::vector<double>::iterator, std::vector<double>::iterator)) {
+ auto seed = entropy();
+ return std::async(std::launch::async, [=] {
+ std::mt19937 rng(seed);
+ auto resampled = resample(rng, n_resamples, first, last, f);
+ return bootstrap(confidence_level, first, last, resampled, f);
+ });
+ };
+
+ auto mean_future = Estimate(mean);
+ auto stddev_future = Estimate(stddev);
+
+ auto mean_estimate = mean_future.get();
+ auto stddev_estimate = stddev_future.get();
+#else
+ auto Estimate = [=](double(*f)(std::vector<double>::iterator, std::vector<double>::iterator)) {
+ auto seed = entropy();
+ std::mt19937 rng(seed);
+ auto resampled = resample(rng, n_resamples, first, last, f);
+ return bootstrap(confidence_level, first, last, resampled, f);
+ };
+
+ auto mean_estimate = Estimate(mean);
+ auto stddev_estimate = Estimate(stddev);
+#endif // CATCH_USE_ASYNC
+
+ double outlier_variance = Detail::outlier_variance(mean_estimate, stddev_estimate, n);
+
+ return { mean_estimate, stddev_estimate, outlier_variance };
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+// end catch_stats.cpp
+// start catch_approx.cpp
+
+#include <cmath>
+#include <limits>
+
+namespace {
+
+// Performs equivalent check of std::fabs(lhs - rhs) <= margin
+// But without the subtraction to allow for INFINITY in comparison
+bool marginComparison(double lhs, double rhs, double margin) {
+ return (lhs + margin >= rhs) && (rhs + margin >= lhs);
+}
+
+}
+
+namespace Catch {
+namespace Detail {
+
+ Approx::Approx ( double value )
+ : m_epsilon( std::numeric_limits<float>::epsilon()*100 ),
+ m_margin( 0.0 ),
+ m_scale( 0.0 ),
+ m_value( value )
+ {}
+
+ Approx Approx::custom() {
+ return Approx( 0 );
+ }
+
+ Approx Approx::operator-() const {
+ auto temp(*this);
+ temp.m_value = -temp.m_value;
+ return temp;
+ }
+
+ std::string Approx::toString() const {
+ ReusableStringStream rss;
+ rss << "Approx( " << ::Catch::Detail::stringify( m_value ) << " )";
+ return rss.str();
+ }
+
+ bool Approx::equalityComparisonImpl(const double other) const {
+ // First try with fixed margin, then compute margin based on epsilon, scale and Approx's value
+ // Thanks to Richard Harris for his help refining the scaled margin value
+ return marginComparison(m_value, other, m_margin)
+ || marginComparison(m_value, other, m_epsilon * (m_scale + std::fabs(std::isinf(m_value)? 0 : m_value)));
+ }
+
+ void Approx::setMargin(double newMargin) {
+ CATCH_ENFORCE(newMargin >= 0,
+ "Invalid Approx::margin: " << newMargin << '.'
+ << " Approx::Margin has to be non-negative.");
+ m_margin = newMargin;
+ }
+
+ void Approx::setEpsilon(double newEpsilon) {
+ CATCH_ENFORCE(newEpsilon >= 0 && newEpsilon <= 1.0,
+ "Invalid Approx::epsilon: " << newEpsilon << '.'
+ << " Approx::epsilon has to be in [0, 1]");
+ m_epsilon = newEpsilon;
+ }
+
+} // end namespace Detail
+
+namespace literals {
+ Detail::Approx operator "" _a(long double val) {
+ return Detail::Approx(val);
+ }
+ Detail::Approx operator "" _a(unsigned long long val) {
+ return Detail::Approx(val);
+ }
+} // end namespace literals
+
+std::string StringMaker<Catch::Detail::Approx>::convert(Catch::Detail::Approx const& value) {
+ return value.toString();
+}
+
+} // end namespace Catch
+// end catch_approx.cpp
+// start catch_assertionhandler.cpp
+
+// start catch_debugger.h
+
+namespace Catch {
+ bool isDebuggerActive();
+}
+
+#ifdef CATCH_PLATFORM_MAC
+
+ #if defined(__i386__) || defined(__x86_64__)
+ #define CATCH_TRAP() __asm__("int $3\n" : : ) /* NOLINT */
+ #elif defined(__aarch64__)
+ #define CATCH_TRAP() __asm__(".inst 0xd4200000")
+ #endif
+
+#elif defined(CATCH_PLATFORM_IPHONE)
+
+ // use inline assembler
+ #if defined(__i386__) || defined(__x86_64__)
+ #define CATCH_TRAP() __asm__("int $3")
+ #elif defined(__aarch64__)
+ #define CATCH_TRAP() __asm__(".inst 0xd4200000")
+ #elif defined(__arm__) && !defined(__thumb__)
+ #define CATCH_TRAP() __asm__(".inst 0xe7f001f0")
+ #elif defined(__arm__) && defined(__thumb__)
+ #define CATCH_TRAP() __asm__(".inst 0xde01")
+ #endif
+
+#elif defined(CATCH_PLATFORM_LINUX)
+ // If we can use inline assembler, do it because this allows us to break
+ // directly at the location of the failing check instead of breaking inside
+ // raise() called from it, i.e. one stack frame below.
+ #if defined(__GNUC__) && (defined(__i386) || defined(__x86_64))
+ #define CATCH_TRAP() asm volatile ("int $3") /* NOLINT */
+ #else // Fall back to the generic way.
+ #include <signal.h>
+
+ #define CATCH_TRAP() raise(SIGTRAP)
+ #endif
+#elif defined(_MSC_VER)
+ #define CATCH_TRAP() __debugbreak()
+#elif defined(__MINGW32__)
+ extern "C" __declspec(dllimport) void __stdcall DebugBreak();
+ #define CATCH_TRAP() DebugBreak()
+#endif
+
+#ifndef CATCH_BREAK_INTO_DEBUGGER
+ #ifdef CATCH_TRAP
+ #define CATCH_BREAK_INTO_DEBUGGER() []{ if( Catch::isDebuggerActive() ) { CATCH_TRAP(); } }()
+ #else
+ #define CATCH_BREAK_INTO_DEBUGGER() []{}()
+ #endif
+#endif
+
+// end catch_debugger.h
+// start catch_run_context.h
+
+// start catch_fatal_condition.h
+
+// start catch_windows_h_proxy.h
+
+
+#if defined(CATCH_PLATFORM_WINDOWS)
+
+#if !defined(NOMINMAX) && !defined(CATCH_CONFIG_NO_NOMINMAX)
+# define CATCH_DEFINED_NOMINMAX
+# define NOMINMAX
+#endif
+#if !defined(WIN32_LEAN_AND_MEAN) && !defined(CATCH_CONFIG_NO_WIN32_LEAN_AND_MEAN)
+# define CATCH_DEFINED_WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+
+#ifdef __AFXDLL
+#include <AfxWin.h>
+#else
+#include <windows.h>
+#endif
+
+#ifdef CATCH_DEFINED_NOMINMAX
+# undef NOMINMAX
+#endif
+#ifdef CATCH_DEFINED_WIN32_LEAN_AND_MEAN
+# undef WIN32_LEAN_AND_MEAN
+#endif
+
+#endif // defined(CATCH_PLATFORM_WINDOWS)
+
+// end catch_windows_h_proxy.h
+#if defined( CATCH_CONFIG_WINDOWS_SEH )
+
+namespace Catch {
+
+ struct FatalConditionHandler {
+
+ static LONG CALLBACK handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo);
+ FatalConditionHandler();
+ static void reset();
+ ~FatalConditionHandler();
+
+ private:
+ static bool isSet;
+ static ULONG guaranteeSize;
+ static PVOID exceptionHandlerHandle;
+ };
+
+} // namespace Catch
+
+#elif defined ( CATCH_CONFIG_POSIX_SIGNALS )
+
+#include <signal.h>
+
+namespace Catch {
+
+ struct FatalConditionHandler {
+
+ static bool isSet;
+ static struct sigaction oldSigActions[];
+ static stack_t oldSigStack;
+ static char altStackMem[];
+
+ static void handleSignal( int sig );
+
+ FatalConditionHandler();
+ ~FatalConditionHandler();
+ static void reset();
+ };
+
+} // namespace Catch
+
+#else
+
+namespace Catch {
+ struct FatalConditionHandler {
+ void reset();
+ };
+}
+
+#endif
+
+// end catch_fatal_condition.h
+#include <string>
+
+namespace Catch {
+
+ struct IMutableContext;
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ class RunContext : public IResultCapture, public IRunner {
+
+ public:
+ RunContext( RunContext const& ) = delete;
+ RunContext& operator =( RunContext const& ) = delete;
+
+ explicit RunContext( IConfigPtr const& _config, IStreamingReporterPtr&& reporter );
+
+ ~RunContext() override;
+
+ void testGroupStarting( std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount );
+ void testGroupEnded( std::string const& testSpec, Totals const& totals, std::size_t groupIndex, std::size_t groupsCount );
+
+ Totals runTest(TestCase const& testCase);
+
+ IConfigPtr config() const;
+ IStreamingReporter& reporter() const;
+
+ public: // IResultCapture
+
+ // Assertion handlers
+ void handleExpr
+ ( AssertionInfo const& info,
+ ITransientExpression const& expr,
+ AssertionReaction& reaction ) override;
+ void handleMessage
+ ( AssertionInfo const& info,
+ ResultWas::OfType resultType,
+ StringRef const& message,
+ AssertionReaction& reaction ) override;
+ void handleUnexpectedExceptionNotThrown
+ ( AssertionInfo const& info,
+ AssertionReaction& reaction ) override;
+ void handleUnexpectedInflightException
+ ( AssertionInfo const& info,
+ std::string const& message,
+ AssertionReaction& reaction ) override;
+ void handleIncomplete
+ ( AssertionInfo const& info ) override;
+ void handleNonExpr
+ ( AssertionInfo const &info,
+ ResultWas::OfType resultType,
+ AssertionReaction &reaction ) override;
+
+ bool sectionStarted( SectionInfo const& sectionInfo, Counts& assertions ) override;
+
+ void sectionEnded( SectionEndInfo const& endInfo ) override;
+ void sectionEndedEarly( SectionEndInfo const& endInfo ) override;
+
+ auto acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IGeneratorTracker& override;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void benchmarkPreparing( std::string const& name ) override;
+ void benchmarkStarting( BenchmarkInfo const& info ) override;
+ void benchmarkEnded( BenchmarkStats<> const& stats ) override;
+ void benchmarkFailed( std::string const& error ) override;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ void pushScopedMessage( MessageInfo const& message ) override;
+ void popScopedMessage( MessageInfo const& message ) override;
+
+ void emplaceUnscopedMessage( MessageBuilder const& builder ) override;
+
+ std::string getCurrentTestName() const override;
+
+ const AssertionResult* getLastResult() const override;
+
+ void exceptionEarlyReported() override;
+
+ void handleFatalErrorCondition( StringRef message ) override;
+
+ bool lastAssertionPassed() override;
+
+ void assertionPassed() override;
+
+ public:
+ // !TBD We need to do this another way!
+ bool aborting() const final;
+
+ private:
+
+ void runCurrentTest( std::string& redirectedCout, std::string& redirectedCerr );
+ void invokeActiveTestCase();
+
+ void resetAssertionInfo();
+ bool testForMissingAssertions( Counts& assertions );
+
+ void assertionEnded( AssertionResult const& result );
+ void reportExpr
+ ( AssertionInfo const &info,
+ ResultWas::OfType resultType,
+ ITransientExpression const *expr,
+ bool negated );
+
+ void populateReaction( AssertionReaction& reaction );
+
+ private:
+
+ void handleUnfinishedSections();
+
+ TestRunInfo m_runInfo;
+ IMutableContext& m_context;
+ TestCase const* m_activeTestCase = nullptr;
+ ITracker* m_testCaseTracker = nullptr;
+ Option<AssertionResult> m_lastResult;
+
+ IConfigPtr m_config;
+ Totals m_totals;
+ IStreamingReporterPtr m_reporter;
+ std::vector<MessageInfo> m_messages;
+ std::vector<ScopedMessage> m_messageScopes; /* Keeps owners of so-called unscoped messages. */
+ AssertionInfo m_lastAssertionInfo;
+ std::vector<SectionEndInfo> m_unfinishedSections;
+ std::vector<ITracker*> m_activeSections;
+ TrackerContext m_trackerContext;
+ bool m_lastAssertionPassed = false;
+ bool m_shouldReportUnexpected = true;
+ bool m_includeSuccessfulResults;
+ };
+
+ void seedRng(IConfig const& config);
+ unsigned int rngSeed();
+} // end namespace Catch
+
+// end catch_run_context.h
+namespace Catch {
+
+ namespace {
+ auto operator <<( std::ostream& os, ITransientExpression const& expr ) -> std::ostream& {
+ expr.streamReconstructedExpression( os );
+ return os;
+ }
+ }
+
+ LazyExpression::LazyExpression( bool isNegated )
+ : m_isNegated( isNegated )
+ {}
+
+ LazyExpression::LazyExpression( LazyExpression const& other ) : m_isNegated( other.m_isNegated ) {}
+
+ LazyExpression::operator bool() const {
+ return m_transientExpression != nullptr;
+ }
+
+ auto operator << ( std::ostream& os, LazyExpression const& lazyExpr ) -> std::ostream& {
+ if( lazyExpr.m_isNegated )
+ os << "!";
+
+ if( lazyExpr ) {
+ if( lazyExpr.m_isNegated && lazyExpr.m_transientExpression->isBinaryExpression() )
+ os << "(" << *lazyExpr.m_transientExpression << ")";
+ else
+ os << *lazyExpr.m_transientExpression;
+ }
+ else {
+ os << "{** error - unchecked empty expression requested **}";
+ }
+ return os;
+ }
+
+ AssertionHandler::AssertionHandler
+ ( StringRef const& macroName,
+ SourceLineInfo const& lineInfo,
+ StringRef capturedExpression,
+ ResultDisposition::Flags resultDisposition )
+ : m_assertionInfo{ macroName, lineInfo, capturedExpression, resultDisposition },
+ m_resultCapture( getResultCapture() )
+ {}
+
+ void AssertionHandler::handleExpr( ITransientExpression const& expr ) {
+ m_resultCapture.handleExpr( m_assertionInfo, expr, m_reaction );
+ }
+ void AssertionHandler::handleMessage(ResultWas::OfType resultType, StringRef const& message) {
+ m_resultCapture.handleMessage( m_assertionInfo, resultType, message, m_reaction );
+ }
+
+ auto AssertionHandler::allowThrows() const -> bool {
+ return getCurrentContext().getConfig()->allowThrows();
+ }
+
+ void AssertionHandler::complete() {
+ setCompleted();
+ if( m_reaction.shouldDebugBreak ) {
+
+ // If you find your debugger stopping you here then go one level up on the
+ // call-stack for the code that caused it (typically a failed assertion)
+
+ // (To go back to the test and change execution, jump over the throw, next)
+ CATCH_BREAK_INTO_DEBUGGER();
+ }
+ if (m_reaction.shouldThrow) {
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ throw Catch::TestFailureException();
+#else
+ CATCH_ERROR( "Test failure requires aborting test!" );
+#endif
+ }
+ }
+ void AssertionHandler::setCompleted() {
+ m_completed = true;
+ }
+
+ void AssertionHandler::handleUnexpectedInflightException() {
+ m_resultCapture.handleUnexpectedInflightException( m_assertionInfo, Catch::translateActiveException(), m_reaction );
+ }
+
+ void AssertionHandler::handleExceptionThrownAsExpected() {
+ m_resultCapture.handleNonExpr(m_assertionInfo, ResultWas::Ok, m_reaction);
+ }
+ void AssertionHandler::handleExceptionNotThrownAsExpected() {
+ m_resultCapture.handleNonExpr(m_assertionInfo, ResultWas::Ok, m_reaction);
+ }
+
+ void AssertionHandler::handleUnexpectedExceptionNotThrown() {
+ m_resultCapture.handleUnexpectedExceptionNotThrown( m_assertionInfo, m_reaction );
+ }
+
+ void AssertionHandler::handleThrowingCallSkipped() {
+ m_resultCapture.handleNonExpr(m_assertionInfo, ResultWas::Ok, m_reaction);
+ }
+
+ // This is the overload that takes a string and infers the Equals matcher from it
+ // The more general overload, that takes any string matcher, is in catch_capture_matchers.cpp
+ void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str, StringRef const& matcherString ) {
+ handleExceptionMatchExpr( handler, Matchers::Equals( str ), matcherString );
+ }
+
+} // namespace Catch
+// end catch_assertionhandler.cpp
+// start catch_assertionresult.cpp
+
+namespace Catch {
+ AssertionResultData::AssertionResultData(ResultWas::OfType _resultType, LazyExpression const & _lazyExpression):
+ lazyExpression(_lazyExpression),
+ resultType(_resultType) {}
+
+ std::string AssertionResultData::reconstructExpression() const {
+
+ if( reconstructedExpression.empty() ) {
+ if( lazyExpression ) {
+ ReusableStringStream rss;
+ rss << lazyExpression;
+ reconstructedExpression = rss.str();
+ }
+ }
+ return reconstructedExpression;
+ }
+
+ AssertionResult::AssertionResult( AssertionInfo const& info, AssertionResultData const& data )
+ : m_info( info ),
+ m_resultData( data )
+ {}
+
+ // Result was a success
+ bool AssertionResult::succeeded() const {
+ return Catch::isOk( m_resultData.resultType );
+ }
+
+ // Result was a success, or failure is suppressed
+ bool AssertionResult::isOk() const {
+ return Catch::isOk( m_resultData.resultType ) || shouldSuppressFailure( m_info.resultDisposition );
+ }
+
+ ResultWas::OfType AssertionResult::getResultType() const {
+ return m_resultData.resultType;
+ }
+
+ bool AssertionResult::hasExpression() const {
+ return !m_info.capturedExpression.empty();
+ }
+
+ bool AssertionResult::hasMessage() const {
+ return !m_resultData.message.empty();
+ }
+
+ std::string AssertionResult::getExpression() const {
+ // Possibly overallocating by 3 characters should be basically free
+ std::string expr; expr.reserve(m_info.capturedExpression.size() + 3);
+ if (isFalseTest(m_info.resultDisposition)) {
+ expr += "!(";
+ }
+ expr += m_info.capturedExpression;
+ if (isFalseTest(m_info.resultDisposition)) {
+ expr += ')';
+ }
+ return expr;
+ }
+
+ std::string AssertionResult::getExpressionInMacro() const {
+ std::string expr;
+ if( m_info.macroName.empty() )
+ expr = static_cast<std::string>(m_info.capturedExpression);
+ else {
+ expr.reserve( m_info.macroName.size() + m_info.capturedExpression.size() + 4 );
+ expr += m_info.macroName;
+ expr += "( ";
+ expr += m_info.capturedExpression;
+ expr += " )";
+ }
+ return expr;
+ }
+
+ bool AssertionResult::hasExpandedExpression() const {
+ return hasExpression() && getExpandedExpression() != getExpression();
+ }
+
+ std::string AssertionResult::getExpandedExpression() const {
+ std::string expr = m_resultData.reconstructExpression();
+ return expr.empty()
+ ? getExpression()
+ : expr;
+ }
+
+ std::string AssertionResult::getMessage() const {
+ return m_resultData.message;
+ }
+ SourceLineInfo AssertionResult::getSourceInfo() const {
+ return m_info.lineInfo;
+ }
+
+ StringRef AssertionResult::getTestMacroName() const {
+ return m_info.macroName;
+ }
+
+} // end namespace Catch
+// end catch_assertionresult.cpp
+// start catch_capture_matchers.cpp
+
+namespace Catch {
+
+ using StringMatcher = Matchers::Impl::MatcherBase<std::string>;
+
+ // This is the general overload that takes a any string matcher
+ // There is another overload, in catch_assertionhandler.h/.cpp, that only takes a string and infers
+ // the Equals matcher (so the header does not mention matchers)
+ void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef const& matcherString ) {
+ std::string exceptionMessage = Catch::translateActiveException();
+ MatchExpr<std::string, StringMatcher const&> expr( exceptionMessage, matcher, matcherString );
+ handler.handleExpr( expr );
+ }
+
+} // namespace Catch
+// end catch_capture_matchers.cpp
+// start catch_commandline.cpp
+
+// start catch_commandline.h
+
+// start catch_clara.h
+
+// Use Catch's value for console width (store Clara's off to the side, if present)
+#ifdef CLARA_CONFIG_CONSOLE_WIDTH
+#define CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH
+#undef CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH
+#endif
+#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH CATCH_CONFIG_CONSOLE_WIDTH-1
+
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wweak-vtables"
+#pragma clang diagnostic ignored "-Wexit-time-destructors"
+#pragma clang diagnostic ignored "-Wshadow"
+#endif
+
+// start clara.hpp
+// Copyright 2017 Two Blue Cubes Ltd. All rights reserved.
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See https://github.com/philsquared/Clara for more details
+
+// Clara v1.1.5
+
+
+#ifndef CATCH_CLARA_CONFIG_CONSOLE_WIDTH
+#define CATCH_CLARA_CONFIG_CONSOLE_WIDTH 80
+#endif
+
+#ifndef CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH
+#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH CATCH_CLARA_CONFIG_CONSOLE_WIDTH
+#endif
+
+#ifndef CLARA_CONFIG_OPTIONAL_TYPE
+#ifdef __has_include
+#if __has_include(<optional>) && __cplusplus >= 201703L
+#include <optional>
+#define CLARA_CONFIG_OPTIONAL_TYPE std::optional
+#endif
+#endif
+#endif
+
+// ----------- #included from clara_textflow.hpp -----------
+
+// TextFlowCpp
+//
+// A single-header library for wrapping and laying out basic text, by Phil Nash
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// This project is hosted at https://github.com/philsquared/textflowcpp
+
+
+#include <cassert>
+#include <ostream>
+#include <sstream>
+#include <vector>
+
+#ifndef CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH
+#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH 80
+#endif
+
+namespace Catch {
+namespace clara {
+namespace TextFlow {
+
+inline auto isWhitespace(char c) -> bool {
+ static std::string chars = " \t\n\r";
+ return chars.find(c) != std::string::npos;
+}
+inline auto isBreakableBefore(char c) -> bool {
+ static std::string chars = "[({<|";
+ return chars.find(c) != std::string::npos;
+}
+inline auto isBreakableAfter(char c) -> bool {
+ static std::string chars = "])}>.,:;*+-=&/\\";
+ return chars.find(c) != std::string::npos;
+}
+
+class Columns;
+
+class Column {
+ std::vector<std::string> m_strings;
+ size_t m_width = CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH;
+ size_t m_indent = 0;
+ size_t m_initialIndent = std::string::npos;
+
+public:
+ class iterator {
+ friend Column;
+
+ Column const& m_column;
+ size_t m_stringIndex = 0;
+ size_t m_pos = 0;
+
+ size_t m_len = 0;
+ size_t m_end = 0;
+ bool m_suffix = false;
+
+ iterator(Column const& column, size_t stringIndex)
+ : m_column(column),
+ m_stringIndex(stringIndex) {}
+
+ auto line() const -> std::string const& { return m_column.m_strings[m_stringIndex]; }
+
+ auto isBoundary(size_t at) const -> bool {
+ assert(at > 0);
+ assert(at <= line().size());
+
+ return at == line().size() ||
+ (isWhitespace(line()[at]) && !isWhitespace(line()[at - 1])) ||
+ isBreakableBefore(line()[at]) ||
+ isBreakableAfter(line()[at - 1]);
+ }
+
+ void calcLength() {
+ assert(m_stringIndex < m_column.m_strings.size());
+
+ m_suffix = false;
+ auto width = m_column.m_width - indent();
+ m_end = m_pos;
+ if (line()[m_pos] == '\n') {
+ ++m_end;
+ }
+ while (m_end < line().size() && line()[m_end] != '\n')
+ ++m_end;
+
+ if (m_end < m_pos + width) {
+ m_len = m_end - m_pos;
+ } else {
+ size_t len = width;
+ while (len > 0 && !isBoundary(m_pos + len))
+ --len;
+ while (len > 0 && isWhitespace(line()[m_pos + len - 1]))
+ --len;
+
+ if (len > 0) {
+ m_len = len;
+ } else {
+ m_suffix = true;
+ m_len = width - 1;
+ }
+ }
+ }
+
+ auto indent() const -> size_t {
+ auto initial = m_pos == 0 && m_stringIndex == 0 ? m_column.m_initialIndent : std::string::npos;
+ return initial == std::string::npos ? m_column.m_indent : initial;
+ }
+
+ auto addIndentAndSuffix(std::string const &plain) const -> std::string {
+ return std::string(indent(), ' ') + (m_suffix ? plain + "-" : plain);
+ }
+
+ public:
+ using difference_type = std::ptrdiff_t;
+ using value_type = std::string;
+ using pointer = value_type * ;
+ using reference = value_type & ;
+ using iterator_category = std::forward_iterator_tag;
+
+ explicit iterator(Column const& column) : m_column(column) {
+ assert(m_column.m_width > m_column.m_indent);
+ assert(m_column.m_initialIndent == std::string::npos || m_column.m_width > m_column.m_initialIndent);
+ calcLength();
+ if (m_len == 0)
+ m_stringIndex++; // Empty string
+ }
+
+ auto operator *() const -> std::string {
+ assert(m_stringIndex < m_column.m_strings.size());
+ assert(m_pos <= m_end);
+ return addIndentAndSuffix(line().substr(m_pos, m_len));
+ }
+
+ auto operator ++() -> iterator& {
+ m_pos += m_len;
+ if (m_pos < line().size() && line()[m_pos] == '\n')
+ m_pos += 1;
+ else
+ while (m_pos < line().size() && isWhitespace(line()[m_pos]))
+ ++m_pos;
+
+ if (m_pos == line().size()) {
+ m_pos = 0;
+ ++m_stringIndex;
+ }
+ if (m_stringIndex < m_column.m_strings.size())
+ calcLength();
+ return *this;
+ }
+ auto operator ++(int) -> iterator {
+ iterator prev(*this);
+ operator++();
+ return prev;
+ }
+
+ auto operator ==(iterator const& other) const -> bool {
+ return
+ m_pos == other.m_pos &&
+ m_stringIndex == other.m_stringIndex &&
+ &m_column == &other.m_column;
+ }
+ auto operator !=(iterator const& other) const -> bool {
+ return !operator==(other);
+ }
+ };
+ using const_iterator = iterator;
+
+ explicit Column(std::string const& text) { m_strings.push_back(text); }
+
+ auto width(size_t newWidth) -> Column& {
+ assert(newWidth > 0);
+ m_width = newWidth;
+ return *this;
+ }
+ auto indent(size_t newIndent) -> Column& {
+ m_indent = newIndent;
+ return *this;
+ }
+ auto initialIndent(size_t newIndent) -> Column& {
+ m_initialIndent = newIndent;
+ return *this;
+ }
+
+ auto width() const -> size_t { return m_width; }
+ auto begin() const -> iterator { return iterator(*this); }
+ auto end() const -> iterator { return { *this, m_strings.size() }; }
+
+ inline friend std::ostream& operator << (std::ostream& os, Column const& col) {
+ bool first = true;
+ for (auto line : col) {
+ if (first)
+ first = false;
+ else
+ os << "\n";
+ os << line;
+ }
+ return os;
+ }
+
+ auto operator + (Column const& other)->Columns;
+
+ auto toString() const -> std::string {
+ std::ostringstream oss;
+ oss << *this;
+ return oss.str();
+ }
+};
+
+class Spacer : public Column {
+
+public:
+ explicit Spacer(size_t spaceWidth) : Column("") {
+ width(spaceWidth);
+ }
+};
+
+class Columns {
+ std::vector<Column> m_columns;
+
+public:
+
+ class iterator {
+ friend Columns;
+ struct EndTag {};
+
+ std::vector<Column> const& m_columns;
+ std::vector<Column::iterator> m_iterators;
+ size_t m_activeIterators;
+
+ iterator(Columns const& columns, EndTag)
+ : m_columns(columns.m_columns),
+ m_activeIterators(0) {
+ m_iterators.reserve(m_columns.size());
+
+ for (auto const& col : m_columns)
+ m_iterators.push_back(col.end());
+ }
+
+ public:
+ using difference_type = std::ptrdiff_t;
+ using value_type = std::string;
+ using pointer = value_type * ;
+ using reference = value_type & ;
+ using iterator_category = std::forward_iterator_tag;
+
+ explicit iterator(Columns const& columns)
+ : m_columns(columns.m_columns),
+ m_activeIterators(m_columns.size()) {
+ m_iterators.reserve(m_columns.size());
+
+ for (auto const& col : m_columns)
+ m_iterators.push_back(col.begin());
+ }
+
+ auto operator ==(iterator const& other) const -> bool {
+ return m_iterators == other.m_iterators;
+ }
+ auto operator !=(iterator const& other) const -> bool {
+ return m_iterators != other.m_iterators;
+ }
+ auto operator *() const -> std::string {
+ std::string row, padding;
+
+ for (size_t i = 0; i < m_columns.size(); ++i) {
+ auto width = m_columns[i].width();
+ if (m_iterators[i] != m_columns[i].end()) {
+ std::string col = *m_iterators[i];
+ row += padding + col;
+ if (col.size() < width)
+ padding = std::string(width - col.size(), ' ');
+ else
+ padding = "";
+ } else {
+ padding += std::string(width, ' ');
+ }
+ }
+ return row;
+ }
+ auto operator ++() -> iterator& {
+ for (size_t i = 0; i < m_columns.size(); ++i) {
+ if (m_iterators[i] != m_columns[i].end())
+ ++m_iterators[i];
+ }
+ return *this;
+ }
+ auto operator ++(int) -> iterator {
+ iterator prev(*this);
+ operator++();
+ return prev;
+ }
+ };
+ using const_iterator = iterator;
+
+ auto begin() const -> iterator { return iterator(*this); }
+ auto end() const -> iterator { return { *this, iterator::EndTag() }; }
+
+ auto operator += (Column const& col) -> Columns& {
+ m_columns.push_back(col);
+ return *this;
+ }
+ auto operator + (Column const& col) -> Columns {
+ Columns combined = *this;
+ combined += col;
+ return combined;
+ }
+
+ inline friend std::ostream& operator << (std::ostream& os, Columns const& cols) {
+
+ bool first = true;
+ for (auto line : cols) {
+ if (first)
+ first = false;
+ else
+ os << "\n";
+ os << line;
+ }
+ return os;
+ }
+
+ auto toString() const -> std::string {
+ std::ostringstream oss;
+ oss << *this;
+ return oss.str();
+ }
+};
+
+inline auto Column::operator + (Column const& other) -> Columns {
+ Columns cols;
+ cols += *this;
+ cols += other;
+ return cols;
+}
+}
+
+}
+}
+
+// ----------- end of #include from clara_textflow.hpp -----------
+// ........... back in clara.hpp
+
+#include <cctype>
+#include <string>
+#include <memory>
+#include <set>
+#include <algorithm>
+
+#if !defined(CATCH_PLATFORM_WINDOWS) && ( defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) )
+#define CATCH_PLATFORM_WINDOWS
+#endif
+
+namespace Catch { namespace clara {
+namespace detail {
+
+ // Traits for extracting arg and return type of lambdas (for single argument lambdas)
+ template<typename L>
+ struct UnaryLambdaTraits : UnaryLambdaTraits<decltype( &L::operator() )> {};
+
+ template<typename ClassT, typename ReturnT, typename... Args>
+ struct UnaryLambdaTraits<ReturnT( ClassT::* )( Args... ) const> {
+ static const bool isValid = false;
+ };
+
+ template<typename ClassT, typename ReturnT, typename ArgT>
+ struct UnaryLambdaTraits<ReturnT( ClassT::* )( ArgT ) const> {
+ static const bool isValid = true;
+ using ArgType = typename std::remove_const<typename std::remove_reference<ArgT>::type>::type;
+ using ReturnType = ReturnT;
+ };
+
+ class TokenStream;
+
+ // Transport for raw args (copied from main args, or supplied via init list for testing)
+ class Args {
+ friend TokenStream;
+ std::string m_exeName;
+ std::vector<std::string> m_args;
+
+ public:
+ Args( int argc, char const* const* argv )
+ : m_exeName(argv[0]),
+ m_args(argv + 1, argv + argc) {}
+
+ Args( std::initializer_list<std::string> args )
+ : m_exeName( *args.begin() ),
+ m_args( args.begin()+1, args.end() )
+ {}
+
+ auto exeName() const -> std::string {
+ return m_exeName;
+ }
+ };
+
+ // Wraps a token coming from a token stream. These may not directly correspond to strings as a single string
+ // may encode an option + its argument if the : or = form is used
+ enum class TokenType {
+ Option, Argument
+ };
+ struct Token {
+ TokenType type;
+ std::string token;
+ };
+
+ inline auto isOptPrefix( char c ) -> bool {
+ return c == '-'
+#ifdef CATCH_PLATFORM_WINDOWS
+ || c == '/'
+#endif
+ ;
+ }
+
+ // Abstracts iterators into args as a stream of tokens, with option arguments uniformly handled
+ class TokenStream {
+ using Iterator = std::vector<std::string>::const_iterator;
+ Iterator it;
+ Iterator itEnd;
+ std::vector<Token> m_tokenBuffer;
+
+ void loadBuffer() {
+ m_tokenBuffer.resize( 0 );
+
+ // Skip any empty strings
+ while( it != itEnd && it->empty() )
+ ++it;
+
+ if( it != itEnd ) {
+ auto const &next = *it;
+ if( isOptPrefix( next[0] ) ) {
+ auto delimiterPos = next.find_first_of( " :=" );
+ if( delimiterPos != std::string::npos ) {
+ m_tokenBuffer.push_back( { TokenType::Option, next.substr( 0, delimiterPos ) } );
+ m_tokenBuffer.push_back( { TokenType::Argument, next.substr( delimiterPos + 1 ) } );
+ } else {
+ if( next[1] != '-' && next.size() > 2 ) {
+ std::string opt = "- ";
+ for( size_t i = 1; i < next.size(); ++i ) {
+ opt[1] = next[i];
+ m_tokenBuffer.push_back( { TokenType::Option, opt } );
+ }
+ } else {
+ m_tokenBuffer.push_back( { TokenType::Option, next } );
+ }
+ }
+ } else {
+ m_tokenBuffer.push_back( { TokenType::Argument, next } );
+ }
+ }
+ }
+
+ public:
+ explicit TokenStream( Args const &args ) : TokenStream( args.m_args.begin(), args.m_args.end() ) {}
+
+ TokenStream( Iterator it, Iterator itEnd ) : it( it ), itEnd( itEnd ) {
+ loadBuffer();
+ }
+
+ explicit operator bool() const {
+ return !m_tokenBuffer.empty() || it != itEnd;
+ }
+
+ auto count() const -> size_t { return m_tokenBuffer.size() + (itEnd - it); }
+
+ auto operator*() const -> Token {
+ assert( !m_tokenBuffer.empty() );
+ return m_tokenBuffer.front();
+ }
+
+ auto operator->() const -> Token const * {
+ assert( !m_tokenBuffer.empty() );
+ return &m_tokenBuffer.front();
+ }
+
+ auto operator++() -> TokenStream & {
+ if( m_tokenBuffer.size() >= 2 ) {
+ m_tokenBuffer.erase( m_tokenBuffer.begin() );
+ } else {
+ if( it != itEnd )
+ ++it;
+ loadBuffer();
+ }
+ return *this;
+ }
+ };
+
+ class ResultBase {
+ public:
+ enum Type {
+ Ok, LogicError, RuntimeError
+ };
+
+ protected:
+ ResultBase( Type type ) : m_type( type ) {}
+ virtual ~ResultBase() = default;
+
+ virtual void enforceOk() const = 0;
+
+ Type m_type;
+ };
+
+ template<typename T>
+ class ResultValueBase : public ResultBase {
+ public:
+ auto value() const -> T const & {
+ enforceOk();
+ return m_value;
+ }
+
+ protected:
+ ResultValueBase( Type type ) : ResultBase( type ) {}
+
+ ResultValueBase( ResultValueBase const &other ) : ResultBase( other ) {
+ if( m_type == ResultBase::Ok )
+ new( &m_value ) T( other.m_value );
+ }
+
+ ResultValueBase( Type, T const &value ) : ResultBase( Ok ) {
+ new( &m_value ) T( value );
+ }
+
+ auto operator=( ResultValueBase const &other ) -> ResultValueBase & {
+ if( m_type == ResultBase::Ok )
+ m_value.~T();
+ ResultBase::operator=(other);
+ if( m_type == ResultBase::Ok )
+ new( &m_value ) T( other.m_value );
+ return *this;
+ }
+
+ ~ResultValueBase() override {
+ if( m_type == Ok )
+ m_value.~T();
+ }
+
+ union {
+ T m_value;
+ };
+ };
+
+ template<>
+ class ResultValueBase<void> : public ResultBase {
+ protected:
+ using ResultBase::ResultBase;
+ };
+
+ template<typename T = void>
+ class BasicResult : public ResultValueBase<T> {
+ public:
+ template<typename U>
+ explicit BasicResult( BasicResult<U> const &other )
+ : ResultValueBase<T>( other.type() ),
+ m_errorMessage( other.errorMessage() )
+ {
+ assert( type() != ResultBase::Ok );
+ }
+
+ template<typename U>
+ static auto ok( U const &value ) -> BasicResult { return { ResultBase::Ok, value }; }
+ static auto ok() -> BasicResult { return { ResultBase::Ok }; }
+ static auto logicError( std::string const &message ) -> BasicResult { return { ResultBase::LogicError, message }; }
+ static auto runtimeError( std::string const &message ) -> BasicResult { return { ResultBase::RuntimeError, message }; }
+
+ explicit operator bool() const { return m_type == ResultBase::Ok; }
+ auto type() const -> ResultBase::Type { return m_type; }
+ auto errorMessage() const -> std::string { return m_errorMessage; }
+
+ protected:
+ void enforceOk() const override {
+
+ // Errors shouldn't reach this point, but if they do
+ // the actual error message will be in m_errorMessage
+ assert( m_type != ResultBase::LogicError );
+ assert( m_type != ResultBase::RuntimeError );
+ if( m_type != ResultBase::Ok )
+ std::abort();
+ }
+
+ std::string m_errorMessage; // Only populated if resultType is an error
+
+ BasicResult( ResultBase::Type type, std::string const &message )
+ : ResultValueBase<T>(type),
+ m_errorMessage(message)
+ {
+ assert( m_type != ResultBase::Ok );
+ }
+
+ using ResultValueBase<T>::ResultValueBase;
+ using ResultBase::m_type;
+ };
+
+ enum class ParseResultType {
+ Matched, NoMatch, ShortCircuitAll, ShortCircuitSame
+ };
+
+ class ParseState {
+ public:
+
+ ParseState( ParseResultType type, TokenStream const &remainingTokens )
+ : m_type(type),
+ m_remainingTokens( remainingTokens )
+ {}
+
+ auto type() const -> ParseResultType { return m_type; }
+ auto remainingTokens() const -> TokenStream { return m_remainingTokens; }
+
+ private:
+ ParseResultType m_type;
+ TokenStream m_remainingTokens;
+ };
+
+ using Result = BasicResult<void>;
+ using ParserResult = BasicResult<ParseResultType>;
+ using InternalParseResult = BasicResult<ParseState>;
+
+ struct HelpColumns {
+ std::string left;
+ std::string right;
+ };
+
+ template<typename T>
+ inline auto convertInto( std::string const &source, T& target ) -> ParserResult {
+ std::stringstream ss;
+ ss << source;
+ ss >> target;
+ if( ss.fail() )
+ return ParserResult::runtimeError( "Unable to convert '" + source + "' to destination type" );
+ else
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+ inline auto convertInto( std::string const &source, std::string& target ) -> ParserResult {
+ target = source;
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+ inline auto convertInto( std::string const &source, bool &target ) -> ParserResult {
+ std::string srcLC = source;
+ std::transform( srcLC.begin(), srcLC.end(), srcLC.begin(), []( char c ) { return static_cast<char>( std::tolower(c) ); } );
+ if (srcLC == "y" || srcLC == "1" || srcLC == "true" || srcLC == "yes" || srcLC == "on")
+ target = true;
+ else if (srcLC == "n" || srcLC == "0" || srcLC == "false" || srcLC == "no" || srcLC == "off")
+ target = false;
+ else
+ return ParserResult::runtimeError( "Expected a boolean value but did not recognise: '" + source + "'" );
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+#ifdef CLARA_CONFIG_OPTIONAL_TYPE
+ template<typename T>
+ inline auto convertInto( std::string const &source, CLARA_CONFIG_OPTIONAL_TYPE<T>& target ) -> ParserResult {
+ T temp;
+ auto result = convertInto( source, temp );
+ if( result )
+ target = std::move(temp);
+ return result;
+ }
+#endif // CLARA_CONFIG_OPTIONAL_TYPE
+
+ struct NonCopyable {
+ NonCopyable() = default;
+ NonCopyable( NonCopyable const & ) = delete;
+ NonCopyable( NonCopyable && ) = delete;
+ NonCopyable &operator=( NonCopyable const & ) = delete;
+ NonCopyable &operator=( NonCopyable && ) = delete;
+ };
+
+ struct BoundRef : NonCopyable {
+ virtual ~BoundRef() = default;
+ virtual auto isContainer() const -> bool { return false; }
+ virtual auto isFlag() const -> bool { return false; }
+ };
+ struct BoundValueRefBase : BoundRef {
+ virtual auto setValue( std::string const &arg ) -> ParserResult = 0;
+ };
+ struct BoundFlagRefBase : BoundRef {
+ virtual auto setFlag( bool flag ) -> ParserResult = 0;
+ virtual auto isFlag() const -> bool { return true; }
+ };
+
+ template<typename T>
+ struct BoundValueRef : BoundValueRefBase {
+ T &m_ref;
+
+ explicit BoundValueRef( T &ref ) : m_ref( ref ) {}
+
+ auto setValue( std::string const &arg ) -> ParserResult override {
+ return convertInto( arg, m_ref );
+ }
+ };
+
+ template<typename T>
+ struct BoundValueRef<std::vector<T>> : BoundValueRefBase {
+ std::vector<T> &m_ref;
+
+ explicit BoundValueRef( std::vector<T> &ref ) : m_ref( ref ) {}
+
+ auto isContainer() const -> bool override { return true; }
+
+ auto setValue( std::string const &arg ) -> ParserResult override {
+ T temp;
+ auto result = convertInto( arg, temp );
+ if( result )
+ m_ref.push_back( temp );
+ return result;
+ }
+ };
+
+ struct BoundFlagRef : BoundFlagRefBase {
+ bool &m_ref;
+
+ explicit BoundFlagRef( bool &ref ) : m_ref( ref ) {}
+
+ auto setFlag( bool flag ) -> ParserResult override {
+ m_ref = flag;
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+ };
+
+ template<typename ReturnType>
+ struct LambdaInvoker {
+ static_assert( std::is_same<ReturnType, ParserResult>::value, "Lambda must return void or clara::ParserResult" );
+
+ template<typename L, typename ArgType>
+ static auto invoke( L const &lambda, ArgType const &arg ) -> ParserResult {
+ return lambda( arg );
+ }
+ };
+
+ template<>
+ struct LambdaInvoker<void> {
+ template<typename L, typename ArgType>
+ static auto invoke( L const &lambda, ArgType const &arg ) -> ParserResult {
+ lambda( arg );
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+ };
+
+ template<typename ArgType, typename L>
+ inline auto invokeLambda( L const &lambda, std::string const &arg ) -> ParserResult {
+ ArgType temp{};
+ auto result = convertInto( arg, temp );
+ return !result
+ ? result
+ : LambdaInvoker<typename UnaryLambdaTraits<L>::ReturnType>::invoke( lambda, temp );
+ }
+
+ template<typename L>
+ struct BoundLambda : BoundValueRefBase {
+ L m_lambda;
+
+ static_assert( UnaryLambdaTraits<L>::isValid, "Supplied lambda must take exactly one argument" );
+ explicit BoundLambda( L const &lambda ) : m_lambda( lambda ) {}
+
+ auto setValue( std::string const &arg ) -> ParserResult override {
+ return invokeLambda<typename UnaryLambdaTraits<L>::ArgType>( m_lambda, arg );
+ }
+ };
+
+ template<typename L>
+ struct BoundFlagLambda : BoundFlagRefBase {
+ L m_lambda;
+
+ static_assert( UnaryLambdaTraits<L>::isValid, "Supplied lambda must take exactly one argument" );
+ static_assert( std::is_same<typename UnaryLambdaTraits<L>::ArgType, bool>::value, "flags must be boolean" );
+
+ explicit BoundFlagLambda( L const &lambda ) : m_lambda( lambda ) {}
+
+ auto setFlag( bool flag ) -> ParserResult override {
+ return LambdaInvoker<typename UnaryLambdaTraits<L>::ReturnType>::invoke( m_lambda, flag );
+ }
+ };
+
+ enum class Optionality { Optional, Required };
+
+ struct Parser;
+
+ class ParserBase {
+ public:
+ virtual ~ParserBase() = default;
+ virtual auto validate() const -> Result { return Result::ok(); }
+ virtual auto parse( std::string const& exeName, TokenStream const &tokens) const -> InternalParseResult = 0;
+ virtual auto cardinality() const -> size_t { return 1; }
+
+ auto parse( Args const &args ) const -> InternalParseResult {
+ return parse( args.exeName(), TokenStream( args ) );
+ }
+ };
+
+ template<typename DerivedT>
+ class ComposableParserImpl : public ParserBase {
+ public:
+ template<typename T>
+ auto operator|( T const &other ) const -> Parser;
+
+ template<typename T>
+ auto operator+( T const &other ) const -> Parser;
+ };
+
+ // Common code and state for Args and Opts
+ template<typename DerivedT>
+ class ParserRefImpl : public ComposableParserImpl<DerivedT> {
+ protected:
+ Optionality m_optionality = Optionality::Optional;
+ std::shared_ptr<BoundRef> m_ref;
+ std::string m_hint;
+ std::string m_description;
+
+ explicit ParserRefImpl( std::shared_ptr<BoundRef> const &ref ) : m_ref( ref ) {}
+
+ public:
+ template<typename T>
+ ParserRefImpl( T &ref, std::string const &hint )
+ : m_ref( std::make_shared<BoundValueRef<T>>( ref ) ),
+ m_hint( hint )
+ {}
+
+ template<typename LambdaT>
+ ParserRefImpl( LambdaT const &ref, std::string const &hint )
+ : m_ref( std::make_shared<BoundLambda<LambdaT>>( ref ) ),
+ m_hint(hint)
+ {}
+
+ auto operator()( std::string const &description ) -> DerivedT & {
+ m_description = description;
+ return static_cast<DerivedT &>( *this );
+ }
+
+ auto optional() -> DerivedT & {
+ m_optionality = Optionality::Optional;
+ return static_cast<DerivedT &>( *this );
+ };
+
+ auto required() -> DerivedT & {
+ m_optionality = Optionality::Required;
+ return static_cast<DerivedT &>( *this );
+ };
+
+ auto isOptional() const -> bool {
+ return m_optionality == Optionality::Optional;
+ }
+
+ auto cardinality() const -> size_t override {
+ if( m_ref->isContainer() )
+ return 0;
+ else
+ return 1;
+ }
+
+ auto hint() const -> std::string { return m_hint; }
+ };
+
+ class ExeName : public ComposableParserImpl<ExeName> {
+ std::shared_ptr<std::string> m_name;
+ std::shared_ptr<BoundValueRefBase> m_ref;
+
+ template<typename LambdaT>
+ static auto makeRef(LambdaT const &lambda) -> std::shared_ptr<BoundValueRefBase> {
+ return std::make_shared<BoundLambda<LambdaT>>( lambda) ;
+ }
+
+ public:
+ ExeName() : m_name( std::make_shared<std::string>( "<executable>" ) ) {}
+
+ explicit ExeName( std::string &ref ) : ExeName() {
+ m_ref = std::make_shared<BoundValueRef<std::string>>( ref );
+ }
+
+ template<typename LambdaT>
+ explicit ExeName( LambdaT const& lambda ) : ExeName() {
+ m_ref = std::make_shared<BoundLambda<LambdaT>>( lambda );
+ }
+
+ // The exe name is not parsed out of the normal tokens, but is handled specially
+ auto parse( std::string const&, TokenStream const &tokens ) const -> InternalParseResult override {
+ return InternalParseResult::ok( ParseState( ParseResultType::NoMatch, tokens ) );
+ }
+
+ auto name() const -> std::string { return *m_name; }
+ auto set( std::string const& newName ) -> ParserResult {
+
+ auto lastSlash = newName.find_last_of( "\\/" );
+ auto filename = ( lastSlash == std::string::npos )
+ ? newName
+ : newName.substr( lastSlash+1 );
+
+ *m_name = filename;
+ if( m_ref )
+ return m_ref->setValue( filename );
+ else
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+ };
+
+ class Arg : public ParserRefImpl<Arg> {
+ public:
+ using ParserRefImpl::ParserRefImpl;
+
+ auto parse( std::string const &, TokenStream const &tokens ) const -> InternalParseResult override {
+ auto validationResult = validate();
+ if( !validationResult )
+ return InternalParseResult( validationResult );
+
+ auto remainingTokens = tokens;
+ auto const &token = *remainingTokens;
+ if( token.type != TokenType::Argument )
+ return InternalParseResult::ok( ParseState( ParseResultType::NoMatch, remainingTokens ) );
+
+ assert( !m_ref->isFlag() );
+ auto valueRef = static_cast<detail::BoundValueRefBase*>( m_ref.get() );
+
+ auto result = valueRef->setValue( remainingTokens->token );
+ if( !result )
+ return InternalParseResult( result );
+ else
+ return InternalParseResult::ok( ParseState( ParseResultType::Matched, ++remainingTokens ) );
+ }
+ };
+
+ inline auto normaliseOpt( std::string const &optName ) -> std::string {
+#ifdef CATCH_PLATFORM_WINDOWS
+ if( optName[0] == '/' )
+ return "-" + optName.substr( 1 );
+ else
+#endif
+ return optName;
+ }
+
+ class Opt : public ParserRefImpl<Opt> {
+ protected:
+ std::vector<std::string> m_optNames;
+
+ public:
+ template<typename LambdaT>
+ explicit Opt( LambdaT const &ref ) : ParserRefImpl( std::make_shared<BoundFlagLambda<LambdaT>>( ref ) ) {}
+
+ explicit Opt( bool &ref ) : ParserRefImpl( std::make_shared<BoundFlagRef>( ref ) ) {}
+
+ template<typename LambdaT>
+ Opt( LambdaT const &ref, std::string const &hint ) : ParserRefImpl( ref, hint ) {}
+
+ template<typename T>
+ Opt( T &ref, std::string const &hint ) : ParserRefImpl( ref, hint ) {}
+
+ auto operator[]( std::string const &optName ) -> Opt & {
+ m_optNames.push_back( optName );
+ return *this;
+ }
+
+ auto getHelpColumns() const -> std::vector<HelpColumns> {
+ std::ostringstream oss;
+ bool first = true;
+ for( auto const &opt : m_optNames ) {
+ if (first)
+ first = false;
+ else
+ oss << ", ";
+ oss << opt;
+ }
+ if( !m_hint.empty() )
+ oss << " <" << m_hint << ">";
+ return { { oss.str(), m_description } };
+ }
+
+ auto isMatch( std::string const &optToken ) const -> bool {
+ auto normalisedToken = normaliseOpt( optToken );
+ for( auto const &name : m_optNames ) {
+ if( normaliseOpt( name ) == normalisedToken )
+ return true;
+ }
+ return false;
+ }
+
+ using ParserBase::parse;
+
+ auto parse( std::string const&, TokenStream const &tokens ) const -> InternalParseResult override {
+ auto validationResult = validate();
+ if( !validationResult )
+ return InternalParseResult( validationResult );
+
+ auto remainingTokens = tokens;
+ if( remainingTokens && remainingTokens->type == TokenType::Option ) {
+ auto const &token = *remainingTokens;
+ if( isMatch(token.token ) ) {
+ if( m_ref->isFlag() ) {
+ auto flagRef = static_cast<detail::BoundFlagRefBase*>( m_ref.get() );
+ auto result = flagRef->setFlag( true );
+ if( !result )
+ return InternalParseResult( result );
+ if( result.value() == ParseResultType::ShortCircuitAll )
+ return InternalParseResult::ok( ParseState( result.value(), remainingTokens ) );
+ } else {
+ auto valueRef = static_cast<detail::BoundValueRefBase*>( m_ref.get() );
+ ++remainingTokens;
+ if( !remainingTokens )
+ return InternalParseResult::runtimeError( "Expected argument following " + token.token );
+ auto const &argToken = *remainingTokens;
+ if( argToken.type != TokenType::Argument )
+ return InternalParseResult::runtimeError( "Expected argument following " + token.token );
+ auto result = valueRef->setValue( argToken.token );
+ if( !result )
+ return InternalParseResult( result );
+ if( result.value() == ParseResultType::ShortCircuitAll )
+ return InternalParseResult::ok( ParseState( result.value(), remainingTokens ) );
+ }
+ return InternalParseResult::ok( ParseState( ParseResultType::Matched, ++remainingTokens ) );
+ }
+ }
+ return InternalParseResult::ok( ParseState( ParseResultType::NoMatch, remainingTokens ) );
+ }
+
+ auto validate() const -> Result override {
+ if( m_optNames.empty() )
+ return Result::logicError( "No options supplied to Opt" );
+ for( auto const &name : m_optNames ) {
+ if( name.empty() )
+ return Result::logicError( "Option name cannot be empty" );
+#ifdef CATCH_PLATFORM_WINDOWS
+ if( name[0] != '-' && name[0] != '/' )
+ return Result::logicError( "Option name must begin with '-' or '/'" );
+#else
+ if( name[0] != '-' )
+ return Result::logicError( "Option name must begin with '-'" );
+#endif
+ }
+ return ParserRefImpl::validate();
+ }
+ };
+
+ struct Help : Opt {
+ Help( bool &showHelpFlag )
+ : Opt([&]( bool flag ) {
+ showHelpFlag = flag;
+ return ParserResult::ok( ParseResultType::ShortCircuitAll );
+ })
+ {
+ static_cast<Opt &>( *this )
+ ("display usage information")
+ ["-?"]["-h"]["--help"]
+ .optional();
+ }
+ };
+
+ struct Parser : ParserBase {
+
+ mutable ExeName m_exeName;
+ std::vector<Opt> m_options;
+ std::vector<Arg> m_args;
+
+ auto operator|=( ExeName const &exeName ) -> Parser & {
+ m_exeName = exeName;
+ return *this;
+ }
+
+ auto operator|=( Arg const &arg ) -> Parser & {
+ m_args.push_back(arg);
+ return *this;
+ }
+
+ auto operator|=( Opt const &opt ) -> Parser & {
+ m_options.push_back(opt);
+ return *this;
+ }
+
+ auto operator|=( Parser const &other ) -> Parser & {
+ m_options.insert(m_options.end(), other.m_options.begin(), other.m_options.end());
+ m_args.insert(m_args.end(), other.m_args.begin(), other.m_args.end());
+ return *this;
+ }
+
+ template<typename T>
+ auto operator|( T const &other ) const -> Parser {
+ return Parser( *this ) |= other;
+ }
+
+ // Forward deprecated interface with '+' instead of '|'
+ template<typename T>
+ auto operator+=( T const &other ) -> Parser & { return operator|=( other ); }
+ template<typename T>
+ auto operator+( T const &other ) const -> Parser { return operator|( other ); }
+
+ auto getHelpColumns() const -> std::vector<HelpColumns> {
+ std::vector<HelpColumns> cols;
+ for (auto const &o : m_options) {
+ auto childCols = o.getHelpColumns();
+ cols.insert( cols.end(), childCols.begin(), childCols.end() );
+ }
+ return cols;
+ }
+
+ void writeToStream( std::ostream &os ) const {
+ if (!m_exeName.name().empty()) {
+ os << "usage:\n" << " " << m_exeName.name() << " ";
+ bool required = true, first = true;
+ for( auto const &arg : m_args ) {
+ if (first)
+ first = false;
+ else
+ os << " ";
+ if( arg.isOptional() && required ) {
+ os << "[";
+ required = false;
+ }
+ os << "<" << arg.hint() << ">";
+ if( arg.cardinality() == 0 )
+ os << " ... ";
+ }
+ if( !required )
+ os << "]";
+ if( !m_options.empty() )
+ os << " options";
+ os << "\n\nwhere options are:" << std::endl;
+ }
+
+ auto rows = getHelpColumns();
+ size_t consoleWidth = CATCH_CLARA_CONFIG_CONSOLE_WIDTH;
+ size_t optWidth = 0;
+ for( auto const &cols : rows )
+ optWidth = (std::max)(optWidth, cols.left.size() + 2);
+
+ optWidth = (std::min)(optWidth, consoleWidth/2);
+
+ for( auto const &cols : rows ) {
+ auto row =
+ TextFlow::Column( cols.left ).width( optWidth ).indent( 2 ) +
+ TextFlow::Spacer(4) +
+ TextFlow::Column( cols.right ).width( consoleWidth - 7 - optWidth );
+ os << row << std::endl;
+ }
+ }
+
+ friend auto operator<<( std::ostream &os, Parser const &parser ) -> std::ostream& {
+ parser.writeToStream( os );
+ return os;
+ }
+
+ auto validate() const -> Result override {
+ for( auto const &opt : m_options ) {
+ auto result = opt.validate();
+ if( !result )
+ return result;
+ }
+ for( auto const &arg : m_args ) {
+ auto result = arg.validate();
+ if( !result )
+ return result;
+ }
+ return Result::ok();
+ }
+
+ using ParserBase::parse;
+
+ auto parse( std::string const& exeName, TokenStream const &tokens ) const -> InternalParseResult override {
+
+ struct ParserInfo {
+ ParserBase const* parser = nullptr;
+ size_t count = 0;
+ };
+ const size_t totalParsers = m_options.size() + m_args.size();
+ assert( totalParsers < 512 );
+ // ParserInfo parseInfos[totalParsers]; // <-- this is what we really want to do
+ ParserInfo parseInfos[512];
+
+ {
+ size_t i = 0;
+ for (auto const &opt : m_options) parseInfos[i++].parser = &opt;
+ for (auto const &arg : m_args) parseInfos[i++].parser = &arg;
+ }
+
+ m_exeName.set( exeName );
+
+ auto result = InternalParseResult::ok( ParseState( ParseResultType::NoMatch, tokens ) );
+ while( result.value().remainingTokens() ) {
+ bool tokenParsed = false;
+
+ for( size_t i = 0; i < totalParsers; ++i ) {
+ auto& parseInfo = parseInfos[i];
+ if( parseInfo.parser->cardinality() == 0 || parseInfo.count < parseInfo.parser->cardinality() ) {
+ result = parseInfo.parser->parse(exeName, result.value().remainingTokens());
+ if (!result)
+ return result;
+ if (result.value().type() != ParseResultType::NoMatch) {
+ tokenParsed = true;
+ ++parseInfo.count;
+ break;
+ }
+ }
+ }
+
+ if( result.value().type() == ParseResultType::ShortCircuitAll )
+ return result;
+ if( !tokenParsed )
+ return InternalParseResult::runtimeError( "Unrecognised token: " + result.value().remainingTokens()->token );
+ }
+ // !TBD Check missing required options
+ return result;
+ }
+ };
+
+ template<typename DerivedT>
+ template<typename T>
+ auto ComposableParserImpl<DerivedT>::operator|( T const &other ) const -> Parser {
+ return Parser() | static_cast<DerivedT const &>( *this ) | other;
+ }
+} // namespace detail
+
+// A Combined parser
+using detail::Parser;
+
+// A parser for options
+using detail::Opt;
+
+// A parser for arguments
+using detail::Arg;
+
+// Wrapper for argc, argv from main()
+using detail::Args;
+
+// Specifies the name of the executable
+using detail::ExeName;
+
+// Convenience wrapper for option parser that specifies the help option
+using detail::Help;
+
+// enum of result types from a parse
+using detail::ParseResultType;
+
+// Result type for parser operation
+using detail::ParserResult;
+
+}} // namespace Catch::clara
+
+// end clara.hpp
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+// Restore Clara's value for console width, if present
+#ifdef CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH
+#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH
+#undef CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH
+#endif
+
+// end catch_clara.h
+namespace Catch {
+
+ clara::Parser makeCommandLineParser( ConfigData& config );
+
+} // end namespace Catch
+
+// end catch_commandline.h
+#include <fstream>
+#include <ctime>
+
+namespace Catch {
+
+ clara::Parser makeCommandLineParser( ConfigData& config ) {
+
+ using namespace clara;
+
+ auto const setWarning = [&]( std::string const& warning ) {
+ auto warningSet = [&]() {
+ if( warning == "NoAssertions" )
+ return WarnAbout::NoAssertions;
+
+ if ( warning == "NoTests" )
+ return WarnAbout::NoTests;
+
+ return WarnAbout::Nothing;
+ }();
+
+ if (warningSet == WarnAbout::Nothing)
+ return ParserResult::runtimeError( "Unrecognised warning: '" + warning + "'" );
+ config.warnings = static_cast<WarnAbout::What>( config.warnings | warningSet );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const loadTestNamesFromFile = [&]( std::string const& filename ) {
+ std::ifstream f( filename.c_str() );
+ if( !f.is_open() )
+ return ParserResult::runtimeError( "Unable to load input file: '" + filename + "'" );
+
+ std::string line;
+ while( std::getline( f, line ) ) {
+ line = trim(line);
+ if( !line.empty() && !startsWith( line, '#' ) ) {
+ if( !startsWith( line, '"' ) )
+ line = '"' + line + '"';
+ config.testsOrTags.push_back( line );
+ config.testsOrTags.emplace_back( "," );
+ }
+ }
+ //Remove comma in the end
+ if(!config.testsOrTags.empty())
+ config.testsOrTags.erase( config.testsOrTags.end()-1 );
+
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setTestOrder = [&]( std::string const& order ) {
+ if( startsWith( "declared", order ) )
+ config.runOrder = RunTests::InDeclarationOrder;
+ else if( startsWith( "lexical", order ) )
+ config.runOrder = RunTests::InLexicographicalOrder;
+ else if( startsWith( "random", order ) )
+ config.runOrder = RunTests::InRandomOrder;
+ else
+ return clara::ParserResult::runtimeError( "Unrecognised ordering: '" + order + "'" );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setRngSeed = [&]( std::string const& seed ) {
+ if( seed != "time" )
+ return clara::detail::convertInto( seed, config.rngSeed );
+ config.rngSeed = static_cast<unsigned int>( std::time(nullptr) );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setColourUsage = [&]( std::string const& useColour ) {
+ auto mode = toLower( useColour );
+
+ if( mode == "yes" )
+ config.useColour = UseColour::Yes;
+ else if( mode == "no" )
+ config.useColour = UseColour::No;
+ else if( mode == "auto" )
+ config.useColour = UseColour::Auto;
+ else
+ return ParserResult::runtimeError( "colour mode must be one of: auto, yes or no. '" + useColour + "' not recognised" );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setWaitForKeypress = [&]( std::string const& keypress ) {
+ auto keypressLc = toLower( keypress );
+ if (keypressLc == "never")
+ config.waitForKeypress = WaitForKeypress::Never;
+ else if( keypressLc == "start" )
+ config.waitForKeypress = WaitForKeypress::BeforeStart;
+ else if( keypressLc == "exit" )
+ config.waitForKeypress = WaitForKeypress::BeforeExit;
+ else if( keypressLc == "both" )
+ config.waitForKeypress = WaitForKeypress::BeforeStartAndExit;
+ else
+ return ParserResult::runtimeError( "keypress argument must be one of: never, start, exit or both. '" + keypress + "' not recognised" );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setVerbosity = [&]( std::string const& verbosity ) {
+ auto lcVerbosity = toLower( verbosity );
+ if( lcVerbosity == "quiet" )
+ config.verbosity = Verbosity::Quiet;
+ else if( lcVerbosity == "normal" )
+ config.verbosity = Verbosity::Normal;
+ else if( lcVerbosity == "high" )
+ config.verbosity = Verbosity::High;
+ else
+ return ParserResult::runtimeError( "Unrecognised verbosity, '" + verbosity + "'" );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setReporter = [&]( std::string const& reporter ) {
+ IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories();
+
+ auto lcReporter = toLower( reporter );
+ auto result = factories.find( lcReporter );
+
+ if( factories.end() != result )
+ config.reporterName = lcReporter;
+ else
+ return ParserResult::runtimeError( "Unrecognized reporter, '" + reporter + "'. Check available with --list-reporters" );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+
+ auto cli
+ = ExeName( config.processName )
+ | Help( config.showHelp )
+ | Opt( config.listTests )
+ ["-l"]["--list-tests"]
+ ( "list all/matching test cases" )
+ | Opt( config.listTags )
+ ["-t"]["--list-tags"]
+ ( "list all/matching tags" )
+ | Opt( config.showSuccessfulTests )
+ ["-s"]["--success"]
+ ( "include successful tests in output" )
+ | Opt( config.shouldDebugBreak )
+ ["-b"]["--break"]
+ ( "break into debugger on failure" )
+ | Opt( config.noThrow )
+ ["-e"]["--nothrow"]
+ ( "skip exception tests" )
+ | Opt( config.showInvisibles )
+ ["-i"]["--invisibles"]
+ ( "show invisibles (tabs, newlines)" )
+ | Opt( config.outputFilename, "filename" )
+ ["-o"]["--out"]
+ ( "output filename" )
+ | Opt( setReporter, "name" )
+ ["-r"]["--reporter"]
+ ( "reporter to use (defaults to console)" )
+ | Opt( config.name, "name" )
+ ["-n"]["--name"]
+ ( "suite name" )
+ | Opt( [&]( bool ){ config.abortAfter = 1; } )
+ ["-a"]["--abort"]
+ ( "abort at first failure" )
+ | Opt( [&]( int x ){ config.abortAfter = x; }, "no. failures" )
+ ["-x"]["--abortx"]
+ ( "abort after x failures" )
+ | Opt( setWarning, "warning name" )
+ ["-w"]["--warn"]
+ ( "enable warnings" )
+ | Opt( [&]( bool flag ) { config.showDurations = flag ? ShowDurations::Always : ShowDurations::Never; }, "yes|no" )
+ ["-d"]["--durations"]
+ ( "show test durations" )
+ | Opt( loadTestNamesFromFile, "filename" )
+ ["-f"]["--input-file"]
+ ( "load test names to run from a file" )
+ | Opt( config.filenamesAsTags )
+ ["-#"]["--filenames-as-tags"]
+ ( "adds a tag for the filename" )
+ | Opt( config.sectionsToRun, "section name" )
+ ["-c"]["--section"]
+ ( "specify section to run" )
+ | Opt( setVerbosity, "quiet|normal|high" )
+ ["-v"]["--verbosity"]
+ ( "set output verbosity" )
+ | Opt( config.listTestNamesOnly )
+ ["--list-test-names-only"]
+ ( "list all/matching test cases names only" )
+ | Opt( config.listReporters )
+ ["--list-reporters"]
+ ( "list all reporters" )
+ | Opt( setTestOrder, "decl|lex|rand" )
+ ["--order"]
+ ( "test case order (defaults to decl)" )
+ | Opt( setRngSeed, "'time'|number" )
+ ["--rng-seed"]
+ ( "set a specific seed for random numbers" )
+ | Opt( setColourUsage, "yes|no" )
+ ["--use-colour"]
+ ( "should output be colourised" )
+ | Opt( config.libIdentify )
+ ["--libidentify"]
+ ( "report name and version according to libidentify standard" )
+ | Opt( setWaitForKeypress, "never|start|exit|both" )
+ ["--wait-for-keypress"]
+ ( "waits for a keypress before exiting" )
+ | Opt( config.benchmarkSamples, "samples" )
+ ["--benchmark-samples"]
+ ( "number of samples to collect (default: 100)" )
+ | Opt( config.benchmarkResamples, "resamples" )
+ ["--benchmark-resamples"]
+ ( "number of resamples for the bootstrap (default: 100000)" )
+ | Opt( config.benchmarkConfidenceInterval, "confidence interval" )
+ ["--benchmark-confidence-interval"]
+ ( "confidence interval for the bootstrap (between 0 and 1, default: 0.95)" )
+ | Opt( config.benchmarkNoAnalysis )
+ ["--benchmark-no-analysis"]
+ ( "perform only measurements; do not perform any analysis" )
+ | Opt( config.benchmarkWarmupTime, "benchmarkWarmupTime" )
+ ["--benchmark-warmup-time"]
+ ( "amount of time in milliseconds spent on warming up each test (default: 100)" )
+ | Arg( config.testsOrTags, "test name|pattern|tags" )
+ ( "which test or tests to use" );
+
+ return cli;
+ }
+
+} // end namespace Catch
+// end catch_commandline.cpp
+// start catch_common.cpp
+
+#include <cstring>
+#include <ostream>
+
+namespace Catch {
+
+ bool SourceLineInfo::operator == ( SourceLineInfo const& other ) const noexcept {
+ return line == other.line && (file == other.file || std::strcmp(file, other.file) == 0);
+ }
+ bool SourceLineInfo::operator < ( SourceLineInfo const& other ) const noexcept {
+ // We can assume that the same file will usually have the same pointer.
+ // Thus, if the pointers are the same, there is no point in calling the strcmp
+ return line < other.line || ( line == other.line && file != other.file && (std::strcmp(file, other.file) < 0));
+ }
+
+ std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ) {
+#ifndef __GNUG__
+ os << info.file << '(' << info.line << ')';
+#else
+ os << info.file << ':' << info.line;
+#endif
+ return os;
+ }
+
+ std::string StreamEndStop::operator+() const {
+ return std::string();
+ }
+
+ NonCopyable::NonCopyable() = default;
+ NonCopyable::~NonCopyable() = default;
+
+}
+// end catch_common.cpp
+// start catch_config.cpp
+
+namespace Catch {
+
+ Config::Config( ConfigData const& data )
+ : m_data( data ),
+ m_stream( openStream() )
+ {
+ // We need to trim filter specs to avoid trouble with superfluous
+ // whitespace (esp. important for bdd macros, as those are manually
+ // aligned with whitespace).
+
+ for (auto& elem : m_data.testsOrTags) {
+ elem = trim(elem);
+ }
+ for (auto& elem : m_data.sectionsToRun) {
+ elem = trim(elem);
+ }
+
+ TestSpecParser parser(ITagAliasRegistry::get());
+ if (!m_data.testsOrTags.empty()) {
+ m_hasTestFilters = true;
+ for (auto const& testOrTags : m_data.testsOrTags) {
+ parser.parse(testOrTags);
+ }
+ }
+ m_testSpec = parser.testSpec();
+ }
+
+ std::string const& Config::getFilename() const {
+ return m_data.outputFilename ;
+ }
+
+ bool Config::listTests() const { return m_data.listTests; }
+ bool Config::listTestNamesOnly() const { return m_data.listTestNamesOnly; }
+ bool Config::listTags() const { return m_data.listTags; }
+ bool Config::listReporters() const { return m_data.listReporters; }
+
+ std::string Config::getProcessName() const { return m_data.processName; }
+ std::string const& Config::getReporterName() const { return m_data.reporterName; }
+
+ std::vector<std::string> const& Config::getTestsOrTags() const { return m_data.testsOrTags; }
+ std::vector<std::string> const& Config::getSectionsToRun() const { return m_data.sectionsToRun; }
+
+ TestSpec const& Config::testSpec() const { return m_testSpec; }
+ bool Config::hasTestFilters() const { return m_hasTestFilters; }
+
+ bool Config::showHelp() const { return m_data.showHelp; }
+
+ // IConfig interface
+ bool Config::allowThrows() const { return !m_data.noThrow; }
+ std::ostream& Config::stream() const { return m_stream->stream(); }
+ std::string Config::name() const { return m_data.name.empty() ? m_data.processName : m_data.name; }
+ bool Config::includeSuccessfulResults() const { return m_data.showSuccessfulTests; }
+ bool Config::warnAboutMissingAssertions() const { return !!(m_data.warnings & WarnAbout::NoAssertions); }
+ bool Config::warnAboutNoTests() const { return !!(m_data.warnings & WarnAbout::NoTests); }
+ ShowDurations::OrNot Config::showDurations() const { return m_data.showDurations; }
+ RunTests::InWhatOrder Config::runOrder() const { return m_data.runOrder; }
+ unsigned int Config::rngSeed() const { return m_data.rngSeed; }
+ UseColour::YesOrNo Config::useColour() const { return m_data.useColour; }
+ bool Config::shouldDebugBreak() const { return m_data.shouldDebugBreak; }
+ int Config::abortAfter() const { return m_data.abortAfter; }
+ bool Config::showInvisibles() const { return m_data.showInvisibles; }
+ Verbosity Config::verbosity() const { return m_data.verbosity; }
+
+ bool Config::benchmarkNoAnalysis() const { return m_data.benchmarkNoAnalysis; }
+ int Config::benchmarkSamples() const { return m_data.benchmarkSamples; }
+ double Config::benchmarkConfidenceInterval() const { return m_data.benchmarkConfidenceInterval; }
+ unsigned int Config::benchmarkResamples() const { return m_data.benchmarkResamples; }
+ std::chrono::milliseconds Config::benchmarkWarmupTime() const { return std::chrono::milliseconds(m_data.benchmarkWarmupTime); }
+
+ IStream const* Config::openStream() {
+ return Catch::makeStream(m_data.outputFilename);
+ }
+
+} // end namespace Catch
+// end catch_config.cpp
+// start catch_console_colour.cpp
+
+#if defined(__clang__)
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wexit-time-destructors"
+#endif
+
+// start catch_errno_guard.h
+
+namespace Catch {
+
+ class ErrnoGuard {
+ public:
+ ErrnoGuard();
+ ~ErrnoGuard();
+ private:
+ int m_oldErrno;
+ };
+
+}
+
+// end catch_errno_guard.h
+#include <sstream>
+
+namespace Catch {
+ namespace {
+
+ struct IColourImpl {
+ virtual ~IColourImpl() = default;
+ virtual void use( Colour::Code _colourCode ) = 0;
+ };
+
+ struct NoColourImpl : IColourImpl {
+ void use( Colour::Code ) override {}
+
+ static IColourImpl* instance() {
+ static NoColourImpl s_instance;
+ return &s_instance;
+ }
+ };
+
+ } // anon namespace
+} // namespace Catch
+
+#if !defined( CATCH_CONFIG_COLOUR_NONE ) && !defined( CATCH_CONFIG_COLOUR_WINDOWS ) && !defined( CATCH_CONFIG_COLOUR_ANSI )
+# ifdef CATCH_PLATFORM_WINDOWS
+# define CATCH_CONFIG_COLOUR_WINDOWS
+# else
+# define CATCH_CONFIG_COLOUR_ANSI
+# endif
+#endif
+
+#if defined ( CATCH_CONFIG_COLOUR_WINDOWS ) /////////////////////////////////////////
+
+namespace Catch {
+namespace {
+
+ class Win32ColourImpl : public IColourImpl {
+ public:
+ Win32ColourImpl() : stdoutHandle( GetStdHandle(STD_OUTPUT_HANDLE) )
+ {
+ CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
+ GetConsoleScreenBufferInfo( stdoutHandle, &csbiInfo );
+ originalForegroundAttributes = csbiInfo.wAttributes & ~( BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_INTENSITY );
+ originalBackgroundAttributes = csbiInfo.wAttributes & ~( FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY );
+ }
+
+ void use( Colour::Code _colourCode ) override {
+ switch( _colourCode ) {
+ case Colour::None: return setTextAttribute( originalForegroundAttributes );
+ case Colour::White: return setTextAttribute( FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE );
+ case Colour::Red: return setTextAttribute( FOREGROUND_RED );
+ case Colour::Green: return setTextAttribute( FOREGROUND_GREEN );
+ case Colour::Blue: return setTextAttribute( FOREGROUND_BLUE );
+ case Colour::Cyan: return setTextAttribute( FOREGROUND_BLUE | FOREGROUND_GREEN );
+ case Colour::Yellow: return setTextAttribute( FOREGROUND_RED | FOREGROUND_GREEN );
+ case Colour::Grey: return setTextAttribute( 0 );
+
+ case Colour::LightGrey: return setTextAttribute( FOREGROUND_INTENSITY );
+ case Colour::BrightRed: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_RED );
+ case Colour::BrightGreen: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN );
+ case Colour::BrightWhite: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE );
+ case Colour::BrightYellow: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN );
+
+ case Colour::Bright: CATCH_INTERNAL_ERROR( "not a colour" );
+
+ default:
+ CATCH_ERROR( "Unknown colour requested" );
+ }
+ }
+
+ private:
+ void setTextAttribute( WORD _textAttribute ) {
+ SetConsoleTextAttribute( stdoutHandle, _textAttribute | originalBackgroundAttributes );
+ }
+ HANDLE stdoutHandle;
+ WORD originalForegroundAttributes;
+ WORD originalBackgroundAttributes;
+ };
+
+ IColourImpl* platformColourInstance() {
+ static Win32ColourImpl s_instance;
+
+ IConfigPtr config = getCurrentContext().getConfig();
+ UseColour::YesOrNo colourMode = config
+ ? config->useColour()
+ : UseColour::Auto;
+ if( colourMode == UseColour::Auto )
+ colourMode = UseColour::Yes;
+ return colourMode == UseColour::Yes
+ ? &s_instance
+ : NoColourImpl::instance();
+ }
+
+} // end anon namespace
+} // end namespace Catch
+
+#elif defined( CATCH_CONFIG_COLOUR_ANSI ) //////////////////////////////////////
+
+#include <unistd.h>
+
+namespace Catch {
+namespace {
+
+ // use POSIX/ ANSI console terminal codes
+ // Thanks to Adam Strzelecki for original contribution
+ // (http://github.com/nanoant)
+ // https://github.com/philsquared/Catch/pull/131
+ class PosixColourImpl : public IColourImpl {
+ public:
+ void use( Colour::Code _colourCode ) override {
+ switch( _colourCode ) {
+ case Colour::None:
+ case Colour::White: return setColour( "[0m" );
+ case Colour::Red: return setColour( "[0;31m" );
+ case Colour::Green: return setColour( "[0;32m" );
+ case Colour::Blue: return setColour( "[0;34m" );
+ case Colour::Cyan: return setColour( "[0;36m" );
+ case Colour::Yellow: return setColour( "[0;33m" );
+ case Colour::Grey: return setColour( "[1;30m" );
+
+ case Colour::LightGrey: return setColour( "[0;37m" );
+ case Colour::BrightRed: return setColour( "[1;31m" );
+ case Colour::BrightGreen: return setColour( "[1;32m" );
+ case Colour::BrightWhite: return setColour( "[1;37m" );
+ case Colour::BrightYellow: return setColour( "[1;33m" );
+
+ case Colour::Bright: CATCH_INTERNAL_ERROR( "not a colour" );
+ default: CATCH_INTERNAL_ERROR( "Unknown colour requested" );
+ }
+ }
+ static IColourImpl* instance() {
+ static PosixColourImpl s_instance;
+ return &s_instance;
+ }
+
+ private:
+ void setColour( const char* _escapeCode ) {
+ getCurrentContext().getConfig()->stream()
+ << '\033' << _escapeCode;
+ }
+ };
+
+ bool useColourOnPlatform() {
+ return
+#if defined(CATCH_PLATFORM_MAC) || defined(CATCH_PLATFORM_IPHONE)
+ !isDebuggerActive() &&
+#endif
+#if !(defined(__DJGPP__) && defined(__STRICT_ANSI__))
+ isatty(STDOUT_FILENO)
+#else
+ false
+#endif
+ ;
+ }
+ IColourImpl* platformColourInstance() {
+ ErrnoGuard guard;
+ IConfigPtr config = getCurrentContext().getConfig();
+ UseColour::YesOrNo colourMode = config
+ ? config->useColour()
+ : UseColour::Auto;
+ if( colourMode == UseColour::Auto )
+ colourMode = useColourOnPlatform()
+ ? UseColour::Yes
+ : UseColour::No;
+ return colourMode == UseColour::Yes
+ ? PosixColourImpl::instance()
+ : NoColourImpl::instance();
+ }
+
+} // end anon namespace
+} // end namespace Catch
+
+#else // not Windows or ANSI ///////////////////////////////////////////////
+
+namespace Catch {
+
+ static IColourImpl* platformColourInstance() { return NoColourImpl::instance(); }
+
+} // end namespace Catch
+
+#endif // Windows/ ANSI/ None
+
+namespace Catch {
+
+ Colour::Colour( Code _colourCode ) { use( _colourCode ); }
+ Colour::Colour( Colour&& other ) noexcept {
+ m_moved = other.m_moved;
+ other.m_moved = true;
+ }
+ Colour& Colour::operator=( Colour&& other ) noexcept {
+ m_moved = other.m_moved;
+ other.m_moved = true;
+ return *this;
+ }
+
+ Colour::~Colour(){ if( !m_moved ) use( None ); }
+
+ void Colour::use( Code _colourCode ) {
+ static IColourImpl* impl = platformColourInstance();
+ // Strictly speaking, this cannot possibly happen.
+ // However, under some conditions it does happen (see #1626),
+ // and this change is small enough that we can let practicality
+ // triumph over purity in this case.
+ if (impl != nullptr) {
+ impl->use( _colourCode );
+ }
+ }
+
+ std::ostream& operator << ( std::ostream& os, Colour const& ) {
+ return os;
+ }
+
+} // end namespace Catch
+
+#if defined(__clang__)
+# pragma clang diagnostic pop
+#endif
+
+// end catch_console_colour.cpp
+// start catch_context.cpp
+
+namespace Catch {
+
+ class Context : public IMutableContext, NonCopyable {
+
+ public: // IContext
+ IResultCapture* getResultCapture() override {
+ return m_resultCapture;
+ }
+ IRunner* getRunner() override {
+ return m_runner;
+ }
+
+ IConfigPtr const& getConfig() const override {
+ return m_config;
+ }
+
+ ~Context() override;
+
+ public: // IMutableContext
+ void setResultCapture( IResultCapture* resultCapture ) override {
+ m_resultCapture = resultCapture;
+ }
+ void setRunner( IRunner* runner ) override {
+ m_runner = runner;
+ }
+ void setConfig( IConfigPtr const& config ) override {
+ m_config = config;
+ }
+
+ friend IMutableContext& getCurrentMutableContext();
+
+ private:
+ IConfigPtr m_config;
+ IRunner* m_runner = nullptr;
+ IResultCapture* m_resultCapture = nullptr;
+ };
+
+ IMutableContext *IMutableContext::currentContext = nullptr;
+
+ void IMutableContext::createContext()
+ {
+ currentContext = new Context();
+ }
+
+ void cleanUpContext() {
+ delete IMutableContext::currentContext;
+ IMutableContext::currentContext = nullptr;
+ }
+ IContext::~IContext() = default;
+ IMutableContext::~IMutableContext() = default;
+ Context::~Context() = default;
+
+ SimplePcg32& rng() {
+ static SimplePcg32 s_rng;
+ return s_rng;
+ }
+
+}
+// end catch_context.cpp
+// start catch_debug_console.cpp
+
+// start catch_debug_console.h
+
+#include <string>
+
+namespace Catch {
+ void writeToDebugConsole( std::string const& text );
+}
+
+// end catch_debug_console.h
+#if defined(CATCH_CONFIG_ANDROID_LOGWRITE)
+#include <android/log.h>
+
+ namespace Catch {
+ void writeToDebugConsole( std::string const& text ) {
+ __android_log_write( ANDROID_LOG_DEBUG, "Catch", text.c_str() );
+ }
+ }
+
+#elif defined(CATCH_PLATFORM_WINDOWS)
+
+ namespace Catch {
+ void writeToDebugConsole( std::string const& text ) {
+ ::OutputDebugStringA( text.c_str() );
+ }
+ }
+
+#else
+
+ namespace Catch {
+ void writeToDebugConsole( std::string const& text ) {
+ // !TBD: Need a version for Mac/ XCode and other IDEs
+ Catch::cout() << text;
+ }
+ }
+
+#endif // Platform
+// end catch_debug_console.cpp
+// start catch_debugger.cpp
+
+#if defined(CATCH_PLATFORM_MAC) || defined(CATCH_PLATFORM_IPHONE)
+
+# include <cassert>
+# include <sys/types.h>
+# include <unistd.h>
+# include <cstddef>
+# include <ostream>
+
+#ifdef __apple_build_version__
+ // These headers will only compile with AppleClang (XCode)
+ // For other compilers (Clang, GCC, ... ) we need to exclude them
+# include <sys/sysctl.h>
+#endif
+
+ namespace Catch {
+ #ifdef __apple_build_version__
+ // The following function is taken directly from the following technical note:
+ // https://developer.apple.com/library/archive/qa/qa1361/_index.html
+
+ // Returns true if the current process is being debugged (either
+ // running under the debugger or has a debugger attached post facto).
+ bool isDebuggerActive(){
+ int mib[4];
+ struct kinfo_proc info;
+ std::size_t size;
+
+ // Initialize the flags so that, if sysctl fails for some bizarre
+ // reason, we get a predictable result.
+
+ info.kp_proc.p_flag = 0;
+
+ // Initialize mib, which tells sysctl the info we want, in this case
+ // we're looking for information about a specific process ID.
+
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_PROC;
+ mib[2] = KERN_PROC_PID;
+ mib[3] = getpid();
+
+ // Call sysctl.
+
+ size = sizeof(info);
+ if( sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, nullptr, 0) != 0 ) {
+ Catch::cerr() << "\n** Call to sysctl failed - unable to determine if debugger is active **\n" << std::endl;
+ return false;
+ }
+
+ // We're being debugged if the P_TRACED flag is set.
+
+ return ( (info.kp_proc.p_flag & P_TRACED) != 0 );
+ }
+ #else
+ bool isDebuggerActive() {
+ // We need to find another way to determine this for non-appleclang compilers on macOS
+ return false;
+ }
+ #endif
+ } // namespace Catch
+
+#elif defined(CATCH_PLATFORM_LINUX)
+ #include <fstream>
+ #include <string>
+
+ namespace Catch{
+ // The standard POSIX way of detecting a debugger is to attempt to
+ // ptrace() the process, but this needs to be done from a child and not
+ // this process itself to still allow attaching to this process later
+ // if wanted, so is rather heavy. Under Linux we have the PID of the
+ // "debugger" (which doesn't need to be gdb, of course, it could also
+ // be strace, for example) in /proc/$PID/status, so just get it from
+ // there instead.
+ bool isDebuggerActive(){
+ // Libstdc++ has a bug, where std::ifstream sets errno to 0
+ // This way our users can properly assert over errno values
+ ErrnoGuard guard;
+ std::ifstream in("/proc/self/status");
+ for( std::string line; std::getline(in, line); ) {
+ static const int PREFIX_LEN = 11;
+ if( line.compare(0, PREFIX_LEN, "TracerPid:\t") == 0 ) {
+ // We're traced if the PID is not 0 and no other PID starts
+ // with 0 digit, so it's enough to check for just a single
+ // character.
+ return line.length() > PREFIX_LEN && line[PREFIX_LEN] != '0';
+ }
+ }
+
+ return false;
+ }
+ } // namespace Catch
+#elif defined(_MSC_VER)
+ extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent();
+ namespace Catch {
+ bool isDebuggerActive() {
+ return IsDebuggerPresent() != 0;
+ }
+ }
+#elif defined(__MINGW32__)
+ extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent();
+ namespace Catch {
+ bool isDebuggerActive() {
+ return IsDebuggerPresent() != 0;
+ }
+ }
+#else
+ namespace Catch {
+ bool isDebuggerActive() { return false; }
+ }
+#endif // Platform
+// end catch_debugger.cpp
+// start catch_decomposer.cpp
+
+namespace Catch {
+
+ ITransientExpression::~ITransientExpression() = default;
+
+ void formatReconstructedExpression( std::ostream &os, std::string const& lhs, StringRef op, std::string const& rhs ) {
+ if( lhs.size() + rhs.size() < 40 &&
+ lhs.find('\n') == std::string::npos &&
+ rhs.find('\n') == std::string::npos )
+ os << lhs << " " << op << " " << rhs;
+ else
+ os << lhs << "\n" << op << "\n" << rhs;
+ }
+}
+// end catch_decomposer.cpp
+// start catch_enforce.cpp
+
+#include <stdexcept>
+
+namespace Catch {
+#if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) && !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER)
+ [[noreturn]]
+ void throw_exception(std::exception const& e) {
+ Catch::cerr() << "Catch will terminate because it needed to throw an exception.\n"
+ << "The message was: " << e.what() << '\n';
+ std::terminate();
+ }
+#endif
+
+ [[noreturn]]
+ void throw_logic_error(std::string const& msg) {
+ throw_exception(std::logic_error(msg));
+ }
+
+ [[noreturn]]
+ void throw_domain_error(std::string const& msg) {
+ throw_exception(std::domain_error(msg));
+ }
+
+ [[noreturn]]
+ void throw_runtime_error(std::string const& msg) {
+ throw_exception(std::runtime_error(msg));
+ }
+
+} // namespace Catch;
+// end catch_enforce.cpp
+// start catch_enum_values_registry.cpp
+// start catch_enum_values_registry.h
+
+#include <vector>
+#include <memory>
+
+namespace Catch {
+
+ namespace Detail {
+
+ std::unique_ptr<EnumInfo> makeEnumInfo( StringRef enumName, StringRef allValueNames, std::vector<int> const& values );
+
+ class EnumValuesRegistry : public IMutableEnumValuesRegistry {
+
+ std::vector<std::unique_ptr<EnumInfo>> m_enumInfos;
+
+ EnumInfo const& registerEnum( StringRef enumName, StringRef allEnums, std::vector<int> const& values) override;
+ };
+
+ std::vector<StringRef> parseEnums( StringRef enums );
+
+ } // Detail
+
+} // Catch
+
+// end catch_enum_values_registry.h
+
+#include <map>
+#include <cassert>
+
+namespace Catch {
+
+ IMutableEnumValuesRegistry::~IMutableEnumValuesRegistry() {}
+
+ namespace Detail {
+
+ namespace {
+ // Extracts the actual name part of an enum instance
+ // In other words, it returns the Blue part of Bikeshed::Colour::Blue
+ StringRef extractInstanceName(StringRef enumInstance) {
+ // Find last occurence of ":"
+ size_t name_start = enumInstance.size();
+ while (name_start > 0 && enumInstance[name_start - 1] != ':') {
+ --name_start;
+ }
+ return enumInstance.substr(name_start, enumInstance.size() - name_start);
+ }
+ }
+
+ std::vector<StringRef> parseEnums( StringRef enums ) {
+ auto enumValues = splitStringRef( enums, ',' );
+ std::vector<StringRef> parsed;
+ parsed.reserve( enumValues.size() );
+ for( auto const& enumValue : enumValues ) {
+ parsed.push_back(trim(extractInstanceName(enumValue)));
+ }
+ return parsed;
+ }
+
+ EnumInfo::~EnumInfo() {}
+
+ StringRef EnumInfo::lookup( int value ) const {
+ for( auto const& valueToName : m_values ) {
+ if( valueToName.first == value )
+ return valueToName.second;
+ }
+ return "{** unexpected enum value **}"_sr;
+ }
+
+ std::unique_ptr<EnumInfo> makeEnumInfo( StringRef enumName, StringRef allValueNames, std::vector<int> const& values ) {
+ std::unique_ptr<EnumInfo> enumInfo( new EnumInfo );
+ enumInfo->m_name = enumName;
+ enumInfo->m_values.reserve( values.size() );
+
+ const auto valueNames = Catch::Detail::parseEnums( allValueNames );
+ assert( valueNames.size() == values.size() );
+ std::size_t i = 0;
+ for( auto value : values )
+ enumInfo->m_values.emplace_back(value, valueNames[i++]);
+
+ return enumInfo;
+ }
+
+ EnumInfo const& EnumValuesRegistry::registerEnum( StringRef enumName, StringRef allValueNames, std::vector<int> const& values ) {
+ m_enumInfos.push_back(makeEnumInfo(enumName, allValueNames, values));
+ return *m_enumInfos.back();
+ }
+
+ } // Detail
+} // Catch
+
+// end catch_enum_values_registry.cpp
+// start catch_errno_guard.cpp
+
+#include <cerrno>
+
+namespace Catch {
+ ErrnoGuard::ErrnoGuard():m_oldErrno(errno){}
+ ErrnoGuard::~ErrnoGuard() { errno = m_oldErrno; }
+}
+// end catch_errno_guard.cpp
+// start catch_exception_translator_registry.cpp
+
+// start catch_exception_translator_registry.h
+
+#include <vector>
+#include <string>
+#include <memory>
+
+namespace Catch {
+
+ class ExceptionTranslatorRegistry : public IExceptionTranslatorRegistry {
+ public:
+ ~ExceptionTranslatorRegistry();
+ virtual void registerTranslator( const IExceptionTranslator* translator );
+ std::string translateActiveException() const override;
+ std::string tryTranslators() const;
+
+ private:
+ std::vector<std::unique_ptr<IExceptionTranslator const>> m_translators;
+ };
+}
+
+// end catch_exception_translator_registry.h
+#ifdef __OBJC__
+#import "Foundation/Foundation.h"
+#endif
+
+namespace Catch {
+
+ ExceptionTranslatorRegistry::~ExceptionTranslatorRegistry() {
+ }
+
+ void ExceptionTranslatorRegistry::registerTranslator( const IExceptionTranslator* translator ) {
+ m_translators.push_back( std::unique_ptr<const IExceptionTranslator>( translator ) );
+ }
+
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ std::string ExceptionTranslatorRegistry::translateActiveException() const {
+ try {
+#ifdef __OBJC__
+ // In Objective-C try objective-c exceptions first
+ @try {
+ return tryTranslators();
+ }
+ @catch (NSException *exception) {
+ return Catch::Detail::stringify( [exception description] );
+ }
+#else
+ // Compiling a mixed mode project with MSVC means that CLR
+ // exceptions will be caught in (...) as well. However, these
+ // do not fill-in std::current_exception and thus lead to crash
+ // when attempting rethrow.
+ // /EHa switch also causes structured exceptions to be caught
+ // here, but they fill-in current_exception properly, so
+ // at worst the output should be a little weird, instead of
+ // causing a crash.
+ if (std::current_exception() == nullptr) {
+ return "Non C++ exception. Possibly a CLR exception.";
+ }
+ return tryTranslators();
+#endif
+ }
+ catch( TestFailureException& ) {
+ std::rethrow_exception(std::current_exception());
+ }
+ catch( std::exception& ex ) {
+ return ex.what();
+ }
+ catch( std::string& msg ) {
+ return msg;
+ }
+ catch( const char* msg ) {
+ return msg;
+ }
+ catch(...) {
+ return "Unknown exception";
+ }
+ }
+
+ std::string ExceptionTranslatorRegistry::tryTranslators() const {
+ if (m_translators.empty()) {
+ std::rethrow_exception(std::current_exception());
+ } else {
+ return m_translators[0]->translate(m_translators.begin() + 1, m_translators.end());
+ }
+ }
+
+#else // ^^ Exceptions are enabled // Exceptions are disabled vv
+ std::string ExceptionTranslatorRegistry::translateActiveException() const {
+ CATCH_INTERNAL_ERROR("Attempted to translate active exception under CATCH_CONFIG_DISABLE_EXCEPTIONS!");
+ }
+
+ std::string ExceptionTranslatorRegistry::tryTranslators() const {
+ CATCH_INTERNAL_ERROR("Attempted to use exception translators under CATCH_CONFIG_DISABLE_EXCEPTIONS!");
+ }
+#endif
+
+}
+// end catch_exception_translator_registry.cpp
+// start catch_fatal_condition.cpp
+
+#if defined(__GNUC__)
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+#endif
+
+#if defined( CATCH_CONFIG_WINDOWS_SEH ) || defined( CATCH_CONFIG_POSIX_SIGNALS )
+
+namespace {
+ // Report the error condition
+ void reportFatal( char const * const message ) {
+ Catch::getCurrentContext().getResultCapture()->handleFatalErrorCondition( message );
+ }
+}
+
+#endif // signals/SEH handling
+
+#if defined( CATCH_CONFIG_WINDOWS_SEH )
+
+namespace Catch {
+ struct SignalDefs { DWORD id; const char* name; };
+
+ // There is no 1-1 mapping between signals and windows exceptions.
+ // Windows can easily distinguish between SO and SigSegV,
+ // but SigInt, SigTerm, etc are handled differently.
+ static SignalDefs signalDefs[] = {
+ { static_cast<DWORD>(EXCEPTION_ILLEGAL_INSTRUCTION), "SIGILL - Illegal instruction signal" },
+ { static_cast<DWORD>(EXCEPTION_STACK_OVERFLOW), "SIGSEGV - Stack overflow" },
+ { static_cast<DWORD>(EXCEPTION_ACCESS_VIOLATION), "SIGSEGV - Segmentation violation signal" },
+ { static_cast<DWORD>(EXCEPTION_INT_DIVIDE_BY_ZERO), "Divide by zero error" },
+ };
+
+ LONG CALLBACK FatalConditionHandler::handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo) {
+ for (auto const& def : signalDefs) {
+ if (ExceptionInfo->ExceptionRecord->ExceptionCode == def.id) {
+ reportFatal(def.name);
+ }
+ }
+ // If its not an exception we care about, pass it along.
+ // This stops us from eating debugger breaks etc.
+ return EXCEPTION_CONTINUE_SEARCH;
+ }
+
+ FatalConditionHandler::FatalConditionHandler() {
+ isSet = true;
+ // 32k seems enough for Catch to handle stack overflow,
+ // but the value was found experimentally, so there is no strong guarantee
+ guaranteeSize = 32 * 1024;
+ exceptionHandlerHandle = nullptr;
+ // Register as first handler in current chain
+ exceptionHandlerHandle = AddVectoredExceptionHandler(1, handleVectoredException);
+ // Pass in guarantee size to be filled
+ SetThreadStackGuarantee(&guaranteeSize);
+ }
+
+ void FatalConditionHandler::reset() {
+ if (isSet) {
+ RemoveVectoredExceptionHandler(exceptionHandlerHandle);
+ SetThreadStackGuarantee(&guaranteeSize);
+ exceptionHandlerHandle = nullptr;
+ isSet = false;
+ }
+ }
+
+ FatalConditionHandler::~FatalConditionHandler() {
+ reset();
+ }
+
+bool FatalConditionHandler::isSet = false;
+ULONG FatalConditionHandler::guaranteeSize = 0;
+PVOID FatalConditionHandler::exceptionHandlerHandle = nullptr;
+
+} // namespace Catch
+
+#elif defined( CATCH_CONFIG_POSIX_SIGNALS )
+
+namespace Catch {
+
+ struct SignalDefs {
+ int id;
+ const char* name;
+ };
+
+ // 32kb for the alternate stack seems to be sufficient. However, this value
+ // is experimentally determined, so that's not guaranteed.
+ static constexpr std::size_t sigStackSize = 32768 >= MINSIGSTKSZ ? 32768 : MINSIGSTKSZ;
+
+ static SignalDefs signalDefs[] = {
+ { SIGINT, "SIGINT - Terminal interrupt signal" },
+ { SIGILL, "SIGILL - Illegal instruction signal" },
+ { SIGFPE, "SIGFPE - Floating point error signal" },
+ { SIGSEGV, "SIGSEGV - Segmentation violation signal" },
+ { SIGTERM, "SIGTERM - Termination request signal" },
+ { SIGABRT, "SIGABRT - Abort (abnormal termination) signal" }
+ };
+
+ void FatalConditionHandler::handleSignal( int sig ) {
+ char const * name = "<unknown signal>";
+ for (auto const& def : signalDefs) {
+ if (sig == def.id) {
+ name = def.name;
+ break;
+ }
+ }
+ reset();
+ reportFatal(name);
+ raise( sig );
+ }
+
+ FatalConditionHandler::FatalConditionHandler() {
+ isSet = true;
+ stack_t sigStack;
+ sigStack.ss_sp = altStackMem;
+ sigStack.ss_size = sigStackSize;
+ sigStack.ss_flags = 0;
+ sigaltstack(&sigStack, &oldSigStack);
+ struct sigaction sa = { };
+
+ sa.sa_handler = handleSignal;
+ sa.sa_flags = SA_ONSTACK;
+ for (std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i) {
+ sigaction(signalDefs[i].id, &sa, &oldSigActions[i]);
+ }
+ }
+
+ FatalConditionHandler::~FatalConditionHandler() {
+ reset();
+ }
+
+ void FatalConditionHandler::reset() {
+ if( isSet ) {
+ // Set signals back to previous values -- hopefully nobody overwrote them in the meantime
+ for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) {
+ sigaction(signalDefs[i].id, &oldSigActions[i], nullptr);
+ }
+ // Return the old stack
+ sigaltstack(&oldSigStack, nullptr);
+ isSet = false;
+ }
+ }
+
+ bool FatalConditionHandler::isSet = false;
+ struct sigaction FatalConditionHandler::oldSigActions[sizeof(signalDefs)/sizeof(SignalDefs)] = {};
+ stack_t FatalConditionHandler::oldSigStack = {};
+ char FatalConditionHandler::altStackMem[sigStackSize] = {};
+
+} // namespace Catch
+
+#else
+
+namespace Catch {
+ void FatalConditionHandler::reset() {}
+}
+
+#endif // signals/SEH handling
+
+#if defined(__GNUC__)
+# pragma GCC diagnostic pop
+#endif
+// end catch_fatal_condition.cpp
+// start catch_generators.cpp
+
+#include <limits>
+#include <set>
+
+namespace Catch {
+
+IGeneratorTracker::~IGeneratorTracker() {}
+
+const char* GeneratorException::what() const noexcept {
+ return m_msg;
+}
+
+namespace Generators {
+
+ GeneratorUntypedBase::~GeneratorUntypedBase() {}
+
+ auto acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IGeneratorTracker& {
+ return getResultCapture().acquireGeneratorTracker( lineInfo );
+ }
+
+} // namespace Generators
+} // namespace Catch
+// end catch_generators.cpp
+// start catch_interfaces_capture.cpp
+
+namespace Catch {
+ IResultCapture::~IResultCapture() = default;
+}
+// end catch_interfaces_capture.cpp
+// start catch_interfaces_config.cpp
+
+namespace Catch {
+ IConfig::~IConfig() = default;
+}
+// end catch_interfaces_config.cpp
+// start catch_interfaces_exception.cpp
+
+namespace Catch {
+ IExceptionTranslator::~IExceptionTranslator() = default;
+ IExceptionTranslatorRegistry::~IExceptionTranslatorRegistry() = default;
+}
+// end catch_interfaces_exception.cpp
+// start catch_interfaces_registry_hub.cpp
+
+namespace Catch {
+ IRegistryHub::~IRegistryHub() = default;
+ IMutableRegistryHub::~IMutableRegistryHub() = default;
+}
+// end catch_interfaces_registry_hub.cpp
+// start catch_interfaces_reporter.cpp
+
+// start catch_reporter_listening.h
+
+namespace Catch {
+
+ class ListeningReporter : public IStreamingReporter {
+ using Reporters = std::vector<IStreamingReporterPtr>;
+ Reporters m_listeners;
+ IStreamingReporterPtr m_reporter = nullptr;
+ ReporterPreferences m_preferences;
+
+ public:
+ ListeningReporter();
+
+ void addListener( IStreamingReporterPtr&& listener );
+ void addReporter( IStreamingReporterPtr&& reporter );
+
+ public: // IStreamingReporter
+
+ ReporterPreferences getPreferences() const override;
+
+ void noMatchingTestCases( std::string const& spec ) override;
+
+ void reportInvalidArguments(std::string const&arg) override;
+
+ static std::set<Verbosity> getSupportedVerbosities();
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void benchmarkPreparing(std::string const& name) override;
+ void benchmarkStarting( BenchmarkInfo const& benchmarkInfo ) override;
+ void benchmarkEnded( BenchmarkStats<> const& benchmarkStats ) override;
+ void benchmarkFailed(std::string const&) override;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ void testRunStarting( TestRunInfo const& testRunInfo ) override;
+ void testGroupStarting( GroupInfo const& groupInfo ) override;
+ void testCaseStarting( TestCaseInfo const& testInfo ) override;
+ void sectionStarting( SectionInfo const& sectionInfo ) override;
+ void assertionStarting( AssertionInfo const& assertionInfo ) override;
+
+ // The return value indicates if the messages buffer should be cleared:
+ bool assertionEnded( AssertionStats const& assertionStats ) override;
+ void sectionEnded( SectionStats const& sectionStats ) override;
+ void testCaseEnded( TestCaseStats const& testCaseStats ) override;
+ void testGroupEnded( TestGroupStats const& testGroupStats ) override;
+ void testRunEnded( TestRunStats const& testRunStats ) override;
+
+ void skipTest( TestCaseInfo const& testInfo ) override;
+ bool isMulti() const override;
+
+ };
+
+} // end namespace Catch
+
+// end catch_reporter_listening.h
+namespace Catch {
+
+ ReporterConfig::ReporterConfig( IConfigPtr const& _fullConfig )
+ : m_stream( &_fullConfig->stream() ), m_fullConfig( _fullConfig ) {}
+
+ ReporterConfig::ReporterConfig( IConfigPtr const& _fullConfig, std::ostream& _stream )
+ : m_stream( &_stream ), m_fullConfig( _fullConfig ) {}
+
+ std::ostream& ReporterConfig::stream() const { return *m_stream; }
+ IConfigPtr ReporterConfig::fullConfig() const { return m_fullConfig; }
+
+ TestRunInfo::TestRunInfo( std::string const& _name ) : name( _name ) {}
+
+ GroupInfo::GroupInfo( std::string const& _name,
+ std::size_t _groupIndex,
+ std::size_t _groupsCount )
+ : name( _name ),
+ groupIndex( _groupIndex ),
+ groupsCounts( _groupsCount )
+ {}
+
+ AssertionStats::AssertionStats( AssertionResult const& _assertionResult,
+ std::vector<MessageInfo> const& _infoMessages,
+ Totals const& _totals )
+ : assertionResult( _assertionResult ),
+ infoMessages( _infoMessages ),
+ totals( _totals )
+ {
+ assertionResult.m_resultData.lazyExpression.m_transientExpression = _assertionResult.m_resultData.lazyExpression.m_transientExpression;
+
+ if( assertionResult.hasMessage() ) {
+ // Copy message into messages list.
+ // !TBD This should have been done earlier, somewhere
+ MessageBuilder builder( assertionResult.getTestMacroName(), assertionResult.getSourceInfo(), assertionResult.getResultType() );
+ builder << assertionResult.getMessage();
+ builder.m_info.message = builder.m_stream.str();
+
+ infoMessages.push_back( builder.m_info );
+ }
+ }
+
+ AssertionStats::~AssertionStats() = default;
+
+ SectionStats::SectionStats( SectionInfo const& _sectionInfo,
+ Counts const& _assertions,
+ double _durationInSeconds,
+ bool _missingAssertions )
+ : sectionInfo( _sectionInfo ),
+ assertions( _assertions ),
+ durationInSeconds( _durationInSeconds ),
+ missingAssertions( _missingAssertions )
+ {}
+
+ SectionStats::~SectionStats() = default;
+
+ TestCaseStats::TestCaseStats( TestCaseInfo const& _testInfo,
+ Totals const& _totals,
+ std::string const& _stdOut,
+ std::string const& _stdErr,
+ bool _aborting )
+ : testInfo( _testInfo ),
+ totals( _totals ),
+ stdOut( _stdOut ),
+ stdErr( _stdErr ),
+ aborting( _aborting )
+ {}
+
+ TestCaseStats::~TestCaseStats() = default;
+
+ TestGroupStats::TestGroupStats( GroupInfo const& _groupInfo,
+ Totals const& _totals,
+ bool _aborting )
+ : groupInfo( _groupInfo ),
+ totals( _totals ),
+ aborting( _aborting )
+ {}
+
+ TestGroupStats::TestGroupStats( GroupInfo const& _groupInfo )
+ : groupInfo( _groupInfo ),
+ aborting( false )
+ {}
+
+ TestGroupStats::~TestGroupStats() = default;
+
+ TestRunStats::TestRunStats( TestRunInfo const& _runInfo,
+ Totals const& _totals,
+ bool _aborting )
+ : runInfo( _runInfo ),
+ totals( _totals ),
+ aborting( _aborting )
+ {}
+
+ TestRunStats::~TestRunStats() = default;
+
+ void IStreamingReporter::fatalErrorEncountered( StringRef ) {}
+ bool IStreamingReporter::isMulti() const { return false; }
+
+ IReporterFactory::~IReporterFactory() = default;
+ IReporterRegistry::~IReporterRegistry() = default;
+
+} // end namespace Catch
+// end catch_interfaces_reporter.cpp
+// start catch_interfaces_runner.cpp
+
+namespace Catch {
+ IRunner::~IRunner() = default;
+}
+// end catch_interfaces_runner.cpp
+// start catch_interfaces_testcase.cpp
+
+namespace Catch {
+ ITestInvoker::~ITestInvoker() = default;
+ ITestCaseRegistry::~ITestCaseRegistry() = default;
+}
+// end catch_interfaces_testcase.cpp
+// start catch_leak_detector.cpp
+
+#ifdef CATCH_CONFIG_WINDOWS_CRTDBG
+#include <crtdbg.h>
+
+namespace Catch {
+
+ LeakDetector::LeakDetector() {
+ int flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
+ flag |= _CRTDBG_LEAK_CHECK_DF;
+ flag |= _CRTDBG_ALLOC_MEM_DF;
+ _CrtSetDbgFlag(flag);
+ _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+ _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
+ // Change this to leaking allocation's number to break there
+ _CrtSetBreakAlloc(-1);
+ }
+}
+
+#else
+
+ Catch::LeakDetector::LeakDetector() {}
+
+#endif
+
+Catch::LeakDetector::~LeakDetector() {
+ Catch::cleanUp();
+}
+// end catch_leak_detector.cpp
+// start catch_list.cpp
+
+// start catch_list.h
+
+#include <set>
+
+namespace Catch {
+
+ std::size_t listTests( Config const& config );
+
+ std::size_t listTestsNamesOnly( Config const& config );
+
+ struct TagInfo {
+ void add( std::string const& spelling );
+ std::string all() const;
+
+ std::set<std::string> spellings;
+ std::size_t count = 0;
+ };
+
+ std::size_t listTags( Config const& config );
+
+ std::size_t listReporters();
+
+ Option<std::size_t> list( std::shared_ptr<Config> const& config );
+
+} // end namespace Catch
+
+// end catch_list.h
+// start catch_text.h
+
+namespace Catch {
+ using namespace clara::TextFlow;
+}
+
+// end catch_text.h
+#include <limits>
+#include <algorithm>
+#include <iomanip>
+
+namespace Catch {
+
+ std::size_t listTests( Config const& config ) {
+ TestSpec const& testSpec = config.testSpec();
+ if( config.hasTestFilters() )
+ Catch::cout() << "Matching test cases:\n";
+ else {
+ Catch::cout() << "All available test cases:\n";
+ }
+
+ auto matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config );
+ for( auto const& testCaseInfo : matchedTestCases ) {
+ Colour::Code colour = testCaseInfo.isHidden()
+ ? Colour::SecondaryText
+ : Colour::None;
+ Colour colourGuard( colour );
+
+ Catch::cout() << Column( testCaseInfo.name ).initialIndent( 2 ).indent( 4 ) << "\n";
+ if( config.verbosity() >= Verbosity::High ) {
+ Catch::cout() << Column( Catch::Detail::stringify( testCaseInfo.lineInfo ) ).indent(4) << std::endl;
+ std::string description = testCaseInfo.description;
+ if( description.empty() )
+ description = "(NO DESCRIPTION)";
+ Catch::cout() << Column( description ).indent(4) << std::endl;
+ }
+ if( !testCaseInfo.tags.empty() )
+ Catch::cout() << Column( testCaseInfo.tagsAsString() ).indent( 6 ) << "\n";
+ }
+
+ if( !config.hasTestFilters() )
+ Catch::cout() << pluralise( matchedTestCases.size(), "test case" ) << '\n' << std::endl;
+ else
+ Catch::cout() << pluralise( matchedTestCases.size(), "matching test case" ) << '\n' << std::endl;
+ return matchedTestCases.size();
+ }
+
+ std::size_t listTestsNamesOnly( Config const& config ) {
+ TestSpec const& testSpec = config.testSpec();
+ std::size_t matchedTests = 0;
+ std::vector<TestCase> matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config );
+ for( auto const& testCaseInfo : matchedTestCases ) {
+ matchedTests++;
+ if( startsWith( testCaseInfo.name, '#' ) )
+ Catch::cout() << '"' << testCaseInfo.name << '"';
+ else
+ Catch::cout() << testCaseInfo.name;
+ if ( config.verbosity() >= Verbosity::High )
+ Catch::cout() << "\t@" << testCaseInfo.lineInfo;
+ Catch::cout() << std::endl;
+ }
+ return matchedTests;
+ }
+
+ void TagInfo::add( std::string const& spelling ) {
+ ++count;
+ spellings.insert( spelling );
+ }
+
+ std::string TagInfo::all() const {
+ size_t size = 0;
+ for (auto const& spelling : spellings) {
+ // Add 2 for the brackes
+ size += spelling.size() + 2;
+ }
+
+ std::string out; out.reserve(size);
+ for (auto const& spelling : spellings) {
+ out += '[';
+ out += spelling;
+ out += ']';
+ }
+ return out;
+ }
+
+ std::size_t listTags( Config const& config ) {
+ TestSpec const& testSpec = config.testSpec();
+ if( config.hasTestFilters() )
+ Catch::cout() << "Tags for matching test cases:\n";
+ else {
+ Catch::cout() << "All available tags:\n";
+ }
+
+ std::map<std::string, TagInfo> tagCounts;
+
+ std::vector<TestCase> matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config );
+ for( auto const& testCase : matchedTestCases ) {
+ for( auto const& tagName : testCase.getTestCaseInfo().tags ) {
+ std::string lcaseTagName = toLower( tagName );
+ auto countIt = tagCounts.find( lcaseTagName );
+ if( countIt == tagCounts.end() )
+ countIt = tagCounts.insert( std::make_pair( lcaseTagName, TagInfo() ) ).first;
+ countIt->second.add( tagName );
+ }
+ }
+
+ for( auto const& tagCount : tagCounts ) {
+ ReusableStringStream rss;
+ rss << " " << std::setw(2) << tagCount.second.count << " ";
+ auto str = rss.str();
+ auto wrapper = Column( tagCount.second.all() )
+ .initialIndent( 0 )
+ .indent( str.size() )
+ .width( CATCH_CONFIG_CONSOLE_WIDTH-10 );
+ Catch::cout() << str << wrapper << '\n';
+ }
+ Catch::cout() << pluralise( tagCounts.size(), "tag" ) << '\n' << std::endl;
+ return tagCounts.size();
+ }
+
+ std::size_t listReporters() {
+ Catch::cout() << "Available reporters:\n";
+ IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories();
+ std::size_t maxNameLen = 0;
+ for( auto const& factoryKvp : factories )
+ maxNameLen = (std::max)( maxNameLen, factoryKvp.first.size() );
+
+ for( auto const& factoryKvp : factories ) {
+ Catch::cout()
+ << Column( factoryKvp.first + ":" )
+ .indent(2)
+ .width( 5+maxNameLen )
+ + Column( factoryKvp.second->getDescription() )
+ .initialIndent(0)
+ .indent(2)
+ .width( CATCH_CONFIG_CONSOLE_WIDTH - maxNameLen-8 )
+ << "\n";
+ }
+ Catch::cout() << std::endl;
+ return factories.size();
+ }
+
+ Option<std::size_t> list( std::shared_ptr<Config> const& config ) {
+ Option<std::size_t> listedCount;
+ getCurrentMutableContext().setConfig( config );
+ if( config->listTests() )
+ listedCount = listedCount.valueOr(0) + listTests( *config );
+ if( config->listTestNamesOnly() )
+ listedCount = listedCount.valueOr(0) + listTestsNamesOnly( *config );
+ if( config->listTags() )
+ listedCount = listedCount.valueOr(0) + listTags( *config );
+ if( config->listReporters() )
+ listedCount = listedCount.valueOr(0) + listReporters();
+ return listedCount;
+ }
+
+} // end namespace Catch
+// end catch_list.cpp
+// start catch_matchers.cpp
+
+namespace Catch {
+namespace Matchers {
+ namespace Impl {
+
+ std::string MatcherUntypedBase::toString() const {
+ if( m_cachedToString.empty() )
+ m_cachedToString = describe();
+ return m_cachedToString;
+ }
+
+ MatcherUntypedBase::~MatcherUntypedBase() = default;
+
+ } // namespace Impl
+} // namespace Matchers
+
+using namespace Matchers;
+using Matchers::Impl::MatcherBase;
+
+} // namespace Catch
+// end catch_matchers.cpp
+// start catch_matchers_exception.cpp
+
+namespace Catch {
+namespace Matchers {
+namespace Exception {
+
+bool ExceptionMessageMatcher::match(std::exception const& ex) const {
+ return ex.what() == m_message;
+}
+
+std::string ExceptionMessageMatcher::describe() const {
+ return "exception message matches \"" + m_message + "\"";
+}
+
+}
+Exception::ExceptionMessageMatcher Message(std::string const& message) {
+ return Exception::ExceptionMessageMatcher(message);
+}
+
+// namespace Exception
+} // namespace Matchers
+} // namespace Catch
+// end catch_matchers_exception.cpp
+// start catch_matchers_floating.cpp
+
+// start catch_polyfills.hpp
+
+namespace Catch {
+ bool isnan(float f);
+ bool isnan(double d);
+}
+
+// end catch_polyfills.hpp
+// start catch_to_string.hpp
+
+#include <string>
+
+namespace Catch {
+ template <typename T>
+ std::string to_string(T const& t) {
+#if defined(CATCH_CONFIG_CPP11_TO_STRING)
+ return std::to_string(t);
+#else
+ ReusableStringStream rss;
+ rss << t;
+ return rss.str();
+#endif
+ }
+} // end namespace Catch
+
+// end catch_to_string.hpp
+#include <algorithm>
+#include <cmath>
+#include <cstdlib>
+#include <cstdint>
+#include <cstring>
+#include <sstream>
+#include <type_traits>
+#include <iomanip>
+#include <limits>
+
+namespace Catch {
+namespace {
+
+ int32_t convert(float f) {
+ static_assert(sizeof(float) == sizeof(int32_t), "Important ULP matcher assumption violated");
+ int32_t i;
+ std::memcpy(&i, &f, sizeof(f));
+ return i;
+ }
+
+ int64_t convert(double d) {
+ static_assert(sizeof(double) == sizeof(int64_t), "Important ULP matcher assumption violated");
+ int64_t i;
+ std::memcpy(&i, &d, sizeof(d));
+ return i;
+ }
+
+ template <typename FP>
+ bool almostEqualUlps(FP lhs, FP rhs, uint64_t maxUlpDiff) {
+ // Comparison with NaN should always be false.
+ // This way we can rule it out before getting into the ugly details
+ if (Catch::isnan(lhs) || Catch::isnan(rhs)) {
+ return false;
+ }
+
+ auto lc = convert(lhs);
+ auto rc = convert(rhs);
+
+ if ((lc < 0) != (rc < 0)) {
+ // Potentially we can have +0 and -0
+ return lhs == rhs;
+ }
+
+ auto ulpDiff = std::abs(lc - rc);
+ return static_cast<uint64_t>(ulpDiff) <= maxUlpDiff;
+ }
+
+#if defined(CATCH_CONFIG_GLOBAL_NEXTAFTER)
+
+ float nextafter(float x, float y) {
+ return ::nextafterf(x, y);
+ }
+
+ double nextafter(double x, double y) {
+ return ::nextafter(x, y);
+ }
+
+#endif // ^^^ CATCH_CONFIG_GLOBAL_NEXTAFTER ^^^
+
+template <typename FP>
+FP step(FP start, FP direction, uint64_t steps) {
+ for (uint64_t i = 0; i < steps; ++i) {
+#if defined(CATCH_CONFIG_GLOBAL_NEXTAFTER)
+ start = Catch::nextafter(start, direction);
+#else
+ start = std::nextafter(start, direction);
+#endif
+ }
+ return start;
+}
+
+// Performs equivalent check of std::fabs(lhs - rhs) <= margin
+// But without the subtraction to allow for INFINITY in comparison
+bool marginComparison(double lhs, double rhs, double margin) {
+ return (lhs + margin >= rhs) && (rhs + margin >= lhs);
+}
+
+template <typename FloatingPoint>
+void write(std::ostream& out, FloatingPoint num) {
+ out << std::scientific
+ << std::setprecision(std::numeric_limits<FloatingPoint>::max_digits10 - 1)
+ << num;
+}
+
+} // end anonymous namespace
+
+namespace Matchers {
+namespace Floating {
+
+ enum class FloatingPointKind : uint8_t {
+ Float,
+ Double
+ };
+
+ WithinAbsMatcher::WithinAbsMatcher(double target, double margin)
+ :m_target{ target }, m_margin{ margin } {
+ CATCH_ENFORCE(margin >= 0, "Invalid margin: " << margin << '.'
+ << " Margin has to be non-negative.");
+ }
+
+ // Performs equivalent check of std::fabs(lhs - rhs) <= margin
+ // But without the subtraction to allow for INFINITY in comparison
+ bool WithinAbsMatcher::match(double const& matchee) const {
+ return (matchee + m_margin >= m_target) && (m_target + m_margin >= matchee);
+ }
+
+ std::string WithinAbsMatcher::describe() const {
+ return "is within " + ::Catch::Detail::stringify(m_margin) + " of " + ::Catch::Detail::stringify(m_target);
+ }
+
+ WithinUlpsMatcher::WithinUlpsMatcher(double target, uint64_t ulps, FloatingPointKind baseType)
+ :m_target{ target }, m_ulps{ ulps }, m_type{ baseType } {
+ CATCH_ENFORCE(m_type == FloatingPointKind::Double
+ || m_ulps < (std::numeric_limits<uint32_t>::max)(),
+ "Provided ULP is impossibly large for a float comparison.");
+ }
+
+#if defined(__clang__)
+#pragma clang diagnostic push
+// Clang <3.5 reports on the default branch in the switch below
+#pragma clang diagnostic ignored "-Wunreachable-code"
+#endif
+
+ bool WithinUlpsMatcher::match(double const& matchee) const {
+ switch (m_type) {
+ case FloatingPointKind::Float:
+ return almostEqualUlps<float>(static_cast<float>(matchee), static_cast<float>(m_target), m_ulps);
+ case FloatingPointKind::Double:
+ return almostEqualUlps<double>(matchee, m_target, m_ulps);
+ default:
+ CATCH_INTERNAL_ERROR( "Unknown FloatingPointKind value" );
+ }
+ }
+
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#endif
+
+ std::string WithinUlpsMatcher::describe() const {
+ std::stringstream ret;
+
+ ret << "is within " << m_ulps << " ULPs of ";
+
+ if (m_type == FloatingPointKind::Float) {
+ write(ret, static_cast<float>(m_target));
+ ret << 'f';
+ } else {
+ write(ret, m_target);
+ }
+
+ ret << " ([";
+ if (m_type == FloatingPointKind::Double) {
+ write(ret, step(m_target, static_cast<double>(-INFINITY), m_ulps));
+ ret << ", ";
+ write(ret, step(m_target, static_cast<double>( INFINITY), m_ulps));
+ } else {
+ // We have to cast INFINITY to float because of MinGW, see #1782
+ write(ret, step(static_cast<float>(m_target), static_cast<float>(-INFINITY), m_ulps));
+ ret << ", ";
+ write(ret, step(static_cast<float>(m_target), static_cast<float>( INFINITY), m_ulps));
+ }
+ ret << "])";
+
+ return ret.str();
+ }
+
+ WithinRelMatcher::WithinRelMatcher(double target, double epsilon):
+ m_target(target),
+ m_epsilon(epsilon){
+ CATCH_ENFORCE(m_epsilon >= 0., "Relative comparison with epsilon < 0 does not make sense.");
+ CATCH_ENFORCE(m_epsilon < 1., "Relative comparison with epsilon >= 1 does not make sense.");
+ }
+
+ bool WithinRelMatcher::match(double const& matchee) const {
+ const auto relMargin = m_epsilon * (std::max)(std::fabs(matchee), std::fabs(m_target));
+ return marginComparison(matchee, m_target,
+ std::isinf(relMargin)? 0 : relMargin);
+ }
+
+ std::string WithinRelMatcher::describe() const {
+ Catch::ReusableStringStream sstr;
+ sstr << "and " << m_target << " are within " << m_epsilon * 100. << "% of each other";
+ return sstr.str();
+ }
+
+}// namespace Floating
+
+Floating::WithinUlpsMatcher WithinULP(double target, uint64_t maxUlpDiff) {
+ return Floating::WithinUlpsMatcher(target, maxUlpDiff, Floating::FloatingPointKind::Double);
+}
+
+Floating::WithinUlpsMatcher WithinULP(float target, uint64_t maxUlpDiff) {
+ return Floating::WithinUlpsMatcher(target, maxUlpDiff, Floating::FloatingPointKind::Float);
+}
+
+Floating::WithinAbsMatcher WithinAbs(double target, double margin) {
+ return Floating::WithinAbsMatcher(target, margin);
+}
+
+Floating::WithinRelMatcher WithinRel(double target, double eps) {
+ return Floating::WithinRelMatcher(target, eps);
+}
+
+Floating::WithinRelMatcher WithinRel(double target) {
+ return Floating::WithinRelMatcher(target, std::numeric_limits<double>::epsilon() * 100);
+}
+
+Floating::WithinRelMatcher WithinRel(float target, float eps) {
+ return Floating::WithinRelMatcher(target, eps);
+}
+
+Floating::WithinRelMatcher WithinRel(float target) {
+ return Floating::WithinRelMatcher(target, std::numeric_limits<float>::epsilon() * 100);
+}
+
+} // namespace Matchers
+} // namespace Catch
+
+// end catch_matchers_floating.cpp
+// start catch_matchers_generic.cpp
+
+std::string Catch::Matchers::Generic::Detail::finalizeDescription(const std::string& desc) {
+ if (desc.empty()) {
+ return "matches undescribed predicate";
+ } else {
+ return "matches predicate: \"" + desc + '"';
+ }
+}
+// end catch_matchers_generic.cpp
+// start catch_matchers_string.cpp
+
+#include <regex>
+
+namespace Catch {
+namespace Matchers {
+
+ namespace StdString {
+
+ CasedString::CasedString( std::string const& str, CaseSensitive::Choice caseSensitivity )
+ : m_caseSensitivity( caseSensitivity ),
+ m_str( adjustString( str ) )
+ {}
+ std::string CasedString::adjustString( std::string const& str ) const {
+ return m_caseSensitivity == CaseSensitive::No
+ ? toLower( str )
+ : str;
+ }
+ std::string CasedString::caseSensitivitySuffix() const {
+ return m_caseSensitivity == CaseSensitive::No
+ ? " (case insensitive)"
+ : std::string();
+ }
+
+ StringMatcherBase::StringMatcherBase( std::string const& operation, CasedString const& comparator )
+ : m_comparator( comparator ),
+ m_operation( operation ) {
+ }
+
+ std::string StringMatcherBase::describe() const {
+ std::string description;
+ description.reserve(5 + m_operation.size() + m_comparator.m_str.size() +
+ m_comparator.caseSensitivitySuffix().size());
+ description += m_operation;
+ description += ": \"";
+ description += m_comparator.m_str;
+ description += "\"";
+ description += m_comparator.caseSensitivitySuffix();
+ return description;
+ }
+
+ EqualsMatcher::EqualsMatcher( CasedString const& comparator ) : StringMatcherBase( "equals", comparator ) {}
+
+ bool EqualsMatcher::match( std::string const& source ) const {
+ return m_comparator.adjustString( source ) == m_comparator.m_str;
+ }
+
+ ContainsMatcher::ContainsMatcher( CasedString const& comparator ) : StringMatcherBase( "contains", comparator ) {}
+
+ bool ContainsMatcher::match( std::string const& source ) const {
+ return contains( m_comparator.adjustString( source ), m_comparator.m_str );
+ }
+
+ StartsWithMatcher::StartsWithMatcher( CasedString const& comparator ) : StringMatcherBase( "starts with", comparator ) {}
+
+ bool StartsWithMatcher::match( std::string const& source ) const {
+ return startsWith( m_comparator.adjustString( source ), m_comparator.m_str );
+ }
+
+ EndsWithMatcher::EndsWithMatcher( CasedString const& comparator ) : StringMatcherBase( "ends with", comparator ) {}
+
+ bool EndsWithMatcher::match( std::string const& source ) const {
+ return endsWith( m_comparator.adjustString( source ), m_comparator.m_str );
+ }
+
+ RegexMatcher::RegexMatcher(std::string regex, CaseSensitive::Choice caseSensitivity): m_regex(std::move(regex)), m_caseSensitivity(caseSensitivity) {}
+
+ bool RegexMatcher::match(std::string const& matchee) const {
+ auto flags = std::regex::ECMAScript; // ECMAScript is the default syntax option anyway
+ if (m_caseSensitivity == CaseSensitive::Choice::No) {
+ flags |= std::regex::icase;
+ }
+ auto reg = std::regex(m_regex, flags);
+ return std::regex_match(matchee, reg);
+ }
+
+ std::string RegexMatcher::describe() const {
+ return "matches " + ::Catch::Detail::stringify(m_regex) + ((m_caseSensitivity == CaseSensitive::Choice::Yes)? " case sensitively" : " case insensitively");
+ }
+
+ } // namespace StdString
+
+ StdString::EqualsMatcher Equals( std::string const& str, CaseSensitive::Choice caseSensitivity ) {
+ return StdString::EqualsMatcher( StdString::CasedString( str, caseSensitivity) );
+ }
+ StdString::ContainsMatcher Contains( std::string const& str, CaseSensitive::Choice caseSensitivity ) {
+ return StdString::ContainsMatcher( StdString::CasedString( str, caseSensitivity) );
+ }
+ StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSensitive::Choice caseSensitivity ) {
+ return StdString::EndsWithMatcher( StdString::CasedString( str, caseSensitivity) );
+ }
+ StdString::StartsWithMatcher StartsWith( std::string const& str, CaseSensitive::Choice caseSensitivity ) {
+ return StdString::StartsWithMatcher( StdString::CasedString( str, caseSensitivity) );
+ }
+
+ StdString::RegexMatcher Matches(std::string const& regex, CaseSensitive::Choice caseSensitivity) {
+ return StdString::RegexMatcher(regex, caseSensitivity);
+ }
+
+} // namespace Matchers
+} // namespace Catch
+// end catch_matchers_string.cpp
+// start catch_message.cpp
+
+// start catch_uncaught_exceptions.h
+
+namespace Catch {
+ bool uncaught_exceptions();
+} // end namespace Catch
+
+// end catch_uncaught_exceptions.h
+#include <cassert>
+#include <stack>
+
+namespace Catch {
+
+ MessageInfo::MessageInfo( StringRef const& _macroName,
+ SourceLineInfo const& _lineInfo,
+ ResultWas::OfType _type )
+ : macroName( _macroName ),
+ lineInfo( _lineInfo ),
+ type( _type ),
+ sequence( ++globalCount )
+ {}
+
+ bool MessageInfo::operator==( MessageInfo const& other ) const {
+ return sequence == other.sequence;
+ }
+
+ bool MessageInfo::operator<( MessageInfo const& other ) const {
+ return sequence < other.sequence;
+ }
+
+ // This may need protecting if threading support is added
+ unsigned int MessageInfo::globalCount = 0;
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ Catch::MessageBuilder::MessageBuilder( StringRef const& macroName,
+ SourceLineInfo const& lineInfo,
+ ResultWas::OfType type )
+ :m_info(macroName, lineInfo, type) {}
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ ScopedMessage::ScopedMessage( MessageBuilder const& builder )
+ : m_info( builder.m_info ), m_moved()
+ {
+ m_info.message = builder.m_stream.str();
+ getResultCapture().pushScopedMessage( m_info );
+ }
+
+ ScopedMessage::ScopedMessage( ScopedMessage&& old )
+ : m_info( old.m_info ), m_moved()
+ {
+ old.m_moved = true;
+ }
+
+ ScopedMessage::~ScopedMessage() {
+ if ( !uncaught_exceptions() && !m_moved ){
+ getResultCapture().popScopedMessage(m_info);
+ }
+ }
+
+ Capturer::Capturer( StringRef macroName, SourceLineInfo const& lineInfo, ResultWas::OfType resultType, StringRef names ) {
+ auto trimmed = [&] (size_t start, size_t end) {
+ while (names[start] == ',' || isspace(names[start])) {
+ ++start;
+ }
+ while (names[end] == ',' || isspace(names[end])) {
+ --end;
+ }
+ return names.substr(start, end - start + 1);
+ };
+ auto skipq = [&] (size_t start, char quote) {
+ for (auto i = start + 1; i < names.size() ; ++i) {
+ if (names[i] == quote)
+ return i;
+ if (names[i] == '\\')
+ ++i;
+ }
+ CATCH_INTERNAL_ERROR("CAPTURE parsing encountered unmatched quote");
+ };
+
+ size_t start = 0;
+ std::stack<char> openings;
+ for (size_t pos = 0; pos < names.size(); ++pos) {
+ char c = names[pos];
+ switch (c) {
+ case '[':
+ case '{':
+ case '(':
+ // It is basically impossible to disambiguate between
+ // comparison and start of template args in this context
+// case '<':
+ openings.push(c);
+ break;
+ case ']':
+ case '}':
+ case ')':
+// case '>':
+ openings.pop();
+ break;
+ case '"':
+ case '\'':
+ pos = skipq(pos, c);
+ break;
+ case ',':
+ if (start != pos && openings.empty()) {
+ m_messages.emplace_back(macroName, lineInfo, resultType);
+ m_messages.back().message = static_cast<std::string>(trimmed(start, pos));
+ m_messages.back().message += " := ";
+ start = pos;
+ }
+ }
+ }
+ assert(openings.empty() && "Mismatched openings");
+ m_messages.emplace_back(macroName, lineInfo, resultType);
+ m_messages.back().message = static_cast<std::string>(trimmed(start, names.size() - 1));
+ m_messages.back().message += " := ";
+ }
+ Capturer::~Capturer() {
+ if ( !uncaught_exceptions() ){
+ assert( m_captured == m_messages.size() );
+ for( size_t i = 0; i < m_captured; ++i )
+ m_resultCapture.popScopedMessage( m_messages[i] );
+ }
+ }
+
+ void Capturer::captureValue( size_t index, std::string const& value ) {
+ assert( index < m_messages.size() );
+ m_messages[index].message += value;
+ m_resultCapture.pushScopedMessage( m_messages[index] );
+ m_captured++;
+ }
+
+} // end namespace Catch
+// end catch_message.cpp
+// start catch_output_redirect.cpp
+
+// start catch_output_redirect.h
+#ifndef TWOBLUECUBES_CATCH_OUTPUT_REDIRECT_H
+#define TWOBLUECUBES_CATCH_OUTPUT_REDIRECT_H
+
+#include <cstdio>
+#include <iosfwd>
+#include <string>
+
+namespace Catch {
+
+ class RedirectedStream {
+ std::ostream& m_originalStream;
+ std::ostream& m_redirectionStream;
+ std::streambuf* m_prevBuf;
+
+ public:
+ RedirectedStream( std::ostream& originalStream, std::ostream& redirectionStream );
+ ~RedirectedStream();
+ };
+
+ class RedirectedStdOut {
+ ReusableStringStream m_rss;
+ RedirectedStream m_cout;
+ public:
+ RedirectedStdOut();
+ auto str() const -> std::string;
+ };
+
+ // StdErr has two constituent streams in C++, std::cerr and std::clog
+ // This means that we need to redirect 2 streams into 1 to keep proper
+ // order of writes
+ class RedirectedStdErr {
+ ReusableStringStream m_rss;
+ RedirectedStream m_cerr;
+ RedirectedStream m_clog;
+ public:
+ RedirectedStdErr();
+ auto str() const -> std::string;
+ };
+
+ class RedirectedStreams {
+ public:
+ RedirectedStreams(RedirectedStreams const&) = delete;
+ RedirectedStreams& operator=(RedirectedStreams const&) = delete;
+ RedirectedStreams(RedirectedStreams&&) = delete;
+ RedirectedStreams& operator=(RedirectedStreams&&) = delete;
+
+ RedirectedStreams(std::string& redirectedCout, std::string& redirectedCerr);
+ ~RedirectedStreams();
+ private:
+ std::string& m_redirectedCout;
+ std::string& m_redirectedCerr;
+ RedirectedStdOut m_redirectedStdOut;
+ RedirectedStdErr m_redirectedStdErr;
+ };
+
+#if defined(CATCH_CONFIG_NEW_CAPTURE)
+
+ // Windows's implementation of std::tmpfile is terrible (it tries
+ // to create a file inside system folder, thus requiring elevated
+ // privileges for the binary), so we have to use tmpnam(_s) and
+ // create the file ourselves there.
+ class TempFile {
+ public:
+ TempFile(TempFile const&) = delete;
+ TempFile& operator=(TempFile const&) = delete;
+ TempFile(TempFile&&) = delete;
+ TempFile& operator=(TempFile&&) = delete;
+
+ TempFile();
+ ~TempFile();
+
+ std::FILE* getFile();
+ std::string getContents();
+
+ private:
+ std::FILE* m_file = nullptr;
+ #if defined(_MSC_VER)
+ char m_buffer[L_tmpnam] = { 0 };
+ #endif
+ };
+
+ class OutputRedirect {
+ public:
+ OutputRedirect(OutputRedirect const&) = delete;
+ OutputRedirect& operator=(OutputRedirect const&) = delete;
+ OutputRedirect(OutputRedirect&&) = delete;
+ OutputRedirect& operator=(OutputRedirect&&) = delete;
+
+ OutputRedirect(std::string& stdout_dest, std::string& stderr_dest);
+ ~OutputRedirect();
+
+ private:
+ int m_originalStdout = -1;
+ int m_originalStderr = -1;
+ TempFile m_stdoutFile;
+ TempFile m_stderrFile;
+ std::string& m_stdoutDest;
+ std::string& m_stderrDest;
+ };
+
+#endif
+
+} // end namespace Catch
+
+#endif // TWOBLUECUBES_CATCH_OUTPUT_REDIRECT_H
+// end catch_output_redirect.h
+#include <cstdio>
+#include <cstring>
+#include <fstream>
+#include <sstream>
+#include <stdexcept>
+
+#if defined(CATCH_CONFIG_NEW_CAPTURE)
+ #if defined(_MSC_VER)
+ #include <io.h> //_dup and _dup2
+ #define dup _dup
+ #define dup2 _dup2
+ #define fileno _fileno
+ #else
+ #include <unistd.h> // dup and dup2
+ #endif
+#endif
+
+namespace Catch {
+
+ RedirectedStream::RedirectedStream( std::ostream& originalStream, std::ostream& redirectionStream )
+ : m_originalStream( originalStream ),
+ m_redirectionStream( redirectionStream ),
+ m_prevBuf( m_originalStream.rdbuf() )
+ {
+ m_originalStream.rdbuf( m_redirectionStream.rdbuf() );
+ }
+
+ RedirectedStream::~RedirectedStream() {
+ m_originalStream.rdbuf( m_prevBuf );
+ }
+
+ RedirectedStdOut::RedirectedStdOut() : m_cout( Catch::cout(), m_rss.get() ) {}
+ auto RedirectedStdOut::str() const -> std::string { return m_rss.str(); }
+
+ RedirectedStdErr::RedirectedStdErr()
+ : m_cerr( Catch::cerr(), m_rss.get() ),
+ m_clog( Catch::clog(), m_rss.get() )
+ {}
+ auto RedirectedStdErr::str() const -> std::string { return m_rss.str(); }
+
+ RedirectedStreams::RedirectedStreams(std::string& redirectedCout, std::string& redirectedCerr)
+ : m_redirectedCout(redirectedCout),
+ m_redirectedCerr(redirectedCerr)
+ {}
+
+ RedirectedStreams::~RedirectedStreams() {
+ m_redirectedCout += m_redirectedStdOut.str();
+ m_redirectedCerr += m_redirectedStdErr.str();
+ }
+
+#if defined(CATCH_CONFIG_NEW_CAPTURE)
+
+#if defined(_MSC_VER)
+ TempFile::TempFile() {
+ if (tmpnam_s(m_buffer)) {
+ CATCH_RUNTIME_ERROR("Could not get a temp filename");
+ }
+ if (fopen_s(&m_file, m_buffer, "w")) {
+ char buffer[100];
+ if (strerror_s(buffer, errno)) {
+ CATCH_RUNTIME_ERROR("Could not translate errno to a string");
+ }
+ CATCH_RUNTIME_ERROR("Could not open the temp file: '" << m_buffer << "' because: " << buffer);
+ }
+ }
+#else
+ TempFile::TempFile() {
+ m_file = std::tmpfile();
+ if (!m_file) {
+ CATCH_RUNTIME_ERROR("Could not create a temp file.");
+ }
+ }
+
+#endif
+
+ TempFile::~TempFile() {
+ // TBD: What to do about errors here?
+ std::fclose(m_file);
+ // We manually create the file on Windows only, on Linux
+ // it will be autodeleted
+#if defined(_MSC_VER)
+ std::remove(m_buffer);
+#endif
+ }
+
+ FILE* TempFile::getFile() {
+ return m_file;
+ }
+
+ std::string TempFile::getContents() {
+ std::stringstream sstr;
+ char buffer[100] = {};
+ std::rewind(m_file);
+ while (std::fgets(buffer, sizeof(buffer), m_file)) {
+ sstr << buffer;
+ }
+ return sstr.str();
+ }
+
+ OutputRedirect::OutputRedirect(std::string& stdout_dest, std::string& stderr_dest) :
+ m_originalStdout(dup(1)),
+ m_originalStderr(dup(2)),
+ m_stdoutDest(stdout_dest),
+ m_stderrDest(stderr_dest) {
+ dup2(fileno(m_stdoutFile.getFile()), 1);
+ dup2(fileno(m_stderrFile.getFile()), 2);
+ }
+
+ OutputRedirect::~OutputRedirect() {
+ Catch::cout() << std::flush;
+ fflush(stdout);
+ // Since we support overriding these streams, we flush cerr
+ // even though std::cerr is unbuffered
+ Catch::cerr() << std::flush;
+ Catch::clog() << std::flush;
+ fflush(stderr);
+
+ dup2(m_originalStdout, 1);
+ dup2(m_originalStderr, 2);
+
+ m_stdoutDest += m_stdoutFile.getContents();
+ m_stderrDest += m_stderrFile.getContents();
+ }
+
+#endif // CATCH_CONFIG_NEW_CAPTURE
+
+} // namespace Catch
+
+#if defined(CATCH_CONFIG_NEW_CAPTURE)
+ #if defined(_MSC_VER)
+ #undef dup
+ #undef dup2
+ #undef fileno
+ #endif
+#endif
+// end catch_output_redirect.cpp
+// start catch_polyfills.cpp
+
+#include <cmath>
+
+namespace Catch {
+
+#if !defined(CATCH_CONFIG_POLYFILL_ISNAN)
+ bool isnan(float f) {
+ return std::isnan(f);
+ }
+ bool isnan(double d) {
+ return std::isnan(d);
+ }
+#else
+ // For now we only use this for embarcadero
+ bool isnan(float f) {
+ return std::_isnan(f);
+ }
+ bool isnan(double d) {
+ return std::_isnan(d);
+ }
+#endif
+
+} // end namespace Catch
+// end catch_polyfills.cpp
+// start catch_random_number_generator.cpp
+
+namespace Catch {
+
+namespace {
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4146) // we negate uint32 during the rotate
+#endif
+ // Safe rotr implementation thanks to John Regehr
+ uint32_t rotate_right(uint32_t val, uint32_t count) {
+ const uint32_t mask = 31;
+ count &= mask;
+ return (val >> count) | (val << (-count & mask));
+ }
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+}
+
+ SimplePcg32::SimplePcg32(result_type seed_) {
+ seed(seed_);
+ }
+
+ void SimplePcg32::seed(result_type seed_) {
+ m_state = 0;
+ (*this)();
+ m_state += seed_;
+ (*this)();
+ }
+
+ void SimplePcg32::discard(uint64_t skip) {
+ // We could implement this to run in O(log n) steps, but this
+ // should suffice for our use case.
+ for (uint64_t s = 0; s < skip; ++s) {
+ static_cast<void>((*this)());
+ }
+ }
+
+ SimplePcg32::result_type SimplePcg32::operator()() {
+ // prepare the output value
+ const uint32_t xorshifted = static_cast<uint32_t>(((m_state >> 18u) ^ m_state) >> 27u);
+ const auto output = rotate_right(xorshifted, m_state >> 59u);
+
+ // advance state
+ m_state = m_state * 6364136223846793005ULL + s_inc;
+
+ return output;
+ }
+
+ bool operator==(SimplePcg32 const& lhs, SimplePcg32 const& rhs) {
+ return lhs.m_state == rhs.m_state;
+ }
+
+ bool operator!=(SimplePcg32 const& lhs, SimplePcg32 const& rhs) {
+ return lhs.m_state != rhs.m_state;
+ }
+}
+// end catch_random_number_generator.cpp
+// start catch_registry_hub.cpp
+
+// start catch_test_case_registry_impl.h
+
+#include <vector>
+#include <set>
+#include <algorithm>
+#include <ios>
+
+namespace Catch {
+
+ class TestCase;
+ struct IConfig;
+
+ std::vector<TestCase> sortTests( IConfig const& config, std::vector<TestCase> const& unsortedTestCases );
+
+ bool isThrowSafe( TestCase const& testCase, IConfig const& config );
+ bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config );
+
+ void enforceNoDuplicateTestCases( std::vector<TestCase> const& functions );
+
+ std::vector<TestCase> filterTests( std::vector<TestCase> const& testCases, TestSpec const& testSpec, IConfig const& config );
+ std::vector<TestCase> const& getAllTestCasesSorted( IConfig const& config );
+
+ class TestRegistry : public ITestCaseRegistry {
+ public:
+ virtual ~TestRegistry() = default;
+
+ virtual void registerTest( TestCase const& testCase );
+
+ std::vector<TestCase> const& getAllTests() const override;
+ std::vector<TestCase> const& getAllTestsSorted( IConfig const& config ) const override;
+
+ private:
+ std::vector<TestCase> m_functions;
+ mutable RunTests::InWhatOrder m_currentSortOrder = RunTests::InDeclarationOrder;
+ mutable std::vector<TestCase> m_sortedFunctions;
+ std::size_t m_unnamedCount = 0;
+ std::ios_base::Init m_ostreamInit; // Forces cout/ cerr to be initialised
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ class TestInvokerAsFunction : public ITestInvoker {
+ void(*m_testAsFunction)();
+ public:
+ TestInvokerAsFunction( void(*testAsFunction)() ) noexcept;
+
+ void invoke() const override;
+ };
+
+ std::string extractClassName( StringRef const& classOrQualifiedMethodName );
+
+ ///////////////////////////////////////////////////////////////////////////
+
+} // end namespace Catch
+
+// end catch_test_case_registry_impl.h
+// start catch_reporter_registry.h
+
+#include <map>
+
+namespace Catch {
+
+ class ReporterRegistry : public IReporterRegistry {
+
+ public:
+
+ ~ReporterRegistry() override;
+
+ IStreamingReporterPtr create( std::string const& name, IConfigPtr const& config ) const override;
+
+ void registerReporter( std::string const& name, IReporterFactoryPtr const& factory );
+ void registerListener( IReporterFactoryPtr const& factory );
+
+ FactoryMap const& getFactories() const override;
+ Listeners const& getListeners() const override;
+
+ private:
+ FactoryMap m_factories;
+ Listeners m_listeners;
+ };
+}
+
+// end catch_reporter_registry.h
+// start catch_tag_alias_registry.h
+
+// start catch_tag_alias.h
+
+#include <string>
+
+namespace Catch {
+
+ struct TagAlias {
+ TagAlias(std::string const& _tag, SourceLineInfo _lineInfo);
+
+ std::string tag;
+ SourceLineInfo lineInfo;
+ };
+
+} // end namespace Catch
+
+// end catch_tag_alias.h
+#include <map>
+
+namespace Catch {
+
+ class TagAliasRegistry : public ITagAliasRegistry {
+ public:
+ ~TagAliasRegistry() override;
+ TagAlias const* find( std::string const& alias ) const override;
+ std::string expandAliases( std::string const& unexpandedTestSpec ) const override;
+ void add( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo );
+
+ private:
+ std::map<std::string, TagAlias> m_registry;
+ };
+
+} // end namespace Catch
+
+// end catch_tag_alias_registry.h
+// start catch_startup_exception_registry.h
+
+#include <vector>
+#include <exception>
+
+namespace Catch {
+
+ class StartupExceptionRegistry {
+ public:
+ void add(std::exception_ptr const& exception) noexcept;
+ std::vector<std::exception_ptr> const& getExceptions() const noexcept;
+ private:
+ std::vector<std::exception_ptr> m_exceptions;
+ };
+
+} // end namespace Catch
+
+// end catch_startup_exception_registry.h
+// start catch_singletons.hpp
+
+namespace Catch {
+
+ struct ISingleton {
+ virtual ~ISingleton();
+ };
+
+ void addSingleton( ISingleton* singleton );
+ void cleanupSingletons();
+
+ template<typename SingletonImplT, typename InterfaceT = SingletonImplT, typename MutableInterfaceT = InterfaceT>
+ class Singleton : SingletonImplT, public ISingleton {
+
+ static auto getInternal() -> Singleton* {
+ static Singleton* s_instance = nullptr;
+ if( !s_instance ) {
+ s_instance = new Singleton;
+ addSingleton( s_instance );
+ }
+ return s_instance;
+ }
+
+ public:
+ static auto get() -> InterfaceT const& {
+ return *getInternal();
+ }
+ static auto getMutable() -> MutableInterfaceT& {
+ return *getInternal();
+ }
+ };
+
+} // namespace Catch
+
+// end catch_singletons.hpp
+namespace Catch {
+
+ namespace {
+
+ class RegistryHub : public IRegistryHub, public IMutableRegistryHub,
+ private NonCopyable {
+
+ public: // IRegistryHub
+ RegistryHub() = default;
+ IReporterRegistry const& getReporterRegistry() const override {
+ return m_reporterRegistry;
+ }
+ ITestCaseRegistry const& getTestCaseRegistry() const override {
+ return m_testCaseRegistry;
+ }
+ IExceptionTranslatorRegistry const& getExceptionTranslatorRegistry() const override {
+ return m_exceptionTranslatorRegistry;
+ }
+ ITagAliasRegistry const& getTagAliasRegistry() const override {
+ return m_tagAliasRegistry;
+ }
+ StartupExceptionRegistry const& getStartupExceptionRegistry() const override {
+ return m_exceptionRegistry;
+ }
+
+ public: // IMutableRegistryHub
+ void registerReporter( std::string const& name, IReporterFactoryPtr const& factory ) override {
+ m_reporterRegistry.registerReporter( name, factory );
+ }
+ void registerListener( IReporterFactoryPtr const& factory ) override {
+ m_reporterRegistry.registerListener( factory );
+ }
+ void registerTest( TestCase const& testInfo ) override {
+ m_testCaseRegistry.registerTest( testInfo );
+ }
+ void registerTranslator( const IExceptionTranslator* translator ) override {
+ m_exceptionTranslatorRegistry.registerTranslator( translator );
+ }
+ void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) override {
+ m_tagAliasRegistry.add( alias, tag, lineInfo );
+ }
+ void registerStartupException() noexcept override {
+ m_exceptionRegistry.add(std::current_exception());
+ }
+ IMutableEnumValuesRegistry& getMutableEnumValuesRegistry() override {
+ return m_enumValuesRegistry;
+ }
+
+ private:
+ TestRegistry m_testCaseRegistry;
+ ReporterRegistry m_reporterRegistry;
+ ExceptionTranslatorRegistry m_exceptionTranslatorRegistry;
+ TagAliasRegistry m_tagAliasRegistry;
+ StartupExceptionRegistry m_exceptionRegistry;
+ Detail::EnumValuesRegistry m_enumValuesRegistry;
+ };
+ }
+
+ using RegistryHubSingleton = Singleton<RegistryHub, IRegistryHub, IMutableRegistryHub>;
+
+ IRegistryHub const& getRegistryHub() {
+ return RegistryHubSingleton::get();
+ }
+ IMutableRegistryHub& getMutableRegistryHub() {
+ return RegistryHubSingleton::getMutable();
+ }
+ void cleanUp() {
+ cleanupSingletons();
+ cleanUpContext();
+ }
+ std::string translateActiveException() {
+ return getRegistryHub().getExceptionTranslatorRegistry().translateActiveException();
+ }
+
+} // end namespace Catch
+// end catch_registry_hub.cpp
+// start catch_reporter_registry.cpp
+
+namespace Catch {
+
+ ReporterRegistry::~ReporterRegistry() = default;
+
+ IStreamingReporterPtr ReporterRegistry::create( std::string const& name, IConfigPtr const& config ) const {
+ auto it = m_factories.find( name );
+ if( it == m_factories.end() )
+ return nullptr;
+ return it->second->create( ReporterConfig( config ) );
+ }
+
+ void ReporterRegistry::registerReporter( std::string const& name, IReporterFactoryPtr const& factory ) {
+ m_factories.emplace(name, factory);
+ }
+ void ReporterRegistry::registerListener( IReporterFactoryPtr const& factory ) {
+ m_listeners.push_back( factory );
+ }
+
+ IReporterRegistry::FactoryMap const& ReporterRegistry::getFactories() const {
+ return m_factories;
+ }
+ IReporterRegistry::Listeners const& ReporterRegistry::getListeners() const {
+ return m_listeners;
+ }
+
+}
+// end catch_reporter_registry.cpp
+// start catch_result_type.cpp
+
+namespace Catch {
+
+ bool isOk( ResultWas::OfType resultType ) {
+ return ( resultType & ResultWas::FailureBit ) == 0;
+ }
+ bool isJustInfo( int flags ) {
+ return flags == ResultWas::Info;
+ }
+
+ ResultDisposition::Flags operator | ( ResultDisposition::Flags lhs, ResultDisposition::Flags rhs ) {
+ return static_cast<ResultDisposition::Flags>( static_cast<int>( lhs ) | static_cast<int>( rhs ) );
+ }
+
+ bool shouldContinueOnFailure( int flags ) { return ( flags & ResultDisposition::ContinueOnFailure ) != 0; }
+ bool shouldSuppressFailure( int flags ) { return ( flags & ResultDisposition::SuppressFail ) != 0; }
+
+} // end namespace Catch
+// end catch_result_type.cpp
+// start catch_run_context.cpp
+
+#include <cassert>
+#include <algorithm>
+#include <sstream>
+
+namespace Catch {
+
+ namespace Generators {
+ struct GeneratorTracker : TestCaseTracking::TrackerBase, IGeneratorTracker {
+ GeneratorBasePtr m_generator;
+
+ GeneratorTracker( TestCaseTracking::NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent )
+ : TrackerBase( nameAndLocation, ctx, parent )
+ {}
+ ~GeneratorTracker();
+
+ static GeneratorTracker& acquire( TrackerContext& ctx, TestCaseTracking::NameAndLocation const& nameAndLocation ) {
+ std::shared_ptr<GeneratorTracker> tracker;
+
+ ITracker& currentTracker = ctx.currentTracker();
+ if( TestCaseTracking::ITrackerPtr childTracker = currentTracker.findChild( nameAndLocation ) ) {
+ assert( childTracker );
+ assert( childTracker->isGeneratorTracker() );
+ tracker = std::static_pointer_cast<GeneratorTracker>( childTracker );
+ }
+ else {
+ tracker = std::make_shared<GeneratorTracker>( nameAndLocation, ctx, &currentTracker );
+ currentTracker.addChild( tracker );
+ }
+
+ if( !ctx.completedCycle() && !tracker->isComplete() ) {
+ tracker->open();
+ }
+
+ return *tracker;
+ }
+
+ // TrackerBase interface
+ bool isGeneratorTracker() const override { return true; }
+ auto hasGenerator() const -> bool override {
+ return !!m_generator;
+ }
+ void close() override {
+ TrackerBase::close();
+ // Generator interface only finds out if it has another item on atual move
+ if (m_runState == CompletedSuccessfully && m_generator->next()) {
+ m_children.clear();
+ m_runState = Executing;
+ }
+ }
+
+ // IGeneratorTracker interface
+ auto getGenerator() const -> GeneratorBasePtr const& override {
+ return m_generator;
+ }
+ void setGenerator( GeneratorBasePtr&& generator ) override {
+ m_generator = std::move( generator );
+ }
+ };
+ GeneratorTracker::~GeneratorTracker() {}
+ }
+
+ RunContext::RunContext(IConfigPtr const& _config, IStreamingReporterPtr&& reporter)
+ : m_runInfo(_config->name()),
+ m_context(getCurrentMutableContext()),
+ m_config(_config),
+ m_reporter(std::move(reporter)),
+ m_lastAssertionInfo{ StringRef(), SourceLineInfo("",0), StringRef(), ResultDisposition::Normal },
+ m_includeSuccessfulResults( m_config->includeSuccessfulResults() || m_reporter->getPreferences().shouldReportAllAssertions )
+ {
+ m_context.setRunner(this);
+ m_context.setConfig(m_config);
+ m_context.setResultCapture(this);
+ m_reporter->testRunStarting(m_runInfo);
+ }
+
+ RunContext::~RunContext() {
+ m_reporter->testRunEnded(TestRunStats(m_runInfo, m_totals, aborting()));
+ }
+
+ void RunContext::testGroupStarting(std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount) {
+ m_reporter->testGroupStarting(GroupInfo(testSpec, groupIndex, groupsCount));
+ }
+
+ void RunContext::testGroupEnded(std::string const& testSpec, Totals const& totals, std::size_t groupIndex, std::size_t groupsCount) {
+ m_reporter->testGroupEnded(TestGroupStats(GroupInfo(testSpec, groupIndex, groupsCount), totals, aborting()));
+ }
+
+ Totals RunContext::runTest(TestCase const& testCase) {
+ Totals prevTotals = m_totals;
+
+ std::string redirectedCout;
+ std::string redirectedCerr;
+
+ auto const& testInfo = testCase.getTestCaseInfo();
+
+ m_reporter->testCaseStarting(testInfo);
+
+ m_activeTestCase = &testCase;
+
+ ITracker& rootTracker = m_trackerContext.startRun();
+ assert(rootTracker.isSectionTracker());
+ static_cast<SectionTracker&>(rootTracker).addInitialFilters(m_config->getSectionsToRun());
+ do {
+ m_trackerContext.startCycle();
+ m_testCaseTracker = &SectionTracker::acquire(m_trackerContext, TestCaseTracking::NameAndLocation(testInfo.name, testInfo.lineInfo));
+ runCurrentTest(redirectedCout, redirectedCerr);
+ } while (!m_testCaseTracker->isSuccessfullyCompleted() && !aborting());
+
+ Totals deltaTotals = m_totals.delta(prevTotals);
+ if (testInfo.expectedToFail() && deltaTotals.testCases.passed > 0) {
+ deltaTotals.assertions.failed++;
+ deltaTotals.testCases.passed--;
+ deltaTotals.testCases.failed++;
+ }
+ m_totals.testCases += deltaTotals.testCases;
+ m_reporter->testCaseEnded(TestCaseStats(testInfo,
+ deltaTotals,
+ redirectedCout,
+ redirectedCerr,
+ aborting()));
+
+ m_activeTestCase = nullptr;
+ m_testCaseTracker = nullptr;
+
+ return deltaTotals;
+ }
+
+ IConfigPtr RunContext::config() const {
+ return m_config;
+ }
+
+ IStreamingReporter& RunContext::reporter() const {
+ return *m_reporter;
+ }
+
+ void RunContext::assertionEnded(AssertionResult const & result) {
+ if (result.getResultType() == ResultWas::Ok) {
+ m_totals.assertions.passed++;
+ m_lastAssertionPassed = true;
+ } else if (!result.isOk()) {
+ m_lastAssertionPassed = false;
+ if( m_activeTestCase->getTestCaseInfo().okToFail() )
+ m_totals.assertions.failedButOk++;
+ else
+ m_totals.assertions.failed++;
+ }
+ else {
+ m_lastAssertionPassed = true;
+ }
+
+ // We have no use for the return value (whether messages should be cleared), because messages were made scoped
+ // and should be let to clear themselves out.
+ static_cast<void>(m_reporter->assertionEnded(AssertionStats(result, m_messages, m_totals)));
+
+ if (result.getResultType() != ResultWas::Warning)
+ m_messageScopes.clear();
+
+ // Reset working state
+ resetAssertionInfo();
+ m_lastResult = result;
+ }
+ void RunContext::resetAssertionInfo() {
+ m_lastAssertionInfo.macroName = StringRef();
+ m_lastAssertionInfo.capturedExpression = "{Unknown expression after the reported line}"_sr;
+ }
+
+ bool RunContext::sectionStarted(SectionInfo const & sectionInfo, Counts & assertions) {
+ ITracker& sectionTracker = SectionTracker::acquire(m_trackerContext, TestCaseTracking::NameAndLocation(sectionInfo.name, sectionInfo.lineInfo));
+ if (!sectionTracker.isOpen())
+ return false;
+ m_activeSections.push_back(&sectionTracker);
+
+ m_lastAssertionInfo.lineInfo = sectionInfo.lineInfo;
+
+ m_reporter->sectionStarting(sectionInfo);
+
+ assertions = m_totals.assertions;
+
+ return true;
+ }
+ auto RunContext::acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IGeneratorTracker& {
+ using namespace Generators;
+ GeneratorTracker& tracker = GeneratorTracker::acquire( m_trackerContext, TestCaseTracking::NameAndLocation( "generator", lineInfo ) );
+ assert( tracker.isOpen() );
+ m_lastAssertionInfo.lineInfo = lineInfo;
+ return tracker;
+ }
+
+ bool RunContext::testForMissingAssertions(Counts& assertions) {
+ if (assertions.total() != 0)
+ return false;
+ if (!m_config->warnAboutMissingAssertions())
+ return false;
+ if (m_trackerContext.currentTracker().hasChildren())
+ return false;
+ m_totals.assertions.failed++;
+ assertions.failed++;
+ return true;
+ }
+
+ void RunContext::sectionEnded(SectionEndInfo const & endInfo) {
+ Counts assertions = m_totals.assertions - endInfo.prevAssertions;
+ bool missingAssertions = testForMissingAssertions(assertions);
+
+ if (!m_activeSections.empty()) {
+ m_activeSections.back()->close();
+ m_activeSections.pop_back();
+ }
+
+ m_reporter->sectionEnded(SectionStats(endInfo.sectionInfo, assertions, endInfo.durationInSeconds, missingAssertions));
+ m_messages.clear();
+ m_messageScopes.clear();
+ }
+
+ void RunContext::sectionEndedEarly(SectionEndInfo const & endInfo) {
+ if (m_unfinishedSections.empty())
+ m_activeSections.back()->fail();
+ else
+ m_activeSections.back()->close();
+ m_activeSections.pop_back();
+
+ m_unfinishedSections.push_back(endInfo);
+ }
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void RunContext::benchmarkPreparing(std::string const& name) {
+ m_reporter->benchmarkPreparing(name);
+ }
+ void RunContext::benchmarkStarting( BenchmarkInfo const& info ) {
+ m_reporter->benchmarkStarting( info );
+ }
+ void RunContext::benchmarkEnded( BenchmarkStats<> const& stats ) {
+ m_reporter->benchmarkEnded( stats );
+ }
+ void RunContext::benchmarkFailed(std::string const & error) {
+ m_reporter->benchmarkFailed(error);
+ }
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ void RunContext::pushScopedMessage(MessageInfo const & message) {
+ m_messages.push_back(message);
+ }
+
+ void RunContext::popScopedMessage(MessageInfo const & message) {
+ m_messages.erase(std::remove(m_messages.begin(), m_messages.end(), message), m_messages.end());
+ }
+
+ void RunContext::emplaceUnscopedMessage( MessageBuilder const& builder ) {
+ m_messageScopes.emplace_back( builder );
+ }
+
+ std::string RunContext::getCurrentTestName() const {
+ return m_activeTestCase
+ ? m_activeTestCase->getTestCaseInfo().name
+ : std::string();
+ }
+
+ const AssertionResult * RunContext::getLastResult() const {
+ return &(*m_lastResult);
+ }
+
+ void RunContext::exceptionEarlyReported() {
+ m_shouldReportUnexpected = false;
+ }
+
+ void RunContext::handleFatalErrorCondition( StringRef message ) {
+ // First notify reporter that bad things happened
+ m_reporter->fatalErrorEncountered(message);
+
+ // Don't rebuild the result -- the stringification itself can cause more fatal errors
+ // Instead, fake a result data.
+ AssertionResultData tempResult( ResultWas::FatalErrorCondition, { false } );
+ tempResult.message = static_cast<std::string>(message);
+ AssertionResult result(m_lastAssertionInfo, tempResult);
+
+ assertionEnded(result);
+
+ handleUnfinishedSections();
+
+ // Recreate section for test case (as we will lose the one that was in scope)
+ auto const& testCaseInfo = m_activeTestCase->getTestCaseInfo();
+ SectionInfo testCaseSection(testCaseInfo.lineInfo, testCaseInfo.name);
+
+ Counts assertions;
+ assertions.failed = 1;
+ SectionStats testCaseSectionStats(testCaseSection, assertions, 0, false);
+ m_reporter->sectionEnded(testCaseSectionStats);
+
+ auto const& testInfo = m_activeTestCase->getTestCaseInfo();
+
+ Totals deltaTotals;
+ deltaTotals.testCases.failed = 1;
+ deltaTotals.assertions.failed = 1;
+ m_reporter->testCaseEnded(TestCaseStats(testInfo,
+ deltaTotals,
+ std::string(),
+ std::string(),
+ false));
+ m_totals.testCases.failed++;
+ testGroupEnded(std::string(), m_totals, 1, 1);
+ m_reporter->testRunEnded(TestRunStats(m_runInfo, m_totals, false));
+ }
+
+ bool RunContext::lastAssertionPassed() {
+ return m_lastAssertionPassed;
+ }
+
+ void RunContext::assertionPassed() {
+ m_lastAssertionPassed = true;
+ ++m_totals.assertions.passed;
+ resetAssertionInfo();
+ m_messageScopes.clear();
+ }
+
+ bool RunContext::aborting() const {
+ return m_totals.assertions.failed >= static_cast<std::size_t>(m_config->abortAfter());
+ }
+
+ void RunContext::runCurrentTest(std::string & redirectedCout, std::string & redirectedCerr) {
+ auto const& testCaseInfo = m_activeTestCase->getTestCaseInfo();
+ SectionInfo testCaseSection(testCaseInfo.lineInfo, testCaseInfo.name);
+ m_reporter->sectionStarting(testCaseSection);
+ Counts prevAssertions = m_totals.assertions;
+ double duration = 0;
+ m_shouldReportUnexpected = true;
+ m_lastAssertionInfo = { "TEST_CASE"_sr, testCaseInfo.lineInfo, StringRef(), ResultDisposition::Normal };
+
+ seedRng(*m_config);
+
+ Timer timer;
+ CATCH_TRY {
+ if (m_reporter->getPreferences().shouldRedirectStdOut) {
+#if !defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT)
+ RedirectedStreams redirectedStreams(redirectedCout, redirectedCerr);
+
+ timer.start();
+ invokeActiveTestCase();
+#else
+ OutputRedirect r(redirectedCout, redirectedCerr);
+ timer.start();
+ invokeActiveTestCase();
+#endif
+ } else {
+ timer.start();
+ invokeActiveTestCase();
+ }
+ duration = timer.getElapsedSeconds();
+ } CATCH_CATCH_ANON (TestFailureException&) {
+ // This just means the test was aborted due to failure
+ } CATCH_CATCH_ALL {
+ // Under CATCH_CONFIG_FAST_COMPILE, unexpected exceptions under REQUIRE assertions
+ // are reported without translation at the point of origin.
+ if( m_shouldReportUnexpected ) {
+ AssertionReaction dummyReaction;
+ handleUnexpectedInflightException( m_lastAssertionInfo, translateActiveException(), dummyReaction );
+ }
+ }
+ Counts assertions = m_totals.assertions - prevAssertions;
+ bool missingAssertions = testForMissingAssertions(assertions);
+
+ m_testCaseTracker->close();
+ handleUnfinishedSections();
+ m_messages.clear();
+ m_messageScopes.clear();
+
+ SectionStats testCaseSectionStats(testCaseSection, assertions, duration, missingAssertions);
+ m_reporter->sectionEnded(testCaseSectionStats);
+ }
+
+ void RunContext::invokeActiveTestCase() {
+ FatalConditionHandler fatalConditionHandler; // Handle signals
+ m_activeTestCase->invoke();
+ fatalConditionHandler.reset();
+ }
+
+ void RunContext::handleUnfinishedSections() {
+ // If sections ended prematurely due to an exception we stored their
+ // infos here so we can tear them down outside the unwind process.
+ for (auto it = m_unfinishedSections.rbegin(),
+ itEnd = m_unfinishedSections.rend();
+ it != itEnd;
+ ++it)
+ sectionEnded(*it);
+ m_unfinishedSections.clear();
+ }
+
+ void RunContext::handleExpr(
+ AssertionInfo const& info,
+ ITransientExpression const& expr,
+ AssertionReaction& reaction
+ ) {
+ m_reporter->assertionStarting( info );
+
+ bool negated = isFalseTest( info.resultDisposition );
+ bool result = expr.getResult() != negated;
+
+ if( result ) {
+ if (!m_includeSuccessfulResults) {
+ assertionPassed();
+ }
+ else {
+ reportExpr(info, ResultWas::Ok, &expr, negated);
+ }
+ }
+ else {
+ reportExpr(info, ResultWas::ExpressionFailed, &expr, negated );
+ populateReaction( reaction );
+ }
+ }
+ void RunContext::reportExpr(
+ AssertionInfo const &info,
+ ResultWas::OfType resultType,
+ ITransientExpression const *expr,
+ bool negated ) {
+
+ m_lastAssertionInfo = info;
+ AssertionResultData data( resultType, LazyExpression( negated ) );
+
+ AssertionResult assertionResult{ info, data };
+ assertionResult.m_resultData.lazyExpression.m_transientExpression = expr;
+
+ assertionEnded( assertionResult );
+ }
+
+ void RunContext::handleMessage(
+ AssertionInfo const& info,
+ ResultWas::OfType resultType,
+ StringRef const& message,
+ AssertionReaction& reaction
+ ) {
+ m_reporter->assertionStarting( info );
+
+ m_lastAssertionInfo = info;
+
+ AssertionResultData data( resultType, LazyExpression( false ) );
+ data.message = static_cast<std::string>(message);
+ AssertionResult assertionResult{ m_lastAssertionInfo, data };
+ assertionEnded( assertionResult );
+ if( !assertionResult.isOk() )
+ populateReaction( reaction );
+ }
+ void RunContext::handleUnexpectedExceptionNotThrown(
+ AssertionInfo const& info,
+ AssertionReaction& reaction
+ ) {
+ handleNonExpr(info, Catch::ResultWas::DidntThrowException, reaction);
+ }
+
+ void RunContext::handleUnexpectedInflightException(
+ AssertionInfo const& info,
+ std::string const& message,
+ AssertionReaction& reaction
+ ) {
+ m_lastAssertionInfo = info;
+
+ AssertionResultData data( ResultWas::ThrewException, LazyExpression( false ) );
+ data.message = message;
+ AssertionResult assertionResult{ info, data };
+ assertionEnded( assertionResult );
+ populateReaction( reaction );
+ }
+
+ void RunContext::populateReaction( AssertionReaction& reaction ) {
+ reaction.shouldDebugBreak = m_config->shouldDebugBreak();
+ reaction.shouldThrow = aborting() || (m_lastAssertionInfo.resultDisposition & ResultDisposition::Normal);
+ }
+
+ void RunContext::handleIncomplete(
+ AssertionInfo const& info
+ ) {
+ m_lastAssertionInfo = info;
+
+ AssertionResultData data( ResultWas::ThrewException, LazyExpression( false ) );
+ data.message = "Exception translation was disabled by CATCH_CONFIG_FAST_COMPILE";
+ AssertionResult assertionResult{ info, data };
+ assertionEnded( assertionResult );
+ }
+ void RunContext::handleNonExpr(
+ AssertionInfo const &info,
+ ResultWas::OfType resultType,
+ AssertionReaction &reaction
+ ) {
+ m_lastAssertionInfo = info;
+
+ AssertionResultData data( resultType, LazyExpression( false ) );
+ AssertionResult assertionResult{ info, data };
+ assertionEnded( assertionResult );
+
+ if( !assertionResult.isOk() )
+ populateReaction( reaction );
+ }
+
+ IResultCapture& getResultCapture() {
+ if (auto* capture = getCurrentContext().getResultCapture())
+ return *capture;
+ else
+ CATCH_INTERNAL_ERROR("No result capture instance");
+ }
+
+ void seedRng(IConfig const& config) {
+ if (config.rngSeed() != 0) {
+ std::srand(config.rngSeed());
+ rng().seed(config.rngSeed());
+ }
+ }
+
+ unsigned int rngSeed() {
+ return getCurrentContext().getConfig()->rngSeed();
+ }
+
+}
+// end catch_run_context.cpp
+// start catch_section.cpp
+
+namespace Catch {
+
+ Section::Section( SectionInfo const& info )
+ : m_info( info ),
+ m_sectionIncluded( getResultCapture().sectionStarted( m_info, m_assertions ) )
+ {
+ m_timer.start();
+ }
+
+ Section::~Section() {
+ if( m_sectionIncluded ) {
+ SectionEndInfo endInfo{ m_info, m_assertions, m_timer.getElapsedSeconds() };
+ if( uncaught_exceptions() )
+ getResultCapture().sectionEndedEarly( endInfo );
+ else
+ getResultCapture().sectionEnded( endInfo );
+ }
+ }
+
+ // This indicates whether the section should be executed or not
+ Section::operator bool() const {
+ return m_sectionIncluded;
+ }
+
+} // end namespace Catch
+// end catch_section.cpp
+// start catch_section_info.cpp
+
+namespace Catch {
+
+ SectionInfo::SectionInfo
+ ( SourceLineInfo const& _lineInfo,
+ std::string const& _name )
+ : name( _name ),
+ lineInfo( _lineInfo )
+ {}
+
+} // end namespace Catch
+// end catch_section_info.cpp
+// start catch_session.cpp
+
+// start catch_session.h
+
+#include <memory>
+
+namespace Catch {
+
+ class Session : NonCopyable {
+ public:
+
+ Session();
+ ~Session() override;
+
+ void showHelp() const;
+ void libIdentify();
+
+ int applyCommandLine( int argc, char const * const * argv );
+ #if defined(CATCH_CONFIG_WCHAR) && defined(_WIN32) && defined(UNICODE)
+ int applyCommandLine( int argc, wchar_t const * const * argv );
+ #endif
+
+ void useConfigData( ConfigData const& configData );
+
+ template<typename CharT>
+ int run(int argc, CharT const * const argv[]) {
+ if (m_startupExceptions)
+ return 1;
+ int returnCode = applyCommandLine(argc, argv);
+ if (returnCode == 0)
+ returnCode = run();
+ return returnCode;
+ }
+
+ int run();
+
+ clara::Parser const& cli() const;
+ void cli( clara::Parser const& newParser );
+ ConfigData& configData();
+ Config& config();
+ private:
+ int runInternal();
+
+ clara::Parser m_cli;
+ ConfigData m_configData;
+ std::shared_ptr<Config> m_config;
+ bool m_startupExceptions = false;
+ };
+
+} // end namespace Catch
+
+// end catch_session.h
+// start catch_version.h
+
+#include <iosfwd>
+
+namespace Catch {
+
+ // Versioning information
+ struct Version {
+ Version( Version const& ) = delete;
+ Version& operator=( Version const& ) = delete;
+ Version( unsigned int _majorVersion,
+ unsigned int _minorVersion,
+ unsigned int _patchNumber,
+ char const * const _branchName,
+ unsigned int _buildNumber );
+
+ unsigned int const majorVersion;
+ unsigned int const minorVersion;
+ unsigned int const patchNumber;
+
+ // buildNumber is only used if branchName is not null
+ char const * const branchName;
+ unsigned int const buildNumber;
+
+ friend std::ostream& operator << ( std::ostream& os, Version const& version );
+ };
+
+ Version const& libraryVersion();
+}
+
+// end catch_version.h
+#include <cstdlib>
+#include <iomanip>
+#include <set>
+#include <iterator>
+
+namespace Catch {
+
+ namespace {
+ const int MaxExitCode = 255;
+
+ IStreamingReporterPtr createReporter(std::string const& reporterName, IConfigPtr const& config) {
+ auto reporter = Catch::getRegistryHub().getReporterRegistry().create(reporterName, config);
+ CATCH_ENFORCE(reporter, "No reporter registered with name: '" << reporterName << "'");
+
+ return reporter;
+ }
+
+ IStreamingReporterPtr makeReporter(std::shared_ptr<Config> const& config) {
+ if (Catch::getRegistryHub().getReporterRegistry().getListeners().empty()) {
+ return createReporter(config->getReporterName(), config);
+ }
+
+ // On older platforms, returning std::unique_ptr<ListeningReporter>
+ // when the return type is std::unique_ptr<IStreamingReporter>
+ // doesn't compile without a std::move call. However, this causes
+ // a warning on newer platforms. Thus, we have to work around
+ // it a bit and downcast the pointer manually.
+ auto ret = std::unique_ptr<IStreamingReporter>(new ListeningReporter);
+ auto& multi = static_cast<ListeningReporter&>(*ret);
+ auto const& listeners = Catch::getRegistryHub().getReporterRegistry().getListeners();
+ for (auto const& listener : listeners) {
+ multi.addListener(listener->create(Catch::ReporterConfig(config)));
+ }
+ multi.addReporter(createReporter(config->getReporterName(), config));
+ return ret;
+ }
+
+ class TestGroup {
+ public:
+ explicit TestGroup(std::shared_ptr<Config> const& config)
+ : m_config{config}
+ , m_context{config, makeReporter(config)}
+ {
+ auto const& allTestCases = getAllTestCasesSorted(*m_config);
+ m_matches = m_config->testSpec().matchesByFilter(allTestCases, *m_config);
+ auto const& invalidArgs = m_config->testSpec().getInvalidArgs();
+
+ if (m_matches.empty() && invalidArgs.empty()) {
+ for (auto const& test : allTestCases)
+ if (!test.isHidden())
+ m_tests.emplace(&test);
+ } else {
+ for (auto const& match : m_matches)
+ m_tests.insert(match.tests.begin(), match.tests.end());
+ }
+ }
+
+ Totals execute() {
+ auto const& invalidArgs = m_config->testSpec().getInvalidArgs();
+ Totals totals;
+ m_context.testGroupStarting(m_config->name(), 1, 1);
+ for (auto const& testCase : m_tests) {
+ if (!m_context.aborting())
+ totals += m_context.runTest(*testCase);
+ else
+ m_context.reporter().skipTest(*testCase);
+ }
+
+ for (auto const& match : m_matches) {
+ if (match.tests.empty()) {
+ m_context.reporter().noMatchingTestCases(match.name);
+ totals.error = -1;
+ }
+ }
+
+ if (!invalidArgs.empty()) {
+ for (auto const& invalidArg: invalidArgs)
+ m_context.reporter().reportInvalidArguments(invalidArg);
+ }
+
+ m_context.testGroupEnded(m_config->name(), totals, 1, 1);
+ return totals;
+ }
+
+ private:
+ using Tests = std::set<TestCase const*>;
+
+ std::shared_ptr<Config> m_config;
+ RunContext m_context;
+ Tests m_tests;
+ TestSpec::Matches m_matches;
+ };
+
+ void applyFilenamesAsTags(Catch::IConfig const& config) {
+ auto& tests = const_cast<std::vector<TestCase>&>(getAllTestCasesSorted(config));
+ for (auto& testCase : tests) {
+ auto tags = testCase.tags;
+
+ std::string filename = testCase.lineInfo.file;
+ auto lastSlash = filename.find_last_of("\\/");
+ if (lastSlash != std::string::npos) {
+ filename.erase(0, lastSlash);
+ filename[0] = '#';
+ }
+
+ auto lastDot = filename.find_last_of('.');
+ if (lastDot != std::string::npos) {
+ filename.erase(lastDot);
+ }
+
+ tags.push_back(std::move(filename));
+ setTags(testCase, tags);
+ }
+ }
+
+ } // anon namespace
+
+ Session::Session() {
+ static bool alreadyInstantiated = false;
+ if( alreadyInstantiated ) {
+ CATCH_TRY { CATCH_INTERNAL_ERROR( "Only one instance of Catch::Session can ever be used" ); }
+ CATCH_CATCH_ALL { getMutableRegistryHub().registerStartupException(); }
+ }
+
+ // There cannot be exceptions at startup in no-exception mode.
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ const auto& exceptions = getRegistryHub().getStartupExceptionRegistry().getExceptions();
+ if ( !exceptions.empty() ) {
+ config();
+ getCurrentMutableContext().setConfig(m_config);
+
+ m_startupExceptions = true;
+ Colour colourGuard( Colour::Red );
+ Catch::cerr() << "Errors occurred during startup!" << '\n';
+ // iterate over all exceptions and notify user
+ for ( const auto& ex_ptr : exceptions ) {
+ try {
+ std::rethrow_exception(ex_ptr);
+ } catch ( std::exception const& ex ) {
+ Catch::cerr() << Column( ex.what() ).indent(2) << '\n';
+ }
+ }
+ }
+#endif
+
+ alreadyInstantiated = true;
+ m_cli = makeCommandLineParser( m_configData );
+ }
+ Session::~Session() {
+ Catch::cleanUp();
+ }
+
+ void Session::showHelp() const {
+ Catch::cout()
+ << "\nCatch v" << libraryVersion() << "\n"
+ << m_cli << std::endl
+ << "For more detailed usage please see the project docs\n" << std::endl;
+ }
+ void Session::libIdentify() {
+ Catch::cout()
+ << std::left << std::setw(16) << "description: " << "A Catch2 test executable\n"
+ << std::left << std::setw(16) << "category: " << "testframework\n"
+ << std::left << std::setw(16) << "framework: " << "Catch Test\n"
+ << std::left << std::setw(16) << "version: " << libraryVersion() << std::endl;
+ }
+
+ int Session::applyCommandLine( int argc, char const * const * argv ) {
+ if( m_startupExceptions )
+ return 1;
+
+ auto result = m_cli.parse( clara::Args( argc, argv ) );
+ if( !result ) {
+ config();
+ getCurrentMutableContext().setConfig(m_config);
+ Catch::cerr()
+ << Colour( Colour::Red )
+ << "\nError(s) in input:\n"
+ << Column( result.errorMessage() ).indent( 2 )
+ << "\n\n";
+ Catch::cerr() << "Run with -? for usage\n" << std::endl;
+ return MaxExitCode;
+ }
+
+ if( m_configData.showHelp )
+ showHelp();
+ if( m_configData.libIdentify )
+ libIdentify();
+ m_config.reset();
+ return 0;
+ }
+
+#if defined(CATCH_CONFIG_WCHAR) && defined(_WIN32) && defined(UNICODE)
+ int Session::applyCommandLine( int argc, wchar_t const * const * argv ) {
+
+ char **utf8Argv = new char *[ argc ];
+
+ for ( int i = 0; i < argc; ++i ) {
+ int bufSize = WideCharToMultiByte( CP_UTF8, 0, argv[i], -1, nullptr, 0, nullptr, nullptr );
+
+ utf8Argv[ i ] = new char[ bufSize ];
+
+ WideCharToMultiByte( CP_UTF8, 0, argv[i], -1, utf8Argv[i], bufSize, nullptr, nullptr );
+ }
+
+ int returnCode = applyCommandLine( argc, utf8Argv );
+
+ for ( int i = 0; i < argc; ++i )
+ delete [] utf8Argv[ i ];
+
+ delete [] utf8Argv;
+
+ return returnCode;
+ }
+#endif
+
+ void Session::useConfigData( ConfigData const& configData ) {
+ m_configData = configData;
+ m_config.reset();
+ }
+
+ int Session::run() {
+ if( ( m_configData.waitForKeypress & WaitForKeypress::BeforeStart ) != 0 ) {
+ Catch::cout() << "...waiting for enter/ return before starting" << std::endl;
+ static_cast<void>(std::getchar());
+ }
+ int exitCode = runInternal();
+ if( ( m_configData.waitForKeypress & WaitForKeypress::BeforeExit ) != 0 ) {
+ Catch::cout() << "...waiting for enter/ return before exiting, with code: " << exitCode << std::endl;
+ static_cast<void>(std::getchar());
+ }
+ return exitCode;
+ }
+
+ clara::Parser const& Session::cli() const {
+ return m_cli;
+ }
+ void Session::cli( clara::Parser const& newParser ) {
+ m_cli = newParser;
+ }
+ ConfigData& Session::configData() {
+ return m_configData;
+ }
+ Config& Session::config() {
+ if( !m_config )
+ m_config = std::make_shared<Config>( m_configData );
+ return *m_config;
+ }
+
+ int Session::runInternal() {
+ if( m_startupExceptions )
+ return 1;
+
+ if (m_configData.showHelp || m_configData.libIdentify) {
+ return 0;
+ }
+
+ CATCH_TRY {
+ config(); // Force config to be constructed
+
+ seedRng( *m_config );
+
+ if( m_configData.filenamesAsTags )
+ applyFilenamesAsTags( *m_config );
+
+ // Handle list request
+ if( Option<std::size_t> listed = list( m_config ) )
+ return static_cast<int>( *listed );
+
+ TestGroup tests { m_config };
+ auto const totals = tests.execute();
+
+ if( m_config->warnAboutNoTests() && totals.error == -1 )
+ return 2;
+
+ // Note that on unices only the lower 8 bits are usually used, clamping
+ // the return value to 255 prevents false negative when some multiple
+ // of 256 tests has failed
+ return (std::min) (MaxExitCode, (std::max) (totals.error, static_cast<int>(totals.assertions.failed)));
+ }
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ catch( std::exception& ex ) {
+ Catch::cerr() << ex.what() << std::endl;
+ return MaxExitCode;
+ }
+#endif
+ }
+
+} // end namespace Catch
+// end catch_session.cpp
+// start catch_singletons.cpp
+
+#include <vector>
+
+namespace Catch {
+
+ namespace {
+ static auto getSingletons() -> std::vector<ISingleton*>*& {
+ static std::vector<ISingleton*>* g_singletons = nullptr;
+ if( !g_singletons )
+ g_singletons = new std::vector<ISingleton*>();
+ return g_singletons;
+ }
+ }
+
+ ISingleton::~ISingleton() {}
+
+ void addSingleton(ISingleton* singleton ) {
+ getSingletons()->push_back( singleton );
+ }
+ void cleanupSingletons() {
+ auto& singletons = getSingletons();
+ for( auto singleton : *singletons )
+ delete singleton;
+ delete singletons;
+ singletons = nullptr;
+ }
+
+} // namespace Catch
+// end catch_singletons.cpp
+// start catch_startup_exception_registry.cpp
+
+namespace Catch {
+void StartupExceptionRegistry::add( std::exception_ptr const& exception ) noexcept {
+ CATCH_TRY {
+ m_exceptions.push_back(exception);
+ } CATCH_CATCH_ALL {
+ // If we run out of memory during start-up there's really not a lot more we can do about it
+ std::terminate();
+ }
+ }
+
+ std::vector<std::exception_ptr> const& StartupExceptionRegistry::getExceptions() const noexcept {
+ return m_exceptions;
+ }
+
+} // end namespace Catch
+// end catch_startup_exception_registry.cpp
+// start catch_stream.cpp
+
+#include <cstdio>
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <vector>
+#include <memory>
+
+namespace Catch {
+
+ Catch::IStream::~IStream() = default;
+
+ namespace Detail { namespace {
+ template<typename WriterF, std::size_t bufferSize=256>
+ class StreamBufImpl : public std::streambuf {
+ char data[bufferSize];
+ WriterF m_writer;
+
+ public:
+ StreamBufImpl() {
+ setp( data, data + sizeof(data) );
+ }
+
+ ~StreamBufImpl() noexcept {
+ StreamBufImpl::sync();
+ }
+
+ private:
+ int overflow( int c ) override {
+ sync();
+
+ if( c != EOF ) {
+ if( pbase() == epptr() )
+ m_writer( std::string( 1, static_cast<char>( c ) ) );
+ else
+ sputc( static_cast<char>( c ) );
+ }
+ return 0;
+ }
+
+ int sync() override {
+ if( pbase() != pptr() ) {
+ m_writer( std::string( pbase(), static_cast<std::string::size_type>( pptr() - pbase() ) ) );
+ setp( pbase(), epptr() );
+ }
+ return 0;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ struct OutputDebugWriter {
+
+ void operator()( std::string const&str ) {
+ writeToDebugConsole( str );
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ class FileStream : public IStream {
+ mutable std::ofstream m_ofs;
+ public:
+ FileStream( StringRef filename ) {
+ m_ofs.open( filename.c_str() );
+ CATCH_ENFORCE( !m_ofs.fail(), "Unable to open file: '" << filename << "'" );
+ }
+ ~FileStream() override = default;
+ public: // IStream
+ std::ostream& stream() const override {
+ return m_ofs;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ class CoutStream : public IStream {
+ mutable std::ostream m_os;
+ public:
+ // Store the streambuf from cout up-front because
+ // cout may get redirected when running tests
+ CoutStream() : m_os( Catch::cout().rdbuf() ) {}
+ ~CoutStream() override = default;
+
+ public: // IStream
+ std::ostream& stream() const override { return m_os; }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ class DebugOutStream : public IStream {
+ std::unique_ptr<StreamBufImpl<OutputDebugWriter>> m_streamBuf;
+ mutable std::ostream m_os;
+ public:
+ DebugOutStream()
+ : m_streamBuf( new StreamBufImpl<OutputDebugWriter>() ),
+ m_os( m_streamBuf.get() )
+ {}
+
+ ~DebugOutStream() override = default;
+
+ public: // IStream
+ std::ostream& stream() const override { return m_os; }
+ };
+
+ }} // namespace anon::detail
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ auto makeStream( StringRef const &filename ) -> IStream const* {
+ if( filename.empty() )
+ return new Detail::CoutStream();
+ else if( filename[0] == '%' ) {
+ if( filename == "%debug" )
+ return new Detail::DebugOutStream();
+ else
+ CATCH_ERROR( "Unrecognised stream: '" << filename << "'" );
+ }
+ else
+ return new Detail::FileStream( filename );
+ }
+
+ // This class encapsulates the idea of a pool of ostringstreams that can be reused.
+ struct StringStreams {
+ std::vector<std::unique_ptr<std::ostringstream>> m_streams;
+ std::vector<std::size_t> m_unused;
+ std::ostringstream m_referenceStream; // Used for copy state/ flags from
+
+ auto add() -> std::size_t {
+ if( m_unused.empty() ) {
+ m_streams.push_back( std::unique_ptr<std::ostringstream>( new std::ostringstream ) );
+ return m_streams.size()-1;
+ }
+ else {
+ auto index = m_unused.back();
+ m_unused.pop_back();
+ return index;
+ }
+ }
+
+ void release( std::size_t index ) {
+ m_streams[index]->copyfmt( m_referenceStream ); // Restore initial flags and other state
+ m_unused.push_back(index);
+ }
+ };
+
+ ReusableStringStream::ReusableStringStream()
+ : m_index( Singleton<StringStreams>::getMutable().add() ),
+ m_oss( Singleton<StringStreams>::getMutable().m_streams[m_index].get() )
+ {}
+
+ ReusableStringStream::~ReusableStringStream() {
+ static_cast<std::ostringstream*>( m_oss )->str("");
+ m_oss->clear();
+ Singleton<StringStreams>::getMutable().release( m_index );
+ }
+
+ auto ReusableStringStream::str() const -> std::string {
+ return static_cast<std::ostringstream*>( m_oss )->str();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+
+#ifndef CATCH_CONFIG_NOSTDOUT // If you #define this you must implement these functions
+ std::ostream& cout() { return std::cout; }
+ std::ostream& cerr() { return std::cerr; }
+ std::ostream& clog() { return std::clog; }
+#endif
+}
+// end catch_stream.cpp
+// start catch_string_manip.cpp
+
+#include <algorithm>
+#include <ostream>
+#include <cstring>
+#include <cctype>
+#include <vector>
+
+namespace Catch {
+
+ namespace {
+ char toLowerCh(char c) {
+ return static_cast<char>( std::tolower( c ) );
+ }
+ }
+
+ bool startsWith( std::string const& s, std::string const& prefix ) {
+ return s.size() >= prefix.size() && std::equal(prefix.begin(), prefix.end(), s.begin());
+ }
+ bool startsWith( std::string const& s, char prefix ) {
+ return !s.empty() && s[0] == prefix;
+ }
+ bool endsWith( std::string const& s, std::string const& suffix ) {
+ return s.size() >= suffix.size() && std::equal(suffix.rbegin(), suffix.rend(), s.rbegin());
+ }
+ bool endsWith( std::string const& s, char suffix ) {
+ return !s.empty() && s[s.size()-1] == suffix;
+ }
+ bool contains( std::string const& s, std::string const& infix ) {
+ return s.find( infix ) != std::string::npos;
+ }
+ void toLowerInPlace( std::string& s ) {
+ std::transform( s.begin(), s.end(), s.begin(), toLowerCh );
+ }
+ std::string toLower( std::string const& s ) {
+ std::string lc = s;
+ toLowerInPlace( lc );
+ return lc;
+ }
+ std::string trim( std::string const& str ) {
+ static char const* whitespaceChars = "\n\r\t ";
+ std::string::size_type start = str.find_first_not_of( whitespaceChars );
+ std::string::size_type end = str.find_last_not_of( whitespaceChars );
+
+ return start != std::string::npos ? str.substr( start, 1+end-start ) : std::string();
+ }
+
+ StringRef trim(StringRef ref) {
+ const auto is_ws = [](char c) {
+ return c == ' ' || c == '\t' || c == '\n' || c == '\r';
+ };
+ size_t real_begin = 0;
+ while (real_begin < ref.size() && is_ws(ref[real_begin])) { ++real_begin; }
+ size_t real_end = ref.size();
+ while (real_end > real_begin && is_ws(ref[real_end - 1])) { --real_end; }
+
+ return ref.substr(real_begin, real_end - real_begin);
+ }
+
+ bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ) {
+ bool replaced = false;
+ std::size_t i = str.find( replaceThis );
+ while( i != std::string::npos ) {
+ replaced = true;
+ str = str.substr( 0, i ) + withThis + str.substr( i+replaceThis.size() );
+ if( i < str.size()-withThis.size() )
+ i = str.find( replaceThis, i+withThis.size() );
+ else
+ i = std::string::npos;
+ }
+ return replaced;
+ }
+
+ std::vector<StringRef> splitStringRef( StringRef str, char delimiter ) {
+ std::vector<StringRef> subStrings;
+ std::size_t start = 0;
+ for(std::size_t pos = 0; pos < str.size(); ++pos ) {
+ if( str[pos] == delimiter ) {
+ if( pos - start > 1 )
+ subStrings.push_back( str.substr( start, pos-start ) );
+ start = pos+1;
+ }
+ }
+ if( start < str.size() )
+ subStrings.push_back( str.substr( start, str.size()-start ) );
+ return subStrings;
+ }
+
+ pluralise::pluralise( std::size_t count, std::string const& label )
+ : m_count( count ),
+ m_label( label )
+ {}
+
+ std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser ) {
+ os << pluraliser.m_count << ' ' << pluraliser.m_label;
+ if( pluraliser.m_count != 1 )
+ os << 's';
+ return os;
+ }
+
+}
+// end catch_string_manip.cpp
+// start catch_stringref.cpp
+
+#include <algorithm>
+#include <ostream>
+#include <cstring>
+#include <cstdint>
+
+namespace Catch {
+ StringRef::StringRef( char const* rawChars ) noexcept
+ : StringRef( rawChars, static_cast<StringRef::size_type>(std::strlen(rawChars) ) )
+ {}
+
+ auto StringRef::c_str() const -> char const* {
+ CATCH_ENFORCE(isNullTerminated(), "Called StringRef::c_str() on a non-null-terminated instance");
+ return m_start;
+ }
+ auto StringRef::data() const noexcept -> char const* {
+ return m_start;
+ }
+
+ auto StringRef::substr( size_type start, size_type size ) const noexcept -> StringRef {
+ if (start < m_size) {
+ return StringRef(m_start + start, (std::min)(m_size - start, size));
+ } else {
+ return StringRef();
+ }
+ }
+ auto StringRef::operator == ( StringRef const& other ) const noexcept -> bool {
+ return m_size == other.m_size
+ && (std::memcmp( m_start, other.m_start, m_size ) == 0);
+ }
+
+ auto operator << ( std::ostream& os, StringRef const& str ) -> std::ostream& {
+ return os.write(str.data(), str.size());
+ }
+
+ auto operator+=( std::string& lhs, StringRef const& rhs ) -> std::string& {
+ lhs.append(rhs.data(), rhs.size());
+ return lhs;
+ }
+
+} // namespace Catch
+// end catch_stringref.cpp
+// start catch_tag_alias.cpp
+
+namespace Catch {
+ TagAlias::TagAlias(std::string const & _tag, SourceLineInfo _lineInfo): tag(_tag), lineInfo(_lineInfo) {}
+}
+// end catch_tag_alias.cpp
+// start catch_tag_alias_autoregistrar.cpp
+
+namespace Catch {
+
+ RegistrarForTagAliases::RegistrarForTagAliases(char const* alias, char const* tag, SourceLineInfo const& lineInfo) {
+ CATCH_TRY {
+ getMutableRegistryHub().registerTagAlias(alias, tag, lineInfo);
+ } CATCH_CATCH_ALL {
+ // Do not throw when constructing global objects, instead register the exception to be processed later
+ getMutableRegistryHub().registerStartupException();
+ }
+ }
+
+}
+// end catch_tag_alias_autoregistrar.cpp
+// start catch_tag_alias_registry.cpp
+
+#include <sstream>
+
+namespace Catch {
+
+ TagAliasRegistry::~TagAliasRegistry() {}
+
+ TagAlias const* TagAliasRegistry::find( std::string const& alias ) const {
+ auto it = m_registry.find( alias );
+ if( it != m_registry.end() )
+ return &(it->second);
+ else
+ return nullptr;
+ }
+
+ std::string TagAliasRegistry::expandAliases( std::string const& unexpandedTestSpec ) const {
+ std::string expandedTestSpec = unexpandedTestSpec;
+ for( auto const& registryKvp : m_registry ) {
+ std::size_t pos = expandedTestSpec.find( registryKvp.first );
+ if( pos != std::string::npos ) {
+ expandedTestSpec = expandedTestSpec.substr( 0, pos ) +
+ registryKvp.second.tag +
+ expandedTestSpec.substr( pos + registryKvp.first.size() );
+ }
+ }
+ return expandedTestSpec;
+ }
+
+ void TagAliasRegistry::add( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) {
+ CATCH_ENFORCE( startsWith(alias, "[@") && endsWith(alias, ']'),
+ "error: tag alias, '" << alias << "' is not of the form [@alias name].\n" << lineInfo );
+
+ CATCH_ENFORCE( m_registry.insert(std::make_pair(alias, TagAlias(tag, lineInfo))).second,
+ "error: tag alias, '" << alias << "' already registered.\n"
+ << "\tFirst seen at: " << find(alias)->lineInfo << "\n"
+ << "\tRedefined at: " << lineInfo );
+ }
+
+ ITagAliasRegistry::~ITagAliasRegistry() {}
+
+ ITagAliasRegistry const& ITagAliasRegistry::get() {
+ return getRegistryHub().getTagAliasRegistry();
+ }
+
+} // end namespace Catch
+// end catch_tag_alias_registry.cpp
+// start catch_test_case_info.cpp
+
+#include <cctype>
+#include <exception>
+#include <algorithm>
+#include <sstream>
+
+namespace Catch {
+
+ namespace {
+ TestCaseInfo::SpecialProperties parseSpecialTag( std::string const& tag ) {
+ if( startsWith( tag, '.' ) ||
+ tag == "!hide" )
+ return TestCaseInfo::IsHidden;
+ else if( tag == "!throws" )
+ return TestCaseInfo::Throws;
+ else if( tag == "!shouldfail" )
+ return TestCaseInfo::ShouldFail;
+ else if( tag == "!mayfail" )
+ return TestCaseInfo::MayFail;
+ else if( tag == "!nonportable" )
+ return TestCaseInfo::NonPortable;
+ else if( tag == "!benchmark" )
+ return static_cast<TestCaseInfo::SpecialProperties>( TestCaseInfo::Benchmark | TestCaseInfo::IsHidden );
+ else
+ return TestCaseInfo::None;
+ }
+ bool isReservedTag( std::string const& tag ) {
+ return parseSpecialTag( tag ) == TestCaseInfo::None && tag.size() > 0 && !std::isalnum( static_cast<unsigned char>(tag[0]) );
+ }
+ void enforceNotReservedTag( std::string const& tag, SourceLineInfo const& _lineInfo ) {
+ CATCH_ENFORCE( !isReservedTag(tag),
+ "Tag name: [" << tag << "] is not allowed.\n"
+ << "Tag names starting with non alphanumeric characters are reserved\n"
+ << _lineInfo );
+ }
+ }
+
+ TestCase makeTestCase( ITestInvoker* _testCase,
+ std::string const& _className,
+ NameAndTags const& nameAndTags,
+ SourceLineInfo const& _lineInfo )
+ {
+ bool isHidden = false;
+
+ // Parse out tags
+ std::vector<std::string> tags;
+ std::string desc, tag;
+ bool inTag = false;
+ for (char c : nameAndTags.tags) {
+ if( !inTag ) {
+ if( c == '[' )
+ inTag = true;
+ else
+ desc += c;
+ }
+ else {
+ if( c == ']' ) {
+ TestCaseInfo::SpecialProperties prop = parseSpecialTag( tag );
+ if( ( prop & TestCaseInfo::IsHidden ) != 0 )
+ isHidden = true;
+ else if( prop == TestCaseInfo::None )
+ enforceNotReservedTag( tag, _lineInfo );
+
+ // Merged hide tags like `[.approvals]` should be added as
+ // `[.][approvals]`. The `[.]` is added at later point, so
+ // we only strip the prefix
+ if (startsWith(tag, '.') && tag.size() > 1) {
+ tag.erase(0, 1);
+ }
+ tags.push_back( tag );
+ tag.clear();
+ inTag = false;
+ }
+ else
+ tag += c;
+ }
+ }
+ if( isHidden ) {
+ // Add all "hidden" tags to make them behave identically
+ tags.insert( tags.end(), { ".", "!hide" } );
+ }
+
+ TestCaseInfo info( static_cast<std::string>(nameAndTags.name), _className, desc, tags, _lineInfo );
+ return TestCase( _testCase, std::move(info) );
+ }
+
+ void setTags( TestCaseInfo& testCaseInfo, std::vector<std::string> tags ) {
+ std::sort(begin(tags), end(tags));
+ tags.erase(std::unique(begin(tags), end(tags)), end(tags));
+ testCaseInfo.lcaseTags.clear();
+
+ for( auto const& tag : tags ) {
+ std::string lcaseTag = toLower( tag );
+ testCaseInfo.properties = static_cast<TestCaseInfo::SpecialProperties>( testCaseInfo.properties | parseSpecialTag( lcaseTag ) );
+ testCaseInfo.lcaseTags.push_back( lcaseTag );
+ }
+ testCaseInfo.tags = std::move(tags);
+ }
+
+ TestCaseInfo::TestCaseInfo( std::string const& _name,
+ std::string const& _className,
+ std::string const& _description,
+ std::vector<std::string> const& _tags,
+ SourceLineInfo const& _lineInfo )
+ : name( _name ),
+ className( _className ),
+ description( _description ),
+ lineInfo( _lineInfo ),
+ properties( None )
+ {
+ setTags( *this, _tags );
+ }
+
+ bool TestCaseInfo::isHidden() const {
+ return ( properties & IsHidden ) != 0;
+ }
+ bool TestCaseInfo::throws() const {
+ return ( properties & Throws ) != 0;
+ }
+ bool TestCaseInfo::okToFail() const {
+ return ( properties & (ShouldFail | MayFail ) ) != 0;
+ }
+ bool TestCaseInfo::expectedToFail() const {
+ return ( properties & (ShouldFail ) ) != 0;
+ }
+
+ std::string TestCaseInfo::tagsAsString() const {
+ std::string ret;
+ // '[' and ']' per tag
+ std::size_t full_size = 2 * tags.size();
+ for (const auto& tag : tags) {
+ full_size += tag.size();
+ }
+ ret.reserve(full_size);
+ for (const auto& tag : tags) {
+ ret.push_back('[');
+ ret.append(tag);
+ ret.push_back(']');
+ }
+
+ return ret;
+ }
+
+ TestCase::TestCase( ITestInvoker* testCase, TestCaseInfo&& info ) : TestCaseInfo( std::move(info) ), test( testCase ) {}
+
+ TestCase TestCase::withName( std::string const& _newName ) const {
+ TestCase other( *this );
+ other.name = _newName;
+ return other;
+ }
+
+ void TestCase::invoke() const {
+ test->invoke();
+ }
+
+ bool TestCase::operator == ( TestCase const& other ) const {
+ return test.get() == other.test.get() &&
+ name == other.name &&
+ className == other.className;
+ }
+
+ bool TestCase::operator < ( TestCase const& other ) const {
+ return name < other.name;
+ }
+
+ TestCaseInfo const& TestCase::getTestCaseInfo() const
+ {
+ return *this;
+ }
+
+} // end namespace Catch
+// end catch_test_case_info.cpp
+// start catch_test_case_registry_impl.cpp
+
+#include <algorithm>
+#include <sstream>
+
+namespace Catch {
+
+ namespace {
+ struct TestHasher {
+ explicit TestHasher(Catch::SimplePcg32& rng) {
+ basis = rng();
+ basis <<= 32;
+ basis |= rng();
+ }
+
+ uint64_t basis;
+
+ uint64_t operator()(TestCase const& t) const {
+ // Modified FNV-1a hash
+ static constexpr uint64_t prime = 1099511628211;
+ uint64_t hash = basis;
+ for (const char c : t.name) {
+ hash ^= c;
+ hash *= prime;
+ }
+ return hash;
+ }
+ };
+ } // end unnamed namespace
+
+ std::vector<TestCase> sortTests( IConfig const& config, std::vector<TestCase> const& unsortedTestCases ) {
+ switch( config.runOrder() ) {
+ case RunTests::InDeclarationOrder:
+ // already in declaration order
+ break;
+
+ case RunTests::InLexicographicalOrder: {
+ std::vector<TestCase> sorted = unsortedTestCases;
+ std::sort( sorted.begin(), sorted.end() );
+ return sorted;
+ }
+
+ case RunTests::InRandomOrder: {
+ seedRng( config );
+ TestHasher h( rng() );
+
+ using hashedTest = std::pair<uint64_t, TestCase const*>;
+ std::vector<hashedTest> indexed_tests;
+ indexed_tests.reserve( unsortedTestCases.size() );
+
+ for (auto const& testCase : unsortedTestCases) {
+ indexed_tests.emplace_back(h(testCase), &testCase);
+ }
+
+ std::sort(indexed_tests.begin(), indexed_tests.end(),
+ [](hashedTest const& lhs, hashedTest const& rhs) {
+ if (lhs.first == rhs.first) {
+ return lhs.second->name < rhs.second->name;
+ }
+ return lhs.first < rhs.first;
+ });
+
+ std::vector<TestCase> sorted;
+ sorted.reserve( indexed_tests.size() );
+
+ for (auto const& hashed : indexed_tests) {
+ sorted.emplace_back(*hashed.second);
+ }
+
+ return sorted;
+ }
+ }
+ return unsortedTestCases;
+ }
+
+ bool isThrowSafe( TestCase const& testCase, IConfig const& config ) {
+ return !testCase.throws() || config.allowThrows();
+ }
+
+ bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config ) {
+ return testSpec.matches( testCase ) && isThrowSafe( testCase, config );
+ }
+
+ void enforceNoDuplicateTestCases( std::vector<TestCase> const& functions ) {
+ std::set<TestCase> seenFunctions;
+ for( auto const& function : functions ) {
+ auto prev = seenFunctions.insert( function );
+ CATCH_ENFORCE( prev.second,
+ "error: TEST_CASE( \"" << function.name << "\" ) already defined.\n"
+ << "\tFirst seen at " << prev.first->getTestCaseInfo().lineInfo << "\n"
+ << "\tRedefined at " << function.getTestCaseInfo().lineInfo );
+ }
+ }
+
+ std::vector<TestCase> filterTests( std::vector<TestCase> const& testCases, TestSpec const& testSpec, IConfig const& config ) {
+ std::vector<TestCase> filtered;
+ filtered.reserve( testCases.size() );
+ for (auto const& testCase : testCases) {
+ if ((!testSpec.hasFilters() && !testCase.isHidden()) ||
+ (testSpec.hasFilters() && matchTest(testCase, testSpec, config))) {
+ filtered.push_back(testCase);
+ }
+ }
+ return filtered;
+ }
+ std::vector<TestCase> const& getAllTestCasesSorted( IConfig const& config ) {
+ return getRegistryHub().getTestCaseRegistry().getAllTestsSorted( config );
+ }
+
+ void TestRegistry::registerTest( TestCase const& testCase ) {
+ std::string name = testCase.getTestCaseInfo().name;
+ if( name.empty() ) {
+ ReusableStringStream rss;
+ rss << "Anonymous test case " << ++m_unnamedCount;
+ return registerTest( testCase.withName( rss.str() ) );
+ }
+ m_functions.push_back( testCase );
+ }
+
+ std::vector<TestCase> const& TestRegistry::getAllTests() const {
+ return m_functions;
+ }
+ std::vector<TestCase> const& TestRegistry::getAllTestsSorted( IConfig const& config ) const {
+ if( m_sortedFunctions.empty() )
+ enforceNoDuplicateTestCases( m_functions );
+
+ if( m_currentSortOrder != config.runOrder() || m_sortedFunctions.empty() ) {
+ m_sortedFunctions = sortTests( config, m_functions );
+ m_currentSortOrder = config.runOrder();
+ }
+ return m_sortedFunctions;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ TestInvokerAsFunction::TestInvokerAsFunction( void(*testAsFunction)() ) noexcept : m_testAsFunction( testAsFunction ) {}
+
+ void TestInvokerAsFunction::invoke() const {
+ m_testAsFunction();
+ }
+
+ std::string extractClassName( StringRef const& classOrQualifiedMethodName ) {
+ std::string className(classOrQualifiedMethodName);
+ if( startsWith( className, '&' ) )
+ {
+ std::size_t lastColons = className.rfind( "::" );
+ std::size_t penultimateColons = className.rfind( "::", lastColons-1 );
+ if( penultimateColons == std::string::npos )
+ penultimateColons = 1;
+ className = className.substr( penultimateColons, lastColons-penultimateColons );
+ }
+ return className;
+ }
+
+} // end namespace Catch
+// end catch_test_case_registry_impl.cpp
+// start catch_test_case_tracker.cpp
+
+#include <algorithm>
+#include <cassert>
+#include <stdexcept>
+#include <memory>
+#include <sstream>
+
+#if defined(__clang__)
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wexit-time-destructors"
+#endif
+
+namespace Catch {
+namespace TestCaseTracking {
+
+ NameAndLocation::NameAndLocation( std::string const& _name, SourceLineInfo const& _location )
+ : name( _name ),
+ location( _location )
+ {}
+
+ ITracker::~ITracker() = default;
+
+ ITracker& TrackerContext::startRun() {
+ m_rootTracker = std::make_shared<SectionTracker>( NameAndLocation( "{root}", CATCH_INTERNAL_LINEINFO ), *this, nullptr );
+ m_currentTracker = nullptr;
+ m_runState = Executing;
+ return *m_rootTracker;
+ }
+
+ void TrackerContext::endRun() {
+ m_rootTracker.reset();
+ m_currentTracker = nullptr;
+ m_runState = NotStarted;
+ }
+
+ void TrackerContext::startCycle() {
+ m_currentTracker = m_rootTracker.get();
+ m_runState = Executing;
+ }
+ void TrackerContext::completeCycle() {
+ m_runState = CompletedCycle;
+ }
+
+ bool TrackerContext::completedCycle() const {
+ return m_runState == CompletedCycle;
+ }
+ ITracker& TrackerContext::currentTracker() {
+ return *m_currentTracker;
+ }
+ void TrackerContext::setCurrentTracker( ITracker* tracker ) {
+ m_currentTracker = tracker;
+ }
+
+ TrackerBase::TrackerBase( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent )
+ : m_nameAndLocation( nameAndLocation ),
+ m_ctx( ctx ),
+ m_parent( parent )
+ {}
+
+ NameAndLocation const& TrackerBase::nameAndLocation() const {
+ return m_nameAndLocation;
+ }
+ bool TrackerBase::isComplete() const {
+ return m_runState == CompletedSuccessfully || m_runState == Failed;
+ }
+ bool TrackerBase::isSuccessfullyCompleted() const {
+ return m_runState == CompletedSuccessfully;
+ }
+ bool TrackerBase::isOpen() const {
+ return m_runState != NotStarted && !isComplete();
+ }
+ bool TrackerBase::hasChildren() const {
+ return !m_children.empty();
+ }
+
+ void TrackerBase::addChild( ITrackerPtr const& child ) {
+ m_children.push_back( child );
+ }
+
+ ITrackerPtr TrackerBase::findChild( NameAndLocation const& nameAndLocation ) {
+ auto it = std::find_if( m_children.begin(), m_children.end(),
+ [&nameAndLocation]( ITrackerPtr const& tracker ){
+ return
+ tracker->nameAndLocation().location == nameAndLocation.location &&
+ tracker->nameAndLocation().name == nameAndLocation.name;
+ } );
+ return( it != m_children.end() )
+ ? *it
+ : nullptr;
+ }
+ ITracker& TrackerBase::parent() {
+ assert( m_parent ); // Should always be non-null except for root
+ return *m_parent;
+ }
+
+ void TrackerBase::openChild() {
+ if( m_runState != ExecutingChildren ) {
+ m_runState = ExecutingChildren;
+ if( m_parent )
+ m_parent->openChild();
+ }
+ }
+
+ bool TrackerBase::isSectionTracker() const { return false; }
+ bool TrackerBase::isGeneratorTracker() const { return false; }
+
+ void TrackerBase::open() {
+ m_runState = Executing;
+ moveToThis();
+ if( m_parent )
+ m_parent->openChild();
+ }
+
+ void TrackerBase::close() {
+
+ // Close any still open children (e.g. generators)
+ while( &m_ctx.currentTracker() != this )
+ m_ctx.currentTracker().close();
+
+ switch( m_runState ) {
+ case NeedsAnotherRun:
+ break;
+
+ case Executing:
+ m_runState = CompletedSuccessfully;
+ break;
+ case ExecutingChildren:
+ if( std::all_of(m_children.begin(), m_children.end(), [](ITrackerPtr const& t){ return t->isComplete(); }) )
+ m_runState = CompletedSuccessfully;
+ break;
+
+ case NotStarted:
+ case CompletedSuccessfully:
+ case Failed:
+ CATCH_INTERNAL_ERROR( "Illogical state: " << m_runState );
+
+ default:
+ CATCH_INTERNAL_ERROR( "Unknown state: " << m_runState );
+ }
+ moveToParent();
+ m_ctx.completeCycle();
+ }
+ void TrackerBase::fail() {
+ m_runState = Failed;
+ if( m_parent )
+ m_parent->markAsNeedingAnotherRun();
+ moveToParent();
+ m_ctx.completeCycle();
+ }
+ void TrackerBase::markAsNeedingAnotherRun() {
+ m_runState = NeedsAnotherRun;
+ }
+
+ void TrackerBase::moveToParent() {
+ assert( m_parent );
+ m_ctx.setCurrentTracker( m_parent );
+ }
+ void TrackerBase::moveToThis() {
+ m_ctx.setCurrentTracker( this );
+ }
+
+ SectionTracker::SectionTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent )
+ : TrackerBase( nameAndLocation, ctx, parent ),
+ m_trimmed_name(trim(nameAndLocation.name))
+ {
+ if( parent ) {
+ while( !parent->isSectionTracker() )
+ parent = &parent->parent();
+
+ SectionTracker& parentSection = static_cast<SectionTracker&>( *parent );
+ addNextFilters( parentSection.m_filters );
+ }
+ }
+
+ bool SectionTracker::isComplete() const {
+ bool complete = true;
+
+ if ((m_filters.empty() || m_filters[0] == "")
+ || std::find(m_filters.begin(), m_filters.end(), m_trimmed_name) != m_filters.end()) {
+ complete = TrackerBase::isComplete();
+ }
+ return complete;
+ }
+
+ bool SectionTracker::isSectionTracker() const { return true; }
+
+ SectionTracker& SectionTracker::acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation ) {
+ std::shared_ptr<SectionTracker> section;
+
+ ITracker& currentTracker = ctx.currentTracker();
+ if( ITrackerPtr childTracker = currentTracker.findChild( nameAndLocation ) ) {
+ assert( childTracker );
+ assert( childTracker->isSectionTracker() );
+ section = std::static_pointer_cast<SectionTracker>( childTracker );
+ }
+ else {
+ section = std::make_shared<SectionTracker>( nameAndLocation, ctx, &currentTracker );
+ currentTracker.addChild( section );
+ }
+ if( !ctx.completedCycle() )
+ section->tryOpen();
+ return *section;
+ }
+
+ void SectionTracker::tryOpen() {
+ if( !isComplete() )
+ open();
+ }
+
+ void SectionTracker::addInitialFilters( std::vector<std::string> const& filters ) {
+ if( !filters.empty() ) {
+ m_filters.reserve( m_filters.size() + filters.size() + 2 );
+ m_filters.emplace_back(""); // Root - should never be consulted
+ m_filters.emplace_back(""); // Test Case - not a section filter
+ m_filters.insert( m_filters.end(), filters.begin(), filters.end() );
+ }
+ }
+ void SectionTracker::addNextFilters( std::vector<std::string> const& filters ) {
+ if( filters.size() > 1 )
+ m_filters.insert( m_filters.end(), filters.begin()+1, filters.end() );
+ }
+
+} // namespace TestCaseTracking
+
+using TestCaseTracking::ITracker;
+using TestCaseTracking::TrackerContext;
+using TestCaseTracking::SectionTracker;
+
+} // namespace Catch
+
+#if defined(__clang__)
+# pragma clang diagnostic pop
+#endif
+// end catch_test_case_tracker.cpp
+// start catch_test_registry.cpp
+
+namespace Catch {
+
+ auto makeTestInvoker( void(*testAsFunction)() ) noexcept -> ITestInvoker* {
+ return new(std::nothrow) TestInvokerAsFunction( testAsFunction );
+ }
+
+ NameAndTags::NameAndTags( StringRef const& name_ , StringRef const& tags_ ) noexcept : name( name_ ), tags( tags_ ) {}
+
+ AutoReg::AutoReg( ITestInvoker* invoker, SourceLineInfo const& lineInfo, StringRef const& classOrMethod, NameAndTags const& nameAndTags ) noexcept {
+ CATCH_TRY {
+ getMutableRegistryHub()
+ .registerTest(
+ makeTestCase(
+ invoker,
+ extractClassName( classOrMethod ),
+ nameAndTags,
+ lineInfo));
+ } CATCH_CATCH_ALL {
+ // Do not throw when constructing global objects, instead register the exception to be processed later
+ getMutableRegistryHub().registerStartupException();
+ }
+ }
+
+ AutoReg::~AutoReg() = default;
+}
+// end catch_test_registry.cpp
+// start catch_test_spec.cpp
+
+#include <algorithm>
+#include <string>
+#include <vector>
+#include <memory>
+
+namespace Catch {
+
+ TestSpec::Pattern::Pattern( std::string const& name )
+ : m_name( name )
+ {}
+
+ TestSpec::Pattern::~Pattern() = default;
+
+ std::string const& TestSpec::Pattern::name() const {
+ return m_name;
+ }
+
+ TestSpec::NamePattern::NamePattern( std::string const& name, std::string const& filterString )
+ : Pattern( filterString )
+ , m_wildcardPattern( toLower( name ), CaseSensitive::No )
+ {}
+
+ bool TestSpec::NamePattern::matches( TestCaseInfo const& testCase ) const {
+ return m_wildcardPattern.matches( testCase.name );
+ }
+
+ TestSpec::TagPattern::TagPattern( std::string const& tag, std::string const& filterString )
+ : Pattern( filterString )
+ , m_tag( toLower( tag ) )
+ {}
+
+ bool TestSpec::TagPattern::matches( TestCaseInfo const& testCase ) const {
+ return std::find(begin(testCase.lcaseTags),
+ end(testCase.lcaseTags),
+ m_tag) != end(testCase.lcaseTags);
+ }
+
+ TestSpec::ExcludedPattern::ExcludedPattern( PatternPtr const& underlyingPattern )
+ : Pattern( underlyingPattern->name() )
+ , m_underlyingPattern( underlyingPattern )
+ {}
+
+ bool TestSpec::ExcludedPattern::matches( TestCaseInfo const& testCase ) const {
+ return !m_underlyingPattern->matches( testCase );
+ }
+
+ bool TestSpec::Filter::matches( TestCaseInfo const& testCase ) const {
+ return std::all_of( m_patterns.begin(), m_patterns.end(), [&]( PatternPtr const& p ){ return p->matches( testCase ); } );
+ }
+
+ std::string TestSpec::Filter::name() const {
+ std::string name;
+ for( auto const& p : m_patterns )
+ name += p->name();
+ return name;
+ }
+
+ bool TestSpec::hasFilters() const {
+ return !m_filters.empty();
+ }
+
+ bool TestSpec::matches( TestCaseInfo const& testCase ) const {
+ return std::any_of( m_filters.begin(), m_filters.end(), [&]( Filter const& f ){ return f.matches( testCase ); } );
+ }
+
+ TestSpec::Matches TestSpec::matchesByFilter( std::vector<TestCase> const& testCases, IConfig const& config ) const
+ {
+ Matches matches( m_filters.size() );
+ std::transform( m_filters.begin(), m_filters.end(), matches.begin(), [&]( Filter const& filter ){
+ std::vector<TestCase const*> currentMatches;
+ for( auto const& test : testCases )
+ if( isThrowSafe( test, config ) && filter.matches( test ) )
+ currentMatches.emplace_back( &test );
+ return FilterMatch{ filter.name(), currentMatches };
+ } );
+ return matches;
+ }
+
+ const TestSpec::vectorStrings& TestSpec::getInvalidArgs() const{
+ return (m_invalidArgs);
+ }
+
+}
+// end catch_test_spec.cpp
+// start catch_test_spec_parser.cpp
+
+namespace Catch {
+
+ TestSpecParser::TestSpecParser( ITagAliasRegistry const& tagAliases ) : m_tagAliases( &tagAliases ) {}
+
+ TestSpecParser& TestSpecParser::parse( std::string const& arg ) {
+ m_mode = None;
+ m_exclusion = false;
+ m_arg = m_tagAliases->expandAliases( arg );
+ m_escapeChars.clear();
+ m_substring.reserve(m_arg.size());
+ m_patternName.reserve(m_arg.size());
+ m_realPatternPos = 0;
+
+ for( m_pos = 0; m_pos < m_arg.size(); ++m_pos )
+ //if visitChar fails
+ if( !visitChar( m_arg[m_pos] ) ){
+ m_testSpec.m_invalidArgs.push_back(arg);
+ break;
+ }
+ endMode();
+ return *this;
+ }
+ TestSpec TestSpecParser::testSpec() {
+ addFilter();
+ return m_testSpec;
+ }
+ bool TestSpecParser::visitChar( char c ) {
+ if( (m_mode != EscapedName) && (c == '\\') ) {
+ escape();
+ addCharToPattern(c);
+ return true;
+ }else if((m_mode != EscapedName) && (c == ',') ) {
+ return separate();
+ }
+
+ switch( m_mode ) {
+ case None:
+ if( processNoneChar( c ) )
+ return true;
+ break;
+ case Name:
+ processNameChar( c );
+ break;
+ case EscapedName:
+ endMode();
+ addCharToPattern(c);
+ return true;
+ default:
+ case Tag:
+ case QuotedName:
+ if( processOtherChar( c ) )
+ return true;
+ break;
+ }
+
+ m_substring += c;
+ if( !isControlChar( c ) ) {
+ m_patternName += c;
+ m_realPatternPos++;
+ }
+ return true;
+ }
+ // Two of the processing methods return true to signal the caller to return
+ // without adding the given character to the current pattern strings
+ bool TestSpecParser::processNoneChar( char c ) {
+ switch( c ) {
+ case ' ':
+ return true;
+ case '~':
+ m_exclusion = true;
+ return false;
+ case '[':
+ startNewMode( Tag );
+ return false;
+ case '"':
+ startNewMode( QuotedName );
+ return false;
+ default:
+ startNewMode( Name );
+ return false;
+ }
+ }
+ void TestSpecParser::processNameChar( char c ) {
+ if( c == '[' ) {
+ if( m_substring == "exclude:" )
+ m_exclusion = true;
+ else
+ endMode();
+ startNewMode( Tag );
+ }
+ }
+ bool TestSpecParser::processOtherChar( char c ) {
+ if( !isControlChar( c ) )
+ return false;
+ m_substring += c;
+ endMode();
+ return true;
+ }
+ void TestSpecParser::startNewMode( Mode mode ) {
+ m_mode = mode;
+ }
+ void TestSpecParser::endMode() {
+ switch( m_mode ) {
+ case Name:
+ case QuotedName:
+ return addNamePattern();
+ case Tag:
+ return addTagPattern();
+ case EscapedName:
+ revertBackToLastMode();
+ return;
+ case None:
+ default:
+ return startNewMode( None );
+ }
+ }
+ void TestSpecParser::escape() {
+ saveLastMode();
+ m_mode = EscapedName;
+ m_escapeChars.push_back(m_realPatternPos);
+ }
+ bool TestSpecParser::isControlChar( char c ) const {
+ switch( m_mode ) {
+ default:
+ return false;
+ case None:
+ return c == '~';
+ case Name:
+ return c == '[';
+ case EscapedName:
+ return true;
+ case QuotedName:
+ return c == '"';
+ case Tag:
+ return c == '[' || c == ']';
+ }
+ }
+
+ void TestSpecParser::addFilter() {
+ if( !m_currentFilter.m_patterns.empty() ) {
+ m_testSpec.m_filters.push_back( m_currentFilter );
+ m_currentFilter = TestSpec::Filter();
+ }
+ }
+
+ void TestSpecParser::saveLastMode() {
+ lastMode = m_mode;
+ }
+
+ void TestSpecParser::revertBackToLastMode() {
+ m_mode = lastMode;
+ }
+
+ bool TestSpecParser::separate() {
+ if( (m_mode==QuotedName) || (m_mode==Tag) ){
+ //invalid argument, signal failure to previous scope.
+ m_mode = None;
+ m_pos = m_arg.size();
+ m_substring.clear();
+ m_patternName.clear();
+ m_realPatternPos = 0;
+ return false;
+ }
+ endMode();
+ addFilter();
+ return true; //success
+ }
+
+ std::string TestSpecParser::preprocessPattern() {
+ std::string token = m_patternName;
+ for (std::size_t i = 0; i < m_escapeChars.size(); ++i)
+ token = token.substr(0, m_escapeChars[i] - i) + token.substr(m_escapeChars[i] - i + 1);
+ m_escapeChars.clear();
+ if (startsWith(token, "exclude:")) {
+ m_exclusion = true;
+ token = token.substr(8);
+ }
+
+ m_patternName.clear();
+ m_realPatternPos = 0;
+
+ return token;
+ }
+
+ void TestSpecParser::addNamePattern() {
+ auto token = preprocessPattern();
+
+ if (!token.empty()) {
+ TestSpec::PatternPtr pattern = std::make_shared<TestSpec::NamePattern>(token, m_substring);
+ if (m_exclusion)
+ pattern = std::make_shared<TestSpec::ExcludedPattern>(pattern);
+ m_currentFilter.m_patterns.push_back(pattern);
+ }
+ m_substring.clear();
+ m_exclusion = false;
+ m_mode = None;
+ }
+
+ void TestSpecParser::addTagPattern() {
+ auto token = preprocessPattern();
+
+ if (!token.empty()) {
+ // If the tag pattern is the "hide and tag" shorthand (e.g. [.foo])
+ // we have to create a separate hide tag and shorten the real one
+ if (token.size() > 1 && token[0] == '.') {
+ token.erase(token.begin());
+ TestSpec::PatternPtr pattern = std::make_shared<TestSpec::TagPattern>(".", m_substring);
+ if (m_exclusion) {
+ pattern = std::make_shared<TestSpec::ExcludedPattern>(pattern);
+ }
+ m_currentFilter.m_patterns.push_back(pattern);
+ }
+
+ TestSpec::PatternPtr pattern = std::make_shared<TestSpec::TagPattern>(token, m_substring);
+
+ if (m_exclusion) {
+ pattern = std::make_shared<TestSpec::ExcludedPattern>(pattern);
+ }
+ m_currentFilter.m_patterns.push_back(pattern);
+ }
+ m_substring.clear();
+ m_exclusion = false;
+ m_mode = None;
+ }
+
+ TestSpec parseTestSpec( std::string const& arg ) {
+ return TestSpecParser( ITagAliasRegistry::get() ).parse( arg ).testSpec();
+ }
+
+} // namespace Catch
+// end catch_test_spec_parser.cpp
+// start catch_timer.cpp
+
+#include <chrono>
+
+static const uint64_t nanosecondsInSecond = 1000000000;
+
+namespace Catch {
+
+ auto getCurrentNanosecondsSinceEpoch() -> uint64_t {
+ return std::chrono::duration_cast<std::chrono::nanoseconds>( std::chrono::high_resolution_clock::now().time_since_epoch() ).count();
+ }
+
+ namespace {
+ auto estimateClockResolution() -> uint64_t {
+ uint64_t sum = 0;
+ static const uint64_t iterations = 1000000;
+
+ auto startTime = getCurrentNanosecondsSinceEpoch();
+
+ for( std::size_t i = 0; i < iterations; ++i ) {
+
+ uint64_t ticks;
+ uint64_t baseTicks = getCurrentNanosecondsSinceEpoch();
+ do {
+ ticks = getCurrentNanosecondsSinceEpoch();
+ } while( ticks == baseTicks );
+
+ auto delta = ticks - baseTicks;
+ sum += delta;
+
+ // If we have been calibrating for over 3 seconds -- the clock
+ // is terrible and we should move on.
+ // TBD: How to signal that the measured resolution is probably wrong?
+ if (ticks > startTime + 3 * nanosecondsInSecond) {
+ return sum / ( i + 1u );
+ }
+ }
+
+ // We're just taking the mean, here. To do better we could take the std. dev and exclude outliers
+ // - and potentially do more iterations if there's a high variance.
+ return sum/iterations;
+ }
+ }
+ auto getEstimatedClockResolution() -> uint64_t {
+ static auto s_resolution = estimateClockResolution();
+ return s_resolution;
+ }
+
+ void Timer::start() {
+ m_nanoseconds = getCurrentNanosecondsSinceEpoch();
+ }
+ auto Timer::getElapsedNanoseconds() const -> uint64_t {
+ return getCurrentNanosecondsSinceEpoch() - m_nanoseconds;
+ }
+ auto Timer::getElapsedMicroseconds() const -> uint64_t {
+ return getElapsedNanoseconds()/1000;
+ }
+ auto Timer::getElapsedMilliseconds() const -> unsigned int {
+ return static_cast<unsigned int>(getElapsedMicroseconds()/1000);
+ }
+ auto Timer::getElapsedSeconds() const -> double {
+ return getElapsedMicroseconds()/1000000.0;
+ }
+
+} // namespace Catch
+// end catch_timer.cpp
+// start catch_tostring.cpp
+
+#if defined(__clang__)
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wexit-time-destructors"
+# pragma clang diagnostic ignored "-Wglobal-constructors"
+#endif
+
+// Enable specific decls locally
+#if !defined(CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER)
+#define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
+#endif
+
+#include <cmath>
+#include <iomanip>
+
+namespace Catch {
+
+namespace Detail {
+
+ const std::string unprintableString = "{?}";
+
+ namespace {
+ const int hexThreshold = 255;
+
+ struct Endianness {
+ enum Arch { Big, Little };
+
+ static Arch which() {
+ int one = 1;
+ // If the lowest byte we read is non-zero, we can assume
+ // that little endian format is used.
+ auto value = *reinterpret_cast<char*>(&one);
+ return value ? Little : Big;
+ }
+ };
+ }
+
+ std::string rawMemoryToString( const void *object, std::size_t size ) {
+ // Reverse order for little endian architectures
+ int i = 0, end = static_cast<int>( size ), inc = 1;
+ if( Endianness::which() == Endianness::Little ) {
+ i = end-1;
+ end = inc = -1;
+ }
+
+ unsigned char const *bytes = static_cast<unsigned char const *>(object);
+ ReusableStringStream rss;
+ rss << "0x" << std::setfill('0') << std::hex;
+ for( ; i != end; i += inc )
+ rss << std::setw(2) << static_cast<unsigned>(bytes[i]);
+ return rss.str();
+ }
+}
+
+template<typename T>
+std::string fpToString( T value, int precision ) {
+ if (Catch::isnan(value)) {
+ return "nan";
+ }
+
+ ReusableStringStream rss;
+ rss << std::setprecision( precision )
+ << std::fixed
+ << value;
+ std::string d = rss.str();
+ std::size_t i = d.find_last_not_of( '0' );
+ if( i != std::string::npos && i != d.size()-1 ) {
+ if( d[i] == '.' )
+ i++;
+ d = d.substr( 0, i+1 );
+ }
+ return d;
+}
+
+//// ======================================================= ////
+//
+// Out-of-line defs for full specialization of StringMaker
+//
+//// ======================================================= ////
+
+std::string StringMaker<std::string>::convert(const std::string& str) {
+ if (!getCurrentContext().getConfig()->showInvisibles()) {
+ return '"' + str + '"';
+ }
+
+ std::string s("\"");
+ for (char c : str) {
+ switch (c) {
+ case '\n':
+ s.append("\\n");
+ break;
+ case '\t':
+ s.append("\\t");
+ break;
+ default:
+ s.push_back(c);
+ break;
+ }
+ }
+ s.append("\"");
+ return s;
+}
+
+#ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+std::string StringMaker<std::string_view>::convert(std::string_view str) {
+ return ::Catch::Detail::stringify(std::string{ str });
+}
+#endif
+
+std::string StringMaker<char const*>::convert(char const* str) {
+ if (str) {
+ return ::Catch::Detail::stringify(std::string{ str });
+ } else {
+ return{ "{null string}" };
+ }
+}
+std::string StringMaker<char*>::convert(char* str) {
+ if (str) {
+ return ::Catch::Detail::stringify(std::string{ str });
+ } else {
+ return{ "{null string}" };
+ }
+}
+
+#ifdef CATCH_CONFIG_WCHAR
+std::string StringMaker<std::wstring>::convert(const std::wstring& wstr) {
+ std::string s;
+ s.reserve(wstr.size());
+ for (auto c : wstr) {
+ s += (c <= 0xff) ? static_cast<char>(c) : '?';
+ }
+ return ::Catch::Detail::stringify(s);
+}
+
+# ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+std::string StringMaker<std::wstring_view>::convert(std::wstring_view str) {
+ return StringMaker<std::wstring>::convert(std::wstring(str));
+}
+# endif
+
+std::string StringMaker<wchar_t const*>::convert(wchar_t const * str) {
+ if (str) {
+ return ::Catch::Detail::stringify(std::wstring{ str });
+ } else {
+ return{ "{null string}" };
+ }
+}
+std::string StringMaker<wchar_t *>::convert(wchar_t * str) {
+ if (str) {
+ return ::Catch::Detail::stringify(std::wstring{ str });
+ } else {
+ return{ "{null string}" };
+ }
+}
+#endif
+
+#if defined(CATCH_CONFIG_CPP17_BYTE)
+#include <cstddef>
+std::string StringMaker<std::byte>::convert(std::byte value) {
+ return ::Catch::Detail::stringify(std::to_integer<unsigned long long>(value));
+}
+#endif // defined(CATCH_CONFIG_CPP17_BYTE)
+
+std::string StringMaker<int>::convert(int value) {
+ return ::Catch::Detail::stringify(static_cast<long long>(value));
+}
+std::string StringMaker<long>::convert(long value) {
+ return ::Catch::Detail::stringify(static_cast<long long>(value));
+}
+std::string StringMaker<long long>::convert(long long value) {
+ ReusableStringStream rss;
+ rss << value;
+ if (value > Detail::hexThreshold) {
+ rss << " (0x" << std::hex << value << ')';
+ }
+ return rss.str();
+}
+
+std::string StringMaker<unsigned int>::convert(unsigned int value) {
+ return ::Catch::Detail::stringify(static_cast<unsigned long long>(value));
+}
+std::string StringMaker<unsigned long>::convert(unsigned long value) {
+ return ::Catch::Detail::stringify(static_cast<unsigned long long>(value));
+}
+std::string StringMaker<unsigned long long>::convert(unsigned long long value) {
+ ReusableStringStream rss;
+ rss << value;
+ if (value > Detail::hexThreshold) {
+ rss << " (0x" << std::hex << value << ')';
+ }
+ return rss.str();
+}
+
+std::string StringMaker<bool>::convert(bool b) {
+ return b ? "true" : "false";
+}
+
+std::string StringMaker<signed char>::convert(signed char value) {
+ if (value == '\r') {
+ return "'\\r'";
+ } else if (value == '\f') {
+ return "'\\f'";
+ } else if (value == '\n') {
+ return "'\\n'";
+ } else if (value == '\t') {
+ return "'\\t'";
+ } else if ('\0' <= value && value < ' ') {
+ return ::Catch::Detail::stringify(static_cast<unsigned int>(value));
+ } else {
+ char chstr[] = "' '";
+ chstr[1] = value;
+ return chstr;
+ }
+}
+std::string StringMaker<char>::convert(char c) {
+ return ::Catch::Detail::stringify(static_cast<signed char>(c));
+}
+std::string StringMaker<unsigned char>::convert(unsigned char c) {
+ return ::Catch::Detail::stringify(static_cast<char>(c));
+}
+
+std::string StringMaker<std::nullptr_t>::convert(std::nullptr_t) {
+ return "nullptr";
+}
+
+int StringMaker<float>::precision = 5;
+
+std::string StringMaker<float>::convert(float value) {
+ return fpToString(value, precision) + 'f';
+}
+
+int StringMaker<double>::precision = 10;
+
+std::string StringMaker<double>::convert(double value) {
+ return fpToString(value, precision);
+}
+
+std::string ratio_string<std::atto>::symbol() { return "a"; }
+std::string ratio_string<std::femto>::symbol() { return "f"; }
+std::string ratio_string<std::pico>::symbol() { return "p"; }
+std::string ratio_string<std::nano>::symbol() { return "n"; }
+std::string ratio_string<std::micro>::symbol() { return "u"; }
+std::string ratio_string<std::milli>::symbol() { return "m"; }
+
+} // end namespace Catch
+
+#if defined(__clang__)
+# pragma clang diagnostic pop
+#endif
+
+// end catch_tostring.cpp
+// start catch_totals.cpp
+
+namespace Catch {
+
+ Counts Counts::operator - ( Counts const& other ) const {
+ Counts diff;
+ diff.passed = passed - other.passed;
+ diff.failed = failed - other.failed;
+ diff.failedButOk = failedButOk - other.failedButOk;
+ return diff;
+ }
+
+ Counts& Counts::operator += ( Counts const& other ) {
+ passed += other.passed;
+ failed += other.failed;
+ failedButOk += other.failedButOk;
+ return *this;
+ }
+
+ std::size_t Counts::total() const {
+ return passed + failed + failedButOk;
+ }
+ bool Counts::allPassed() const {
+ return failed == 0 && failedButOk == 0;
+ }
+ bool Counts::allOk() const {
+ return failed == 0;
+ }
+
+ Totals Totals::operator - ( Totals const& other ) const {
+ Totals diff;
+ diff.assertions = assertions - other.assertions;
+ diff.testCases = testCases - other.testCases;
+ return diff;
+ }
+
+ Totals& Totals::operator += ( Totals const& other ) {
+ assertions += other.assertions;
+ testCases += other.testCases;
+ return *this;
+ }
+
+ Totals Totals::delta( Totals const& prevTotals ) const {
+ Totals diff = *this - prevTotals;
+ if( diff.assertions.failed > 0 )
+ ++diff.testCases.failed;
+ else if( diff.assertions.failedButOk > 0 )
+ ++diff.testCases.failedButOk;
+ else
+ ++diff.testCases.passed;
+ return diff;
+ }
+
+}
+// end catch_totals.cpp
+// start catch_uncaught_exceptions.cpp
+
+#include <exception>
+
+namespace Catch {
+ bool uncaught_exceptions() {
+#if defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS)
+ return std::uncaught_exceptions() > 0;
+#else
+ return std::uncaught_exception();
+#endif
+ }
+} // end namespace Catch
+// end catch_uncaught_exceptions.cpp
+// start catch_version.cpp
+
+#include <ostream>
+
+namespace Catch {
+
+ Version::Version
+ ( unsigned int _majorVersion,
+ unsigned int _minorVersion,
+ unsigned int _patchNumber,
+ char const * const _branchName,
+ unsigned int _buildNumber )
+ : majorVersion( _majorVersion ),
+ minorVersion( _minorVersion ),
+ patchNumber( _patchNumber ),
+ branchName( _branchName ),
+ buildNumber( _buildNumber )
+ {}
+
+ std::ostream& operator << ( std::ostream& os, Version const& version ) {
+ os << version.majorVersion << '.'
+ << version.minorVersion << '.'
+ << version.patchNumber;
+ // branchName is never null -> 0th char is \0 if it is empty
+ if (version.branchName[0]) {
+ os << '-' << version.branchName
+ << '.' << version.buildNumber;
+ }
+ return os;
+ }
+
+ Version const& libraryVersion() {
+ static Version version( 2, 12, 1, "", 0 );
+ return version;
+ }
+
+}
+// end catch_version.cpp
+// start catch_wildcard_pattern.cpp
+
+namespace Catch {
+
+ WildcardPattern::WildcardPattern( std::string const& pattern,
+ CaseSensitive::Choice caseSensitivity )
+ : m_caseSensitivity( caseSensitivity ),
+ m_pattern( normaliseString( pattern ) )
+ {
+ if( startsWith( m_pattern, '*' ) ) {
+ m_pattern = m_pattern.substr( 1 );
+ m_wildcard = WildcardAtStart;
+ }
+ if( endsWith( m_pattern, '*' ) ) {
+ m_pattern = m_pattern.substr( 0, m_pattern.size()-1 );
+ m_wildcard = static_cast<WildcardPosition>( m_wildcard | WildcardAtEnd );
+ }
+ }
+
+ bool WildcardPattern::matches( std::string const& str ) const {
+ switch( m_wildcard ) {
+ case NoWildcard:
+ return m_pattern == normaliseString( str );
+ case WildcardAtStart:
+ return endsWith( normaliseString( str ), m_pattern );
+ case WildcardAtEnd:
+ return startsWith( normaliseString( str ), m_pattern );
+ case WildcardAtBothEnds:
+ return contains( normaliseString( str ), m_pattern );
+ default:
+ CATCH_INTERNAL_ERROR( "Unknown enum" );
+ }
+ }
+
+ std::string WildcardPattern::normaliseString( std::string const& str ) const {
+ return trim( m_caseSensitivity == CaseSensitive::No ? toLower( str ) : str );
+ }
+}
+// end catch_wildcard_pattern.cpp
+// start catch_xmlwriter.cpp
+
+#include <iomanip>
+#include <type_traits>
+
+namespace Catch {
+
+namespace {
+
+ size_t trailingBytes(unsigned char c) {
+ if ((c & 0xE0) == 0xC0) {
+ return 2;
+ }
+ if ((c & 0xF0) == 0xE0) {
+ return 3;
+ }
+ if ((c & 0xF8) == 0xF0) {
+ return 4;
+ }
+ CATCH_INTERNAL_ERROR("Invalid multibyte utf-8 start byte encountered");
+ }
+
+ uint32_t headerValue(unsigned char c) {
+ if ((c & 0xE0) == 0xC0) {
+ return c & 0x1F;
+ }
+ if ((c & 0xF0) == 0xE0) {
+ return c & 0x0F;
+ }
+ if ((c & 0xF8) == 0xF0) {
+ return c & 0x07;
+ }
+ CATCH_INTERNAL_ERROR("Invalid multibyte utf-8 start byte encountered");
+ }
+
+ void hexEscapeChar(std::ostream& os, unsigned char c) {
+ std::ios_base::fmtflags f(os.flags());
+ os << "\\x"
+ << std::uppercase << std::hex << std::setfill('0') << std::setw(2)
+ << static_cast<int>(c);
+ os.flags(f);
+ }
+
+ bool shouldNewline(XmlFormatting fmt) {
+ return !!(static_cast<std::underlying_type<XmlFormatting>::type>(fmt & XmlFormatting::Newline));
+ }
+
+ bool shouldIndent(XmlFormatting fmt) {
+ return !!(static_cast<std::underlying_type<XmlFormatting>::type>(fmt & XmlFormatting::Indent));
+ }
+
+} // anonymous namespace
+
+ XmlFormatting operator | (XmlFormatting lhs, XmlFormatting rhs) {
+ return static_cast<XmlFormatting>(
+ static_cast<std::underlying_type<XmlFormatting>::type>(lhs) |
+ static_cast<std::underlying_type<XmlFormatting>::type>(rhs)
+ );
+ }
+
+ XmlFormatting operator & (XmlFormatting lhs, XmlFormatting rhs) {
+ return static_cast<XmlFormatting>(
+ static_cast<std::underlying_type<XmlFormatting>::type>(lhs) &
+ static_cast<std::underlying_type<XmlFormatting>::type>(rhs)
+ );
+ }
+
+ XmlEncode::XmlEncode( std::string const& str, ForWhat forWhat )
+ : m_str( str ),
+ m_forWhat( forWhat )
+ {}
+
+ void XmlEncode::encodeTo( std::ostream& os ) const {
+ // Apostrophe escaping not necessary if we always use " to write attributes
+ // (see: http://www.w3.org/TR/xml/#syntax)
+
+ for( std::size_t idx = 0; idx < m_str.size(); ++ idx ) {
+ unsigned char c = m_str[idx];
+ switch (c) {
+ case '<': os << "&lt;"; break;
+ case '&': os << "&amp;"; break;
+
+ case '>':
+ // See: http://www.w3.org/TR/xml/#syntax
+ if (idx > 2 && m_str[idx - 1] == ']' && m_str[idx - 2] == ']')
+ os << "&gt;";
+ else
+ os << c;
+ break;
+
+ case '\"':
+ if (m_forWhat == ForAttributes)
+ os << "&quot;";
+ else
+ os << c;
+ break;
+
+ default:
+ // Check for control characters and invalid utf-8
+
+ // Escape control characters in standard ascii
+ // see http://stackoverflow.com/questions/404107/why-are-control-characters-illegal-in-xml-1-0
+ if (c < 0x09 || (c > 0x0D && c < 0x20) || c == 0x7F) {
+ hexEscapeChar(os, c);
+ break;
+ }
+
+ // Plain ASCII: Write it to stream
+ if (c < 0x7F) {
+ os << c;
+ break;
+ }
+
+ // UTF-8 territory
+ // Check if the encoding is valid and if it is not, hex escape bytes.
+ // Important: We do not check the exact decoded values for validity, only the encoding format
+ // First check that this bytes is a valid lead byte:
+ // This means that it is not encoded as 1111 1XXX
+ // Or as 10XX XXXX
+ if (c < 0xC0 ||
+ c >= 0xF8) {
+ hexEscapeChar(os, c);
+ break;
+ }
+
+ auto encBytes = trailingBytes(c);
+ // Are there enough bytes left to avoid accessing out-of-bounds memory?
+ if (idx + encBytes - 1 >= m_str.size()) {
+ hexEscapeChar(os, c);
+ break;
+ }
+ // The header is valid, check data
+ // The next encBytes bytes must together be a valid utf-8
+ // This means: bitpattern 10XX XXXX and the extracted value is sane (ish)
+ bool valid = true;
+ uint32_t value = headerValue(c);
+ for (std::size_t n = 1; n < encBytes; ++n) {
+ unsigned char nc = m_str[idx + n];
+ valid &= ((nc & 0xC0) == 0x80);
+ value = (value << 6) | (nc & 0x3F);
+ }
+
+ if (
+ // Wrong bit pattern of following bytes
+ (!valid) ||
+ // Overlong encodings
+ (value < 0x80) ||
+ (0x80 <= value && value < 0x800 && encBytes > 2) ||
+ (0x800 < value && value < 0x10000 && encBytes > 3) ||
+ // Encoded value out of range
+ (value >= 0x110000)
+ ) {
+ hexEscapeChar(os, c);
+ break;
+ }
+
+ // If we got here, this is in fact a valid(ish) utf-8 sequence
+ for (std::size_t n = 0; n < encBytes; ++n) {
+ os << m_str[idx + n];
+ }
+ idx += encBytes - 1;
+ break;
+ }
+ }
+ }
+
+ std::ostream& operator << ( std::ostream& os, XmlEncode const& xmlEncode ) {
+ xmlEncode.encodeTo( os );
+ return os;
+ }
+
+ XmlWriter::ScopedElement::ScopedElement( XmlWriter* writer, XmlFormatting fmt )
+ : m_writer( writer ),
+ m_fmt(fmt)
+ {}
+
+ XmlWriter::ScopedElement::ScopedElement( ScopedElement&& other ) noexcept
+ : m_writer( other.m_writer ),
+ m_fmt(other.m_fmt)
+ {
+ other.m_writer = nullptr;
+ other.m_fmt = XmlFormatting::None;
+ }
+ XmlWriter::ScopedElement& XmlWriter::ScopedElement::operator=( ScopedElement&& other ) noexcept {
+ if ( m_writer ) {
+ m_writer->endElement();
+ }
+ m_writer = other.m_writer;
+ other.m_writer = nullptr;
+ m_fmt = other.m_fmt;
+ other.m_fmt = XmlFormatting::None;
+ return *this;
+ }
+
+ XmlWriter::ScopedElement::~ScopedElement() {
+ if (m_writer) {
+ m_writer->endElement(m_fmt);
+ }
+ }
+
+ XmlWriter::ScopedElement& XmlWriter::ScopedElement::writeText( std::string const& text, XmlFormatting fmt ) {
+ m_writer->writeText( text, fmt );
+ return *this;
+ }
+
+ XmlWriter::XmlWriter( std::ostream& os ) : m_os( os )
+ {
+ writeDeclaration();
+ }
+
+ XmlWriter::~XmlWriter() {
+ while (!m_tags.empty()) {
+ endElement();
+ }
+ newlineIfNecessary();
+ }
+
+ XmlWriter& XmlWriter::startElement( std::string const& name, XmlFormatting fmt ) {
+ ensureTagClosed();
+ newlineIfNecessary();
+ if (shouldIndent(fmt)) {
+ m_os << m_indent;
+ m_indent += " ";
+ }
+ m_os << '<' << name;
+ m_tags.push_back( name );
+ m_tagIsOpen = true;
+ applyFormatting(fmt);
+ return *this;
+ }
+
+ XmlWriter::ScopedElement XmlWriter::scopedElement( std::string const& name, XmlFormatting fmt ) {
+ ScopedElement scoped( this, fmt );
+ startElement( name, fmt );
+ return scoped;
+ }
+
+ XmlWriter& XmlWriter::endElement(XmlFormatting fmt) {
+ m_indent = m_indent.substr(0, m_indent.size() - 2);
+
+ if( m_tagIsOpen ) {
+ m_os << "/>";
+ m_tagIsOpen = false;
+ } else {
+ newlineIfNecessary();
+ if (shouldIndent(fmt)) {
+ m_os << m_indent;
+ }
+ m_os << "</" << m_tags.back() << ">";
+ }
+ m_os << std::flush;
+ applyFormatting(fmt);
+ m_tags.pop_back();
+ return *this;
+ }
+
+ XmlWriter& XmlWriter::writeAttribute( std::string const& name, std::string const& attribute ) {
+ if( !name.empty() && !attribute.empty() )
+ m_os << ' ' << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << '"';
+ return *this;
+ }
+
+ XmlWriter& XmlWriter::writeAttribute( std::string const& name, bool attribute ) {
+ m_os << ' ' << name << "=\"" << ( attribute ? "true" : "false" ) << '"';
+ return *this;
+ }
+
+ XmlWriter& XmlWriter::writeText( std::string const& text, XmlFormatting fmt) {
+ if( !text.empty() ){
+ bool tagWasOpen = m_tagIsOpen;
+ ensureTagClosed();
+ if (tagWasOpen && shouldIndent(fmt)) {
+ m_os << m_indent;
+ }
+ m_os << XmlEncode( text );
+ applyFormatting(fmt);
+ }
+ return *this;
+ }
+
+ XmlWriter& XmlWriter::writeComment( std::string const& text, XmlFormatting fmt) {
+ ensureTagClosed();
+ if (shouldIndent(fmt)) {
+ m_os << m_indent;
+ }
+ m_os << "<!--" << text << "-->";
+ applyFormatting(fmt);
+ return *this;
+ }
+
+ void XmlWriter::writeStylesheetRef( std::string const& url ) {
+ m_os << "<?xml-stylesheet type=\"text/xsl\" href=\"" << url << "\"?>\n";
+ }
+
+ XmlWriter& XmlWriter::writeBlankLine() {
+ ensureTagClosed();
+ m_os << '\n';
+ return *this;
+ }
+
+ void XmlWriter::ensureTagClosed() {
+ if( m_tagIsOpen ) {
+ m_os << '>' << std::flush;
+ newlineIfNecessary();
+ m_tagIsOpen = false;
+ }
+ }
+
+ void XmlWriter::applyFormatting(XmlFormatting fmt) {
+ m_needsNewline = shouldNewline(fmt);
+ }
+
+ void XmlWriter::writeDeclaration() {
+ m_os << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+ }
+
+ void XmlWriter::newlineIfNecessary() {
+ if( m_needsNewline ) {
+ m_os << std::endl;
+ m_needsNewline = false;
+ }
+ }
+}
+// end catch_xmlwriter.cpp
+// start catch_reporter_bases.cpp
+
+#include <cstring>
+#include <cfloat>
+#include <cstdio>
+#include <cassert>
+#include <memory>
+
+namespace Catch {
+ void prepareExpandedExpression(AssertionResult& result) {
+ result.getExpandedExpression();
+ }
+
+ // Because formatting using c++ streams is stateful, drop down to C is required
+ // Alternatively we could use stringstream, but its performance is... not good.
+ std::string getFormattedDuration( double duration ) {
+ // Max exponent + 1 is required to represent the whole part
+ // + 1 for decimal point
+ // + 3 for the 3 decimal places
+ // + 1 for null terminator
+ const std::size_t maxDoubleSize = DBL_MAX_10_EXP + 1 + 1 + 3 + 1;
+ char buffer[maxDoubleSize];
+
+ // Save previous errno, to prevent sprintf from overwriting it
+ ErrnoGuard guard;
+#ifdef _MSC_VER
+ sprintf_s(buffer, "%.3f", duration);
+#else
+ std::sprintf(buffer, "%.3f", duration);
+#endif
+ return std::string(buffer);
+ }
+
+ std::string serializeFilters( std::vector<std::string> const& container ) {
+ ReusableStringStream oss;
+ bool first = true;
+ for (auto&& filter : container)
+ {
+ if (!first)
+ oss << ' ';
+ else
+ first = false;
+
+ oss << filter;
+ }
+ return oss.str();
+ }
+
+ TestEventListenerBase::TestEventListenerBase(ReporterConfig const & _config)
+ :StreamingReporterBase(_config) {}
+
+ std::set<Verbosity> TestEventListenerBase::getSupportedVerbosities() {
+ return { Verbosity::Quiet, Verbosity::Normal, Verbosity::High };
+ }
+
+ void TestEventListenerBase::assertionStarting(AssertionInfo const &) {}
+
+ bool TestEventListenerBase::assertionEnded(AssertionStats const &) {
+ return false;
+ }
+
+} // end namespace Catch
+// end catch_reporter_bases.cpp
+// start catch_reporter_compact.cpp
+
+namespace {
+
+#ifdef CATCH_PLATFORM_MAC
+ const char* failedString() { return "FAILED"; }
+ const char* passedString() { return "PASSED"; }
+#else
+ const char* failedString() { return "failed"; }
+ const char* passedString() { return "passed"; }
+#endif
+
+ // Colour::LightGrey
+ Catch::Colour::Code dimColour() { return Catch::Colour::FileName; }
+
+ std::string bothOrAll( std::size_t count ) {
+ return count == 1 ? std::string() :
+ count == 2 ? "both " : "all " ;
+ }
+
+} // anon namespace
+
+namespace Catch {
+namespace {
+// Colour, message variants:
+// - white: No tests ran.
+// - red: Failed [both/all] N test cases, failed [both/all] M assertions.
+// - white: Passed [both/all] N test cases (no assertions).
+// - red: Failed N tests cases, failed M assertions.
+// - green: Passed [both/all] N tests cases with M assertions.
+void printTotals(std::ostream& out, const Totals& totals) {
+ if (totals.testCases.total() == 0) {
+ out << "No tests ran.";
+ } else if (totals.testCases.failed == totals.testCases.total()) {
+ Colour colour(Colour::ResultError);
+ const std::string qualify_assertions_failed =
+ totals.assertions.failed == totals.assertions.total() ?
+ bothOrAll(totals.assertions.failed) : std::string();
+ out <<
+ "Failed " << bothOrAll(totals.testCases.failed)
+ << pluralise(totals.testCases.failed, "test case") << ", "
+ "failed " << qualify_assertions_failed <<
+ pluralise(totals.assertions.failed, "assertion") << '.';
+ } else if (totals.assertions.total() == 0) {
+ out <<
+ "Passed " << bothOrAll(totals.testCases.total())
+ << pluralise(totals.testCases.total(), "test case")
+ << " (no assertions).";
+ } else if (totals.assertions.failed) {
+ Colour colour(Colour::ResultError);
+ out <<
+ "Failed " << pluralise(totals.testCases.failed, "test case") << ", "
+ "failed " << pluralise(totals.assertions.failed, "assertion") << '.';
+ } else {
+ Colour colour(Colour::ResultSuccess);
+ out <<
+ "Passed " << bothOrAll(totals.testCases.passed)
+ << pluralise(totals.testCases.passed, "test case") <<
+ " with " << pluralise(totals.assertions.passed, "assertion") << '.';
+ }
+}
+
+// Implementation of CompactReporter formatting
+class AssertionPrinter {
+public:
+ AssertionPrinter& operator= (AssertionPrinter const&) = delete;
+ AssertionPrinter(AssertionPrinter const&) = delete;
+ AssertionPrinter(std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages)
+ : stream(_stream)
+ , result(_stats.assertionResult)
+ , messages(_stats.infoMessages)
+ , itMessage(_stats.infoMessages.begin())
+ , printInfoMessages(_printInfoMessages) {}
+
+ void print() {
+ printSourceInfo();
+
+ itMessage = messages.begin();
+
+ switch (result.getResultType()) {
+ case ResultWas::Ok:
+ printResultType(Colour::ResultSuccess, passedString());
+ printOriginalExpression();
+ printReconstructedExpression();
+ if (!result.hasExpression())
+ printRemainingMessages(Colour::None);
+ else
+ printRemainingMessages();
+ break;
+ case ResultWas::ExpressionFailed:
+ if (result.isOk())
+ printResultType(Colour::ResultSuccess, failedString() + std::string(" - but was ok"));
+ else
+ printResultType(Colour::Error, failedString());
+ printOriginalExpression();
+ printReconstructedExpression();
+ printRemainingMessages();
+ break;
+ case ResultWas::ThrewException:
+ printResultType(Colour::Error, failedString());
+ printIssue("unexpected exception with message:");
+ printMessage();
+ printExpressionWas();
+ printRemainingMessages();
+ break;
+ case ResultWas::FatalErrorCondition:
+ printResultType(Colour::Error, failedString());
+ printIssue("fatal error condition with message:");
+ printMessage();
+ printExpressionWas();
+ printRemainingMessages();
+ break;
+ case ResultWas::DidntThrowException:
+ printResultType(Colour::Error, failedString());
+ printIssue("expected exception, got none");
+ printExpressionWas();
+ printRemainingMessages();
+ break;
+ case ResultWas::Info:
+ printResultType(Colour::None, "info");
+ printMessage();
+ printRemainingMessages();
+ break;
+ case ResultWas::Warning:
+ printResultType(Colour::None, "warning");
+ printMessage();
+ printRemainingMessages();
+ break;
+ case ResultWas::ExplicitFailure:
+ printResultType(Colour::Error, failedString());
+ printIssue("explicitly");
+ printRemainingMessages(Colour::None);
+ break;
+ // These cases are here to prevent compiler warnings
+ case ResultWas::Unknown:
+ case ResultWas::FailureBit:
+ case ResultWas::Exception:
+ printResultType(Colour::Error, "** internal error **");
+ break;
+ }
+ }
+
+private:
+ void printSourceInfo() const {
+ Colour colourGuard(Colour::FileName);
+ stream << result.getSourceInfo() << ':';
+ }
+
+ void printResultType(Colour::Code colour, std::string const& passOrFail) const {
+ if (!passOrFail.empty()) {
+ {
+ Colour colourGuard(colour);
+ stream << ' ' << passOrFail;
+ }
+ stream << ':';
+ }
+ }
+
+ void printIssue(std::string const& issue) const {
+ stream << ' ' << issue;
+ }
+
+ void printExpressionWas() {
+ if (result.hasExpression()) {
+ stream << ';';
+ {
+ Colour colour(dimColour());
+ stream << " expression was:";
+ }
+ printOriginalExpression();
+ }
+ }
+
+ void printOriginalExpression() const {
+ if (result.hasExpression()) {
+ stream << ' ' << result.getExpression();
+ }
+ }
+
+ void printReconstructedExpression() const {
+ if (result.hasExpandedExpression()) {
+ {
+ Colour colour(dimColour());
+ stream << " for: ";
+ }
+ stream << result.getExpandedExpression();
+ }
+ }
+
+ void printMessage() {
+ if (itMessage != messages.end()) {
+ stream << " '" << itMessage->message << '\'';
+ ++itMessage;
+ }
+ }
+
+ void printRemainingMessages(Colour::Code colour = dimColour()) {
+ if (itMessage == messages.end())
+ return;
+
+ const auto itEnd = messages.cend();
+ const auto N = static_cast<std::size_t>(std::distance(itMessage, itEnd));
+
+ {
+ Colour colourGuard(colour);
+ stream << " with " << pluralise(N, "message") << ':';
+ }
+
+ while (itMessage != itEnd) {
+ // If this assertion is a warning ignore any INFO messages
+ if (printInfoMessages || itMessage->type != ResultWas::Info) {
+ printMessage();
+ if (itMessage != itEnd) {
+ Colour colourGuard(dimColour());
+ stream << " and";
+ }
+ continue;
+ }
+ ++itMessage;
+ }
+ }
+
+private:
+ std::ostream& stream;
+ AssertionResult const& result;
+ std::vector<MessageInfo> messages;
+ std::vector<MessageInfo>::const_iterator itMessage;
+ bool printInfoMessages;
+};
+
+} // anon namespace
+
+ std::string CompactReporter::getDescription() {
+ return "Reports test results on a single line, suitable for IDEs";
+ }
+
+ ReporterPreferences CompactReporter::getPreferences() const {
+ return m_reporterPrefs;
+ }
+
+ void CompactReporter::noMatchingTestCases( std::string const& spec ) {
+ stream << "No test cases matched '" << spec << '\'' << std::endl;
+ }
+
+ void CompactReporter::assertionStarting( AssertionInfo const& ) {}
+
+ bool CompactReporter::assertionEnded( AssertionStats const& _assertionStats ) {
+ AssertionResult const& result = _assertionStats.assertionResult;
+
+ bool printInfoMessages = true;
+
+ // Drop out if result was successful and we're not printing those
+ if( !m_config->includeSuccessfulResults() && result.isOk() ) {
+ if( result.getResultType() != ResultWas::Warning )
+ return false;
+ printInfoMessages = false;
+ }
+
+ AssertionPrinter printer( stream, _assertionStats, printInfoMessages );
+ printer.print();
+
+ stream << std::endl;
+ return true;
+ }
+
+ void CompactReporter::sectionEnded(SectionStats const& _sectionStats) {
+ if (m_config->showDurations() == ShowDurations::Always) {
+ stream << getFormattedDuration(_sectionStats.durationInSeconds) << " s: " << _sectionStats.sectionInfo.name << std::endl;
+ }
+ }
+
+ void CompactReporter::testRunEnded( TestRunStats const& _testRunStats ) {
+ printTotals( stream, _testRunStats.totals );
+ stream << '\n' << std::endl;
+ StreamingReporterBase::testRunEnded( _testRunStats );
+ }
+
+ CompactReporter::~CompactReporter() {}
+
+ CATCH_REGISTER_REPORTER( "compact", CompactReporter )
+
+} // end namespace Catch
+// end catch_reporter_compact.cpp
+// start catch_reporter_console.cpp
+
+#include <cfloat>
+#include <cstdio>
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4061) // Not all labels are EXPLICITLY handled in switch
+ // Note that 4062 (not all labels are handled and default is missing) is enabled
+#endif
+
+#if defined(__clang__)
+# pragma clang diagnostic push
+// For simplicity, benchmarking-only helpers are always enabled
+# pragma clang diagnostic ignored "-Wunused-function"
+#endif
+
+namespace Catch {
+
+namespace {
+
+// Formatter impl for ConsoleReporter
+class ConsoleAssertionPrinter {
+public:
+ ConsoleAssertionPrinter& operator= (ConsoleAssertionPrinter const&) = delete;
+ ConsoleAssertionPrinter(ConsoleAssertionPrinter const&) = delete;
+ ConsoleAssertionPrinter(std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages)
+ : stream(_stream),
+ stats(_stats),
+ result(_stats.assertionResult),
+ colour(Colour::None),
+ message(result.getMessage()),
+ messages(_stats.infoMessages),
+ printInfoMessages(_printInfoMessages) {
+ switch (result.getResultType()) {
+ case ResultWas::Ok:
+ colour = Colour::Success;
+ passOrFail = "PASSED";
+ //if( result.hasMessage() )
+ if (_stats.infoMessages.size() == 1)
+ messageLabel = "with message";
+ if (_stats.infoMessages.size() > 1)
+ messageLabel = "with messages";
+ break;
+ case ResultWas::ExpressionFailed:
+ if (result.isOk()) {
+ colour = Colour::Success;
+ passOrFail = "FAILED - but was ok";
+ } else {
+ colour = Colour::Error;
+ passOrFail = "FAILED";
+ }
+ if (_stats.infoMessages.size() == 1)
+ messageLabel = "with message";
+ if (_stats.infoMessages.size() > 1)
+ messageLabel = "with messages";
+ break;
+ case ResultWas::ThrewException:
+ colour = Colour::Error;
+ passOrFail = "FAILED";
+ messageLabel = "due to unexpected exception with ";
+ if (_stats.infoMessages.size() == 1)
+ messageLabel += "message";
+ if (_stats.infoMessages.size() > 1)
+ messageLabel += "messages";
+ break;
+ case ResultWas::FatalErrorCondition:
+ colour = Colour::Error;
+ passOrFail = "FAILED";
+ messageLabel = "due to a fatal error condition";
+ break;
+ case ResultWas::DidntThrowException:
+ colour = Colour::Error;
+ passOrFail = "FAILED";
+ messageLabel = "because no exception was thrown where one was expected";
+ break;
+ case ResultWas::Info:
+ messageLabel = "info";
+ break;
+ case ResultWas::Warning:
+ messageLabel = "warning";
+ break;
+ case ResultWas::ExplicitFailure:
+ passOrFail = "FAILED";
+ colour = Colour::Error;
+ if (_stats.infoMessages.size() == 1)
+ messageLabel = "explicitly with message";
+ if (_stats.infoMessages.size() > 1)
+ messageLabel = "explicitly with messages";
+ break;
+ // These cases are here to prevent compiler warnings
+ case ResultWas::Unknown:
+ case ResultWas::FailureBit:
+ case ResultWas::Exception:
+ passOrFail = "** internal error **";
+ colour = Colour::Error;
+ break;
+ }
+ }
+
+ void print() const {
+ printSourceInfo();
+ if (stats.totals.assertions.total() > 0) {
+ printResultType();
+ printOriginalExpression();
+ printReconstructedExpression();
+ } else {
+ stream << '\n';
+ }
+ printMessage();
+ }
+
+private:
+ void printResultType() const {
+ if (!passOrFail.empty()) {
+ Colour colourGuard(colour);
+ stream << passOrFail << ":\n";
+ }
+ }
+ void printOriginalExpression() const {
+ if (result.hasExpression()) {
+ Colour colourGuard(Colour::OriginalExpression);
+ stream << " ";
+ stream << result.getExpressionInMacro();
+ stream << '\n';
+ }
+ }
+ void printReconstructedExpression() const {
+ if (result.hasExpandedExpression()) {
+ stream << "with expansion:\n";
+ Colour colourGuard(Colour::ReconstructedExpression);
+ stream << Column(result.getExpandedExpression()).indent(2) << '\n';
+ }
+ }
+ void printMessage() const {
+ if (!messageLabel.empty())
+ stream << messageLabel << ':' << '\n';
+ for (auto const& msg : messages) {
+ // If this assertion is a warning ignore any INFO messages
+ if (printInfoMessages || msg.type != ResultWas::Info)
+ stream << Column(msg.message).indent(2) << '\n';
+ }
+ }
+ void printSourceInfo() const {
+ Colour colourGuard(Colour::FileName);
+ stream << result.getSourceInfo() << ": ";
+ }
+
+ std::ostream& stream;
+ AssertionStats const& stats;
+ AssertionResult const& result;
+ Colour::Code colour;
+ std::string passOrFail;
+ std::string messageLabel;
+ std::string message;
+ std::vector<MessageInfo> messages;
+ bool printInfoMessages;
+};
+
+std::size_t makeRatio(std::size_t number, std::size_t total) {
+ std::size_t ratio = total > 0 ? CATCH_CONFIG_CONSOLE_WIDTH * number / total : 0;
+ return (ratio == 0 && number > 0) ? 1 : ratio;
+}
+
+std::size_t& findMax(std::size_t& i, std::size_t& j, std::size_t& k) {
+ if (i > j && i > k)
+ return i;
+ else if (j > k)
+ return j;
+ else
+ return k;
+}
+
+struct ColumnInfo {
+ enum Justification { Left, Right };
+ std::string name;
+ int width;
+ Justification justification;
+};
+struct ColumnBreak {};
+struct RowBreak {};
+
+class Duration {
+ enum class Unit {
+ Auto,
+ Nanoseconds,
+ Microseconds,
+ Milliseconds,
+ Seconds,
+ Minutes
+ };
+ static const uint64_t s_nanosecondsInAMicrosecond = 1000;
+ static const uint64_t s_nanosecondsInAMillisecond = 1000 * s_nanosecondsInAMicrosecond;
+ static const uint64_t s_nanosecondsInASecond = 1000 * s_nanosecondsInAMillisecond;
+ static const uint64_t s_nanosecondsInAMinute = 60 * s_nanosecondsInASecond;
+
+ double m_inNanoseconds;
+ Unit m_units;
+
+public:
+ explicit Duration(double inNanoseconds, Unit units = Unit::Auto)
+ : m_inNanoseconds(inNanoseconds),
+ m_units(units) {
+ if (m_units == Unit::Auto) {
+ if (m_inNanoseconds < s_nanosecondsInAMicrosecond)
+ m_units = Unit::Nanoseconds;
+ else if (m_inNanoseconds < s_nanosecondsInAMillisecond)
+ m_units = Unit::Microseconds;
+ else if (m_inNanoseconds < s_nanosecondsInASecond)
+ m_units = Unit::Milliseconds;
+ else if (m_inNanoseconds < s_nanosecondsInAMinute)
+ m_units = Unit::Seconds;
+ else
+ m_units = Unit::Minutes;
+ }
+
+ }
+
+ auto value() const -> double {
+ switch (m_units) {
+ case Unit::Microseconds:
+ return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMicrosecond);
+ case Unit::Milliseconds:
+ return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMillisecond);
+ case Unit::Seconds:
+ return m_inNanoseconds / static_cast<double>(s_nanosecondsInASecond);
+ case Unit::Minutes:
+ return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMinute);
+ default:
+ return m_inNanoseconds;
+ }
+ }
+ auto unitsAsString() const -> std::string {
+ switch (m_units) {
+ case Unit::Nanoseconds:
+ return "ns";
+ case Unit::Microseconds:
+ return "us";
+ case Unit::Milliseconds:
+ return "ms";
+ case Unit::Seconds:
+ return "s";
+ case Unit::Minutes:
+ return "m";
+ default:
+ return "** internal error **";
+ }
+
+ }
+ friend auto operator << (std::ostream& os, Duration const& duration) -> std::ostream& {
+ return os << duration.value() << ' ' << duration.unitsAsString();
+ }
+};
+} // end anon namespace
+
+class TablePrinter {
+ std::ostream& m_os;
+ std::vector<ColumnInfo> m_columnInfos;
+ std::ostringstream m_oss;
+ int m_currentColumn = -1;
+ bool m_isOpen = false;
+
+public:
+ TablePrinter( std::ostream& os, std::vector<ColumnInfo> columnInfos )
+ : m_os( os ),
+ m_columnInfos( std::move( columnInfos ) ) {}
+
+ auto columnInfos() const -> std::vector<ColumnInfo> const& {
+ return m_columnInfos;
+ }
+
+ void open() {
+ if (!m_isOpen) {
+ m_isOpen = true;
+ *this << RowBreak();
+
+ Columns headerCols;
+ Spacer spacer(2);
+ for (auto const& info : m_columnInfos) {
+ headerCols += Column(info.name).width(static_cast<std::size_t>(info.width - 2));
+ headerCols += spacer;
+ }
+ m_os << headerCols << '\n';
+
+ m_os << Catch::getLineOfChars<'-'>() << '\n';
+ }
+ }
+ void close() {
+ if (m_isOpen) {
+ *this << RowBreak();
+ m_os << std::endl;
+ m_isOpen = false;
+ }
+ }
+
+ template<typename T>
+ friend TablePrinter& operator << (TablePrinter& tp, T const& value) {
+ tp.m_oss << value;
+ return tp;
+ }
+
+ friend TablePrinter& operator << (TablePrinter& tp, ColumnBreak) {
+ auto colStr = tp.m_oss.str();
+ const auto strSize = colStr.size();
+ tp.m_oss.str("");
+ tp.open();
+ if (tp.m_currentColumn == static_cast<int>(tp.m_columnInfos.size() - 1)) {
+ tp.m_currentColumn = -1;
+ tp.m_os << '\n';
+ }
+ tp.m_currentColumn++;
+
+ auto colInfo = tp.m_columnInfos[tp.m_currentColumn];
+ auto padding = (strSize + 1 < static_cast<std::size_t>(colInfo.width))
+ ? std::string(colInfo.width - (strSize + 1), ' ')
+ : std::string();
+ if (colInfo.justification == ColumnInfo::Left)
+ tp.m_os << colStr << padding << ' ';
+ else
+ tp.m_os << padding << colStr << ' ';
+ return tp;
+ }
+
+ friend TablePrinter& operator << (TablePrinter& tp, RowBreak) {
+ if (tp.m_currentColumn > 0) {
+ tp.m_os << '\n';
+ tp.m_currentColumn = -1;
+ }
+ return tp;
+ }
+};
+
+ConsoleReporter::ConsoleReporter(ReporterConfig const& config)
+ : StreamingReporterBase(config),
+ m_tablePrinter(new TablePrinter(config.stream(),
+ [&config]() -> std::vector<ColumnInfo> {
+ if (config.fullConfig()->benchmarkNoAnalysis())
+ {
+ return{
+ { "benchmark name", CATCH_CONFIG_CONSOLE_WIDTH - 43, ColumnInfo::Left },
+ { " samples", 14, ColumnInfo::Right },
+ { " iterations", 14, ColumnInfo::Right },
+ { " mean", 14, ColumnInfo::Right }
+ };
+ }
+ else
+ {
+ return{
+ { "benchmark name", CATCH_CONFIG_CONSOLE_WIDTH - 43, ColumnInfo::Left },
+ { "samples mean std dev", 14, ColumnInfo::Right },
+ { "iterations low mean low std dev", 14, ColumnInfo::Right },
+ { "estimated high mean high std dev", 14, ColumnInfo::Right }
+ };
+ }
+ }())) {}
+ConsoleReporter::~ConsoleReporter() = default;
+
+std::string ConsoleReporter::getDescription() {
+ return "Reports test results as plain lines of text";
+}
+
+void ConsoleReporter::noMatchingTestCases(std::string const& spec) {
+ stream << "No test cases matched '" << spec << '\'' << std::endl;
+}
+
+void ConsoleReporter::reportInvalidArguments(std::string const&arg){
+ stream << "Invalid Filter: " << arg << std::endl;
+}
+
+void ConsoleReporter::assertionStarting(AssertionInfo const&) {}
+
+bool ConsoleReporter::assertionEnded(AssertionStats const& _assertionStats) {
+ AssertionResult const& result = _assertionStats.assertionResult;
+
+ bool includeResults = m_config->includeSuccessfulResults() || !result.isOk();
+
+ // Drop out if result was successful but we're not printing them.
+ if (!includeResults && result.getResultType() != ResultWas::Warning)
+ return false;
+
+ lazyPrint();
+
+ ConsoleAssertionPrinter printer(stream, _assertionStats, includeResults);
+ printer.print();
+ stream << std::endl;
+ return true;
+}
+
+void ConsoleReporter::sectionStarting(SectionInfo const& _sectionInfo) {
+ m_tablePrinter->close();
+ m_headerPrinted = false;
+ StreamingReporterBase::sectionStarting(_sectionInfo);
+}
+void ConsoleReporter::sectionEnded(SectionStats const& _sectionStats) {
+ m_tablePrinter->close();
+ if (_sectionStats.missingAssertions) {
+ lazyPrint();
+ Colour colour(Colour::ResultError);
+ if (m_sectionStack.size() > 1)
+ stream << "\nNo assertions in section";
+ else
+ stream << "\nNo assertions in test case";
+ stream << " '" << _sectionStats.sectionInfo.name << "'\n" << std::endl;
+ }
+ if (m_config->showDurations() == ShowDurations::Always) {
+ stream << getFormattedDuration(_sectionStats.durationInSeconds) << " s: " << _sectionStats.sectionInfo.name << std::endl;
+ }
+ if (m_headerPrinted) {
+ m_headerPrinted = false;
+ }
+ StreamingReporterBase::sectionEnded(_sectionStats);
+}
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+void ConsoleReporter::benchmarkPreparing(std::string const& name) {
+ lazyPrintWithoutClosingBenchmarkTable();
+
+ auto nameCol = Column(name).width(static_cast<std::size_t>(m_tablePrinter->columnInfos()[0].width - 2));
+
+ bool firstLine = true;
+ for (auto line : nameCol) {
+ if (!firstLine)
+ (*m_tablePrinter) << ColumnBreak() << ColumnBreak() << ColumnBreak();
+ else
+ firstLine = false;
+
+ (*m_tablePrinter) << line << ColumnBreak();
+ }
+}
+
+void ConsoleReporter::benchmarkStarting(BenchmarkInfo const& info) {
+ (*m_tablePrinter) << info.samples << ColumnBreak()
+ << info.iterations << ColumnBreak();
+ if (!m_config->benchmarkNoAnalysis())
+ (*m_tablePrinter) << Duration(info.estimatedDuration) << ColumnBreak();
+}
+void ConsoleReporter::benchmarkEnded(BenchmarkStats<> const& stats) {
+ if (m_config->benchmarkNoAnalysis())
+ {
+ (*m_tablePrinter) << Duration(stats.mean.point.count()) << ColumnBreak();
+ }
+ else
+ {
+ (*m_tablePrinter) << ColumnBreak()
+ << Duration(stats.mean.point.count()) << ColumnBreak()
+ << Duration(stats.mean.lower_bound.count()) << ColumnBreak()
+ << Duration(stats.mean.upper_bound.count()) << ColumnBreak() << ColumnBreak()
+ << Duration(stats.standardDeviation.point.count()) << ColumnBreak()
+ << Duration(stats.standardDeviation.lower_bound.count()) << ColumnBreak()
+ << Duration(stats.standardDeviation.upper_bound.count()) << ColumnBreak() << ColumnBreak() << ColumnBreak() << ColumnBreak() << ColumnBreak();
+ }
+}
+
+void ConsoleReporter::benchmarkFailed(std::string const& error) {
+ Colour colour(Colour::Red);
+ (*m_tablePrinter)
+ << "Benchmark failed (" << error << ')'
+ << ColumnBreak() << RowBreak();
+}
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+void ConsoleReporter::testCaseEnded(TestCaseStats const& _testCaseStats) {
+ m_tablePrinter->close();
+ StreamingReporterBase::testCaseEnded(_testCaseStats);
+ m_headerPrinted = false;
+}
+void ConsoleReporter::testGroupEnded(TestGroupStats const& _testGroupStats) {
+ if (currentGroupInfo.used) {
+ printSummaryDivider();
+ stream << "Summary for group '" << _testGroupStats.groupInfo.name << "':\n";
+ printTotals(_testGroupStats.totals);
+ stream << '\n' << std::endl;
+ }
+ StreamingReporterBase::testGroupEnded(_testGroupStats);
+}
+void ConsoleReporter::testRunEnded(TestRunStats const& _testRunStats) {
+ printTotalsDivider(_testRunStats.totals);
+ printTotals(_testRunStats.totals);
+ stream << std::endl;
+ StreamingReporterBase::testRunEnded(_testRunStats);
+}
+void ConsoleReporter::testRunStarting(TestRunInfo const& _testInfo) {
+ StreamingReporterBase::testRunStarting(_testInfo);
+ printTestFilters();
+}
+
+void ConsoleReporter::lazyPrint() {
+
+ m_tablePrinter->close();
+ lazyPrintWithoutClosingBenchmarkTable();
+}
+
+void ConsoleReporter::lazyPrintWithoutClosingBenchmarkTable() {
+
+ if (!currentTestRunInfo.used)
+ lazyPrintRunInfo();
+ if (!currentGroupInfo.used)
+ lazyPrintGroupInfo();
+
+ if (!m_headerPrinted) {
+ printTestCaseAndSectionHeader();
+ m_headerPrinted = true;
+ }
+}
+void ConsoleReporter::lazyPrintRunInfo() {
+ stream << '\n' << getLineOfChars<'~'>() << '\n';
+ Colour colour(Colour::SecondaryText);
+ stream << currentTestRunInfo->name
+ << " is a Catch v" << libraryVersion() << " host application.\n"
+ << "Run with -? for options\n\n";
+
+ if (m_config->rngSeed() != 0)
+ stream << "Randomness seeded to: " << m_config->rngSeed() << "\n\n";
+
+ currentTestRunInfo.used = true;
+}
+void ConsoleReporter::lazyPrintGroupInfo() {
+ if (!currentGroupInfo->name.empty() && currentGroupInfo->groupsCounts > 1) {
+ printClosedHeader("Group: " + currentGroupInfo->name);
+ currentGroupInfo.used = true;
+ }
+}
+void ConsoleReporter::printTestCaseAndSectionHeader() {
+ assert(!m_sectionStack.empty());
+ printOpenHeader(currentTestCaseInfo->name);
+
+ if (m_sectionStack.size() > 1) {
+ Colour colourGuard(Colour::Headers);
+
+ auto
+ it = m_sectionStack.begin() + 1, // Skip first section (test case)
+ itEnd = m_sectionStack.end();
+ for (; it != itEnd; ++it)
+ printHeaderString(it->name, 2);
+ }
+
+ SourceLineInfo lineInfo = m_sectionStack.back().lineInfo;
+
+ stream << getLineOfChars<'-'>() << '\n';
+ Colour colourGuard(Colour::FileName);
+ stream << lineInfo << '\n';
+ stream << getLineOfChars<'.'>() << '\n' << std::endl;
+}
+
+void ConsoleReporter::printClosedHeader(std::string const& _name) {
+ printOpenHeader(_name);
+ stream << getLineOfChars<'.'>() << '\n';
+}
+void ConsoleReporter::printOpenHeader(std::string const& _name) {
+ stream << getLineOfChars<'-'>() << '\n';
+ {
+ Colour colourGuard(Colour::Headers);
+ printHeaderString(_name);
+ }
+}
+
+// if string has a : in first line will set indent to follow it on
+// subsequent lines
+void ConsoleReporter::printHeaderString(std::string const& _string, std::size_t indent) {
+ std::size_t i = _string.find(": ");
+ if (i != std::string::npos)
+ i += 2;
+ else
+ i = 0;
+ stream << Column(_string).indent(indent + i).initialIndent(indent) << '\n';
+}
+
+struct SummaryColumn {
+
+ SummaryColumn( std::string _label, Colour::Code _colour )
+ : label( std::move( _label ) ),
+ colour( _colour ) {}
+ SummaryColumn addRow( std::size_t count ) {
+ ReusableStringStream rss;
+ rss << count;
+ std::string row = rss.str();
+ for (auto& oldRow : rows) {
+ while (oldRow.size() < row.size())
+ oldRow = ' ' + oldRow;
+ while (oldRow.size() > row.size())
+ row = ' ' + row;
+ }
+ rows.push_back(row);
+ return *this;
+ }
+
+ std::string label;
+ Colour::Code colour;
+ std::vector<std::string> rows;
+
+};
+
+void ConsoleReporter::printTotals( Totals const& totals ) {
+ if (totals.testCases.total() == 0) {
+ stream << Colour(Colour::Warning) << "No tests ran\n";
+ } else if (totals.assertions.total() > 0 && totals.testCases.allPassed()) {
+ stream << Colour(Colour::ResultSuccess) << "All tests passed";
+ stream << " ("
+ << pluralise(totals.assertions.passed, "assertion") << " in "
+ << pluralise(totals.testCases.passed, "test case") << ')'
+ << '\n';
+ } else {
+
+ std::vector<SummaryColumn> columns;
+ columns.push_back(SummaryColumn("", Colour::None)
+ .addRow(totals.testCases.total())
+ .addRow(totals.assertions.total()));
+ columns.push_back(SummaryColumn("passed", Colour::Success)
+ .addRow(totals.testCases.passed)
+ .addRow(totals.assertions.passed));
+ columns.push_back(SummaryColumn("failed", Colour::ResultError)
+ .addRow(totals.testCases.failed)
+ .addRow(totals.assertions.failed));
+ columns.push_back(SummaryColumn("failed as expected", Colour::ResultExpectedFailure)
+ .addRow(totals.testCases.failedButOk)
+ .addRow(totals.assertions.failedButOk));
+
+ printSummaryRow("test cases", columns, 0);
+ printSummaryRow("assertions", columns, 1);
+ }
+}
+void ConsoleReporter::printSummaryRow(std::string const& label, std::vector<SummaryColumn> const& cols, std::size_t row) {
+ for (auto col : cols) {
+ std::string value = col.rows[row];
+ if (col.label.empty()) {
+ stream << label << ": ";
+ if (value != "0")
+ stream << value;
+ else
+ stream << Colour(Colour::Warning) << "- none -";
+ } else if (value != "0") {
+ stream << Colour(Colour::LightGrey) << " | ";
+ stream << Colour(col.colour)
+ << value << ' ' << col.label;
+ }
+ }
+ stream << '\n';
+}
+
+void ConsoleReporter::printTotalsDivider(Totals const& totals) {
+ if (totals.testCases.total() > 0) {
+ std::size_t failedRatio = makeRatio(totals.testCases.failed, totals.testCases.total());
+ std::size_t failedButOkRatio = makeRatio(totals.testCases.failedButOk, totals.testCases.total());
+ std::size_t passedRatio = makeRatio(totals.testCases.passed, totals.testCases.total());
+ while (failedRatio + failedButOkRatio + passedRatio < CATCH_CONFIG_CONSOLE_WIDTH - 1)
+ findMax(failedRatio, failedButOkRatio, passedRatio)++;
+ while (failedRatio + failedButOkRatio + passedRatio > CATCH_CONFIG_CONSOLE_WIDTH - 1)
+ findMax(failedRatio, failedButOkRatio, passedRatio)--;
+
+ stream << Colour(Colour::Error) << std::string(failedRatio, '=');
+ stream << Colour(Colour::ResultExpectedFailure) << std::string(failedButOkRatio, '=');
+ if (totals.testCases.allPassed())
+ stream << Colour(Colour::ResultSuccess) << std::string(passedRatio, '=');
+ else
+ stream << Colour(Colour::Success) << std::string(passedRatio, '=');
+ } else {
+ stream << Colour(Colour::Warning) << std::string(CATCH_CONFIG_CONSOLE_WIDTH - 1, '=');
+ }
+ stream << '\n';
+}
+void ConsoleReporter::printSummaryDivider() {
+ stream << getLineOfChars<'-'>() << '\n';
+}
+
+void ConsoleReporter::printTestFilters() {
+ if (m_config->testSpec().hasFilters()) {
+ Colour guard(Colour::BrightYellow);
+ stream << "Filters: " << serializeFilters(m_config->getTestsOrTags()) << '\n';
+ }
+}
+
+CATCH_REGISTER_REPORTER("console", ConsoleReporter)
+
+} // end namespace Catch
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+#if defined(__clang__)
+# pragma clang diagnostic pop
+#endif
+// end catch_reporter_console.cpp
+// start catch_reporter_junit.cpp
+
+#include <cassert>
+#include <sstream>
+#include <ctime>
+#include <algorithm>
+
+namespace Catch {
+
+ namespace {
+ std::string getCurrentTimestamp() {
+ // Beware, this is not reentrant because of backward compatibility issues
+ // Also, UTC only, again because of backward compatibility (%z is C++11)
+ time_t rawtime;
+ std::time(&rawtime);
+ auto const timeStampSize = sizeof("2017-01-16T17:06:45Z");
+
+#ifdef _MSC_VER
+ std::tm timeInfo = {};
+ gmtime_s(&timeInfo, &rawtime);
+#else
+ std::tm* timeInfo;
+ timeInfo = std::gmtime(&rawtime);
+#endif
+
+ char timeStamp[timeStampSize];
+ const char * const fmt = "%Y-%m-%dT%H:%M:%SZ";
+
+#ifdef _MSC_VER
+ std::strftime(timeStamp, timeStampSize, fmt, &timeInfo);
+#else
+ std::strftime(timeStamp, timeStampSize, fmt, timeInfo);
+#endif
+ return std::string(timeStamp);
+ }
+
+ std::string fileNameTag(const std::vector<std::string> &tags) {
+ auto it = std::find_if(begin(tags),
+ end(tags),
+ [] (std::string const& tag) {return tag.front() == '#'; });
+ if (it != tags.end())
+ return it->substr(1);
+ return std::string();
+ }
+ } // anonymous namespace
+
+ JunitReporter::JunitReporter( ReporterConfig const& _config )
+ : CumulativeReporterBase( _config ),
+ xml( _config.stream() )
+ {
+ m_reporterPrefs.shouldRedirectStdOut = true;
+ m_reporterPrefs.shouldReportAllAssertions = true;
+ }
+
+ JunitReporter::~JunitReporter() {}
+
+ std::string JunitReporter::getDescription() {
+ return "Reports test results in an XML format that looks like Ant's junitreport target";
+ }
+
+ void JunitReporter::noMatchingTestCases( std::string const& /*spec*/ ) {}
+
+ void JunitReporter::testRunStarting( TestRunInfo const& runInfo ) {
+ CumulativeReporterBase::testRunStarting( runInfo );
+ xml.startElement( "testsuites" );
+ }
+
+ void JunitReporter::testGroupStarting( GroupInfo const& groupInfo ) {
+ suiteTimer.start();
+ stdOutForSuite.clear();
+ stdErrForSuite.clear();
+ unexpectedExceptions = 0;
+ CumulativeReporterBase::testGroupStarting( groupInfo );
+ }
+
+ void JunitReporter::testCaseStarting( TestCaseInfo const& testCaseInfo ) {
+ m_okToFail = testCaseInfo.okToFail();
+ }
+
+ bool JunitReporter::assertionEnded( AssertionStats const& assertionStats ) {
+ if( assertionStats.assertionResult.getResultType() == ResultWas::ThrewException && !m_okToFail )
+ unexpectedExceptions++;
+ return CumulativeReporterBase::assertionEnded( assertionStats );
+ }
+
+ void JunitReporter::testCaseEnded( TestCaseStats const& testCaseStats ) {
+ stdOutForSuite += testCaseStats.stdOut;
+ stdErrForSuite += testCaseStats.stdErr;
+ CumulativeReporterBase::testCaseEnded( testCaseStats );
+ }
+
+ void JunitReporter::testGroupEnded( TestGroupStats const& testGroupStats ) {
+ double suiteTime = suiteTimer.getElapsedSeconds();
+ CumulativeReporterBase::testGroupEnded( testGroupStats );
+ writeGroup( *m_testGroups.back(), suiteTime );
+ }
+
+ void JunitReporter::testRunEndedCumulative() {
+ xml.endElement();
+ }
+
+ void JunitReporter::writeGroup( TestGroupNode const& groupNode, double suiteTime ) {
+ XmlWriter::ScopedElement e = xml.scopedElement( "testsuite" );
+
+ TestGroupStats const& stats = groupNode.value;
+ xml.writeAttribute( "name", stats.groupInfo.name );
+ xml.writeAttribute( "errors", unexpectedExceptions );
+ xml.writeAttribute( "failures", stats.totals.assertions.failed-unexpectedExceptions );
+ xml.writeAttribute( "tests", stats.totals.assertions.total() );
+ xml.writeAttribute( "hostname", "tbd" ); // !TBD
+ if( m_config->showDurations() == ShowDurations::Never )
+ xml.writeAttribute( "time", "" );
+ else
+ xml.writeAttribute( "time", suiteTime );
+ xml.writeAttribute( "timestamp", getCurrentTimestamp() );
+
+ // Write properties if there are any
+ if (m_config->hasTestFilters() || m_config->rngSeed() != 0) {
+ auto properties = xml.scopedElement("properties");
+ if (m_config->hasTestFilters()) {
+ xml.scopedElement("property")
+ .writeAttribute("name", "filters")
+ .writeAttribute("value", serializeFilters(m_config->getTestsOrTags()));
+ }
+ if (m_config->rngSeed() != 0) {
+ xml.scopedElement("property")
+ .writeAttribute("name", "random-seed")
+ .writeAttribute("value", m_config->rngSeed());
+ }
+ }
+
+ // Write test cases
+ for( auto const& child : groupNode.children )
+ writeTestCase( *child );
+
+ xml.scopedElement( "system-out" ).writeText( trim( stdOutForSuite ), XmlFormatting::Newline );
+ xml.scopedElement( "system-err" ).writeText( trim( stdErrForSuite ), XmlFormatting::Newline );
+ }
+
+ void JunitReporter::writeTestCase( TestCaseNode const& testCaseNode ) {
+ TestCaseStats const& stats = testCaseNode.value;
+
+ // All test cases have exactly one section - which represents the
+ // test case itself. That section may have 0-n nested sections
+ assert( testCaseNode.children.size() == 1 );
+ SectionNode const& rootSection = *testCaseNode.children.front();
+
+ std::string className = stats.testInfo.className;
+
+ if( className.empty() ) {
+ className = fileNameTag(stats.testInfo.tags);
+ if ( className.empty() )
+ className = "global";
+ }
+
+ if ( !m_config->name().empty() )
+ className = m_config->name() + "." + className;
+
+ writeSection( className, "", rootSection );
+ }
+
+ void JunitReporter::writeSection( std::string const& className,
+ std::string const& rootName,
+ SectionNode const& sectionNode ) {
+ std::string name = trim( sectionNode.stats.sectionInfo.name );
+ if( !rootName.empty() )
+ name = rootName + '/' + name;
+
+ if( !sectionNode.assertions.empty() ||
+ !sectionNode.stdOut.empty() ||
+ !sectionNode.stdErr.empty() ) {
+ XmlWriter::ScopedElement e = xml.scopedElement( "testcase" );
+ if( className.empty() ) {
+ xml.writeAttribute( "classname", name );
+ xml.writeAttribute( "name", "root" );
+ }
+ else {
+ xml.writeAttribute( "classname", className );
+ xml.writeAttribute( "name", name );
+ }
+ xml.writeAttribute( "time", ::Catch::Detail::stringify( sectionNode.stats.durationInSeconds ) );
+
+ writeAssertions( sectionNode );
+
+ if( !sectionNode.stdOut.empty() )
+ xml.scopedElement( "system-out" ).writeText( trim( sectionNode.stdOut ), XmlFormatting::Newline );
+ if( !sectionNode.stdErr.empty() )
+ xml.scopedElement( "system-err" ).writeText( trim( sectionNode.stdErr ), XmlFormatting::Newline );
+ }
+ for( auto const& childNode : sectionNode.childSections )
+ if( className.empty() )
+ writeSection( name, "", *childNode );
+ else
+ writeSection( className, name, *childNode );
+ }
+
+ void JunitReporter::writeAssertions( SectionNode const& sectionNode ) {
+ for( auto const& assertion : sectionNode.assertions )
+ writeAssertion( assertion );
+ }
+
+ void JunitReporter::writeAssertion( AssertionStats const& stats ) {
+ AssertionResult const& result = stats.assertionResult;
+ if( !result.isOk() ) {
+ std::string elementName;
+ switch( result.getResultType() ) {
+ case ResultWas::ThrewException:
+ case ResultWas::FatalErrorCondition:
+ elementName = "error";
+ break;
+ case ResultWas::ExplicitFailure:
+ case ResultWas::ExpressionFailed:
+ case ResultWas::DidntThrowException:
+ elementName = "failure";
+ break;
+
+ // We should never see these here:
+ case ResultWas::Info:
+ case ResultWas::Warning:
+ case ResultWas::Ok:
+ case ResultWas::Unknown:
+ case ResultWas::FailureBit:
+ case ResultWas::Exception:
+ elementName = "internalError";
+ break;
+ }
+
+ XmlWriter::ScopedElement e = xml.scopedElement( elementName );
+
+ xml.writeAttribute( "message", result.getExpression() );
+ xml.writeAttribute( "type", result.getTestMacroName() );
+
+ ReusableStringStream rss;
+ if (stats.totals.assertions.total() > 0) {
+ rss << "FAILED" << ":\n";
+ if (result.hasExpression()) {
+ rss << " ";
+ rss << result.getExpressionInMacro();
+ rss << '\n';
+ }
+ if (result.hasExpandedExpression()) {
+ rss << "with expansion:\n";
+ rss << Column(result.getExpandedExpression()).indent(2) << '\n';
+ }
+ } else {
+ rss << '\n';
+ }
+
+ if( !result.getMessage().empty() )
+ rss << result.getMessage() << '\n';
+ for( auto const& msg : stats.infoMessages )
+ if( msg.type == ResultWas::Info )
+ rss << msg.message << '\n';
+
+ rss << "at " << result.getSourceInfo();
+ xml.writeText( rss.str(), XmlFormatting::Newline );
+ }
+ }
+
+ CATCH_REGISTER_REPORTER( "junit", JunitReporter )
+
+} // end namespace Catch
+// end catch_reporter_junit.cpp
+// start catch_reporter_listening.cpp
+
+#include <cassert>
+
+namespace Catch {
+
+ ListeningReporter::ListeningReporter() {
+ // We will assume that listeners will always want all assertions
+ m_preferences.shouldReportAllAssertions = true;
+ }
+
+ void ListeningReporter::addListener( IStreamingReporterPtr&& listener ) {
+ m_listeners.push_back( std::move( listener ) );
+ }
+
+ void ListeningReporter::addReporter(IStreamingReporterPtr&& reporter) {
+ assert(!m_reporter && "Listening reporter can wrap only 1 real reporter");
+ m_reporter = std::move( reporter );
+ m_preferences.shouldRedirectStdOut = m_reporter->getPreferences().shouldRedirectStdOut;
+ }
+
+ ReporterPreferences ListeningReporter::getPreferences() const {
+ return m_preferences;
+ }
+
+ std::set<Verbosity> ListeningReporter::getSupportedVerbosities() {
+ return std::set<Verbosity>{ };
+ }
+
+ void ListeningReporter::noMatchingTestCases( std::string const& spec ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->noMatchingTestCases( spec );
+ }
+ m_reporter->noMatchingTestCases( spec );
+ }
+
+ void ListeningReporter::reportInvalidArguments(std::string const&arg){
+ for ( auto const& listener : m_listeners ) {
+ listener->reportInvalidArguments( arg );
+ }
+ m_reporter->reportInvalidArguments( arg );
+ }
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void ListeningReporter::benchmarkPreparing( std::string const& name ) {
+ for (auto const& listener : m_listeners) {
+ listener->benchmarkPreparing(name);
+ }
+ m_reporter->benchmarkPreparing(name);
+ }
+ void ListeningReporter::benchmarkStarting( BenchmarkInfo const& benchmarkInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->benchmarkStarting( benchmarkInfo );
+ }
+ m_reporter->benchmarkStarting( benchmarkInfo );
+ }
+ void ListeningReporter::benchmarkEnded( BenchmarkStats<> const& benchmarkStats ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->benchmarkEnded( benchmarkStats );
+ }
+ m_reporter->benchmarkEnded( benchmarkStats );
+ }
+
+ void ListeningReporter::benchmarkFailed( std::string const& error ) {
+ for (auto const& listener : m_listeners) {
+ listener->benchmarkFailed(error);
+ }
+ m_reporter->benchmarkFailed(error);
+ }
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ void ListeningReporter::testRunStarting( TestRunInfo const& testRunInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testRunStarting( testRunInfo );
+ }
+ m_reporter->testRunStarting( testRunInfo );
+ }
+
+ void ListeningReporter::testGroupStarting( GroupInfo const& groupInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testGroupStarting( groupInfo );
+ }
+ m_reporter->testGroupStarting( groupInfo );
+ }
+
+ void ListeningReporter::testCaseStarting( TestCaseInfo const& testInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testCaseStarting( testInfo );
+ }
+ m_reporter->testCaseStarting( testInfo );
+ }
+
+ void ListeningReporter::sectionStarting( SectionInfo const& sectionInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->sectionStarting( sectionInfo );
+ }
+ m_reporter->sectionStarting( sectionInfo );
+ }
+
+ void ListeningReporter::assertionStarting( AssertionInfo const& assertionInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->assertionStarting( assertionInfo );
+ }
+ m_reporter->assertionStarting( assertionInfo );
+ }
+
+ // The return value indicates if the messages buffer should be cleared:
+ bool ListeningReporter::assertionEnded( AssertionStats const& assertionStats ) {
+ for( auto const& listener : m_listeners ) {
+ static_cast<void>( listener->assertionEnded( assertionStats ) );
+ }
+ return m_reporter->assertionEnded( assertionStats );
+ }
+
+ void ListeningReporter::sectionEnded( SectionStats const& sectionStats ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->sectionEnded( sectionStats );
+ }
+ m_reporter->sectionEnded( sectionStats );
+ }
+
+ void ListeningReporter::testCaseEnded( TestCaseStats const& testCaseStats ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testCaseEnded( testCaseStats );
+ }
+ m_reporter->testCaseEnded( testCaseStats );
+ }
+
+ void ListeningReporter::testGroupEnded( TestGroupStats const& testGroupStats ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testGroupEnded( testGroupStats );
+ }
+ m_reporter->testGroupEnded( testGroupStats );
+ }
+
+ void ListeningReporter::testRunEnded( TestRunStats const& testRunStats ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testRunEnded( testRunStats );
+ }
+ m_reporter->testRunEnded( testRunStats );
+ }
+
+ void ListeningReporter::skipTest( TestCaseInfo const& testInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->skipTest( testInfo );
+ }
+ m_reporter->skipTest( testInfo );
+ }
+
+ bool ListeningReporter::isMulti() const {
+ return true;
+ }
+
+} // end namespace Catch
+// end catch_reporter_listening.cpp
+// start catch_reporter_xml.cpp
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4061) // Not all labels are EXPLICITLY handled in switch
+ // Note that 4062 (not all labels are handled
+ // and default is missing) is enabled
+#endif
+
+namespace Catch {
+ XmlReporter::XmlReporter( ReporterConfig const& _config )
+ : StreamingReporterBase( _config ),
+ m_xml(_config.stream())
+ {
+ m_reporterPrefs.shouldRedirectStdOut = true;
+ m_reporterPrefs.shouldReportAllAssertions = true;
+ }
+
+ XmlReporter::~XmlReporter() = default;
+
+ std::string XmlReporter::getDescription() {
+ return "Reports test results as an XML document";
+ }
+
+ std::string XmlReporter::getStylesheetRef() const {
+ return std::string();
+ }
+
+ void XmlReporter::writeSourceInfo( SourceLineInfo const& sourceInfo ) {
+ m_xml
+ .writeAttribute( "filename", sourceInfo.file )
+ .writeAttribute( "line", sourceInfo.line );
+ }
+
+ void XmlReporter::noMatchingTestCases( std::string const& s ) {
+ StreamingReporterBase::noMatchingTestCases( s );
+ }
+
+ void XmlReporter::testRunStarting( TestRunInfo const& testInfo ) {
+ StreamingReporterBase::testRunStarting( testInfo );
+ std::string stylesheetRef = getStylesheetRef();
+ if( !stylesheetRef.empty() )
+ m_xml.writeStylesheetRef( stylesheetRef );
+ m_xml.startElement( "Catch" );
+ if( !m_config->name().empty() )
+ m_xml.writeAttribute( "name", m_config->name() );
+ if (m_config->testSpec().hasFilters())
+ m_xml.writeAttribute( "filters", serializeFilters( m_config->getTestsOrTags() ) );
+ if( m_config->rngSeed() != 0 )
+ m_xml.scopedElement( "Randomness" )
+ .writeAttribute( "seed", m_config->rngSeed() );
+ }
+
+ void XmlReporter::testGroupStarting( GroupInfo const& groupInfo ) {
+ StreamingReporterBase::testGroupStarting( groupInfo );
+ m_xml.startElement( "Group" )
+ .writeAttribute( "name", groupInfo.name );
+ }
+
+ void XmlReporter::testCaseStarting( TestCaseInfo const& testInfo ) {
+ StreamingReporterBase::testCaseStarting(testInfo);
+ m_xml.startElement( "TestCase" )
+ .writeAttribute( "name", trim( testInfo.name ) )
+ .writeAttribute( "description", testInfo.description )
+ .writeAttribute( "tags", testInfo.tagsAsString() );
+
+ writeSourceInfo( testInfo.lineInfo );
+
+ if ( m_config->showDurations() == ShowDurations::Always )
+ m_testCaseTimer.start();
+ m_xml.ensureTagClosed();
+ }
+
+ void XmlReporter::sectionStarting( SectionInfo const& sectionInfo ) {
+ StreamingReporterBase::sectionStarting( sectionInfo );
+ if( m_sectionDepth++ > 0 ) {
+ m_xml.startElement( "Section" )
+ .writeAttribute( "name", trim( sectionInfo.name ) );
+ writeSourceInfo( sectionInfo.lineInfo );
+ m_xml.ensureTagClosed();
+ }
+ }
+
+ void XmlReporter::assertionStarting( AssertionInfo const& ) { }
+
+ bool XmlReporter::assertionEnded( AssertionStats const& assertionStats ) {
+
+ AssertionResult const& result = assertionStats.assertionResult;
+
+ bool includeResults = m_config->includeSuccessfulResults() || !result.isOk();
+
+ if( includeResults || result.getResultType() == ResultWas::Warning ) {
+ // Print any info messages in <Info> tags.
+ for( auto const& msg : assertionStats.infoMessages ) {
+ if( msg.type == ResultWas::Info && includeResults ) {
+ m_xml.scopedElement( "Info" )
+ .writeText( msg.message );
+ } else if ( msg.type == ResultWas::Warning ) {
+ m_xml.scopedElement( "Warning" )
+ .writeText( msg.message );
+ }
+ }
+ }
+
+ // Drop out if result was successful but we're not printing them.
+ if( !includeResults && result.getResultType() != ResultWas::Warning )
+ return true;
+
+ // Print the expression if there is one.
+ if( result.hasExpression() ) {
+ m_xml.startElement( "Expression" )
+ .writeAttribute( "success", result.succeeded() )
+ .writeAttribute( "type", result.getTestMacroName() );
+
+ writeSourceInfo( result.getSourceInfo() );
+
+ m_xml.scopedElement( "Original" )
+ .writeText( result.getExpression() );
+ m_xml.scopedElement( "Expanded" )
+ .writeText( result.getExpandedExpression() );
+ }
+
+ // And... Print a result applicable to each result type.
+ switch( result.getResultType() ) {
+ case ResultWas::ThrewException:
+ m_xml.startElement( "Exception" );
+ writeSourceInfo( result.getSourceInfo() );
+ m_xml.writeText( result.getMessage() );
+ m_xml.endElement();
+ break;
+ case ResultWas::FatalErrorCondition:
+ m_xml.startElement( "FatalErrorCondition" );
+ writeSourceInfo( result.getSourceInfo() );
+ m_xml.writeText( result.getMessage() );
+ m_xml.endElement();
+ break;
+ case ResultWas::Info:
+ m_xml.scopedElement( "Info" )
+ .writeText( result.getMessage() );
+ break;
+ case ResultWas::Warning:
+ // Warning will already have been written
+ break;
+ case ResultWas::ExplicitFailure:
+ m_xml.startElement( "Failure" );
+ writeSourceInfo( result.getSourceInfo() );
+ m_xml.writeText( result.getMessage() );
+ m_xml.endElement();
+ break;
+ default:
+ break;
+ }
+
+ if( result.hasExpression() )
+ m_xml.endElement();
+
+ return true;
+ }
+
+ void XmlReporter::sectionEnded( SectionStats const& sectionStats ) {
+ StreamingReporterBase::sectionEnded( sectionStats );
+ if( --m_sectionDepth > 0 ) {
+ XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResults" );
+ e.writeAttribute( "successes", sectionStats.assertions.passed );
+ e.writeAttribute( "failures", sectionStats.assertions.failed );
+ e.writeAttribute( "expectedFailures", sectionStats.assertions.failedButOk );
+
+ if ( m_config->showDurations() == ShowDurations::Always )
+ e.writeAttribute( "durationInSeconds", sectionStats.durationInSeconds );
+
+ m_xml.endElement();
+ }
+ }
+
+ void XmlReporter::testCaseEnded( TestCaseStats const& testCaseStats ) {
+ StreamingReporterBase::testCaseEnded( testCaseStats );
+ XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResult" );
+ e.writeAttribute( "success", testCaseStats.totals.assertions.allOk() );
+
+ if ( m_config->showDurations() == ShowDurations::Always )
+ e.writeAttribute( "durationInSeconds", m_testCaseTimer.getElapsedSeconds() );
+
+ if( !testCaseStats.stdOut.empty() )
+ m_xml.scopedElement( "StdOut" ).writeText( trim( testCaseStats.stdOut ), XmlFormatting::Newline );
+ if( !testCaseStats.stdErr.empty() )
+ m_xml.scopedElement( "StdErr" ).writeText( trim( testCaseStats.stdErr ), XmlFormatting::Newline );
+
+ m_xml.endElement();
+ }
+
+ void XmlReporter::testGroupEnded( TestGroupStats const& testGroupStats ) {
+ StreamingReporterBase::testGroupEnded( testGroupStats );
+ // TODO: Check testGroupStats.aborting and act accordingly.
+ m_xml.scopedElement( "OverallResults" )
+ .writeAttribute( "successes", testGroupStats.totals.assertions.passed )
+ .writeAttribute( "failures", testGroupStats.totals.assertions.failed )
+ .writeAttribute( "expectedFailures", testGroupStats.totals.assertions.failedButOk );
+ m_xml.endElement();
+ }
+
+ void XmlReporter::testRunEnded( TestRunStats const& testRunStats ) {
+ StreamingReporterBase::testRunEnded( testRunStats );
+ m_xml.scopedElement( "OverallResults" )
+ .writeAttribute( "successes", testRunStats.totals.assertions.passed )
+ .writeAttribute( "failures", testRunStats.totals.assertions.failed )
+ .writeAttribute( "expectedFailures", testRunStats.totals.assertions.failedButOk );
+ m_xml.endElement();
+ }
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void XmlReporter::benchmarkPreparing(std::string const& name) {
+ m_xml.startElement("BenchmarkResults")
+ .writeAttribute("name", name);
+ }
+
+ void XmlReporter::benchmarkStarting(BenchmarkInfo const &info) {
+ m_xml.writeAttribute("samples", info.samples)
+ .writeAttribute("resamples", info.resamples)
+ .writeAttribute("iterations", info.iterations)
+ .writeAttribute("clockResolution", info.clockResolution)
+ .writeAttribute("estimatedDuration", info.estimatedDuration)
+ .writeComment("All values in nano seconds");
+ }
+
+ void XmlReporter::benchmarkEnded(BenchmarkStats<> const& benchmarkStats) {
+ m_xml.startElement("mean")
+ .writeAttribute("value", benchmarkStats.mean.point.count())
+ .writeAttribute("lowerBound", benchmarkStats.mean.lower_bound.count())
+ .writeAttribute("upperBound", benchmarkStats.mean.upper_bound.count())
+ .writeAttribute("ci", benchmarkStats.mean.confidence_interval);
+ m_xml.endElement();
+ m_xml.startElement("standardDeviation")
+ .writeAttribute("value", benchmarkStats.standardDeviation.point.count())
+ .writeAttribute("lowerBound", benchmarkStats.standardDeviation.lower_bound.count())
+ .writeAttribute("upperBound", benchmarkStats.standardDeviation.upper_bound.count())
+ .writeAttribute("ci", benchmarkStats.standardDeviation.confidence_interval);
+ m_xml.endElement();
+ m_xml.startElement("outliers")
+ .writeAttribute("variance", benchmarkStats.outlierVariance)
+ .writeAttribute("lowMild", benchmarkStats.outliers.low_mild)
+ .writeAttribute("lowSevere", benchmarkStats.outliers.low_severe)
+ .writeAttribute("highMild", benchmarkStats.outliers.high_mild)
+ .writeAttribute("highSevere", benchmarkStats.outliers.high_severe);
+ m_xml.endElement();
+ m_xml.endElement();
+ }
+
+ void XmlReporter::benchmarkFailed(std::string const &error) {
+ m_xml.scopedElement("failed").
+ writeAttribute("message", error);
+ m_xml.endElement();
+ }
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ CATCH_REGISTER_REPORTER( "xml", XmlReporter )
+
+} // end namespace Catch
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+// end catch_reporter_xml.cpp
+
+namespace Catch {
+ LeakDetector leakDetector;
+}
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+// end catch_impl.hpp
+#endif
+
+#ifdef CATCH_CONFIG_MAIN
+// start catch_default_main.hpp
+
+#ifndef __OBJC__
+
+#if defined(CATCH_CONFIG_WCHAR) && defined(CATCH_PLATFORM_WINDOWS) && defined(_UNICODE) && !defined(DO_NOT_USE_WMAIN)
+// Standard C/C++ Win32 Unicode wmain entry point
+extern "C" int wmain (int argc, wchar_t * argv[], wchar_t * []) {
+#else
+// Standard C/C++ main entry point
+int main (int argc, char * argv[]) {
+#endif
+
+ return Catch::Session().run( argc, argv );
+}
+
+#else // __OBJC__
+
+// Objective-C entry point
+int main (int argc, char * const argv[]) {
+#if !CATCH_ARC_ENABLED
+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+#endif
+
+ Catch::registerTestMethods();
+ int result = Catch::Session().run( argc, (char**)argv );
+
+#if !CATCH_ARC_ENABLED
+ [pool drain];
+#endif
+
+ return result;
+}
+
+#endif // __OBJC__
+
+// end catch_default_main.hpp
+#endif
+
+#if !defined(CATCH_CONFIG_IMPL_ONLY)
+
+#ifdef CLARA_CONFIG_MAIN_NOT_DEFINED
+# undef CLARA_CONFIG_MAIN
+#endif
+
+#if !defined(CATCH_CONFIG_DISABLE)
+//////
+// If this config identifier is defined then all CATCH macros are prefixed with CATCH_
+#ifdef CATCH_CONFIG_PREFIX_ALL
+
+#define CATCH_REQUIRE( ... ) INTERNAL_CATCH_TEST( "CATCH_REQUIRE", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define CATCH_REQUIRE_FALSE( ... ) INTERNAL_CATCH_TEST( "CATCH_REQUIRE_FALSE", Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, __VA_ARGS__ )
+
+#define CATCH_REQUIRE_THROWS( ... ) INTERNAL_CATCH_THROWS( "CATCH_REQUIRE_THROWS", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr )
+#define CATCH_REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CATCH_REQUIRE_THROWS_WITH", Catch::ResultDisposition::Normal, matcher, expr )
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CATCH_REQUIRE_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::Normal, matcher, expr )
+#endif// CATCH_CONFIG_DISABLE_MATCHERS
+#define CATCH_REQUIRE_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CATCH_REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+
+#define CATCH_CHECK( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CATCH_CHECK_FALSE( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK_FALSE", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, __VA_ARGS__ )
+#define CATCH_CHECKED_IF( ... ) INTERNAL_CATCH_IF( "CATCH_CHECKED_IF", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CATCH_CHECKED_ELSE( ... ) INTERNAL_CATCH_ELSE( "CATCH_CHECKED_ELSE", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CATCH_CHECK_NOFAIL( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK_NOFAIL", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, __VA_ARGS__ )
+
+#define CATCH_CHECK_THROWS( ... ) INTERNAL_CATCH_THROWS( "CATCH_CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CATCH_CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr )
+#define CATCH_CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CATCH_CHECK_THROWS_WITH", Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CATCH_CHECK_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define CATCH_CHECK_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CATCH_CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CATCH_CHECK_THAT", matcher, Catch::ResultDisposition::ContinueOnFailure, arg )
+
+#define CATCH_REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CATCH_REQUIRE_THAT", matcher, Catch::ResultDisposition::Normal, arg )
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+
+#define CATCH_INFO( msg ) INTERNAL_CATCH_INFO( "CATCH_INFO", msg )
+#define CATCH_UNSCOPED_INFO( msg ) INTERNAL_CATCH_UNSCOPED_INFO( "CATCH_UNSCOPED_INFO", msg )
+#define CATCH_WARN( msg ) INTERNAL_CATCH_MSG( "CATCH_WARN", Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, msg )
+#define CATCH_CAPTURE( ... ) INTERNAL_CATCH_CAPTURE( INTERNAL_CATCH_UNIQUE_NAME(capturer), "CATCH_CAPTURE",__VA_ARGS__ )
+
+#define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ )
+#define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define CATCH_METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ )
+#define CATCH_REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ )
+#define CATCH_SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ )
+#define CATCH_DYNAMIC_SECTION( ... ) INTERNAL_CATCH_DYNAMIC_SECTION( __VA_ARGS__ )
+#define CATCH_FAIL( ... ) INTERNAL_CATCH_MSG( "CATCH_FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define CATCH_FAIL_CHECK( ... ) INTERNAL_CATCH_MSG( "CATCH_FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CATCH_SUCCEED( ... ) INTERNAL_CATCH_MSG( "CATCH_SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+
+#define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE()
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define CATCH_TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG( __VA_ARGS__ )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ )
+#else
+#define CATCH_TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG( __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE( __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) )
+#endif
+
+#if !defined(CATCH_CONFIG_RUNTIME_STATIC_REQUIRE)
+#define CATCH_STATIC_REQUIRE( ... ) static_assert( __VA_ARGS__ , #__VA_ARGS__ ); CATCH_SUCCEED( #__VA_ARGS__ )
+#define CATCH_STATIC_REQUIRE_FALSE( ... ) static_assert( !(__VA_ARGS__), "!(" #__VA_ARGS__ ")" ); CATCH_SUCCEED( #__VA_ARGS__ )
+#else
+#define CATCH_STATIC_REQUIRE( ... ) CATCH_REQUIRE( __VA_ARGS__ )
+#define CATCH_STATIC_REQUIRE_FALSE( ... ) CATCH_REQUIRE_FALSE( __VA_ARGS__ )
+#endif
+
+// "BDD-style" convenience wrappers
+#define CATCH_SCENARIO( ... ) CATCH_TEST_CASE( "Scenario: " __VA_ARGS__ )
+#define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ )
+#define CATCH_GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " Given: " << desc )
+#define CATCH_AND_GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( "And given: " << desc )
+#define CATCH_WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " When: " << desc )
+#define CATCH_AND_WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " And when: " << desc )
+#define CATCH_THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " Then: " << desc )
+#define CATCH_AND_THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " And: " << desc )
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+#define CATCH_BENCHMARK(...) \
+ INTERNAL_CATCH_BENCHMARK(INTERNAL_CATCH_UNIQUE_NAME(____C_A_T_C_H____B_E_N_C_H____), INTERNAL_CATCH_GET_1_ARG(__VA_ARGS__,,), INTERNAL_CATCH_GET_2_ARG(__VA_ARGS__,,))
+#define CATCH_BENCHMARK_ADVANCED(name) \
+ INTERNAL_CATCH_BENCHMARK_ADVANCED(INTERNAL_CATCH_UNIQUE_NAME(____C_A_T_C_H____B_E_N_C_H____), name)
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+// If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required
+#else
+
+#define REQUIRE( ... ) INTERNAL_CATCH_TEST( "REQUIRE", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define REQUIRE_FALSE( ... ) INTERNAL_CATCH_TEST( "REQUIRE_FALSE", Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, __VA_ARGS__ )
+
+#define REQUIRE_THROWS( ... ) INTERNAL_CATCH_THROWS( "REQUIRE_THROWS", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr )
+#define REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "REQUIRE_THROWS_WITH", Catch::ResultDisposition::Normal, matcher, expr )
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "REQUIRE_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::Normal, matcher, expr )
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define REQUIRE_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+
+#define CHECK( ... ) INTERNAL_CATCH_TEST( "CHECK", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CHECK_FALSE( ... ) INTERNAL_CATCH_TEST( "CHECK_FALSE", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, __VA_ARGS__ )
+#define CHECKED_IF( ... ) INTERNAL_CATCH_IF( "CHECKED_IF", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CHECKED_ELSE( ... ) INTERNAL_CATCH_ELSE( "CHECKED_ELSE", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CHECK_NOFAIL( ... ) INTERNAL_CATCH_TEST( "CHECK_NOFAIL", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, __VA_ARGS__ )
+
+#define CHECK_THROWS( ... ) INTERNAL_CATCH_THROWS( "CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr )
+#define CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CHECK_THROWS_WITH", Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CHECK_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define CHECK_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CHECK_THAT", matcher, Catch::ResultDisposition::ContinueOnFailure, arg )
+
+#define REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "REQUIRE_THAT", matcher, Catch::ResultDisposition::Normal, arg )
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+
+#define INFO( msg ) INTERNAL_CATCH_INFO( "INFO", msg )
+#define UNSCOPED_INFO( msg ) INTERNAL_CATCH_UNSCOPED_INFO( "UNSCOPED_INFO", msg )
+#define WARN( msg ) INTERNAL_CATCH_MSG( "WARN", Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, msg )
+#define CAPTURE( ... ) INTERNAL_CATCH_CAPTURE( INTERNAL_CATCH_UNIQUE_NAME(capturer), "CAPTURE",__VA_ARGS__ )
+
+#define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ )
+#define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ )
+#define REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ )
+#define SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ )
+#define DYNAMIC_SECTION( ... ) INTERNAL_CATCH_DYNAMIC_SECTION( __VA_ARGS__ )
+#define FAIL( ... ) INTERNAL_CATCH_MSG( "FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define FAIL_CHECK( ... ) INTERNAL_CATCH_MSG( "FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define SUCCEED( ... ) INTERNAL_CATCH_MSG( "SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE()
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG( __VA_ARGS__ )
+#define TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ )
+#define TEMPLATE_LIST_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE(__VA_ARGS__)
+#define TEMPLATE_LIST_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#else
+#define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ ) )
+#define TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG( __VA_ARGS__ ) )
+#define TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ ) )
+#define TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) )
+#define TEMPLATE_PRODUCT_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE( __VA_ARGS__ ) )
+#define TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ ) )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ ) )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) )
+#define TEMPLATE_LIST_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE( __VA_ARGS__ ) )
+#define TEMPLATE_LIST_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD( className, __VA_ARGS__ ) )
+#endif
+
+#if !defined(CATCH_CONFIG_RUNTIME_STATIC_REQUIRE)
+#define STATIC_REQUIRE( ... ) static_assert( __VA_ARGS__, #__VA_ARGS__ ); SUCCEED( #__VA_ARGS__ )
+#define STATIC_REQUIRE_FALSE( ... ) static_assert( !(__VA_ARGS__), "!(" #__VA_ARGS__ ")" ); SUCCEED( "!(" #__VA_ARGS__ ")" )
+#else
+#define STATIC_REQUIRE( ... ) REQUIRE( __VA_ARGS__ )
+#define STATIC_REQUIRE_FALSE( ... ) REQUIRE_FALSE( __VA_ARGS__ )
+#endif
+
+#endif
+
+#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature )
+
+// "BDD-style" convenience wrappers
+#define SCENARIO( ... ) TEST_CASE( "Scenario: " __VA_ARGS__ )
+#define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ )
+
+#define GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " Given: " << desc )
+#define AND_GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( "And given: " << desc )
+#define WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " When: " << desc )
+#define AND_WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " And when: " << desc )
+#define THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " Then: " << desc )
+#define AND_THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " And: " << desc )
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+#define BENCHMARK(...) \
+ INTERNAL_CATCH_BENCHMARK(INTERNAL_CATCH_UNIQUE_NAME(____C_A_T_C_H____B_E_N_C_H____), INTERNAL_CATCH_GET_1_ARG(__VA_ARGS__,,), INTERNAL_CATCH_GET_2_ARG(__VA_ARGS__,,))
+#define BENCHMARK_ADVANCED(name) \
+ INTERNAL_CATCH_BENCHMARK_ADVANCED(INTERNAL_CATCH_UNIQUE_NAME(____C_A_T_C_H____B_E_N_C_H____), name)
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+using Catch::Detail::Approx;
+
+#else // CATCH_CONFIG_DISABLE
+
+//////
+// If this config identifier is defined then all CATCH macros are prefixed with CATCH_
+#ifdef CATCH_CONFIG_PREFIX_ALL
+
+#define CATCH_REQUIRE( ... ) (void)(0)
+#define CATCH_REQUIRE_FALSE( ... ) (void)(0)
+
+#define CATCH_REQUIRE_THROWS( ... ) (void)(0)
+#define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) (void)(0)
+#define CATCH_REQUIRE_THROWS_WITH( expr, matcher ) (void)(0)
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0)
+#endif// CATCH_CONFIG_DISABLE_MATCHERS
+#define CATCH_REQUIRE_NOTHROW( ... ) (void)(0)
+
+#define CATCH_CHECK( ... ) (void)(0)
+#define CATCH_CHECK_FALSE( ... ) (void)(0)
+#define CATCH_CHECKED_IF( ... ) if (__VA_ARGS__)
+#define CATCH_CHECKED_ELSE( ... ) if (!(__VA_ARGS__))
+#define CATCH_CHECK_NOFAIL( ... ) (void)(0)
+
+#define CATCH_CHECK_THROWS( ... ) (void)(0)
+#define CATCH_CHECK_THROWS_AS( expr, exceptionType ) (void)(0)
+#define CATCH_CHECK_THROWS_WITH( expr, matcher ) (void)(0)
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0)
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define CATCH_CHECK_NOTHROW( ... ) (void)(0)
+
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_CHECK_THAT( arg, matcher ) (void)(0)
+
+#define CATCH_REQUIRE_THAT( arg, matcher ) (void)(0)
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+
+#define CATCH_INFO( msg ) (void)(0)
+#define CATCH_UNSCOPED_INFO( msg ) (void)(0)
+#define CATCH_WARN( msg ) (void)(0)
+#define CATCH_CAPTURE( msg ) (void)(0)
+
+#define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ))
+#define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ))
+#define CATCH_METHOD_AS_TEST_CASE( method, ... )
+#define CATCH_REGISTER_TEST_CASE( Function, ... ) (void)(0)
+#define CATCH_SECTION( ... )
+#define CATCH_DYNAMIC_SECTION( ... )
+#define CATCH_FAIL( ... ) (void)(0)
+#define CATCH_FAIL_CHECK( ... ) (void)(0)
+#define CATCH_SUCCEED( ... ) (void)(0)
+
+#define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ))
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define CATCH_TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(__VA_ARGS__)
+#define CATCH_TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(__VA_ARGS__)
+#define CATCH_TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION(className, __VA_ARGS__)
+#define CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION(className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE( ... ) CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#else
+#define CATCH_TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(__VA_ARGS__) )
+#define CATCH_TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(__VA_ARGS__) )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION(className, __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION(className, __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE( ... ) CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#endif
+
+// "BDD-style" convenience wrappers
+#define CATCH_SCENARIO( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ))
+#define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), className )
+#define CATCH_GIVEN( desc )
+#define CATCH_AND_GIVEN( desc )
+#define CATCH_WHEN( desc )
+#define CATCH_AND_WHEN( desc )
+#define CATCH_THEN( desc )
+#define CATCH_AND_THEN( desc )
+
+#define CATCH_STATIC_REQUIRE( ... ) (void)(0)
+#define CATCH_STATIC_REQUIRE_FALSE( ... ) (void)(0)
+
+// If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required
+#else
+
+#define REQUIRE( ... ) (void)(0)
+#define REQUIRE_FALSE( ... ) (void)(0)
+
+#define REQUIRE_THROWS( ... ) (void)(0)
+#define REQUIRE_THROWS_AS( expr, exceptionType ) (void)(0)
+#define REQUIRE_THROWS_WITH( expr, matcher ) (void)(0)
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0)
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define REQUIRE_NOTHROW( ... ) (void)(0)
+
+#define CHECK( ... ) (void)(0)
+#define CHECK_FALSE( ... ) (void)(0)
+#define CHECKED_IF( ... ) if (__VA_ARGS__)
+#define CHECKED_ELSE( ... ) if (!(__VA_ARGS__))
+#define CHECK_NOFAIL( ... ) (void)(0)
+
+#define CHECK_THROWS( ... ) (void)(0)
+#define CHECK_THROWS_AS( expr, exceptionType ) (void)(0)
+#define CHECK_THROWS_WITH( expr, matcher ) (void)(0)
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0)
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define CHECK_NOTHROW( ... ) (void)(0)
+
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CHECK_THAT( arg, matcher ) (void)(0)
+
+#define REQUIRE_THAT( arg, matcher ) (void)(0)
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+
+#define INFO( msg ) (void)(0)
+#define UNSCOPED_INFO( msg ) (void)(0)
+#define WARN( msg ) (void)(0)
+#define CAPTURE( msg ) (void)(0)
+
+#define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ))
+#define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ))
+#define METHOD_AS_TEST_CASE( method, ... )
+#define REGISTER_TEST_CASE( Function, ... ) (void)(0)
+#define SECTION( ... )
+#define DYNAMIC_SECTION( ... )
+#define FAIL( ... ) (void)(0)
+#define FAIL_CHECK( ... ) (void)(0)
+#define SUCCEED( ... ) (void)(0)
+#define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ))
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(__VA_ARGS__)
+#define TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(__VA_ARGS__)
+#define TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION(className, __VA_ARGS__)
+#define TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION(className, __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE( ... ) TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#else
+#define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(__VA_ARGS__) )
+#define TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(__VA_ARGS__) )
+#define TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION(className, __VA_ARGS__ ) )
+#define TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION(className, __VA_ARGS__ ) )
+#define TEMPLATE_PRODUCT_TEST_CASE( ... ) TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#endif
+
+#define STATIC_REQUIRE( ... ) (void)(0)
+#define STATIC_REQUIRE_FALSE( ... ) (void)(0)
+
+#endif
+
+#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION_NO_REG( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature )
+
+// "BDD-style" convenience wrappers
+#define SCENARIO( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ) )
+#define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), className )
+
+#define GIVEN( desc )
+#define AND_GIVEN( desc )
+#define WHEN( desc )
+#define AND_WHEN( desc )
+#define THEN( desc )
+#define AND_THEN( desc )
+
+using Catch::Detail::Approx;
+
+#endif
+
+#endif // ! CATCH_CONFIG_IMPL_ONLY
+
+// start catch_reenable_warnings.h
+
+
+#ifdef __clang__
+# ifdef __ICC // icpc defines the __clang__ macro
+# pragma warning(pop)
+# else
+# pragma clang diagnostic pop
+# endif
+#elif defined __GNUC__
+# pragma GCC diagnostic pop
+#endif
+
+// end catch_reenable_warnings.h
+// end catch.hpp
+#endif // TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED
+
diff --git a/gdb/cheri-compressed-cap/test/compression_test.sail b/gdb/cheri-compressed-cap/test/compression_test.sail
new file mode 100644
index 00000000000..878be1c333e
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/compression_test.sail
@@ -0,0 +1,33 @@
+/* Functions we want to test: */
+/* function capToBits(cap) : Capability -> CapBits */
+/* function capToMemBits(cap) : Capability -> CapBits */
+/* function capBitsToCapability(t, c) : (bool, CapBits) -> Capability */
+/* function memBitsToCapability(tag, b) : (bool, CapBits) -> Capability */
+/* function fastRepCheck(c, i) : (Capability, CapAddrBits) -> bool */
+/* function setCapBounds(cap, base, top) : (Capability, CapAddrBits, CapLenBits) -> (bool, Capability) */
+/* function getCapBounds(cap) : Capability -> (CapAddrInt, CapLen) */
+/* val getCapFlags : Capability -> CFlags
+ function getCapFlags(cap) = bool_to_bits(cap.flag_cap_mode) */
+/* function setCapPerms(cap, perms) : (Capability, bits(31)) -> Capability */
+/* function capToString (cap) -> string */
+register TestCap : Capability
+register TestAddr : CapAddrBits
+register TestLen : CapLenBits
+
+function main () : unit -> unit = {
+ TestCap = null_cap;
+ /* while (true) do { */
+ bits1 = capToBits(TestCap);
+ bits2 = capToMemBits(TestCap);
+ cap1 = capBitsToCapability(TestCap.tag, bits1);
+ cap2 = memBitsToCapability(TestCap.tag, bits2);
+ rep = fastRepCheck(TestCap, TestAddr);
+ (exact, cap) = setCapBounds(TestCap, TestAddr, TestLen);
+ (base, top) = getCapBounds(TestCap);
+ flags = getCapFlags(TestCap);
+ new_cap = setCapPerms(TestCap, ones()); /* rt_val[30..0] */
+ cap_str = capToString(TestCap);
+ len = getRepresentableLength(TestAddr);
+ mask = getRepresentableAlignmentMask(TestAddr);
+ /* } */
+}
diff --git a/gdb/cheri-compressed-cap/test/decode_inputs_128.cpp b/gdb/cheri-compressed-cap/test/decode_inputs_128.cpp
new file mode 100644
index 00000000000..aa799d04db8
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/decode_inputs_128.cpp
@@ -0,0 +1,5009 @@
+#include <cstdint>
+
+struct test_input{
+ uint64_t pesbt;
+ uint64_t cursor;
+};
+
+static struct test_input inputs[] = {
+ {0x305BDE7F5C0B8919, 0x47B6516348F5CCD3}, {0x6D78585424BEE4CC, 0x968A907B906DBBF5},
+ {0x19249C8A5C66D2A3, 0x849B1CD05BDCAED9}, {0x06EA4A4328249C83, 0xA973C5C6C0665616},
+ {0xC1135FD4C69D5E98, 0x49CA0FAB724BC004}, {0x4C16FA51864B667E, 0x498999C69940CA1D},
+ {0xE76D2BA5EC5BCABA, 0x1C67A27B8B7F5A83}, {0x94F2B0AE7DAD8A93, 0x09B040702776E481},
+ {0x1029DB06C030BF0B, 0xF188AEFD99BCD0AA}, {0x2257FAAE3574F07B, 0x8AFAF58BA2480810},
+ {0x729B14741239439E, 0x7095049B099C1BEF}, {0x984C729F9D1FF5E3, 0x52EAC400EF50538A},
+ {0x35B374EF36665A77, 0x933025C5250FD253}, {0x802F541414BA3C54, 0x6E9DC1C5F0A2F8C5},
+ {0xC2B86C565E998FDB, 0x3D330BC51EDA9CE6}, {0x5F51C919EB42E279, 0xA736CF6752DC6FC7},
+ {0xBF530BE7AA1C35B8, 0xFC204BD8316036F1}, {0x52280A931E6A78F4, 0xC452A6194C7D4920},
+ {0xDB7F9BE877618FA9, 0x17407E4D9B05F8BB}, {0xB0A56E67A8FF257C, 0x877F18FD0965C8F6},
+ {0xF454D91C54DB6D92, 0xD57C1F2E23EBF639}, {0x9F861D97A9458C4F, 0xFFEAFF1D8041721C},
+ {0xF9A5D2A7111F006D, 0xB116D39F44BC1B9C}, {0xA9C6BD94CBC20F85, 0x7E8450660EEC4FC9},
+ {0x0C956CE64451B4D9, 0x8934E1C00B6C8545}, {0xFD1A53FB2AF731A5, 0xB2DA2A18614B27E1},
+ {0x6B3558C17BD9822E, 0x0F6A66BC03E50030}, {0x7D92572AFD83DF06, 0x54679BE44C572098},
+ {0xBF75B5D68B9AD069, 0xE6C22DB93A78497F}, {0x8FA89F8527AE5514, 0xA380F45E2A4EE045},
+ {0xD1CE2BAA14C79148, 0x934BB9C2F0EB84D6}, {0x9C1F0A4BF8CD4920, 0x29CC0D64866B008A},
+ {0xF7E22151CA7A0098, 0x011C70D5AA7A570D}, {0xCF8456D9953F0D97, 0x27715D80A14DBCF2},
+ {0xB08490499791BDAF, 0xEFFF8761E956AAE8}, {0x943EE55FADEF5C59, 0x3B4186D78955CA75},
+ {0xC07A4E7208DFF9B0, 0xBAFA318B601E1689}, {0x5049A523B4932B67, 0x397ED3D19FFA145B},
+ {0xECFBD9547A4EE1BB, 0x272542AC57AF02EE}, {0xED63E8412C4B2CDE, 0x3091147F4205059C},
+ {0xBF2C91C5C70A53DB, 0x27D01B60E3E66F72}, {0xE8EA19DD2C7995ED, 0x8E250CFCEEE79532},
+ {0xF9412591D2ECA990, 0x65C9C5D24247F3AD}, {0x21B08B4CFD75B357, 0xF84761EFB6FE4367},
+ {0x666B0D32490A94DB, 0x32A9077BFF7C29F7}, {0x58ACF8D3B11FBCF3, 0x29876E614C2DF671},
+ {0xFB04C2C55BF97BBE, 0x88AFCDB40BB07F00}, {0xE7DB717CEDBC49DC, 0x0DFFB3E6D193A134},
+ {0x7E36D8D7D994FBEE, 0xC2E8701BBA1B8D9E}, {0xD4450BA81EC1AA84, 0x67F7A4084369E901},
+ {0x976D19DAF43CCCE0, 0xF1255CD1C8A4DA11}, {0xDF6D061E02FF05D1, 0x02793DFD78F49313},
+ {0x2253D3402BBC78D1, 0xA67E613156B8BEC7}, {0x227A29960C98DD2A, 0x2DED73655FC760AE},
+ {0x12FBA4928B9173FD, 0x872AFA94C9956889}, {0xAAF2C1D76ED714F7, 0x72E9BA2EB7677AA0},
+ {0x574FA7A21F59585A, 0x26F06BEE18B7CB2B}, {0xD13DF0D43E0D115A, 0xC6B48340E883CDF6},
+ {0xE11025CCD5102F3F, 0xC02DC9B739577173}, {0x58195978720294AE, 0x7B9281525AC0AA11},
+ {0x985720645A265CCC, 0x020B2283BD5C0A9A}, {0xAC18A6ADA7A7B5AF, 0x24812EDF5ABF1A3A},
+ {0xB9FC28BF6E465E9A, 0x9773C51056FEAD89}, {0xD5D6064173EBFA28, 0xCF6CF411A9CB40AA},
+ {0x68910E52DECBD402, 0x5617CF5E0801A337}, {0xE084B708F854CB23, 0x5E5184E8F134AC0D},
+ {0x74479B6C1C786536, 0xA8988C746DF03D3D}, {0x5E7065D218687B79, 0xCD59141293EBECF5},
+ {0xE3E52650CB585AA9, 0xB7539A2CC14A254E}, {0x698F80CD53C6DFED, 0x2BAE2D17A45E50AD},
+ {0x9025BA5BFA06CD9C, 0xA23C601A3E62169F}, {0x8081224DA41C9E1B, 0xFA823EC2022E3B13},
+ {0x320286DA71809025, 0x0B891BBA031F1A64}, {0x769F8F27BAEDCE9E, 0xD4F0616EFF08B96B},
+ {0x3183A352E5FBC78C, 0x4F4B85C4CD03B758}, {0x79F618ED7FD51C5F, 0x4883E799CDF21006},
+ {0x35B6602CF6710D22, 0x668E542AC696FC73}, {0x32D249FABDAE8C69, 0xF37340C3AFC59BEE},
+ {0x1A1CFCDA26EF7158, 0x888766D5D3C3BFCF}, {0xA0D3F6336F165C4C, 0x28DD55ADCAC1371D},
+ {0x32A55DE394C777AF, 0x9D2D399D96C4D613}, {0xA407227C39EAB5EA, 0x6DC972E3ACAC4979},
+ {0x813A22C215A1ABC7, 0xCF969BE79EEE219B}, {0x18F665FFB80117F6, 0x653DEC9E017C5423},
+ {0xD54C05149CF9DCE0, 0xD0D79C218BD3057E}, {0xC3842B3759C42905, 0x88069FB8291A9F25},
+ {0x92FD6EC2266B9D61, 0x45EA31CF6B604D3C}, {0x27B62A77CFD6B2EF, 0xD3302ADCCBF9B357},
+ {0xA00D7B71356A4E3D, 0x69737DEE1CEE67A1}, {0x08EF6B4E15C89478, 0x9BF32CD4BB43C899},
+ {0xD471579D01804457, 0xCDF81BB5EF803A25}, {0x7F611A4B1E60EF4D, 0x7722114F9D72BCEF},
+ {0x9D6B160ADE02BEB8, 0xD5A00DA47AC04E90}, {0xB90F377F728517DB, 0x2804DB9006C34AA4},
+ {0xE4E51CE73B4F6E5A, 0x591F49FA612BA1D0}, {0xC548E7D80277CA34, 0x204547E16633D11C},
+ {0x02FBBAF5B4C82B9E, 0x547CC7F7E055B3D2}, {0xB5D9D06BCD5699C0, 0x991507FF4EA0E4AB},
+ {0x89202EB813201BF0, 0x342DB5899B448889}, {0x3CA5F73239D25AAE, 0x9318EBDD45655817},
+ {0xCF6383F093EEB6BF, 0xBFD441EC88DB29CD}, {0xA42543697C53977E, 0xE7FD63003E4DA834},
+ {0xA24558FB173D8882, 0x8D02BDCFD38019CB}, {0xBB39A3B45E7F1A3D, 0xA9E9F11D509AE2FA},
+ {0xCAF4CF40F392FC16, 0xBBCD238DA7791FE5}, {0xEB09F17EE6A60B66, 0xD31FBB3CB7254998},
+ {0x054192C6345D2611, 0x3243E7700E450F7D}, {0x718B889C6868AA86, 0xF7B418EE35D94D04},
+ {0x8497335FD7BD825D, 0x253F9F5A04679B9B}, {0xE2603C291D8B9F05, 0x9BC83EB3C939CB47},
+ {0x87A2A4A2DD3E91EC, 0xF67F33F9E5345270}, {0x13403718556D0C74, 0x8713B0AB039DCA2B},
+ {0xC42BE28D201814FE, 0x7692F13166B96160}, {0x5326BD008FC2E994, 0x2C42665F1B5F964E},
+ {0xFF9F6516F16E96AD, 0xA7AF7E678D1BDBAF}, {0x500D5A849079E571, 0x58FF44ECFD732933},
+ {0x8D1EA94267E65746, 0x13C8284A66C481D2}, {0x0C912FC90E9DB193, 0xF4DF1982EA581856},
+ {0x4D38F4BAC3505097, 0x8338B0A905E4A5D8}, {0x3DBCF0511444022D, 0x3491E45121E1C760},
+ {0x957DB175B99A43B1, 0x541AAA23C6964B29}, {0xFDCCDA0BFB629C76, 0xEEA50E0A103FC01D},
+ {0xBFA0B5A1626874F3, 0x2AC5C3B9296404CC}, {0xB78FEAFEFECFF852, 0x6A1D41D1E1D0348F},
+ {0x5042F7ED6B1027A9, 0xC6D881612866DF24}, {0xE9907C0D1945EEC5, 0x88562451EE2E6F23},
+ {0x8B118FB98ABEC3FF, 0x89A2D61DB0F5A953}, {0xDBE9516D6107E588, 0xE156C9DB0E89F39A},
+ {0xB46DE8AFF1F86566, 0x30BD4ED3DB356041}, {0x63F215DAB853BC9A, 0xD92DC2BDACDAFF11},
+ {0xEF5086973E28588C, 0x14925E86B454FAB8}, {0xBFE7EB59929F4DC1, 0xF764DE3BC2F000BD},
+ {0x3401F376620BB148, 0xCD166047DDEF2E80}, {0xA1E5C2900DE83D26, 0xA04FBA493C52AF47},
+ {0x306A3047E8B9734F, 0x617C04A11B04E78F}, {0xB294EB16F2226AA1, 0x705A816444D60FF8},
+ {0x4C477438DDA4870F, 0xB904050E5DF9D7D8}, {0xD4539707CCF91D0D, 0xE691EC1970B6E6EC},
+ {0x9B2BC2977E1E9656, 0x8C6643ECBBA5135F}, {0x3688504E33C52A09, 0xFD97B0820DB9E5B6},
+ {0x0A724A4EC0F888C3, 0x060AD7268D6ABD57}, {0xA4CF9FD10A036C67, 0x161B3427B3D224F0},
+ {0x7E2A6AD43695943D, 0x6521A5AF144FEAB9}, {0xB41730EEB2083BB4, 0xF730FC10D0E36DB0},
+ {0xD3559169D28A05CE, 0x18D87AAC3258CD5C}, {0x8A8E9395E930C9E6, 0x61FE1252366DB313},
+ {0x7D20D0D7C6CB06FB, 0x5C0150B128A09C65}, {0xD72E289AA77DFCA4, 0x08C78529B6F137C4},
+ {0x2F701AF82FBE10DC, 0xCD7243D0EA0EF567}, {0x411B131A227D1678, 0x2415706A35128ED8},
+ {0xFD01EA1E026CC5B2, 0xB482E257CFAE5461}, {0x6209E3F90157C046, 0x44B3B25DF74B7FEC},
+ {0x289293E4031C5211, 0x89F24331D476E33B}, {0x390A6961B788D852, 0x030A2974D8F9C1E3},
+ {0x158665D3A096A341, 0x835E98BBFE51A903}, {0x2F7B61A783BCC383, 0x1947C9D6383A22C9},
+ {0x5284373873A2A1EB, 0x54A12D9F26B924D8}, {0xBD52C330D3A28EF7, 0x09BB7B5360A1FCE3},
+ {0x8E008FDB999ED506, 0x8F5727619468F2CD}, {0xADA9AE0CEA6919E9, 0x5392CDC25AE6B606},
+ {0x1F1DA60BCFF2C08E, 0x3E6420DC58FE385B}, {0x3DE78CE5C5438B2D, 0x114581BE0BFD56F8},
+ {0xD49A1EE959A5EBFB, 0x0513BCA2CC82AADD}, {0xDBE6505F32CA18D8, 0x56389C6C59AF902D},
+ {0x324399760CEE01A6, 0xE4FC2E8F3C07F68F}, {0x89805AD2A9CA9CDC, 0x40AFDFAF5DCA908D},
+ {0xFCDF703052CD2652, 0x76169D885422FD4E}, {0x394FD6E4A38B23B1, 0x3E9338CB950E59FA},
+ {0xC0AD9286BCC0CF09, 0xF66237B2F9A2C908}, {0x24B6E67EB87DF72D, 0xE5836C4E81C0F5BB},
+ {0x54D54B8250809F33, 0xEAA1716322AD48F6}, {0x627E75DFFE26780B, 0xF07263DA7993C931},
+ {0xCB0F7D2F84D94143, 0x0654A3889AB3AB93}, {0x304A24F2F3FB328D, 0xD00081477F188A22},
+ {0x337C9CFEA6FA1519, 0xF8ED47DCC219D1E2}, {0x76BA92C515762B8B, 0x4742B68A8A286AA2},
+ {0x561E3C49D82A9410, 0x9DC52BC380410ACF}, {0x0345C687BC7548B0, 0x47E131711CC35F37},
+ {0xE25BC450A2215AAD, 0x13F02258BE828541}, {0xEC27F6FDEF25A6CB, 0xD186B5D3E01ED68F},
+ {0xE8C2FA66C62645EE, 0x869C7CAEB110E4C2}, {0x1D3F553E5999AF11, 0x669CEA3779526C87},
+ {0x7FEC1F3B17BA0A16, 0xDE9B97CAB234382F}, {0x814C448D6EFFC085, 0x7F6A638919CE4FB1},
+ {0xEAB2E52639E50B47, 0xD10B09C1BE14CCFD}, {0x9C7439541B773758, 0x1396B7CB64106F6A},
+ {0xF12CA31CF88CCD34, 0x6D3779F6CB6C5839}, {0x5D286CF7F0C542A2, 0x302759FCE1B47B06},
+ {0x2114A44837702AA7, 0x98F7999222408861}, {0x47ABFA9C1E6136CF, 0xE02AB84DA5CFF732},
+ {0xDA021B5EA1014796, 0x20174DB4B7E8795C}, {0x91FC776689E3C6A4, 0xA3DCBE1302E9EF6A},
+ {0xEACC1A2A80EF38B6, 0x69E262264B6BBAD5}, {0x435488FFF66FD3E0, 0xE2AE1BE50B0D3D34},
+ {0x4E328199FEF067F2, 0xDCA8BCC0F4C45BA4}, {0x1F738C95B7EE9EBE, 0x840D11C0B10B142C},
+ {0x8FCCF7588EC6AEDA, 0xF5C945107389F936}, {0xD684D85F0CD5AB5A, 0xDF240ADB877BCC64},
+ {0xC2329F605885B7FC, 0x1B71DC9DF750CA78}, {0x4A6094F0F7D02B73, 0xEB96A6E76111E133},
+ {0x1F11B9E30682F612, 0x3ACF42399D951B87}, {0xBF0B70595028C978, 0x6E5E16EF46189894},
+ {0xC0B1AE00E8C20C97, 0xDC60E480AD325AA8}, {0xE194A4B60C85A753, 0x1636421B1580AAD5},
+ {0x56BA2FFE032DDF9A, 0x23CF5C77690160A4}, {0xAE9D117D14F5AB88, 0xB7954EB8AB35D938},
+ {0x6372601BB0CEAF6F, 0xFE528CC697B77CCE}, {0x911CA8D73BD7805B, 0xE779F2D8F11747DF},
+ {0x96DDB190024767FB, 0xE977A84255F8A4F6}, {0x3B00432E03846CC6, 0xA604B7B7B7A0305F},
+ {0xEE3C6BA5BD529874, 0x017209C8EBB06C1E}, {0x8C3041C43A64B7D4, 0x875BDD1BB94AD1B3},
+ {0xEA77BF729F147F45, 0xF23E5BCA3CE7EAEA}, {0x57316E28DE31A73D, 0xB81F4BBA78E9CA41},
+ {0x9A3A1E0496C8B5A6, 0x4BDF6B70356C5BA7}, {0xC2479751F23EAA77, 0xA8379881CE61D707},
+ {0x2ABE6C4BBD172734, 0xA055B7F3CBC7D006}, {0xC64EE67CDFF52D44, 0x9A662792DE4BDE50},
+ {0x77FDD9F791CE16B7, 0xB037E408424BD9AD}, {0x74A8708446590F70, 0x2C1B980750F14A2A},
+ {0x0307B95BBBB65208, 0x6398FECBB93F27C7}, {0x3282C53C25B06526, 0x126728A2F50D68B6},
+ {0x08595496EAC648E7, 0x71CC51F8DEB4131D}, {0x88DF502581F3739C, 0x043C920679036CCA},
+ {0x541F8A9261CE7259, 0x129EE12262A7F401}, {0x3A19F7690E42BF39, 0xA9A9C6F63E96F82D},
+ {0x4776877B526BDA7A, 0x6271A2A34FC3307A}, {0xC50A7D7D7A3489A8, 0x4EB78409C2AFF233},
+ {0x6432A4F66D3DB07D, 0xB2DA675237252A6C}, {0xC4AD249A3401B432, 0x524F307A450EE9CB},
+ {0xBB42ABF40D44706F, 0x063B64F85AC43178}, {0xB852752491697ACF, 0x8AEF882771BD9CAD},
+ {0x07AC010FBEBACD8B, 0x2986016B875F009D}, {0xD93A8B285BA7A344, 0xF1B18AF2163FCEEA},
+ {0x93896B05F7B3AF74, 0xD5FB076594D0A6B6}, {0x00954DE9FFB673CC, 0xF580344E2A3FD7FF},
+ {0xF7CD776400FA0D2C, 0x184C00A7C896659E}, {0x55A2207F014BEBDC, 0x51B39C6543F9C80E},
+ {0xF87610811A2BFF39, 0x25ED016140D03F3A}, {0x04E39E75F100C2C0, 0xACCF5356A344CA1F},
+ {0x300AD2E257DC0816, 0x5C73CD9F59842DC5}, {0x7B222E10D7407750, 0x5C8575FAD4CC8B56},
+ {0x06DEE15895825A09, 0x00A4D12590B2781A}, {0xE8C30CD6B7454F41, 0x77B3DE1B8AEE9131},
+ {0x38E32CC6D1FD0F2E, 0x5706193B7E4453C1}, {0x0EE106BBB891CD1A, 0xDFD0B86651998E29},
+ {0xCE13343A0A3850D4, 0x9528841F5A0BEA12}, {0x9BD7ABFDBE87F274, 0xD446B8FA1C99BE28},
+ {0x409EC5CB71FD6211, 0x4D6C168B855617CF}, {0xFE98652469587F28, 0x345780856DFF1777},
+ {0xD18D9C722F90681F, 0x71F1C7CD07A114D9}, {0x58DCAF8A6064D220, 0xF65F07737189DC63},
+ {0x121219F41658F51D, 0xBB5DC745BD87B85E}, {0x5180CE197F2064FC, 0xD1F87F22DFD4D0C1},
+ {0xDCAFF9C35263311A, 0xBCE47E0859595FD7}, {0xD6384DF40358AF97, 0x35AABECB2CD8F8E3},
+ {0xB1390D528A2BEAD4, 0x10D48EA88F64D6D2}, {0x4ADE197F0F4AB75C, 0xB76088C01DAB7174},
+ {0xD2F4084979A65C62, 0x5E53D2FDDE7BF3A2}, {0x02ABD1060B1720AA, 0xFF866A5D6D6D2848},
+ {0x9EC4319B18D72AAB, 0x9310C86BD2944318}, {0x0A165F0630281F07, 0x741145783CD7C045},
+ {0x112008A51ACFFC23, 0x58AA622C18776AB7}, {0x6CE5EAA5359F3756, 0xD52388AC7D60DF37},
+ {0x1A6593E09703D46F, 0xD58423F0D7A2F3F1}, {0x684062AE37EACCA0, 0x27C597245A6E7F16},
+ {0x9A0C754597CC514B, 0xA1971C846E3E9B97}, {0xB4DED53FD340FA42, 0xBFE44E19CFE78638},
+ {0x26B6061042345C14, 0xFF1F011D554D6789}, {0xD4E4D7124E073F77, 0x210FCAA915FC2097},
+ {0xFD21849C77C43786, 0xBEB5CB1E54171945}, {0xB72ED982AD7D7938, 0xE03D7E9039AB87AE},
+ {0x9DB79569A4E02128, 0xF24934AFB844BA6D}, {0x8CD5BD2C0AA84D89, 0x5CED44473E014322},
+ {0x1C676B4E3CC3859E, 0xB0FC897C280292B7}, {0x18A72B5DB72AA2C4, 0xAC23FBCCC0AA0AEC},
+ {0xF93D777C181913B6, 0xA375900B360C8CBF}, {0x9A8979C0C5C4F385, 0x8F086D17D4BC5C9B},
+ {0x1BB5A6B460B58837, 0x884F762230FF9C50}, {0xE419B876F6907F8D, 0xA7B12CCFB4A97F0F},
+ {0x32AD40C9CDECF0E9, 0xBBD1F12C517367E8}, {0x4577B7BB1CE4FB9F, 0x0DC94179D23F0272},
+ {0xD6FAF1873F5CE41C, 0x5C7036615F2507A2}, {0x43755E313DDC1A97, 0x9B34CBC816AA6192},
+ {0x295321230CE021BC, 0x7C218A5A0EF89BC6}, {0x9CFAE602762BEA5C, 0xCA4C3C8AD6BD7DA8},
+ {0x48A209C790420D29, 0x6BE475F595D6417D}, {0xD1D4C8314B24F3A0, 0xBFB4EB8EEF97E20D},
+ {0x6E8980AE87DD0813, 0x97E53F6C30282985}, {0x97229E7740CEBA5C, 0x9799D000592D1CF9},
+ {0x0FA0E7BFA5BB4397, 0xE14ABCD8A0475A69}, {0x2F1AE1504CEE8E2F, 0xFAEBF654A86309DD},
+ {0xA6DA0B41A9687851, 0x1A3B44729DBD57C8}, {0xA07ED0DD72C0BAC8, 0xADAAAFCE302B2BB0},
+ {0x7DDE3636B432A323, 0xC1F2B409260A5269}, {0x8602456546550759, 0x28C818277B1BF501},
+ {0x18C1F078C38EB943, 0xDA61D6976C956D4D}, {0xE241A33F389924A2, 0x7E24E61B94657BA1},
+ {0xD499983BD67986FF, 0x66755E0B2E8585C1}, {0xACEDD2437C67C55F, 0xAFDB4313635886ED},
+ {0x778E30ECE3BEB755, 0x1BA7767321B18CE6}, {0x24DF01E7F97AD1EE, 0x70D08FC60B203153},
+ {0x73E603806545D862, 0xA448E551D80DB2B4}, {0xC7ACF79206220F08, 0x15F76E9D27D26858},
+ {0x618AF28BCC2700B3, 0x325B02FE2815AD8F}, {0xE8B3D64B97DF61AF, 0xA8D1F0DEAF36349B},
+ {0xC75F69EDA1A7982D, 0x264DB1EAA76F58D2}, {0x41B0889C27EB2167, 0x80CB21FE27C177F0},
+ {0xC96A465DA6A28C68, 0x0EF76B43826CBEDE}, {0x590539211BB7852F, 0x2B5C28532C87BA0A},
+ {0xC526D9FAFC3CDA23, 0x0C4D022445A6D132}, {0x3F9545ED7A96A2F0, 0x26E739F5E9275B8E},
+ {0x1301D146A754FE0C, 0x5FD7C0C01E7C1D4F}, {0x5DB2600749C2CDB8, 0x19EACF0CE2C116B2},
+ {0xB19CB737C29E3241, 0xF83500AE342F5689}, {0x53C2C682B6134FC6, 0x3785BC377B14311A},
+ {0x0FA3C3A7CA6B5A41, 0x28D77436C0147A34}, {0x051180BA82491B00, 0x35B66EB6D8611D7A},
+ {0x52B4DE85EE60D3D5, 0x9E4A0E53F35CD050}, {0xCE8D2F87C1857B9E, 0x2CF62BA23F2619E4},
+ {0x32E77DD24B096878, 0xCD48DF7C7C565018}, {0x901AD9748C0A0E1A, 0x891AE2500D199633},
+ {0xE90B9FC0A4105953, 0x68B82794E8A14123}, {0x0393506EDD6DFDA8, 0x0152DE98CD8A639A},
+ {0x64255677459EF0DC, 0xF7365C07BE533476}, {0xB303BC681AA4E652, 0x94E1FFED3BA2A6FB},
+ {0x43A3881BA2105B8D, 0xF03DB762C02D7367}, {0x366B1670C74297B2, 0x1E86F5790B7DD5C6},
+ {0xBBF1BB300640C4F1, 0x5F18E90680045C0B}, {0xE678D4D92079137E, 0x136743DFD9E18053},
+ {0xA168D81B86A5674B, 0x262FBDE525EB1765}, {0xC878791A72D4FFD4, 0x2E1788108F100829},
+ {0x02A44CB4D38937FD, 0xF8C4758522B11A40}, {0xE7C87DA266CE9FD9, 0x8DA7C95A17AF4B6C},
+ {0x8FC72E28D06D6C94, 0xB5C7E6A8213FD8D5}, {0x33DCB9643B4C64D5, 0xB24A48510A3F79D0},
+ {0xD1A8819CEAE95282, 0xE41D6A12238A85A6}, {0x7D6EC53D4DD8BEF4, 0x6EF95B241BE60A25},
+ {0x134C8186B8900068, 0xEA8979AF6E5D7432}, {0x68ECAF371CF02862, 0x61CE126ED7D6B438},
+ {0xD1636821765287B6, 0x415AD5462F780782}, {0x4094DDD36EEE8601, 0x802AC773FEC9CF75},
+ {0x6A7A0627D42FD348, 0x40D4290DBF1925AF}, {0x6C1F58C83A8C6A19, 0x36387C67207538CB},
+ {0x5E2157DB4DC81B02, 0xCCE027B55094D146}, {0x4E22E0260B3BFC28, 0x2D8FAD127DC70A02},
+ {0xB47514A68E64C935, 0x652E2AABE511A5D3}, {0x57097BF74C4322FE, 0x5E856E33D5EE9055},
+ {0xDAE15EBA64E7D29B, 0x54B4F87444AD82A8}, {0xD2F01A90A35AAF0F, 0xEAB61A002A3A2220},
+ {0x187AAE65E76C7FBB, 0xE3D1C92109F371ED}, {0x3787C7AF495DC211, 0x979194F7683E6CA5},
+ {0xE1CC0BA6CFA93578, 0x35F2F00A14ABA96D}, {0xA9F450E21BD6F5B3, 0x14598517BB6AE29F},
+ {0xA12E0B10E54D8195, 0xBB5086E5E2E747DF}, {0xF5EEC5DD27987E0B, 0x29FA70C38CB6CF78},
+ {0x00405C9B82AD1F7E, 0x7E46906C3B1BB3C1}, {0xA167AAF2D545BD3B, 0x5DA9F69B83C068BE},
+ {0x1F96CF6EAF70C389, 0x2B5DF763831968E1}, {0x0A363F1F0EE2B77D, 0xCAFBAA335813ABAF},
+ {0x24F74CBB2599A6D9, 0xFFE0F34BFD3E7959}, {0xC83DC9661CE8A1EE, 0x149317A6E86F69E4},
+ {0x67B839CCA210F367, 0xE280798840566366}, {0x20D2B92BE75788C0, 0x72FDE2C6E0E93855},
+ {0x51AA6F9FC24C370B, 0x3BEAB8E06C36609E}, {0xF8125AD00FE6EAF9, 0x5ED613DA61E5C9BA},
+ {0x35DEE175651AEED1, 0x9D0E4B255B956B19}, {0xCA8C73DAA6C516F4, 0xA8B9FD25A846D650},
+ {0x3FC17BF9EE14CE69, 0x286D41A70B8D1AAD}, {0x813B0051BC2256E2, 0xB606D3F641DB8200},
+ {0xB85E10D18FA215E3, 0x427D3F334A34A75D}, {0x6B05CD1233410958, 0x5E82A052D9408C83},
+ {0xB12175A793F2CB38, 0x46CEF97B63987945}, {0x73AD01F2CF0396E9, 0x3D3793BD7B3C2D35},
+ {0x12639A9CC003D449, 0xC33F788AFA1482FA}, {0xA6AC1D0582DC69FA, 0x9AB4C63BD56058AC},
+ {0x18C2F70205C6C278, 0x7C206F6F7B2F494E}, {0x5C97B90F3B1C44F3, 0xBF654C9D55533D13},
+ {0xADD8430A67791789, 0x17D82913489EE99C}, {0x6B48FA28ABC1A733, 0x95DB2E925E69D70D},
+ {0x15E5548B7691C674, 0x869BC8B575BDA75E}, {0xBCBEBE8800EA4412, 0xFF17D7794718B85F},
+ {0x26B8EFE49215E5CC, 0x62629F9CB18929C6}, {0x6F52776729B72080, 0xCA8EB0E9C2B15978},
+ {0x863297D0080BDE16, 0x13860E7F885E1F5B}, {0x91580602047F2620, 0x637412849FA80C01},
+ {0x824CB02C0120F0EB, 0x7F63BD5EDB226113}, {0x0D779123A62124D4, 0x6CBEF423B0CA4AE9},
+ {0xEDB1141C9ABE2289, 0xFF14199A7DD65602}, {0xB3CD9523E1E520FE, 0xE2F13FD35FCCA488},
+ {0x270F0C3AEFB66927, 0xA027887A55A9E92D}, {0x92C32E28DB6F4399, 0xAE21364B4D434BA5},
+ {0x9903DEC9F9450EF4, 0xC31497B13842B06D}, {0x696B5EA0E1A89BFF, 0x9080C6074EBE33B8},
+ {0x39455F21BED85B9C, 0x2348339364E67819}, {0x8D1F180C46F8AD78, 0xB69422E141B91FFF},
+ {0x241D978B37CDBF9B, 0xDE974CB896E10BD3}, {0x337F7FDF4EB73336, 0xF546E078AC6D42DE},
+ {0x171FD4F60554E739, 0xB4A3A3927B0AFFC0}, {0xAE7541EB9ED1ED87, 0x29398F4074AE6215},
+ {0xFAEBCEF25D6F2518, 0xB7DD345A85C2E843}, {0x6E1DEEA48198F499, 0x4B65EDE91A25E1D4},
+ {0x90CAAEADDE91DA94, 0x82F99FC24FB8C110}, {0xEFF21B5ED5F97768, 0x24083F1B839071DB},
+ {0x63C17AF9AB73CA0D, 0x8E753D4A180863CF}, {0xEFD8BB9ADB8651D9, 0xE0819B29F72A5CCD},
+ {0x1E217053EB448B8E, 0x20351FEBE7318499}, {0xD3E7439591E1173D, 0xB7FFB549694282F5},
+ {0xEE5046B408B67DFF, 0x15EC921433075777}, {0x48EBC8FB83A488E6, 0xDC6B1F46A4D46361},
+ {0xD359DE8FCB1FD777, 0xA6CF0CB8AE7BB7F8}, {0x5943D194769B959C, 0x079B6B5AA39F9E61},
+ {0x514F09A18EEB036B, 0x8A1C15FA62D854BD}, {0xAEE60CC2A93967FE, 0x88BDBDB3CA50D576},
+ {0xF1F9565062642A21, 0xF00994BAAE1B1D17}, {0x2E0C1DF88AAA23BD, 0x51CCC96545779782},
+ {0x61942575B94CC1BC, 0x22C86F3CE4C94A26}, {0xCD58C8BDE7E3EDFB, 0x14680ECA1FA3AED8},
+ {0x92ABA419312BA625, 0xF9CF9703B04B4ADC}, {0x29D95641BF039336, 0x90457BAA1DA27261},
+ {0x56E3180993C1AAE4, 0xE9BCA46C567B29DB}, {0xC6F3F588D261467A, 0x6ECCF4AE00C9A459},
+ {0xB7D9275F3641F36C, 0xFBA9B2C8C9674026}, {0x4F20B4885E8F02D7, 0x1930A3AFA2E5484D},
+ {0xA6B72A6EEC26DD3E, 0x68EFBB85ACCA7534}, {0xD78362C5B050F033, 0xD54C0BBD2F0315AD},
+ {0x789B25F6024D732E, 0x62E18FDBC51C0C65}, {0xDB01CF93C51DE76C, 0xFA115209FD464B9B},
+ {0xE57EDAC2436BE153, 0x6B1B3B0DC7A353E5}, {0x0989C246EAB6EBE2, 0x50C19668A06FC32A},
+ {0x272B7B670C12203B, 0xF4DAA6BC187C8395}, {0x8422FD5B19CE3915, 0xAA14BC84B3313BB9},
+ {0xA676B92499166C99, 0x1473A3A302CCBA30}, {0x0312F9F9170AF880, 0x900B67375E219DA9},
+ {0xEA45025EDEDD37E8, 0x70925832E1CF93C1}, {0x3CD0179CC6B2BB8F, 0xD2EC6BA7C448203C},
+ {0x626E119C4742F188, 0xD6A9682E19858BC0}, {0x52CB7FD6D60DCD42, 0x6924D080ADBE07ED},
+ {0x00A2ACB1E32113FA, 0x8CE554939AE20526}, {0x4CAF8997B230E9ED, 0x55588AC5717C7A9B},
+ {0x39652F629A1BEA85, 0xC38CF72831F83DEF}, {0xCF4A61864C5003D1, 0x9FB09DB6B3086BB2},
+ {0xC011B6414C4F9882, 0xEF84A51512C3B590}, {0xD31E322FC2058C77, 0xA925731A7FAB599C},
+ {0x7D81D01270B17BCF, 0x896015FE2620C4B5}, {0x4BDA7BEA7D6BE1CD, 0x1F7BA167FBD66458},
+ {0x533103DEE59BFD03, 0x9388AACDE263A74A}, {0x4315C86982E41E5B, 0xF05C032F4213267B},
+ {0x5A8668473D2A756A, 0xAA8BEF32BC877ACE}, {0xBC361BE742758905, 0x63DD244F5A32CD3C},
+ {0xC86E7379B68DA897, 0x4248D75B7CF7690C}, {0xDFBA6BEF491F971D, 0x0EE8F9D71EF52E72},
+ {0x67C4837EC320CA9F, 0xB1F5B8685B650ADD}, {0x9A819955292B7E44, 0xEA5DE300E43B8680},
+ {0x52272856389680F1, 0xA06E7C47FF4A547B}, {0x4AC1A4DCD95DE5BA, 0x3106591B959B61BA},
+ {0x6F01AC078115C611, 0xE62E6963549D7FEE}, {0xB29CE2068E86BFA6, 0xF31D1FA7B370C12B},
+ {0xDA3D259120331387, 0xAE1A8301113F11C9}, {0xFC072D7809545FF7, 0x7A3721ABED8D29C3},
+ {0x6B9B34F853DFE400, 0xEB1E93B13A1D0E2F}, {0xDB0C48A1CDE566FF, 0xBAB00731EC2BF7CE},
+ {0x073B34FF959972DF, 0x63D10FD87865B5DF}, {0x6B0621D5776DD559, 0xA43FB27EEC33F027},
+ {0x40084A79EC85DFE2, 0xB1371D8631BC5ED5}, {0xF07E24EDE939AC8A, 0x522C800F6A0C2A40},
+ {0x240944C0CC270241, 0x11EB30C24A2AD830}, {0xDB2579574E36CE0A, 0xE391F9E2D7A572B2},
+ {0x483B54F37D491E32, 0x4D2DA9A947C22F05}, {0x3CFD106C26B8D433, 0xCCCD633DB07D9975},
+ {0xFD99E3C6E4F0545E, 0x5378C26AF8D86B3A}, {0x9E6D1751112D3911, 0xE6FFB7B643D57AEF},
+ {0x00026770EBA9B345, 0xAB0CD33F73EDBBE7}, {0x0797C5D2DE6C49C5, 0x6DA6027E73E41995},
+ {0xDC73D1F0A7A65B24, 0x065437206E1E13C9}, {0xB72E9251DBD63A58, 0xB0004168F07D1896},
+ {0xE95FA067AC225E75, 0x6E6AD3D9D17CFBFD}, {0x333677B4BA0B6FC9, 0x30C671540C3861D3},
+ {0xC9AD4C9975E769E0, 0xC1F3550B76196FEC}, {0x9AA7E3E63C754776, 0xDB6D49A8A05BA5A7},
+ {0x9CD84AC33E363ADE, 0x84CEAD7055B42C43}, {0x0B068BE5D063C908, 0x9C3D01D771D300CF},
+ {0x9470EF61D7C568AD, 0x628AC2BDAC09C7AA}, {0x31E7C35C4F5A9086, 0x2F121C8CAF2BD1F2},
+ {0x8FEC4097244FF05B, 0xDD80E92C48B5D02D}, {0xBE879D1443ACF660, 0x18D451262AEC6D07},
+ {0x86C72F72C356B803, 0x76F165B0AE34D59F}, {0xC6982FF270EE0221, 0x22F885D948FE1D3C},
+ {0x62C651A486CABFB1, 0x96376DA88C04B892}, {0x339ED4B7E1B57A47, 0xEE36899CB8F8E3E0},
+ {0xB90E321512092B1F, 0x1013C4113198DF40}, {0x504334B36626A25F, 0x35F75A51EF9C442E},
+ {0x8A75B3861F523BB4, 0xF99EF68854E28BBD}, {0xEE11058BFD8F900C, 0x7F88D3D682F2EB0D},
+ {0x8CDAB933A492CA2D, 0x297C117690993604}, {0xD209F46AA36A8853, 0x2D4CD177677C122F},
+ {0x0FEFE567745904F6, 0xF923F7352D9205BD}, {0x6F7CA214D98E6818, 0x1DB45DCAC3C59232},
+ {0xCF12195520EDC67A, 0x44F1B68F00814746}, {0x449CDEF077092CD5, 0x738675E8F9B62A51},
+ {0xD293C4A4EB9686A8, 0x2D20C82A31324C68}, {0x7BBBED1F6CC69E76, 0xFEDE745D78A16059},
+ {0x24807EAAAC82D457, 0x52C6B74DF9B0EC3D}, {0x503E01B6DD49E9FE, 0x938C0A34A3B1F4DC},
+ {0xD9D1A94CA26A576F, 0xE46E6EE6EF556ADB}, {0x65334DF23558BBA3, 0xC02C12812BD2C0A2},
+ {0x79E0D35A3E24AF40, 0x735B2DB1E7636622}, {0xF7FB720B6680B28A, 0xFC098BD1246BFE40},
+ {0x13FBA2FD4204093E, 0x1649A84E02071906}, {0xF3FC7CC60EF8F795, 0xF4F186EBE1EA3ABD},
+ {0xA805AE10F54DE716, 0x5E736E5B5F5C32D7}, {0xB77C0DF4E253352C, 0xABA06D2503EC13DB},
+ {0xA38D39DEE82726D1, 0xF2F565C67244FC49}, {0xF1336DB0D50C2298, 0x26DDFF2A07B02D40},
+ {0xA042EF550FAB9409, 0x00F4C2B9C5DB5F68}, {0xA3FB73D2DC2AFDAC, 0x2FE461C2457537D3},
+ {0xD0B3E9021BDF5073, 0xFE8082B2A8AFD9B1}, {0x4A7E8A79D2FD1D13, 0xE12320E3D79201C4},
+ {0x980A941EA8BE5B56, 0xC22D8700789577F2}, {0x38391E5CD7EB3948, 0x6B961FD782DCC7BF},
+ {0x5E09204F7B896B44, 0x549BB93385796DCB}, {0xB2E0DB31E4BE82E6, 0x8664A27A5B3DE4EE},
+ {0xA88F84D2FC91AE79, 0x4A020918E3CFFB97}, {0x193229381443C05B, 0x18D8AD2F107EF904},
+ {0xFCEC25A5CE30507F, 0x34DD143BE9225BF7}, {0x4A1754AF23D0715C, 0xEFDCB1DADEE7CAB5},
+ {0x975A3C087C56C4BF, 0x03ABF7998999F789}, {0x40E047480FBFC5BE, 0x6603B0F2F8ADE150},
+ {0x25B5892D5E48A72B, 0xEF4D2DE34532FFE8}, {0x7C9EDFCA8AE20ECB, 0x24EBF9BC55DBD4D5},
+ {0x6B36B28B38B44B54, 0x92771FC6AEB09A26}, {0x20F2DA86005C85F3, 0x23C253F442377711},
+ {0xA92624AEDEA2CE85, 0x3FD760A642DFF6ED}, {0x8D3794F98159F4B3, 0x1F1B3A7E9D9982F0},
+ {0xC9C05063FFC5F6D2, 0xD50BFAFFC6C19DA2}, {0xE0FEC614640042A8, 0x0D3AE6DA3E41C41B},
+ {0x74C4F0ABB3ED178D, 0xC4B8064B86022DAD}, {0xF791326E23633527, 0x10556E1CA3C69EAF},
+ {0x3058A333681C9585, 0x17D85FA962A9822B}, {0xB69C4CE7FED0F815, 0x0A6291C0F0A8DFA2},
+ {0xFE9E3E39B39B89E9, 0x42AEE8E4D66F66C2}, {0xD3E6C39396269CA6, 0x4C0AA2EC9BEABECD},
+ {0x8071CDE7EEBD1139, 0x7F513DD3EDD7D673}, {0x89F46C6CA7DE79C4, 0xDDF0CFFC1C608427},
+ {0x1D24C3226C7D997F, 0x743B15E2321B1CC7}, {0x621FA0320C191F6C, 0x36489F938304691C},
+ {0xDF94DA9A0D07B03E, 0x2C78B76C5DB05DAA}, {0x9812D535AD448F1F, 0xCBAFB62CB1BD173C},
+ {0x99ED76C6F83BF0C3, 0x36CB23E48EB433F3}, {0x96477BC274ED8299, 0x791E0AC84FED0CB5},
+ {0x389B7F8095EBB96C, 0x66437EC725CB5207}, {0x5BD5C8FE3F5393C2, 0xDDF8F5FFF638EE2B},
+ {0x925FDFF51233E31D, 0x95978FE726F07BCE}, {0x776354B5A6702DCB, 0x9A8B8096B47E5AFC},
+ {0x2774C39838D5A319, 0x763CE99A3D73F1DD}, {0x332B4D5DFCA0FA55, 0xA3A5D4064A597A72},
+ {0xA19B9C28F4D04A1B, 0xAEA233A35F2D7B8E}, {0x98DD6879D516973F, 0xC48593D55A481457},
+ {0x2AC335DE6B580743, 0xB09D312E186D0AD5}, {0xB89420EAF4B0ED08, 0x5129C60A9F78F680},
+ {0x74D256353B4A4611, 0x4217BAB2DD9F6ECF}, {0x376B9156681BBEA7, 0xDABBD354F181FB90},
+ {0xF04A30CFEE135DAE, 0x5F7165286AAC42FD}, {0xCC3514B121C484AD, 0x70E822026B9170E0},
+ {0x0CADA4D5D5483B96, 0x753FF321FB3D8427}, {0xAB0D2174F90CB86D, 0x4CC12C53EC425B59},
+ {0x36288EB0DEC7DC93, 0x59B4103B19587F52}, {0x00E5B18FF9B2B022, 0x7C2EC2C7F1488E90},
+ {0x15CEABDA8FF2A8EE, 0xDA83289FDCC79BDA}, {0xB50257EB38814702, 0x2E9F1B57B588EE66},
+ {0x3010364BC9CFFB2E, 0x79ED0BF3F5C0403A}, {0x4160A8FE1F92B87A, 0x065057DF2E417D25},
+ {0x497750D0F10B3417, 0xB355B6C6A9860AE9}, {0x04AB40A1F78BC8FB, 0x4495026A3992EE0D},
+ {0x69F41CCB4A5DC9F2, 0xF26C7981851172A0}, {0x057FEE6036E22BBD, 0xC380267077AFF2D6},
+ {0x4687DBFA2BF89918, 0x502190E19D7D1EDF}, {0xC2E38A4007896874, 0x981701395FE12921},
+ {0xE523980C928BC19B, 0x418B64FEE984BECC}, {0x9705119E07A67099, 0x83D8B1AEC68E883C},
+ {0x4332097D72CA16ED, 0x62920D4E5C9BD095}, {0x6BDD52BF3347B6D7, 0x67592A89CE432286},
+ {0x827C2C44D8B79D16, 0x280226EEE31D25E0}, {0xBDFBD2EA3F57B59E, 0xFC94EAF0F4F13F7B},
+ {0x0D825F90E218F210, 0x1B902E061C24C3D6}, {0x75720F8B4C583B3D, 0x811A63A6593115C5},
+ {0x07F4E64AEE9A726E, 0xF29230100606CD7C}, {0x0496377438F6E919, 0xE7776F5364693A4C},
+ {0xB951EA0C2E03DF14, 0xBB4D0C8922FB6B01}, {0x762140B92C9A0E92, 0xCFCE7B9003AD7C11},
+ {0x5C33B36C3F0089C3, 0x4C8E796F37D8C19D}, {0x572B6D2AF9D95D08, 0xA04E73FD8198A856},
+ {0xCCE316CE2EBFED32, 0x84D5081EF1DD1AF7}, {0x6A5A6C6E8BADD95D, 0xFA9F44FEB3E07D6F},
+ {0xAA36BA2D2CD35DAD, 0xD7D34F44E0DE1734}, {0x392FEAD691514DB6, 0x1A900E19CA75EB1E},
+ {0x56414D9FEADC9244, 0xFC3F64379A0B97D3}, {0x0FAA021DB491FEDC, 0x493BDE0038184A08},
+ {0xAA06D9E6F3398904, 0x3D254263E3ECFE4A}, {0xAD23C29E1E8E7067, 0xC570B6191EC9531A},
+ {0x280E302B50D1AE32, 0x3E3ECE624D29428A}, {0xD65D39929C1A9859, 0x85916D6271C29AC4},
+ {0xB69895B10E6081C0, 0xE4FED5F7E144F07F}, {0x61DA98021FB28D06, 0xAED236B2D6C60851},
+ {0x55D6DB8E8CB2B198, 0x9868C7D751007C89}, {0xBE98710A6D0283D4, 0x6842DC8A43D1FEDF},
+ {0x14E26C2E2B31272F, 0x748C0EEC100B1E18}, {0x069B3406BE0E9418, 0x5D0BEF696D3B46AF},
+ {0xEAF728A047E8281E, 0x8C639CB9D11B0444}, {0xBD62B01A600DD774, 0xD480B9CC8D54C03E},
+ {0x377B5745E8846159, 0xC86E08FBCDE11BCD}, {0x7196A64EFA22A030, 0xE4EAD148C628E9BC},
+ {0x10139A20AEB507D1, 0xE61F8A9B40C93B8D}, {0xF2811D15875D5BD9, 0x9B2C72F1C367E5CC},
+ {0x7B2DA96712BC5577, 0x217C695314485BC2}, {0xC1B9A4C5E3441F80, 0x68B99137E9D66170},
+ {0x623638E94528376D, 0x5A9459BF079BD74A}, {0x2AC9DE382FC2C313, 0x8CC9CFC6C9A49D33},
+ {0x5873F39B07140D45, 0x98F565F860E91790}, {0xBE9AD0F456F28952, 0x82AAAE34CC90B43B},
+ {0x73D68DE9A7AD3396, 0x2B25FC3BAD11BF4D}, {0x369F0574228B0BA7, 0x7C25D81AA1753EFE},
+ {0x2DD3611DD31B1022, 0x5670310D409B021B}, {0x70B85CAD23B39B31, 0x94B770A0B3FE1BAE},
+ {0xCBC6F21D82BCC365, 0x2F3CAADB02063476}, {0xB8731174D0161D5F, 0x0D54EBD5374025B5},
+ {0xBFCA3FBD96DF1F96, 0x158DB47CCC169548}, {0x1406837EA24C19FD, 0x92A680CFA9231F80},
+ {0xEC0817AC3C5077FB, 0xD3C9C443AC3993B7}, {0xABDCB66DFC047DBA, 0x473D4D3B4F607CC3},
+ {0x8E0D5642045A7A6F, 0x7AF05922C529B8AA}, {0x004F8A3365BF7CFE, 0x8BFAB72213642857},
+ {0x7F7DD587C2B3256E, 0x0B81EAFE760B77A0}, {0x910B6F48A0B872AF, 0xD703B3696CB33437},
+ {0x63E3B32A481FCFEC, 0x0EE337E6DC5D93DF}, {0xC697C2A02027D76D, 0x775A67ED68F6FB5B},
+ {0x0DB707B77DB8FA53, 0xB003DD07AFC694E0}, {0x857EF4D3D6F4167B, 0x26C415F65DEB5E21},
+ {0xDCFE111A86D8DBCB, 0xB9D238B96C99F470}, {0x13EC43B4AE9F27D4, 0x28765E9245C6FB6A},
+ {0x143495CBC85A78DC, 0x2882D486C06D2EFC}, {0x5D78E1B3EE47E04D, 0x37EF875FC025818A},
+ {0xBAC87771A2098156, 0xCD0EEE6E51FEE155}, {0xC5DD19C1651CA97D, 0xFAE13F01E4E103B9},
+ {0x4AB553594AD2F1BF, 0xF18E3262BC3839CD}, {0xA5A7DBFAC1DC568E, 0x8D6905F36680B6DD},
+ {0x93A7D773E7733B9C, 0x0F542F6F6FE006CB}, {0xB0C613BA3B75C80C, 0x442BE8ADDD19C530},
+ {0x01FC707FF003FFB4, 0x79EB0D6765680A9C}, {0x128E367D089E52A3, 0x6182352C2D6E0FE1},
+ {0x8D2605B034120829, 0xDE730119B418FD08}, {0x2E40E05EF0703B57, 0xD9C49D4948C2D5C9},
+ {0x1F327624C7D4AD79, 0x964C1A87C2603399}, {0xFA1D99031EFD6282, 0xB892E4F2400889B1},
+ {0xB820AA649C57C37E, 0x625E7A081B5584A7}, {0x36659E3F692623BB, 0x6D18BC1D57D774C6},
+ {0x1DA28E76F47241EE, 0x360FC8B9C6396F0C}, {0x4BE860213C69A67A, 0x13D0A45989B82282},
+ {0xA6F80DEE9ED27921, 0xD7D8E355AA0F1B16}, {0x154833C6632A64B4, 0xEBC7CCA0CCFFEFCC},
+ {0x27C6CCEC57670306, 0x2270C6FE68B27071}, {0x2B808F315C5B1E99, 0x9B586650EE6D6413},
+ {0x1440A71B001805B1, 0xACBF933B3355BD61}, {0x5E92127B2C5284A0, 0xC8A7146070187EF5},
+ {0x7C09ACA2ACCB441D, 0x2CB0420F6E588BEC}, {0x653F071D07B141BD, 0x31C211E8B2A0B6BA},
+ {0x3487D815B0616A2F, 0xDE58AAA41E91CF96}, {0x1DB21254C319677F, 0x5ACD845E2105A349},
+ {0xC8E62E08F75ED82D, 0x6121405BCB63B880}, {0xC369C168F83976A2, 0x911E2B4B097B06AE},
+ {0x01819C337041E815, 0x8AFA4CEA18F2524C}, {0x84346A4350DD3D09, 0xFEA0549B191F91A6},
+ {0x64E3D0284BC19BB2, 0x66BDDC302F0E91FA}, {0x5F826FFD16B8370F, 0xC407125EA7A1DB27},
+ {0x752120E3C634D1DC, 0x1B20A71816E3D2DD}, {0xFE8491FB2CBBDBFE, 0x35CEBCEC541EEA48},
+ {0x855FEAE29DBDAAD0, 0x798D27CFFDDF0DC1}, {0x566FFB6DF39A0B6D, 0x1AB99DCAB1C599DE},
+ {0xBE1762876D2C5039, 0x8DD65E86557ADDE1}, {0x3690E1EF99A9C22B, 0xB7D8696B2F38BFB1},
+ {0xA65DFF30ECB94BF4, 0x3F4B62DF09862AA7}, {0x307A82E6A2947DE5, 0x4A80AF9E09A6D276},
+ {0x23F8C78E72982D9E, 0xDF122E853696D295}, {0x1DAABBA67CC8D992, 0xC443E760C72631A2},
+ {0xF4D69FCA6FB44C38, 0xF7F251AAD9246556}, {0x4487650A97E78A8F, 0x38CE3EC8751B931F},
+ {0x4B7E9B3AFB1185E7, 0x8CC275458B2189F3}, {0x460FA88DE6BE0B6E, 0x9CBDA594307739A2},
+ {0xBCB5FC24F0669AA8, 0x6264177F2C91C557}, {0x53CB512E002BBD0E, 0x9F9129EFEA9146CD},
+ {0x4CB94E232365F9BF, 0xF288042A29948520}, {0xAC582D9B0957DA28, 0xA2D21AC95B864750},
+ {0x50D31FE5F2D55371, 0x3828D5E51050D7D3}, {0x2AE308468E9C26D2, 0xD988E4EA23A10C00},
+ {0x9994549C4935E0D1, 0x0FDC2E9EDCC26C3B}, {0x9EB62D1580F2A03B, 0xAF0A8BA144B3AAC9},
+ {0x4499560503B29D94, 0xE29B5D2CE2497A0B}, {0x01934C3D7415CFF4, 0x6B39BD3B41855331},
+ {0xC4102985924ACF92, 0xF5D34E0278ECE247}, {0xDC3C63E48042685F, 0x6F7297F869124971},
+ {0x0A2DE85801155E5A, 0x5E8EE2903F7B3CE3}, {0xCCF6EDF6AA91C96C, 0x94094F388E937E6F},
+ {0x944254514D0FBB2C, 0xBDA047675F335A49}, {0x955C6312D63450E5, 0xC4328C1823B79927},
+ {0xEABC73506868E35D, 0x416094DC795909B1}, {0xA444A034F3B76AEF, 0xD4B3336A7CD4C6E2},
+ {0x93318E0BAA82FD6F, 0x040E6BF558819558}, {0xFDC30CE1761D566C, 0x6153E72BB81989F1},
+ {0x33BCFD0DF2589339, 0x437143AAA845749F}, {0x14F7E15E750B92B8, 0xC0D87301836258F9},
+ {0xD96ED43172BC8065, 0x58B75A080430E7B7}, {0xB3DB6EE18CA680A4, 0x5CED23F6A0890F6E},
+ {0xC7C4C8CC2D379A9B, 0x06EF0C9061073F53}, {0xFA80B0AE34D84DEF, 0xAA8CDD661D605C03},
+ {0xC87FC728BAD848A5, 0x84A5E0A9C648B6D6}, {0xA0DC73B443CF887E, 0xA1A33CD86A001CA0},
+ {0x4ACB3F2B408AEAEE, 0xDB41ED352EEE2423}, {0xF6A6800A7014DC35, 0xBA546F22703DC893},
+ {0x915D4B6BDE7E5972, 0x4E362AAEF521B055}, {0x5FFDFAADB57852D1, 0xB90519D631EAEEFD},
+ {0xAA518A4D75581469, 0x0268EAB212518B17}, {0x2B976E35A8A8FFF5, 0x16BDCAC02712CDEF},
+ {0xF314A3295FED4937, 0xCA0B7C11285227CA}, {0x17F5FFE49EE8182C, 0x7128129C8877FC5F},
+ {0xA39485A1E84C0AA6, 0x4FF9E9CD64BC4A51}, {0x102EB4C2E32874A6, 0xD7C3306D0CF0E1DE},
+ {0xBC332359520086AA, 0x751A32C7977E59F1}, {0x9E01A75882615565, 0x6F061C8A6053DC5E},
+ {0xF1349B6D18CFFF1C, 0xDB2FC1257321FF89}, {0x2C928F8F51936B64, 0xBC6AE509169BB683},
+ {0x820954C72CB93A24, 0x3B340763C74115F9}, {0x196885E39F2392AE, 0xD010E50FE9396C73},
+ {0x11956DB90397E846, 0x8FE57439FA6D6F89}, {0x3770903CA2ACF72B, 0xE9DB00D1B49BC04B},
+ {0x101AB6EE6A683D46, 0x03C3A8CEE9E84475}, {0xE1489EA1A19E0315, 0xA9D5A1718B690CD0},
+ {0x3678FF164FBFA398, 0xCF2F37DBB0E0E5CD}, {0x99BD3C33DECDB9B3, 0xEC2B9AC1F245CE32},
+ {0x1FBFECD0CAE5F900, 0xC4D6744966D26D8E}, {0x6E3BD9580BC61851, 0x57AEC5CFAC36EBC7},
+ {0x0A21FB716466281B, 0x4A250990EE0E440C}, {0x787A8534583CC265, 0xBD590FB08F5715A5},
+ {0xA98CE3FC9B7F7527, 0xBAB96D330201360B}, {0xAFCA902399D4FB2F, 0xA8426F8C04B9D9A4},
+ {0x9F21ECCCF7480AF4, 0x4CDFECCB13B080DE}, {0xAE641C7D74241F92, 0xFD1E865F3D4CE78A},
+ {0xDACD2681255D847A, 0xE32C72AA1D571F9D}, {0x5AAE016FF25A8FB7, 0x5040EB8831F6812B},
+ {0x0D1F4CD19BCC2CE0, 0x73A654DCB4405741}, {0x04B7BC67A21A3D1C, 0x8A0093C70E900875},
+ {0xF7D904945F62045E, 0xB80F26EBDA583E78}, {0x227AA6B690BD49AF, 0xEFA156BE0A9EFF5B},
+ {0x351CE0ABE9F26455, 0x5B9B89A43D72B8D1}, {0x3397CA28B86DF254, 0xB4E05A2CAB8EF013},
+ {0xC816BC0CCF457C1D, 0x538681E248361F67}, {0xC8A98E2D0BF25835, 0xCCBE30472F43C9A6},
+ {0xF39F98EAD51602CA, 0xB6193D0211E7F86E}, {0xA6E9E512CE508A54, 0x67EB27E1C16389E6},
+ {0xA7C11ADDF885CAC8, 0xBCAA68CD9E34325D}, {0xBEC37360A1F186A9, 0xC769AA125D932FFA},
+ {0x1D89C616BC68339F, 0xE33D01276774117B}, {0x11AC75E6E0E04EB8, 0x364FD8C4E730DA7A},
+ {0x199357501654F2A3, 0xAA6F73D3EC0203E6}, {0xA5058E0AEB7F7072, 0xC2BEBDD3D5623DB7},
+ {0xFCADA715F2DB9F45, 0x82701C01E0212DD7}, {0x3287459A44D1AF14, 0x50FA54817BE5CB90},
+ {0x83232F7798983C31, 0xD08394A532616813}, {0x5D8CCB0588D86DE2, 0x15A8C9030D311D12},
+ {0x3C9A62AB8C822742, 0x244B833864684F0D}, {0x47902ABCA70B60A9, 0xFAFA5B045F45E31F},
+ {0x91247412B1A63073, 0x87D75F5FC6480028}, {0x4A855B66D75ACD73, 0xEDC36EE4DDEECFA2},
+ {0xE00174286088A901, 0x829398E2C54CC30F}, {0x02447884FD0F4463, 0xEF6671374CA665F3},
+ {0x5211F61CABA11D13, 0x1906126418E8BB8F}, {0x7B6267D06DA57DD1, 0xC35B441010C9718D},
+ {0xCE70FC1F3E8A9F83, 0x1679FBAC1EB085A2}, {0xCA9E2F40F7A1D317, 0x7A1146FF986DC6E5},
+ {0x14E9D6E6E3E7824D, 0x395622086160E7D1}, {0xAA054BB6B98E97C1, 0x1F6FEA84BA0AA1F5},
+ {0x31342F4DF0008137, 0x5A27E72B83E4869F}, {0xE4F1816D4F6A5BD8, 0xDB8F3CB819282248},
+ {0x8A0601A47FAE55E8, 0x507B7A066C4A3E78}, {0xCE70A834D3593427, 0xD32C6CF8361280D8},
+ {0xC55BCDF680DF038B, 0x5A3664B01D50C38F}, {0x9E197D43E2F21201, 0xD57AD25E4F7CF303},
+ {0xE5DAC084FEBBE4E8, 0x090E47EA66457365}, {0x93706A1EDFB0DD17, 0x304EC692ADA7A0BC},
+ {0xD88BD0F5EA30317E, 0x93F1C7543F53C0D7}, {0xB4C8460AA400A625, 0x2BE5BE101B99419F},
+ {0xB7A7319EB8FB6A8D, 0x57D31E86AACA7332}, {0xA7DB7C171947E648, 0x6DCE2DE976695049},
+ {0xDF5CE5C100995F7A, 0xBD2E348563C316F8}, {0xC51DE9C392F2F8A9, 0x5E11B2E5ED80906F},
+ {0x45437FFC26EA943A, 0x59CB232222E20F18}, {0x1C21E491F1D58C32, 0x664D8DD9AAA24B70},
+ {0x41FF40B9A14F6DF1, 0xEE3AFF45F908EE6A}, {0xF8623D283E73EE46, 0x6162FB099C9F5ED5},
+ {0x65D0C2BF6C2B505B, 0xAF2C372097E3CB05}, {0x32953B17D368DC87, 0x2AFB0ACB2E166ADE},
+ {0xFC7CAA9B1EB0EB0B, 0xC26354A298382008}, {0x30091B05CD911CAC, 0xBF10FED432805AEE},
+ {0x71A6ED6E7BF98644, 0xFCC2ADF6FCD97B9B}, {0x1AD69E8F5E57B4A3, 0xE92B519FC26BAE21},
+ {0x03EEE4F32B467D6C, 0x34FEAD35F0AA8525}, {0x8F777367261B4E01, 0x0DDBEE181297F82A},
+ {0x1E176AA6B04578DC, 0xBA0EE4C5517BAC0E}, {0xA5CD2E171C3C0D7D, 0xC860E979CD19C531},
+ {0xCD4070D1D2C1571E, 0xB3868A6621F36A40}, {0xA00016EBA1C214C3, 0x70AC937385887D6A},
+ {0x401B34E0AB9B40EC, 0xB6FE178900E8958E}, {0x390E88D28EEEB7E4, 0xD2ED7D90F718F778},
+ {0x05EFC60843EEE962, 0xE35A3F8BAA378DC0}, {0x5217F7A7D4E88781, 0x0272C209924714B8},
+ {0x97156A9FA3428EE8, 0x195E30A965310137}, {0x83CDAC0F617BC1EB, 0x3369959172A29FC2},
+ {0xD9E2BC05CCBF39AB, 0xB814B5303276F57A}, {0x05FDE062F909B063, 0x95BCFAE1ECC1A6C7},
+ {0x6DB169D3B0DBA967, 0xBBD4AB2A72178042}, {0x3B435842F1D41E9C, 0x669DF1963A3DA71C},
+ {0xDCCD23DFDD359510, 0x3FA4E987BAEFF112}, {0x8BD45EE269526476, 0x763F4AF0B1536CD9},
+ {0x0BBCC6CD700694A9, 0xFD41B5EDB055BE1B}, {0x0C19C82AB7051B35, 0x943742B041402A6B},
+ {0x4B665994D972DBA6, 0xBBDDB5D5F21F8D56}, {0x839B45A591C4102D, 0xAA5BA5B431AECC79},
+ {0x9137E29583DAF7E2, 0xEEFACDFDBA6E1BD7}, {0x589CDA88C99E772A, 0xA0BCF3BFDB28F5C2},
+ {0x16A936FD9E83F157, 0x9E728830D85496C2}, {0x210DF9BD3EEE89D6, 0xADB7475B9274FB46},
+ {0xE114A360C04A03CC, 0x15927D215AD33F7C}, {0x09EDF5F5EB143A7F, 0x3A740DFEE5E32135},
+ {0x40F2741B29D8E38E, 0x4214F0FA88B99E25}, {0x1A0A7AC374A5FAFB, 0x74E1C11960CCE007},
+ {0xAF2624620CC97960, 0x72B90E0209A21462}, {0xB63EFE308054A405, 0xF0F12DB9A40E535F},
+ {0x2276ACD76AD7CA40, 0x9E7A55EAB76D3A5E}, {0xDCAE9BCE14754007, 0xF9B6EBEF958E4AB5},
+ {0x2DF6ED14BF52B49A, 0xD8A105C1B5CBFA6A}, {0x695CF391E2367E66, 0x2B5E44DD2BF1764D},
+ {0xDF3528AE5DB55F56, 0xC7E32D58FE042C4C}, {0xD895DB6A85F91E39, 0xFCD5C91B915B3A3C},
+ {0x67183957173E03F5, 0xD1FAE98DF8548C47}, {0x2145090C810DCF67, 0x2D95EC7E685AB9F7},
+ {0x1AF68832DE7B16AC, 0x3CD349600A98B5FE}, {0x82A15A31CCE5EB48, 0x5BE44825278660CF},
+ {0x6C8ED40692B9101A, 0x23ABCC4DB9185ABD}, {0x9FE4FD1EB2B03879, 0x9861AEF1C65FF281},
+ {0xDC6C7181AF0950AC, 0x7F320ECD9667A153}, {0x16CE6617E8AFA854, 0x3AD2CF5D265F65AE},
+ {0x2FAC2FC3DFF9CCD4, 0xA7A9F0F94759E3E2}, {0xDAB7A1DF876B4B38, 0xB916E39657289E3D},
+ {0x67412A287291544F, 0x6954CE39CE2E19F6}, {0x372D24625C8352C1, 0xD9E45EBF2A9146A5},
+ {0xCCCA367034EC9F57, 0x6F9EB93F37CFF746}, {0xCEC82A754F1DE495, 0x15EDD5CCA5971632},
+ {0x194EEDD7B9299D25, 0x51472B5FCEE86DAC}, {0x661C4099FEE345DE, 0x046F2BC313497042},
+ {0x8FC9DFBAD7DE64DD, 0x48D3E3FE43F0664B}, {0xE15043C364EB503D, 0x5EBC2D1ADE0A6D7D},
+ {0x9B057E49F2A765CB, 0x0B135DBD125389AD}, {0xDB33565B96127D2C, 0xCEF9A673A0ED1EB3},
+ {0xEEF68C60F4B2154F, 0xEC26462B79BF5C85}, {0x1B0A25061BD9FC2D, 0x39CB4DBA19128118},
+ {0xC436339B3631C04F, 0xE24A8D807DE85457}, {0x97AC50DD9CE14FCE, 0xF20F582D5DC3C82F},
+ {0x89E4CB99C0E6190A, 0x5D7D8312986AA032}, {0xF075F401190E586E, 0x6D7801D374999E4C},
+ {0xC080644EA97DD555, 0xE0EB4456BE93D385}, {0x40A9395E21760A04, 0x8DA572A62791D9BD},
+ {0x52D49E08CEBE903D, 0xCDEA674903F92539}, {0x9CFC0157BD094E38, 0xEB835F2381221AB6},
+ {0x6DF99588300C8BAC, 0x47D2DBA0C1E88E1C}, {0xA2B49A70E8435335, 0x75D067CBFBD4CD94},
+ {0x3916339940B587F4, 0xEBDBE61B82AEBD99}, {0xCA8DD076EA1716CC, 0xA6719BF8A5862F38},
+ {0x8B3B7D78024ED383, 0x0ED2C5A2D423EF62}, {0xA5134C9903F5637E, 0x46E099B26FCC37B2},
+ {0x7CF5E5D5EAB028DA, 0x1C3476D7C3A912C0}, {0xCD8F14738526F45F, 0x70A9AAF557C2E929},
+ {0x0E0C0A865115EE02, 0xB4B6811D995E07C5}, {0x47F65D7A6B822D86, 0x40CDB0393A45CF5A},
+ {0x60495F4ECCB9AFC8, 0x1B05F0004B02F584}, {0x0E34112C92D8FB3E, 0x15E3D55C5FF5B600},
+ {0x2345EC3F0BF75F40, 0x28CE00F04C27F5CF}, {0x1275CE86CEAC8F74, 0x72948921723149E7},
+ {0x3540713AAEB6FFEA, 0xD13582B9A1CA06F1}, {0xE59DA6CA57E9C8F6, 0x94855E7678259699},
+ {0xB3AA789C1E762C77, 0x17B766462B735CC8}, {0x6FA41D699D2AC140, 0xC7D6BC6E39A13D5B},
+ {0xC1A172F672516099, 0x316C5C361B5477A2}, {0x06F7AA343D14BC53, 0xECB46466FD87C605},
+ {0x167E03CB5B3765B6, 0x02255EFE381ADB33}, {0xFD391C215AFB42D1, 0xA01FA24FE752E4FF},
+ {0x10B800E1AB5DB76A, 0x2F01BE664515781D}, {0x5824D1472E0745B3, 0x65FF699CCA8E8B3A},
+ {0xC857A26BD5057D1C, 0x540BD6244D916A9E}, {0x6DE88E80BE19B74F, 0x584EFF0714CAF7F2},
+ {0x0FDA7BB894272F29, 0x8E41A2E944F993A7}, {0x0F7806526DF288CC, 0x0680DB30EFB51516},
+ {0xD2B4D94ACECDADAB, 0xF5B47524F6F98C05}, {0xD41061C6EA971047, 0xBF16A98B21A4EA41},
+ {0x1A402D7BA9C3A77D, 0xE2DA03FCEDA34581}, {0x40574373CB6705CB, 0x37B8D7799CB7407D},
+ {0x03263BC7D0D88E76, 0xFACD21CD203B527F}, {0xD8EDDF13349F06D6, 0xC0BB48A4D33C57B0},
+ {0x34DB27C6F55779CF, 0x60CFBE9B4E73DEE7}, {0xA90FFED38E3345C0, 0xEB258D92106D21B5},
+ {0x6A848D35A41C7EED, 0x97263B6A371646DD}, {0x6397CA12603383AA, 0x5EEEC44FC5C95857},
+ {0xE9C445BBD3C3BDC9, 0x86618E1146BD387B}, {0x26857CF49798CDFA, 0x92A1A43205A2702F},
+ {0x41CEA952BAB9DF01, 0x438AF7BFF1F690BF}, {0xC782D1604A031935, 0xE536D2B47AB080C7},
+ {0x4B65B3C3632BC4DE, 0x271006F723A93254}, {0xAD0A78C450C6468D, 0x351705A200D707CF},
+ {0x08FD527BAC25A954, 0x7A5F76BABB508FD4}, {0xE5CBC0530AEF1A9B, 0x18397F28609E5415},
+ {0x4132E7696F58FC54, 0x46A2ABA9BBE42EAC}, {0x01950A1F4BC2B57B, 0x279B09727F070502},
+ {0x5C70A4FC5B1C7E4C, 0x2746CD3BED6B61EF}, {0x0C2DEFBB5BCE6BDC, 0xCC9E3C78B891325E},
+ {0x5EFC690A1CC812FD, 0x1632AF563F8C2530}, {0x557846F93F655CCC, 0xEBB21C60AA6496DD},
+ {0xD0BD97A675DC7228, 0xBCE5256E1A0F553A}, {0x2935F7E8B1AA2926, 0x358B1A0832AF4407},
+ {0x72D614BD4BD059E8, 0xFC11B524BF79B22E}, {0x5B55DAA4F1245010, 0x51C1EB3812C84255},
+ {0x9169B391F2651D2D, 0x1E4454D097F095F4}, {0xFDA475DBEC205DDF, 0x46439C503E02E764},
+ {0x47E81F95AB46BCFD, 0x9F35E0450930B546}, {0x08F7312434EDBAF0, 0x521961BDBA813CF3},
+ {0x20C1AFDB9D6CE4B6, 0x8C5325BEF30C29A2}, {0xA93B84606D139FE5, 0xC38E6F9D159FAAFE},
+ {0xCD659CB962BEB40D, 0x80DAF6E2EFBF9BA9}, {0x437889C33A358C3A, 0x4A00B9F2B13CD8B6},
+ {0xC9C0A187B560BC72, 0x7E95FA952536AAC4}, {0x8DEFE129154CEB8D, 0x49BE535E16E1F0DE},
+ {0x46C3DC1B20D6EF54, 0x86BA2228E2AEA338}, {0x492161DE062A28FE, 0x1938CCF85DF44661},
+ {0x3C17F54F099E4B27, 0x95F74A5562786A85}, {0x36F6B0DD2775376E, 0x96D048212EB58562},
+ {0x90DBDD9587D1F16D, 0x4734992E0807BC63}, {0xFAEABF443F446A97, 0x3DC95A4A8333F866},
+ {0xFBF30993BF298C89, 0x412474D276CA637C}, {0x350F1B602C4CD68A, 0x6B00DD0600F99428},
+ {0x72E3E6ABD2A6D12E, 0x4AFFE67A23BA568F}, {0x93ABBB07A0422DB1, 0x989E7BE373C3E2F7},
+ {0xF371B1859C6131E1, 0x04EA67694B877765}, {0x80E424A6328309FB, 0x5BCCCFB257A581A4},
+ {0x3192902029BB76C9, 0xA5159B34EA12A9A6}, {0x24A928E6AA922EB0, 0x9394E919E61312ED},
+ {0xE344D65454510718, 0x9BFACBC9ED040765}, {0x9AC17F8961C8C810, 0x5F58D94A742E5B3C},
+ {0x085A5D16572384F3, 0xB5A75AD117937972}, {0xD57451978425F427, 0x38C878B7AF275F25},
+ {0xA137252A717AD12D, 0x8CD0B22208CFF9B7}, {0x2A4A6F3027CEDBC6, 0xBEEB70DD00FA3DC8},
+ {0x88A86D5A2A95F50C, 0x7F978AA42D7A74D5}, {0x31C7FFA002C1A695, 0x7BFFC03654CEA2D2},
+ {0x1DB7E29D27796AA5, 0x8FCBBAFFCEEC74B9}, {0xB19088FB75459369, 0x1DE289C2981AF2C7},
+ {0xB41D1D0D70CEEA6B, 0x7068B7FEC1738352}, {0xBE49C35F744CD6AD, 0x4AB5574855401BC2},
+ {0x91566F8ED892C40B, 0xB33A4D56232800C2}, {0x4295D278B8300EB8, 0x61CE9EDABE8C845B},
+ {0xB6483E5DAD3362EC, 0x165B6E4BD1E17FBE}, {0xE7987E054EC9D64B, 0xF6A7EC62BC180FBD},
+ {0x6BAD6F5F8E4391A4, 0x6E57BBAA9BB2112E}, {0x0A7338EAC100D397, 0x1A2FCE65AFDE2337},
+ {0x13807AA438761BBD, 0xF810FDE71A3C2AA1}, {0x1F252222538E60DE, 0xF562B549A401AF77},
+ {0xE5861A108B7231AE, 0xB2D5CAA88A5E1988}, {0x3507417D347BD996, 0x0C1AD6515428EB92},
+ {0x1138702F620659C1, 0x59EE9C81E2077275}, {0x534DD0D25C43555D, 0x5EB91AFAB970303B},
+ {0x3B07698F4F4A3247, 0x26D5AB1E38E6D7F9}, {0x57FC0A9551F30644, 0xDB07480A64065E1B},
+ {0xC722FB45F19DA62A, 0xEBC51759124C6584}, {0x3E49DCFE9081D177, 0xEF9ABADA019D1728},
+ {0x6FA27833E698D861, 0x0632D1C7B5FEB0F3}, {0xE7C74512B5C1F966, 0x2382611E680D49D4},
+ {0xFE26D13A88736322, 0x20FDC54B942BFEEB}, {0xDB8DD7A62A2CD3C3, 0xD425C602C2FD5EDB},
+ {0x80D06DF77198FD4B, 0xCB888EB35B433527}, {0x3715AA99A00D87D2, 0x0CE7971C263D6A3A},
+ {0xF777E711DA325BD4, 0xF1BB031E872AE021}, {0x5895D16419836D27, 0xA6471AE4D23873DF},
+ {0x3908D6FBD66FD187, 0x4DEDFE427F174539}, {0x3E68F803767596D1, 0x6A41C1D1D02C4FFD},
+ {0x5050A406E18C9921, 0x3C8B19B67C8D86C9}, {0xCCFC7169737EA77B, 0x2024EB51B311D14E},
+ {0x749E397B5035D4FE, 0xF10671644D3F7610}, {0xF5782FE5476B988A, 0x64E2442BBE465386},
+ {0x5E27E66CB95CA8B7, 0xB57E8DAFE32BEC80}, {0x9BAB36F1F4131265, 0x9678C5AF7D6FAF9F},
+ {0xB4A8BBC7275A2534, 0xC90BDBAD117C8912}, {0x49B058578A5051F0, 0x6C11843919950EF9},
+ {0x6026126F869549AB, 0xB4C7F6E45CC2D641}, {0x963FE5FEFBCF7447, 0x3489149A7E296074},
+ {0xBE557A4593D12F8A, 0x09530EE826FFD30A}, {0x7967C7D4591297EB, 0xC6FD17643D84E7C1},
+ {0x074142F3D387DC12, 0x13C24BE376F64736}, {0xA7DAFE5F7886287C, 0x6214159CB29952ED},
+ {0xF43CAFF7991A8346, 0xAB87E5B835044F12}, {0x7A7163CE4C822E30, 0xEFE2F472063FF0F8},
+ {0x8EFAE41B2A6EF6BB, 0x3FFA61E56F1E7C61}, {0x0EBE07D52B7B5482, 0x844CE7628B3132A2},
+ {0xC9F1443697EB0CA6, 0x2E319C9F55EBF2E2}, {0x144D8063CFB5E851, 0x92FCAF3A626402F3},
+ {0x30BF735AA0272D19, 0x735C973FEF7E3B5E}, {0x776EFB333E2B7485, 0x3F26FD72A29627C6},
+ {0xCBE9144AA06FFCDB, 0xE7D72AA0CB402F70}, {0xF764620753AF7CE0, 0xBB7A8AEBF0810965},
+ {0x26ADC170F70C8A5B, 0x76437C4BA00B10CE}, {0x8CE8041EFA4CCCD6, 0x65B5C16282BDE4F7},
+ {0x4FB0EA1A2582CFEB, 0xAEFC3C530D67223B}, {0x4F19604F6BCB26D6, 0xD7DF62C5DE582896},
+ {0x51AF924BACE1F007, 0x26FCB7FA043BA400}, {0x19D5E25E09DF8B1D, 0xE9ECD8F40037ADC3},
+ {0x41DC0111242852AF, 0xB99DB4135BCA7D88}, {0x2B39388327397B32, 0xCC496F2FEABE1FD7},
+ {0xF6484D95C9E9109A, 0xAD52415BB27962E6}, {0xEDAA72E9F7E69FF4, 0xE89487A51F033CC4},
+ {0x64E0465159ACFDE4, 0x8E740E792E308E4F}, {0x4EC5F479400EC019, 0x743DABC30C649F82},
+ {0xCD1E7F00A4141976, 0xC8F0CA7C4D115F28}, {0x9CB12A8332E2F236, 0x28B1AEA97501E55D},
+ {0x7491F12D046E0D5F, 0x2A8B9B5D26B92FD1}, {0xA083EBF555E368E4, 0x633A92BCA2E11DE9},
+ {0xEA0DFE5E5C40EF52, 0x460B8241A72EA503}, {0x39F063CA1D27EB65, 0xC464EC1043501CEB},
+ {0x0418B830883BA2BE, 0x805DDACFC44B6FBB}, {0xA3B038F5CE25548F, 0xDC6D846E94F2E2B9},
+ {0x033084B438878D81, 0xD5AA0474FD6E6555}, {0x301614C1F114A854, 0x2E20844EE3C2C357},
+ {0x9F7F87EF84857F62, 0x358377E94F8E0B91}, {0xFC85E29D45D39078, 0xDE388EBD6B797E9C},
+ {0xF5DDE0703551B1B3, 0xDEC846ACC7CA4A2C}, {0x9E14B622C39A8D67, 0x4976823691FFE051},
+ {0x7D503441D732F506, 0x9B3B9EBED69A0A25}, {0x089304E63609FEA1, 0x3C5C1E5A111F3D41},
+ {0x92CCBDFA4C006D5B, 0x4117B7D6BABDAFE3}, {0xB4618C691BF59D58, 0x45D2F683DDF5C55F},
+ {0xC627505707F94C56, 0x1F97BEFB67C3C4FB}, {0x7A332961A428F659, 0x91AA682699E15E6F},
+ {0xAB1F3E72A8212099, 0x7B0494366D139BB9}, {0xB83D50EE8EA03125, 0x7F9B65C1DBB6EF23},
+ {0x154352AB22B12EA3, 0xE236F5D2082CF5CF}, {0x3C3A978957C2CADA, 0x287BF46C661802B2},
+ {0xC3EC9CFA4E021D1F, 0x8B7EA51BAE5B699F}, {0xC7BC7D792D671D31, 0x78A946E3DB12A4BD},
+ {0x621BBD8C2C727082, 0xE9A5E921D84B4048}, {0xBE20A10FA27A56CF, 0x9599350A8C344AF4},
+ {0xF62C28BB6794BDD7, 0x10EDCF0A1F9E8F06}, {0x2CDBD9D74AE248A4, 0x5F17F6D2571F6F74},
+ {0x08C25F8FCBF0BAED, 0x6A32FFC3269064E7}, {0x43F47E9F0FA73072, 0xDB80420D56C7A504},
+ {0xAE7389F7EDC0BF90, 0x3CBE7426FC9FDC82}, {0x92E6E6B0937FBA72, 0xA28E26BFF0126C6D},
+ {0xFE4B13E38CB9849B, 0x333ED5D6109C6E85}, {0xE48BC056BC443DE4, 0x7F95E3287B77CC85},
+ {0x3E8AA819BDC21DE4, 0x1678BADE88C6DE65}, {0xE4BEEF22AB945036, 0x09FABED869762175},
+ {0xD0D7B6C3D9DD7117, 0x62B3A635608DAF35}, {0x452E5CE972BDECD7, 0x437E01F5D4DCD86C},
+ {0x89FDB1F4D220F4E7, 0xCE5377E873CEB5E6}, {0x48CFB274F5F7791A, 0x5667F868980531B7},
+ {0x26C89989A8A1F852, 0xD9C63A195576C1B1}, {0xCC5B6655BA8A7B1D, 0x374383460B99D40C},
+ {0x0C9397A24D698C14, 0x36425AB44E89E4CB}, {0x46A0F36ED7C15957, 0xAAA41C76A2137F55},
+ {0x61C1C739876F9D67, 0x273DC4D4589E30A7}, {0xAFD14B47F2191E8B, 0x7C631E4F5941C617},
+ {0xBF85FB223A1985B8, 0x62889235C57AC5FF}, {0xA8A80915C621211C, 0xA3FBBF17DE9A4B26},
+ {0xC243C30B0BF53717, 0xE552B8E879DD6420}, {0x4E4B53FF0ED831F4, 0x6ADB93A8BE350FA2},
+ {0x11D93B22E332C96E, 0xB1B8EB71F26D17FF}, {0xDE28355FD7F73BCE, 0xEE8C13782BE8184A},
+ {0x838A2987B77A0FC5, 0x9635DF1FF100C928}, {0x5EEE2F0AB7E39B09, 0x513816B1B1C1729A},
+ {0xEF4904B7C370402F, 0x8501663CFD8F3FA8}, {0xA794D765D66CBEC2, 0xAF922F37BA1FDC37},
+ {0x47A6E68F6162B43D, 0x1BD71511BEDDAFB2}, {0x19C9C4C12E6834AA, 0x21B885ECF57EE870},
+ {0xF6D936220252A85A, 0xDC240B583CD31EA1}, {0xB7ED406F7B8C101A, 0x979415C536C4E1DC},
+ {0x1279FD05CFA8D3D2, 0x9753652C71728A9D}, {0xCBB5FDAD88AA7575, 0xDBB5E5AE27DBB7A3},
+ {0x5C0D2A4E660DE6B5, 0xD4358E3BC9D4A5E9}, {0x405523E74EC02D78, 0x14A0D82CD7EFF973},
+ {0xCEC10FE59E612E96, 0x7A7BF2DEEDA43569}, {0x22AC03131EDF9763, 0x5014228F9373D043},
+ {0xCD2B055A98AE2451, 0x77246B9E30B70EDB}, {0x1BDC5FBADC58F4AD, 0x1A8849DF4A89514D},
+ {0xD01C9688C232D198, 0xFC8630E6D72887B1}, {0xB309B188AE54A528, 0x6061E6DB8C4B51F0},
+ {0xA2B5040EC6FB2089, 0x26EA891B735CA7E5}, {0x8FDEBACDC36ED91D, 0x03C060A388388F0F},
+ {0x5ECF1636334065EA, 0x5A2B0F4EB3163983}, {0x94953D31D7570A52, 0x9714CB57932FD158},
+ {0xBB38B8428862CBD2, 0x1ABD86B0D36CD19B}, {0x1D2E80B8AC78EEF6, 0xD9442F5E74B3638B},
+ {0xD413ED2801F29C51, 0x81FE6D218FB6FA34}, {0xAE752BB41A9528CB, 0xDFACD8D8E77B3998},
+ {0x0C08ED0F8EC69557, 0xC9CE85FD9F8BC940}, {0xFA37FEC9B9D9C587, 0xDD8116FAC2898897},
+ {0xB9974731473BF98F, 0xBC3177B1F2AF0A1E}, {0xD39B9F88CF92E2B3, 0xE839C1FDA3FBAC0C},
+ {0x813322BA9401CC92, 0xE060EB41657D4E77}, {0x5D8CD85B9234B33F, 0xE32DFCBE802C9FC6},
+ {0x018C8F2123CA803B, 0x2392F89954003BAB}, {0xC89FFD4CA4145C22, 0xDEB98BC03A0B01C4},
+ {0xDFCB9B84C4D6798E, 0x518D05CB588E6B1D}, {0x456172551C83EF57, 0x40960E835633673C},
+ {0xE7A457013ED095B4, 0xE97496A5F888A3A5}, {0x05DC1E753B4999D1, 0x1C40E0D14D6A9A69},
+ {0x1042C5137B103280, 0x5E47DF5CFB11F561}, {0x30C2CD49C3F65729, 0x70F21FF324693D57},
+ {0x749F03BBFBE72495, 0xEBB2D1F7AD3AD349}, {0xBAD94A8C1E76BA73, 0xB5B0DDB7FEEA227F},
+ {0xAA8920E2825FC579, 0x4AA0D480881B32CA}, {0x627A492217022619, 0x721AADFCD089837D},
+ {0xD42ABFA32563C2E2, 0x35B8626DEC139E22}, {0x5494E76CD9A14A22, 0x9A33B057115F43A0},
+ {0x14FFAB8CA3C6E0B9, 0x0682581715D3E409}, {0x167FB98A5C56AB6A, 0xA8104C5395000DB3},
+ {0xACC002C47B7EA4E6, 0x3DED382C0E3F58B5}, {0xDDF7C0A5846AD0E1, 0x5398F509C539718B},
+ {0x63AD7CEBCCB60126, 0xBB836624DA1EDAD0}, {0x894A37C0085CB901, 0x553AF2D4F2D7493A},
+ {0xFE871A502BF69DE5, 0x52CC1262EEE804E6}, {0x23844385E0E2F82E, 0x7970BE47B24C397E},
+ {0x00BD91D011E7A134, 0xB3CEEAB8718E452D}, {0x7712503424E4F947, 0xBA6B10A116AA9BDD},
+ {0xEE776386B468A568, 0x5F613A2A2144853F}, {0xB504E283AB8F94DA, 0x7EC7DBFFEA0B6772},
+ {0x778851C93998EC78, 0xC5E6FC797AC75393}, {0xB165A5565BAD54F2, 0x3A7E105F530C74AD},
+ {0xE6F3A72F32E7556C, 0xFC20505E7FEE1089}, {0x40828C8838294E01, 0x4032A5CA5FBB532E},
+ {0x484199E0D96F3A46, 0xC387DAAF58B55DB2}, {0xF8CFC65C4575ABA6, 0xD5A9FB11EBDFD6D3},
+ {0x2CAA96CDDFDFF566, 0xC2B18FB1162959C1}, {0x9FA2D02431EF75F0, 0x1759D1FC6AD3CFEC},
+ {0x787A5901B51035C7, 0xF8DDAE2F132947AF}, {0x2E1EEE9B37D00351, 0xDDC867FB04F00D71},
+ {0x860EC1974B4ED3CD, 0x1607374B93F478A1}, {0x3D4ECDB75572244A, 0xE1E95BB8828DFC40},
+ {0x92DD15F733D70C2C, 0x0A4EFBCD055A3B0B}, {0x8C7FE87AF3709565, 0x251DEF3C02AB4C18},
+ {0x6A26912CF6208928, 0x3C1E253B191521ED}, {0xAC702A315AB960C6, 0x177E9D605DC6A6CE},
+ {0x9FC2F4C63C2095C7, 0xAF433CAD9F509587}, {0x2C09089FF79AAA1B, 0x69F2301C27333142},
+ {0xB720861B3737B12D, 0x8369B9BD9EC48763}, {0x6FF37C3E23E75EB1, 0x2D0B8FB0254C6BFC},
+ {0xB480B3133A56EE69, 0xAEB907ABA18F0845}, {0x4756D00150BBCDA2, 0x7B4FE4D17ACAD854},
+ {0xD30D51210F347DC8, 0x3B348BEF6034181D}, {0x39A4A1EEEA13EEAB, 0x993143EFEBA92CB7},
+ {0x4983101550448045, 0x1C2E5F2EDFDA5E4C}, {0xBE631FB95DDBA08D, 0xC266C119FC8B8463},
+ {0x786C69F162E25391, 0xC4C29D869F3E1738}, {0xFB154F40DAC26BDF, 0xB5C7CED3CE77A50A},
+ {0xEA446C5D962E540D, 0x1A43D31F057847E8}, {0x3ABCDD6765872022, 0xF1B95531FA61FA8F},
+ {0xE33A1720FA8E2081, 0xAF22DE6328D8F3F6}, {0x77BB3D467FBB8A3A, 0x93DB57AA74875CAA},
+ {0x0A616E66B7FBA54E, 0x361DC5A207880877}, {0xBA82F240E2D74F1D, 0xC777F0026290F357},
+ {0xEB14D7966CBBAB81, 0xCF01D5BF5B8F90F9}, {0x63691938891E2714, 0xD9A0448C9B3D86E6},
+ {0x8DB89045B58BBB72, 0xF2C04344A7554B98}, {0x3854B84DF5842DA1, 0xDC3DD9B2B0D03CD0},
+ {0xE69940324C8A3096, 0x90022905157EAA11}, {0xF616FD637A76B35B, 0x6E9DF4F7B023F1DF},
+ {0xF20D02C71697B249, 0x595C3435EC358E11}, {0x423999837A7A20B9, 0x5C0F0F2C8E3D59DD},
+ {0xCF1C9BC2E069425A, 0xC87F348BC234479F}, {0x8FC59BFDEA5D6050, 0x89CA7353BFF51CA1},
+ {0x62125FAC76BAE9C2, 0xC06AD5ED4FA3F261}, {0x51E6A99C2BA66706, 0x169A824DC6735417},
+ {0x9A175CD205B07BEB, 0xC2B7C08FCAABEF7E}, {0xDF3732976E5A115B, 0x009D28E7EF50C94B},
+ {0x43D7173B324BE7F4, 0x4C684177F9F29DBE}, {0x54510E55BF849965, 0x55003EB5DE61202B},
+ {0x6AA5B6012A8298BC, 0x1901648EA9BF4628}, {0x276049218C3D7152, 0x9B8D6CC2607C4EB6},
+ {0xFAE4EC23487F05B9, 0x8312701FBEB9FAC9}, {0xBFB4066DF6FA7E41, 0xD80CFF6F8F969DE0},
+ {0x2400D978280124E8, 0x2B10EE872F0CA11A}, {0xC61EEE30450C98A1, 0x6B6CB4B36CBBA1B4},
+ {0xD90FDB546A5D21D8, 0xB54000E1C58E6FFD}, {0xEB7CE8B2D91C2F9D, 0x9F6565EF96B01FBB},
+ {0x24A6AD77A8603C2C, 0x0432B5855DEE0739}, {0x444D759A1F36BB41, 0x901A6F8654F12C23},
+ {0x907CE74D102FFD12, 0x7346604D5AD176DA}, {0xAD635E887E4BCA88, 0x03A9E11E0369B71E},
+ {0xE96C4CCD164E7E74, 0x01C41E1CD83D2EFE}, {0x884800690639A211, 0x0BF86DCDF4BA2F7A},
+ {0xC943078DCE10641A, 0xEF0D1B4184B579B6}, {0xB7D31A28B0172D74, 0xE117D90A7CE85068},
+ {0xFA93DB502A32030A, 0x3C11F55B78CA5CB5}, {0x25A373781CC7DCCC, 0xE3D8114DE8A8E617},
+ {0xC1593841FE103C50, 0x855E71118AD07D91}, {0xBF82BC120DD2C3C4, 0x5252AF6EE296A629},
+ {0x2622537351E7022E, 0x4A5642412DBE5811}, {0x29C9C28910F516B5, 0x712898612F4FA001},
+ {0x293898F980D86759, 0x3DEB08D951337F81}, {0x620102EAE33536FD, 0x609F03BF156D678A},
+ {0x5F086328910F140B, 0x4AC535C2860D562C}, {0xDEA9162759214358, 0xC78339A87ED8B421},
+ {0x19CC2BAA752A3127, 0x14E29FD40260E77A}, {0x3821CB5A7A3F3FAC, 0x8B9309D237793CEC},
+ {0x124A41FF9D53A798, 0x733642C50D6CBC7D}, {0xEEF2C69A26A91EA8, 0xE20BB92312C47A08},
+ {0x695187FF940058FF, 0xD4BC07CC7D6CE735}, {0x19C1811D2BAF579A, 0x49EBB0D751958C91},
+ {0x5FBEB6D6D577530A, 0xF79C5D7BA73CC6F5}, {0xD3AF73C4DC5F6F5B, 0x8F915DD78194196A},
+ {0x90F988F4FB59EC47, 0x6B59FF1384940742}, {0xBAA04DF4304543DA, 0x65EE1935421F6037},
+ {0x2B95EA9252539A33, 0xA85C8F5854E4D55A}, {0x722EFFE5045733A0, 0x276C20F896B2A79E},
+ {0x72855DFA34C54E2E, 0xCCF10ADA2BDB3AA3}, {0xA25AECF05A67B2F9, 0x4453035DB6A8C6B0},
+ {0x704BD0E6DCBC2783, 0x523622B658C0AFEC}, {0xFEC2EC8837710078, 0xAE4C41059781B2C8},
+ {0x9AF3A5E3B30A8C64, 0xCF0E8F0CBE24867C}, {0xF7EBE0A301603DD0, 0xBE9F627871A946B9},
+ {0x6B4DFF034AFDC0FA, 0xD7BA9DED2CC17162}, {0x263DCDB11DC2A4FA, 0x329F46260B4637E1},
+ {0xB1A8E8D3900C20DA, 0xCDAF46F61873366D}, {0xAEFFC65C55FB8FDC, 0x52446EE82EF1DEE1},
+ {0x2DE94449D7EC21D2, 0x571FD7217AB17F7B}, {0x56CBEB56669CB788, 0x6BA4CB152890A4B3},
+ {0x4637159569ACF8A7, 0x81F595C6A25351CD}, {0x07AF4F6FD7CEFBD9, 0x7D228CA4EDF0AA6F},
+ {0xD7F5A73C56700FCA, 0xCA9967764279C193}, {0xDD93B3F01A6E8CD9, 0x36F0FBA93265FD12},
+ {0x7F1C8D61C1513BD3, 0x37CBEB6704398C12}, {0xC4FCFBB6CE60309D, 0xD514A8A50D18B41E},
+ {0x502941B40B8F9751, 0x1CABFBB928199DF8}, {0x092D91F3091EF992, 0x41F495FFFE4D575D},
+ {0x901AB4F516AD615F, 0x6E9F0D5051C48C4F}, {0x110B5FA35CE9A7B4, 0x4D9A176FCBB6E13B},
+ {0x3D843F7B5132628A, 0x375C641410183842}, {0x1674A66F0E9CA88F, 0x98454C47C1F7DE47},
+ {0x27FD74C442C44E0C, 0x7E8353316DBA30A7}, {0xF953CB88CEDEA42D, 0x9B49871C71B8B418},
+ {0x7D8A5A6BC32EAC0B, 0xA87BBDDA77CFDBC2}, {0xF30726F4CC9638A8, 0xB53AAD68C67C488A},
+ {0x91B50F6DCD596F7C, 0x6320B70247F68DA8}, {0x2508FBB832658600, 0x98B9AF51B767C92A},
+ {0x2CC40379E951C795, 0x50513964E8BCE0D6}, {0x3D2C07F63AD15783, 0xDD9FC99DD9801E0E},
+ {0x09D591CF959E3477, 0x5023C912972CEBEA}, {0x488D024C6F956477, 0x2BA07ED68BCC2760},
+ {0x93F0FAD84665044D, 0xA670E68A0A3B0E93}, {0x15533D79DEBE1978, 0x2B44CCFE5B9E0DCA},
+ {0x20679F67C832382E, 0xC8E94034F79C819B}, {0x9C46079F8D1A8148, 0x79BD780D06E019AC},
+ {0x54797A168E1F4EC9, 0xC6CEC50B8105A397}, {0xE6D988600A70CA0D, 0x77D56A8BDF885E3E},
+ {0x1D740D1822DC4EAA, 0x8E8E51BB6190F139}, {0xDE95A31D8D74239F, 0x8D4B1BAA304E4403},
+ {0xA3A350E3ADE113ED, 0x7374171D930B4856}, {0xD2528C8F0320EF61, 0x3372086BAF9DCEF3},
+ {0xBD4FCE3BB2CD6256, 0x3244ED40C3257AFA}, {0x1F09EDAEAD1D8A42, 0x06D795CE4699104D},
+ {0x05CB2B6ACBB8EE4B, 0xA540C978F96C5C81}, {0xC69BE0C2522FF469, 0x16684A6EC41BB6AF},
+ {0x80D439519F71482B, 0x7E7E100C0D7EEA36}, {0x02F7E202B9E7D2FB, 0x7E26F162B6D2E810},
+ {0xA509C5E7BF86145A, 0x05AE697A9566AB16}, {0x9F47FE6F8FB1BE37, 0x7BEA5801B931B193},
+ {0xA1E87F020C12308B, 0xB6D7369F7CC65DC8}, {0xB90D6CF190DD6FDD, 0xF70A6A401D3B7C46},
+ {0x7F034D4688299E64, 0xCA8F77074DBEA1CB}, {0xCD36C9B4DEF75622, 0xC556710A722F6EE9},
+ {0xD0B988D56E0CB8BA, 0xC84911463D5C3301}, {0x54334FCAB72437EC, 0x044C3AB116B487E2},
+ {0x13CC5EA30A8418F1, 0x3B22636BFAD4C02F}, {0xE9E95A7BAB0AB0A0, 0xC406A4A69957EEF8},
+ {0x9A1CCA5D150DF8FC, 0xC8645A1305BE8E1E}, {0x666A3807C0D6E091, 0xACCB436ADDDF5E76},
+ {0x65F97C95A6C8977E, 0x7AA158A86A756B99}, {0xF41B4FB9787CAA68, 0x490ED45C89BCEB36},
+ {0x9C08461E35372535, 0xC9BC5262D8DDF4D6}, {0x7DD59C4D0B9560F3, 0x8E493D7EB68AB583},
+ {0x3035B4294E55F088, 0xAC27FBE9A9D5D13B}, {0xD502870B65C89272, 0x2BE1211D630822DB},
+ {0x91CF7CF7A211DCD6, 0x88E99AC2CEA08011}, {0x147C1890DCF05667, 0x6413A617DAE3AC42},
+ {0xA7764DB3F2E5810B, 0xCC465DCE906E09F4}, {0xBD34762DEEBAE7AF, 0x791B8ACDFF2856C4},
+ {0x50DE8C56D89D45F3, 0xD6F2D967CF0B2DDE}, {0x465AD771C46DBF37, 0x938BBB9E5612026B},
+ {0xC2AA1F4A39A59749, 0xF4297BD558D673E2}, {0xB0877137CDF83811, 0x005685FFBFFB721E},
+ {0x40740C352EAEB07B, 0xE445073E30BFEDF8}, {0xD292468402101C88, 0x78DD0859D0062B43},
+ {0xECAC07666ABE1E08, 0xD3356DA2FAF6C29B}, {0x5C9967B306AE797B, 0x18C18824AAF90E94},
+ {0xB158401CC2914851, 0xB309C078D2FBF457}, {0x3634C59DEE9D62A8, 0x459465ABAFA30847},
+ {0x272CAC65D6E17E8F, 0xB3AE7EE5D8A071F1}, {0x5177D04B51C77637, 0x045D6BA2B5B5A8C8},
+ {0xA87266D3BA41477D, 0xA18EC397816F62EB}, {0x9B805B7B87749006, 0x0C3290A1CF5CCFDE},
+ {0x857DB01F7DB25552, 0x3121334DDDF7608E}, {0xFD30C14F5AC9237F, 0x4D9DD7CD15687081},
+ {0x7B872E8F0DA8B366, 0x33746BA445D531DB}, {0x80CA4BE1A24AB1BC, 0xBD8E28A3EB7A05C7},
+ {0x7037E62BAAFB0EF3, 0xFC2C26CB9B8816EE}, {0xDEC52529F43713D5, 0xCA9951D1CB48B451},
+ {0xE9957CA55300FF5A, 0x1ED03F9C0DBCD520}, {0x2540B7009B504EFB, 0xD7089786C86C517F},
+ {0xB704B9A0320D1A6D, 0x3EA9434984E5688C}, {0x6B1D32D691F38381, 0x50F690C9F6802B4A},
+ {0xE6510B02FCE1BABD, 0xF2E01A64EF192B2F}, {0xA0280411F49221FA, 0x3725D59CE66A733E},
+ {0xB04DC0C7D48940E6, 0xA58BC45AA6430B38}, {0xD1994A40ACF2EB56, 0xD05A9F75B4BB8A10},
+ {0x65473AB550A23C27, 0xEF472E2432CF9B53}, {0x7CBC9FEA94ACD973, 0x733B6BD9DC7F453D},
+ {0x91D96D9E6C97063D, 0xC4F47B3FE12432D3}, {0xB6C428DDEFDAF867, 0x1A7AD9F7C61E9166},
+ {0x8DE1480DFE4001D6, 0x20B93FEAD857EC8F}, {0x19A10EB8E96A987E, 0x7489137AECB1EAB8},
+ {0x9BC2A042FE401431, 0x19D516C7D27E52DB}, {0x66763FA122DE6793, 0x75338469A85A5FA1},
+ {0x10023932DA1FD80D, 0xB7B0E003A591496A}, {0xD70FB458351D50FE, 0x8848A412E7EEACFE},
+ {0x769A0497B18074BD, 0xDCA402F5278C87DD}, {0x6062713422052BBA, 0x388B5EE06265B1CE},
+ {0xFD30B3847DC77F01, 0x7BC88585E3AB205F}, {0xBAF046607A83BA50, 0x421171C3A4054F38},
+ {0xA89E73A357F1575D, 0xD46D09F817F0EBC2}, {0xAA6B5A2E464434EA, 0xF8398501FFEEA241},
+ {0x8B78118DC96DACF0, 0xB6DCEEF4A9D70798}, {0x2EC36421F4907E58, 0xD32C729F83850863},
+ {0xB779CE2D20D2716E, 0x587E0B4B1A75038C}, {0xDFA34CE5E8DDE0FC, 0x969AC9D95F86D682},
+ {0xF15B6EA1B08AF91B, 0x916FFBC1445CCA95}, {0x0893A2D2E3C8A62F, 0xFB6025ABBADCE27C},
+ {0x0685C2EC06D9975F, 0x2F95A98A8A1C178F}, {0x85DBC02B8FBDF4F3, 0xC5E9D117C09EAC3A},
+ {0x26A57E40262E2B9C, 0xBE1F2950ABD62627}, {0x0223A4559D81883D, 0x9C30934A897DBD5F},
+ {0xF15A89992A4762BB, 0xFE041444893898BA}, {0xCA5CC89C5C9599EC, 0x1C93CAD9602AC7EF},
+ {0xBA9F4A86E4D68027, 0x7D6EF8EB776D1A3F}, {0xFF9B4B64041A5B1B, 0xF67CA406FDA5011E},
+ {0x083D31362BBBAA5F, 0x0FF43D1BB0157623}, {0x00B96ED6BAD6B291, 0xE5A015FFB4764FB3},
+ {0x4972E489F1BB26AB, 0xB68133C6A0035C30}, {0x0C8DBBF94939C6D4, 0x52782409ACE8FA22},
+ {0x1B0648222538F992, 0x4B7EC8DFB77E95AB}, {0x9822EF63689CAA1C, 0x997EA2F42753E283},
+ {0x13D3C437995E680B, 0x0762ACA80A3F7DE2}, {0x05E02C4CB3FFC12C, 0x5AACC4117E338EE8},
+ {0x94441BF4CF7969C7, 0x25BC88EF5A6BCA96}, {0x1F1C126FCC055390, 0x1988F73CA9CA025B},
+ {0xA27360260C8BAD5C, 0x58148BE3E9C48674}, {0x8BA1A9DF38CCAEEE, 0xC2DC9C5DFC686E7B},
+ {0x496355C7483A2085, 0x47B8F0268A0CBCD3}, {0x4DDAF5CF17E2AC83, 0x613EA6E4A33461BE},
+ {0x6900729971785780, 0xF5C35734987B530B}, {0x0498524E6BB943D4, 0xB4755F6A5003B7BC},
+ {0xBF1D4BE61430227E, 0xE224B56E98B024E9}, {0x14506D1E59704B77, 0xAA16F238CC5E6584},
+ {0x79EC05F50AD13F05, 0x05C5ECD115B5B435}, {0x23EE824BC9CCC0B8, 0x0DCE63F2E893B0B9},
+ {0x1793E120FC3AC3DE, 0x630E9EACA3C90F40}, {0x2714A0407C500648, 0x8ED8FBDBD00D484B},
+ {0x7B065695C77D3A4E, 0xCAE06D208F3543CB}, {0x36A04BAC07B445D7, 0xED4B58A45948E0DB},
+ {0x2FF310677EADB474, 0x1E51947BEBB9F35F}, {0x39921D4D538EF2BE, 0x7DB14402EF127E60},
+ {0xE7A6E5FC2BBC2784, 0x71AF81EE6A9A416C}, {0xF1ECFFF8E4B47955, 0x8EEBC1BEF8F03145},
+ {0x0BB39350BB9BFDCC, 0xA4D6F00039CEF51B}, {0x8836AB63A444268D, 0x9B8FDBE7A01933F7},
+ {0x97B324E8AF918D2E, 0xFA28A1B1D1C29979}, {0x435BE598CEF02501, 0xBD96BD9C38947CB0},
+ {0xFD64D0284D76944D, 0xF83021432860161B}, {0xED64C2214E56858F, 0xEAB4E64EA7A5B4A5},
+ {0xFBF269B2869FD95A, 0xC7EB66B82838ACCE}, {0xA87F49C3D11BE515, 0x366D4F2C376C4650},
+ {0xA837C8212273C439, 0xC69C9806635A19DA}, {0x220C7B78F32A6DB1, 0x08D30F761FD3B6BC},
+ {0x50D8EC840EEDAD8C, 0x2F5448DD701F8B02}, {0x44014DD2B5279311, 0x47911136A6EDF21A},
+ {0xF9103BF0CE5FF5C3, 0x77424DF60F4B0F59}, {0x6796651CDB1960EF, 0x8714D5A1818CFF93},
+ {0xB781A13692404CAF, 0xE9FE750A21034CF7}, {0x30F93E641ADF8397, 0x36D60838446CC494},
+ {0xC98833C7932505FD, 0xA70EAA6C9C9589C6}, {0x4159D9B5A616F525, 0xB5065F9519DCCD1B},
+ {0x549BE143E1AA01BF, 0xED8E098D29777483}, {0xE555BEE803C375A5, 0xE04558C4E7DA0A26},
+ {0x9D7E665BEFE1EDDA, 0xFE505A785AC801D3}, {0xB0012D4F4557760F, 0xAD4027BDD2CBD3DD},
+ {0xDC0E39AEB2F5C546, 0xB73D44A5509ACFF3}, {0xDE1D1EAF37D940E6, 0x695D8CB158731092},
+ {0x04FE4B1703F85C58, 0x9122358E13126D9B}, {0x18EB93EB08DD00B5, 0x8580676A844F7F82},
+ {0x2687155033A23FEA, 0xBA561C20D4123BBD}, {0xE46C7A995186500B, 0xC9AD574463F2BF3E},
+ {0x7242692920AB2801, 0xBEACD544B8292564}, {0xFE1F58A49C11FDDF, 0xD2E477022A6D0CEF},
+ {0xE4775F0CDDA4B050, 0x10AF02C365A76271}, {0xB0F546B326FE4599, 0x6AAA5243546D7DDF},
+ {0x5E6E77DC71C0E895, 0x327D50477FCE0D56}, {0xB1CEA2246982C22A, 0x2C5FFCF13D5C519B},
+ {0x4395900E7036276C, 0x4C83C38E9DF6C94B}, {0x933063E5F15EEB6B, 0x4DAAFC4BF8200636},
+ {0x18D1C4E55E608BC5, 0x0251F9EB14169750}, {0x6DECDF09607A832A, 0xB1460DB59D9E5722},
+ {0xF149605D5963F2FC, 0x9FEED4950C37C67E}, {0x0EED3429F59C8D43, 0xAE60AB558D8106F4},
+ {0xE593332AAE7C9B78, 0xA7AFB99EFFA4C892}, {0x0609CE74EE525D5B, 0x959076796D69605F},
+ {0xA0C846A4A6AC5976, 0xBCFCB81B8E612F36}, {0x6A3635BA91B9E592, 0xFA06DD5A724918A0},
+ {0x30E414CB96BA8BEA, 0xD1CF068D008B0A65}, {0x93E27504A3ECB081, 0x02FB4CDD3AD3665F},
+ {0xB317C92FAB241160, 0xA8CC65A19514B82E}, {0x562413ACE9D57205, 0x45B1B1DDDF5E4689},
+ {0xC2F0CA1FC23144C2, 0xE422997166CEDDC5}, {0x5A18EC53F0CC8CF5, 0xD595B63B4F6979B0},
+ {0xF2B80DF2A13659B9, 0x847633176CCC931A}, {0x77CDF9E2F2F98F2A, 0xB7280A9DC267399A},
+ {0xAAB7F25E8A4862C4, 0x290F1DE48915D290}, {0x4ABBB89E3F0A3512, 0xA2C9084FF03F08F8},
+ {0x72C6A55FF285409A, 0x8204ED4A22BB578B}, {0x6E952EA63EF98B2E, 0x35CF968D0ADF1045},
+ {0xDF43E0C2D6EE5193, 0xF722E7122F2A107B}, {0xB6B5DA4A6C10853B, 0xBF8C2FC42B19A229},
+ {0xD2C5E98D6202A18B, 0xA1C4885D77D4276E}, {0x60F8FFDEC6F5A369, 0x77B3FA1592EEA277},
+ {0xC5580217E2E2686F, 0x6CD1D95D52A38D37}, {0x606CF88A8891BA92, 0xCEDC77901E43EF13},
+ {0x9DD5237F7F5F5955, 0x44566DE2777156F4}, {0xF7132D90BCF211B7, 0x66F35B8D95EC66E9},
+ {0x08602660B6ADE909, 0xD8FB25B88168F12A}, {0x5E19DC32E748B82F, 0x233CFE5DB276AC12},
+ {0xB226A12F2ECA2195, 0xE1D58D0FCD598BF5}, {0x916CDF0A1D6A8920, 0x19D1096F89517F37},
+ {0xB67DF494368E1F1B, 0x16EC626E5E111C4D}, {0xE88EB7408D53C348, 0x8DFD3DADF18DE9F2},
+ {0xBBDCB9F627DE34A4, 0x9D26B67AB90759E4}, {0xDBD197FD64ADF94F, 0xF3CD8078FFA18F17},
+ {0xC5D060B90ACB7C7A, 0x556B315FFCB12A6E}, {0xBDA7DE3E1026CE81, 0x32386E847D1248E0},
+ {0x2E8C105722A4482D, 0x42A5DA84D08F8117}, {0xD31992C7C9B1D6B2, 0x783D289C8AD51D87},
+ {0x1658D294451DBA8B, 0xFE8B2D48C4152149}, {0xBB5777BF2CF4CB78, 0xFE1BAA8AB5A477D8},
+ {0x93073DA49A542A8E, 0x61989E50C273BC39}, {0xD84FA4D3227FFA7F, 0x80C3BC6A86E5D717},
+ {0xA709072AAD2FCA4D, 0x21540BB959CBE108}, {0x8FF8B2FF38329487, 0x2EA0796B7DF129F5},
+ {0x9B41974B4A83F220, 0x85772E3238DE5790}, {0xB0744DD597AAAF08, 0x6A90DB4FC387F2C8},
+ {0x88CE9BE294D8C5F1, 0xF2186744C7470BB7}, {0x5FC712DA4719B6F3, 0x052FCA3CDC9FC14D},
+ {0x1D4B31CC90FC95F2, 0x98842DC3B965A711}, {0x69C216DB9809B17D, 0x0EBAD11ABF3D8244},
+ {0x348813345863A56A, 0x948D0F7D48EEAE86}, {0x56D75CCE59F0D90E, 0xF8D95B38977FA9A3},
+ {0x51F626DC4AB52BCE, 0xD3084E5D7E990F42}, {0xF6F692CCFA702A6A, 0x037118F4E73FBBA1},
+ {0x954AB70FEE571AC2, 0x7B2D31FDDBBB89E3}, {0x960267EAD49F1545, 0xAAE1F695348B4C93},
+ {0xE080BB52C4E33C1C, 0x01FBD3F2F9EB1A64}, {0x37AEEA33545C8C9E, 0xB56D23ACAD09969D},
+ {0x002D35B26679A355, 0xF06453551CCB6AB6}, {0xE173E10FD87F2748, 0xE4F2235061F8320A},
+ {0x393C8EF38D364EB5, 0xD1331EBDC35291D7}, {0xB2ED2F596293F147, 0x014336D6E38FC788},
+ {0x9B6822568A371072, 0x9EDFCBCB20581F54}, {0xFF1DB3AC5E719EE0, 0xEC6BB420B0660CFA},
+ {0x381CA2F197881FA5, 0x6E9374617BB79A33}, {0x67C0B6D1FB30F24A, 0x93D96BD5797B90C4},
+ {0x0F11CF84A6876530, 0xB62A3A0D6C847DB6}, {0x71CAD98F1AC4D19D, 0xDE67E9A849155099},
+ {0x5F52B2E5354E6A89, 0xFD933226C828690D}, {0x80EBA2B1384A0827, 0x62B894B369AC64AC},
+ {0x544E7FF53A8F7DAB, 0x3B2BF1423162A99B}, {0xF36FBEA88B89BE13, 0x100C39937BCAB5F1},
+ {0x8D186329433EC679, 0xE0D1DDB1B4F4A9A6}, {0x59E7F95C6045BD04, 0x648D2F49B1FEF531},
+ {0xF3732B4DD9D76755, 0xE9FBDD6649BAC0E0}, {0x921A164E2E8D5979, 0xA36EE1336219517B},
+ {0x7FE1B67DBE8D155B, 0xE6B2753E5A47D983}, {0x923878A568E05ED6, 0x44694D2B1584DB88},
+ {0x18681E42E7DC6D6B, 0x2792F51E3D4BD2E0}, {0x0D2EE3E5CF7CD8F4, 0x6D6DAAC839D5281D},
+ {0x4B269B4BB9FFDFB9, 0x18BD413A802F0A02}, {0xD8A586D06D54AF63, 0xE1415A684A0B8E34},
+ {0xEF3A2BFFA0F5938E, 0x7D6A5EF2F60C4EBC}, {0x8CE826F538207760, 0xB1AA3DEDEDA0438A},
+ {0xDDB70FDBD6209F8A, 0x4B55A22356E49227}, {0x24840B3B445135DE, 0xC1914B12C34C4B96},
+ {0x20BEA3106CFB915A, 0x946A6FA67A15705B}, {0x4E358CD14B67E8EF, 0xB8BA4E08C3B4BD00},
+ {0x199DB44438C875C2, 0x080DEE3BF3D0B0E7}, {0x06D549825C26C202, 0x370341366309927A},
+ {0xE0C5065B9D110DDE, 0x942C81D0721B2875}, {0x2A194ECC4501CFD0, 0xDAACE890EFB752F7},
+ {0xB7606FD90084744C, 0xA9490C2190046196}, {0x7E8CA323F2EF164A, 0xC03A65CD9A3D1896},
+ {0xF883B13EA47600EB, 0x15C894914ED4973E}, {0x642871C188A25BDD, 0xB3E380A175316FE6},
+ {0x914802F1BAF494D0, 0xFEAB35D1975386A4}, {0x645E5F0E3966699B, 0x103E7616BB84591E},
+ {0xE199F84528656831, 0xB715A341846C7250}, {0x3F8A8AFA6D0468AE, 0x81B881F7DA5BB02F},
+ {0x34E426026FB39E8B, 0xDA8B9986FD2392F6}, {0xC4BB58C73D0EAB37, 0xCE76731647BB67FD},
+ {0xF400FB72B0B96F2D, 0x30F1B38761B84288}, {0x151E7E822A7D6BE2, 0x9D61AF4C48673F05},
+ {0x6001DDD3931C2FF9, 0xE6F3A0872E10C738}, {0xA2FB721A7DB31EEE, 0x7EB7D4A3E9AAABCF},
+ {0x12AC89091DA08063, 0xFD365FD91C41D30E}, {0x2E0D4E57CF0466C1, 0x9881A0B3C6A24394},
+ {0x6E4EB5DE994BEFA0, 0x93EFBFDA873F032F}, {0xEAAD2ABF18535B5A, 0xCF0BE92269EE7486},
+ {0x1ACFEBC1CA59CFE4, 0xFF202975CD9C1C46}, {0x5DE536C578EFB298, 0x4F0CB6E0371819D5},
+ {0x971DF0B5ADBBE61C, 0xE1CA083C6AD7B67D}, {0x58A56983FC32B95C, 0xF3D6CBB2F9E18333},
+ {0xDC593E7B10B534CD, 0xC128F3EC66B46C00}, {0xAD286497A3FB8F8D, 0x9300DA6915214905},
+ {0xD364A1D03B372ECE, 0x051ABA00A85DC6FC}, {0x7D15ADADAD0DD650, 0xB7858CBAC6685CC2},
+ {0x02BA1282F325CB32, 0xA8995BC8D2520074}, {0x21C591E6B5CD5C14, 0xCA87B1DB85049337},
+ {0x565D70605C517A1C, 0x193EBD1FA26A1FB5}, {0x254C3BC33170BE81, 0xCD981422E69C874B},
+ {0xF028F19C2A8351AC, 0xF5C53B0D9C530C5E}, {0x42B0DCF457131044, 0x7D1DA7F33905510A},
+ {0xBAFF7F7DDFD219AE, 0xF7DE1AC14E01B14A}, {0x5458EB94229E7F0F, 0xA81A32E903261F9E},
+ {0xD3DE31368E456D7E, 0x6525931FE4166669}, {0x9715365172BDA2C8, 0xDE362D364B05ADD6},
+ {0x3FD3295B936ACB02, 0xCFA96922E1A9033B}, {0xD56FED895964CC19, 0x80957D806A3EBF3E},
+ {0x4B3200DBA9FE143F, 0xB2465F3150B56C90}, {0xE75805B5314FE1DF, 0xADEA528D744F5F29},
+ {0x29B9070D5A994BB3, 0x5DB0A78B8A8959B6}, {0x0C2911450A1FEC12, 0x9CB9A12184670638},
+ {0xA64625D1CB898000, 0x230A2D292285490F}, {0x9DC0CC5D506BA2C6, 0xF01A7C2F78946F46},
+ {0x01A6E1DA0635118C, 0xFC877D0089E32E05}, {0x425500623BD6531D, 0x9EBFB2C1D498F091},
+ {0xA5D42863B4FD540C, 0xA8630F3A545DCD41}, {0xB23D32CA607336FE, 0x92F3D0F28B0174A7},
+ {0xB6D21CAE6F6D735B, 0xCD3821C742CB8751}, {0x5C60725468EFA983, 0x874946D3480B77BF},
+ {0xADBE6E648929F1DC, 0x76BB35D68AEFA1AA}, {0xFFFBB5526011002B, 0x654E1D76F56D91F1},
+ {0x874556D43F523C05, 0xCDA2E7F480CB8D4E}, {0x1306FD13866D22BE, 0xAEBF721B9061D87B},
+ {0x285D1DBB73D49038, 0x24FDBDC682D1A129}, {0xD01420222577EF14, 0x85F023F968E96800},
+ {0xF951ADAB48E2F6B3, 0x90B86BC303E40E39}, {0xD4E51462B0AB0E86, 0x17CD08101D778A8A},
+ {0x333CDEE51141B39A, 0xA8F8B5618C59761E}, {0x3936385726F874EB, 0x4545A082D4A5430C},
+ {0xAD1B0A041350FADF, 0x1EDB368106336DF5}, {0x06405CE065899E0F, 0x215B950146E5E1A4},
+ {0xF1C549D718217A1E, 0x33F41868291001E4}, {0xFD4E6621C6311276, 0xEFF58104902F1C0D},
+ {0x9CA85E7CD53EFAC0, 0xE4292708F0E99876}, {0xDED008771FC8BF3D, 0xF8DC94F49D6F0923},
+ {0x998C6348861B832A, 0x444B4EF0072CC25F}, {0x427B8B4F6703756E, 0x7F0276B0DD85705E},
+ {0x02C762DC72E4ECAE, 0xA5BA5CBA6B5D479C}, {0x1F261F1F2E7C33B3, 0x2ACE2980D249ED21},
+ {0x7272746D885540C2, 0x868B6C69FDCC95A2}, {0x9CA6E195EFFBA54C, 0x3162BFC45BEDF661},
+ {0x9F15A362583D9CF8, 0x74D3FC8A3FCB292A}, {0xE52DDB4548B2371F, 0x64E73F28766FE4B7},
+ {0xD03A8CD58BA251EF, 0x86FDD9AA86838A47}, {0x67528F9EB2519F67, 0x374B3F4D8153B3CA},
+ {0x7D5C38C05F39D228, 0x431ADEC5E685A063}, {0x4C9C44BEC5AB0E94, 0x60B764384D45CF0D},
+ {0x0FE38A2476CC6B10, 0x67E8CEB54C27E075}, {0x54721495CCC9FE66, 0xE8B7A6D2A7E3CB61},
+ {0x1F7F60041189099D, 0x006127F8389AF6F6}, {0x25D8E51CB1B69234, 0x50364B5CC23E2A3D},
+ {0x49AD6B8496323F7D, 0xCAFBEDEC0F406AF3}, {0xC89B26EB60DE0FCD, 0x54D28084B1DFA344},
+ {0xD0439EB7C1E0C073, 0x251114BABE72DB00}, {0x65D7495BE0AE315A, 0x34B033CA8D49D438},
+ {0xA9D633B0291DE2D8, 0x7FB67FB857CCFD65}, {0x7FD3BCED67E4BDDE, 0x6678D5D5BBA53D23},
+ {0xEEFBD9774A31FB0E, 0x2081207C67F199D7}, {0x152906FD1389CC42, 0x37C2F5A1A15A9F3C},
+ {0x0B08F0CD686C3EF7, 0x127A282B1B372DE5}, {0x573210D5D68B226F, 0x07CD524FA19B294B},
+ {0x0EF5F3C02A4D11C3, 0x0716FCFF52CFBD6A}, {0xA7E951820404C424, 0x62AC7616D0A49BF7},
+ {0x2365590FB050E37F, 0x1CCC6D676B853106}, {0xCF3AEF4D5322C315, 0xFA5CCFEADE13F415},
+ {0x52401024C68DF246, 0x38D708FD3FFCAA5D}, {0x22C87ED7F51E2CBA, 0xB3A905F3A732D442},
+ {0x0956751E1F621FCA, 0xD37CE166EE0059FC}, {0x0EBE4250F53D4461, 0x564F2D4B7184FA37},
+ {0xA53CE2DE91F41C89, 0xDEBE2E2DB3E4AFB2}, {0xF77A6E94D89C00E1, 0x6E069F91CCAE6831},
+ {0x00F3092568D9A811, 0x61D14F1AC6649CD0}, {0xDEF9C7285E08B0FC, 0x9734BCD034877998},
+ {0xE2C04DA3182082F3, 0x693312CDC7706FA0}, {0x22DBEF169809E953, 0xC37C81B4EBE8F5D9},
+ {0xEFE52DB30895E5B3, 0x3CE84F75CCEA73DC}, {0xFF6C51242E619C68, 0xBFF57572304966C1},
+ {0x9A0FB537113DE838, 0xBD7057F0EB4F8DFD}, {0x52EEA0939DEB20F4, 0x8E5CF48202D7D026},
+ {0x95242487A7B0CC29, 0xD70BE05897372AE3}, {0x1DD21CED129F2D86, 0x67592D587339E90C},
+ {0x0566E9247D23CE9B, 0xA255C5595F0F226D}, {0x9A8D10C508168DA6, 0xE80711430215BA79},
+ {0xB4FC45F487D3A7EF, 0xEDAF080927336061}, {0xEAD5AEA59D45E28F, 0x8D497E0DDF4762F7},
+ {0x2BCF953728FBCCB4, 0x14906C8EFFB03434}, {0x8A9B8C0C6E124618, 0x333A690F1F18EAAF},
+ {0x01ABC059BDEE186A, 0xEE1A67509E5EE19D}, {0x0CB020B6254C0F13, 0x544A95138C65E357},
+ {0x880A86D548368ECA, 0x7752BC4C1CF2BFCC}, {0xC8CDEEA9CBA32F39, 0x7D5774EB7A2C8BA0},
+ {0x4BE145E9D2F9EBD1, 0xB5DC621B80E7E772}, {0xFFC203F21A092E2F, 0xD64026102DE2510A},
+ {0xAC630F4CBEB12C18, 0x875F015777F11B6B}, {0x8FD4D05A170AFC7B, 0x561423E6E4BBB4F3},
+ {0xA6E48523F6D74E6F, 0xA44EE43F8FBE5A12}, {0x798441AD8868E749, 0xA7310C6F53E444E7},
+ {0x2B037E3B02184312, 0x71DCE7AB7A8076C0}, {0x93FEDA6C7B359E6D, 0xDFDC9C0A0EB229B7},
+ {0x4EA4B4DEB5C142C3, 0x16BF8CE4E3A20493}, {0x82DB65DC014B965F, 0x2ADCE03BA98142ED},
+ {0x70CBFAB6D9C7BB84, 0x03E98E0CEA80CB35}, {0x102E3DD7FCDDD17A, 0x98C03F55CA3141F9},
+ {0x69D2EE1378AEF7F0, 0x4AA3A0CF572DCFB4}, {0x6AA30357CC5D6162, 0x067B1C4EC03D7E75},
+ {0xEA93C5266CD982B3, 0xAA99CAE3DFB858F9}, {0x58F0CC5B570BD2AE, 0x2F6978669CFC9EAF},
+ {0x7894A33041F4FA67, 0x1AD41F1984639288}, {0x7F6600BBEF019189, 0x2F5F767F7529D823},
+ {0xB18A6B4F33A66302, 0xFC234C1EDEBC4719}, {0xD756E8C6CD8936BE, 0xC2E2E8960CB3CA28},
+ {0xA25DB31B189BE5E1, 0xC7585865095002ED}, {0x059FD21BF2F2C005, 0xEFD9ECA7C3888CBD},
+ {0xD6144C89C24383C7, 0x40B2434BDA51C7FE}, {0xFE02CBA9AF3C2F4F, 0xAE24E35DA104912C},
+ {0x0D75095D360670E5, 0x9B3165D9F10DE310}, {0xDC8646CC16162A7E, 0x7732E3B53AA4CF54},
+ {0xA89BACF489B5B525, 0x0E15F57D7494CD6F}, {0x306BC0110988ED97, 0x40AF261DBCED5DDE},
+ {0x02A3CCB7BFB48528, 0xF4EBD0219F114AED}, {0x54E8E5D2EE2E0214, 0xED1BA8DBB28A876F},
+ {0xFEBA7A46D686EA3E, 0xBD3FC11A857E65F8}, {0x68177F158026F3AC, 0x319884EBFB5B8E46},
+ {0x581EDE91AA59906D, 0x3CF2DF0D5DBCA512}, {0xF915E5AA1315F4DB, 0xC93F35DADC2B7565},
+ {0x759B642C63BABE02, 0xF9025516FA6D89A6}, {0x14A47E3E21F0531E, 0x6E7CC7974305CD45},
+ {0x8A704253758B9768, 0xB9525DF11ED10425}, {0xE5F15B95C8819E6C, 0xFCEA4EF9E4FB93B6},
+ {0x21BF7BF4687B7CBA, 0x2D75D1DD63325401}, {0x6019DCEA5E7EE0EE, 0x442E7F30FF424530},
+ {0x2F68B7351AC5DF13, 0x0EA028BF0599D9C0}, {0x8BD808C1DEB27BE7, 0x87228BCB4D1901CB},
+ {0xA106591C6979E858, 0x88F1793A5B548D3E}, {0xE82C0006D7296855, 0xD8F05416AB91D1AA},
+ {0x84E56A106231FCDA, 0x0894E6B52667BA2F}, {0x9A959B696493B0E0, 0xD7A0516A8DE8CD83},
+ {0x0E7498541B5075E2, 0x9628BA28F9CB46B4}, {0xECDD5EB0E03F7F26, 0x308F57615BA0558B},
+ {0xF5D261DC0C95C2D4, 0xBD1D5AD268D61468}, {0x0AF213202C506474, 0x3D878FC04FEA079A},
+ {0xBD3262B502A58D30, 0x5B70DCF25FAB5BC5}, {0x4E23E41B5A9EBBDA, 0x8CCB8E249CEC80D9},
+ {0x037B08FDE29984C7, 0x5CB934B591424279}, {0x7D82864056305209, 0x88920F77F8997717},
+ {0x711D3E1F94506D13, 0x3EFA1EAD8A85A331}, {0x58DFDAD6855EAFE7, 0x009EC23CD67F5411},
+ {0x29615835AA842565, 0xAA973473C09B62C0}, {0x4CB313B905F955C0, 0xF49A0E16B73E456E},
+ {0xDF6ABF8CA35F934F, 0x3043419ECD737324}, {0xDD927B48061F337A, 0x1301C4D37C96FE33},
+ {0xC32A5051895D42D3, 0xB53CA19ED80186D7}, {0x5B57CD65DFFD2753, 0x55A4EEEF1CBF7EE3},
+ {0xFE20B8C52600297D, 0x441269EB14BD5253}, {0x70CA29E6C88AE502, 0x4F811B81198D23AA},
+ {0x4145BFE3325D605F, 0x79E2501F364D2885}, {0x4FB22D45C9C249E1, 0xA8D08B58FC411DB2},
+ {0xC3AF9D7BC3649CA4, 0x91BF6ABD4F0C5577}, {0x17D350887B903FB5, 0xB15630161284655B},
+ {0x43FBF6B27DB7D338, 0x2AD4B9F73D225BE2}, {0xA0F1754896A9209B, 0xD026A630ABC522F4},
+ {0xB380462B9299275B, 0xF6AF3D8F4CBAFF95}, {0x7594EEA265274942, 0x3415C2BACEFF1519},
+ {0x5E54EF7E24DE7DF6, 0x985CC59AACFE767C}, {0x71D5382E2F2719B3, 0xC0553C585D50BA87},
+ {0x3B7BCCBE85AA4DFE, 0x07B7E2E168B0369C}, {0x308B558DDFD0E033, 0xD784D58D3A75B431},
+ {0x3154D9852C111CB4, 0x19AD95CEE57FB276}, {0x785388ED9A5F8635, 0x9BE655E5B8B85166},
+ {0xE34F2BDFBDFF40D7, 0x11F2674DDC603E88}, {0x99C4ECC8F0D9CD97, 0x53C853E2D55BCA84},
+ {0x06BA4C67BE11C456, 0x0AC05A9FCCF991F1}, {0x00CE3CE0552C0F4D, 0xAE12DA715EEF6348},
+ {0x33855185E1419103, 0x695654061D6CCAE3}, {0x13314D663DD7107D, 0xBD3B85A77B0A08BF},
+ {0x5DED6BC14AC656D6, 0x11571F86EAEDDA11}, {0x0CB2A77541533228, 0x0AE6AF2485FFA2A7},
+ {0xE43A809FBD09A721, 0x128B26B0F63B2DE2}, {0x70B6F2733DEC80CE, 0xA14FC1BDEAC1E0AE},
+ {0xE3AAF395AEFB2D8B, 0x26D2FCA545F4F0F1}, {0x843C897819724115, 0x02FC71B42BC97C9B},
+ {0x133CF9B4CCA1E3CB, 0x8C80671B9A1A667F}, {0xD1CE4C829E3548CC, 0xE66577D262860535},
+ {0x9B2F5E5813B774DB, 0x920D5CACB7395B87}, {0x7018ECEB27ED1F76, 0xF2022C1C29CFB885},
+ {0x18C88F207BF826B4, 0xDEDC60F6761FD48B}, {0x9EA77C7AA992682C, 0xE59CD6550411EA48},
+ {0x4D7D0FABD67E8E08, 0xB72BC09587ED2F14}, {0x8F96F4B925BFE9FA, 0x347F2822A3E7F00D},
+ {0xBF5689B04B6D0F30, 0x0BBE9AF2A2BDF1CE}, {0x9920B26352E9EAFF, 0xA400BA1BBD7F20E4},
+ {0x24DDCDC77EC70BDD, 0x952D251B15FE0707}, {0xFCBB99476F214C21, 0x9B5ED0F009834DEA},
+ {0xD9B8CB60695F72AE, 0x97C6ED7FB685B1A5}, {0x7985453991508AB9, 0xC9F23DF5548AB95E},
+ {0x08CFDB0696E3CDCF, 0x31CB2A77EF8C9619}, {0x5B93B874E95EACEB, 0x2B657FE924C0F15B},
+ {0x1B71B28B32882A49, 0xEFB21561849DDEEF}, {0x9A24362C5B3A2BE8, 0xAA3AF8803D794DD9},
+ {0xD0FBEA7C905F8DD8, 0x5189361D3A4DD122}, {0x02429C4629121A69, 0xD8C369B22F2ED0AD},
+ {0x3D0C6E10C55F4C25, 0xFA95A94DCFFA40E3}, {0xBA73F67955954A22, 0x096857744DB73522},
+ {0xB16BAAFC63894EC2, 0x56850225E9E52009}, {0x7F1E2A7727F6512F, 0xBDE6F1F59AE7C109},
+ {0x06301ACDD8C9A5C2, 0xE4CC0BF6306FF124}, {0x5957DCDF6B2A3870, 0x365EE5DEF2D5BA4D},
+ {0x018F37FC5123064F, 0x29AA1AC58E4F5D04}, {0x98FFA05FBF27AB4C, 0x060D83B2637D0F33},
+ {0x2C4519F9EE69BF7B, 0x779BCEADD4B2D707}, {0x093135CF50C909D6, 0x1CE651E1077DE17D},
+ {0x35B8655268849B56, 0x18B1F3F4CC1E1D46}, {0xFE27085A9DC36869, 0xE9C90EC88C4581ED},
+ {0x5B32D34177351258, 0xAF9644248D3ED570}, {0xB0A28A95E0F76BDF, 0xE047F544D3B4AE46},
+ {0x3AA702E291A71329, 0xD1652433BF836DAB}, {0x53DE57A0753E266B, 0x3C47D205E1F01B2D},
+ {0xB7C14FA195CC7B48, 0x2FF78E57F352F7ED}, {0xF363F5C77CB771D7, 0xE45FE646FDF2E158},
+ {0x4831A74E7A5BADA5, 0x270ECE00E6860529}, {0x61541CA7E886C776, 0x8D660989BAAE6B0D},
+ {0xCBDC2FBEF2F6AB0D, 0xAD4C2C738F5B5CC0}, {0xFF20AD41FB57348B, 0xFFF15B5B7297A0A1},
+ {0x3EFA96F433B1C886, 0x6D654083E1E2EE4E}, {0xF3D08A5F5DAAB2C4, 0xB4CF0F6805331460},
+ {0xA45FBE694F1D3F4C, 0x35520E89A3BB541F}, {0x8CEB543B7AE981FC, 0xE6413EC0A6992B1D},
+ {0x5A62D14ABD065F73, 0x64B1DF51213595E9}, {0x2B3902D5342CA817, 0xB298496344F34A0C},
+ {0x5ADD4575BF272CB6, 0xBB62D1CBB6A6A30D}, {0x38EDAFD62FAD26FA, 0xC0EA5B102AE7A01D},
+ {0x8E1433384664CEBD, 0x43C7C7CB00549528}, {0x97589C26951DAF0E, 0xBF48D4E042750C5F},
+ {0x871C214D2A0606BB, 0x14DAA9915E5E7695}, {0xB9BAC5267730D415, 0xA269E5A9EAFB58D7},
+ {0x14B51582D2FFF288, 0x139FF58602A35AC0}, {0x761D12DFF19DB8D2, 0x6191D41B8410E8E0},
+ {0x9865CEBDCF23F4F8, 0xF43386B548BEED50}, {0x3850194D976535F0, 0xEDF77BD703769837},
+ {0xE54732011EED32F5, 0x096ED26018C36E8A}, {0xA0A14241200AB195, 0xC4B424E92F4FF234},
+ {0xE30A8C07F424BF71, 0xF4BCA8D99E8312C8}, {0x74E9143EF3719855, 0x061C5A1F94AD7BE1},
+ {0x18EAAB7D21893690, 0x75251BC968E0D04C}, {0x169CFB2E417802C7, 0x44FB84D96BA1B67D},
+ {0x8857AD1334FAC2A7, 0xE04C38828F870BAD}, {0x90136D40698AE72F, 0x5294BB5BFAB61DA7},
+ {0x183BA0E6F1EC26C4, 0xBA1799CA80FE90C2}, {0xD314418EC8D07D06, 0xE22B7A32CEB3273C},
+ {0x6BB477244AF80EFF, 0x06AAE6CAD1DBDF14}, {0xD9EF9A0D1F34CDE5, 0x464061816D957513},
+ {0x9CE87F9C6658B2C6, 0x3B811F6989555382}, {0x47A3F52FC9929F02, 0x475C8893BB47F723},
+ {0xBB77F4F5A8A9DF52, 0x94C4D0F63AE66733}, {0xAEEB1E68A444AAC9, 0x65BF31B158147F69},
+ {0x88488A4F69323299, 0x0191CCD91CA52DC5}, {0xB978A2DDC7BB1F0D, 0x64008B4D39A9730D},
+ {0x94E77F77510C3EA8, 0xF91DEB6BA397D75B}, {0x9772AD7FACA375A9, 0x27CB2955E8DFED4D},
+ {0xA89B0FBDAC32D2F0, 0xACC2F63ED66934AB}, {0x525541A39C3B89B9, 0x0DC857B58E59826D},
+ {0x01523E9D570DA9C8, 0x93BFEA7A96926447}, {0xECF7C37ACAE52B32, 0xD686063C0BF77852},
+ {0x67122EF59DF47118, 0x1A8F6BE05D00CE76}, {0xFF701F4A4FABFC2C, 0x224A74D7C1F5432B},
+ {0xA3FE962A506840BD, 0x9513B4110AB8C527}, {0xD8F6F0E394AD791C, 0xF774C6E16D292503},
+ {0x62D0ED124D77F0CF, 0x8265CF8EFFDD6EAC}, {0xC16F8DB0AC2BE62F, 0x90319B26562FA8C8},
+ {0x97F22EE3FC294FAC, 0xE1BCC8AA60A5E86B}, {0x7054AB0220237DAC, 0xE5218956DBBFC036},
+ {0x5F969BE224D42DC6, 0x484DA483D92478FE}, {0xE014040D55A027B5, 0x6DA28D2BF4A47DEE},
+ {0xD2796BFD0536BED3, 0x5E23A4121FDBE7E6}, {0xAD385FDCBF5F03A7, 0x6FC096D2A1B2A356},
+ {0x4E1F1582700E5707, 0x77E3AC1F4E90F14A}, {0xE8524C6A8B338C80, 0x5EBE3554EF21AA39},
+ {0x40951DE870CC5785, 0x40C2CE988B98BB0A}, {0x08DACEE3CC19A586, 0x46E0DF255C0A59F6},
+ {0x5B28545F907489B6, 0xCD8E4232BC2E6759}, {0x498FDB2F48A6C67C, 0x7B4084E991E21142},
+ {0x340ABD6C4F71E610, 0x23DA355FC54990D3}, {0xCFE9FAC4D1B110FC, 0xD11506A14D104404},
+ {0x4B6B31A3A7429D69, 0x1E4F6AD9DB2D98FC}, {0x888448F93B64B5DE, 0xBDEA1760594AC278},
+ {0x01D9ACCA82F1F6E0, 0xAE624F74FD8E6BBC}, {0xF08B0839D87340B4, 0xE075CFFF13A9E39F},
+ {0xF2A6FD1C0C294591, 0x4FD81982A281B5F8}, {0x564EE6BD376C9176, 0x67D6405F4EA66787},
+ {0x3C6B8C86D03F5BFF, 0xDFBEB6A3ADDACC8A}, {0xF3DA954130BA2EB7, 0x00F7725A88B19B35},
+ {0x43EC83C920EAE166, 0xA33ECB55919F0789}, {0xF380DBC9BEA83964, 0x0751364059F0073A},
+ {0xCECA74A3B5F3C302, 0x6566E5F0FC48C0E3}, {0xE77FA67704682618, 0x5B3C6F301863A4AF},
+ {0xFFA08375652EB949, 0xD881442A20E67671}, {0xA26C51A4F9D0B3D4, 0xF447BB1335B48C46},
+ {0x1404C80B3C08A813, 0x5FCA610378650E04}, {0xD00F127AAEA422FE, 0x0114209ED4C6939C},
+ {0xEFAE9A3AA8C30F54, 0xBCD99C23D673C594}, {0x370106F5307E9902, 0x004D6881AA200B0E},
+ {0xA764F38CB24D32F2, 0x52B5E78752A63D2B}, {0x9E7585EE7B872116, 0xAEDC32067C9E487A},
+ {0x2E2069E07D6A5101, 0x61B6BEA131548AC2}, {0xB3E3B461634F6F9D, 0x917CEB5882271730},
+ {0x95777D39AF85F87D, 0xEE920F1AEE928DAA}, {0x02B18D5E07671BE5, 0x23CF859664467095},
+ {0x9E469ACAA2DDBC4E, 0x4EC1E7F83C6A15A5}, {0x2B483D1849B373E0, 0x7D02942200F9DCBA},
+ {0xF4EA3498F8A53165, 0x330E65C38A121873}, {0x1D374A181177E729, 0xFFC16469D5EDBABE},
+ {0xAEBD0F5A9DF5A0FF, 0x0FDA40D6208AAC36}, {0xE05E45DA242067AC, 0x92D54191EA9F56F1},
+ {0xD2F356E6C1241468, 0x0929DBAB2E3B00AA}, {0x89949DC3CFD97ABC, 0xC19B23817197DC96},
+ {0xA36F8E57F510D0BE, 0x5676031CA3125C62}, {0x7CACEA1BFE7871D8, 0xBF907CE3D281F056},
+ {0x2560247E153B58AC, 0x05B6440192EFF1E5}, {0xE3B2F6DCDE42936C, 0xE3D44DA313C7E4D5},
+ {0xAFDF904448A4BD46, 0x7DE1A9A1E96BC3A2}, {0x6C115816BCD45697, 0xDC3778F5E4D98AED},
+ {0xB53AA5127E6FEAB9, 0xF965CF396076478E}, {0x9C1DA091A20E8A03, 0x49DAF905FEF220FF},
+ {0x4D2968CAE5FA8642, 0xDECB6AC1DE064D8D}, {0x1732031F98B23D7A, 0xF910FF4D2AAD0A50},
+ {0x1515F4C8E050DBDD, 0xFDDABCE8C3106FCC}, {0x860CA5691A2EE71D, 0x64962FD765099ECB},
+ {0x26F10B2267CF3107, 0xFC8DC8C37C56F837}, {0x77C6263C13AFEDC1, 0xFAB3AC986EA2EEC5},
+ {0x1C6F08CEDB5C331D, 0x9DAFD34A436C7BD0}, {0x8E022E4592777472, 0x57A2C0550C0027F9},
+ {0x41A40FA88157407E, 0x3AAB09FAD3AD4FC7}, {0xA91E53B634BAB1D3, 0xBCC534AA7BB38EBA},
+ {0xFA337DBEFDA4399A, 0x61176CAE6593831B}, {0xEAEF16FC18DA889D, 0x394520F3C261A64C},
+ {0x27A71FCF1FCF35A0, 0xC0ACA2F2A7E74FDF}, {0x915634B08B6E58DD, 0xBE0F3F82549D1F9A},
+ {0x89F53114DB280BA6, 0xF040CEA31E1927E3}, {0x083271D830FB2174, 0x0141C91CDF178A91},
+ {0xBD977A1975B24DF9, 0x115B08A976BB79DD}, {0x0087927A2A94408D, 0x22253E4647E21810},
+ {0xC02FD22DDCBFD854, 0x224E37914CE80B68}, {0xBEB296833874A714, 0x29BD32B2B847C764},
+ {0x96D4DC88801E77C9, 0x2134E660377C8B7C}, {0xD572D51C1DE8917A, 0x1E938029F861D683},
+ {0x60AB3C29C24069C4, 0xE39B349D7F562DDC}, {0x73BC6590C0C7E112, 0xFFDD36912B443B28},
+ {0x99C1ECF667689271, 0xED3DBABE8D41DF65}, {0x30ED6A6CEC00DD33, 0x663115F64A609322},
+ {0xB27D063C68E8D010, 0x5ECAA58C615A1E9B}, {0xA8E7F1770AF9262C, 0x0F7D8CABFF03F612},
+ {0xDE624C45D815F8B2, 0x6AE45F4D6D0412C0}, {0x78498707FFC6AE66, 0xD0EF8B82399E0F04},
+ {0x0913A649764F7B7F, 0xF2DAD6A9CE0ED22D}, {0x3A5F8674F5F947BC, 0xDB64F5FE1F79163B},
+ {0x4F03F91D8B27D20D, 0x65631CCD0B4BDF69}, {0xCCA366649D3EA1E6, 0x9AFC1A5A217BF3C1},
+ {0x33D9A32D741804EA, 0x8D45E6307542CC74}, {0xC2ABEC4B01FB879A, 0xCF268A91DEE903D1},
+ {0x5E3DFD4D352202CD, 0x7A047CB481AE217E}, {0x93D35C05042CBEB6, 0xFB63CEAC4C6DF28A},
+ {0xD31ECFEB1BF900F7, 0x6ACD3FBE4F67568A}, {0xD05B3A635A9E6D3C, 0x6B72551569FD8CC2},
+ {0x089664C5B58D980B, 0xC9F2EC72E4CB97A3}, {0x5F5259E96DCCCFB3, 0xC15F192EEE69B42B},
+ {0x87A703DC38F17EBA, 0x8827AC6C92F0D91B}, {0x3E7E077018D5FC31, 0xC8F1281CF339832D},
+ {0xCB53D7521AF19B08, 0xF97D41E9A411CA3E}, {0x23D90EABD6F98713, 0xCDA8431A4840EC08},
+ {0xB7D1385A9C8960B7, 0x5D3C206DF24E1EE3}, {0x86EF9D42C3B2001B, 0x14DFBF588B3F0F48},
+ {0x9DF025C68BC30171, 0xBD019E33F0F82406}, {0xE2C2185E77E4007A, 0x6E70C2F9970A9805},
+ {0xE3F02AFE2022EEC7, 0xCE601FF19B26B6E2}, {0x3C11CCB919CA3187, 0x56A4CDD233C3602C},
+ {0x12F45CDB645EB5F3, 0xD29B8850870437D7}, {0xED58F96F8671F40A, 0xB023D5D1F93F2FEC},
+ {0xF3011C7F70F64703, 0xB3EC306EAA6239F1}, {0x0AA5A3D288D03D40, 0x0696B99F37B5F0BA},
+ {0xBB9051E1F59842A4, 0xD008D594492F44F8}, {0x6029A4066A327514, 0x42B918A3AC1B8F8C},
+ {0xB70191881C5850A1, 0x31F3308BC2611FC9}, {0x2B4975AEAA7F57EE, 0x3659C1D76AC86D9D},
+ {0x683EB887CECFA593, 0x4E1AD295AB89E511}, {0xCD24C3A87143CA58, 0xF4D55501DD937B04},
+ {0x2B6CF750D65756AD, 0x6236FBF4A03E0C1E}, {0x91BB3BAB28F69B8C, 0x55C9EB1B2AA45F0F},
+ {0x4F6398D6DC2344B7, 0x92BBA12A963266C0}, {0xA1EE756FC9E770A4, 0xDF0E534FB94628F7},
+ {0x0838426CD849ED2E, 0xC903CDE423750C75}, {0x60DCD3034875E50A, 0xBB02A5D80C3A504E},
+ {0x170E0CEB576CDC17, 0xA5E8B646EC75DDB8}, {0xEF61C7D4BD9585D6, 0x13ED0823C5F1FF25},
+ {0x8FF094C6DEF94A72, 0xF4011253DE9BA569}, {0xF5C7F2D0F7497AD7, 0x21F850D96DE05F85},
+ {0x26A089D9C11E2610, 0x8F05E46659167929}, {0xBDA1EF4839253F92, 0x422C6A0ABAB537E8},
+ {0x5F4ECE986433A7DA, 0xEA9F5E565E4E70AF}, {0x32A3BA13C1E2B30D, 0x628012B50FA01CA0},
+ {0x6AD72BD9976B1A78, 0xF5808CFFBDFC244A}, {0x830F16B4BDDB7E0C, 0xCEBFF0889E729E9B},
+ {0x14E7F7CE4F4F1E4E, 0x0DF58AF47D088EB5}, {0x4F8F191EB675A23C, 0x539C9B8DE6CAFF26},
+ {0x9267A978EEDE96DD, 0x2593AB32640DB1C7}, {0x7710261855524331, 0x9A0FE34911D84F64},
+ {0x02788935F2799CFB, 0x8D24B487110C5640}, {0x64204C2B9CB27F2C, 0x3A00ACFB178A836C},
+ {0x9256797B577CE3A1, 0xD760919E65D8CD45}, {0xAE7790C3EB1559E7, 0xDF4C41F58C00DA6B},
+ {0xBCDB7D8E63907C5C, 0x682E1BA622C9321D}, {0x0395F9C262EB9A0B, 0xF47B756D8D678036},
+ {0xA3D7F9EC5A7FB7C9, 0x56242C9C8ED527D0}, {0x92FBDFB76EF9BD61, 0x462BBB75752F50BF},
+ {0x56DD8AF744FE530E, 0x65B2BEE8067FECA2}, {0x76878EC6563BC557, 0xFA233AB87FC52C1C},
+ {0x4D206C83C2E49382, 0x3BCA7A2C4B43BBA5}, {0x361B70695BA2F0B8, 0x84FBF7F019590D8F},
+ {0xD4CC529CEDC52C29, 0x3CFF66A6BE4821AF}, {0xC92C30956F9BC03B, 0x4985723C54E9489E},
+ {0xF4A7E031AEE0B73C, 0x8C45B4C66423D3DF}, {0x001A8645ABAA7410, 0x3440C678F8BBF594},
+ {0x593349383A385B44, 0x99DF68879CB0B0E4}, {0xBCC63F651E603589, 0x1FCAD30783EC4CA3},
+ {0x49A907ED6C0ECE11, 0x16C3799EF9807893}, {0x0B69E465F53EFB5C, 0xF613AD18336175D4},
+ {0x6BE7B190419ECA1D, 0x5D6DF57CCF3A231E}, {0x020364C3EC33513A, 0x57D36F3FE092D28F},
+ {0x4DEF276E9D2A455E, 0x72F01C8C35F0606F}, {0xD6C847C2F908C5BE, 0x3C2201212BAEDAA2},
+ {0x5363F7A45F5210FB, 0xAFC5F33537659EC3}, {0xF2C36E4E3A5763D2, 0x9957F850C3E7CBE9},
+ {0xE0154B0E6E854D42, 0xD2369648460BE4B3}, {0x9AE7D3EA0B5EEE60, 0x7D1FCB18551EF3B1},
+ {0xC7983186E5B7BD76, 0x9802F67833887A96}, {0xE77D169A8CBCAAC3, 0xAA7EE21E838788B8},
+ {0xA19D21B372FC052A, 0xD0FF38A891374ADB}, {0x5D20451AF05DC963, 0xECA459710E6251DB},
+ {0x6CE0508ACE0742E1, 0x71A284EBA81D1B77}, {0x92F420AC33005CCC, 0x38E58A3807EFC3BC},
+ {0x0F0B57F7B7B2643C, 0x2BD38BC83102C5BB}, {0xFB1B8AF3F3589549, 0xDCE4891E6CBB865C},
+ {0x2AB9B8E47E6F5148, 0xA479B82E1AFC02FC}, {0x401C3BBCFAB940BA, 0xAF3325B48FE24A0D},
+ {0x46B4881CE5D49C4F, 0x82DB52CA27F1327A}, {0xF8733B699C9877EE, 0x733CFABD0F78B70D},
+ {0x03BBA6C4FA4874CD, 0xAD1E2F0833C14B43}, {0xBA81ECD01D444CE8, 0x0B207CA0C5BB96B1},
+ {0xDCE5406E1E505EC1, 0xECCD74EA4D100493}, {0x8E0999E1C2A55A9C, 0xA21DFCAAFE783687},
+ {0xBF4E57DF438B6118, 0xA68D65984728C660}, {0xF23890F26C26CA28, 0x520068F96DD0A4E8},
+ {0x14FEC56C6F0C8244, 0x815C0A27F149639E}, {0x41283061CF0AACD1, 0x11BF0DE459961AA8},
+ {0x8F614E9E6C11DD14, 0xBEC09112CC28D02D}, {0x93E9B8C0DF943A01, 0x906CC4EF0AD63A31},
+ {0xCC81E0528388CDED, 0x75B37221CB86E6DD}, {0x7C76319B9EEB2320, 0x4B937F2294901A66},
+ {0x4D88C061D194B525, 0xCC9A2CDB7FB870B1}, {0x1B7787DEBFAAF672, 0x5745F1F8D1693237},
+ {0x3E450F342FC84F2B, 0xFF791E66ED7E83F8}, {0xF800770FD8937409, 0x4295F10F8A2A8A53},
+ {0x1851CC608B5121B9, 0x88F8CE7F3264261D}, {0x49BAE2C3DB298BC4, 0xF17C1C9B11387076},
+ {0x131E74184524C507, 0xC55C075B62ED1CA8}, {0x5EE1D9F5BBA4C573, 0x69DF38CF1FDA27BD},
+ {0xF59AD8B185B7195D, 0x5C3F6E286BD08571}, {0xAFCA056C696EC7E4, 0xEB98707E246E45F5},
+ {0x5FA4931E8BA9E70E, 0xCBF9A860F5D32596}, {0x8C3035E0616EACE0, 0xAA8364FD29105254},
+ {0x261F7C5A39749157, 0xBD1022BDC5C5C025}, {0x0B13493A5FFABBAF, 0x4165C6B6252085B7},
+ {0x863D56EF8D088A95, 0xD127E6D5A2AE41D6}, {0x0044C4F792C7F91A, 0xD360FF824091031E},
+ {0x9E1839C5A2570164, 0x827AFF59EAA695F1}, {0x8C3CA2BA43640100, 0xE48F1A672B58240E},
+ {0xA6E1E6ECAC6DB4CF, 0xE37EC252E91CD41B}, {0xC394089195D0B691, 0xC301FA8599E46681},
+ {0x74572010DB75B644, 0x4A7BFF30605BBFA6}, {0x02ACF3934C304D9F, 0x7BBC2512F25EFDEE},
+ {0x17448E97BEC3C534, 0xBF048747D033D3F6}, {0x723569986090FDF2, 0x0C55CDDC82A4FD0F},
+ {0xC6D1B5E1637CD2B4, 0x327F46337F9D8AB9}, {0x11ED2BFF43BD6C29, 0x5E2AAEF042DC8A83},
+ {0xB473886AD0EA52F4, 0x8D388082323E8CAC}, {0xA3B67B1C8CD78035, 0xD0644CFD1346249F},
+ {0xAF54F4FB64CEC208, 0x9855D142E4B73C38}, {0x909591A5C94211EB, 0x658B418471396047},
+ {0x858731575F1734D3, 0xC740BCA41D30768F}, {0x273626238CD27443, 0x41DCB2A03AB86EAA},
+ {0xB7C00D13A1D26495, 0xCBB4F7D20412BC35}, {0x86291294FA966154, 0x359BBFFABF6A5FDA},
+ {0xC156D5E92F15AFE5, 0x31BF7E18A7E4E55B}, {0x45D1F3963067AC6D, 0x3A89191C19E72DED},
+ {0xAE93144CCA76860E, 0x72B055DED52574D7}, {0x3FF1E282CDF30374, 0x91533360EF97160A},
+ {0x1E3A9718D3245280, 0x311534686FC2F73C}, {0x3368938B2BDD4522, 0xF445C91450F0F8C7},
+ {0x45146E35AAF986CD, 0xA28BC8C9B1234D73}, {0xFE447DC11E4C849F, 0x43EC59A889CE8262},
+ {0x2E7A2C277E77EF23, 0xEC4E74D1C9F5098C}, {0x35D30D43D9727F09, 0x55602A367C4EC33B},
+ {0x5888BC4D7DFA3ACC, 0x412A4313A02C5318}, {0xE0967B7C16D5B012, 0x3DC5F390DAC60EBD},
+ {0x2D4BCB46D628FD8E, 0xDF6C986910BB8CDD}, {0x5AE71E440BDC2F81, 0x65AAE89F88F8CEDA},
+ {0x9BD6AB917B69BDA5, 0x2C523F02AC70D1D7}, {0xA20363409CF2E444, 0xA439875F7CEE65D7},
+ {0x4693AA6863C16184, 0x9C643AFB82735FCC}, {0x5E1423DED729C5B7, 0xA87DCC30AAC98141},
+ {0x617AF239323031BB, 0x846BBCF17614003B}, {0xC9E369D4DAC09CB1, 0x0D87170A5D380F62},
+ {0x00CB81DFF7ED4174, 0x25FF62B5E8C17EFF}, {0x84E0FECB10929703, 0xDF251389072D8106},
+ {0x55F13B327A1A488B, 0x4A67C8F3D2C8CC61}, {0xF61CFD9471F0F8D4, 0xA0D74BE85C3F342C},
+ {0x9DDDBA14F2E382E8, 0x7E64792838781B58}, {0x0BD5334C7CFFEB87, 0xE9E54BE403545497},
+ {0x4778239FD2CB393B, 0xBD054BCD193CDB20}, {0x2610105E7D5876E1, 0xF13008800484A8B2},
+ {0x5550C4E3C5B5ED5A, 0x9C5EAB46FA3103F6}, {0x7D17A9CA3947545C, 0x612420AE780E463D},
+ {0x76DFD2D04E845CB9, 0x954F2504539E18F1}, {0x1F1DFA0E8EC059DD, 0xE225AE4E4257B24D},
+ {0x761DBFF36DB5E51D, 0x58A47B7204DE93AE}, {0x16B3AB8F593AD0EC, 0x73ECF6918C369D3B},
+ {0x1C3AFA9128EFF1F3, 0xEB3C12C2C39EA97C}, {0x60A5C529B876F146, 0x8F22AAFE4CC5CF8C},
+ {0xD5E5BD47B7B9F617, 0x6572DC49F21DC118}, {0x74C18E77B17802F4, 0xF1E7AD729366F402},
+ {0xA93CC8B090EFEC95, 0x85A83834006734B3}, {0x04BE9683007856F9, 0x1EADD0B7CD740306},
+ {0x15FD23463CEA62B4, 0x14CD57136B34F928}, {0x571EE513CAF93ACB, 0x9DBA7A22B3C1561F},
+ {0x4535DC2AB0710566, 0xF1347B02AB9B5BEC}, {0x5605B44A1AD18CDA, 0xF1E8BD464BF3F8C2},
+ {0x4F0360A5A374196A, 0x6D45CD727BD5B300}, {0x71019C785D47202F, 0x6A31FEC4B23E0C7F},
+ {0x6A4E322D3BE48FC8, 0x5B21031583D2E3DC}, {0x875338C3CA21FEF9, 0x557F566AB1F8A2A9},
+ {0x6138E5D24A92EE9C, 0x5D6AF7877DCE75FF}, {0xBA01232B181B8BE8, 0x2E630E23A37F7B70},
+ {0xE46C5716E82A0607, 0xB46B37630C530D98}, {0xFCC364A73208C4F9, 0x64B1DFF0385D7F6B},
+ {0x9894F558DF376EF9, 0x292687C022D569D6}, {0x9BC47E7BB51AC8B2, 0xC7B356042DD048B8},
+ {0x373CDFE12E3A0F1B, 0x0C7218DA3A735BDD}, {0x57DF2D2352D779AE, 0x00662788B398752D},
+ {0xA3959ACF9E885B14, 0x5C64731EA54DFDE4}, {0x5FD8402D0EFEEBB2, 0xCCB670FC63A66801},
+ {0x9C3E5D4F6E4A577C, 0xCF522621C0C7B7B0}, {0x54A3B89976899B37, 0x788D5A192D68102D},
+ {0xD988EAC63F06E958, 0x77D02E2EFC3A0640}, {0x661F0125D586B458, 0x72608BD04922A59D},
+ {0x81876FE489C06136, 0x7033D207719FFB28}, {0x78F14C6E94C9A8BE, 0x678409CA58FEC7A0},
+ {0xCEB7CB4832C733E5, 0xF8E4615D6043C6F4}, {0x17947583E31978F1, 0xF5EF9C0076A70F87},
+ {0x4AD3FCB115393CD6, 0x05E67D80643FC4FC}, {0xB8FE0FC5F51304A2, 0x2567D53D3C9DFF1C},
+ {0x273453C136855ADC, 0xD84BC11258C6BCEF}, {0x247E4D24D4A42A4B, 0x7C589F539C9B19BD},
+ {0x121E7ECB797692B0, 0xA30131375610EB91}, {0x86AEF09951E7D9DF, 0x5E86750C39F42B0B},
+ {0x7E540BC1CAC91D68, 0xF3F427FFDC21D757}, {0x565BF8C44494840D, 0x2C35EEBB45198464},
+ {0x4B62D148AAB3322B, 0xA245CC6D28F79D1D}, {0x90EA0A75CBB4AADE, 0x090AB9C486D320F3},
+ {0x2D3E33A2372996E7, 0x8D7473782CD49AF2}, {0x0B20EA65F94F93A2, 0x18F47DC3836470B2},
+ {0x1D4E4E36EA113FA2, 0x3ABDF791B74065E3}, {0xDBCD09058D0F241E, 0x31A1E357DFCA7178},
+ {0x3D71DF5D51BF0BB7, 0xB4ED681AB655C149}, {0xD883603C697D9856, 0xC42F6FFDA2196F90},
+ {0x6010550AFF1262F0, 0x095690A4A549AE06}, {0xA5B394DFA2114FEB, 0xEACB6A6FE0D4CD21},
+ {0xA62697DDAE8AE44E, 0xA4B44A21F9CCEF5D}, {0x49BA86080D220CA2, 0xA26F8C789A267B82},
+ {0xDB5F33E41FC032E3, 0x9202029A002D7C13}, {0x5E0EB41CDA419910, 0x01A80A3352B5465A},
+ {0x7431047CDA7DF838, 0xA8CAAFC4F01F452F}, {0xC1FBC95E779E9FBA, 0x01A860E725A50AF9},
+ {0xB1EE764E659FABDA, 0x99245F5735FF4DCF}, {0x012930C8F97C49FE, 0x201EAE693C26C419},
+ {0x9CC00A893767F35E, 0x18766226F66F0D1D}, {0xC470EDB932B29D4E, 0xFA7AB60D4BC5D3D6},
+ {0x599C61DFBFE7FA32, 0xA8922BAE10EA7E41}, {0x4D24812EEDD0B477, 0x320276F99CF6D858},
+ {0x425E179C7B92D88A, 0x777CE9020ACF682C}, {0x997F5DADD6615989, 0x7219350D989E9123},
+ {0x53C5916CD240F5F8, 0xE442CBF2CFBB1F03}, {0x83A49604EF8CBC51, 0x0EAB3C4EB6C993A1},
+ {0x2F1BAF385ADA72E9, 0xC220665619747FAB}, {0x63F42D689E8CE98B, 0xE562799350C14730},
+ {0x4EDA4B59E75416D6, 0x778D35E1AB4C9EEA}, {0x661EA8812C1898BB, 0x0E47998DF513D5B2},
+ {0xF54E0A218EE41ECA, 0x12E6AE38FA61239F}, {0x6A2F6B4F83B68F0C, 0xA61041292AA269CA},
+ {0xA5A360DAFEFB2AF6, 0x1C3BF25FA5BEF5A7}, {0x5DA077CCFF12496F, 0x803571B27F14F9AE},
+ {0x0939D32CDBFD4797, 0xB4D57961F3AED20E}, {0x3DFE59A88568442F, 0x5634E79CBEDFEC3C},
+ {0xDC38EBF55D883738, 0x87DB2E2E469CFC73}, {0x76580D216C8963D3, 0x5F1ABD1BA6BB041E},
+ {0x3C77B720A7086A4D, 0x95C71FFE0E9EC004}, {0x76161F16588E0B8C, 0xD79A04FA3DD1DF49},
+ {0x42DF9662EEA7DA94, 0x45D35FB86FEB6B6B}, {0x4CBA1A5F2CFEB579, 0x01BBB5CF9546DEE3},
+ {0x187D9FCEF8D3A1F8, 0x6772FE8564FD2629}, {0x9CC45579C53A6346, 0x785A94385A7FDE1A},
+ {0xA6CD24F6254DF91A, 0xC1375EBF97975B04}, {0xD0239296701B1001, 0x596B3A7F147C9AE1},
+ {0xAA133E09D9255AA9, 0x6637215A551AE018}, {0x96D6117C06B9BD10, 0x56F48D916E545F26},
+ {0xE4189A1039886B96, 0x164CF79DD74C0548}, {0xC3230E512E0AF7F0, 0x2A0CEE29DE0C13FC},
+ {0xB629562C3442110F, 0xB1CBDA4FD008937B}, {0xA8F9C0BA00912FFA, 0x1FAD312E0DFDE533},
+ {0x023D7EC617A47322, 0xA41625FA1A3D97D3}, {0x7A78ACBC654A9204, 0x5541437D000AC67A},
+ {0x6C96570E68856FCE, 0xCB2A944AD00D619D}, {0xC64FBE887E67E968, 0x197E1D289214C55C},
+ {0xB0955E6E87612932, 0x57D7359394AAB19D}, {0x6FC5FA3313FF851A, 0xF376DEFEBDC565A4},
+ {0x62541D4E94849954, 0x346704DF49021C54}, {0xFAAFE577787B66C2, 0xB88695C417F13FE6},
+ {0xC05622C4B9B2B259, 0x1B0BB324CC2183D2}, {0xDC7E75EA3425BBD5, 0xA8A4A8C665E3E16A},
+ {0x203380ABCF8DF4A1, 0x5CBC6E55F9E97AD2}, {0x0BE864A328221BAD, 0x728E1C21129DAB8E},
+ {0xE871140BC514AF91, 0xE5C2FAC01D3B031C}, {0x3A59B73264991F98, 0x516DA0FBD9F3E806},
+ {0xF09512EF50183D09, 0xA604B39814C6FA7F}, {0x2E708F9B9F21AA3F, 0xDDCB21144CC70DC3},
+ {0xC91F29ADAE5BA7C0, 0x8FA922B70D17CB9E}, {0xC502F99670143742, 0x3192BB0B004DA0B6},
+ {0xFF2EEA45FCC05577, 0xA465FB19D487C005}, {0x9BE91C5FD381BF71, 0x3F86B20D15174CA3},
+ {0x71B78EB9A23244EF, 0xEEBA771DA40CC254}, {0x917DA80F30EABBC9, 0x35644AFDCA900415},
+ {0xFDB969F5A386A7FE, 0xA520FE575EE8D1F4}, {0x67E2FE774672A1E0, 0x9B0E48BA51C5FA85},
+ {0xAB1BC84FDA8AC28C, 0xC1BDB60C4E9CFC0C}, {0xE181F56339B2408C, 0xEAEC842C3665D3E1},
+ {0xF9BD4E26941BE6FB, 0xA105A97BC75D8D16}, {0xFA3C4321080818F6, 0xCFD909E1A4AABD82},
+ {0x3BA3BCDC1C75B9D6, 0xC8F8691E0990E420}, {0x5D6318CC0846EE55, 0x23A2FE0AE0EA5FED},
+ {0xC56164CE1EF7C699, 0xAA3FD9130780D346}, {0xA9C4BBF8B0B2E4E5, 0x538C1329634E5DC5},
+ {0xE54724310FED81CD, 0x1757F5A1570E111D}, {0x42EAF51EF65231D7, 0x400A939D92DF61CF},
+ {0xCF166F4D7CEBA7EE, 0x6CA4DF609059E76B}, {0xC22AA9B326D19CF6, 0xE9D6D78960E5DCED},
+ {0x474E7FFB0A8192FE, 0xDAFDC7D435597761}, {0x8BF4018C1C438CC0, 0x3BA46A89689E4197},
+ {0xEBE9569730FE30F6, 0x41788742A2A311BD}, {0xB55971CED8A3B0A7, 0xA6E1D769DBD8EA8B},
+ {0xA8E8A7620F33051C, 0x28BBD3E347F5FD51}, {0xA98D7A2E06F3F09F, 0xC9DE750C8688C310},
+ {0x893F37A0F367BF53, 0x456E8CE1649F44D8}, {0xCAB28095890568DA, 0xF1B042179C6D34F5},
+ {0xCFEAB2134A73F3D8, 0x6F2D920ED2CEBBDD}, {0x03F61D6440F49317, 0x7DFEB1AB578CFEE9},
+ {0xA0CA1C10AA30BADC, 0xCCEA08BC1B15E76C}, {0x73887C328274C697, 0x236D5EAEB84C12E4},
+ {0x1CAF735C34BE32A7, 0x067184ABCF3593AD}, {0x11417B264A7826AA, 0x44810A94DF24AF01},
+ {0xAA9E23ACA887C98D, 0xE31DAAC77B9079CD}, {0x130E7EE26E07B490, 0xF67F18637B7847E4},
+ {0x503FD934FDC1EFEE, 0x950723F39FBFE7EA}, {0xFDE7AC760CFD77B8, 0x0B84AAFA549068A7},
+ {0x2714BD2E0219639A, 0xFF0A9BE72CE1DB1E}, {0x3B6D017A8F26CBD8, 0x18AF40108A938A72},
+ {0xDB6621022DB36B9F, 0xE1FC442EF7C24B30}, {0x7BC749A581DF014B, 0x41155CDE2DDA8621},
+ {0x9AEE055BB139F5FE, 0x504EDAE3ED4CD046}, {0x1294BEB53F285958, 0xDA3714A2A7EF4811},
+ {0x5D391B455D084B65, 0xBF8B62CBBE979790}, {0x50C78AC56F3FC096, 0x631B1BB7991163AB},
+ {0xFDFAC96F5F5ACF26, 0x6B23BF46EEB666B9}, {0xB0E2621A792E03C4, 0x97BFB947303B941F},
+ {0x85B5D161F62EBC2E, 0xB00745773EE2161C}, {0x8B49E489735F08EA, 0x118D2E824520CFDF},
+ {0x12970EEAB4395728, 0xAF18BDDC7573DA3C}, {0x9BBA7EFA58DD7F9A, 0x5DFA58D049EDD4F5},
+ {0x05473EF8E72F213C, 0xD20789ABCBA63535}, {0xC85DC5B116782434, 0x236F198DBA131825},
+ {0x2479A81916B8E678, 0xD1E2C1D839D920AB}, {0xC2EAC45023EB3947, 0x5187F45790101C05},
+ {0x4A5629D72139C236, 0x36B5FBB026DDE907}, {0x760C90712DCE05A9, 0xF533E62EC503CB0D},
+ {0x239CDCCDB5E5124D, 0xD98244E6F7E4924F}, {0x798D452778B6E1D8, 0x10011407683524DB},
+ {0xA5A1C0D123FA9FA7, 0x5267E5D08D16D8E7}, {0xD43808040C3A8984, 0x1E0DDABFAF7D86B1},
+ {0x23521B6715625FF1, 0x6468455AEB411DB1}, {0xAAB789DBA51FA66F, 0xBDE97AA134530B4E},
+ {0x60835948E8FCE66D, 0xF03757FEB2B47282}, {0x037A1B3353D4C910, 0x8BE6493D3C64F986},
+ {0xD23CD7C619DF5381, 0xC2FB60C3B9268B42}, {0xD7531571EEF6EC97, 0x1658AFF34DC50026},
+ {0x2A25AF477776D0C3, 0x058781F084F316FE}, {0xB669E095A19F0E7A, 0xB9C220B350ABA6F4},
+ {0x746C548F57642FD7, 0xD5C1E08265328090}, {0x8B8C6CABD2D6FA16, 0x0F80D0CDD0DA2DFC},
+ {0x3CFA399C98281F33, 0x2EB02BFC962DD7E0}, {0xBBB6AB32F95F6AC5, 0x80489C37D25F5C38},
+ {0x73C948099837C4CA, 0xFC05EC26C6D69E69}, {0xE2AC66EC7FBC5277, 0x519ABBEA1703018A},
+ {0x2894FE901358A1D4, 0x7474230C7CFF1210}, {0x238CD339EE744F9B, 0xA9970CD2CF601E0A},
+ {0x430DC74C4FCD5493, 0xCF5D613962473AE5}, {0x598113E4A10ABA51, 0xBF111E19C5E77E1B},
+ {0xB806500A9210EC44, 0xDAF9BF3D6049C4C2}, {0x35B0EDA296BE6324, 0x1F06DC93E550412E},
+ {0x1B8CD056D21195F3, 0x4BE99A0B5689E309}, {0x2D0E061B930902D3, 0x61EEDB2CE52B16A5},
+ {0xD3CC4063929F82FB, 0x237EC09D32A93D98}, {0x7196E88776301E6D, 0x818F8C86A0D4A848},
+ {0xA2822576DD8B8BFC, 0x84B09608F7C54CF9}, {0xDBF94FA26F249FDF, 0x2BEA854824756772},
+ {0x5C6A80848319C254, 0xB6930B78A81BF55C}, {0xF7C3E425149DF4E9, 0x5A3C58A84F86073E},
+ {0x8DC994F0DE6A1B6C, 0xC728150925B7F1AE}, {0x599D476646A48157, 0x2FEC1FBFE419AE5A},
+ {0x5026B9B4901E3050, 0x44FB9F641D7B2CF1}, {0xBF31B0A112751628, 0x91A21ABA3C7076A0},
+ {0x0E8C697332221517, 0x045E552AF6D427EC}, {0x46AA7A1D7D12C8C8, 0x017332F42C280CB1},
+ {0xFDC3F5FEF43E9FDD, 0xD7D4BC5385B622CE}, {0xE245D6B643BCF8AA, 0x4376B0824D025A51},
+ {0xC18614BFE188193D, 0xC20250CD0166915E}, {0xBFFD9233DAE09943, 0xA8C22A88ADD605F6},
+ {0x0662CC3124730221, 0x3019ADE4FA8D27AB}, {0x1531EB54E5621AB0, 0xDC49C7D2166428CF},
+ {0x2CB6C6BE710B5CAB, 0x3E2BFF6C8B8A2964}, {0x7CDCACA966F3C017, 0x2C2A33D0C8DC9047},
+ {0x24D2103AD86820D5, 0x637DDC20B269C05D}, {0x10579A36A5A7C53C, 0x26E83E70381E3F16},
+ {0x1788C07140F4619B, 0x6EBD7A6452548E98}, {0xD4E5ED08071545D1, 0x5A06D4A50F1B5E63},
+ {0x664725A4A7E53BE8, 0x958C2EB46899EFAE}, {0x11B5154ACA73D6DB, 0xE2021E3D0DBEDB43},
+ {0x5E583B99AD9FFA5B, 0x3F0194EC751C1B9B}, {0x02E65D582C18E0F8, 0x6726058C38C89948},
+ {0x088095DD36F8BEBA, 0x0123C6AEA2096F05}, {0x6BA9C8F60613EF49, 0x5E8EDC508C4FAA3C},
+ {0x9E0471E8F3E9C598, 0x9C0817F3026D9974}, {0x898D8BCDF70948A5, 0x1099BB7E5AC42A9E},
+ {0x2498F498E2F81D66, 0xA0061B0D4F4848C6}, {0xA113BEEDC3376B1C, 0x6BD7BC0A0ED2EB6D},
+ {0xDC83ABBC9A347A96, 0xF53094DD2EAE24EA}, {0x8C653276765640B3, 0xD4ABF2DE4712200E},
+ {0x3E5EC757EA417E9B, 0x336379773673C3B7}, {0x2B16BE03D0000120, 0x3CB73A21A2AFFBCC},
+ {0x1C91694E5B3E5716, 0x5C96473B0173A888}, {0x2E0C80B7FDDF7F3A, 0x92E4E9B2D865D306},
+ {0x71906DE322BCAA07, 0x0F7B08E5C7C59CD6}, {0xAA53206AD139A607, 0x135A5197BD9416C6},
+ {0x736346DD9B578F0C, 0x8EC660236805EA2C}, {0x39A78712B8846690, 0x7F41BC4B8197703F},
+ {0x4D751E97E6F44FFF, 0x650C1D6A16D880F2}, {0x800D80F5713BAE01, 0x3DC4C442FBD99EDF},
+ {0x342587CB3246F05A, 0x7B79953896E4BB85}, {0x917646DBB000CEA3, 0x1FD145D2052F0381},
+ {0xFE09122BDB0EA591, 0x2200989259B2503F}, {0x88BB6C4B9AB996DA, 0x706C368D6A04B89A},
+ {0xC056F11A62306181, 0x6EB9D1C0C933E9CF}, {0xD5E0870CC3CC607D, 0x623ABBA4A34064A1},
+ {0xF0AA1D3EEB09C362, 0x0F424CA6BB8E72C0}, {0x60F0A5A28B2DCD11, 0xBA50FE5539515408},
+ {0x8D1127D250F0B704, 0x707217A2A5065979}, {0xB33F6FC503FC7CE0, 0xB6C145DC6F41B777},
+ {0x7C4CD71279F79FAA, 0x2370AEB8965B335D}, {0xEE2885D9236388AC, 0x189203AF0EBB75D7},
+ {0xD769EEBFB4A07ED8, 0x1FA74ED22D40D073}, {0x6F3B21839DC67FB3, 0xED74CF0AE76A0901},
+ {0x414323F2B61CFCA0, 0x5E56F6A7B6EF1E05}, {0x62B41A4EF9E2CCDC, 0x8FB20274AE528F0E},
+ {0x61CA894EB9E06AA5, 0xDE07D274211383BD}, {0x625AC7ED93ADB19F, 0x04D1C5171071F68D},
+ {0x4D6094C9E613BE04, 0x8280A977863BA471}, {0xAD73F508FDB735AC, 0x3BE09713825DC2F9},
+ {0x968AFEE680C5E064, 0x0A611E8699EE1B6D}, {0x300B7030464AC96E, 0x2A2D34B3751057F1},
+ {0xE0E4767BA86CF5EF, 0x076316DCF077F857}, {0x4D1A94220A6FC2D4, 0x20AB96170AE34079},
+ {0x0AFD6143717D1DC0, 0x2DBEADCD30BBCD2A}, {0x2EE723CC29E029EF, 0x91C9F77AA199C002},
+ {0x4CF35F9732958175, 0x25E1C090541AB788}, {0x934F2ECAE6D7A0A5, 0x7B6C1570E3891A37},
+ {0xA679086ECFFBBA6C, 0xE1AA66083CD29149}, {0x6DF3D75D60BBCC3E, 0xC73AEB575581220A},
+ {0xADBF9626B8B4ABC4, 0xA7F6E5D2175FFB83}, {0xC98236BF95E201C9, 0xF8586A3EDBEF2CCA},
+ {0xF7AB318833305ED6, 0x4F577B4DBFCB98DE}, {0xBC16F9FBCDEC0F36, 0x2668D4AFF19CF104},
+ {0xEAFE4B2BA20AEDA8, 0xE4390E083559F9C8}, {0x60C6E30D82A1A4D8, 0x98DFB60F804D7C01},
+ {0x9A8ED3CFCFBE499F, 0xE738C88872BEF5D0}, {0x49BEB7A6F7A51C59, 0xF660A13E71619971},
+ {0xD1083B85AC1EE4F7, 0xA53F19F8CB77B195}, {0x9E1F20B068B2893E, 0x936889A0FA9FA107},
+ {0x820466CE98EC91B4, 0x79DDF1722DD6381E}, {0x73BAC33085615DA3, 0x4DD7075DAEE712A5},
+ {0xC57037523F3CF90B, 0x599BAAAB6D431028}, {0x17C0C2486D9FB3FF, 0x99183828509ED94B},
+ {0x26405769FD26CB01, 0x47C5A133573819EB}, {0xBFDDE1C9B476B48C, 0x1E104E09325ECCBF},
+ {0x9525BC8CD655877F, 0x723EF507A4B503A6}, {0xE54AB6C8B52339D0, 0x0468CDC47783E21C},
+ {0xFF15AFBE8FD88BB0, 0xACDF72D7CAE55C10}, {0x87884B8B3792DC88, 0x43A3AD92BD8CD615},
+ {0x1D424E2F14A4D633, 0x866AFA5A402E041F}, {0xDE31731BFF33B5FA, 0x74502626A08BD2D7},
+ {0x799F71E88DE92E03, 0x2116E6011E52D5E4}, {0x49D0991EAD49D7C4, 0x09BF5EAB5BB4ACD3},
+ {0xEFE87A6F346E2095, 0x7C629617F3C0B49C}, {0x032C4D6A6AE85C62, 0x33E257DB1F4AA7AA},
+ {0xFCBB008CE7E68077, 0x73B0EC96637DE2AD}, {0xEBB4BF73F2A659BE, 0x7FE0D939588CCE8D},
+ {0x02F6F321534701B1, 0x07DAA0AF5AA208A8}, {0x9652615EA8A0DF88, 0xBFA6921178B339C4},
+ {0xE1A13AE5FE3E96B4, 0xE2D288C002BAE6C2}, {0x695321664ACD5E75, 0x52C2916CA8559476},
+ {0x4FA9B9B5777E0422, 0x9E7B0459645093D5}, {0x9D380EAE31E5015A, 0x587A12391C47125C},
+ {0x2E854253AEEA4D8D, 0xEA64E7BF54701CB8}, {0xDD824E1C9BCCF68C, 0xE8915C2684287571},
+ {0x0E532302F637C600, 0x9192DF3E71A44430}, {0xA5A43DDCFA972416, 0x28BA1B8C603C54C2},
+ {0x827A96078C698EF2, 0x278E771F7A344A18}, {0xD2D78E96CE0310FB, 0xF05329D5378C1BB0},
+ {0xFF8C696B09DEE840, 0xC9A1FDF0F003A4D9}, {0x3558690CC0C6A41E, 0xC21E5EB5B33C0036},
+ {0x7C479E02E153DB0E, 0x003EBC8598BA16A6}, {0x7A940A0AE19325BF, 0xEC3968CA684EF191},
+ {0xD9492099C3D9A655, 0xBE1A65748A42AF12}, {0xB24FFDEF8E1CFE78, 0xFCB45FC4A2B30728},
+ {0xF765EECA9E3DA0BB, 0xB0C163F52DD4B6EA}, {0x03B23DA7E0087E2B, 0x9187CFA099F90570},
+ {0x93A2EFAC7FA63CD0, 0x818ED22EEB46B646}, {0xD04B81E7563E165B, 0x43A88DE28575F6EA},
+ {0x0DD39F608605E729, 0xA9E5D6AA11839D24}, {0x37FF596A2812AB5B, 0xD4591E2FFF893D28},
+ {0x39E3DFC1F6B22219, 0x27F40C0CF0E11409}, {0x685F8AC7FE94A1D7, 0x801B5ACB4F9A428F},
+ {0x2F96736A5F77C18C, 0xAA992E77CA1B5DD9}, {0x677F2B3716548C68, 0x3880713BD3CB55CA},
+ {0x338E3439912BF868, 0x4166ADD07A32FA70}, {0xB1D87FE7B309DD22, 0x05DAFF6B7E87FA28},
+ {0x388050950C96EA1C, 0xE9A57372C9F4947C}, {0x2175DD24E5EA8C6D, 0x84D8A86A70FF6E92},
+ {0xBB71327C82D4878A, 0xA965103D28FE7C5F}, {0x24C77F7A91A2B4A7, 0x14B7F34D8C5BC432},
+ {0x7B8688AE6574725D, 0x600ED8970D792372}, {0xC7A10C2BC2356E95, 0xDFB9AF38480BCAFE},
+ {0x3B310B063F79D78F, 0x5F9E06F2E701DF4A}, {0x42FEFEFFCE17B054, 0xF446C6C54E7B3E52},
+ {0xFE074B91F1732B7D, 0x401F69B074A2B00D}, {0x51104156BA38E50A, 0xEF786A68E882F83A},
+ {0x3838ACCB3A36A692, 0x64B10613458A8FAF}, {0x272A49B83A5903FE, 0x06443EFE310A9FFC},
+ {0x7BC7EFC303A37D1F, 0xA3C9CEF9FF748D5F}, {0xE8156123DC3CA967, 0x6D31FD6A352AD594},
+ {0xADCC02F747C03F90, 0x25E664D912F19B82}, {0x4B73D7652722DE04, 0x319FBFD953301C0D},
+ {0xF764FBDF82841009, 0xA432976B695C5512}, {0xD564819BBB14C372, 0x7AC52677DE5BF28A},
+ {0x9A999C97EF6CA42D, 0x6C61CE94435E865A}, {0xE35B1F7AFA3F8D90, 0x0F44DACF4E5A6F06},
+ {0x38413A2F07D110F0, 0x0B609E5FCA6771BE}, {0x57746E85591885CC, 0xADB9D4FAFFB35E48},
+ {0x330EBA71C39CB4B5, 0xA7BE78B873B3E8CF}, {0x720D78F4FFEB8CA8, 0x16D1548C5159AF78},
+ {0x52B51814EE08F0EB, 0xDB03DEF61C158849}, {0xAE95B3E7722946A3, 0x7909B6D310FA0C45},
+ {0x79264BFD66CA4E1B, 0x694CEC20E1834F0E}, {0x7CC6BC59EB01C63F, 0xC500E82E25DA09BC},
+ {0xB2C66FF70278D433, 0x5652DDE6BACC4307}, {0x09BC8DE82FA34EFF, 0x72A94A1156B56A9D},
+ {0x807194F35EEC48FC, 0xF56A5BF68BCBB181}, {0xE269D41BD6FF7C1B, 0xBD721AF90614ED04},
+ {0x247C70ED91E809E7, 0x3C5C6F0C93F5DA31}, {0x0E8165B87303254D, 0x1BBFDF5AA2A441E6},
+ {0x3D20A1E9EB95F8BA, 0xEBAAE9E7E60A76C5}, {0xD886E62DF6C46EED, 0xE9D961CB3F7E4E66},
+ {0xD36D9269F1FFF7AB, 0x29B163BA52EAB730}, {0xD186EDC23FB39ED9, 0x20DD23FF0E24F87C},
+ {0xF607CA0EFE8FAA07, 0x2323ABF60BAE9AE3}, {0xB7E2AC0B594131C6, 0x9061198EF4F79D9A},
+ {0xCA9269071A732121, 0x218DAFCA1F977D17}, {0x5ED0EAC8BBC3143F, 0x94FFE1C8DC13F7C6},
+ {0x5B98EE0611AD4D88, 0xDC438DA3A656CCEA}, {0xB6D7A43FC9D03BBE, 0x84826971B5B4C801},
+ {0x4E974F901BE15D77, 0x59F72CF5C41C0B22}, {0x47E2D150B75659E5, 0x0D50A568EA6BDC77},
+ {0x3088A8D1A62B9FBD, 0x4C63DD2B60C5470A}, {0x81F7C82B590E063B, 0x7F2AA93858D06100},
+ {0x138C436A6C5BCED6, 0x300EFDC1A055F9E6}, {0x07008E0601D64C2A, 0x17097CA93B22237C},
+ {0x0B3865578346325A, 0x30184D13EF94C1D3}, {0xED49B7DB599AAF82, 0x8B74BBD6C7BA9D84},
+ {0x34C020659993EBAC, 0x12F35BE9ABBFE559}, {0x2FF07B818E1B6B8D, 0xD8F8670AB9BDBB8C},
+ {0x083E260D971BB5A1, 0x0A23359F3F2B31C3}, {0xCA0462D3973A954B, 0x1BDD1B6E2E7D8DB6},
+ {0x40F25F6C6A2D03D5, 0x11404C467E3F733B}, {0xBE0CDDC45B623041, 0x6D7E2BE31852A7E3},
+ {0x17AAE2AD5867F566, 0xB14A65B44628E216}, {0xF914FADF183D681B, 0x6E9D5DAF106D9108},
+ {0x958D95AAB14206C3, 0x203F40126560A7ED}, {0x4213F3A54AC1353D, 0x02065E03AC2170FA},
+ {0x0ED73F0622DE9E9E, 0x3F8257269E97091C}, {0xA39BFDE611EBC015, 0xC1E48F81EB3DA0BA},
+ {0x45442846F6176A65, 0xE65883B6A7934CCE}, {0x8994CFB8F3C78C03, 0x4F046DA1415F94A8},
+ {0xD8EEC38BD4F790CD, 0xB8E5583619E5B51A}, {0xF255A1FAAB0272F6, 0xBA2CE8F38017ADC5},
+ {0x00BC7725D3730818, 0xA37F4F76B1AFF3D3}, {0xCE1918754CAC2EAF, 0x483FA17C6AD524A4},
+ {0x8DDAF3AFC8B736A4, 0x3C98A0354E2906EC}, {0x4B8150D5C3E7C225, 0xBF03EDCD827791DA},
+ {0xE3FAD1D0804B0210, 0xEC95738E79CAA6D4}, {0x5ED45E61B9698C2A, 0x9EBDE7377289BDE8},
+ {0x57F218AFC88AAA9A, 0x9D504F827920AB96}, {0x182AE7A36252B98D, 0x70A9D97A60D8216A},
+ {0x83F9AF350197956E, 0xFD293B3DEA8AFD80}, {0xFBB0C763E1BACB73, 0x7DF3E56A01BD30FE},
+ {0x9C910470126064F4, 0xEF795E26081EA0AB}, {0x05BFF4F0EC0C5535, 0x8DD07AA98C3CF09F},
+ {0xADE1C5618FA553CB, 0x947FD5A16DE09F0F}, {0x4BAA98DAF803818F, 0x4F70E7B229EE0094},
+ {0xA9D794A1FA2B97FD, 0x9B30D4D0FB704350}, {0x82F69571809AA1CC, 0x17D2B7454BA04CC4},
+ {0x3628931942C76C93, 0xD66F66D45E91098D}, {0x58E4FDBAD203CFEB, 0xD7B404F57652087E},
+ {0xE982BCB087B884BF, 0x963FB424C9DFAB1F}, {0x03E3EEFE30527B7A, 0xF462D55AE155DA6F},
+ {0x73409F9DDED839C9, 0x88DE91046B84C50A}, {0x344E7ED5AACAC583, 0xD61D09F33EB7376F},
+ {0xA0546810B98B0CE5, 0xA620CCBCE390E10E}, {0x68B5893DAA2DEAF7, 0x2EB74FE0EEEC742C},
+ {0x7BE73E6D3206E334, 0xB7387E2C29F85354}, {0xB8DA2E0DDB3EFECE, 0xE46B438509185668},
+ {0x3CA40E212F076407, 0x4FC26506F1795330}, {0x795EAE2E4D025946, 0xF7CAC9C9E433CE42},
+ {0x128BB5D7FD6864CC, 0xFCE8FD0C479DD31C}, {0x8F552D823F0EDE8C, 0xE66612BE5159FC48},
+ {0xC700F5DC00D318A6, 0xBD9563502375D899}, {0xA0E3235DF64D76CD, 0x0A08772A98D4DE71},
+ {0xD42954AF9DB0E512, 0xB01A3F48B4C8E7D2}, {0xB6EBE953237230C7, 0x50F1E97AB6BD833C},
+ {0x5398DD5CA25FFEAA, 0x1ED7DCD3CE709B32}, {0x40997989A3D19C45, 0x1AA22D9AC1187E10},
+ {0x4D0AF9DFC3F01191, 0x1F94DDE75CABEAB1}, {0x1E9D858BFF3A39DB, 0x0C2BA38ACA5BCBD2},
+ {0xC70B3ACC20F40198, 0x9799A978DD035C06}, {0x9BECA9ADF0E35CCB, 0x708CEE610E4E8249},
+ {0xA9C930CE0FB5B917, 0xBA666043EB538E25}, {0x540A593D2725395E, 0x639E73C286C5CDCF},
+ {0xD711E715E462FD38, 0x6E347751D1255649}, {0xAD0569943F752FE8, 0x97D9005253B46088},
+ {0x32D904A478E7B9E9, 0x766CDC2698516E5B}, {0xDBCC50EA0DEC6269, 0xAFB125F5D4006C77},
+ {0xE659943C79870B3F, 0x7D8BBE2DA4E53057}, {0xC673DDA3FDC98984, 0xD58ED0B6E4D320EB},
+ {0x123E82C04F485971, 0x438F98B22994D1C6}, {0x0573E96C079D0BDF, 0xFEB3993FB285511A},
+ {0xD223990CC1E41A0F, 0x65773259CD0F36EF}, {0x30D138C2647F2B27, 0xEB17F2474124145E},
+ {0x8FE5C8A857127689, 0xF4847E87FFC25942}, {0x11CEC16692D2AA3E, 0x1A94FBE92D03F161},
+ {0x34C00344693BF252, 0x8967005D1145D363}, {0x4B7537DA50E62D87, 0xEC2A51949CAEC4A2},
+ {0x77BEF87142F3AD8D, 0xDBCB1E3E6B0CC822}, {0x57901268DC33742D, 0xF6E6160FD19C391D},
+ {0x04801AD3B66D4E2A, 0x7F0613D27BE3C1B4}, {0xEE90BACAB7649B8C, 0xA972F48FE5063568},
+ {0x016BD70850644214, 0xB010A403CF0B2104}, {0xF976F74372661F00, 0xE34393AB24DECD42},
+ {0x65956739D5D98908, 0x48BF09B73FC9F8F4}, {0x0BA78B6E811AE93E, 0x18C24283CA079D88},
+ {0x064EAD4B12D7FA7F, 0x1E60C495DE0377EC}, {0xD2A5DCE7C86B7A18, 0xE5742BF28BD98881},
+ {0xDB5475B880844C97, 0x5CA4CFB24A0F8462}, {0xF33879B590419421, 0x007183E982A0C526},
+ {0xE7CF0DCC50E91B2C, 0x243A835DB2466987}, {0xE14E7EAB46EFCD63, 0xF755B179F9D66C87},
+ {0x1F640B6F18F690DC, 0x470FC4D3584327DA}, {0x70EDE5441E72E4A3, 0x7AEA5C5478D4AB54},
+ {0xEBAEDAC05D88723F, 0x770C3B26CB0D2A6E}, {0x3992EC5F4F6E0459, 0x8CB505C96D671464},
+ {0xE3174A0D718EE1A1, 0xF69AF400AE877C53}, {0x7A8E5EF16307B16A, 0x0B7DC7CE2A6CF5A0},
+ {0xF94CC4EE93FED95B, 0x09A9768C20414EC0}, {0xAAD14F6D8725D8B4, 0x2AA2739B72C9204C},
+ {0x0A6C4647878ECD4E, 0xAC7DA4CBCEC1B388}, {0x892A091E90FFD98B, 0xE264ADDB547611F5},
+ {0xD48A40C4D63AD47A, 0xF64DCA2568F4FD5F}, {0x0E04ADC30DA66016, 0x0BEAA325BFC728DB},
+ {0xE831E0B903BBF81C, 0xE450925DA3F77984}, {0xB97D95ECD2B65309, 0xD01720A6ECBC3B34},
+ {0x7FDB92D716E0FEE8, 0x5381F497E3631B82}, {0x17A6D048C194EA62, 0x5B7D64EE193839EB},
+ {0x68E03482D8DF4CA1, 0xFFFD46BFD5B3CE09}, {0x3F34D7017C7D5F91, 0xFE7BA6B2EC3D2961},
+ {0x1B1D1071F6B37BDA, 0x75536C53A7F97BCE}, {0xC7B0FD68D86C0B0E, 0xFC243E98975DEC47},
+ {0x7CDB3CEF3D2D6024, 0x0DF92795AB8EC526}, {0xC147A0851EFFD2D9, 0x8A1DC5AE2225DE66},
+ {0xE7449AF36D4CB3AA, 0x735A3C500741064C}, {0x512EFC7F3BCAA27C, 0x5FCA53A434DC015E},
+ {0xD36A5FD9A69AF6FA, 0x3335167EAA2D6678}, {0x9963074EBDB854DF, 0x788AFCC2B41F6FB9},
+ {0x128D26993923024B, 0xB24827C1AF63239C}, {0xA75B3238DC17C22F, 0x4AC120CA20FE5349},
+ {0xEA14BBCFE6642E87, 0x0A93BEFEA5D658CC}, {0x97816BDD5D863F1B, 0x632646D7159CA2FB},
+ {0x6DCF18BA517EF973, 0x8DA4EC6356BAB1A1}, {0x6A7CF96DF8879F48, 0xD04DBAF2EFD7E6E0},
+ {0xF2B2D15C2152E802, 0x3AC05F59BC980DCB}, {0xE8D5BD9C13178B34, 0xF9E44E549CEDA793},
+ {0x910CA066C5D2AFC0, 0xB5720252AA8BC5D0}, {0xA82D6CDD9F2B02A3, 0xD96BF836CC9DA408},
+ {0x736443E2EFE17C52, 0x8E3A6B652D860039}, {0xDAD67D3CA387755B, 0x711F0DA4B7299077},
+ {0x9712EC385D861391, 0xD0A6DEC3B2F879FD}, {0xB434067339A93E39, 0xADA172FEC1E4A533},
+ {0xA83EDA392A7CC2B4, 0x1B459D8DB8236E88}, {0x9D05FC7CD7C92B18, 0x1B83636C482947D1},
+ {0x31FF5187362FFEF3, 0x61DF962F0EE7498B}, {0x38FA884599BCB7DC, 0x62E444A66120D65C},
+ {0x868C0A13B3AF19AB, 0x43243E08D952410B}, {0xD033F7B6B0F502E2, 0x505F2EE87995B696},
+ {0xF812624A49CF6EEE, 0xCDEB56DA6AEECF70}, {0xA3AC657121234998, 0xC99D0E46616CFF27},
+ {0x8983B52B402D7151, 0x770E8FA88D3CD8E8}, {0x898FC40A9E3EBD6C, 0xE9907BE880039FE3},
+ {0x670F10F115B58EF9, 0x246481262C33CCE4}, {0x62791245C42F64B5, 0xD72C7C50E471D624},
+ {0xDCA82F26A1CFE7F3, 0x18690537B0399FA5}, {0x9C43E52BB6E5AAC1, 0xA24F8E7E58656A45},
+ {0xE1862967BADB9AB8, 0x3A18FEBCBEC9BDB9}, {0x0E753FFCBF231691, 0x705C2CFB63D16E2E},
+ {0x362294409DBEB34F, 0x66FA9761A7FE24DC}, {0xBB4D3878563712C1, 0x013116C0F995ED57},
+ {0x437F577CEA39BC5E, 0x3358BFE71FB46E88}, {0x9D37629915889D21, 0xC2F5A41C009BB92F},
+ {0xFFB275C4372539A8, 0x5AF9C78BE27217B5}, {0xE28950CF2866E3B5, 0xB7EF924007563F11},
+ {0x5A4AA072B4EBCC1C, 0xF8369FFC008DAF97}, {0x5D6BED5933EC841C, 0xB4AEF61134C9DB58},
+ {0x516AD56C506CB984, 0xD230343B97DB72A4}, {0x8819412E7AAE4C4E, 0xFF185FBB3ACD2378},
+ {0x775B06CC88F3A2F5, 0x034FC8D1332A013E}, {0x4A70D07A10462D92, 0xDD1F49282898E5D1},
+ {0x5C88F2E08FFB5770, 0xCE0F11090E8B934C}, {0x9FF28C1F049A70F6, 0xAE5149D4492F7818},
+ {0x03CF996A72083BCC, 0x387D6B0EA9BC362F}, {0x6C554FFC8DFFEB8F, 0x305E7F2889C7ED19},
+ {0x04CDD03B74FFF197, 0x7AE5F517E1CFE68B}, {0xB81930F66BC8027D, 0xF2598F720D5B507F},
+ {0x6EAB1371CAF8403C, 0x9060E891881A2CDB}, {0x8A1B341950A5F29E, 0xD33879548503EA5C},
+ {0x2463AB52F2DEE138, 0x2971B92F4EB49FE6}, {0x095401BDAF02BBB3, 0x5ABA3625FAFEEEC7},
+ {0x97FDD1101D8188BE, 0x0C28495C1DB78DB4}, {0x64090FB2925D1095, 0xAB98C7C1F306FBB7},
+ {0x9C248A51DEACFEA5, 0x08109F9CA0D5AA17}, {0x8BFA9945C3569E9E, 0xEE46CDD7DEF812AA},
+ {0xF31E3FD3D91113DF, 0xD0BF45B933321109}, {0x972F5410C7C27F65, 0xF5CDA596D2ED67F6},
+ {0xAF8D9009B7726299, 0x8A58FE511AB22C75}, {0x8BB87F59F288E43A, 0x3354DE8F07B248CB},
+ {0xC484884D630B1624, 0x64D2B15D62D8A241}, {0x46907E0D4F35383B, 0xC3EC5CBA71FA8028},
+ {0x06E782CB5145DA00, 0x9F2A613A806C818E}, {0xCF682F0E79D8AD06, 0xA91395C602866CD0},
+ {0xE80AD1DCBB2FB5CD, 0xA93DB910D735342E}, {0x31B55D7B107E3D90, 0x8AEBAF429E56E0F2},
+ {0x4057B9706529722A, 0x09A37EBDC5F4519B}, {0x80CBD0D8D2F9FE18, 0xCEA7B8E628395F10},
+ {0x548B3F7969140585, 0xB19ADE705C2A188E}, {0xAB70FE788CEB1F95, 0x32F925527747F44B},
+ {0x4B28CD039F53C72B, 0xC243E66312BE9B51}, {0x1218A70CF15883AF, 0x796912805509E13B},
+ {0xA60032800CB0C412, 0xAE490676D7435000}, {0x70A93B5B227E142F, 0x2A82D9D010C346A7},
+ {0xF946CD850080403D, 0x55E2211ABD280D1F}, {0x4610968BD97BB689, 0xD7E26780C4E12EC8},
+ {0x5AC9E5B4FE6FE83E, 0xA7F5888D266C3282}, {0xC8D737511894973F, 0x475EB5B0BFCD372A},
+ {0x2225EF177C5EB38A, 0x22E7B9F2D7BDE2A1}, {0xFD0CE396B921D131, 0x61354EFA65CA8D7C},
+ {0x72DC683A89E463F8, 0x01557C23326CDB97}, {0x778AD4DB37EF23DE, 0xD3C193402DF8BFA5},
+ {0x247D140A1CFCB41A, 0x3B1CDACA00C58A69}, {0x56635CD1CB407588, 0xFE480843FA509F55},
+ {0x754BE5647C1616FE, 0xC7630FABE005CF67}, {0x690CCD474781E4C0, 0xC8795796E2302E48},
+ {0x74E52976D0F3E9B5, 0x4A0D6A54A32E58BD}, {0x816A2C811E207724, 0x10F371EDC114998B},
+ {0x3B90068EB2B91C8C, 0xB3BDA8D294D4DECB}, {0xB1B08434BDF6DD14, 0x8E91F12709038993},
+ {0x8EAF64B17653C67B, 0x55652407F25694B7}, {0x3011057E9A15D6DA, 0x8573783255A71A6A},
+ {0x94441AA568938CD1, 0xA472FE42EADF232E}, {0x5E9800F1679769FC, 0xFE285098AA9ADE8E},
+ {0x12B34DB139901F0B, 0x5CFD8A4279F7846C}, {0xCE9F30291251B636, 0xCD89B53ACEC4CC07},
+ {0xA9F34F7C8654E4FB, 0x5CD07CDF77D16927}, {0xD17D2325D98B2AA9, 0x278B8897279E8BF9},
+ {0x5AABB01464A61A23, 0x48D3F234036D08CE}, {0x75AE6AD1C7E31D27, 0xE7B444F6794E09DB},
+ {0x74FC53C1B2DF137E, 0x4BDAD020BDEB2057}, {0xEF7C9B1DBCFDFF24, 0x8209384450D3E93F},
+ {0x663B9CD38A37290D, 0x20B70BF20743D8FF}, {0x8FA260A7216610E3, 0xFC324814B79B7A36},
+ {0x65E847DE1EC4AE4F, 0x9C38106F3232A8B5}, {0xB9134E541C30EEDF, 0x118A17D76A1388BE},
+ {0x6FFB73C47E34D72F, 0x290B747D12E4FB20}, {0xA8DDF358F36809E4, 0x9A38D2CF57952EE6},
+ {0xC3CAAA01DF9BBA1C, 0x6D97661DF9290C69}, {0x58063760D65A29C2, 0xF40705C60E72A760},
+ {0x470A2A36CBA2B575, 0x9828CDDD6BB30472}, {0x862DFD443418FC5A, 0xD6F3A57A8E76CBBE},
+ {0x7D33439100736FC0, 0xD8A382039F9BE238}, {0x2A8552AA18CD4DFC, 0x2E1B1BB2022C28B4},
+ {0x7E385B222347BD4A, 0x989631541AFAF9EA}, {0xE59599F0CACDCB15, 0xF37245E698437ED0},
+ {0x85CD3B780140BF55, 0xCAF194A5F92E21AA}, {0x5FD93661553CCFF0, 0x8270DEAE918958FA},
+ {0x02D5E05DBDFAD27D, 0x3630D22B78C0983D}, {0x50625DCA33A32CCD, 0x7129256A30CC90D0},
+ {0x4F1ABCA76D70148D, 0x13801AF52E22BB74}, {0xAD3C47AE06E91524, 0x78242744333D6B45},
+ {0x4157BDDB55C3BD19, 0x7F99801307E2B893}, {0x694AB96B46B4BD2E, 0xC7354F709AEBA901},
+ {0x3A44FA9F98A0DF30, 0x306F4231EC49FF4B}, {0x4D34B33AE98AD94C, 0xF9BA4E98E89D6A20},
+ {0x1D27790AD11ED6B0, 0x579504C0D38C7C0E}, {0x391F279102D32D6E, 0x304B51AD9DEC2A0D},
+ {0x62DFECFE4130B65C, 0xC63C71139E6868B7}, {0x645C589C058BE791, 0x333FC5F61B41AA9F},
+ {0x27F2FB94214646DD, 0x7386BF2AA5D80B45}, {0x5600F3392D18864E, 0x890BFCAFE6A1FADC},
+ {0x640CFF4BE5286449, 0x2FDC1D75BCE62537}, {0x7C80A092067BECA3, 0x86B69E43CCB6581C},
+ {0x208D76E834502959, 0x95220D5D38347C1A}, {0x2AE14D788E541F4D, 0xAF0F3498B659A77F},
+ {0xB43FBE21D0F8D72C, 0xAF40D850E593E505}, {0x143131C3FD5C886A, 0x9D248C45A764B05E},
+ {0x291EA03C29363453, 0xEAE6C339BC6CE6BC}, {0x01510C6DC37A3387, 0x9A292E4FAAEB210B},
+ {0x0F3F619F2A991D49, 0x0E49C4F0924A4F6A}, {0x50169B490E8725E7, 0xF505E9C227457442},
+ {0xA1797693555F4967, 0xDA5B079498A18748}, {0xE42A670664F5BD72, 0xBFEA48DCF130DA53},
+ {0x15A71C101B939579, 0x5D16AAB8C27693C8}, {0xAB7D41466E42956D, 0xD8132E6829E4C86C},
+ {0x1424CF9C0EFE6898, 0x398D7AAB5142CB31}, {0x8AAFD9568500E08E, 0x0634AFA6D6F7DCCC},
+ {0xE4B25FD9A23FE455, 0x038B02D88FD485AB}, {0x7BA4C11152CE8055, 0xA6CEB8B394386FDD},
+ {0xE406EAAB580932F9, 0x578332128790A01F}, {0x6D7EFA59FCEC5DDF, 0xD90682C5B499C9D2},
+ {0x039A37DAF33C5152, 0x39335AD6C270B3D8}, {0xE82BF63AE922A3F2, 0xB71D782802FA2432},
+ {0x0712528C4D73E658, 0xE43DDDB457CE5CF7}, {0x66508EAF3F571A5C, 0x1BE8C30C1C1E84B8},
+ {0x1FB83CE06580D39C, 0x08DE52C0CD7341FA}, {0x777A1958A4B5D54A, 0x4DFC4F20BE906E88},
+ {0x7D36851AC66B97D2, 0xCC943D991E21F1D0}, {0x60E273BEB5D271F9, 0x3676EECED1120750},
+ {0xFBA2D041B87298C5, 0x68075BCE3D48AE7D}, {0x39A7211739C739A7, 0x9CC386C5C405750D},
+ {0xC06C6E541496155D, 0x27BA7BBC9F556FD9}, {0xBC2BCE1680ED92BF, 0xDEFE179A0909F33D},
+ {0x6897EFDA409BE1E0, 0x1C413440446EB4A6}, {0x4641AE3B0A7A6D38, 0xAF0DBE0E89048366},
+ {0x0A70E92310237DD7, 0xBD1700373C5D423E}, {0x5DE24A1BBDBCE755, 0x7FE497AEA661BBDA},
+ {0xFAD7F38856CE613B, 0x2CF5CC37F3E94930}, {0xC9806CD9E7D3EBD7, 0x33A59B0B3BD3C2E1},
+ {0x90EA5F788FE60F2D, 0xBE5A40F8D12345F9}, {0x44BC2348C41692FC, 0x960396A971E924AF},
+ {0xB56BCE5B266B27B7, 0xAB750C68349BC646}, {0x49465D105270FED1, 0x6BB93110E22AE383},
+ {0x11A61741C2D0DF40, 0x20C58323B8676CDA}, {0xE3D17ADB99CC2892, 0x5B35002C9E9B14FF},
+ {0xB683B651F26C8C54, 0x5675373D00CC2F74}, {0x7CA40A2760E9A7D1, 0x43180F5771F1F864},
+ {0x3FD9239E451FF1C9, 0x80ABBB3B090989D8}, {0x49CC1DDF37EBCDE1, 0x98F652E33EA2397B},
+ {0x5BCCAAFAD32683F0, 0x3C30BA1676C97107}, {0x52D10D485D91544B, 0x94619A926177B8BC},
+ {0x220A9BA65A1DF87A, 0xBF179BD7E3C508BF}, {0x4A3B411EFFDA9CBA, 0xFDD7150779F9A547},
+ {0x65FC93332B9AD542, 0x7A9A2D9D4A2F4678}, {0x67C4BFC2F52AD53C, 0x414E2691722C3978},
+ {0x5EBE4153F69C2D4C, 0x2AEE35486FB500B7}, {0x56AA3B3288512CB5, 0x7B81F03A45DAAF88},
+ {0xDF15F6E0A8665192, 0x880C759E6873EA89}, {0x33CB21C136626379, 0xC21D0A068BFB3285},
+ {0x8A255FDA0AE938AE, 0x872C3780069E977D}, {0x3401F11A9C82AD72, 0x6C4AF2CF77D53D12},
+ {0x31CFCB50DC707AA2, 0x215B90417066EBD6}, {0x2FD7755023670AD5, 0x9A2536CE290FAC53},
+ {0x369E87C459E21EBD, 0xDC289B192084C483}, {0xA61A4C5FEE8FF014, 0xE1466311369E4B26},
+ {0xA1FD52AB92BEC593, 0x01E1971210D976F5}, {0xA4AD6AB106FBC845, 0x8D1A771196969711},
+ {0x4018DB367DBB98E9, 0xC0C051509650A8DF}, {0x2D7DD49636CEA977, 0x378D87BD738A2E42},
+ {0x5C2CB15D21F689F8, 0xC2C882236627191F}, {0xB201128C16E7FA56, 0x5E2F8ACE406E0887},
+ {0xF5C6FE5DB45614C5, 0x69A4F447DA2187EF}, {0x5AF6938B958ACE91, 0x1496E457CE65923E},
+ {0x9772C206D65B7852, 0x1412F0755726CC24}, {0xD53BFD0F0AB6C872, 0xCA42DD4C8423D471},
+ {0x3660A3997092D0B4, 0x04E0FBC9C54CDB9C}, {0x96BEFD8B8C959C03, 0x5D59E2A686D5FA92},
+ {0x4DBEDE3255729DE0, 0xB65F70C929D33B37}, {0x8B316F7C5EE99B0D, 0x8C32818768C121AB},
+ {0x4FBA7CE900719530, 0x83582CF370CFCD25}, {0x0FFDEA30B866AE88, 0xAB1B3AA972ECCC0E},
+ {0x00D9B92052AD40E2, 0xD5EC72EE24395B0F}, {0x295E11FF3F9E65F2, 0x73009C5464D7BC57},
+ {0x040E675AA8E031A1, 0x62FDE2C3BC298E5C}, {0x89C6FFA0F0D249D2, 0x6C9BEC897A944F5F},
+ {0xB0C3B9E398FC28F7, 0xDD6F04ADB136FF24}, {0xF2F16989A1370C39, 0x9D8E8E30A4C375C2},
+ {0x6F7A01ACC8B2860D, 0xC9BABB73480D181A}, {0x4E95290B839F0A46, 0x2C9DBE735CAF859A},
+ {0x653BF5A82EFAD134, 0x7C885A2CB366CE67}, {0x380DBDF7EAAE624F, 0xB0D8C94D997C4F20},
+ {0x57F2FD536CDE2BAE, 0x6DCF2D7B41674C4D}, {0xFC17B71C6425222F, 0x426426E8E87A984B},
+ {0x883C491A9C226D8B, 0x74E184D52F12FEEC}, {0x4B6F9EB0B356F826, 0x8FCD6C0BC497FDB5},
+ {0xAA54C2979135ED35, 0x892C226F45D07E1B}, {0x2D58EC8AE7B12829, 0x355C449C48A17189},
+ {0x4CDB3C1129A4341C, 0x7BFEE4CA4A408F80}, {0xABF9A26E9B96660A, 0x16DE65F3386A2B5E},
+ {0x52A7E5B3BB3B6DF7, 0x99549A46B52C1D32}, {0x9C256B27296E584E, 0x49745274FA30BB27},
+ {0x7D5318FDE1D0B129, 0xDE657D8631E23B3D}, {0x9BE79938C759C414, 0x75C31406D2F30506},
+ {0xCF45FB1465C6E9A5, 0x0A2B7FABBB531778}, {0x5C225766B1496BE6, 0x9471CC709A774B7C},
+ {0x6EA2C8C92F00CDCC, 0xD9A68F91A4359853}, {0x70CC9A1BA6C860F1, 0xAEEB145399B27703},
+ {0x1DDBB610A31C1888, 0x7F0C710327804999}, {0x46F38533B5183FC2, 0x78A222D27A571044},
+ {0x6D1DE0F51BD01E86, 0x7D39E086D46E6B7E}, {0xF39350CC30665FAD, 0x61295EBEB71C3EB3},
+ {0x693B926065D4DB13, 0x3352FE2890F223F1}, {0x1B8D11570E5CD780, 0xCEC6681D949A40C8},
+ {0xBAC649E1E0B6A28A, 0x39A1E6D631331E1A}, {0x8E2EDDDE7B64D9D8, 0x2317A72735E48D1A},
+ {0xD055DBFC79789E28, 0x4006A884A635739F}, {0x0A6A263DD8F9DA44, 0x89A2C34E6F5B2CDD},
+ {0x3BF9D7C4BB38332F, 0x959D8CD1584ED9DD}, {0x54E70A84DBD5A644, 0x263205320A26F60E},
+ {0x3C2258FC63BA4DDE, 0xE126DC51731E1758}, {0x66F245B8D622A9F7, 0x3FD00B553CDF7062},
+ {0xFD30CF84CF4C8E52, 0x09446D01BA287F81}, {0xF9CB49621FDAD206, 0x8224A6C97BB4365B},
+ {0xD632084192612143, 0xE2966B31CB510ED3}, {0x116327D86E788EF7, 0xD53D3A3F5E14F51C},
+ {0x873535D146FCC295, 0x3DF6252EF6C539EA}, {0xF88AE45AB403EC79, 0x3BDCC0606356EC2C},
+ {0xCA659F9F8C6A2F7A, 0x88C143642134B53F}, {0xD4BA207B11D4C4F8, 0xD3BEC7717AC16DAB},
+ {0x010BC5E6E42978B3, 0xA165DC9A01C900FB}, {0x6F7FD4E096787641, 0xA463F6BE55C10ADD},
+ {0xCAEC18AB9D2357F6, 0x11291FEB91365189}, {0xC075C8B326D23838, 0x54D412E3B829B739},
+ {0x9D973DA97E25F989, 0x7C9DD4496A86F8BB}, {0x7E2CB858001DE0BF, 0x9F7260CBCDCFAB39},
+ {0xE1C80C72ABFD9FD2, 0xCAE66542F8D4D1A9}, {0x9239225E1C2231DE, 0xD2C842AD73CDC149},
+ {0x0AAB9FCD9A3BDC17, 0x9F2161FAEBFF0899}, {0x4D94D0ADD4F6469A, 0x53EBFA055FAED29B},
+ {0xF0B42363F1181712, 0x9C02B40C43A10FE9}, {0xC62EC10438A14097, 0x846FE7C955158E52},
+ {0xECE46FF60BDB046F, 0x1E036E677F77BCE0}, {0x5F7FBF6F4749C7D7, 0xA6266CC57DAB024B},
+ {0x9E1525D4E7830518, 0x9E66AE8A0E0D6048}, {0xDA7D20DE02531B3A, 0xA04E0A5AB9A3FCFE},
+ {0xF417BF02BF4CB00A, 0xBDDEA6618D4DB9A2}, {0x521EDE70D2610557, 0x45273B9F4370639C},
+ {0x730418E8D5523AFE, 0x3DD8C97DE4D431A7}, {0x8805084CC68A507A, 0x78435D64A8DFE325},
+ {0x988D470E0274C973, 0x201FF31D754442BA}, {0x40D58A7A58054620, 0x0721433287330996},
+ {0x06EC9792FFD68CC1, 0x7A8140374FCE8BA9}, {0xFB0301AB03F42658, 0x160F57F87F94D655},
+ {0x0334449780443314, 0x0FA4B6595FC0877B}, {0xC946FEF249DEDF30, 0xF624FCF5EA287E22},
+ {0xAA53A803B2002953, 0x0C911E8EEB823A08}, {0xF8FC9E08436B6A12, 0x09EBAD1D8486E539},
+ {0x8343400BCB4483F2, 0x20DD68ACE5085BB6}, {0xF9355ECE9AD52DFA, 0x74DE63D95CE0B40A},
+ {0x85FADF3C4A703A08, 0xD968B562B53A7C64}, {0x727B4E3511C73F8F, 0xFADF658DD6309B61},
+ {0x00E98A485B66C08D, 0x56D3F0BEF2BCB611}, {0xBA4287A72A31A570, 0x307B642CC98DC70F},
+ {0xA1C3719D006EF826, 0x10C548518660FC89}, {0x8B7043CB237B1EE1, 0x1729E95341168644},
+ {0x7332EE02890728A7, 0xBB2D5F0FFEB764FD}, {0x925C9E4458FBD69F, 0xCFA96D1A98CEF2CD},
+ {0x78D3439D44FAA771, 0x44B5B158DD8DF004}, {0x23AC54A97E15FB24, 0xEE23DB325421E4B6},
+ {0xB76702A2CB70B5B5, 0xA39991637E336A14}, {0x9C1C091CFF1B186F, 0x54CA82CE21CF7237},
+ {0xB0F8E079C3395F2B, 0xFAA3591C49F9E5AC}, {0x9B50404A85E4638C, 0x1B18179549DA2A6F},
+ {0x3CCBB8E02D22B485, 0xE2436EDFA391513A}, {0xC80148D2C9F98A20, 0xD74C7BC58E666018},
+ {0xBDE7C7657B8F2E4B, 0x004CC1376AFAF34F}, {0xB9540A2585920EC5, 0x2C7449FFA16D0E4A},
+ {0xED3B83EAA423126D, 0xFD6C5B944DE8ECD4}, {0x0748DCF82753CDCB, 0xD3D8598D9800A01E},
+ {0x4AE6716359DA8C47, 0x5716DC8D8B84D636}, {0xF0DC3EA3400313A3, 0x3D15653195FE67B6},
+ {0xADB6FAA08D8770B6, 0xA47E24C8FFA88441}, {0x3F14ADBD0891FA6E, 0x8BB56C6F3F727BC2},
+ {0xBEC0403D44B172D3, 0xB0226B95677DB85F}, {0xD0E9A455E428EE8C, 0x6A756516ACD5393E},
+ {0xD44C4A430D254751, 0xEED498DC9CAFC429}, {0x5C7914E1176DE084, 0x29B4FF9D10E40473},
+ {0xE1711F0D711BCCB5, 0x7C733CD4A7432DE4}, {0x9895E8F2C5E487AF, 0x8C157FDBF700CE1B},
+ {0xC2DED63E5B442A63, 0x31872C6F974E4978}, {0x7638307C526D96EA, 0xDB4C3EAD62FF8530},
+ {0x0B71BD7C12927B5A, 0x104290227416C50A}, {0x17BBC31304CD029B, 0x47F40C06660A23D3},
+ {0x57C9B5EB84A01730, 0x271545C3DA566E1E}, {0x4D7860963C8D5865, 0xE361A7D06D9A9E19},
+ {0x654AB0A3F4CE1BAB, 0x29FDC93E415CBA51}, {0x04A2D31D1B6A6448, 0xD347C94A297A9739},
+ {0xC8950D0971433354, 0x841F897061E1F20D}, {0x01DEF85D269F6EFF, 0xFD8115CB6739C446},
+ {0x485056B511E59665, 0xA980394D34A8788B}, {0x39495CED58EA6D62, 0x76ECAF0FFF187A06},
+ {0x9346679C6C00B395, 0xE6B91FEDE66751BA}, {0xC81EE74991108FC9, 0x6C145D653555D9D1},
+ {0x4B28569D3E6F61FB, 0x7872E262FA0D583B}, {0xD2CE225371A77A60, 0x9036B92078F1DC22},
+ {0x007F41DFE2415C87, 0x7484B4FFFD2A2FBA}, {0x6DDD25E85149C0EE, 0xA34ACFE0C3A99AF9},
+ {0x59DEAC277E21582E, 0x13539678888C502E}, {0x907BA1BC79387E44, 0x7A37126B312F42A3},
+ {0x9EAD714FD2F78EB0, 0x723F61F62E44972D}, {0x69609249CF512D0E, 0x8D2A0BE5416711C0},
+ {0xE16ABDE809C5C6BF, 0x6541853CE3273D2D}, {0x2F405520AB4A7598, 0x2183BD46554831C0},
+ {0x2CC51DE72F069A54, 0x8F6686312D4480FC}, {0xB58A69CA0737EFA2, 0x79898BAEDAA8EC77},
+ {0x874422CC438F38E9, 0x919FC34E36A27192}, {0x72E55D5809507B3C, 0xD7E8929EE3ED0099},
+ {0xF850E3700685752F, 0xB10603FBBAD0D1BE}, {0xEE445A0B5488A020, 0x2165953B6A7F4A0D},
+ {0xDCC8C6F61690783C, 0x262F76EC9454CDD8}, {0xED92FF97F0D3F66F, 0x0D57395B02BA072B},
+ {0xE68406CCC0C1C4E3, 0xD377E3E8A2CD2031}, {0x1FB5775BA0A28498, 0x3F5A5F4B1E36751F},
+ {0xE815E30A8B906B94, 0xC4F80FF340878380}, {0x0E25B9293575928A, 0x1D8355D382250589},
+ {0x63DDF5A800CD03B1, 0x54BE493880C9A67B}, {0x685726150388A515, 0x436B717652265D1C},
+ {0x2FB5B7803B70A786, 0x0774607A2D05B47C}, {0xAFD5BCC2322B67A6, 0x0D86F258BF814590},
+ {0xE45081DECB20ED58, 0x19B938BA98CB1061}, {0xF9E3471E9A8216A9, 0xC90E84F00481ABCD},
+ {0x3105332AF32DC26E, 0xCC5849F01B76B9BC}, {0x74137D83F4E01443, 0xE033AE2ACBDF8A11},
+ {0x21B88D93F3799AF2, 0x857864BCDFC0E735}, {0xE3CD608EB968D679, 0x4022FCD5428BF8BD},
+ {0xCD8673A51F73817A, 0x0D8402FB5A6B0FEB}, {0x2DEB57C10106C471, 0x7E3775604A4D2CC9},
+ {0x5493CC51F6AF6AD2, 0xE420FEA3DE0FBD8E}, {0xDB2681D90C92DA1A, 0xE5AE85C6F48AFF1F},
+ {0x4F0A93291BB348C1, 0x894E2A5D82A8BA59}, {0x4DF329404858C847, 0x50C9FE486F527C57},
+ {0xB95D0CB0BC11ED07, 0x691515D9140315C6}, {0x673F35B3FE29DF1E, 0xB27E429ACCAC4533},
+ {0x1470810233910712, 0xE1B2F9BD99F52200}, {0x74766A9650ED7C24, 0xD695CD7CD9EEF257},
+ {0xAF8AE766F3857311, 0x8434F408D61E5D8D}, {0x6A57C98C3C503158, 0xC3DF476A30FA8684},
+ {0xDB9D744F2541DC71, 0xEB29B0707AB5E0DD}, {0x1DB8034FB77C8D89, 0xBD586E4C37853D33},
+ {0xBC719EFFE0F9C02B, 0x7106014874638471}, {0xA11EC93AA5D4709A, 0xFF6B9C2F162DD60F},
+ {0xCC0FED150BAFB35B, 0x114F89BD43589E00}, {0x5F457FB73796EA97, 0x28477FADB29FCA73},
+ {0x2BAD21B880772E0B, 0x89780F3053BD1CD1}, {0x0EC1C9E30335FC56, 0x3D707C7CA21F3A28},
+ {0x3B756D6A0A3C16FE, 0x79FECBE322960666}, {0x7ED99AC385AD6E1B, 0x487FF3C605530E66},
+ {0x0657451AE37B9C9C, 0x5FB9C5A495CAD03E}, {0xE3C93AD216286FBE, 0x7917C625DC126451},
+ {0x0941CBFFE104A251, 0x6F12834E5BE2F673}, {0x94192C3F3A4F15D0, 0x060CDF8FB0E5E5DE},
+ {0x18CC3429AB011346, 0x93FAAB9F71DD56F5}, {0xA7F80EF03EA94A22, 0x4BCA958D8B8E03DD},
+ {0x3BD87CED99E67622, 0xC7978CC60ED4A4C5}, {0x81550065EEC8BB98, 0x92F7E7DA39211249},
+ {0x42DA970871522D1D, 0xC58425256D050443}, {0x317609CF617DB926, 0x89BBE84042777379},
+ {0x57C41CFB801F5985, 0x4ECC1F1968985297}, {0x3AA109A9B4721BE8, 0x14F5D6DBBE575E96},
+ {0x0356987B2787D9AE, 0x335A247C11C9E2C6}, {0xE2C4C14442CE52A0, 0xD5FC19FE184DE780},
+ {0xE2B82DCEB6F43DBF, 0xD33676231F2F0DF4}, {0x9AD367B925983263, 0x4766000DA44D7924},
+ {0xC95FCBE9CF5D58A5, 0x2761D727ACB864D8}, {0x440B387902781BE2, 0xD2D5851594A70E97},
+ {0x51316B5AAB0E467F, 0x1D14AC216BE959BB}, {0x8589853015A6E291, 0x8B4E8734DE8B49B2},
+ {0xBF5A74BDCFF08AFE, 0x53A3AFDD41A099A5}, {0xE45720EC23A156EF, 0x77805FADD017A334},
+ {0x21B0E662C0F748D9, 0x9E71D58911515FA4}, {0x8A8AAE0C09A79B7C, 0x63AE062F4903EE8E},
+ {0xEAE2A8517E7E579C, 0x5436CFC8C89BF020}, {0xD61637EBBD13AD66, 0x261353F09131C5EC},
+ {0x4417EFEE85406B16, 0xD1341D3953B58439}, {0x2A328EF2D6E72B4D, 0x64FAFB9F05EEDB85},
+ {0xBF830196AC6E0601, 0xFE42D54A1CB3EACF}, {0xB19A49B58F4D1B99, 0x799F58544DE6B6B6},
+ {0x8817EEFA57B9B95E, 0x7BDE0B8B6B119648}, {0x2791391786DFF9B3, 0x3EAD6491D18D4D51},
+ {0xFA466219119ED4A5, 0x3AB2E9D2DC78F4CA}, {0x18933A5B21BEF340, 0x308A885DC5C8952E},
+ {0x26B19625FDCCD64A, 0x3193429B8F483616}, {0xF692E18005576645, 0x62B11832E100EB18},
+ {0x4CB3FA6F4A4A7E01, 0x37B567F683D7DD1B}, {0x6989D72B13988A8D, 0xE82D444A2F9837F3},
+ {0xBBAB3E5022008410, 0x1F934BF2E6B07A00}, {0x8396CB8BD303EAF8, 0xC180507AB9C65748},
+ {0x46739539556328C5, 0xE1FDE878F0F8FA9F}, {0xEBF824252DA1F528, 0x8637252CF1CCEB01},
+ {0xC109FFE0DE1E96D1, 0xA69798A4E7D3F88D}, {0x5E0E8AD441BCAE16, 0x6682530E04AB9319},
+ {0x96C46A3C9969724B, 0x69B4709632E7E279}, {0xCD65F1C7B077A764, 0xE7463C4D5B8BD70A},
+ {0x8E143EE8F1E74865, 0xA3F777522E1E4D7A}, {0x7A6A971328F036C2, 0xFDC38A199E486FEF},
+ {0x951BDACF33425531, 0x58A29691A2748F85}, {0xC081939039B25E95, 0x67265F44EF127AD1},
+ {0x2BCA68ADDB444519, 0x20423AE6FDBC7198}, {0xD5B0AD5D0C2FE027, 0x5FFF93A7DF23325E},
+ {0xB84DDD21AC87EEA4, 0x83E5D3164D3CB723}, {0x318F1E5A725FAAFA, 0x975C57E4F4559D98},
+ {0xF3DBC9CD9D8D56ED, 0x9A41932CCF8D988C}, {0x3A9535AD0B703EAD, 0x6AEF1F4C4F238F91},
+ {0x1F26ACDDC84F1ACC, 0x3CF91D2C3204AE63}, {0xD68E897E12195C57, 0x25183BA753E34215},
+ {0x0ED70CFDCFC27035, 0x84AEB13212A79165}, {0x30A0634A3EBC1120, 0xC0892F0ABF31FF61},
+ {0xBACF0699929BA875, 0x53101A0BA41B51EC}, {0x8BE0B357AD7AB3B8, 0x621F728681EA3B2D},
+ {0x143A62E8FC6D7386, 0xAAA71CA592F2A790}, {0xDB0CD21C8AF4BEFD, 0x8F5BFA4788F46C7A},
+ {0x4E4FE0BC6F4332AA, 0xEA1A6A7AE117CABB}, {0x0E63D88683C7AA8A, 0x19ABDE9B5ED00F71},
+ {0x76A721AFDF90738A, 0x3D276D4B41527848}, {0xC5DCA7553FE89A85, 0x4142D5A2011526CB},
+ {0x9B6E33134D69DAC4, 0x9594F31FC14A1E09}, {0x340A0CF051A6E464, 0x52A852A785E2CF1C},
+ {0x18F8B3686FBE4601, 0x0CABCAEE9E1E286F}, {0xAFF9E5577CB2896C, 0x262D00C15C2F2F97},
+ {0x76ED8B8192022B36, 0x29981E94C0F9BB03}, {0xF90CA3AF2B663DB3, 0xFDD376BAA2B7E2C1},
+ {0x300CAD32403217A5, 0xD8AFE0719780EDE3}, {0x7FE2724AAE835863, 0x4C3AA7EFB940EA51},
+ {0xDE799D032607710C, 0x705CC52D06C1884E}, {0xBD1976F6306692F6, 0x6FD6AEC38F0B0904},
+ {0x2BCA538CCE328BDF, 0x8827334FFE1E4AAC}, {0xD43898FC33794337, 0x0A5F2944A400B487},
+ {0x5316DA49845FA76E, 0x29A9D03966B7C81D}, {0x19651D21EA6CD596, 0x941476FB1F138B2D},
+ {0x2525987E1C3B5175, 0x40E78936B50E87E1}, {0x4F5AD67C816A6E33, 0x6B2057C87ED45D15},
+ {0x63C9F54E34410FD6, 0x75C2D1EF812696B5}, {0x8A4DE494B5C77B8D, 0x80DD9085E033B7A4},
+ {0x896B25AB0D040E63, 0x4C822762D7470531}, {0x7BE4018B60A56EEB, 0x2DD267532946B3A4},
+ {0x3ECB59C8FBEC06F6, 0xF0B61841F6AAE937}, {0xC883D85FE479B71D, 0xAD6C6A28D1A393DA},
+ {0x1ED63ED3BC14FB84, 0x66ABFEF5ADF133E2}, {0x2DBC47D597349251, 0xD68BE5A0C2D1C1DF},
+ {0x0889288EDAD81CEA, 0x011ECF3FAF8D551B}, {0x9388380E4F875A44, 0xFBE8D372E5AC7339},
+ {0x35A664F264E8A83D, 0x3A34D13548CCB294}, {0x9081C87761E1A6D1, 0x1474EFEE7CECF76C},
+ {0xCE69EA251326F6FD, 0xDB326B10405FEFF1}, {0x353DB4EC9F988A65, 0x9F5A9F10810FE0B5},
+ {0xE393ECD3CEB12AB0, 0x0469072626AFC03E}, {0xB7D05831A7208D91, 0x1D3ED2EF47CC044E},
+ {0x9F2B51677E885F7A, 0xF83790747FE2B547}, {0x0579BE18E1E54C41, 0x2FA57881826BCBB2},
+ {0xE4C008FB1B59CAC8, 0x0A66057250FC6F45}, {0xEB2730CF91B5B6D4, 0xB8233B9DC6316F07},
+ {0xBA0A2191BE23F753, 0xCFEFC8CD5D20E24B}, {0xD70834A73DE92879, 0x2EC8F77097FBE9B4},
+ {0xC76B56601D827A58, 0xCD42DEC1686CB9E3}, {0x584B8C5EFB32912A, 0x875FBD1C850A155E},
+ {0x4F37D1F3657C62F8, 0x66DED51DC77D48DF}, {0x906840A858064240, 0x2DC887A5D330475B},
+ {0x215A94CB7F2B400E, 0xE6D1A2CAEE6074E7}, {0xA6482B556D3E1D64, 0x4FA082C4636C08C1},
+ {0x8A9D59389A47BBAD, 0xBEC73961154909CD}, {0x7182C921F33107D8, 0x13116BADAD89F27E},
+ {0x88B45D2B8CA4DF6E, 0x3869A5E1DE3453AC}, {0x5B3F8420519EE27C, 0x776F5572309D63FC},
+ {0xE930C8851377AB65, 0x80A48C553329A2DA}, {0x97BC507A6B38F4BD, 0x4B8BFA522F280B43},
+ {0x583E0181D35FFDA7, 0xDFCE3A7DD0B23353}, {0x6AE9C4440EFD4F40, 0x74A836DF7C0B864B},
+ {0x72F417C979956D16, 0xB89C320A1256BCDF}, {0x30AE070B75904E35, 0x9ABE56C815BC4897},
+ {0xAA33BECCC1BA85DE, 0x3F5C5AE5BC7B9A0C}, {0x374FF164DA19A6F0, 0xE5C5290F1416A759},
+ {0x70FABF2436B2EE75, 0x33620FBD7E6311D9}, {0xA75CF2CDBE6D9C71, 0x688B3094E5BC2F71},
+ {0xD7A083F085ABAF90, 0x1D3FFA0A3D30D0E9}, {0xC0102E7802C6063F, 0x542FB6B57450F182},
+ {0xCB0E9AD9A040E9D5, 0xBF6FBC9C0F6CBD38}, {0xF27D0F8275B5A867, 0xC78D4D72E4BB66ED},
+ {0xE85E69AAD9979A53, 0x42EC5F3B38DFB6C8}, {0x35A65466EF9B0D44, 0x8A7FB0CE37DD7725},
+ {0xFCF30E08245E2D4A, 0xCED90114B91BDC68}, {0x3E3FDC9A3A1CC0C3, 0x67DF5B66A8EAE35D},
+ {0x466F5FB8C67E0D43, 0x8AC47914018FDB7D}, {0xA256111063DF07A0, 0x911C4735F991A17D},
+ {0xB6B11AAA87A68F45, 0x7336285D428278CF}, {0x38360BD52905DE11, 0x8C2E41E5E4A6BB8A},
+ {0x3A6380A8C44BEB1F, 0xD438B9993AECE11A}, {0x2F5AA0F6F2A3C311, 0xFC4B672BA1079BCE},
+ {0xB9AB1F136B292015, 0xEA96F4BDC8B5A27E}, {0xC23419D8B0710307, 0x1C16CBDB4DEA20A7},
+ {0x50389B0D7FE9387F, 0xED71BB2E9359CAFF}, {0x87124035C8468F8D, 0xC925C78E63089085},
+ {0x4A486FAF80C683AD, 0xC4948002F1314B43}, {0x467F7BAA61C209FE, 0x59D11AE44A18248D},
+ {0x313761567DCBD2D6, 0x1D2DA71469A60816}, {0x64F70859DEA8ACCD, 0x777FA035E344C541},
+ {0xD3A44B478672EA31, 0x7F550464FEE7BA03}, {0xD126932E3DAEE560, 0x90AFE81AFA871477},
+ {0xAD33BED3AD4E6E7D, 0x17617409215CC764}, {0x26D0F3665FF21048, 0x5584E489F10C895F},
+ {0xA0B56B644612B2A4, 0xE7C6FD52C042067A}, {0xCB4DA17D3234B40E, 0xC071A1695BC24D85},
+ {0x0EAD03156D880C9D, 0x11DB3DEC6F37FE94}, {0x5350B727666BF35E, 0x345E40334669FA08},
+ {0x82905AF4FDFF6B67, 0x8A9070FEF242A473}, {0xFE17F5F849DFBF5B, 0xBE469EDD1881EC7E},
+ {0x7395BE6D4DE5F3BD, 0x19399D6E5FEB6B14}, {0x941E92E152124C56, 0x7F83DA483ECE7773},
+ {0x86FC56BD11A553EB, 0xA92E964F0620BA0A}, {0x2DC23C20B99EA5D0, 0xE31F2FB8B39CC8A5},
+ {0x407FB53993B9E978, 0xA368FC6E8EEE6C04}, {0x6B074F8757F76D3B, 0x3247EC1195447D21},
+ {0x1B0150C1DE1AB5FE, 0x03278F5FD569314F}, {0x287A6859DF8BA213, 0x41AE43B31556136C},
+ {0x7D3B4127F8D85F4D, 0x9012E2DF2BF68F0F}, {0xD8C46442C1461417, 0xB43D7763E623B1BC},
+ {0x10C1CDF8257EE0C9, 0xC904E8F7FEB6901A}, {0xBE52F0DCD99725FE, 0x9708B9C421CE9C8E},
+ {0x6CDB62B2BC7C1094, 0xC70D56FEBD0BF27C}, {0xFAFC59351333792E, 0xD49DD43D56999D1C},
+ {0x1E6DA27EC488DC48, 0x54BF92DE59FB3E9A}, {0xAEE43F6AC27ECE1A, 0xB5B4F73352100B19},
+ {0x63FA9B0EBDD64B4C, 0x51C3548C68153CC7}, {0x386914280027DB2C, 0x33C2130E9FF52D72},
+ {0x722883E62027A64D, 0x9F114E8714E92001}, {0xC8534B53F61B3F4B, 0xEAC05AEA0B85E979},
+ {0x4584EA6B81B989AB, 0xC4A9C5DDE451F03F}, {0x7C272A5CD3556E34, 0x6ADC00BBCED25001},
+ {0x9AFD982A1A61C5A5, 0x34AE97BC48582446}, {0x79281375A77ECFDB, 0x5BB6EE03C7E924D4},
+ {0x207F30507DE3DE83, 0x6DF2765C1CB9FEF3}, {0xBA1374F2ACE85C98, 0xD718A92AAD5B92FB},
+ {0xDC481895A42EDC89, 0x7EE0AB5FE17ED4C0}, {0xB997736D0B840188, 0x8A7466701DE2A663},
+ {0x8A609397E24CB6A7, 0x6EFE1BB7A751B604}, {0xE54755E72167F05D, 0x5F6F07BA214AAE02},
+ {0x1DAAB1FDF53EE5A4, 0x8F7BE6423E8E416A}, {0x242323E0B7C37E41, 0xC4AF633EAE531BB9},
+ {0xCA77CAE1F5F8EF6F, 0x342E15734BA9D8D8}, {0x812230E78A97D40B, 0x38802F767D792715},
+ {0xCD41E041288E13ED, 0xE8104BCE8530AD17}, {0x40898EF3EB2DB9C5, 0x583D05EAF8459FBF},
+ {0x961A06353633C608, 0x46D51BFB34DF99FF}, {0xE123E4772B1CE98D, 0xCDDB46C4C621CA34},
+ {0xE455A7E0544D38CB, 0x005739B8CCC4D23C}, {0x02DA28B4BB0E1B74, 0x925019B8EECDA21F},
+ {0x5481C554E144F510, 0xC01D94BE5AB6B6FD}, {0x8755285642331091, 0x05690269E41C9208},
+ {0x2CC232F0CC462823, 0xEB9F6A0AFB65D25C}, {0x0525E4F313085A4F, 0x3C0BEF43CC296C1C},
+ {0x67D892B6D42C01EE, 0x427AD56BCBD55C6D}, {0x90A5949EFCDDADB1, 0x90B2255E6DC0BFEB},
+ {0xE536AB9EC9D4BE8A, 0xB5DB6A943C2BCB5C}, {0xED443195915A94A7, 0xE5442F44DE78B5FC},
+ {0xF621ECC00A02795A, 0x4FDEAD01817E78C3}, {0x0D730F417E80D07D, 0x4A9CB06EB8984534},
+ {0x034383364D82BE1E, 0x228D6A22A5298F0F}, {0x0C02817BDEF02631, 0xD64C8B14C4023CC2},
+ {0xA7AD61359A03F3D5, 0xBC8802B7D08E408F}, {0xE15FA39337C78FEA, 0x075A4EF5F554B064},
+ {0x03C40C5DD937B557, 0x8E4EE3C4C7726CB2}, {0x37B0FB98FBD9A998, 0x554F90B3CCDF6383},
+ {0x138B240E32A38355, 0x6A282004B8A11A05}, {0x10E1536C8BEBB9BA, 0xAB53AE9EE0964BBC},
+ {0x1134C4D3B8375550, 0x4C9F686B02DBAEFD}, {0x4B65FB2815DECE84, 0xA6423341A77ECF71},
+ {0x945DB9DF88C5ECE0, 0xB96E3432CF55B759}, {0xB69A953A64FE3357, 0x5813C7A4D5A89006},
+ {0xEC86EBD52B2C16A6, 0x0CB1C157FC7426AB}, {0xD82B578760A07967, 0x5AC4D55D16F1FC42},
+ {0x19D92F29793E275C, 0x71B298C3AA69F1A8}, {0x08F47359F914CF90, 0x90A717D5988E3C75},
+ {0x3CED6C254BEF18D4, 0x36F327F9AF3B53B7}, {0xA29FABE4D2081376, 0xED05FFB192EC28CC},
+ {0xE4DDB5E51D5B0A16, 0x11815DC46C611D61}, {0x82513ED8E49A29F9, 0x4CFE782BB568632C},
+ {0x51AB904C862E6758, 0x42617BBA08C354E1}, {0x269EE14A52EF2D42, 0x9525A9A793B73600},
+ {0xF00896451E6F329E, 0x46DFA10A45461A02}, {0x1E1C60A24587C76F, 0xCFF94452B13D40C1},
+ {0xA938D195BCCD811F, 0x57BCEF3DAC63B2F9}, {0x0FC0CC301209503C, 0x9A823316C77C02DD},
+ {0x7A4E10F1CFEB34C4, 0xB1B00FC48A7F89F2}, {0x21D3E58CCC7D095D, 0x128632F7D59B003B},
+ {0x97E44165157678C0, 0x776F243EF3135337}, {0xA826E9231485138D, 0x5EA18F5E75D5F805},
+ {0x81553F8DE8A7F2BD, 0x316DFF6B7BC6437B}, {0x1AC47DE461C01B78, 0xF92715B3506AF9AC},
+ {0xF69EEC048709BE4E, 0xAB57A18AEC9E607D}, {0x68FB5E6783A63FD7, 0xCF0B0C4C5C650070},
+ {0x9C9EA96908BD6308, 0xCC5F8972B5D6B978}, {0xFDC7FA5C462D5F9A, 0x3712AC5F5AE6226F},
+ {0xE01CFF7915F9AF4B, 0x050482F73B6C05F7}, {0xD273312EB29343BC, 0xA3BB42610A540B28},
+ {0x28B8D37C90CE53FA, 0x1D69B4ACFFEC8297}, {0x3681A53ABAAD0E87, 0x5DE086CFD1C73E1F},
+ {0x5A45328398C8BB2F, 0x2FF8ED26F317AFDC}, {0x1066DEC26EDCBFF8, 0x4C0FEEE71A228A83},
+ {0xB4CAA16DDABE3867, 0xEF64E97547C3A974}, {0x9945668C5C52DE6B, 0x9C160B3D70335DE0},
+ {0x09D88FDA9BAF85AA, 0xD743480D26285857}, {0x835625B99B0C987C, 0x21A725A00D527419},
+ {0x47074C834E58283F, 0xBEFF647FB30D0C45}, {0x49C899A96FE3F0D1, 0x5BEE9FBB442256B3},
+ {0x53BF43019894AB72, 0xA4EEE19994DFBD74}, {0x540AA3F2F64CC381, 0xF80F7AB8A1D4569A},
+ {0x42E9065A08D5CFFF, 0x2E49C234880D9BF3}, {0x3FC9925EA76FD705, 0x018B282A69C4EE4B},
+ {0xD580EFEB487FF643, 0xA6CFE68EB592146A}, {0xD39551319C40C245, 0xD74B9F3A88D5257E},
+ {0x2B3825E82972F573, 0x94F6FBCE1A24C2F2}, {0x1079D061CFB0A38F, 0xEB1B8BBBBCC182DA},
+ {0xC1BB161B00AD92FA, 0x3ECD7799CBF8880D}, {0x59C6F79FF5B7FB9A, 0x8514B706D9B3295E},
+ {0xBAD2C0EE9B4EA01E, 0xCA79DD40362F8CE8}, {0x26C4F53ECC9245B8, 0x75D846064CEAC311},
+ {0xFC1A7B91BB9E355C, 0xD3CF07B2D820B92E}, {0xC277135F0222C006, 0x435F5A60B2C98C46},
+ {0xF591D122303478DF, 0x2F6E33CEF033D829}, {0xCADCD17900AC7371, 0x81582AB02B3B2902},
+ {0x58CD423596DB4EE4, 0x69328B5CF9C95E66}, {0xCF8E2466A8A72E0F, 0x6F3B10356E70E9C1},
+ {0x544FDC67703445C8, 0xFA088D51278AF4C6}, {0x9ED74CE981DFE0B9, 0xA6BD4B90609E815A},
+ {0x74B11B1FDE1EA244, 0x3A46B729C6566C39}, {0x9BEA4A707F3D286C, 0x11F53151543C5E49},
+ {0x9AF5767C1C86B3FB, 0x3B4BE838F0D5DA5F}, {0x74301BAE59E9073F, 0xCC006947CA450BB8},
+ {0x26DEA196E431BB20, 0x0578EFA3D2E37D12}, {0x9D29E272A2AD9AA2, 0x314CA62DD1796625},
+ {0x15326608F668D7C8, 0xC300F2D8FB222C0E}, {0xDEB075693FBCE31C, 0x325D1C02E283DACF},
+ {0x7E15ED81B4C9CF27, 0xAA0AB5C97DDB2410}, {0x852C6C3C229FE786, 0x42FF4E86C056E9ED},
+ {0x0F7EA6AE001F936C, 0x51A086511129AB13}, {0xCED53F088DDED79F, 0x565BB20EFC902416},
+ {0xDC184416EB1E84B1, 0x19AC468B1366549E}, {0xEF45B79D304BC3B6, 0x4D4C237BD010F01A},
+ {0x3B9E62D99A82CA0D, 0x5CE1A06B99D15E10}, {0xF3D1340AFF3CC2EE, 0x8325F56BEFD51E42},
+ {0x3AC44A5DA07C9650, 0xFC721AB3BA209160}, {0xAF030215D1559539, 0xE89BB05852910FE4},
+ {0xF5B627307460DE6F, 0xBAD62A05C4DD6F58}, {0xACA29394B548C0F4, 0x2D61635A008E312A},
+ {0xAFFF88CCE0621AE6, 0xE2BFB04C9BBF524A}, {0x2C7F43D9B2D31B4F, 0x077CD235E68A23FB},
+ {0x04B63370CC2696C0, 0x6F09DD9A5A79CEEB}, {0xBDBD984C65F29093, 0x9FD47F854D03A981},
+ {0xF9784DC3FB67DD2D, 0xC8822066AFBDFF9B}, {0xD04C84264F87EEAB, 0x7C35D1FF736CC601},
+ {0xE682B5040B213933, 0x527240196DA18CAF}, {0x69106ACDDA739FB9, 0xEEAB34DCC5BB30F3},
+ {0x3767374FE1EFE4D2, 0x143279E241772452}, {0x4340EBD56E1C754D, 0x5ABF4DF5254CD41A},
+ {0x6DC7A598C977D6A2, 0xDDB8942ED74239D7}, {0x19771BAA163E56E9, 0x1E6C8B2DC8A395A6},
+ {0x176D07E1A7A635A5, 0x05CFE8DF766FEA08}, {0xF7A241C4AE5A5B9D, 0x6B33F848A306C682},
+ {0xD92EE345F29D158D, 0x902D50336C1E709E}, {0x0092C390402323F6, 0x3EC78E378798E448},
+ {0x327509EE6B27A961, 0xC775842317225CCD}, {0xCE5BD34BE8A84CAD, 0x7250AD9F2C1D1C48},
+ {0x4C17D37A0D0D1812, 0x15FEFA53761685FA}, {0x150E63A4BD18FEF4, 0xD83682845A2DAF63},
+ {0xA78D26E7D1B859F1, 0xFEC7A5F0F06E3301}, {0x8421C78E5ADEEC16, 0xF8F23EFE481398F4},
+ {0x93B4A3B97BB87F5F, 0xF016581782B76DFF}, {0x9C37902D047F3390, 0xB01A4C7AEB7F73A5},
+ {0xD4849F91E60C49B2, 0x0B0263C878BC9E8F}, {0x62DE284908DE4EC6, 0xC4089B296C44CDEB},
+ {0x94B0E16691EE95F3, 0x23E8CE10CAD8CA4E}, {0xFD8AADA421A16034, 0x9B0F62E15EAE4C05},
+ {0x4F867E1E7014C765, 0x18BF7CC45C0823A6}, {0xB0C8155EC527E033, 0xA797A5FA94347603},
+ {0x0EFB728A4D9E4191, 0x6859C99F87177C86}, {0xCB72A35FFDC74176, 0x90239615B9889DD9},
+ {0x01CF2C531DE52093, 0x82BAB4B8614D9178}, {0x4D2F293AD65ADAA8, 0xE96B9E58D7F2E34C},
+ {0xABC0171B69E826F7, 0x114C2C8C4AE063CA}, {0x192307A677AFA192, 0xF550DE8C827E5BCE},
+ {0xBFCA577BB3DC9D05, 0xA503C68F43F85863}, {0x4FA49BBA7B4ECCF7, 0x6D287C5DAADE6D8A},
+ {0x9D9B2888BB400101, 0xF9AAEF3D9DFD0587}, {0x644D0C767E19E8BA, 0xBFAC03911F85F377},
+ {0xE5E2F9B90478A676, 0x7F5DBFEBDAE92608}, {0x4AEDE41416133D7E, 0x9DE20DF6C0D1FCE0},
+ {0xDD4FB86B6C4416DB, 0xBA9E7729F558A03C}, {0x0BB1CA5E07023324, 0x9482DDDA35730D93},
+ {0x686BEA67374B6A15, 0xA73877553F92FF7F}, {0x62C09DE87DC9A4F6, 0x18A7509ABD8C7D34},
+ {0xA1232160BA8D4F98, 0x93070F01EDBF2053}, {0x3D69C33E7556957A, 0xBC73F85F3D27FA3D},
+ {0x561943978B3CFBD0, 0x34CD59C62966BA4A}, {0xCB9EB977AA0EB1E4, 0x99E57E64536D0C27},
+ {0xF16AF4D2CB353867, 0x947C0AFFDE9043D9}, {0x2A1F2121812D7868, 0x308A168C0A0E0A0F},
+ {0x5A00838EFAF3614E, 0xBB647C354464C3D9}, {0xFCA8F943BA89C50E, 0xFB54636A3453CDBF},
+ {0xBBE84E9D3C17FEB9, 0x492E821282092EA6}, {0x55532740441FFA27, 0x13273B5398FB584D},
+ {0x38A772FDCE5D349E, 0x7586B62E8C5C39D6}, {0x85B21F8BD5B49915, 0xF6E61D8F7030AD7E},
+ {0x9DFE0512D978B643, 0xC2AB2FEBF6DF0EB7}, {0x239F50F90C437365, 0xAD4446C0D48BF90C},
+ {0xD6D7EF2CF984610B, 0x280F426B741DED9D}, {0x61D13925F655CE79, 0x6273E80C22CD8117},
+ {0x032BB011FBD3B266, 0x2B090C53614DF39B}, {0xEDA93447BA5E4F5B, 0xB214D1AC5E135FB1},
+ {0x6FD66A87B053C0A8, 0x524A205A566E405A}, {0xA522A88DACD7447D, 0x69DA1851AFD6B68A},
+ {0xCF5DEBA701CF7DDA, 0x089AA6A7A3554CF1}, {0x3956EDE0E5806D2A, 0x261F7A65D704CDCD},
+ {0x1082AB87A577B1B1, 0x7EA24A104ED360A2}, {0x4D831C2E872A5681, 0x68FDEAD9CBA67F0E},
+ {0x37C21F1DF291883D, 0xAA6DD49068DC83EB}, {0x88A9E1073FAE82B9, 0x1917917BD3AC5FC3},
+ {0xE4BAAC629FBF092A, 0x6251440591645EAD}, {0x76815D7BC4B13FB1, 0x0429AEBEBFDBA22C},
+ {0xD061679D9DCCE2AA, 0x399E503F02919130}, {0x01FB460A865EB6F3, 0xBEDCCC8A9D87B6E2},
+ {0xE74F33F3A0A648E4, 0xE62C2BE0F4B61CB8}, {0x873A0FF55973ACCA, 0xD8ACABD0A7CA487D},
+ {0xDD1F4F58C2CCA98B, 0x64515FE2DE49C2C6}, {0xA57133564ED15E7D, 0x8DA2ED50A2EB8FE8},
+ {0x6C23BB87AFE0B500, 0x086A26015A6DFE36}, {0xF722DE8B778254A6, 0xD38EF148107DCB02},
+ {0xE1FF55804B372402, 0xDDFF64E777D593A7}, {0xC85E13A682F26141, 0x36D91270BD575BD2},
+ {0x30735C11B0B3ED8B, 0xE74752D2B4D33AE8}, {0x46C7678C4BA67A4C, 0xBC9312145CBDDFEC},
+ {0xB7D9BEEB7425D4D9, 0x3F140F2F87CFA5E3}, {0x92B31105A99A1B45, 0x6FB3DBBE691B544C},
+ {0xC2FBEA58B8DE7759, 0x0A9C47877593B37D}, {0xFA1DE27CB8C850C4, 0xA817326142F832C7},
+ {0x7A006B52393EF4E6, 0xFA2B128A74465C51}, {0x5799F4B11414765B, 0x2DA9941A4CBEA665},
+ {0xAAC8A88307CDAD68, 0xE409FCAFC59EE59C}, {0x316FF0D676687B0A, 0xE10A3A9B4C7167EB},
+ {0x9E716E0CD7F1EC12, 0x2D86119084DD9A4A}, {0xCC34606BC8E86BFD, 0x8D98F46A31C3DC95},
+ {0x8EC37F93F82BB162, 0x7205F6930DB1F105}, {0xF11141A0EEFCF0B6, 0x436D3DE468502E4E},
+ {0x319D928374E8AE6D, 0x0DE906DE3C345971}, {0xEF98BB7179591493, 0xDC410120712B9EB8},
+ {0x8EA2080F1D4F1AA8, 0xD9A09568FC737F98}, {0x01A1498361F07C77, 0xED6A17162CE44410},
+ {0xE26BA17DFEEA29F4, 0xF103BD510B3A5B1A}, {0x391D2C11154722C0, 0x8287F92F6FC2F57C},
+ {0xFF1C60B0D530BD54, 0x24ABE8A7839C98F2}, {0xF0E1D7F423301043, 0x5511F9E35A8DB98E},
+ {0xADD67068786AA4F5, 0xFC2E146D60AA24E7}, {0x7DD831236FE5C4FC, 0x4EA347ED71DD0D1D},
+ {0x49DD807A87E27834, 0xD1BC60D323370ECB}, {0x622E80671CE539D9, 0x9E5AD2BB183ABAAB},
+ {0xF4410F494444E1B0, 0xDDF7A43CB93C3BBE}, {0x6ECFA4EE6E241954, 0x19658BFF210107C8},
+ {0x1A2664BE9E56E12B, 0x6FCCD6B8EB7F424E}, {0x65CCD45566F0CE7F, 0x84B65726D52C769F},
+ {0x32D3A18AE1E5E1E5, 0xC151C0B475611231}, {0x8860082D87832F08, 0x2CA3627C96F666AE},
+ {0x5732A0ED2C3787CF, 0x6CB987334CEF0F82}, {0x78DF0B5F4E5644FA, 0x2BE7BC136AEA5629},
+ {0xAEEEFC8CCAE740D1, 0xD6C3604768B9E6B0}, {0xC628748E2522A55E, 0x3821EF52C01CEA30},
+ {0x118ED412FE8C11E5, 0xB8D82362F56CF5FD}, {0xEB9D20FB5C7B9E17, 0x1C9C244AE18A9F3D},
+ {0x5237F00B89D55658, 0xF678E032A4612E86}, {0x59719F8320AB2090, 0x2E7302C2731AB294},
+ {0x6842586EB7962271, 0xC57905A708768C2A}, {0xA03D28752746E03F, 0x891213FB273A448A},
+ {0x0DA65EFE95603DA8, 0xD06DFB9DA2F4EDAA}, {0x658DD4F62C3C8228, 0x8DBBD1CD271A2C6B},
+ {0x3F8FBA75F07DA78D, 0x73983F759E3984AD}, {0x5F3E3C679A43DD2D, 0x17EE6A5AEDD80BF5},
+ {0x2DE2B51AB69BD9FB, 0x994CECE7B0EFCFD1}, {0x1CAD937F7635332B, 0x77C5905D4FA67319},
+ {0x12CC7B5628145925, 0x2798B9535E8FE484}, {0xB560E5D095F63092, 0x5EF5D4676BF31215},
+ {0xF086967B3CF9033E, 0x2680F974A0234808}, {0x026AFB4B86D7F069, 0xD260209A7BCAC9E5},
+ {0x7D3ED760111CF24E, 0xE4D81292B77F28A7}, {0x9A3DE1A3106653AB, 0x9EE5E79EC12DB04D},
+ {0x50EBDDACCE567313, 0x3777A96DAFAABEA5}, {0x12D9DE91BAB8AC20, 0x55D99C0DBE7EEC7D},
+ {0xC353A030E0926D74, 0x9DDB85493211DC2E}, {0x4DCB6255086BD67B, 0xD9EBE0A69AF5599E},
+ {0xA88BC196B3F16509, 0xF0793B5427E6C090}, {0xBB46A1A5E693C919, 0xFAAD1B6A0FEFE1C3},
+ {0x2C1978CC7411EB44, 0x68BE6CFEA742C82C}, {0x79BC37ADDA5CD788, 0x5BDA37A4AB5E2ACC},
+ {0x901C75C06913BACF, 0xED814872A39D0A06}, {0x08CBED86E13CEE9D, 0xAA6E6773D270A76C},
+ {0xB7E676F54A7B2345, 0x852FE30E97F85CFC}, {0xF3EA9831923C3F5C, 0x54B40B47B6CBF492},
+ {0xD931BAC7587F0AB4, 0xA308BC3435494E12}, {0xAEC7392E44ADE38B, 0xADD9A02AE5BCB488},
+ {0x702C76D6CDD5C57D, 0xBBCB8B15B28FF2E6}, {0xB00CE1B764B9D5A0, 0x3E8DBEC41D7CFDA4},
+ {0xB75C1712A5FC4C18, 0x6D9FBB2A411194EF}, {0xE2BF1D67DB2FAB86, 0x20CA236E1E6C0701},
+ {0xE96B8E309A54BFA4, 0xCD6F26341FE9209B}, {0xACA94E8725CFE0C4, 0x6B3625A049EC0E35},
+ {0xAE255E886E2CEE47, 0x954EA0647523C377}, {0x0E8A0F26FA9E8013, 0x09B07CD8311C0DD5},
+ {0x9BBD9FCCDEC9A2A0, 0xB402C1F6F136EF11}, {0x4861CB6C46161351, 0xDAC44CBFD1CE8D93},
+ {0xC33FEAC41F484E18, 0x6FD3A3C21B0FC0AB}, {0x10C7B5C73A6CF2BC, 0x3D921C43A43E920F},
+ {0x24673310047CD578, 0x48A08F91D224597B}, {0xF69D2AA505ACBCE1, 0x74CF4078DD0CB50B},
+ {0x7411F2F8DBD28042, 0x9DE33A5429E0B448}, {0xCD8C6D6C95E02B35, 0x9C554CB798DDD359},
+ {0xF47C99ED1638D5B5, 0xBA2EA1C84EA9A381}, {0x37820CBFFE779393, 0xF82487EEAA223996},
+ {0xE0CBAEB63A00F6A2, 0x1AB0551D6E60F356}, {0x4C264D2E2078402D, 0x39CCCEFD2CA4C657},
+ {0x79706CBC87E728E0, 0x9624CEAC15BA9BA4}, {0x71289D11F89A54C8, 0x5C67D17EF1A9D1A8},
+ {0x45315526894B2E9E, 0x9F85614F7E2877A6}, {0xC3146B5F841BEFB3, 0xF56A949D58F6211B},
+ {0xC98F48AACCF0B218, 0x489D840738DAB5BC}, {0x39313E79B2D77FFD, 0x28015EBB35EB61B2},
+ {0xB69B9CE62A926DC5, 0xE794FA889EC00470}, {0x1C7CC3C0CE81B29E, 0x788A14D357C80722},
+ {0x97E26AE33118B3A1, 0x46D690DAA1B73BFA}, {0x677040AC043E7002, 0x506BDCD6F15B5D4D},
+ {0x75FC9DDD12246701, 0xBFDDED22F9D5BDCC}, {0x4D408D78E29CA8C7, 0x617F1BE4B3F4EB9D},
+ {0x272C8E859906CAF7, 0x2DCCD959BEDDF608}, {0xE7A5B585AEFABCB1, 0x2959D844EFE65110},
+ {0x57284239D0FE65B7, 0x7C64733C7FC2DB47}, {0xC9A906AE5EF83B98, 0x9F4B487430D6CE85},
+ {0x9DCF5ED2E03E61C3, 0x6F1D1CEC97FD9E03}, {0x9F3BFCB3988EABFD, 0x426C6F78D34D3626},
+ {0x166CBFE7EB24AFDE, 0xD89C45C78D5FB07C}, {0x8B4EACC16D759B3C, 0xDBE7ED61F8DCFE25},
+ {0x08A2FC18E557329A, 0x186A653556CDAEAA}, {0x41CFDD56764A3CE0, 0x2D6536329CBFFFE3},
+ {0x49315526BF50E70B, 0x0188CCDA726FE605}, {0x905C79275C3D1205, 0xE3290D6543126B27},
+ {0xB5CD297F38619AAC, 0xA86BBBC57A8753BB}, {0xF9C11420D593F087, 0x07DB15190180A529},
+ {0x98D9CB41311062FA, 0x9B2EC7AE9D62A534}, {0xECBDA5F7A911D91C, 0xB5E52D62040AE06A},
+ {0x5EC21BB4E6B6E583, 0x082BDA6D527C3C74}, {0x0C1245572679CCD0, 0x1FFA615914977924},
+ {0x3C7075487C12A457, 0x6E3DBA15D67D9197}, {0x1DA772CF19D75DB0, 0xF232F6C6EA90C719},
+ {0x29F5767920CDA873, 0x59F7FF0695DEB046}, {0xFF15BCF24BFECE2E, 0x011B3A8361E1CEF5},
+ {0x9E62AE757469563F, 0xAF3D7699A7478C4A}, {0xF7444650FD817A39, 0xF8F17232E60F0530},
+ {0xCF89B5577D160D57, 0x6456CE211EE46270}, {0x0823459AB765F9F7, 0x6373EB9330B286B4},
+ {0x4C3CBC49EF60D5ED, 0x48FF97CBE0E303CD}, {0xD385F0B397CD0E27, 0xFD24C65ED2101D4A},
+ {0xA76D8FB654BD9700, 0xF70C338FBA541947}, {0x6E145B8CAD5BCF05, 0x4140916ABF804EB4},
+ {0xB5D53B06DCF6E307, 0x20E73CC4E067285F}, {0x5EDFB30319412989, 0xEF10CC925CAA69F4},
+ {0x8C56C07ABD463B14, 0x21E18AB8C3CB31B7}, {0x19017AC101989952, 0xE8034E631329FDC1},
+ {0xBC03C4FE71225CCD, 0x41A5829B0251D117}, {0x5AF8596A678AAE95, 0x85A529514A261144},
+ {0x984D026C2E68D375, 0xCD3FA1D2FF693810}, {0x3887A8E1C6D2AF19, 0x92AB5F945493A9F9},
+ {0x29A79FB6F95A5835, 0xF7594D6072C35DBA}, {0xA6D83C118944F625, 0x4FCAF020754C9065},
+ {0x7877B36E343CF65D, 0x22141E10DD9B2219}, {0xE898714BA55D0198, 0xFF0807DCDD689AA4},
+ {0xD596641AAE864D33, 0xC7A6638D4FE3E852}, {0xDC944B11CA0B5317, 0xA278A62BB20A88E6},
+ {0x5EC4683E57CEFBD3, 0x1DF51C005EDE0A45}, {0xC6D926A32104914D, 0xC27ECEA96BA072BB},
+ {0xAFC76E4182B04C5B, 0x55499AE5D164A0A0}, {0x3071A91622A48D90, 0x3E79AF23D4BD1A75},
+ {0xA230FAD87D19415D, 0x0E7E2B72D213BCF2}, {0xEE75299B7354B348, 0x8B23E8186F24752F},
+ {0x02C8A341C0F40038, 0x8C766C2CF1579565}, {0xF867EBC678E38CE5, 0xA6E5B87BFAD2E1C8},
+ {0xFA71EC6C7D87E5B4, 0x65EBB975BA3FA09B}, {0x9FA8AD9554A7219A, 0x612829E508759E10},
+ {0x5A53E326AACA3AD9, 0x780047BC5BEDB91B}, {0xB6FB9BEEA31BB93D, 0x67BA4BB8BBB7ED62},
+ {0x41F19D84344C67C7, 0x1CA127284BB1FC27}, {0x49404374258D46A2, 0xF424D19C4A048B00},
+ {0x68ACBFDC703ED6CA, 0xF55C8380DFBACE6B}, {0xDEC8B4C5D26CEE3F, 0x00957D2E1589FA35},
+ {0x78F01C209215A98B, 0x5ED26EB160D28ECC}, {0x19CDC7B5EA8C8095, 0xA683C0A964354784},
+ {0xB6B60D4F4F8AD8B3, 0xFB9D4190BCA0A504}, {0x11B68FCE27197B12, 0x10F85036F8EB0D7D},
+ {0x643BD6315A902C5E, 0x7C7D37F9099D956C}, {0xCC3C202B38D1659E, 0xA5894BA7338A7C6F},
+ {0x96AEC46EE8720C82, 0x0B6E083FA027B8FC}, {0xE020A668DC4688A6, 0x858EF96135D8A844},
+ {0xAB4C78D9DF6DF23A, 0xF7FEDED45F0EC56B}, {0x0C6FE1B23DCDF06A, 0x97F0800DEC4B8B20},
+ {0x6F500FF9ED04EE9A, 0x9FF98FB645AB1CA7}, {0x4AAE42C8D8E1F887, 0xD59B562841839432},
+ {0xAE9CB7012C8CDA1A, 0xF0C1FD68B7DABACD}, {0xE4BCEFF7A7CAE335, 0x5BCA68861F432D6E},
+ {0xEBE7591D0E5A73BD, 0x0DA0380FB4AE2FDA}, {0xC6A5948EB9D51E97, 0x01DC96048F56CC26},
+ {0x814462AB328834C2, 0x9D21E3FFB6011E79}, {0x2FD4D660D9E461B6, 0x48268B69F14D7A91},
+ {0xCBF1800988537182, 0x7DDB53E4D651113C}, {0x7E29B14C09C572EF, 0x82CA04A8C1363383},
+ {0x4B755E1B50FE0C50, 0x00E8AAFF73199204}, {0xDDD81079A87EAF7C, 0x072A4F410DB832B8},
+ {0x2796615C31341819, 0xA0358FE7784F3360}, {0x54E8B648831913EF, 0xFD5FEE0BF1BA9B43},
+ {0xA4E358468B8BFD74, 0x532819E5266AD57F}, {0x08C06381EEA652DE, 0x180085BDC1FFC0EE},
+ {0x31FE6CBA188A9AA3, 0x7D8D18421A496A71}, {0xEC5797B0D620C5A0, 0x604EA307EAC76310},
+ {0x086B2B9C5B99EBAC, 0x80204224F0E60AE7}, {0xB811604BFD868807, 0x67937F107CD1BC13},
+ {0x15B60AE425C41B16, 0xA2D85796D1AFEC06}, {0x5D4D9C6D51DD3051, 0xBAF4DE7040C2B785},
+ {0xA73AA35A6ECB16FF, 0x5E01BE26407F4C8B}, {0xDACD23118821C1E6, 0x3EDC56C84B9CCD93},
+ {0x3E559A4BB2AD26C9, 0x43A4BAB698C4F673}, {0x95BD756E458022A1, 0x366539438519DFA4},
+ {0x25AAB04E3A6F18EE, 0x2EC52B81F48B24D7}, {0x395426D7270B2A66, 0x499F4C029A001B4A},
+ {0x748B010069563202, 0x6C640793BF6D6976}, {0x76813B9796436181, 0x00BCC2E10709AED5},
+ {0x567054DBB0BC54C8, 0xD8916D9E041990F5}, {0xC92AA3B0DB92B8BE, 0xE07B004C41C98C02},
+ {0xBD80FFE0008C12DB, 0x80FBF37662552ABB}, {0xC572A8FCFC130095, 0x3E2168C289A81966},
+ {0x2AC9793C18E3F2A0, 0xF10E33B740626530}, {0x698F36F372C21CA4, 0x39AA6E6332A3C943},
+ {0x8BBAACC430328A49, 0xC4CFB69B5B7D4E48}, {0x9439E23E99397036, 0xA8D3C0924E822EB2},
+ {0xF6C709140F432455, 0x20C7EFE8D3450835}, {0xE7939E581286DE38, 0x33B31F43DBFF80B7},
+ {0xD48C823E99E71452, 0x0B14FDEB25779190}, {0x6EE0055B997FCC2F, 0xAF75337752E9B1CC},
+ {0xA338671A6AA5E2B1, 0xC20726EC146A600D}, {0x3FD566934DFA073E, 0xC3484AC40819CFC7},
+ {0x32D37A3B2B20B6D9, 0x24B169C7622B3056}, {0xD69211D21F3DFF58, 0xFB460B0B90A11CD5},
+ {0x7D14F3E4C3BD91CA, 0xF1E2F02D19D231B1}, {0x4C9E108318C7D130, 0xED0BB817527990BC},
+ {0x3C0C3C2E216ABE31, 0xF99DEB786B363BD9}, {0x8C2413C18E471F92, 0xC636CF09A62CF055},
+ {0x6B50134771412C44, 0x4B2AB0FCB7F43A03}, {0x7E3F077A929E3FA8, 0x99C3F8DC9F9DED93},
+ {0x34586A8C547FAE61, 0x898BFED212BBC60E}, {0xF57FAEDD50FE2AEF, 0x0821FF6F4E0C9394},
+ {0xD382FFC51CFC46A1, 0xC094152E08F3CB8F}, {0xD945AB104866BD62, 0xFFA6D70C9465571B},
+ {0x83B6F0AEDCE1A5C0, 0x2AEF05E661C804AD}, {0xA8A57B795C0EA0D9, 0xD8FE506DADF9C506},
+ {0x7799278400FE4DD9, 0xBDA6B25FF906894A}, {0xDF7BC04308AD8101, 0x1BBC88335906A6A6},
+ {0xF75DD56216BEFC79, 0x6C594FED4B5FAEAA}, {0xB6E7163D11AF4694, 0x2A35A16C9AF18FE5},
+ {0x480613AF7FB26A61, 0x815BA97AAF45AD06}, {0x143AA727F1F23CF4, 0x8CC703296B75BCDE},
+ {0x389C2EFA0FE18B90, 0x49449A7C61E4014D}, {0x9F45BC7412876D3F, 0x72E1F976AF5CA594},
+ {0x5423CBEFCA0ADCD7, 0xC8F9809327CEE944}, {0x1BF0195A2F5F9117, 0x92ACF9B0405BA354},
+ {0xF8F1AED1FC3245FE, 0x0C6DD13915A87251}, {0x18E95D5FEEF8D2E8, 0xF9CFBC9D8704AA8B},
+ {0x6294630B26642C9E, 0x467989F0FB16A9B7}, {0xB7DA1AC1360A318E, 0x147B461CCA2D4523},
+ {0x5A8C27E5D3804DE1, 0xFE01EA731C3E7BE8}, {0x8CE060D48B458044, 0x45F073AA75F9268E},
+ {0x39809D86D4E90641, 0xA0F5AC6A867FC3D7}, {0x978A636B3A133081, 0x7EBFF0ADF1092012},
+ {0x35A263CEE84328B3, 0x3DFD58B94520D4A1}, {0xE6FFA738C4F7E423, 0x335CE0F056D94872},
+ {0x65003C72A1C29988, 0xE08C9CF89EAA4A22}, {0xE1A9B870B52933FE, 0x3D9C8D1D31D4A162},
+ {0x0F7574C41E2BFDC8, 0x1F5B5385C6BDDE8A}, {0x77FFEFECB0AB5561, 0x632A753402149F17},
+ {0x35899AC26A2FAAF0, 0xE001A38715E66379}, {0x9EE552CEE9360153, 0xE0AA3B16CF3D0BD6},
+ {0xBCBD3DE94C88EC4B, 0xB4816E0EF9A8E048}, {0x36C4AE11A2138E52, 0xDF562A15C389CAB1},
+ {0xA81F4BD5B76EF923, 0x4C82AD9BC0108B5D}, {0xD36E4C9F272E8D95, 0x150C90BC99E4877B},
+ {0x91B884475CBCF176, 0xC12FD9327D73AF8E}, {0x181C3EFB00D2550E, 0xA999EE6C9F8CB995},
+ {0x2BC5B796D71ACBC9, 0x4A535B25C7574DC9}, {0xAA9582914CDD8A54, 0x8BBC78587829AA24},
+ {0x9A1D6916BDF36E6E, 0xC48E916F43E30C59}, {0x0B6FEB44CBF8374F, 0xE317234AC0CF276A},
+ {0xE7D21FBFC4151024, 0x0FAEFC158CD28495}, {0x734A32EE35F6E449, 0x2E8625DE9369B9FF},
+ {0x8516F4F992E5AECB, 0x0086D67D4B1FD6CB}, {0xC0DC1DBAFC28B81C, 0xEB5164263AD5AAD8},
+ {0x8E72976059D8E7C9, 0x14C6DB6A109312D6}, {0x479511D725ABB98F, 0x4906A47A49A30B2F},
+ {0x789557D48A379C35, 0xEE68C86404262F45}, {0x69341CFCA05539B0, 0xD81D9F4A2F047B30},
+ {0x8D7A685BC5CBA4C1, 0x4126312498260A5A}, {0x90C1D3A457C2D5EF, 0xB6A286ABB936EF4B},
+ {0xA995C2D1FEA2C01F, 0x41AFBB93F25CE164}, {0x699592A309614E55, 0x100888E5E86F6E79},
+ {0x93E6C019D0CF0CF6, 0xBFC7797CD3166CDC}, {0x491F4C121F7B1349, 0x2DD0F8FF43CBCC17},
+ {0x44C04A8527684D33, 0x3C15E85A7D192A36}, {0xF6CCC661B5FD44B0, 0x1D428853240EE099},
+ {0x4A10ADF4A59DF881, 0x687E5E6536233EDA}, {0xDE52336C17F94558, 0x1FED715FE7758EB8},
+ {0xAB01C463C7425987, 0x76C31B245831AEB2}, {0x34C7007DD6BB33E9, 0xC778E79F17406DCD},
+ {0x8D267CBDD412D095, 0x4B1AF34E96174368}, {0x7476123DDB52F572, 0x99C627B07B7C2AE4},
+ {0x971F10AB25C2D341, 0x05FAAE9F68A65531}, {0x7323D6331AF7376B, 0xC0DFF1D1AF906B9D},
+ {0x93402730C72D5AA8, 0xAB3057A7013A6B31}, {0x9B0BA51063D20C5C, 0x6E703CF8630D5E93},
+ {0xC46E07BEE0DB4199, 0xF7459C828527C09E}, {0x2F342765F52B765D, 0x1001CEAB8695E9FE},
+ {0x0E7B5B34574275DA, 0x3BBA3ED4BE533397}, {0xEB395C1D4F264437, 0x8BA15B4753C8CAB9},
+ {0xDCC39144432D5BF6, 0xBD24FBBA57B036A1}, {0xDC345D8E83C9FC8E, 0xCEDC23B32FDAFDBC},
+ {0x4A84A67A2585376A, 0x4558689A9C97FB33}, {0xDF53A5E9F24C81B7, 0x1D82E2E2E44FE0B4},
+ {0x08C671271A7FCF38, 0x53A6DFCE5B534178}, {0xB991354BA64DECC6, 0x1FE2024642A8474D},
+ {0x2F1938A518707C4F, 0x3EECFC84662C7730}, {0x4B870646AFF2499B, 0x30A4CD3218712DA7},
+ {0x25B8420C46E028CE, 0x7D0093991936D7E7}, {0xFC733E987FDDA57E, 0x04A3ECE5CD7D689E},
+ {0xFBA9FE9080F32680, 0x2A2A0B17EABFC10E}, {0xD5126342DD41A3D6, 0x7755BAF2DD3A73F4},
+ {0x72147AE904D6ECA0, 0xCCE79EE4ED3F37EE}, {0x14A15D800B66A972, 0x4732BC6F39805E59},
+ {0x2721AB2DA45940CA, 0x7661EDB4D1504DF2}, {0x6F3CDD641011F09F, 0x1AD532443AC219B7},
+ {0x3BD0981BFC3FAE2D, 0x33EAFD2D4BCA92C6}, {0x2A767042CEDBFBFA, 0xDCE1F88CD6B640C1},
+ {0x21415A555B8F2676, 0x941B8B40B9F434A4}, {0x7A360EC71ABA312B, 0xE9E6A7760F160110},
+ {0xE562727D57FFC074, 0x7FF2232D108F553A}, {0xB8E8E54AB51ECF25, 0x387DD339F520BE2A},
+ {0x7995A507FA329A9E, 0x99E1F60E62501738}, {0xD1452C79366753D9, 0x2798A3E233C518DF},
+ {0xA355E3E7165177B6, 0x35E22F7D604D4CAA}, {0x106C1B6AC721DD27, 0x85F4991090270420},
+ {0xA4F66A2244C58C33, 0x869BC842178F5654}, {0x76645024D4111A3F, 0x6AC7F78F0D35C743},
+ {0xDAC39510793A86A9, 0x4E079261981AC080}, {0xF83FD4443A264A56, 0xEE79C60D0BE4CC03},
+ {0x48024B83EB55C6D8, 0x3F5FC1D93A0ED02D}, {0x3E988CC1DDD2D2A8, 0x6E5285EABCF6E3F0},
+ {0x544008114471978D, 0x589989071583DB25}, {0xDB24E403DF21260B, 0xFF71A25F31EF8F83},
+ {0xC6D63AC6562B43DF, 0x15D2FDA5B78094D0}, {0xC95FBEEABB833556, 0x11B746D71ED73A01},
+ {0x37B8EE1412C56139, 0x30E9181797D6B2A8}, {0xE4C41EFBA29AA1EA, 0x6AA5658DF7470726},
+ {0xC3F525ACC65084A2, 0x9EE5D1185788DB61}, {0xEBA5544B43E2A73F, 0xD20202B31F861592},
+ {0xE5DECF8A46CB807C, 0xCBBC5FCB82AF2DC8}, {0x2A3A4C2ADBAD0BC5, 0x9D494E04218E0853},
+ {0x13A71C7C9ADB172F, 0x12D7A4DE2FE58561}, {0x704E7A9BF6035FCD, 0x718ED10AD33744AD},
+ {0x742A78656530D14B, 0x82B4BE4CA63F63D1}, {0xB5F9C364999A2E9D, 0x9E01BB8E2FD16ED7},
+ {0x74C48954F546628A, 0xFB6643DEF6BCC6E3}, {0xA5816A0E997BD6A8, 0x4614318F165F82FD},
+ {0xC7B1F8C66D0F8C96, 0x1ADAD878FFBEEB2E}, {0xC8276A292D2787D2, 0x29D5B138C5961043},
+ {0xC91E4B662A8A7A4D, 0xC2A8836FBA55142E}, {0x3677909BF105A710, 0x43445D780BE6F72F},
+ {0x73BF1775F712BF6B, 0xD97B4C0AC8E5A62A}, {0x139931C28CCF23D1, 0xCD4CB918E50496A9},
+ {0xF7E6D2BB090D8D80, 0xD363E2EC54A837BF}, {0x681EE4E4F1388AE2, 0x5335C05BB67F1DA6},
+ {0xECDF440FE87D77C9, 0xF0D75F3E2632155D}, {0x6BB0FDD6FE44EF31, 0xF8A04DBB68E14BB2},
+ {0xB89DB77F0512B260, 0x3E4CB00AC49AB4B4}, {0x3BDC78B9EAA62B83, 0x2C4B8DF39F7C2A99},
+ {0x0D121E501997C13C, 0x98645839DBDD09E0}, {0x9DD3A54A6C764855, 0x96C0E7CABD069D98},
+ {0xBC1CE2AA238EB9B0, 0x612775F3F410005B}, {0xBDCD33EEB658959C, 0xD3127AB5ACC310BB},
+ {0xCB65E4532B4259B0, 0x4F87F67AEE331B80}, {0x550CD0BF506E8852, 0xE649DD0ACFED98C0},
+ {0xBF2393A470DC284F, 0xDC7F158E0AE33288}, {0xA93F115A1245DACB, 0xCB580310F04C5498},
+ {0x1022C1069CA4DB80, 0x6E21E770DC832FFB}, {0x73E792DF0196A65F, 0x49253A420F319931},
+ {0xCC3F3B8F4758546A, 0x534238793632C087}, {0x96C5226A7A353613, 0x0F7A665F76721EB3},
+ {0xC240D700349FC67C, 0x8EDA2F06A1B4C0BA}, {0xE43A8828A9688767, 0xA6493555C1C59001},
+ {0x403ACD3A6755D365, 0x5A8CE1D86C267B94}, {0xB66DDD6D9ABB6F11, 0x96AE2EEDB80A360E},
+ {0xE8ABC48220CD89C6, 0x3D4F7B69F682B801}, {0x63179DA04C546C61, 0x4ECC4FB50402C38F},
+ {0x78A54BF633710CC7, 0x23EA187BFF60FDC6}, {0x4C0D0E8971BD4D86, 0xB3B3EAFBABEBAAEC},
+ {0x2C0256F5A698C064, 0x0C1C5D42F1EBEB78}, {0x5BAED99C9BF88C5B, 0xAB8BB14860451E6D},
+ {0x3DF4546DF4E24451, 0x92B349CC1B5AF27B}, {0xC9DC26D6E892D2AB, 0x6EAEB7C76817C5D0},
+ {0xD0A875641E9D1AAC, 0x06E0A54E4132377D}, {0x23E2C772A81C78BF, 0x5D509281FF683F59},
+ {0x960B451AC471C31F, 0x8907233D0EE855F1}, {0x31D10D2575D6C1DF, 0x69C0562ABEB716B8},
+ {0x894EAD1337E73787, 0x3AAB257AA0015CB2}, {0xC12131BE5A7329EB, 0x644F376D2EB2EE81},
+ {0x263BBDF1AB54FAA8, 0xB2A2AAE4F4783138}, {0x75F378B777F68696, 0x2B101678B7F96FDB},
+ {0x7725343CED2866CE, 0x0D70895851FF6BD7}, {0xC50B587C1FB87D0D, 0xD513EBC175B18D01},
+ {0xA90A1532B94EE04A, 0x4C73B37D864C4440}, {0xC2D7F9A7FE7CABC1, 0xC6A27897B8F71E39},
+ {0x0AC2D99100829727, 0x032224BC2E8F3FC0}, {0x28209D4A7B430BE3, 0xEA27E537B50CF482},
+ {0x079A5EE03C1F0AF6, 0xB8C8EBF7F3B2821D}, {0x4C4EAD07B9B0640D, 0x31C0387A6EFA566C},
+ {0xE2282D1CA05B8428, 0x54FD1C7F6A43AE3F}, {0xC8E256E351E2158B, 0xF9D99CDB73118C65},
+ {0xDB35BC66859FD8CE, 0xD50756F4EB5AB47F}, {0x77F1099A3E4C65FB, 0x1DAB98626082BF6A},
+ {0xF82E1CF8D99181CD, 0xD626DE5E1190F204}, {0xA3524D969FCAB110, 0x09FB4E93310AD2E3},
+ {0xFD088EEDCB1EE7CD, 0x4B24119605D3EE66}, {0xB5A2AEB14CD4AE70, 0xF45CA724A7710AC4},
+ {0x9CA8029E88974FDF, 0x172EC1AB80B312B2}, {0x7C77ADADDDCFD065, 0xE0DED57423DF36D0},
+ {0xEBF01FAFC790D0D5, 0x6F0AA69CD4170ED9}, {0x3D8BED182AE1BDC6, 0x648758C3AF20C1D3},
+ {0x894FC894BE0FBE99, 0x2DA7F00A29180BFC}, {0x04C071C141C89559, 0xB0A81A55CA61DCAD},
+ {0xF8C12832452B8607, 0x9854342662FEB6D3}, {0x2885D046097C06F6, 0x5BA763BDEAD01DC4},
+ {0xC0C069AEA77D7A16, 0x4779CA9CBA80569F}, {0x33DF290AE208C1D0, 0x29F316A2B8BDEDD4},
+ {0xE7B91CF7155F2BC0, 0x0BD844AD6FFE2B8B}, {0xDA3DD4C7EA96C762, 0x9AF280E2581B3EA3},
+ {0x7773AF18C8BA0AB0, 0x5546AD152D63CA01}, {0xB8E49DB567B32C0E, 0x5DAD57D76BCB4DCE},
+ {0xBE9DBA2A9CDB5210, 0x77611AC4C5908508}, {0x019F8079F510BA05, 0x8679836465456A66},
+ {0x5877EA14C31C80D0, 0x67ADC20D606E8FBD}, {0xABD58F98E4F5EC42, 0x8661C96EC72AD1B8},
+ {0xD3EBDB4BF3DE3F4C, 0x2B85D120C25DC083}, {0x194B678DC25FE769, 0x7083AE4EA216D744},
+ {0x08F8C55AC0F0B6D3, 0x611400CD16A3ECB7}, {0x7830D43E1A98BAF6, 0x6EA6D7C5DCBCCA5A},
+ {0x24A0C02ED7AFD036, 0x9332DBC4B23E6F39}, {0x19D3C00CACB97937, 0xDAB5FB5091157312},
+ {0xDAF56DE8442322E9, 0x4418D4701078AC4F}, {0x11EAF802518D4BE1, 0x010A6EC029387C29},
+ {0xA3F3383CC16AA5B3, 0x031F50BEDB3CE2E2}, {0xA1F90FB016603B69, 0xF49A3F0F714E91FE},
+ {0x0CEB32558C2C2649, 0x5B25972007F62B2D}, {0xEECBB9B305C1659E, 0xFF3FF814938361A3},
+ {0x5CD813132FEC7F07, 0xD5D753B4FEFEE206}, {0xEA86433D41A6F228, 0x3638902DDE75DD82},
+ {0x40537232A96AF00E, 0x084A164715BB02F4}, {0x06975F0D99824B5F, 0x305D53C371C2AC23},
+ {0x8B91DBE1A1BC4BE5, 0x0E2D20537FB1CEEE}, {0xBA1A62A34369811C, 0x23F102004E44F544},
+ {0xA4C453E054067FA7, 0xF6FA37220C534440}, {0x1B7EEE9B2DFF0AE2, 0x8E8151A1E151FA7D},
+ {0x04DF11334727381B, 0x5D7FB11387E9EF67}, {0x853D76422C61B51D, 0x96F8C08A747EC795},
+ {0xDE44AAC1B2B822BE, 0xCBBFA2F1ECA26C59}, {0x1B23ADD82903CBEC, 0x2E3F15FFD1AE1B76},
+ {0xE04D26B7B86C0AC4, 0x060B27C9F3E2378C}, {0xA5592511FDC8C95C, 0xFE7BA1E69C83F372},
+ {0xFF3198D9B2C7AED1, 0x14D99D55DF640E17}, {0x5A42CDCB03FD05DA, 0x2DDE685099DF4CF9},
+ {0x5E1AE4ACA5566CB5, 0x9F08E88CB4B17CE7}, {0x96877E7F8FA8D013, 0xFBA7551A42D15F12},
+ {0x621A2D691AAD2AD0, 0x936D6666D6C645BC}, {0x18FA774C99863227, 0xF98233AAE3ED18CA},
+ {0x0B1A7D5E5F56E15D, 0x4398E978E723F69B}, {0x4D40711CE0B3FEBA, 0x741D1FF68D6BDAFE},
+ {0xCF6C76A8D2C0C2D4, 0x07A043A99353B048}, {0x2F0AF395295F3F41, 0x52C1E8174AF60014},
+ {0x55A93711F9D4455A, 0xC51C0877E3B007D7}, {0x15A7EF5401B5CFF6, 0x042D460BAB946044},
+ {0x5B2968AF3282CFF3, 0xD3E99B80644AA139}, {0xB89797BD428DC156, 0xE64FFA9BD30571A0},
+ {0x57C9F3655D54E004, 0x07F8D1AC7648646B}, {0xCFD6847F3A1824C8, 0xCA639C819BD36AB9},
+ {0xBD87262E167D73C6, 0xC5B301325894AF47}, {0x205826AE03ABE9E5, 0xEA79E35AACFD56CC},
+ {0x68C7C861877227CA, 0x13075A5084313037}, {0x41E0979CC4704949, 0x8730848945BAB908},
+ {0xB44835F75E4B856C, 0x83B4D4E2AAF08D80}, {0xDA0AB8E121214209, 0x0FFF545645B58E89},
+ {0x7BC93E13159E999A, 0xF312FDD81AC49AEA}, {0xB7350CFAAC4C81A4, 0x5BBB4D0056A1A0F2},
+ {0x4B23E6420EEBD780, 0x07F56BA52B3CF210}, {0x205C66E49BA5B010, 0x1C4E6318932F6EB6},
+ {0x2CD08C470F383D66, 0x796210E37F33A904}, {0xDB80095D9B7F0F0B, 0x40280E9E100E09C0},
+ {0xD528500B2370F1BB, 0x25CAD023B2F1B483}, {0x2A566DB48B3CC6F5, 0xAB601DC4C2B70E60},
+ {0x7063199227A33C1A, 0xF6DA66F9972FD032}, {0x77C0814E8F81906E, 0x3DD7005B936F6367},
+ {0x668ACCDB4040E450, 0xCF874B9F0D52AC4D}, {0xD9B420B204B2C605, 0xBCB3828B99F58202},
+ {0x131E374A2217D42D, 0x92F8199775F855FC}, {0x9E255023765B9706, 0xA32AE09E54D1D62B},
+ {0x1390B38263EEBA18, 0x578672AFB9FB1589}, {0x0C4FECE6327E8BC7, 0xFC7C4F9E9BA35B37},
+ {0xB576859D816CB2D0, 0x61ABB446D658C706}, {0x8CF10C1815C4FDBA, 0x03746A073A8E0448},
+ {0x294AA73B5CE96C7A, 0xDD33EA1902D92974}, {0x5B246C3BC1A0B873, 0xB25CE320B07319D6},
+ {0x5AB814D3E65D0EF2, 0xD653FB0747FC9089}, {0xBB9EF569BF4A92AC, 0xD19CEA60970ED291},
+ {0xF064348AD4B9FAA8, 0x757B8C02255BA079}, {0x3E6B397F7FFC01E7, 0x2CC661DFB16BD275},
+ {0xDBEBB5F85773CBF5, 0x51BC993D3888AF74}, {0x02EB7FCB6697D2BE, 0x232B87661A298D3E},
+ {0xCAF8993EE03E90B8, 0x54F555B8830EBC9B}, {0xD91AF65E1B53E0DB, 0x76B5BF6442D5F763},
+ {0x9401C0F676B27142, 0x28B7287C1E64C3F2}, {0x0091AC27782ADD5F, 0x0A2C35FF2FD47AF1},
+ {0x610BA68707F4F8BA, 0x94E3852F06FBF076}, {0x22B63DB78D98163C, 0xD91A86270396A515},
+ {0x6A1A3D6D569B4B07, 0xC85ED066A3CFC8A3}, {0xFDEFE0F0A2EB4CF7, 0xDC0FC735B2D9D761},
+ {0xC106F5589B6D30A8, 0x719FE0E5091A4D40}, {0xD9B774F03B6365F9, 0x4CBF45E044025AD6},
+ {0xD8E1BE02EFC69AD9, 0x3EEAEF1406A4A5AB}, {0xA6315E00B181AC50, 0xE526031FA093A23D},
+ {0x2AA4B3944112D94D, 0x0014E0C33CC172B8}, {0x45709133781DEFDA, 0x8D9FD7C7D7C376D8},
+ {0x7CCA15EA15FCC57E, 0xE8592AE3D8C963E8}, {0x3E8928D814EFC74A, 0x6F0DCAB5BF7A9F91},
+ {0x78E59CE6A709C7A9, 0x8F3E2D40A9B61999}, {0x1D2AA55900CF4E8D, 0x1E7233118F4FDFEA},
+ {0x1FC5DF9927804BD8, 0x4815256DB23E5C86}, {0x771979467F6E8943, 0x4E208E902B530D00},
+ {0xA95189B3255DDD8D, 0x079A078EB3517BB3}, {0xBF158D25948C2CB2, 0x85B368B67CC28423},
+ {0x28D6D600ACC6CFB5, 0xF04B2D91AFF5A4C9}, {0xB1AA4CBBBD60DB82, 0x5A2B52B58BC91F2A},
+ {0xD6B29117A4AB1E62, 0xBC8D9726983796A0}, {0x0CC85B393E057D76, 0xCBC9C43021243200},
+ {0x37F23D2ED8B88C7D, 0xE0691EE8BB3F8522}, {0xF713B639DA10875C, 0x752ECA363D09A028},
+ {0x69C66E9317AA100B, 0xA0851FFACAF3999E}, {0xF6561575123CB38E, 0x163C4C5169418449},
+ {0x2B9366863D751E37, 0xA8455B0F64002B86}, {0xA30045A8044E0877, 0x67A35D1953D13502},
+ {0x90BC3ADA132FB0DF, 0x88B6226E3D7EACD3}, {0xC7B62FADBE9EE079, 0x89B9438B35ED1254},
+ {0x2049982E2DB79617, 0x555790CBFB0433A3}, {0xB9FA7191643E62A7, 0xA05C0FE7ACA6A981},
+ {0x7859D1797AAB0CFA, 0xFD774D91FA0FD372}, {0xA45C00C08AC16040, 0x345847A361531D11},
+ {0xC985E52B56E137DD, 0xE89AF1B7DFA48208}, {0xC124BDC3A5DD0874, 0xD5AABA065EFAD85D},
+ {0x3C0B493164E510E3, 0x4FCA6EF703A0B8E3}, {0x6ECD08407C6B8D19, 0xAC019250F917C8E0},
+ {0xF86F6A1BE3BA5185, 0x9DD75C3E6F39B397}, {0xE57155C763CACCB4, 0x867085BB088B5A85},
+ {0x857D50C3B111B79B, 0xD03549179EEABD8A}, {0x3E4B50496C7356E7, 0xF8B916C9BEF578CB},
+ {0x0603A3D8C8C845E3, 0xFEF9FDF92E722BA1}, {0xEBD9B130BB98835E, 0x9D1A6A162B1346D5},
+ {0x30EF5DDF0B940E2C, 0x989FB780456B28F8}, {0x3945B0E5E24C6B4C, 0xCE3106F06F59A21B},
+ {0x284717DED7F06413, 0x1ECC4F5E774FCE0A}, {0x3A9944694F756B9E, 0x8C34C5DEF7F77614},
+ {0xA45600056C8EFCCE, 0x9DD820D65A5EA664}, {0x0B671F6361D87E7E, 0x30778C9BE0FDD510},
+ {0x59B71D5CB041FFD7, 0x595CA1532DBAF977}, {0x156EA127AAC3414A, 0x0DB9A22831E53DA4},
+ {0x0D8568E3A40226CF, 0xE28AE8B291F14735}, {0xF790B9D385E8F599, 0xF55E282DDFAE89DF},
+ {0x3EF5EFEF51D83C6D, 0x0560BB66884A3D6D}, {0x0F063DD710FECE08, 0x5E0F76CC2E4F4EDD},
+ {0xB8CA5588B7A9C9DC, 0xDF5D3A9F0A4A0504}, {0x69D19B1620046AD8, 0x6AB5F7C3F35ACCF5},
+ {0xE7CFEBD05097AC7D, 0x8E5DBAA66B32A7E0}, {0xDC92AC6086132BA7, 0x8EA13A7034ECC08C},
+ {0x55203B40187D4ABD, 0xDED7FBC3D45EDF69}, {0xE7B9917FF615EEEE, 0xA54122CF4DB4AB09},
+ {0xC09D66D1F18F9F2B, 0xF250BDBBAC859748}, {0xF0FB942EA03BEDCB, 0x568FB2A49012D71C},
+ {0xC7B65F77BF08069C, 0xE5BB8CB2E2374488}, {0xD9C527B19A500E42, 0x023B8C5407E00333},
+ {0xD7894B41596D3CD7, 0x1D085B04582BC557}, {0x9AAF3A7B34E4AF41, 0xCAD1C03247AFF514},
+ {0xDD2B8812199B927C, 0xA10FEDC7C926E406}, {0x341759433B76B6A2, 0x5CB5A7810CFC4365},
+ {0x969CE38C3B89BEFD, 0xC8396D3508B28178}, {0x13DDFF9B24677187, 0x73E5E256E8A7120E},
+ {0x3C64EB6742971B04, 0x41F4A59258A682E8}, {0xD6A2D5FC321FBC47, 0x71330B989578AF2E},
+ {0x7D5618373E3E7CC4, 0x6A7088C23109FF91}, {0x86B21CD6562F9C55, 0x02872A5D3685CD3F},
+ {0x172F5461DCFF07A3, 0x731E56EB6BADD7A7}, {0x7ADE60AE63162B40, 0xB48176DD42BA3847},
+ {0x3803F7C821C65B66, 0xB934FD82722A258A}, {0xCCDDE496C78C5EFA, 0xCD2AB326C36814A7},
+ {0x15B259E62317D01C, 0x90EFFA9B5E1819B1}, {0x229DB94BE935722B, 0xEDACA9543242E6D5},
+ {0x9CAF6CB92BE2EE5B, 0x48266C2497B055DD}, {0x92CE7D7A713731E2, 0x7D8BDF4EA5F3DF07},
+ {0xE2CEBD88B64CB969, 0x2DE06B554C752D3B}, {0x277EA401ECBAF2EC, 0x9F15CD567B44D10B},
+ {0x0C0766DD081AA855, 0xEF818DAF6C6C5844}, {0x8BF02E628F86CED3, 0xE7BB07D8AA4C9E85},
+ {0x59F5ACAFDD6B481C, 0xE108035FF7B7B419}, {0x79160B41850A0E62, 0xE9CBF4415613174E},
+ {0xA911AD4B0E8763EC, 0xF278F4CD11E4B99D}, {0x73D76BEA8692B041, 0x98AF5D545D8C044B},
+ {0x1604E6EE30695497, 0x960532B4D4ED1E71}, {0xD0FC9ED1641F0E81, 0x0E382F7C444571F8},
+ {0xFEFAE414B95B97F5, 0x9A839583FA0B6E49}, {0xBA4749640B232F5D, 0x85354FF689A6D26C},
+ {0x7E82609F8B7778D1, 0x14860635194AEA92}, {0x4923AB776E7232FA, 0x1C43A09A7F205CA9},
+ {0x5C7B2E0FB7D5E205, 0x1F71109884C1E212}, {0x0105CD7EAD7A5415, 0xFD1BF85463247A72},
+ {0x163336058F3D391A, 0x8922FC5412FBD669}, {0x86896BA4FC09D145, 0x63FB0D92ED915DB1},
+ {0xBE328F809010CB55, 0x596461120B85CCE0}, {0x685532CBA0D521A4, 0x7DE4019102D4830A},
+ {0xE0FF083DBDAED300, 0xCF1B1A470300B030}, {0x09FFB3DF08758B0A, 0xB3FFF476A835E181},
+ {0x0E970B7D492FB1F6, 0x89BF8F65FACFECCA}, {0x8216FF447475E6C0, 0x9518D94A71C458CC},
+ {0x1FE2D9565D4A2401, 0x4D9A458BFCA6F407}, {0x9E2D3E1E6A7D209D, 0x37F8DB08884D5CA4},
+ {0xFBC6E734A9F4CB7C, 0x209890A4D8DF9C58}, {0xF0080F4C8ED7159A, 0x4C1B556B3BD0935C},
+ {0x2FEAB0246E97299A, 0xE47FEADA7BEC0356}, {0x550EB63E30058205, 0xC464AF8315FDF06B},
+ {0xCC2D12DFA19EEFDA, 0x2BD377CA7638A1A2}, {0x90063023803974F0, 0x18E4C122EE7A5722},
+ {0xD71B7A4C442D7EF6, 0x9C47B9F5DC45C09D}, {0x31E9D033D54A7E95, 0x2411A684985C0F4F},
+ {0xDE3EE67EA4ADCDE4, 0xA45C35FD5E5A26FB}, {0x6EC872F0A2857084, 0xB03B3404B828D2C8},
+ {0x44915C0FF6CC70D8, 0x6652B33FA5668EAB}, {0xD8A95F4CB4D20B2E, 0xBB9A0B65D5911F6D},
+ {0x55918EB96A1C1EC7, 0xD46AAA2501DCEE81}, {0xC556046E2DCF852C, 0x70F7BC8A8235F415},
+ {0xE952716FE6BB78EE, 0x34A2D5DA1895A979}, {0x9E797DF646977FA7, 0x7C8756720017790B},
+ {0xD20C64B97C9DA8EF, 0xE46EC4AAA8E4883A}, {0x72DA968B8FA41BE8, 0xC5CBB1E28714DF6B},
+ {0x57AB97F520EB8DD2, 0x4E0843C14857F7B0}, {0x023CC4B708A22469, 0xFF747AB554D27367},
+ {0xA393DB8F52ED32FD, 0x721A0A4953E0A409}, {0x07775CEF7F42C4AF, 0xCC1EE80408DD6B78},
+ {0xA612C7980386F306, 0x241F24AD9EED17C2}, {0xC204A9D847992BA0, 0x1267F019B960A705},
+ {0x405635516D8AE237, 0x1064F3457417482B}, {0xE99FDE7F98E3DB06, 0xBC6A140A10EDA0F3},
+ {0xF75801C44658113B, 0x070B5B9F0F9DC993}, {0xD16095005B01D253, 0x4D0565EEFA053894},
+ {0xD6D274A900E45736, 0x5C19251DC8E6D694}, {0x5D657B26FE7DA4A7, 0xC55A2167ACC31EDA},
+ {0x9B0599552A6880C2, 0x593668EAA7B5A609}, {0xAA9261A2CCA83CBF, 0x14396EAA908E5A0B},
+ {0x8A660D2CFD3981E0, 0x802D39F75AF13BF0}, {0x9BE0AFAC62B3747B, 0x56DA360074A1E781},
+ {0x82DCDC59CA394025, 0x65229FB2D11E7F13}, {0xAF4F1167CD1C9B35, 0x2546C1CFBD244402},
+ {0x79E4953A5AC9C45C, 0xE02F77B3774C53B0}, {0xC40143B4DF9AA103, 0x536F232B6E24CAEF},
+ {0x42BA5B6266A0749B, 0xFBAF4FE5410724B5}, {0xD87B0C183039D4A4, 0x11DF6DBA3D04F49C},
+ {0x00A3D0B768825DEA, 0xEC52B7ACE689E64D}, {0xC107FF88E95B5B9B, 0x148DCB62A9DFD0A2},
+ {0xAC11D1A3352DBAE8, 0x8533852A5338B098}, {0xB3E6CE5A0DD3A074, 0x051E121A85E385FE},
+ {0xFAB4DDCD233FD592, 0xFEB9814F0861C756}, {0x352090B9B7FFD5DD, 0xD26B008ECE00DA24},
+ {0x49C51C4271DCF4AE, 0x8831E4BCEB3ADB99}, {0x0A48F0BA39BC3B4E, 0xDCC64D3671506F4D},
+ {0xF93C66AE3945D305, 0x77AAA933BD00B803}, {0x8B78A419B1EC5C0C, 0x41F441FB081665CF},
+ {0x7D463318E7A26EE4, 0xE8038C11BAC233CD}, {0x2A4916ABB0F95EA2, 0xED3B17644C0941B3},
+ {0x788F3CAB77D2D6A8, 0x5C01355556AC0FC6}, {0x32C6CBC430262C17, 0xCE45B12E8CC4F63C},
+ {0xB8E6CCD750298A7C, 0xE970D74AA1B4CBDD}, {0xFF75AE04ED11C901, 0x3C15B94AD609CDC5},
+ {0x5A2F9E1ACEF87023, 0x3F8E1BA64E2DE72B}, {0xED5DCB9526B3D410, 0xD751DC68EDA3C163},
+ {0xFADCE74C58FBB359, 0xB92877DAED3E051E}, {0x02CA9CECAD36666E, 0xB6F640F35CD7048A},
+ {0x76D253DDCF4C1AB7, 0xBF83EFA013377848}, {0x7BBB0B0570299187, 0x33711CFEA454B14C},
+ {0xBBF4A7AB2414DA7C, 0x733A3ADCE780DB08}, {0x230356E0201BC55D, 0xC3D523D49122FF7D},
+ {0x6B479C2C4ABE26F6, 0x5D4E5E9ADB17DC2D}, {0x0CF962454114A4F5, 0x0E187407DC2A683B},
+ {0x956130B22AE7E44A, 0xF907F13AD886FBDA}, {0xEF83570FDC29C7BC, 0x0E63F0376B5A997C},
+ {0xAE9104DA9598C610, 0x973AE9E2DC191EB7}, {0xB65902FEBE3C602E, 0xAC71584E4DD21090},
+ {0x46C6F534DA98D9E6, 0x2AF14456A8B26B22}, {0xCE014F79534A5560, 0x75DF8980A0653601},
+ {0x3F08467A7299572B, 0x59489A000D444CE9}, {0x73BEF21AD047D1BE, 0x5A6CC75FD042A8E0},
+ {0x120607618A339CF4, 0xB55C0B805DB39F83}, {0x71963DC8C589A096, 0xD18F2CD94BE6E72B},
+ {0x52C7D7AC8D883039, 0x55816A732B2D402E}, {0xA7C77975D4569A3E, 0x12EA6D5DFCEAA206},
+ {0xCD55531E20E891D7, 0x99847F272C4C25C3}, {0x59CEF17F61314B7E, 0xA6D940336B16B2DA},
+ {0x0D982159E079891A, 0xA5ED2A0A5D7CC4A2}, {0xDC6F25A4E3FDE5BB, 0x636DBE8959839463},
+ {0x95AFE44AE105EECE, 0x8B574D13FE8487BF}, {0xC5631B18B69A5494, 0x82E0775A98AB11C3},
+ {0x5F51B4087EF40E85, 0xA0938032DE5B3D63}, {0xD1034655F7353371, 0x98CE69AA0C5911D6},
+ {0x77E1312692A0172E, 0xD9F9BA74E1D20FC1}, {0x10AC7323896B2A58, 0x49E83336C87E5285},
+ {0x734158C154DC6B6D, 0x2CCA0A58111390F2}, {0xA4920431EFE18656, 0x5C7E9152B67D99D4},
+ {0x5D1BF3AAF975728F, 0x16EE093080B52DA4}, {0xAF5C9F5454EEB46B, 0x655622D30E0AB0B6},
+ {0x438DC4B19514CCA0, 0x9DDC0B1F02C37230}, {0xB7A277FDA2748BF9, 0xD5E077A6488A56F6},
+ {0xED63213BFE8632D6, 0xABEC30A2EB2EC36A}, {0x940906C17A2D4091, 0x91FF2F927156117C},
+ {0xDFD645C8D47D18A6, 0x6BAA42D3D518E933}, {0xB3DC1ABF0DAFA7F5, 0x15BCCF7C516645FB},
+ {0xD563E9D558E337A6, 0x340A8AE1F5CF9819}, {0x3184C81C2E7071DB, 0xE940A6092C5DCE8E},
+ {0xB317493135CA130F, 0x69AE0772AAD202FD}, {0x6E44E335802E3BA4, 0x07479392EC358FE7},
+ {0x31D9F0A50165D71E, 0x2E09F426BD62194D}, {0xBFF7B1057DF16F93, 0x6EE2A41B5C19C267},
+ {0xA146EBC7241709A0, 0xB3B823B613EE0392}, {0x22DD55A9AD62C331, 0x815A438652F55F07},
+ {0x9714483661AAA4DB, 0x4D26EA5586E74D62}, {0x750954819E63C952, 0xA19DE0EE979EF876},
+ {0x6DA41CCD9D376541, 0x9D9CED6455A36418}, {0x81E841019DE05806, 0xCDEB615B885785E8},
+ {0x0D0444F28A601818, 0x14FEE65646FDC8A5}, {0x95A9D99FFF66D571, 0xA019A0BE6EEBAB40},
+ {0xB807FB825E328181, 0x2FDA5A15B3F24C75}, {0x7993FD9E711C3D8F, 0xBC2735F502A933B5},
+ {0xECF76B19930F050B, 0x8194D5A84DE23B87}, {0xB583A2A34171B4D3, 0x4E4180D9E52BABCA},
+ {0x5906333B1253F9D2, 0x2E287A739BED5F55}, {0x77AF57BF1ADC0950, 0x0E0214A4E759C9CC},
+ {0x08DFD589CA91B35C, 0xE2810777D75F2A47}, {0xB501553A856C343E, 0xA9F78D0C02A16769},
+ {0x9C35E5B89FD3579B, 0x5E516AB7D8FEAD75}, {0x0CC01AF255EA3314, 0xBCE02C6AF4B9990B},
+ {0x59A02221EC893BBD, 0x9D9C2B96C3611A74}, {0xDEDC6D0110DAE7FD, 0x0FD6BB30209FB426},
+ {0x3630A1E682380A6B, 0x75CFB36E65099294}, {0x1517733F78565DBB, 0xBE6A99FBF5DACD62},
+ {0xCC6486D5D0B732E9, 0xA2FC2E7DAF72AFD6}, {0xA0BDE032560CD934, 0x58B809B84773C9FE},
+ {0xF5D3AC52AE061D4F, 0x323100F5D8BBE2C0}, {0xD4D732004C1E8DC1, 0x211CB19336245AB8},
+ {0x1231D50A45CBF2CC, 0x77E4448809ABD18E}, {0xD0BBA2F64BC8CEC5, 0xC2E9F1BD506AF1A8},
+ {0x2C18C90D70C49AD5, 0x8768C3451BD76DF5}, {0x0070FEB3CD8C2D05, 0xAAC383F65C629D73},
+ {0x6DCAE735C8D23D79, 0x214C70B7787318D2}, {0x9F4465ACCA4C1B6F, 0xDFC0EC4D023A1639},
+ {0x66E3458729BE7160, 0xABAD1C76ABE47E6D}, {0x40D527C541AC7034, 0x2034988ED96093F0},
+ {0x1DF8EE92FC55E60D, 0x43E4AE37A22559A5}, {0x50DC320409A124CD, 0x560952696683BCC4},
+ {0x450B219887B59102, 0x388E1CE619107496}, {0xA708F1C4042A4E8D, 0xD97296799207E730},
+ {0x4819E760DD00B48E, 0x448CFBF3472C2A71}, {0x6DAAE07FFE4ACFF0, 0x9612CA57BC4E5A48},
+ {0xFCB9653A7257BB9E, 0x7FE6AECE7C3C8176}, {0x23E5E238EF671914, 0x38D7A524196468CD},
+ {0xFE09AE6FC131B78E, 0x528712EF01F786C8}, {0x3BC79EDA4208FB19, 0xEBF2CDFF9EA573D7},
+ {0x6EB0CE1C3FE6318B, 0xFC879C4685E54789}, {0x7246732A44F7FB62, 0x4A4340AF682D665F},
+ {0x62C4EC56F79D6FAF, 0xDAEEF339EFAF67FB}, {0x722181CA3731E13F, 0x2CA2E641F006D9E4},
+ {0xB76025EB6A2B3E00, 0x3A179084E71BCF5C}, {0xBE2B63A9FBA4F597, 0xDF063946E2CD6E9A},
+ {0x639957B669F89F71, 0x481DF2F50A604196}, {0x8255C5B64945C34A, 0x66F534D3FAE0DC48},
+ {0x7F5023896ADC2B67, 0xD0B299642243F09E}, {0x0ACF0902D40D2982, 0xE0407FB361196D54},
+ {0x727591AB8352B2AB, 0x5E182447E8933964}, {0xEE4A581BEA629CF3, 0x1F2C8B0612BDBC35},
+ {0x12A45ABFDC4B505C, 0x711FC8A01CC8EF37}, {0x6E58FA7901FA6C86, 0xAD9C7A13704A5538},
+ {0x88E654778AF6472D, 0x872EF2D69CBE78C3}, {0x2CBAE5036EE46310, 0xE7A5DD96193F7BD3},
+ {0x825287FAD3A32F58, 0x819032EAF6C619DB}, {0xA9E42906A376DCF4, 0x2AEFF3D950F73DAB},
+ {0x3B25795307FE4476, 0x212D650F3BD65637}, {0x303459928B161644, 0xF17DB67133B2616A},
+ {0x8FD2F71E9703248D, 0x138DA5A948C6F9E7}, {0x1A3E3913EC40E243, 0xC0D09AB6CFB58781},
+ {0x9D4B78F4F86A5D09, 0xDCA07C00263E6123}, {0x3D2DAFF17EEEBD45, 0x6CF41E1B67399D8E},
+ {0xBA8C47AE88A6DAB5, 0x4D0EF0CE2CFC4DDA}, {0xE790E51459F21E98, 0x9DAFE02FCAB01146},
+ {0x4CB47B12AD4D26DC, 0xD34674D1CB95DB28}, {0x261FC5AFD979F012, 0xE96AD2E5066B0B0D},
+ {0xF762A80DBD29F47F, 0x7812FFB2E0B39E7C}, {0xA93795632BBD6CF7, 0x8ADFE77C48693EBF},
+ {0x6F70E3B3CCB7F9A9, 0xB881E8895A8A6C26}, {0x3C52BF050F0A33D6, 0xBF528D0A2DACE0CB},
+ {0x76DB1B81ABDBDA00, 0xD94A2D59CA818BFC}, {0xB0225FC9DB62FFCD, 0x38F606E3BF464736},
+ {0x601B5997C23B67F4, 0xFE3ACAB373138AB7}, {0x9806849B2A02250B, 0xECCADE65F71BD6DE},
+ {0xE49CF3856D5386F7, 0x7C57C6AFA885C67D}, {0x0A7EE31384391FD1, 0xE08CF71DE40BC675},
+ {0x74A06EC7D1E5043B, 0x9E9DC11FEAD686D0}, {0x5CE2CC5F334DAE5E, 0x6D545A6E753C8846},
+ {0xC7EAF7BC92EF3724, 0x3113105F86E5649C}, {0xD44EDE2F67A86C59, 0x189C16C756849914},
+ {0x6A52695517A58F42, 0xC2BA9B126A7BF069}, {0x7B8613600D4B7FA1, 0x6629B7E11C203FE0},
+ {0x2632292A3973FAE4, 0x3F6D69BCA61F74A0}, {0x6845529AAAD9455E, 0xEDE05258D9E43E77},
+ {0xCE94076C23413F6C, 0xBF53C06FA17FCFB1}, {0x2A547CAFB6CA689A, 0x61CCA7F318D34948},
+ {0xC191DC20012A59B8, 0x92E81258854E19D5}, {0x8DFD84683D1ABE8B, 0x6BC9432EE4FD61D3},
+ {0x018EDCFCCDB6D44C, 0xD6ADFDE38FCB3D11}, {0x2B6685DEF4C65C83, 0x7E280A1BE44A7919},
+ {0xBCBAE1FE780BBFC9, 0x02F37761FD9CE275}, {0xE19855D0145732A2, 0x094B0ACAC74A8B71},
+ {0x34710D7579EE0BFF, 0xC0310397B470EBA3}, {0x75E1EE8B766B86F1, 0xBDA664650A2B5BF6},
+ {0xFC4C0158FFDB0B34, 0x3E81018D6CD2C7CC}, {0x59CCC5F5FEBD9E19, 0x8383ED8AFDD7F433},
+ {0x1270DFC4664D06FB, 0x6FF61F931F3AF832}, {0xA9A31C0373A124FE, 0x87DA420EE84B060E},
+ {0x4CBB80CB6A122D91, 0x79CC6BAFB7026461}, {0xB7EEE6BFDC3B3620, 0xECD0AC471AFCB079},
+ {0xFE1FD33FC988C916, 0x09B4C07B782FF349}, {0xC045937C2A043893, 0x3E0DD7D0435C14C5},
+ {0xD1EFE833C19A0DD7, 0x8DCFAF7F045FFD6A}, {0xCC8EADDD275A098D, 0x99C7C1D05075C0C1},
+ {0x81AABDB8BA62803C, 0x7A90664D39285D56}, {0x7353DC4EF9217542, 0x6F7D36AC0ED1BE74},
+ {0x597B6645678E6B5C, 0x71BA097F4FE66958}, {0x75736F0E7FAC4CA2, 0xC97DB17CEFE34AD6},
+ {0x044942FF84E8E2B6, 0x0C82D7888907780A}, {0xD9045E8D9E4FC191, 0x9D279DB781967182},
+ {0xB55EE2DE47924847, 0x7021BA3F061CF505}, {0x2DCF5307C1D20FC4, 0x409DD1E8349C4454},
+ {0x2C91C669871C21B2, 0xB703C1DE458BF24E}, {0x7EF20488D0086F7B, 0xF3C1C07B18EC78D7},
+ {0xB844844C38A068F5, 0x58059B0223F86592}, {0xFF16165F710C6571, 0x6CA884382F0B918C},
+ {0xC956784442BA365C, 0x9476BE9FA29D35C5}, {0xFE672EAF557977D1, 0x0D78D945056A1EDE},
+ {0xE2EF4253EB1D2835, 0x38B1387F29B18626}, {0xC13CB758986A6653, 0xF5F5CE92E7A36ED2},
+ {0x9C56B40A9FB9A9D9, 0x1ECF136C59694404}, {0x0115374B11B61760, 0xB4AD7469ED3FA2E0},
+ {0xE7E3D055565785B7, 0x6CC69410D5EB51DA}, {0xE2969CB6B5ED9DD0, 0x56146AE9227C5163},
+ {0x0FEE2B040E014526, 0x6293345832CF6FEE}, {0x641F27A0ECC2FE2F, 0x98CBA69BB30B629C},
+ {0xE2DCF545C5CDD10F, 0xE2D4677683DCDE5C}, {0xD4FBBA54F1B3544B, 0xEA1D5D60D0825200},
+ {0x6309DE41D8FF75FE, 0x423CF30542E77683}, {0xD3B856FD3199FF31, 0x429A884C68B2B9C7},
+ {0x6BB5390C56BE9377, 0xD64BC572067D824C}, {0x5964CE2CF2F16C2C, 0xE334E544633DA5F6},
+ {0x05F3C962FFB74BA7, 0xD9018E9276E097B9}, {0x6A2981B3B0E6EAD9, 0x6E09C5D9589F26ED},
+ {0x09AC9C09EB38EBAC, 0x92F6E844171A763E}, {0x79CADDB5B040F227, 0xC2A5481EE67B5799},
+ {0x301A13172C471961, 0xDB2F0A9D204AD08A}, {0x93D164F0E739099F, 0x91C873540535F715},
+ {0xF0ED38A0282EF976, 0x48E225DC0716C400}, {0x2DB53140838DDE21, 0xCE71E93C94EBA34F},
+ {0x6005C74821CB2BE8, 0x8F3025678E31F807}, {0x3AB3D9F13E7465FB, 0x910E11F4B02EC30F},
+ {0xE992EDB8813A19A5, 0x373A5935738E3CCE}, {0x5B2369FE0D7259CD, 0xB8C3AF256020DFFD},
+ {0x11CDD2D6C83C705B, 0x444014CFB71F3281}, {0xAC10D537E614E170, 0xA5F4EA1A82700D70},
+ {0x141967B7A1483DC3, 0xBB5455304FF2790E}, {0x12AAE19A5E85325E, 0x7A397E0B82620B8D},
+ {0xB709F36B34510C9A, 0xCAF5B76AA0B4286C}, {0x95A7F48AFCDE613F, 0xF343F6BC44A728C9},
+ {0x14D283EB5EE2B073, 0x7A9A55BDFF8FCE62}, {0x99E6B0BD4AF0FF4E, 0x925E55ED0BEA7B76},
+ {0xF1AF5485EE8020E5, 0xAF2428C2006CF2AF}, {0xF47FA1F719ABF7E8, 0xA6D62AA6E8666772},
+ {0xA0224FC1C7DD903B, 0x4DE0F277B9B4D106}, {0x1AECA771D6A9AC1B, 0x835AAC16922690A5},
+ {0xB2E9C1D81C20ED13, 0x8F7B3FA11C597C6F}, {0x8F863AC77D852A12, 0x47266E7353A7E488},
+ {0x393E8ED7F0491C02, 0x6F293675098AB728}, {0xAC18594D634CA209, 0xDBB758744BEF0784},
+ {0x960846A63883390A, 0xB43704843FD300C8}, {0x7B1CD63A9615AA5D, 0x3A5608B75177C228},
+ {0x1876F91B10C95AEE, 0x9859361D22F798BD}, {0x8BA07282E0C66B80, 0x1E56C5191BFD5FFC},
+ {0x13C0E95F4D5306A6, 0x28B205241B6D1B4F}, {0x6A64E68BE0FCB30A, 0x4E8FD84092DEFCF2},
+ {0x3716014B91A9FA88, 0xB68F5A25503D2D2F}, {0x547B6F4CF9E9E9B2, 0xEBD5A9C820E697E6},
+ {0x5884ACCF2F7DF4CE, 0xF08BABDD97C708DD}, {0xB81E6E6DC1D2C02D, 0x14BA602FA90E1A43},
+ {0x4E7240C91A9BDAFD, 0x61EF195A2E06B008}, {0x3B3E8CBD1307B06E, 0x1763232B138A5684},
+ {0x2286CBC3928AEA1B, 0x8029089336171CFB}, {0xF40262697522C904, 0x36FAE50E41408784},
+ {0xC63FE31ECE45C503, 0x07024428DF7B6E6A}, {0xA5E9AA1F343403F2, 0xF64DA483A1260BF8},
+ {0xFD6DE8DDE534F0B5, 0xE634EA9B16B27643}, {0x91922C1CFF9D25CE, 0xD19C6A1031A258AA},
+ {0x0B707034121C0D34, 0x8E32CD591FD05882}, {0xAA6FBBC3D682F24E, 0x39511B5C79CCD8F5},
+ {0xFEC93297810DFF4E, 0xAFDF9868A90724FF}, {0xA5670A141D016447, 0xEB0048396FA4B43B},
+ {0x85DE34E968228019, 0x9D0D9260162A2BDB}, {0x967CEA44489F0850, 0x7A2DA64BB3D8E637},
+ {0xD17EDDA3639E08DE, 0x32019E7C9457680C}, {0xB224F29E848D6063, 0x05E472B18779DF7D},
+ {0x62677969E47CBEA7, 0x6F04506C741A8B0E}, {0x70F913DDD55C39A5, 0x417E6885AF4D3F2D},
+ {0x17C50F8666BC208A, 0x3EDF74DFA11F5AED}, {0xE44E0D059A01DBF4, 0x2DCDF16678035DDB},
+ {0xCCAFA5278CCE7762, 0x54AC0F23F343BD54}, {0x716AE8D2963305B1, 0x075D849A6149B108},
+ {0xD776A1D8FC1E3624, 0x4C8F7BF0C026AAAA}, {0xCBD97231051A6702, 0x0AB8B842E17AD003},
+ {0x3FD97F7C718BBF91, 0xDA999A53A89B5441}, {0xF9F4275DCCCE2BB7, 0xB6BB802B126A59B8},
+ {0xADE555B492FF8184, 0x839C41EF975DFCB2}, {0x835DB0F38FB808BD, 0xD91D1F9326342D04},
+ {0x0F545478E3ADA138, 0xFA57612B63F4926E}, {0x2043CF4137208463, 0x0949496254E1D9BD},
+ {0xF8A54158A5C30251, 0xBFBD23D28C84ECFB}, {0x992A6AB90B6FE6A2, 0xF195E8A640437454},
+ {0x2937D6E6F6289088, 0xF2AC11331380D1D7}, {0x11C2C5832DC89B94, 0x2F0ACAF756E10C7E},
+ {0xD8D9F6DC393C9672, 0x742E0A04A377EA87}, {0x5A2BD08D12DE1D54, 0xC60E763F7970FE35},
+ {0x8CD186063DA6712E, 0x780B8D4A1C6B3F65}, {0x258528127ADA8C0E, 0x9AD68004F9C69960},
+ {0xCB9BD50BE22C3BD1, 0x2C9A6F13D6B87792}, {0x199078277544F605, 0xB48FFCFCCF9E42B4},
+ {0xA306CB38F36621D2, 0x97F8028AA70A82C0}, {0x5B82E150B69C64A1, 0x8F9905DC34EEF9B7},
+ {0x6F2E0FF4D6D0D044, 0x90B56DECA85E0B5F}, {0xFCFB06308EAEDE21, 0x91C9B36AFD96A884},
+ {0x8DF63786F4B138FB, 0x8104187139CBE730}, {0xA13D13E9F3F71237, 0x27FE6DAE12F45864},
+ {0x9D2888083411BB0A, 0xF122BF082794C838}, {0x62F375C8F5DF8F6D, 0xD53B97FE98BF8DB0},
+ {0x77C8ADA9402E962D, 0x926C7F08D15E802B}, {0x9461A2644BE41265, 0xB05A197B2959CB32},
+ {0x3DB3F5320906F05A, 0x1AB8C4AC0FA7FD76}, {0x9850323E54B48703, 0x603F30B9EE25F206},
+ {0x55BA6D4E6863F96D, 0xB31F45141DA39C4C}, {0x70CFE32A0BC2FEDD, 0x56B03F27DEB5A48A},
+ {0x8F736B590D519325, 0x2DDD9320A5610DE3}, {0x71CA16BD0A455018, 0x50E874027319F385},
+ {0x6B91F97D5E866A36, 0xD2E7768E8C4CD90A}, {0xF6B84D4F7E08E105, 0xA9E2B78C27FBD327},
+ {0x51DA5DE4E538BB53, 0x1A2E72C5BB189BE7}, {0x35ECEDC37E1B527C, 0x5833A8908787E928},
+ {0x0CE18C709DD6F80D, 0xBF73C56A8218CBCD}, {0xACA91B222EA912E3, 0x0F4F3E324113CC04},
+ {0x6CAC771D3FFE1A5F, 0xC6BA172F69BC85CA}, {0xD69BA969749EC61A, 0xCF5D23B91B1A0DAB},
+ {0x38B0DDFD7FB7EC81, 0x28E4952F950F95E0}, {0x3C02A0C357573A79, 0x85BA62169E31DE2F},
+ {0x210B132DAAB39224, 0x09F60FD6A776ACF9}, {0x861831856AD30345, 0x38450D323E938D83},
+ {0x870DFD13B45031CD, 0x85F9CD90F7736FDB}, {0x5C3887102D2DF17C, 0x16D90643D14DF4A0},
+ {0x90D839EFB4263AFA, 0x19B328E6C1F32ED3}, {0x373BED97256134B9, 0xDF0FD7F0BA8B7FF6},
+ {0x62B2196CF9974E6F, 0xD1F48DD3E7B141D0}, {0x557C1E14A045A768, 0xD173425B5223DE70},
+ {0x97F0EDAFA4C40FD9, 0xCDE987289423291B}, {0x68C6EDC39CF04B8A, 0x22E311916A57EE0C},
+ {0x48AA34A15A29CB73, 0x9326AC93D7416167}, {0xADA17F92FD9F4CC8, 0xD5830F17C1DBBD19},
+ {0x76E5432A5186D057, 0x9E5E5E281E352DE6}, {0x46954A6A31869FC9, 0x909F602998156EA7},
+ {0xC4174B33090F9592, 0xE5ACA5A42F5A9AA8}, {0x4C71763DABBBE07C, 0x496AFD72E8BC1BE3},
+ {0xDFF8B2428751DBB8, 0xBBC1421E13A9A57C}, {0x6900ADDB8C97F902, 0x8FB395EF42A337F7},
+ {0xB1E1A627EA521077, 0x64D87F98F219AFB8}, {0x0913970BB7CC1C86, 0x299BDFF71935F02E},
+ {0x1B5A13D248224A46, 0x28A6F9ADDBF81888}, {0x1BFBFC3B1EBA75DA, 0xD6F159BD1C309454},
+ {0x358327C1631A663F, 0xF9E0A6930BFD61C5}, {0x073230C139E9AFDA, 0x79DF2F5345FB1130},
+ {0x1FFE2944E7E3554B, 0x358329484491A668}, {0x630B6ED4B97BFC0A, 0xA8CFBA5BF351C0FC},
+ {0xB2D1191B2C56C69D, 0x0FE26CE6E2744773}, {0xD1E8577E521E247A, 0xBE8F208DEDAD1820},
+ {0xA4D04078AFA49DB0, 0x01C48D29DE13B5EB}, {0xB7B4C2176FACE7A9, 0x9905845853A7C7FB},
+ {0x3834150D2A023430, 0x32287C3A5D970743}, {0x5D0273A321133A6E, 0xCA8C5258D9E74EE5},
+ {0x55401A9ED836CA8B, 0x1F165AE8BD2573C3}, {0xDCF3D7327A8708F2, 0xC84A9CA9C8785B87},
+ {0x8E18478D405F2860, 0x91E639E34BFD9889}, {0xBD0BBA3EF8114C38, 0x22078E3A4501D849},
+ {0x0FD095D5D2083642, 0xEC54D4EC41D96180}, {0xDB3394A31E4597C6, 0xBBE6841DE950C47F},
+ {0xC39E5FB62F3C1E03, 0x32164D53139ACC52}, {0xB4611A061AAFE1C7, 0xB1FCE10CE343669C},
+ {0xFC4E4A6C79C285CD, 0xC746AAEC0149B226}, {0xB123C847C0721A07, 0x5FFBD38628AA7DBD},
+ {0x89774CD57CA77848, 0x4A62423329561884}, {0x2430467B47051232, 0xB92EC5683C98D233},
+ {0xE3091A2CD71B9735, 0x9520E3E4A0273E6B}, {0x30A02EC2C65C9972, 0x1DC4358A6F7F16BE},
+ {0x49690C75C06CDC0A, 0xA2196F61D05785E8}, {0x188A4A6ED9E0DB56, 0x652724CB74E39228},
+ {0x7D03ADB906C0207E, 0x6D3D30E5B135D2F1}, {0x9077B3473607999A, 0x7E660F893042E0FD},
+ {0xE8DB97B80BCF35EB, 0x8BD1E648E654FAFB}, {0x87C17761A24F7B61, 0x9A0D2EA1BE5C6AEB},
+ {0x2543C2744A7E6271, 0x3FEAFBE7E0F14D89}, {0xC063DC58FBFF7023, 0xEEAF6C1CEDF513E1},
+ {0xB770A1975F3C3BD3, 0xE5D37EB58D8FDF1D}, {0x0EC7565B04B3DE48, 0xB2D1E729765D8799},
+ {0x8D24F1DCDC1AD02F, 0xC55D9DE675E5275F}, {0xAE32A7F8483A112A, 0x9E2BE2653D109C0D},
+ {0x4142C1754DF0C2A5, 0x0DBAA9179339FAB7}, {0x86B9E0A5E7A17EB7, 0xF5C1496688FE5DF6},
+ {0xD23F5013FF750752, 0xD64BE9B13254DB99}, {0x87158001CAA02158, 0xFC010D9F53F81EAE},
+ {0x8B597F4F6DFF7C5E, 0x813733AC9D79396E}, {0x3D2D7FE056565440, 0xC5B4805850F2BC0B},
+ {0x829497D07C19EF38, 0x23EDD42483312012}, {0x41D654D3BD18E69A, 0x87F0AD8EBDC9B0E7},
+ {0x08269EDD95571626, 0xBA43EEDA9AD9A489}, {0x847C588606334EFC, 0x481C0CBA662EDA4E},
+ {0x2263387E4F15F3D9, 0xC30DB3352D135A89}, {0x94636B7DC41F4A86, 0xECE3793C56EF5534},
+ {0x51A00901103B64C2, 0x5D1A840B05B86330}, {0x916717FE46767496, 0x0FC0049EDFD20024},
+ {0x2D5F4A88AC6E8640, 0x164AFDB027209672}, {0x2056E1221DFCEEE5, 0xF2BDA27FDB7AFF19},
+ {0x02B32864F249FEFC, 0x7291ED68F10142A5}, {0x3FFB7A7F60F0D45F, 0xD4CBF01C8F8CF306},
+ {0x270CCDCBD998D827, 0x7939D26CF4C74E80}, {0xE129999CFD31A1DD, 0xEA3961DB6A51E88C},
+ {0xB0694C6D6D78A5B8, 0x653B2752BCC8322A}, {0x962C1D75AC5066D2, 0xA8DD6E8D3EAF4678},
+ {0x1C01ADB0552BEBF4, 0xBEFE14268BC2D923}, {0xFDEAFE9DF9E4E40E, 0x4EE52962DDCCA5C5},
+ {0xBFEFCE25D9F2C706, 0x642FC658E94BAE69}, {0x23803706BEFAD872, 0x76031A699C3F7598},
+ {0x1FC173767CE4D057, 0x0B618896F46113C7}, {0xE2421421A78ECC3F, 0x115EE3C3D385486F},
+ {0xC43079A48E0BDE12, 0xFEDE1A00BC4B1E81}, {0x81A4B1446243ECDB, 0x21F315F190AAEF33},
+ {0xC742E75042C6E47F, 0x6A459988871F1A09}, {0x5F8C9FFA57369930, 0x8F7765EC04D5C139},
+ {0xE4688568510A1990, 0xD906DAEF7118E30E}, {0x900AB089098E3341, 0x29F5C7B36831D284},
+ {0xBF1CC40A6D1CA89D, 0xC8D97AFFB80BD507}, {0x3E8DDEF98781AACD, 0xDC12DFBC341284D9},
+ {0x26AAEF895B31C8EE, 0xE07DB1E1032F79E3}, {0xB7BE53CAFE31455A, 0x27CA10B87035F334},
+ {0x0140873B308FF670, 0x7E63A1C0E3FAED03}, {0xE6F5268BAD06E50C, 0x762A6D7FCF40FD00},
+ {0x12E25227E0AD83C0, 0x1D693C016D4E6D2E}, {0xE299B829F109DF09, 0x0DF3F1F90E852001},
+ {0x9450DF610D2B3B99, 0x7C1D3ACD9900C96B}, {0xD7D5639B0932B89D, 0xD8FD9377020284F3},
+ {0x454C402749E098AD, 0x112BCED70F945445}, {0x0FE075450A200153, 0xDE8F395A05186842},
+ {0x87BA0257BC109DAC, 0x95C02CB4D278C369}, {0x8885120159058414, 0x2337D62352D6019F},
+ {0x8EC0E7965AB8DA91, 0xB2FBA1F8BDA105B4}, {0xBA68E43E0ED1256D, 0x52AB9EF0241231A5},
+ {0xF7B13189DE5A707C, 0xAA9D57E8F97AC33A}, {0xA566A4B5AC429150, 0x703A1878EBEFBADB},
+ {0xFAEEAE06C825B231, 0xC48CE0BA295E0243}, {0x4045EE40633502F7, 0x280697E9092EA798},
+ {0x95FF65DB8D7DC525, 0xFB437F7ED31FE083}, {0xCA3504527AD40F21, 0x8420DFBCAAD0EE51},
+ {0xD70BBBE60AC46A28, 0x0A608C2AA6E655E6}, {0x1A43A533ED191F42, 0x718762876FB155FD},
+ {0xF3F43CCB44E806E6, 0x0BCD0D63E537D176}, {0x92987EF636E3108B, 0x09EC4E7470A57702},
+ {0x0016806F688DD7CA, 0x13F59913AD480F9E}, {0x8318B037FDFB0934, 0xE16357A220341672},
+ {0x575D75B11B6D1FBB, 0xC2B28D919103C672}, {0xC644BD8D0F3460B5, 0x3AE474B04DE34E90},
+ {0xC6D8E480E38B0E93, 0x58E6023606AE0658}, {0xBD6031850F7344A3, 0xCEBCA3AC5FAF1B3A},
+ {0x7E20E57E8762598C, 0x9D69E16D96D80D7B}, {0xF8EE92CA404B0F78, 0x65E9E7855BE0B775},
+ {0x345D6A857F93C1E6, 0x5FD4CAFECF3E8210}, {0xE364C2D874648AFD, 0xF6B82413C21C0F50},
+ {0x03CF20B6542A04FB, 0xC61421144621CC7E}, {0xB7A01BEF7C936B09, 0xA83A590F261A279E},
+ {0xBCDA49BCB8C7C8F4, 0xA6EDBC251DB74010}, {0xEC718FAD097CDE32, 0xB32646BE62D7D273},
+ {0x241F70F7E6EBEA27, 0xBF5944C41A6D49C8}, {0xFEA024191376E53C, 0x7DF093D5DE0BCD90},
+ {0xD8AE94761D9B3B6B, 0x2CD7B1196B9B3FC6}, {0xBB841D02229003AE, 0xF4EFBAE078E0445B},
+ {0x38D18596539A8549, 0xEBF6BAA2163BC7F6}, {0x21FA65B25A5B6EA0, 0x7A403D0D2E7CF549},
+ {0x14C873526855E175, 0xDD682E1127573D2B}, {0xBAD2E78FE8CFC302, 0x376F7D0D3A97B4A7},
+ {0xEF9FF380FA44FD09, 0x75D6E2D72DAACFCD}, {0x527803059749AA81, 0x34C8E2D1B923A917},
+ {0x453F3236DC59C4B0, 0xD539256D98970B68}, {0xC81D3F84207ED1A7, 0x7029598BA8AFBE47},
+ {0x6EE98BCEAC0D8B3F, 0x0C58F4656480F579}, {0xAAA8A6790B802CC8, 0x01A1A4F8010D4E29},
+ {0x723CF425D274CF7F, 0xFEE77E2FEABFC321}, {0x10D838817BA02A25, 0x4589DA9BE0CF841B},
+ {0x82AA67AD21B7E9E2, 0xE7A0CEA097BE0204}, {0x52573052B2D092FD, 0x76E8B4D6495D0C91},
+ {0x3FE2E16E242DD255, 0xC9796D6F9859F7F7}, {0x49197C567C6D81DD, 0x7B26AF0CADB99AEC},
+ {0x6CD8C8349BCABFC2, 0x98FFE37EF8BA38F1}, {0xE86DE33D7370E46C, 0xA65124621DBFC4BC},
+ {0x9B33C09DBB744CC1, 0xB225E43F00706861}, {0x23DA16621434BB1C, 0x50F2BA4128BC6D1F},
+ {0xC4C64CBF9DF09815, 0x398186FAE326B42A}, {0x397FEEAEF2753D8F, 0xD898CCE062CD3128},
+ {0x91537D9FB4EB5A55, 0xF78128B53FA46E24}, {0xE95BC7875710A582, 0x6CC7D0742DEC226F},
+ {0x6D26CAB2889709EA, 0x116B66C25BD49540}, {0xB712131B1CB47212, 0x66398B8B7ADBE98A},
+ {0xF14AB74AEE88E235, 0x6837935BC04D7758}, {0x9DB59B9837B98C2B, 0xD57761D7A3821869},
+ {0xCB3444F94136C679, 0x45F411CB4D5D73D6}, {0xBDBDDB4019DADD31, 0x5BE1AC4B5E894E42},
+ {0x69F07DED9F07205A, 0xD322ADE34E98BCDE}, {0x2347962B02B6BE4F, 0x570603B381139CC9},
+ {0xBCDA948D584EFB75, 0xF0D19A92D3C8C70F}, {0x24E99C7B9B591A61, 0xC954037FFF4B62E4},
+ {0x1AD480561F88D645, 0xACBFE0E9DAD49FD5}, {0x128704ABD7B2A485, 0xC50F25D96D252934},
+ {0x8DE7A8131160E205, 0xDF6323DBDF12EA7B}, {0x6AC8D33A7EBAE35A, 0x7EE613F9FB68EEB0},
+ {0x0813469F3CF64D99, 0x2FF06658EF978BF8}, {0x7421979F2289EE87, 0x60FF832252EFF187},
+ {0x7B1644A160DF2E1E, 0x38362EF0FEBBC60E}, {0x3D746E2C015E6D38, 0x703E8E1BE48D28BA},
+ {0xA2730C7D0DACAC40, 0x795871C3E9A3B727}, {0x9A314A95AD8FD59D, 0x9EB914FE3BD60DFB},
+ {0x2B3B0EDC65D40683, 0x4FAFFE056A92D657}, {0x6D8B51DA6D01CCF3, 0x73B6432830BD2F13},
+ {0x717E5F6EED568ADB, 0x00F5B96382208F3B}, {0x6CEE269D40945293, 0x9CCF6EA4EEBE8B61},
+ {0xFFADB10A9DB58E1D, 0x19AC3D9BA0D32088}, {0x7274662F4B3DC916, 0x933F226CF93266CA},
+ {0x26A8F41FF2C79969, 0xC949FC77092B7B1C}, {0x0DEC74F191CE0C66, 0x15CBFC77080F3A91},
+ {0xD2ED870A8D1950A0, 0xEC4AEEF04604D3DB}, {0xF566E5B559BEFD37, 0xAF018D5508651073},
+ {0x2DDE015B1001924B, 0xF5CEBE2B777C7326}, {0x52C503782E7DE40F, 0xF6DBB194A04C5E86},
+ {0xA4EA92D7DA4CA752, 0x2B00553D15449CC0}, {0xFC09E2CF97A0ED60, 0xB6B16D4F908D5686},
+ {0x8DEA0B8E2B95D180, 0x5C8D80C732CB8BF7}, {0x0739BE8D9081DFC4, 0x5ECC6D520F8E8E66},
+ {0x6FF93389B2FB8BAF, 0x7D2D0C4A95A3EB58}, {0xA12DC8E53E1BAFE7, 0x11AFEF425365A0F6},
+ {0x21128FFEC4F425D4, 0x5B09D569125E448A}, {0x1D0C98B99FB33784, 0xF7907EC8E6C9BFE0},
+ {0x97DE2F0E5F8885E2, 0xF8384F734211EFD8}, {0x312AF0A6A739D692, 0xBE72C3B9AF4897D7},
+ {0x3D2C4838D0699425, 0x634CAF873B3A393F}, {0xB02F92C219E494B5, 0xFECBD93D097C13B1},
+ {0x4268B7104CE8EA93, 0x9808DA526C350A6F}, {0xA80FB54D1088BD9D, 0x692648C50C6C5040},
+ {0x24D7F0531FB48F95, 0x9E4551F18AF79C51}, {0x87E68ED6FFD5D4EE, 0x2BFF7AA5FE2171B1},
+ {0x3F4DF45D71084F44, 0x070D531BBBBF5BAB}, {0x09382CAD416F16E2, 0xB8AF2AF247613A79},
+ {0xA65770527E0CBFEC, 0x1897F40F95FA799B}, {0x6364E04D4CC3C3E8, 0x9B6401A9A77B1B42},
+ {0xB8946F4074DEFF00, 0x553073577693D425}, {0x9C3A653401593E30, 0xBF364936723FB947},
+ {0x18F0FC10E74AC8EC, 0x3EC2D943C3663352}, {0x088A1966D5E7B7F5, 0x10F4651B3F93470A},
+ {0x81A8E16BE2C0D8EB, 0x37ACC7548B365656}, {0xEC9095BFC5E85E3A, 0x3480AD137834D344},
+ {0x7ED93FEBCCEF3F1B, 0x085F277E2F31E83D}, {0x134254144529AEA5, 0x7DC852D91EEA35ED},
+ {0xE52179B30A7BA050, 0xEB7E050FD22A55C6}, {0xCE3838A5F777731C, 0xC16EDDE2B8661BF1},
+ {0x9F3292D1F70A122E, 0xEEBB1F72BF9E5E2B}, {0xA03BB0CF061770A9, 0x92E0B9BE14AA8392},
+ {0x49863CAD47D7B044, 0xF14947CEA2A43E79}, {0xB3E24D35FDBCE24D, 0xA7BE3F89463830FF},
+ {0xFEDF592594783F6B, 0x5BFD0D0F740E5BB9}, {0xFBC12ACBAF59D8A7, 0xBAD5986C86C518A9},
+ {0xFBF5CC745CF7A172, 0x6AE37065D69FB183}, {0x7F0FE85ED4C3E07E, 0xDAC6C265AC4B5537},
+ {0xB67895D014A7438D, 0x4ED4CA942125A02B}, {0xA43E37729D128D29, 0xFBC6688987011B1E},
+ {0x4E097A5836F483BB, 0x5C7408F6ACFCCB13}, {0x7C2A6854F7030EE6, 0xE498DB1CC5135A01},
+ {0x89C5A4DC99D8D7BA, 0xDEDE38AAF0367B36}, {0xD79B74F3E651438F, 0x87C1183CBFDFEE74},
+ {0x58544483E4D994D3, 0x0598B4B80015883A}, {0xF43323039B60E7D4, 0xC581619657BFF9EF},
+ {0x3C8CF42A50C6614B, 0x07FBD67B5FC616D7}, {0xBB101802167993C3, 0x7BF1E954A3724F15},
+ {0x20CA35922DDCECE0, 0x523073B6383D654B}, {0x599761045000F6EA, 0x20C46C0555FF8951},
+ {0x21982FFC79788316, 0xFA9AD2B0CA828A35}, {0xA0C6D132B47E2752, 0x76B399477DDCE1A3},
+ {0x4F8C141251410654, 0x794BF75AB698545D}, {0x3472505931A1A824, 0x520A804224982136},
+ {0x3BD78D0A4ACCE100, 0x07BEB0D5C6D02E44}, {0x04A7E16CC81D7C80, 0x53734DD0D9ED90D8},
+ {0x85A8934B8B2EAA62, 0x345811CAAC8E24F0}, {0xC5D799C770CC679A, 0x705B9F6F5814910D},
+ {0x902035C3BA76C806, 0x72F253447055EDEC}, {0x2A551311C0D381C3, 0xAF04FCE3F6218998},
+ {0xABE3B93074D91E4A, 0xA58B7E9CA0C9E535}, {0x070B624AE5E97F08, 0x39AB5E4710E886D4},
+ {0x02BCC0AF8F84CFDB, 0x554D474945FE2787}, {0xBF670E19E4DA3402, 0xACA52DAD53DBAF89},
+ {0xAC4B3C225F527ECA, 0x4B57E996B7F624F7}, {0x014DB7140F14BE9B, 0x39455FF60146D937},
+ {0x9D3A6462FE3383B4, 0x5C34C5AFCF47546D}, {0x801B09FA86063235, 0x9E66F9604A182678},
+ {0x7804E572E9D41E05, 0x62179449052C22A9}, {0x8052DC45C0875CE7, 0x0C779B4583BD480E},
+ {0x1800F8E5D883440B, 0x8D76BD84A5B1BF76}, {0x2E8D077F4DFFE416, 0x302CEC63EEF67499},
+ {0x2BE434D80DEEF757, 0x821642243ED8F0AE}, {0xA34E8CBCA647C03A, 0x47C433531FECCA7D},
+ {0x4A49CB34AD2F5F87, 0xF1A4E5F1980CB578}, {0xD4E169964AEF2457, 0xDF470EF7B8A6C328},
+ {0xDFF2517050A184AA, 0xF7579E36723D9D97}, {0x3553657DE395D0D7, 0x0BBB6E54CA82AFE0},
+ {0x264485DA465FDFA5, 0xD8D9E7189FACEBA9}, {0xA3DE65F81098442F, 0x3B2BE80533E29393},
+ {0x103288E5DD560B13, 0x65EF70E855F02D70}, {0x0FCFBEDAD2C3C4EE, 0x17869989E489DCC5},
+ {0x5054BE1F96D4CB00, 0x7801DA15DFA8D97D}, {0x82357DB78D0E35F5, 0x74B3CF8950464EF9},
+ {0x44394A4F78A243EF, 0xC128603170EDEB3A}, {0xBCD2A54E44CD8AE5, 0xA7E52B7F77E52812},
+ {0xCCA8B8E98881BB06, 0xB181AC4E12A29924}, {0xD74B9F5B304C237D, 0xBE773B69D197EAD1},
+ {0x795AD7F7262BBACB, 0x91DDC5C98606BE10}, {0x48FBEB4770F31482, 0xD222B07B9E124E27},
+ {0x503299F6AD850F60, 0x4A43383D2C445068}, {0x52D9DA2FFA9C1355, 0x35291820D90FD4F5},
+ {0xA1EA98F171633198, 0x4A8F973A56818E4E}, {0x40EBAC0A2F2C9CC7, 0x4E8AA2912680922E},
+ {0xA94F4BB768BD3156, 0x2D8443283990E69B}, {0x7B7FFE013C8532F2, 0xD1740A370BFEDA38},
+ {0x1C69194FC376831A, 0x5722C07806953E73}, {0x3083D3F605A94AE4, 0x2A053F9658878E5F},
+ {0xF3E670B2231D7EB2, 0x15BACF57B7BE67C1}, {0xBEB9123AFD19DDB7, 0x7D584AD8E624C28E},
+ {0x2590CB12BA44A68C, 0xEA9483257A29A36A}, {0x8BCC96C97E277365, 0x9745C232AE133C6B},
+ {0xF905F0036F414FFD, 0xC42438C8A02D683A}, {0x29E098FAC59A863C, 0x1A28D9FCE7372AEA},
+ {0x560495072172D6FF, 0x949A61C3881CE951}, {0x26D854CC58389F49, 0xE3218442A9682B49},
+ {0x01F8C708A7E43E27, 0x03FBF330B38A46CC}, {0x80168D5D28BC6BD3, 0xCBAE103000F537CD},
+ {0xF9F4DD3B371DD439, 0x26A92EA3875C1184}, {0x7ECAF0F99BC80158, 0x3B5E8A5039DBA16F},
+ {0x67690848B6418461, 0xFD916A8392FA438E}, {0xF8411738FC6D6C89, 0x67AD1C37B09828E0},
+ {0x7E607E726D096F00, 0x81592CD4D724340B}, {0x70E5ABD70667D6F1, 0x49809BC184835CDC},
+ {0x952A1024DB0969E7, 0x44249C60434D0628}, {0x668FDB36A28592B2, 0x7ECA7645EEFD21D5},
+ {0x7CE3F1B72B1B242F, 0xAE49F232B60B731B}, {0xD31AF0020854AFD3, 0xA44D3D870C657D9B},
+ {0x972C7BA6DC33E0FE, 0x233D4D6E830C85AF}, {0x18604BB5949BBBCD, 0xA4AC659FCC05C0E0},
+ {0x9AC0A77018E34AAF, 0x3702FD839C457992}, {0xB9986295E7E371F7, 0x857EA0BD003D4005},
+ {0x7BDF07733FA01232, 0xB4E6C0DDAA6E1BC8}, {0xC8D3CEDDC4696C5C, 0x7C2E972008024F7C},
+ {0x37539A2DF3542E71, 0xC2EEDBD51BA64C30}, {0x7347594CA6B64191, 0xEE3FD358ADF598DE},
+ {0x7BA310D80385F980, 0xBFB489B54497C621}, {0xDAF70F56A40F0DFA, 0xCC9CB1B3BF137527},
+ {0x3D4B28F97CFA4E42, 0x79EB96B2A2C13C99}, {0x84FDBAAE5ABA182B, 0xBB4A20433BE62D81},
+ {0xB744E0ABF2C18E1D, 0x9A78483512DE05EE}, {0xECDF7C7F47C11E6A, 0x820AD8CA98B97C02},
+ {0xA0F3164B671B272E, 0x3DE093991A17EC81}, {0xCB5C55586AD36142, 0x574E74726F9C06CC},
+ {0x4AD2B0642172C930, 0x9D97973ED74DDA1E}, {0x62930437A5E00D8E, 0x938D4ECDBC30F356},
+ {0x78464F423988B754, 0x6C13089FFE420D8E}, {0xD78F14E230FE2B88, 0x57396FF4F3A9E372},
+ {0x5ED67887D7F2D021, 0x7547737EA570AAF5}, {0x596C9BAFEE57E127, 0x8D6221421B4169F2},
+ {0xB0DEBDFFB44F097C, 0x0EC53E9FECD71243}, {0x6C77D163421D3664, 0x202DA880479ECE0D},
+ {0xBEF81FFD68CFF27B, 0xAF10E66F3EB822BD}, {0x5925AF0856ACEB16, 0x0F21EB6220B7E0FE},
+ {0x50E9E340E67BC90D, 0xBAA46A8487FB5832}, {0x37F1798AE9A36398, 0x2B63EC8048D70AD2},
+ {0x1CD80C2420B3685F, 0x343874DB86E4F764}, {0x2D28837BCBDD0947, 0xEC80A036BDE64836},
+ {0x55C725B6054D589B, 0x2751F6141D37CD0E}, {0xED9B634F4C36A5B2, 0x22FF45CA9DF1261C},
+ {0xDC21A48E6E035C06, 0x7FE7EC88EFC3AA5C}, {0xDD0A8BA1BBA7BDC5, 0x3417855FFB43A12F},
+ {0xB15C3304A5B51EA6, 0xD098BA4C8F57612A}, {0x3A95B6E381BD231D, 0xA56DFFAB95B3B4DF},
+ {0x5297E86E0D70E3AA, 0x8BD60EAE7F16C2EF}, {0x0C84400B1353E9EF, 0xC6AC6F614FCC3E04},
+ {0x4FC32128C69D1EB1, 0x14D9F5F159A4FFC4}, {0x98468986BFB5C994, 0x4031492E19FE579C},
+ {0x02CAC1E10FDA6DDC, 0x1EC71F269F3DFBF0}, {0xE0737C8F1CEFC6E4, 0x688AFB9069577B15},
+ {0x278AB38C2A24D881, 0xB7C3E57FD2EF556F}, {0x44F658B4940AE910, 0x79324A3503A86309},
+ {0xA1A0A4D6772CA86F, 0xC8964B8AAD8C11BC}, {0x292E65A1C87815DA, 0x13275AFD50726D43},
+ {0x12022890D8783362, 0x3ED19FB5E807EF35}, {0x4459F56CB3BB2BC0, 0xBF83060D51B18BDD},
+ {0xF7B152DFA0596EAF, 0x10819E730C65DC7D}, {0xA2EF58684551FEB4, 0xB6F62A1B51561C55},
+ {0x3A6AC7DD6735D6C9, 0x4EAF1DAD275BA944}, {0x390FDDF31D32EE9E, 0xDFB492F820C4AC9C},
+ {0x8C9D872A95DB6571, 0x648F6989B4D33641}, {0x03AE7F16AF68D717, 0x0EF8F9DB494C865E},
+ {0x92DC2DEB39BDC535, 0x0DAD02451B55F858}, {0x318E2A6119C0BE7F, 0xD0F3F3503FD1BEAD},
+ {0xDD12EA94E7CB58BE, 0x3443029A264D3EFB}, {0x94D9E66DF0C75EE1, 0xEC4BF6D90AB9A34B},
+ {0x0512181344273EBB, 0x00329208387500FC}, {0xFA8850E40C72F66D, 0x491D03CB49CDE0EB},
+ {0x1421EA69BC0F0016, 0xDE9CA27B6523599C}, {0xE93BF451D7E0FDB4, 0xE941963BA2DB1999},
+ {0x8C10307BCB259322, 0x9F543A91996FC21F}, {0x28B0075FE7D8465C, 0x2C5EC1555D3688B7},
+ {0x588086E9CB329D8D, 0x2B2EF400D1538696}, {0xA29C2EA68D13D076, 0x9294F2D753A4558E},
+ {0x22C0B72FD21989E3, 0x2CDFD338D0A4BF7B}, {0x9B116AC8D94702BC, 0xAEDA1DF256A3D92B},
+ {0x1D07193A0499D4DF, 0x9CB4F1E5F7EDB426}, {0x39BF95C30CC9A272, 0xA349821D205C3751},
+ {0xFF54CE8F91D73E0A, 0x4FEA5A861E78B134}, {0x9DB8BCAC6D0121A0, 0xEE801DE5A0F4898A},
+ {0x232453E5A1009DB9, 0xD3BF5672AF7F4A79}, {0xB079CFFF75509DDB, 0x831824B88B1D2BD7},
+ {0x971ADF22CB0BEF35, 0x96BA27CCB2A6F597}, {0xEF9B75D4FB0CD4DD, 0x95D1CE2C63375C1C},
+ {0xBF99AF5C770CB9A4, 0x6E10A1337455C0C1}, {0x9EE19884862C8937, 0x1AD55910FF83BA98},
+ {0xE7B2BF8B4FA2E724, 0x28A63899125757C8}, {0xEEC2E85BA07C8BA6, 0x4C474FF5B874CABB},
+ {0x086309B68296EBFB, 0x7E12002353AB6027}, {0x50C45D957EFF6CB4, 0xD4323BA5949E81A6},
+ {0x256A080FC59C4CF5, 0x538D6F3C149B0B6F}, {0x8ED0364DC2154699, 0x7679005C25BA0C1C},
+ {0xC5473AFFFD697E4B, 0xBBD7D37CDFCA2927}, {0x1DAD320FE8B7A0BF, 0xBF8C20B6D60483F5},
+ {0xF49CD2D0125A830A, 0xB350252EAD96B6E5}, {0x3D38501216C5DE5E, 0xF6A1CA1B80AA7829},
+ {0x313D70535364D042, 0xF0CC3F8490A105D2}, {0x97286016AF4D5A77, 0x194460AC60FE6ED0},
+ {0x831BC1902FCA5D25, 0x7685455161634276}, {0x9BA127E4F70C3D03, 0x6593DA2023E0EB68},
+ {0x0B06D85A67AE6188, 0xBE3068C053931AC0}, {0x814EF3C0685A1154, 0xE643DBB26729B762},
+ {0x455E2A52EAE93BCC, 0x2411EBE59326EB72}, {0x8FC4957BFB432671, 0x65A29B47C7B7AD39},
+ {0x48F29A7B722BF989, 0x17FC78FB590AEF32}, {0x5752F587D4AEFD1C, 0xC4C070BDFC26FC0F},
+ {0xD9E8FA03988A78C8, 0x9CDFC157E649B07D}, {0xE6C195B02AF9C415, 0x28770CE72FE4758F},
+ {0x9802CC84A129F1B3, 0x1096CEA94E2F8672}, {0x383B0727E082DCF2, 0x825D181C024F137D},
+ {0x2C070C0C8CE34562, 0xC58A0536B8695088}, {0xEB50F1B2AE805779, 0x7B52CB522FAD498E},
+ {0xAAB19FB37D143F79, 0xC18C0E279F51D9F5}, {0x54E6EE6C2B394ED9, 0xF8309BC69860814E},
+ {0xDDCD97DF05133522, 0x096E1FD0CA15B8CC}, {0x767D1322DC42416A, 0xE6ECDA10A08D584A},
+ {0x6F5609DEF2A537B4, 0x88F6F9BEB488ECDC}, {0x58FCFF00E2733820, 0x76E291F87891FAE5},
+ {0xF3A9D8A1BF26EA17, 0x0057014177E2E1A3}, {0x1B20C512FD14BA1C, 0x34A582FD359863A7},
+ {0x9D68964C2219AF1D, 0x6073D325A374309C}, {0x969DD2AD7FFCD14F, 0x74972B8FF64514F7},
+ {0x7FB883C8CFD0E89A, 0x440C140249A24537}, {0x43CE1DE658EB595B, 0xC9A9A31953C97220},
+ {0x2259D08F577FCE48, 0x4D539E5BA617E8CC}, {0x8FF953EF49838602, 0xD30E871F39EB7438},
+ {0x43486A2BE4F31647, 0x9C300574B1423358}, {0xF418E98A08B97E60, 0xD6083B0D03417A3A},
+ {0xD3721C15AD5709D3, 0x99576AE1A6B81A47}, {0x49CC07AD4045F6E8, 0x8DDC81B817DB1577},
+ {0x53A17153425809EC, 0xC8E130825471E4BD}, {0x28B0843C623BABDE, 0x21490A6B62F2B098},
+ {0x76C4B9AD14009273, 0xAF7E715FBE88348B}, {0x85D98B893FF9D031, 0xABE496B8C52506E0},
+ {0xD9ED3215CA337F03, 0x6B76AF3F56AEF161}, {0xDA0D9BD3820ECAEA, 0x9A892D4BE0A20052},
+ {0xE94581E0E2CB1FCB, 0x8112541BE37991F1}, {0x3690FA62FEA2E486, 0x469B8F23A7E19026},
+ {0x6A687533C1D7E336, 0x939ADE086C216F6A}, {0x985CF46367348A52, 0xF981EC9231A2BF2A},
+ {0xFF77F87BBDCC7EC3, 0x19B3E78D92ED5BA9}, {0x7920A22123963249, 0x59BFAD769ADFB41D},
+ {0x0DCD3731AF3C9C80, 0xAC9C97DB14CA4A82}, {0xC5D4DCC6D78B24C9, 0x5ED38083C6F31D8E},
+ {0x978D534674F2ACC4, 0x694252A440F03F31}, {0x4C13E25AD824F3BC, 0x3F7E2926A7729ABF},
+ {0x1F1369BC84953B25, 0xF59FF4705227ED3D}, {0x1A2C52C6FC5903A2, 0x777FDF1FDB2345CD},
+ {0x96BDCF90D888ED0C, 0x5B9F30E3C4C69C84}, {0x585B21D0317F5852, 0x456863682239A178},
+ {0xB8388E6DE88863D0, 0xA35D185CB9D4A302}, {0xD6FF4E591ACA3088, 0x11536E1995D80FDD},
+ {0x37C38267A7D54FBC, 0xA1CFB6428E654D8F}, {0x4463B05B6E6ED1FB, 0x17E7E78BCCEB018C},
+ {0x435438B68D530B95, 0xB099A722F575AE10}, {0x6F96F2ACDB007727, 0xEF2806560F59807C},
+ {0x892C15842AA42806, 0x4D298C6B378184B6}, {0xDCD5D416F95C6B77, 0x2218C9323BE8CE24},
+ {0xA01CC1D6FA351939, 0xDF08AEBD762D08F1}, {0xB81C978C2B997E5B, 0xB56F7820FE95198C},
+ {0x65A7266371C7022C, 0x97742557E283851A}, {0xFE53FDC426F2E4F7, 0xEAD889A30CA51EAA},
+ {0xE0003E2EA5D4E4A9, 0x2B7F55739F842690}, {0x5F1934D7F952771A, 0x62502BD3602AD15E},
+ {0x33C28445AF6A46AA, 0xED1CC31FD8F3B362}, {0x4A0A609DFA5D70A8, 0xBDD96438E5E82828},
+ {0x3B2C8F4AEA30877C, 0x28A4D77C2FFDD861}, {0xB335264FD7488754, 0x740804B3D30427DC},
+ {0x71EF48CDAEAD224E, 0x25A84EFB9E711E3B}, {0x59F1F8520F877B9D, 0x8E51087BDA6A0C7D},
+ {0x3D3D2C203A5872C2, 0x453A4DC560C7619B}, {0xB56E59AD05C33E7A, 0x9C3B2E117913D360},
+ {0x2F4813DB2F0080B5, 0xFEBCB3B8E6D2F91F}, {0x99BE5981B310824E, 0x1CD3097E7E041B81},
+ {0xE41D4FA35A4BA967, 0xA28DC360CF01C1C3}, {0xC5C35C186C4FF576, 0x25AF8719F5D65AEA},
+ {0x74A57B8ABF590261, 0xD7112E34E833908D}, {0x8332154F5B796005, 0xC79CB77F8D9BF9D7},
+ {0x83FBD512B70C6381, 0x4C7A1B194C8C32D0}, {0x1D350114368D2F2B, 0x591B729D3AD31DB2},
+ {0x0CEFE98B41C1878D, 0x28327635A484172B}, {0x7AE18E52F57E5347, 0x008C498803AF00F2},
+ {0xA3E332D8CC0B3699, 0xD4CBA94485476D20}, {0xA667B32E9CEFB859, 0xABEDF69A335EF115},
+ {0x78EB819E25C746D9, 0x648ABD12DF6C8B66}, {0xDF6C3554F0FB7BB4, 0xAB56CEA97430FE7A},
+ {0x8E1E87ED6CCCC8BB, 0x220CCD69AE7EA8BC}, {0x944C0D1450F17E98, 0x94A04FF22185E960},
+ {0x8788733EC505F510, 0xA3A2CD9C4C23B7CC}, {0xC9940D5E436D5168, 0xB1799A095E2C6C8D},
+ {0x79412644F9F66F0F, 0x062C21A1C5CEE972}, {0x92244C2509C82DB0, 0x292C6CA388F5792E},
+ {0x641B4AE3414E65F3, 0x5769B93A44BC0408}, {0xC7EE10F190317D18, 0x8A8438D5D005FDB2},
+ {0x9604E3966C216975, 0xAF1F71C7D4C752A9}, {0xF1C673875FA54C1F, 0x4BB2797A3452E7BF},
+ {0xDB80A34707DFD8BB, 0xDA56FD63D82D84C0}, {0xD89F8A2D7F301604, 0x8394A803A6C45795},
+ {0x8052AD2D40F9052B, 0xA5E3147A4CB83DE2}, {0x85690F79A535714D, 0xC0969AB369DE829A},
+ {0x7BF67B86BBFA88C5, 0x185E5998DAE23D19}, {0x182FEF35CB094604, 0xEFE2F4BF1A303700},
+ {0x777D521BD3E51BD3, 0x6A21302965518A81}, {0xD24719C6BC99DBB5, 0x1135CBD1E23446F2},
+ {0x600AEA6C0EAEB2A0, 0x8F0F22F9B645B88B}, {0x2E28FE289DDA27B0, 0xE349D04D097DFDEB},
+ {0x56CAAC7BB92FAB46, 0x6C28BC6AB0AE9961}, {0x7F11755BF07A6B1F, 0x86EA6FEB417E3072},
+ {0xF6E13BFF739CC877, 0x86BC09A907641CF0}, {0x2264B7EF4F143296, 0x4E4E08886D8F03B2},
+ {0x2159AC9094BB0DBF, 0xFA51E47794BF2C02}, {0xBEBA1DE485423CD6, 0xD489A9C5ADA6E715},
+ {0x2FC4E2E14E83B3B9, 0xFA3DE2E92C9BB966}, {0x1271C4C177E04D3F, 0x6F6FB8D14E44208D},
+ {0x5BB968A019C74A46, 0xF66CB1A8AE5D81A6}, {0xA409C0B52FF95D1F, 0x7A5B6FB428FFFAC6},
+ {0xF213404897FAD1EF, 0x1829821C3D7BFBF5}, {0xE88604FAAF50B1FF, 0xE76510E2DDF6684D},
+ {0x5D07A20DBED1208B, 0x2D65680E5677F77E}, {0xC5ED45A1ED9D8B30, 0x8D017C884EEC1A64},
+ {0xDEC1BCE1EA387DAE, 0x2B3893FDBBA58479}, {0x60ACB899F1B06BCE, 0x11F0954E77046B0F},
+ {0xD93B9ED13D74456E, 0xAEF99A367AC83811}, {0x2F2ED975C9E51180, 0x3D29BFB1716DA6F9},
+ {0xDF0A5C6DF14C3EB6, 0x5ED1CB88039C82F7}, {0x6B0741DBE62B094E, 0xA5C55AA2C5CB0E8F},
+ {0xA2EEEDEB18492F86, 0xAA6D5D045475E4C0}, {0x676D953F6C5757D7, 0x5C5F64AE14021B5C},
+ {0x3F45A912CFDADF1A, 0x3AC1CB2EA85F0D55}, {0x35222550214EA844, 0x52554856A382BF73},
+ {0x9A0EF16F78FA9629, 0xE097C7E62E8C2144}, {0xAD8BCF7D8FA2E404, 0x00C7E4DC77A7D450},
+ {0x92C0EB2003F47CA5, 0x5160C803ED267059}, {0x50CDD0E0E2D74239, 0x9369D6AAEA47FAD8},
+ {0x9FFE56440BB54CF4, 0x60803DDD5490958E}, {0x113F0113C8F24377, 0x89AEACC8E0B8BF47},
+ {0xD6661A2819A83C2A, 0x9481B9D768F37056}, {0xF24E6423CE9C7594, 0x0E393D29DEA0C782},
+ {0x7452AAC491694B09, 0x242D107715AFC891}, {0x8DB59993F64E2AC5, 0x36AA46E17C4AEC72},
+ {0x21649FD1BAC4C681, 0xD8545CFFFE4CC597}, {0x3299559CACB905CA, 0xE6A5B47831F8DE51},
+ {0x9E95FEF33DE7F95A, 0xCC75671AF69DA9D6}, {0x14946A33A6B324EA, 0x702FE9AAA8B97FD2},
+ {0x7F4616BAD23D58A1, 0xD068F76B45974933}, {0x36878F57854CCA14, 0xFDFABA641C5C97B3},
+ {0x1F5F513FFCB05B3C, 0x3C44C9A9A7FF31E2}, {0xB964B30C988916E5, 0x002A5DD7F6935DDF},
+ {0x3372B06641650B86, 0xEB008F7DC9A8A685}, {0xAB5FEE56A8B19D07, 0xAE95B2998D22B1F4},
+ {0x9A43BF7383013346, 0x10B143E8A1471CE6}, {0x9BBFC3B814239633, 0xEFCBFF4172EEF940},
+ {0xCE23D4B5CF4C164C, 0x133A36CEB545E968}, {0x5EBB7F3F8F87A420, 0x393410A25D8765B8},
+ {0x17B2A3BF218DEC38, 0x929022AC5FD864C9}, {0x47B435E0601D9FDF, 0x150EE2B029EECCD8},
+ {0x49717C5898E064A9, 0xA57D8788CF64DCA0}, {0x6D3D1EB0B0117343, 0x0F1200A9B327C1E7},
+ {0xDA9A55F8A371BCCD, 0xF4FB0CB1B0A0F805}, {0x2BFFC26503A2B73E, 0xAF14AC1C798D7EC9},
+ {0xE71BA059A5B35750, 0x4BF3C0087B1466B2}, {0xD590D10C85C2BB0B, 0x397A8EEE2414CD6C},
+ {0x22D4F2DB096ADD15, 0xCACD9D4CE9A67088}, {0xF5B4F61E783A880A, 0x1E6F922728D5CA88},
+ {0xAFAB7D36A46DFEBE, 0xE8952B2D80B699BD}, {0xF8848445A485C39C, 0xEEC74C32E1DB86D9},
+ {0x9BE69AFC20604FE7, 0xBDA8B3DB9C2375BA}, {0x3F8434D418CDBD76, 0x0D8ADA6E2E600FFD},
+ {0xCADFEF11A12AD9C8, 0x0C183D3A161DEDE1}, {0x26A8C0C649484A6F, 0xA563D7CA41A7235A},
+ {0xD57833DF281015BA, 0x4D5E6ED410CE1F65}, {0xB27941DB5A2E6FFD, 0x65FFB53F0E00AF0E},
+ {0xE447276578AE6ADA, 0xDF9F1CB001512047}, {0x7D3AF039A0957748, 0x78D4A8764C5CEBF6},
+ {0xF3CCCAFDAC1010C3, 0x958EEFA013E1BEA4}, {0x62DE8AFAA2A350C4, 0x8240B806D293AEA4},
+ {0x7C30802C26DE2A8C, 0xE4A0401D2921730A}, {0x88FC81AC51638268, 0xDFD94AC96EA337D0},
+ {0x71230FB0A432E621, 0x8B8B1D54394B61CF}, {0xBA7ABED9C1E92573, 0xB79CC5FB543F4368},
+ {0x18C70E847C93DCB3, 0x94D63F605959BEDA}, {0x0A455127E9E1187A, 0x067637ECAB498975},
+ {0x6F463446DEA886DE, 0xC22CECF6DCB87B75}, {0x91EE5032D148EB02, 0xFFB92D5315B6CCE4},
+ {0x429E60A4D2358682, 0x8928603D6C9D8325}, {0x9A02B65D02E1D2DD, 0x4FD8AB1CBB534110},
+ {0x5DA48AC9678FD5F3, 0x325D92C8195AE38C}, {0x037F4FA443BD6AB5, 0x30F84132F65C6AEA},
+ {0xA7501264B976F794, 0x10A2589C97E4ECD0}, {0x62D2FB059478B29A, 0xCC844F2407A71580},
+ {0xA31B4E3F665D206E, 0xB237BBAF0161B62D}, {0x586B6669D3C2AC4A, 0xC571E4159B8B17FE},
+ {0x5DA43AF265999AFF, 0x067DF37324EB61EB}, {0x1128D297AB29D6B7, 0xAC0A510C3217CC65},
+ {0x90492C94995BE3AF, 0x5519A9C109EB2E0B}, {0xFCDA9E31361D8BCF, 0x96C0A78DECA71673},
+ {0x483D666536880697, 0x7F0E5CC8DFBAECC1}, {0x526AF62587624E1E, 0xAB9A1B22052CCECC},
+ {0x574400A9308D4E5B, 0x4343563779416702}, {0x84A9723E70B018B5, 0x2074BE14A8F0FB63},
+ {0xD683C055EDA8CB76, 0x05CCEDB13DF51099}, {0x562C5A2C831C65E7, 0x3F09B95CF6030714},
+ {0xBEDF07E7B3092F8E, 0x00FF3F4449780FF8}, {0xF473540BF3CD23E2, 0x5F911BFB21262D31},
+ {0x7F6B6F9D42F5BD88, 0xD333D8886C87DBCD}, {0x151BF47883D9E61D, 0xBEE99387A0C3F465},
+ {0x310A24D9805DE2B3, 0x1C69A9B4E9B02959}, {0xA1B6F7ED52D5E959, 0x4A6FA2B389D600CA},
+ {0x09E901404A28F7BC, 0x1A79DB32D26B8EF8}, {0x59C1799F7191529A, 0x450CF916ED99402B},
+ {0xB142D3DCF0C2C089, 0xCECA90DB9DD20387}, {0x6F621AFD67D306DB, 0x80BDF34D0EE147F6},
+ {0x8B22078ECCBF1F16, 0x9ED8DBD8179A196C}, {0x6A9980EE59649C0F, 0x5965BFAF6C610888},
+ {0xE4F35D8860F896FB, 0x55A438FBF06C4452}, {0x88458460013D702C, 0x6BEBBA6C4DB03FFC},
+ {0x300B0D667CF4DB26, 0xD6AB664BDBE88B43}, {0xB388D37D7D3111BF, 0x186FD17A7A08B88E},
+ {0x7BE4B2322559867C, 0x4711F7AEEF5500CB}, {0x353CBD728B377654, 0xF4BBD7C61CDB94A8},
+ {0x733AD527CEF1C5B8, 0x0BC6B3849EDBE665}, {0x44E790C9DEBD3F46, 0x15376CD4C08376C6},
+ {0x18DC6543CE187A90, 0x575311F7C20A6B3E}, {0x1B758DA6A444950E, 0xC683D093462DE9D3},
+ {0x11E44952347F586B, 0xC6882965C8CDDCAD}, {0xD7F4C58E80852C65, 0x3054F202F0CF593C},
+ {0x8B1D60532037444B, 0x011E5D6DCC88796A}, {0xEA7F2093B9D804D0, 0xB6A2ED462A0366F1},
+ {0xA53926C3836AC9E5, 0x28FE258C3C75C14B}, {0x2AAC3CB1621E8D11, 0xFB07804E5A664553},
+ {0x24CF801D6813E309, 0xC321408470B551D5}, {0x650A9C3D89EB36CE, 0x66E9BED8FF43921E},
+ {0xBE0A6EEA22EEDBDB, 0xEF51EFFEA538ABCA}, {0xD042ABA062553E97, 0x91A4C2772B6C0668},
+ {0x20D0B142EDE98F4F, 0xB4D87586492FA49E}, {0xC79B30A3A01F40EA, 0xADC55E95C085288A},
+ {0xABA912ECDC4EC902, 0x8734F8AD5D296069}, {0x3966B8892186F63D, 0x5BBCA6A7FEEF34D5},
+ {0xFC1EAE728CD4759F, 0x57F1FDE95E6DE28F}, {0x697C3E194E12D61E, 0x2DB375929A02B8A3},
+ {0x8D0C4208C5A43E87, 0xBEC1A1A9D76D601F}, {0xD16B6B885ABB1F21, 0x5EAE5485BAA1999B},
+ {0xC93BAD2848A8082B, 0x2A4C07883F6E4A6C}, {0x5FA106AC05086E7C, 0x01B64FE8E5733A6C},
+ {0xFC619E2DBEF02F91, 0x1970D1CD95B82026}, {0xA19232167EF11E41, 0x07FBF4257A3D98A3},
+ {0xDB845C90FFF844A4, 0xDEC1C6DDFB32B4C4}, {0x3A2B34747F3CB105, 0x9292456135184A78},
+ {0x6B4A724D2149DE71, 0x8AA25F0BEAFF33A0}, {0x44EBC6DAD7829D6C, 0x54563C531303A7C6},
+ {0xADED52F2FA9B65C2, 0xCBE3F0D77E4C26DE}, {0xAE0BA5A4F3209D8C, 0x8D5F70AF5785E4F0},
+ {0x06166B169B21BFD2, 0x2175D39C65B75090}, {0x3BB2E5951AF0D88A, 0x004192FE32F51179},
+ {0x5FC3036DE42E3746, 0xB86E088D8A3E4715}, {0x958F2A4FB2E1FCB3, 0x096A56939941F101},
+ {0x6F2B42348EB77CFE, 0x172C2CC2982B9699}, {0x1D40AE7823888985, 0x2DA509AD65C3BB98},
+ {0xC585229BAB8E9185, 0x1E3272F049BBFE6D}, {0x9131C5E81906ACFE, 0xD60B33A9B7213487},
+ {0x8AABDBC6045BCA97, 0xDCBB934D08CC164F}, {0x4D4DCDE2C258A1CC, 0xF4EC90EF94350D6D},
+ {0xF0470B87C3FD5B4E, 0x095FA639CF1DF065}, {0xF12C3257A53EA40D, 0xC3367B15F5EA0FA0},
+ {0xAFFF2B04E86F447B, 0x1DD1842ACD50F3C3}, {0xC7FB5870C2EA2399, 0xD42023B1D45746FD},
+ {0xC3E4B46D24E6B0EA, 0x085632FD4617B5CD}, {0x8E32BFA9AA0A96CA, 0x0DF1F551F19C36E6},
+ {0x0E60F4D4AAD47DBB, 0x27C17AD3EAD68D28}, {0x62419A39543082FC, 0x0D216257B9117752},
+ {0x4B8E8911B6E256C9, 0x916CF7F86101D0B6}, {0xD452576B8038C699, 0xA17787AD72537553},
+ {0x4151915EF6C3FA0C, 0xBAF2EEE24F872876}, {0xCBBD3DFA1C81BA63, 0xABF60DC8120FCEF5},
+ {0xE793C77FE1A48BD6, 0x7FD13F09BEC0A8B3}, {0x1AE39A8BDCC9CAA1, 0xA95AF579E93007DF},
+ {0x894765037F9EA612, 0x8541C6441B3E2A30}, {0x458CC5654CACA25E, 0x16818A57E2C4B533},
+ {0x3566BFC44E00DB52, 0xC1949531329F9C09}, {0xE6AE66B9BB98845F, 0x34E38C4934AFE739},
+ {0xA404F9012EC7617E, 0xF84E1D079B2F56E2}, {0x42039FF72E32FE83, 0xAF87A48F87B5904B},
+ {0x06FC2A8DEF2F3C9B, 0xD92984C835233A5A}, {0xF6A3327A4FD40721, 0x741D123F5627B0BB},
+ {0x949EE325946F06D2, 0xD7B4AFB60F1940E3}, {0x5F58AF9F3919C663, 0xCADC0748006A2FCF},
+ {0xE7438FB26EAECA5D, 0x0F1B392C93E10FE9}, {0x656CFE4D43592C2A, 0x1E88605F90A0E13B},
+ {0x0D8FB945B0B7E3E4, 0x09EA0EE9525E3E1D}, {0xB3AC7E15FC320374, 0x13A13B89D005AE59},
+ {0x4BD39EF6E7820EF7, 0x71E38CA1E46A20A9}, {0xAB4E8C1414F99A4B, 0xC8C289BE93F631A6},
+ {0x6ABC1A0013D809C0, 0x01C497B4230561D3}, {0x5215D46F924E50A2, 0x4D21BD84C739B3E5},
+ {0x856A8D53B627858A, 0x480CCDFB22DF2C49}, {0x04204B90FFE83C51, 0x762D7A60652B1AFF},
+ {0x050F470312C96E7D, 0xDF280EFC5DB31A42}, {0x9465A624A323B166, 0xB1ED2765E2153956},
+ {0x5B05F0FEAC818E16, 0x1C3493A30143CC24}, {0xC55BFDF20C3F9688, 0xB9EDB0B427A79125},
+ {0x1B72864FE64826AB, 0x9E9C980F8F29F13C}, {0xE65A1B61613A1F9A, 0x6AE9F253F3007D50},
+ {0xE84D60A48EF6AFFD, 0x0B7F64C72DBBF127}, {0x1D89785089C6F3F1, 0x8BB60A253DD6BF5A},
+ {0xE24ADD3F933C0353, 0x939DD383BF11A083}, {0x1E3097E60E4FA6DD, 0x488D85011BEB6695},
+ {0x8FD62C5FA2CBE01B, 0x02B9D576727325CB}, {0xAE20521771D92D0D, 0x83CF65296419C441},
+ {0xCF9C1F635070C9EB, 0xC56FE25EA5E288E8}, {0xA0CDF626ACCA53D4, 0xDD0CC7DBFF1A024C},
+ {0xE034D191E991B3DB, 0xAE4E1BC63E8166C3}, {0x4EC2D2CFFD25A9EF, 0x19F042CE896FC211},
+ {0xEB65C4EEC9910D8B, 0x6902104B3082EABF}, {0x303B6D05DA8DE347, 0xACD119EB42DC7F91},
+ {0xF6ECEA035C1C013A, 0x8232AE233E5B4F34}, {0x0D6CD4A7D07CBFA4, 0x79989509C1805265},
+ {0x792CC720D91C4C46, 0xAB4B3F3621492669}, {0x74BE3BF0604965D1, 0x2D44572AD7457E6D},
+ {0xAD938E35837A2ED5, 0x658086A1C29D927A}, {0xD84E4A70D6B6A87E, 0x24A631E9B3F69EEC},
+ {0xD7A176E0F293DA55, 0x5BCE1926D904542A}, {0xE00F153C8149FCAE, 0x6D294C079B7A58F6},
+ {0xEB365B4E71282DE2, 0x46019B0B0E9AD300}, {0xABBF97A272D0E67B, 0xA66EE4660244F54A},
+ {0x553DA545408B6383, 0x9E0D99EEE0A92C8A}, {0x38C8F8914EB71E66, 0xB18CAF483160FB9D},
+ {0x06F30E44DEF34E03, 0x1F29EAF88B057732}, {0x493C123155F2CE93, 0x9C504959AEA5958B},
+ {0xED657B042D9196F5, 0xC4B1313D1DE302BD}, {0x7421BC8F2BA5CFFC, 0x85E5AF821E77CDAA},
+ {0xB24EB292F7B4CA27, 0xC1DAEA9B04E97546}, {0x06E0A93FA0334DD8, 0x8A6260E7F644D626},
+ {0xED50B34B26F84679, 0x8DB1A3E301B21672}, {0x49CAD2405621094D, 0x7B5268EC1B29638D},
+ {0x17DE03BA94F8482D, 0x85D765C155B38CEB}, {0x66800184D307DF6F, 0x29CD46216DFB7D6E},
+ {0xD23101AD3E08DD8B, 0xB29CE982373A1DF2}, {0x28E9A618B72A590A, 0xBCEDB67AB4F8546E},
+ {0xD53DE2349EAB018E, 0xF486C2C5F6C74A12}, {0xC38877B8DB9B9C8C, 0x038EF83F35A02C26},
+ {0x2F194AD2AAF37F20, 0x7298B50C792969FE}, {0x67E91118692C4DBA, 0x30E450BAD1D01D74},
+ {0x8CA4240F90271138, 0x781D8E8583C95E14}, {0xC4D0E77692C2C29C, 0x97F47965554D84E8},
+ {0x04B862F3EA0BC253, 0xFE6C45526F6873AC}, {0x8108B6ECF5BF207F, 0x7AB773F9D5A3BDA4},
+ {0xCC923F65EC9CF14C, 0x96F8EB4C5228F7D4}, {0x166B9CC05D145F63, 0x092B39A99035E35A},
+ {0x01434EE452B8FBF5, 0x3EF9ED15F7A3DCE1}, {0x6B48A09000F4685F, 0xDE438164C1F6066F},
+ {0xFA01BD61F03F42D6, 0x54908103B53869F9}, {0x382E94BA241F5B13, 0x8FE27840980EE2F5},
+ {0xC88357713B97E03B, 0x7C956C9549EC2BBB}, {0x228DA3F3A9909333, 0xBB13C59EEC19A060},
+ {0x47E258BD0E7754D7, 0xDAF5A246A8E4C16C}, {0xB826CA5726AA67C4, 0x4ED25D6AD0357DB4},
+ {0xE399E71E6CE8A168, 0x706F256FCB6C52B8}, {0xF4D1D70BD68614F0, 0x31BCB5398B8A2558},
+ {0x971B1F5FD7E964D1, 0x348F68333EBE5914}, {0x934440F16B687F0B, 0xEDEB4A37E23A49E7},
+ {0x8A14756A38CCDCCD, 0x21451534CA81C16F}, {0x3CEF875BE280CAE3, 0xBC808C3E6EDC5817},
+ {0x4863C645B2594615, 0x8FA88E4240A755D0}, {0x8E91D07645AEE512, 0xF3BE3B11C6BEAC26},
+ {0x459F14F2136FCDE4, 0xD313C273F1A6FA07}, {0xA50782908BE708BD, 0x4420E41C0ED4F92F},
+ {0xFD2790FD28FDC151, 0x7D956EF2C32E81DC}, {0xD1062CD8C74EC09F, 0xFDE24E14AB46DFE5},
+ {0x7E25492E47808396, 0x79C7C0B117EA4F76}, {0x3F0836329D770C58, 0x6CB064513DB40CC0},
+ {0x2110B7DD0C70353D, 0x6B6077633E4C944B}, {0xE927ACD7EAFC275A, 0xABC961D1DEDE11D8},
+ {0x6922A3F7664CAA5F, 0x8A4C5E083A9C9F89}, {0xD32790544F238295, 0x275A1C604FE57CD8},
+ {0xF7DBEF68D9ACBDDD, 0xB647C1A0AF6C9C75}, {0x61D9306EF3AD0D09, 0xDA397403DFB65E93},
+ {0x63765D8E100CCDAE, 0xB50BE463526DC73C}, {0x0047D2B88B46C4CE, 0x55D3195E722C9E7F},
+ {0xB2F3E1D0823CAA70, 0x2F60BC416233277C}, {0xA8E0B92CAF6DE6BE, 0xDB657421CA03CA70},
+ {0x7A92A0DDD1D720BE, 0x845F3C0DAE3FB5C7}, {0xD32C2C592426AC97, 0x12670EDD555153A6},
+ {0x3C16008F0B765DFA, 0x50279E00C0FB330B}, {0x4CD4072BDB6824F1, 0xA5968D554C0B78D1},
+ {0x63F96D8ACFADD4C8, 0xE09B158D8776DDF4}, {0x594CD814E765371C, 0xAD1544940D25E6D0},
+ {0xBE8B294464146BB7, 0x09A26472D2DD4617}, {0x63A0BECE12979C6D, 0xBEBB50556805C2A0},
+ {0x452482754EAA00B2, 0x8B73C5A0134C405B}, {0x8C73033EB8378C85, 0x0829AEF8EFCE5E2A},
+ {0x98F8B5306531EB80, 0xECE918EA53A9DFEC}, {0x40350CBC4CD7BA4D, 0xB6EFF7746DD3FBF2},
+ {0x205081A63496A881, 0xAD8D3F603FAB23B6}, {0x8EDFA3BA30BBDBD1, 0xF08D735918783A80},
+ {0xABF4DB5D741F5328, 0xA28A0D8B11297D3D}, {0x8C05658B270E2F4C, 0xC4446F0BED1406BB},
+ {0x212D9176428EB1D9, 0xD75422C677CBC923}, {0xCE6B541049A71436, 0xA283B88324B0FD7C},
+ {0xEADFEBC5D00995EF, 0xB60143CE6A348F22}, {0x738317504F7BAB2D, 0x0988904765578D37},
+ {0x277C6DC08EB7B7C8, 0x95916E3D9306B8FE}, {0xA8D6FB9F7A543BC2, 0x9984F3BDD0AEA59B},
+ {0x7C9BBA78A2CAEB0D, 0xA3E30EE54AEF03DB}, {0x393A26CB4E9CA536, 0x78F439BCEFD47679},
+ {0x1D0A988B391CF160, 0xDEA8E395617A0884}, {0xA8CA94A7BA5E694E, 0xF0DB36441C0DD8E8},
+ {0xA51A3B63D70EFF59, 0x4CAEA5D7A57E59C6}, {0xE80B2572881EBDB8, 0x610EF264CED7953B},
+ {0x5AE3D71E72AB833E, 0xFA5D6DFAFF220AF2}, {0x833640CCE6C44C3B, 0xC99B5AAC0372BB03},
+ {0x5DFB9C139FAC7692, 0x6135E58A74ADCE80}, {0xEC2794165A0E3A36, 0x524F8990987F058C},
+ {0x14AFC5FE86124199, 0x84A7C16D0D57E6EB}, {0xE3D9403F73E70700, 0xDBF4D141F25EEFF0},
+ {0x4E26F427FFDCBB7C, 0xE11EB93201657D2A}, {0x5FD990F09AF68007, 0xD7396DC030D38065},
+ {0x72F8A768F91EC547, 0xF31BEA428AA23607}, {0xA46F176F0221A07B, 0x5A5EB02635721979},
+ {0x5BCDF4E4E626E1C1, 0x4DC03241EBA578A0}, {0x2E457F50A91C891E, 0xD1C79B32706F57D0},
+ {0xAD2DB482A1AF1FF6, 0xF1EBFC10878C0E93}, {0x144CE20477E6D872, 0x56101761B5FBD5BE},
+ {0x27594379E9C348B0, 0x44CC315E8851887E}, {0xE8A3F6D36B102848, 0xA94FA89FDEE705D0},
+ {0xB2EB7503C706A5EA, 0x36C2BA00DAE6189D}, {0xB58B1F5138C7B2E6, 0x8893971FB8096683},
+ {0xB76240ADB58B35AF, 0x668138B93AB02F9F}, {0x6603A3C47C5CF39E, 0x53770EA82929A0E8},
+ {0x75EEB76999793AFB, 0x6895F2E62837FDC9}, {0xDCC2B846ED8574D3, 0x3D8645C889C57325},
+ {0x6BC11AF6CC41EBB1, 0x4470A87C435DB2A4}, {0x08EC56742172C41B, 0xF308C2514CD99E78},
+ {0x829CE884DFAD6BF4, 0xF187621FC24B634E}, {0x4830555268A5A5F9, 0x765E66CE89804488},
+ {0xD188357AE84428DC, 0x0593E5BEF23E6EF0}, {0x0131B179A7ED82B7, 0x518D58FDBB23A4C8},
+ {0xA00864C1CD96A556, 0x43A8F32776485678}, {0xFEBD362FA303BCEE, 0x17F0E989921DA11E},
+ {0xAABC58916637A6E7, 0x6972B4CC0ED08D34}, {0xAC2714773044A502, 0xC3B0737A038961F6},
+ {0xE40E058CEA2B89E1, 0xE592E296ACE6FF9A}, {0xD5367EFDD911CB6B, 0xEA0C6196BD1E8148},
+ {0x479AAAEC22D5B8D4, 0x88A4CA775C1DBDEE}, {0xE969EDC50E2AB57C, 0x83FF15F9BDA65017},
+ {0x17E85A6D8E399C96, 0xABCC6FF2C3CCD1F5}, {0x088A60F545479216, 0x52641608E3BB75CC},
+ {0x829E29C4E8EB22D0, 0x9C78A17FCBB22882}, {0xE095DA2493BD879D, 0xBEDA8FD0F14FC8DB},
+ {0xB268FAB9309DE903, 0x31990A088252CEA1}, {0x6CB2D6D28594FDC4, 0x57909F01B1C9F621},
+ {0xBC30A4F498995F6B, 0xAE0B8CF67DA4E4A8}, {0x9D66E273DE446EDB, 0xFB15612DA4F955BF},
+ {0x427F1B0FA12C92FF, 0x712FC7846AF4AFFD}, {0x61D800A9312843F2, 0x6A24B2A65C549546},
+ {0x1DB8879EE8917F3C, 0xFE9C3505F13C2F79}, {0xA8FFC38C146D0290, 0x3212896A3CF0332B},
+ {0x24BA03FD93D5E568, 0xE53023484CFF6A3A}, {0x521F399C8BF4E49C, 0xF76C2C1C1DF0D584},
+ {0xC5E5D81100B55CC3, 0x14785D94A5A69E76}, {0x95B7F0F24D3A0328, 0x8B6DFDEF714D0C0F},
+ {0xA19DD059B540DD65, 0x8D271EAF6B3953F7}, {0x964BA8BF6A50B9C1, 0x0C0E1C0010449265},
+ {0xA2F7403968843F14, 0xFF6584694E752B76}, {0xC536EC66948FEAFF, 0x1FFAE9CBBDFCA19E},
+ {0x8FE762B98C03CB69, 0xE954DC06E4FB213B}, {0x13FF8BEBF196B7E9, 0x0F89A3BDD608B676},
+ {0x6F4D114C96555750, 0x64BC9A475433533C}, {0xF6551E5988FC4D53, 0x5F27680A3CA3A687},
+ {0x309F6543F1B55A70, 0x6847D919AAD6E84E}, {0x7309F005D1FD2BB3, 0x8A8868293DBB9156},
+ {0x0D83011E425C207A, 0x0FF8EC4AA3260BAE}, {0x84F68B6835559C2B, 0x3F1FCA1D62910456},
+ {0xDA909125B1974880, 0x8DED819E053A3957}, {0xF11253E9897160F1, 0x3123857FD8B2FC3E},
+ {0x4A37CB55654C3CB3, 0x1308A745F5C47BC6}, {0x840BEFBB3EE02A55, 0xDF528877CE9A42A7},
+ {0x5E24B68AE3C8B119, 0xC4DB18134DC6CD1A}, {0xA953E82023895E2A, 0xCEDB39896F61EAAE},
+ {0x1FD9B41867C4E193, 0xBD91A33399E08229}, {0xDA4CAE4385C50A0E, 0x6AD5C726B66DB2EA},
+ {0x6E3AAEC65252CAA9, 0xA27C5FD7D4769DC8}, {0x8BA75272D9073AA8, 0x359B853AA4685180},
+ {0xBD8F366079DC1B33, 0x1D3F64ABE889661E}, {0x6A3407E2D16CA73D, 0x2AA95785B93DB9D1},
+ {0xDCE304E39B7A87FC, 0x6900E11828F0E44F}, {0x8AD12AD7D6D5AFC6, 0x401729A60CEE7720},
+ {0xD238C4818FACE7A0, 0x5E9FE534473F6C2F}, {0x8112980C8BC78902, 0xE8939211FE3AB4F4},
+ {0xF609F51B7544B192, 0x24226A0CE6E79E36}, {0xAC43395E924EB37C, 0x87951D46157B1D9A},
+ {0xD73B6B35289A1FBF, 0xA00578A85B89F178}, {0x59516E6F62AFC441, 0x4ABE76568A69EDD5},
+ {0xC23D737EF64DAFC5, 0x9781E381C22EE20C}, {0x337C0C2B6823535D, 0x9E8237F2A6F4C346},
+ {0xD68D379FC7158944, 0xCEA74CA003DCF218}, {0xE980625651EAA4DC, 0xF68778294DB0A87B},
+ {0x1619ED65BEC9747D, 0x20BD47674C18A943}, {0xBEE853E4C1E8E362, 0xFADCBAF35B2B6AE6},
+ {0xFBB9B28A3B7D344C, 0x00F00A7CAE3E0CC2}, {0x38A0DB3A9BCF2F3E, 0x900AC5FAF67D1AA0},
+ {0xA7B2C004FD16F74A, 0x0E536F152F776638}, {0x077E0D9C3290A37D, 0x16BF7DC16C9D0715},
+ {0x8D1B8E6429A728DC, 0x4DDE7B600D4B5747}, {0xAF9700B7177F32A4, 0x337531BBCA72FE22},
+ {0x909DD9DC30830CF9, 0xD0F4CF5FBB2CD4B7}, {0xA77E6D1B4E09B475, 0x016C3B7C426630B4},
+ {0x6B905EB6EC147EFE, 0xC1292943332623B0}, {0x20FD4613F8A460C1, 0xEC4DA7867717345B},
+ {0x20037D9BA860D61E, 0x6AAF2D65E56F1486}, {0x55E835C4A73DF189, 0x2A146FAAB13AA064},
+ {0x25BB053531D98358, 0x6E883BAB82D8AD1C}, {0x04279B36B0DA969D, 0x2C648A2CB7CC52DC},
+ {0x28C8766CFC698F5A, 0xC45A865E708705EA}, {0x5AA27C92FB2F89E3, 0x9F3A891B08814B61},
+ {0xC139D676E283C0EE, 0xE4A01E0E80C09486}, {0xB653EFA61042B5F7, 0x47E9BDDCEF32685E},
+ {0x0EC29E04EC404AF5, 0x9CEF084F28D5A0C3}, {0x5120A0C4FA13DB15, 0xD2DB4D3D83117CA0},
+ {0xB34AA716255794F2, 0xBE7FDE410B8950E3}, {0x7FD97339E646527E, 0xB095AFA9438F0ADE},
+ {0xA61EC45EB06CD0E6, 0xA190AB0BA82381C3}, {0x33B01E3AA350B29C, 0xC47AE9AE8E2B605C},
+ {0x217A58D871962E45, 0xE3988D0B0234968D}, {0xCD4906851B8F8F68, 0xE596BEB42C7B3A2B},
+ {0x5FFD309110D74632, 0x9B5250A709A66FEC}, {0x9AD2D8E57651AF5C, 0xC0B14A7417AEB752},
+ {0x74DE9F5C8AD65EA2, 0xB293D8E63B034F29}, {0x292280F570EAF9D8, 0x1C663A2007AAC2FF},
+ {0x0C4DE83112EAD246, 0x6F221BA1CB1E3BC7}, {0x0C99A5E18887A1E9, 0xF9FF2D69B55763F2},
+ {0x8BDAFC18EE800CAD, 0xEA36D686C3EBC5C6}, {0x6A7965E3D16468C8, 0xFC0AE9377F6C0D21},
+ {0xBA71F3EA4C0B2CB4, 0xD5480E331820EE9E}, {0x7DB1B0B5C47FC347, 0x630EF02E319C8BC7},
+ {0xFE89653F3F91B2ED, 0x6E8BDBADF7D37E71}, {0xB208C431E1D773B8, 0x5A65E6754D6983AA},
+ {0x856DD3697E104984, 0x27F1E7EBDD2AB124}, {0x83A5E6F87AC74B9B, 0x1C0D8B0BC9E4D58D},
+ {0x6FDA166D7D427DF3, 0x4F69C90037C0B554}, {0xA646F3AD1682ABAE, 0x9C2D4288A2814FD2},
+ {0x83CBBB67BB33EA27, 0x1A9CF9EDD300A5AA}, {0x05342642A1EA842F, 0xA7F2D476F95B8C74},
+ {0xE5A7875B5DC76EC4, 0xADBCA560777043FE}, {0x010A7462F6E5C40C, 0xC68C2ED1EBDFFE53},
+ {0x8D06FE8AF05F61A9, 0x765931F546C1B616}, {0xD84993296954CDB9, 0x21AA3B4F1193C8D6},
+ {0x7F83FC32BFA92D90, 0x43B916A806F754BC}, {0x7DE3CD12B0016D81, 0x94C039F2D1965A62},
+ {0x815514DE2C321206, 0xC4997E240AB0A69F}, {0xCE6F39CE87F677FC, 0xD2E4E9AEE69832AD},
+ {0x41D89FFF7DB99F94, 0xC984EE40FB372A52}, {0x1BA8CA22A1EEE978, 0xF16C7CFEA257357D},
+ {0xF7DEDD0D41A19FE0, 0xA91ED4D6F98E9F0D}, {0x2B914C36AC47A244, 0xE9155EFDFF97A185},
+ {0x87565316E6A12E31, 0x4C5E69345F0FEA82}, {0x59800ADD780903C7, 0x5E2C0CAC96A2341B},
+ {0xA33A40F4A4CCCA60, 0x82FFBD2EA7096EB3}, {0xF7BFA4AABB99C937, 0xFB0973459B93F042},
+ {0xE742794773EC29C0, 0xAEAFF6BD77FE691A}, {0x6B138E2A243EDC04, 0x88BC1591AC527CB7},
+ {0x52D5A572A70614AE, 0xE753456F3CA88EA7}, {0x48F38E3960346058, 0xA4657B516132C209},
+ {0x8685F3B3CC89676D, 0x22B6D172894EACB7}, {0x48AC39098E67C3ED, 0xB7B3499E8313AE7E},
+ {0x6EB9219E48FEA316, 0x809AA5958B3A4BA5}, {0xD68A44D3C8FE8E47, 0xBF99AECA7D1709CD},
+ {0xF3FD6B7A3822275B, 0x8315DB97B1FD29A4}, {0x9BF166EC9D134C72, 0x54B2E56845B02C91},
+ {0x81EBFB3F5D530437, 0x864DDFB603093BE1}, {0x616DF990891CC2D8, 0xA13F82557804CA37},
+ {0x057ADD9B3CE4E952, 0xE66FFB6040F9895F}, {0x62F23000DF6F8047, 0xB91B7A7F4A1D3811},
+ {0xE26B3DE7BD57C088, 0xD298CC2CCCC21A3D}, {0xDEC4A464E9927EB0, 0xCE6DA48909A01645},
+ {0x7216CB9CF952C08A, 0xC042A02BC82E9771}, {0x31FF9B8176E17DDC, 0xA5C00DB67B2CA35D},
+ {0xDD4CF6CA643F967B, 0x7A8701B1B7174CB4}, {0xE47D091ABFA4F7AF, 0x9AD07FEB477F5EC4},
+ {0x172FABC1F76922FA, 0x1DEDA92F1DDE1018}, {0x51AA7A46AD75E4A3, 0x4D22BA02E0461C34},
+ {0x59BAF86501DB4187, 0x71C64FE7DDDDF2E8}, {0x216EFA4A416C15E9, 0xEA3F073A7063F620},
+ {0x3F3AFB1DA432B9D4, 0xB954C4EDBD915068}, {0x604EDF4A87A6F817, 0xDB8D5144D7751C9A},
+ {0x8B5C1020CE229F5D, 0xD260760D62A13A4D}, {0x1907F30B78FCB5B0, 0x4CAD64D1897FA899},
+ {0x2286286FCBE37F1F, 0x1436317A8D5A4DFB}, {0xAAFCD4C94EB98237, 0x20EAE709B20B61D3},
+ {0x67EF73A3AE6A0C9D, 0x09C47B09B0FEA7D1}, {0x095C2CAEF45E3F08, 0x29265AA12ED4B506},
+ {0x0BF7B4640E92A7A1, 0x107DAEEFA2914876}, {0x0FAC636CE3B88BDF, 0x87C4D7A65D124153},
+ {0x5D71424CE3608B17, 0xADCF16DFCFFC80F1}, {0x34C445511A34846A, 0x55F75BF8428FCFA5},
+ {0x95E5013EF9C7C56C, 0xC6B172841AA4B43F}, {0x8468335E17B1F6EE, 0xDFF70D73B2ADA33A},
+ {0xE5466EC797384636, 0x59F2253F91AAC4D6}, {0x8298D90EDCA6C2CB, 0x4C037111DAE5EBD3},
+ {0x691DB9DB68F77BD3, 0xC497A0C6CD0406FF}, {0xD355FB3C9AB0FFB4, 0x94C080D40815E2CC},
+ {0xFFC781AD733F417F, 0xFC8F14409215A3F0}, {0x05A734864BD4C277, 0x023DEC4F1A24A333},
+ {0xFC9E8D78CDC33D29, 0x88DC9F07A46F7499}, {0xE895C32BC7CE6483, 0xDEA5C64316FE2C52},
+ {0x3FAC4627D2CDCD33, 0x4A9029CA349FF5BF}, {0x51A4AA225F698B51, 0x820C2E417929DAEC},
+ {0x11AB44552DE4800F, 0x014249300D29875D}, {0xDEC2B9BB462341B9, 0x904734F7C6909B9E},
+ {0x596CE42856EB98B5, 0xBA0E32BACC49A71A}, {0x2C3242967FFE06C2, 0x938C7C8B695FF5D3},
+ {0x70E20816034EDA33, 0x2EE013FACDBAE7FC}, {0xECA381A4462B3AF8, 0x758BF6EEC982DCE7},
+ {0x8D3642551DDA5413, 0xEAE67BA524B1847E}, {0x16D852978FAC0756, 0xB6BA7D89AEC44815},
+ {0xF8C1439BE45DA26E, 0xE76AE772D7CC515A}, {0x929EDFB99F1A2102, 0x8FFEF77C0596BF2D},
+ {0x8F18E8F83D7F576A, 0x991F76E46E133A31}, {0x03955CAFB5871BF3, 0xB9EAEFAEFED79F7F},
+ {0xC1185ED2CBF28799, 0x14415F158C2C189F}, {0x045A2C9A44C0BE24, 0x605A5A9D4BB1DF65},
+ {0x59782D3AC3D8862C, 0xF5A434A8DCB4E9AD}, {0xD50ADC1533087655, 0x0205BCDA6506C09A},
+ {0xA482BCEC68AFA926, 0x007EEF7746DF5FD1}, {0x6815BA84D09F2007, 0xD4114492719F4F2E},
+ {0x483A273CE0F06725, 0x0B588B39F00092C9}, {0x0AB7A68DF031ACE1, 0x1FAED6C919FBB78E},
+ {0xDC35B804B90AD583, 0x1AB312E3EC1CA2D7}, {0x4B20DFC27960C536, 0x9DCB71E309E16694},
+ {0x0D0C78DCCD3A9AC5, 0x2A24156FA7940651}, {0x2D4A5C26D40867EC, 0xA70A33B24EF2772D},
+ {0x1663BC22862B6CB7, 0xCD3966DD88342D17}, {0xF4F6175570675776, 0x5FBCB7CF31D771BC},
+ {0xA767359EBF775246, 0x92830FDA50F5FD87}, {0x45AF324238B06C04, 0x0E49B5657D83129D},
+ {0x8DC8A7301483C4B3, 0x2F5E6FADD5DFF8C9}, {0x3ABAFFC5475A089D, 0x0CBF4242FD61B836},
+ {0xFBF7F07AEF02DFD0, 0x28EE8E2336F72541}, {0xB12869C2172031B6, 0x5C29C6C03B64A65C},
+ {0xFB9B43DAB5E9CCA0, 0xA6D9764C0C4F2E06}, {0x61C077FB169AF59C, 0xAC0146A50DD1D887},
+ {0x2CF9D300B175E1A8, 0xC61DBFE89DA27FD2}, {0xA37A9839D5E89701, 0xA9ECD28DFA1DA728},
+ {0x9331AB2FDF307EB6, 0x87D1FE9DAAF9136D}, {0xBEE9C1A122C3F87B, 0xAE29797EDDCCFE27},
+ {0x0AE051F27F4C2EAF, 0x88E5053152658B0A}, {0x2BC4EBAAEAD0A79F, 0x04E9CE81AEBF7F47},
+ {0x8E8C8CF9BC37DAF7, 0x696F905AAA7D2826}, {0x035FC19FBEE94366, 0x2E326ABB5BB80AE0},
+ {0x4CA15C7533BFAE9C, 0x8FA47568D7DEEEE3}, {0x350095AF192B7334, 0x379891195071A251},
+ {0x9060389FD03AB2D7, 0xBF5FFD23719F4A73}, {0x9CD0B72C7C7EB4C2, 0xA8424E80B56E186C},
+ {0xBC1A94E342885F47, 0xDBCB05AC634F7F7F}, {0x4251EDF8CEF48667, 0x21E295C9368D08AD},
+ {0x218CEBEACC0057A5, 0x81FACCF20DB88814}, {0xBCA461470B4179C5, 0xACD758DF5F7B4DDF},
+ {0xB059DFCA1E6D5A7A, 0xD3018D862BBB6991}, {0xB0607AD6AFA23EAD, 0x259F8B6DE4BB9BB9},
+ {0xF7168BE0EC8A1230, 0x85071CB6F97C9E75}, {0xF68D78A1CD66ACB6, 0xCA0A2543E167C04A},
+ {0x28FFEE1CC6CAF7C3, 0xD4481CE91CF94CB8}, {0x1BD83581B0B76611, 0xBA75D19D8A12FBA2},
+ {0x85FEB5D8FB013B8C, 0x1ECEF264248302CB}, {0xCB9CF96140D38276, 0xF6442A9CCA5B198F},
+ {0x56517797D10B6C83, 0xEC9C423DFD2B2E99}, {0x0B0B9D6FD320D4B9, 0x5B3D6D176D7A436F},
+ {0x5E894DF0A0D2D935, 0xEC9D49AAFE51F075}, {0xF784F45F7DC450DF, 0x908C126B316C7806},
+ {0x35F3060E8D90C91D, 0x668D9DC932A726A1}, {0x2323A1D919EDA324, 0xDCD39D53FC13E5D6},
+ {0xB9629AD72009A718, 0xF7A870DEB081373A}, {0xFD0949F7AA165B98, 0x0E084DF61AED1441},
+ {0x203BA2218172EF32, 0x87E6209BFBC5030B}, {0xAA9AD828A2A6E9E3, 0xEB4FACA0E7DE1060},
+ {0x0955DFBF7347C4D3, 0x2ACD18B1185FD7B5}, {0x7D25ACB01D838FD4, 0xA9BDC607D4C2CC48},
+ {0x9E67F673F7B77A48, 0x2E6882912F328EAE}, {0x1D299DD6BDD91A3D, 0xD6C1E4C971385757},
+ {0xE650E1D1C9054A13, 0x8D455F8B8F35E1A2}, {0x353172328455D495, 0xDA1193D26C6AD648},
+ {0x68AA6BF2CC11FD97, 0x26682311870C97C4}, {0x9598954E677001FE, 0x4CAE1CCF5B4D7646},
+ {0x8B0EFCF07C674963, 0x8DD928D0CA910000}, {0xCC49EB2D434C5DC1, 0x1D10DFE65D3F154F},
+ {0x514FC3AFCBCF3AF4, 0x38BBA50FE26244A2}, {0x51FBA4CC82CB8888, 0x60E127C71369FD84},
+ {0x8EDB045C0B4D27ED, 0x95285F2811E5FFC1}, {0x92642640FC5716A5, 0x5C18FB09A4CC4481},
+ {0x2EB6FE1BC565F247, 0xD8A4B81C8D1166F2}, {0xA2E1631DAC2F2458, 0x540126E4632370A1},
+ {0xD4E3D65181668A6B, 0x2A9E6E880A8918EF}, {0x7546AB8C711FA02B, 0xACA10314B0468731},
+ {0xE09D206D084FDA01, 0xA3AB3EEF9CED74CD}, {0xB3D123DFCDE8365D, 0xF9957456AC76168B},
+ {0x640631F9B9A3DEB6, 0xA1377350B2175601}, {0xD6C9E500824BC3C8, 0x22EF341AD5A7E00F},
+ {0xC2EB70129A3686CE, 0x005EECCED19650AE}, {0x79D4FFF72AD952AA, 0x74A8E053AD8A57E8},
+ {0x1DA6BE9D3A6BD9B1, 0xF93A377022D61A1A}, {0xDBA66F252203E34B, 0xBE8C9E4042AF9679},
+ {0xA156F71A0BC3B2B8, 0xE4E44CD0D8205656}, {0x49FE3045EC98D2EF, 0x4FC3CF2828512156},
+ {0x17284BEBE22B9193, 0xD71923838CAC7FE4}, {0xC9AB3EBB641F71DF, 0xE2BF9247459B74EA},
+ {0x4C7F372E777BB503, 0x3C5C695134BA774A}, {0x6CEFF3AC9ACC539A, 0x53E9A02F712D8A79},
+ {0x247E7203BF9D79E8, 0xC96DE80A7D029326}, {0x583F658F5C3001E8, 0x766146DABF34A7C0},
+ {0x1FD65185115FBEC1, 0x6AF469C6E4568AB1}, {0xF49994FA217689AF, 0x8C683A68798600B3},
+ {0x76A4399F5B684B7D, 0x4AD39A3523DDC9DF}, {0x53F56566EFE21DE5, 0x9C927605D4B9B44D},
+ {0x05160AD8FF829696, 0xDA0FE1D07EC6D8EB}, {0xDBF4D3A0AA0012AB, 0xB058C999181AB692},
+ {0x6A1619411ABC3105, 0x3F7544A3FC6E8540}, {0x409824801D76FA26, 0x177A3B84E819A9AE},
+ {0x06E092398732BEF9, 0xD4B7D14CA1C3E40E}, {0x210FBB3CCC0B567D, 0x03B8488607976B22},
+ {0xF18D764FDC9A68AD, 0x03BF830B020CDF57}, {0xBD07A562A392F527, 0xF7B5703B8B417DF4},
+ {0xFA8A6C2F96E13F0C, 0x64887A9B44915C19}, {0xFB1DB151B8FE8538, 0x8146AEC8E4362FF8},
+ {0x32746038961A859A, 0x7FBDECE9123F2455}, {0x74A853A77D4950DC, 0xD634BDC893DC6885},
+ {0xDF7121A8CD679677, 0x9DCD5310205F7D53}, {0xDCB4279CA634A83A, 0xC5459383FFEB6F42},
+ {0xE746093B2A00A856, 0xBECA3091A5C0EA4E}, {0x2A2CFCEC07EFAE7E, 0x4630609AEAF2E657},
+ {0xB4AC7EA5C0B07307, 0x732A42CC677D30EA}, {0x3236E020F923A393, 0x380570AF1CAED87A},
+ {0x3ABE7B7C5A19181B, 0x9532F47CFDA952DA}, {0xE28EA918D3C4D973, 0x5583763E2382BDE0},
+ {0x44AC4162B74E2072, 0xAAE58BC8D7A234EB}, {0xCAC803B5F9E6B8A5, 0xF5C3DC8B894FA6D6},
+ {0x6FA6E9C3713DA31E, 0x2150089007A6405E}, {0x9A66F109C6A87C7C, 0xC1F9BB27C8224E7F},
+ {0x444C1E77DBDD1BA5, 0xF262D4E3C65A327E}, {0xB797FDD2E14329FA, 0xC5F5A4D3583BEC65},
+ {0x70774E8DBD4950D8, 0x3C80F0B1C02AA0BD}, {0x89B81DAD90D1A652, 0x5695054D0FADC863},
+ {0x0E4BDCD49A2DC215, 0x969DCAE0F30B173D}, {0x00B8DE660C401DF5, 0x655D0C950C8D6399},
+ {0xB9F76E8817A530B4, 0x56B892CFDD9E4120}, {0xC1C7647FAD619CAA, 0x2153E18F22E5A1B7},
+ {0x25FAC4A47659E92C, 0x63D624CF9CFE3915}, {0x66DC5BF6851491FB, 0x5D0EC292336ED45E},
+ {0xF7844F792AE25E32, 0x0C3E9A6AEC7AA083}, {0xBDC55DA47E2F68E2, 0x7BF59AD67588532A},
+ {0xE782A705F2B31BD6, 0xBCB9296C9A30FFB6}, {0xA972A1595087A4F5, 0xD8F1592ED7A0A119},
+ {0x38F702320BD2EB79, 0x5E0DA135CE157602}, {0x0306C5594AC9CD86, 0x30C70EDB1C0515AD},
+ {0x97047585F0A55FB7, 0x8EDAD51806CCCBB6}, {0x30C7F21EFE5A418E, 0x80FF0E2197BF29BC},
+ {0xA25A7C408D02A0D1, 0x17D958F2ACBA885C}, {0xDEA983EFEB33ED0F, 0xC37FF877AD54BFE2},
+ {0xBBB1DF7ACA0126BB, 0x990682B978E8CC93}, {0xE75F7CFDC9D84811, 0xCDC80EA490A18A1E},
+ {0x187A0534B3DAE2C5, 0x3E51085B6565895F}, {0x9A23B5D0708FFD23, 0x0B2C86506BC2487E},
+ {0x02B6B6E11E205863, 0xCBC23769B62D9B6B}, {0x1FA176641015A67A, 0xC905C077FE8DC6E2},
+ {0x01D0B4D606B7BD8D, 0x95A71767EDC4A8A1}, {0x43C428714860F081, 0x0CAE293D8DE9292E},
+ {0x37DEEFBBFB615AD2, 0xE2A3E8A196CCEBF8}, {0x4104DCF3EDB3F606, 0x5AAB3DB7687FB34B},
+ {0x936B826635AC80BD, 0xF3AD68A05F284355}, {0x476D3CAF0D6209DB, 0x5F65BE7D4F213829},
+ {0x5DBE49B21470404D, 0x657E6AFCFE375794}, {0xFDF45BBBC5AAF65B, 0x9B8BB32FD97A32DC},
+ {0x748DE2DF1AAA731F, 0x3FFA8BA9AF6E4C68}, {0x34CD051DE4FC41AE, 0x458EEC2B8F4BD76D},
+ {0x73A65F6D464A71F5, 0x4908CCA81369F5DE}, {0x926CC858F7E6015E, 0x74C4C53A3F620BE2},
+ {0x05AFE67213502643, 0x91F5876AB59F204A}, {0x26353F54656B5120, 0x18EB434A92D547E0},
+ {0x0A36D0F91EACDD49, 0x724ACFA34309AA55}, {0x238DC638BF46EDFA, 0x4C860EE5612FCEB8},
+ {0x1277A30AFD098718, 0xF753D573403B7B73}, {0xE4CED2BE94AE50CA, 0xBB543C2648CB898E},
+ {0x92F4C71F910B9655, 0x89FEFA0E8183727B}, {0xFF834475A059C758, 0x5165C5F707B55A2B},
+ {0xF9D247866B36E306, 0x9A9092D1A4BC64AF}, {0x4F13F97457A6A9CB, 0xD2E96752EB6D8E59},
+ {0xCE3C39F7008A0E05, 0x9425D2BAD7E50CF5}, {0xEA3BC81DAA0FA923, 0x8E8CD0C01666AEEA},
+ {0xAD1643794D47B737, 0x2F37FB7FDF1DF5D8}, {0xC50C2778D1930099, 0x4CEE72C9CEA5E661},
+ {0x5439CCD48C1274F2, 0xB2E5330A30BE1E7F}, {0x9B13FED8911E1BBD, 0xAFB9EEAB2D7F0E63},
+ {0x79217B38876E8DFC, 0x69CD11413F4C18B1}, {0x14DBE4437766FAF8, 0xE7631F672CDE26E5},
+ {0xD00DCA70E621DE0F, 0xD308738116BECC95}, {0x8F200A3BF950A133, 0x76728C69B563C1EC},
+ {0x7CFC6C14D37033D0, 0x86EE42D333C29669}, {0x49A8F35612FB759F, 0x59B1BBB04FF1FCEF},
+ {0x501C9BDF60B70214, 0xA3A325C567B833B7}, {0x80FAFB36D83C5541, 0x5D7778403C2BC273},
+ {0x32CA7E0D4684B66A, 0xE35882925FFC18A9}, {0xC63E275BCD2C13B2, 0xFEB0D1EFC1EB08C5},
+ {0xAD805FA880FA53FC, 0xB7599ABAF59834A9}, {0x6857F55CE7A54EDB, 0x16A2729BF97DD724},
+ {0x33D8D22ADCE52BEA, 0xE3AD5D8587AB794B}, {0xD4F6B95EA4D5030E, 0xAE73F6398B5F6A17},
+ {0x2A979DF5C3291E61, 0x97750C89DB32F53C}, {0xE490BEADB7ED5D9D, 0xA9AB7EAE259636BE},
+ {0xDDE2F93A3B1DAC87, 0x8A709A5B8143CE29}, {0x6E1D1FE049FD33F7, 0x154B397B33943D5E},
+ {0x0CB39991AE988C07, 0x4FF7CB6200C040D6}, {0x4623FF10B79A5080, 0x92E9B49F1539FC99},
+ {0x115281F7AFC8F43C, 0x3D5ABA60BAD06EBC}, {0xD5A50E7C18CA899B, 0x832DAB93656BF030},
+ {0xC365EE880EC53F8A, 0xAA4689BBA18D904C}, {0x9887575311D645D5, 0x2AC5CD365DD24465},
+ {0xC04F1BB54345B8CE, 0xD0D0D1A223D24195}, {0xF29793F2F168792F, 0xFF3F4F4863CD7B0E},
+ {0xFE8160DAE74B0EA9, 0xAAFAEDB8837A1450}, {0xA0C57DC8BF44FEE9, 0x31E55C0275DE2914},
+ {0x7964FCE0E7E47875, 0xE740385FB73A57D6}, {0xC40A75E470FBC387, 0x97723CEAAEDD304A},
+ {0x846A941A5B4350E3, 0x346C51D81F2F9EF2}, {0x9C66E97518B3A27D, 0x162FF57A8B2886C2},
+ {0x422200DFC022758D, 0x820CD0F95DCB6E31}, {0xF3AF4F9206F4D5F0, 0xE5F19D6EF6CE8602},
+ {0xF5ACA4CBBA4A0EEE, 0xAFE62C3315A3CB76}, {0x418B0B7AB6481A4E, 0x43ED696E587AEEC6},
+ {0xD0762BCA232E2F12, 0x3A34FA0DD1B7BDA3}, {0xFF33DB9345F5FA02, 0xD2B6DF32597CA648},
+ {0xA5B712FB90FD4E64, 0xCAE92B022A50E187}, {0x3F3D924B31053B60, 0x55F493CABF126D2B},
+ {0x34AD2C0890673964, 0xA3B4A55C5B2732CF}, {0xC6613C24E2F8F651, 0x588CF7F4B2C88B5B},
+ {0x7C4A14188BD95A35, 0x707EACB3D7FA00F1}, {0xF70778EA184EFC52, 0x5BB059D0526BCBBB},
+ {0xAC58EA4807A16C3A, 0xCD132CD1241C9E37}, {0xDC7B1E6409721A4C, 0x4DE7D0A74E47038D},
+ {0x9C83A36A7A67AADF, 0xB0B0C3C1CA7AF091}, {0xD98EC7346E69F1EA, 0xB786BAC4B1B53B96},
+ {0xD1FB8774AB38040B, 0x875BBC218001C1FA}, {0x2FC6B659030EDDA7, 0x4DF6631FD9A47476},
+ {0x88698603424B7D4A, 0x30D466819F212F47}, {0x40AD99F5896DAAFD, 0xF49810B01BCFFC4E},
+ {0x0B7B295B5B4FE284, 0xB8E3E0D938CF8CB3}, {0x40DEF36DE1930D86, 0x0F6C47D83F035983},
+ {0x4219411290A14C9A, 0xC12A43BEB6AD737A}, {0x2BF45EF9449B564D, 0x00C853614C70F1C4},
+ {0xB16D72F603E61011, 0x9CDB518EB9E9F077}, {0x9AA0CF63C270B071, 0xBB67A65E6C3A6EB7},
+ {0x20084E56F0B9A289, 0xA72944B2B5562FBA}, {0x6F96095D67DC01BD, 0xDD1C81FDE9F26470},
+ {0xF6E18F2B76523C20, 0xDA24EE7D471B97FE}, {0x4BED5D1E211B5403, 0xF8BF6248A12EDBA1},
+ {0xAED0858DAF2C7BEA, 0x429DC7F935FF4E2A}, {0x378BC7BE9931C416, 0x2AC5721AA354842A},
+ {0x4FAE8973FA64391F, 0x36DB90594BA54429}, {0xE0D2FC418E457B90, 0x878FC414735CBAA3},
+ {0x226C7FBF651B4347, 0xB453AFED1AE5DFB9}, {0x981F17819834C4BF, 0x003920735021390E},
+ {0x51458A9D2FE5CEA8, 0x337DEEC81947C13C}, {0x2C352A95E5DCF47E, 0x596EAFEDBB1EA038},
+ {0x46F6E9101981F441, 0xFC671C77A18A6637}, {0x4B65E24A910A8AB0, 0x898D68517894B787},
+ {0xC19109E56BA51B31, 0x7A0CD4BB27D23FA3}, {0xB769BEF6CB8AB01D, 0x33D53BFB1ACE1F4C},
+ {0x81B7A9DED6B87F8D, 0x382D4B562CC4747C}, {0x4E0579CB4CDBB1CC, 0xC920876A61412104},
+ {0x7E5651A4781EDB63, 0xA50737FC37DDB170}, {0xA875B435344F025C, 0x6F4765D0C1509360},
+ {0xE55BF9E2FEDC3702, 0xF6CC2E204B34B604}, {0xDF8483A2C4E33EE0, 0x79092BE74C4634FD},
+ {0x2E2D38703BEFA67E, 0xD400B8D61A88AF42}, {0x4CD2A9E114EBAF76, 0xE33AEF3D1EFE1205},
+ {0xE424C29A28BB3F19, 0x0AA6E2C5B184F7AF}, {0xDA4477BC72075C74, 0xDC182FE400C60DC7},
+ {0xF0BF83C9AFD2E588, 0x9FCD88DDDE8E6AB1}, {0x2565290EBBABDCDD, 0x7EE1EE3BA5CE644D},
+ {0x53A4F9AE2A2F005E, 0xFFE70D3A7D0DD4A8}, {0xF1441DB3FECE9E28, 0xC2287F44C8C73946},
+ {0x1EA32EE77A7B5B81, 0xDF2B4FE6027D9229}, {0x85844A84D71A4DD4, 0x59B813CC7D29B5A7},
+ {0x57B5F6FE084DEB53, 0x9499BBFD03492F2C}, {0xDF31D20752A0D019, 0xFD1EBC1BE71DB891},
+ {0x9B1D8CCE1E8AB0F5, 0x4172C22C632334FA}, {0x47A228EAFF47BEF3, 0xF116BD5C1F6F07FC},
+ {0x01959B0F727A3734, 0xB5D0BFF8D0F4C4A7}, {0x3EB4E4C0B31C9B82, 0x19005442037B7CA7},
+ {0x7656453EFD729C82, 0x704785DDF4AE49BB}, {0x98614528BF2FDB0D, 0x9E7E273059003104},
+ {0xD854D5343CA7A107, 0xF04907C111FC7FF4}, {0xF0568913FBB355EA, 0x59B2FF380EEA3B9F},
+ {0xAA5775A6F095FA6C, 0x5C48B33658908B11}, {0xBED938F8F87A73AD, 0x1F9A35C670336CB7},
+ {0xDBD294FA557E2DB3, 0xD5F3FDAE498C52B4}, {0x2EC5BA0CDD07FAC9, 0x87795619C00A4A41},
+ {0xAADB76FA696F0BE2, 0xF7326B4654229541}, {0x537A88AE56793F9B, 0xB435A82E621678C6},
+ {0x2B2E4F010E91F76F, 0x8293C79552ED256F}, {0x8913ACD919F9E27E, 0x090D7CBE61D6F322},
+ {0xDE159F34DE177316, 0xB3E0F834398039DB}, {0x0F4B7B5EE5C22805, 0x9C9DF04658FF0FE4},
+ {0x1A88E2C7A5377E39, 0x1CB88FE408DEABEA}, {0x4E4C79006ECF08A3, 0x3EB97F715B677BB8},
+ {0x53A20C041F791B48, 0xC7C0B05097AE3D72}, {0x29735EE0A0F5795D, 0x4AB5D8CB25A34186},
+ {0x41F9F82A79E35E0A, 0xAD211100F485028B}, {0xF25070FA75E94864, 0x90871EF4AE93BC57},
+ {0x2321AFDFAC1EF428, 0xBC6E7F1F399A9DD2}, {0x90D42F00EEB25F7F, 0x86308DDD8F0B3EF0},
+ {0x0AF639484B006E79, 0x00D86E33104B8917}, {0x083D10392CE8419F, 0x3F9273DABAF0CB1A},
+ {0x9C37BCC18B0CAE6F, 0x5275B88842096145}, {0x80FA67F90548252F, 0xA8E1937DB3715198},
+ {0x741EB23EA867028E, 0x4331FF2EECB3897F}, {0x4657FB85208F980C, 0xCD13091B4FC3D481},
+ {0x7CDFAA05BE4F1121, 0x9F2A6985ACA390FF}, {0x1E558711CE5F8786, 0xC78B76996309F92E},
+ {0x86CF47B1F326734F, 0x36F779BE75E00FDD}, {0x190EFB895679D50C, 0x5C6888D03ABA9577},
+ {0xF0980B3E678A85B6, 0x2506F38DB5531AB5}, {0x5B7DFDEB853A7EE8, 0x5F5C474D76956B42},
+ {0xC0D5929B308FFEB6, 0xB19FAB79489E9697}, {0x2D8C93B287037461, 0x7942546BB4F4AB38},
+ {0x99570939944E507B, 0x99AE5C71A4BEB215}, {0x4620D47FF8D33CFD, 0x6B191170AE34EAEC},
+ {0xA4671247393B9258, 0xD44B7CD15EEF495C}, {0x545D9337FA09E96C, 0x1BC21C14C319A2FF},
+ {0xD7C829B066AAFA69, 0xE58F80FE13FD58F5}, {0x0761E8CFBA689D7D, 0x6FCE442F5AA38BD3},
+ {0x445FAE8593535E08, 0x151FD1B4D74DC53B}, {0xFEB92FB7538A0736, 0xDCA03ADCF36DD09A},
+ {0xDA0DD5F8DB0BA72F, 0x0222DDF75D680AA0}, {0x4B0F49DE7959F0CD, 0x3C471C05BA1723A8},
+ {0xCF3AE4D563CFF4CC, 0x527519E8DC939C02}, {0x267185F28D6C57C0, 0xFABBA1F7C3B535CE},
+ {0x81EFF5D1C29F756F, 0x6761156C866B1BD3}, {0xE2A6C3B75AA51C60, 0x27C8ACBE5D623FBD},
+ {0xC7D1728F80816732, 0x592943316378EFCE}, {0x508027475B343897, 0x646E899DFB6F3B89},
+ {0x46E167A341B8782D, 0x5BD59745A8EDFB0A}, {0x758C055759974DBF, 0x727A3CA06199EAA6},
+ {0x469DE0ECC3F5BDAD, 0x4D2C590961BF3930}, {0x48B5607498FCE866, 0x8AFEDBD2344DADBD},
+ {0xEE37FA5C007107DB, 0xCC973FD3B602C20E}, {0x158D7E09CA969222, 0xC4721F5EE6CFB751},
+ {0xB5F72B44C325F40A, 0x465236FA4422708A}, {0xA4C732533B1C0E6F, 0x5B78BC0A9E84CB69},
+ {0x4C3DD0E5745FE55B, 0xD3F15C712C89CFFB}, {0xC6E5AD8ABD6514A1, 0x0B83F0A4B078BD4A},
+ {0x956E3ECD0BDF2FB0, 0x26DF3D145837F7FF}, {0xD34D83A539763B54, 0xFF38FA9512D6D974},
+ {0x5FC5466CC10AA778, 0x0B68CF962AEA5CF8}, {0x0FA1DB72BB3B2A31, 0xDE95FC441D2AA230},
+ {0xE685B37F2EBEBED2, 0x1363B78EA661D3B2}, {0xAE57064BFFD80528, 0x3E160B5E01BF2723},
+ {0xCA5A8E5E1E0393AD, 0xD2444CFF70836B40}, {0xA78CCCEC2CA56DB0, 0xFF61B6CE194E84E7},
+ {0x3A927B5877ED7F36, 0xF962C7950B71A165}, {0xB3B74D04853825E0, 0x597890A6E2A227E6},
+ {0x4447EBFA8FFA160A, 0x3EF932594DC0ADEB}, {0x258FDDEA6B6295F8, 0xED46ABA872049E6D},
+ {0x4AC540E4A30F0DBD, 0x2AAC99AD836BBD48}, {0x4E8BA53274054768, 0xD7E34A5227ED6BDE},
+ {0xEDF81C198BF8E199, 0x1313401536BD5C5E}, {0x94EE68052DFF5F57, 0x6A14219B86114DA0},
+ {0xEDD7A5EC01974055, 0x632728B732750503}, {0xFDB64D3D600CBA59, 0x93B4093A4E9CB204},
+ {0x2C2D9F418BE981C9, 0x2EFAE5695BFF7741}, {0x697726D4D0AE83E8, 0xDE5D223C1F2E6510},
+ {0x156D1557A78F2E36, 0xB93DF94786830242}, {0xC3E1D147B48CE29A, 0xD4DFFD82CCCCB8FA},
+ {0x9D9B642E5EBDD621, 0xFBAD48D43B9A2198}, {0xE999DB50B6BF1E08, 0x50A45A940FFA0BA8},
+ {0x4B433E8E22498B7C, 0x67E4F07639145D86}, {0xF066D990495303D6, 0xB6D5D4B060DD173C},
+ {0x8411CA22C598C06E, 0xA02E6299A101548E}, {0x2EDCA1F5F1F9E169, 0x02C5ED57D2AB00E3},
+ {0x67E78A6903F4958C, 0xF125F997FE699D8F}, {0x48CC16C16E835117, 0x6CFBC79B4D8D16C6},
+ {0x5C57FE51C0B12C49, 0xF2DB556F2ED56792}, {0x7A41B72E0B07F6D0, 0xCDC0EB51CA2CA75A},
+ {0xC085A8ECFCEFD5A5, 0x4E61F7C2A92C7C1F}, {0xF6D9EF9C5DA0A2D7, 0x40B0FF4EBF2DA597},
+ {0x05F54A9D2ABC6968, 0x37528469F0B43596}, {0x4AC7EC246B331AD9, 0x631B100DC0F030F0},
+ {0x5B2A0CF39F2066D6, 0xCA6C4A2499C499C9}, {0xE73B67E157C5363F, 0x88F66ACEE90B66F1},
+ {0x9A70902FF8ECDB70, 0x465069F35E9E5D5E}, {0x7C12B97611FD2FB6, 0xABB226604F509E50},
+ {0xDD01A7BC97C410DF, 0x455C5D64D2229665}, {0x8645A35A29898F3F, 0x909DA3328991B2D1},
+ {0xC91B824DD5BED39D, 0x7AB6A8795B895717}, {0x9FB8EEBED5604E2C, 0xC26C022703F5FBF9},
+ {0x2A5657A59D12FD03, 0x77167836E0C8CAA3}, {0xD0F895FFCE8005FE, 0xD6D8400FF4182658},
+ {0xB0C68B0493C133EC, 0x9A490BF7FA0F64F2}, {0x2FFB3C65D5CE8840, 0x4AD3CF787F76DB41},
+ {0x34B4376F19E1945C, 0x0DDEED80BD3C027E}, {0x032A1361348EA666, 0x729A567EFF6A9656},
+ {0x285BF4C1C9A7B02F, 0xC137EBB5DE0C6A5E}, {0x0960EC64B0766B81, 0x92C79A1112421F06},
+ {0x51D528940BCF7785, 0xC11AD0D1CE23EF54}, {0x9DFF8F7F43094717, 0xBA06A215365FE8F0},
+ {0x96D42A5CBDDC0197, 0x5650EEB843257E6B}, {0x567A094270E840B3, 0x1E3A988CC9D69E70},
+ {0xD76E336D6DC3D691, 0xEE4E9F85964379C6}, {0x1C802895CC6E58E0, 0xA4DF8EFD9EEB0417},
+ {0x97F596AE34F518EC, 0xD5D425F4570203D4}, {0xFC61933E0CBCFE33, 0x5F30C5C702220675},
+ {0x15C7109E0F9987D3, 0x8DCB70845D9D4D62}, {0x443E3304CB5C3FBC, 0x2D0D7EF1F30E90FF},
+ {0x98BD87363304B7AE, 0x315ADEA94730580D}, {0x94148322A3F96C2E, 0x663286358F401617},
+ {0x551AD159633396AB, 0xBB656B0F76CE333E}, {0x781E3CF4E6F6F9EA, 0x85F9277F577AF08E},
+ {0x40E4AD94285595A8, 0xA47970486C54202C}, {0xC38DF5B825B1952C, 0xAE80CD70CA0C35D7},
+ {0x7FED01B1D8202618, 0xF8CFF1B232012BDC}, {0x92FC0C1A4F6EA04F, 0x4D01070CE62D9443},
+ {0x516D79038E195087, 0x2A11CB312CFD4C2A}, {0x94504EA825B77F55, 0x62F1DA888B967629},
+ {0x7C352F6509476385, 0xF139275F87BA984C}, {0x633B01676D37C88D, 0x8869BD6AEF4EC566},
+ {0x4C94A59591818E54, 0x975523C48097AC80}, {0x51B15733940FDD38, 0x32DCA6F44F175EC3},
+ {0x32D20E2FAF21503A, 0x93A3D9C171525AE7}, {0x0A05F7C59BB31482, 0x0C7799967798EB36},
+ {0x28FBBB7AC9E1FCA0, 0xF3AE2FA1979A0E53}, {0xBA97BA4F3216EF41, 0xED8245A5AD878618},
+ {0x972A61E0D30024D3, 0x403F43A32F19ABC2}, {0xB50A5DA03C47363F, 0x1FD960068D5837F9},
+ {0x1297FFDCBD2E0CE5, 0xBD2BF241D93AB498}, {0xBDF94FC009D3EE94, 0x691B1C13482B1BCD},
+ {0x5A0D08679F22CEF4, 0x6FEE10218A25E472}, {0x76700AF107AB4B08, 0x0D5AD50C05683711},
+ {0x8201AA4B8B0DDC17, 0x469D83C11EF13876}, {0x47B8BDB4A03BF293, 0x2434FFAFBB2B0CC2},
+ {0x1E02495CA7F29CC4, 0x38A35B5577485EFE}, {0xBBDF09421AAB2277, 0x558ABAE27738E265},
+ {0x291E162222D7DDD8, 0x951093893854B3D3}, {0x12B59433BEAB228B, 0x31872B0D12FC7897},
+ {0x46B8A78B887F15F3, 0xA92C3F4A1AFD3BA8}, {0xA85DAF030CDBD222, 0xF70CA10C27AFF263},
+ {0x92FDEAD69A96F81E, 0xFFA487C3399C21DE}, {0x1E270B101F662128, 0x85F8C043E6321707},
+ {0xEECDA080A03D41FF, 0x737D1D2691F76B61}, {0x7DEF3E4D11B03D9C, 0x8447CCD0A4FE6BBF},
+ {0x00C3227954136988, 0xE754CBD43FAF3B42}, {0x3CE2A646BE4A0640, 0x9DD68EEAE3065D2D},
+ {0x21CF6A7035D37E49, 0xC39635A915B3CF0C}, {0x40EA65EA0B866414, 0xE86140460096A607},
+ {0x4E59870688C8D744, 0xD2F1A56B0AB260D9}, {0x8745CA7685592030, 0x37D0F57C57B8D781},
+ {0x903F34ACDD59D466, 0x607C6A4619361066}, {0x20CABEDAEEA554F9, 0x21EB7EBC316A6A5A},
+ {0x81E9EEA37AAD74B6, 0x653B03745BEECBE3}, {0x9DE4540039958913, 0x325913CEF785671F},
+ {0xA4E969D2A0D722F1, 0x6DDF787268BE6AC7}, {0x91338AA5F754C3E9, 0xDE0D63D4F46945A3},
+ {0x85238C09E0EC68B3, 0x855A0F7B7D12FEAB}, {0xF22B26A3D23EC56A, 0x274D128882F71B03},
+ {0xE88E12A92854D1F7, 0x34724393AA0B2DED}, {0x8AB98A0A25DAF3FD, 0x285623B2E31BD646},
+ {0xCD924069E5D4EE26, 0xFCE249B4B4AB61E1}, {0xBE5AA76695EAE7A4, 0xCA743CB4418EC701},
+ {0xC214BBF59876E810, 0xEA1C61968B0F2BC2}, {0xBC2670754DD663B6, 0xEBB7D11603BA6DFA},
+ {0x9F8612B7A8EE5B52, 0x17774794A13D2DBD}, {0x83461CE006F37B73, 0xD962F419ACBB4B75},
+ {0x8BE9F74501DD1E47, 0x442863DC152DF928}, {0xB943DDDB9F69B633, 0xFCC625A3940E3A14},
+ {0x29836881F9D71CB1, 0x3BEE8426351E6FD4}, {0xF04770789227FA93, 0x01DDD517DEE1460C},
+ {0xC912AFC0E1625500, 0x2DCB787332EE7B35}, {0x58A1820E5A1ADC0E, 0x385F0FA9EF4170F2},
+ {0x9E826A121D7F3A58, 0x39C6740E38D64630}, {0x7D6B6A18C933D301, 0xD9717EF3711C4EC3},
+ {0xF94502048605431D, 0xFF9119ACB641DF50}, {0xAABD2679C67B66DD, 0xBE99E6BF20AB2210},
+ {0x9787E01C58008B03, 0x53F117FC3054DE00}, {0xE40CAAC7D184158D, 0x3147AECD945CF546},
+ {0x99FF1D2C436AD409, 0x7C414E8AEAE90E80}, {0x8923C05E01FD815E, 0x5CA6E19FFA914BCD},
+ {0x1D25CAB88BD507BD, 0x606AF616C59BC24E}, {0x14CC5B28AD95575F, 0xCB0B85217ADB745C},
+ {0x6301AF6EB5319F8C, 0x2C05BE3409133206}, {0x77C8DD65ECBB3D60, 0xACAEF38F476678F6},
+ {0xB7D8E4CEF8FAF3FC, 0xF7312DD79B4D8FFD}, {0xD8F7BA0E39558F2A, 0x940E36FBA6A8DDF7},
+ {0x98B5F55510DD544B, 0x982DDF0DDF6D169C}, {0x14D0995014B45E67, 0xB2DED39BD9A90F61},
+ {0x88F5871F76F73EC0, 0x46C9BFF5D7BFFB20}, {0xD7B5AD889431DDD3, 0x8AE1497386EFA0EA},
+ {0x713992769550B935, 0x2C25EDB65F35E1E0}, {0xFC13C0A3A090D7A3, 0xE399A94506FBA9CC},
+ {0xBE96E3D6E3ED1994, 0xD3E1B6430BDBF2A3}, {0x6E9E12ADB55131F6, 0xB29431C719F74249},
+ {0x3F1E91BC68AA151C, 0x0028038D313E0151}, {0x3C2D086979F9BAD9, 0x4B80F12EDA3682CB},
+ {0xB9F668CCD376194E, 0xE78190E456B7E6C0}, {0x53CAF26CD507D5B8, 0x6671084DDFEB2D79},
+ {0x54D805179F8B709C, 0xEEFDFD3F2B5F9AFC}, {0x4D1FC2E8DCA7A27F, 0x96EF2FF7B2B61AD0},
+ {0x0E4169B540D65DD7, 0x0CF2A877D47A046C}, {0xA55836006E2927ED, 0x3E2EEFFF727054E1},
+ {0x71336077D4E575D2, 0x9A228093AA36CFAD}, {0x5D67E01F8AA840CC, 0x0EB3A9FC2EEAEEC8},
+ {0x10A66AE90FB58449, 0xC007B36FA18467E9}, {0x2CB4C66D73A63FFA, 0x6388F1DEDD6F9C21},
+ {0xD8AA01C284FDF31B, 0x3541FFACFCCCEC99}, {0x1C69CE40D706464D, 0xC1A48CEBB626BE88},
+ {0x2ABA6BA4FF2ADBE6, 0x3D19AC6A18557D51}, {0x9045FB112DA747DD, 0xE05422F3534BAC89},
+ {0xA108757BB88877B6, 0x595252F27D87A697}, {0xBE86D8CFF36E0105, 0xFF3E4F53F84AFB9A},
+ {0x4D387DC431127D3E, 0x45C965B646AAF178}, {0xCA76A18CC4FE8DFD, 0x84C688FB9A5DF4EA},
+ {0xE57C2B42A6845328, 0x02F298A302C0B87B}, {0x10E8443F51E42B70, 0x29C4C8A01BC10C1B},
+ {0xB4966D78751ACAE7, 0xEC9F2B053D5897B7}, {0x90F8698ED8EDDF45, 0x9256511C31EC2099},
+ {0x0AA5E96D3812BAED, 0xCBFFE19DE7B07827}, {0x1A190DEC6D58E220, 0x02D6CFAAFEB4E410},
+ {0x6E9BD87EF180A3E4, 0x667023ADC69DADD8}, {0x4A02A1512F353B49, 0x88CA3E134E5D4CC0},
+ {0x25F7399982EF3F5D, 0x25321A8A08511C4B}, {0xFA5FA6B8985DA141, 0xF004DC5BC43A24E5},
+ {0x72C3957916664122, 0xD53EC3ACC90FCA84}, {0xF5DDDAA6A1864B37, 0xFF1BB66A8E6E9930},
+ {0x9FDEB27DDC389C74, 0x21D213452F5F73FD}, {0x4693B204E012A91F, 0xE286F188A9980853},
+ {0x0D940EBF529E0B13, 0xC042C83AB1CA8B1A}, {0xC361BB914C3EBC9E, 0xACF0AE9443F0E513},
+ {0x272ABAA291B86650, 0x32D7B6F7DDDDD45E}, {0x0154012DD67CBF06, 0x1E9D5BD0EFA96285},
+ {0x034C05E20D65E9BC, 0xA910731AC79D665D}, {0xF5C9898A71FBF386, 0x223BD744DC6FD4C3},
+ {0x18B0068DCCB748B5, 0x182A249595733006}, {0x1DDEDDE268AD72E1, 0x38BCD7DF569AC861},
+ {0xF647ACB319CE3D2E, 0xB851E01D015D41F4}, {0x12FA7E223983CCDF, 0x08A18CA695BC6017},
+ {0xC4DE5170BF90BABA, 0x8FC87B04EF0DE1FE}, {0xB67838BFD27C53F0, 0x4529E2B4D1730785},
+ {0x87FE94543C8769A1, 0x03A4F51AC2D04FF9}, {0x7F5526EC0259194F, 0x91C44EE6DBADD335},
+ {0xE09290934D507950, 0x227BA6B59B280F98}, {0x833376E96F8FC628, 0x20C0A7FA98B290FC},
+ {0x02046F5ED9E79BE2, 0x497CA7529CF64BC8}, {0x95C80F0464F0D05A, 0x4F0F6C00038F8D58},
+ {0x0843C99921476D28, 0x59699755EFB92108}, {0x3EEA7873169F3691, 0x1ACE33A65973FACD},
+ {0xAA767FCBF8372F69, 0x13F8928EA5DCF206}, {0x2B4CBADB5B6679E1, 0x349B20810E256B5C},
+ {0xE80DAA24FFB2BC9F, 0xE0C8A293DB41A421}, {0x912019DED9FED9FF, 0xECA797A291256C3B},
+ {0x632EB1716CC87D4A, 0x4F45100227EB6E72}, {0xA36D225E33B3B47F, 0xEEC26186D07ED549},
+ {0x50AD45D3092C08DE, 0x6CF4ABEB2931D6A5}, {0x0B8A2D0A7B308739, 0x1C26AB30CA3AF56D},
+ {0xA82F0BEBAFA928F9, 0xDDBADB7F14518342}, {0x271E3BFAABE39918, 0x03348A35598A8F37},
+ {0xB591C015B1C13AF4, 0x147A2AAC60F5A6A5}, {0x4C78E36CDCE9F98C, 0xEF0679C4819339C3},
+ {0xE68B01CEB81BBEA2, 0x59E816673FD6E355}, {0xF98CCC8803812ED1, 0xB446B8C910F32026},
+ {0x5F7C56F277B96D4B, 0x7C6D697F546F1F63}, {0x8BFEF27B18400398, 0xBF50C4B17FB439F3},
+ {0x137535EE0BCA2938, 0x527A24B7CC08AAB4}, {0xFDD09FC148DE0E78, 0xEBE9B58163175D5E},
+ {0xA9BA51543E40D03C, 0xFD14BC2ED2C6BE89}, {0x0A9535207D31011A, 0x4B52DC297282BDF7},
+ {0x09CAE07BDDAB6F76, 0xBB8F9EA3C4A9116F}, {0x44DC237A7B008CC4, 0xAB201C4D96819293},
+ {0xAC90C1E1297BC838, 0xD4FD65B8229CBA61}, {0xC6B259EDBCC381C1, 0x834AE1477184E9C2},
+ {0xFBCD9D8FF37BC967, 0x9A7D12237EB6BBBF}, {0x8E3C16269E6DCCF7, 0xE94EB5551807925E},
+ {0x097CEA55F5020EA0, 0xEC1CAE372C9DC929}, {0xD2C839B7780BD62C, 0x7D28FA32900F6449},
+ {0xA3C65D13D9FC9780, 0xD44DA03A8590CCCD}, {0x9D3B6F193307DADE, 0x19F5AC0B577F73C6},
+ {0xE5B962012D982071, 0xDBE47D118E0498C2}, {0x2BFD92AF15C34A3E, 0x6BBBE7E9BF676BC7},
+ {0x685A4C1E68A8866D, 0xCA228283EEC45B86}, {0x75F98ABFA4EFFE89, 0x0A54090B2446FC3E},
+ {0x82D9D844FBF488F6, 0xD7E7884570F129B5}, {0xB53B30EB67728E09, 0x2E4CD28C3BBD1AE6},
+ {0x33099E765F55876F, 0xCFAF70EC8CCBBC48}, {0x38F305342D73A1BE, 0x354B78BE04E1BA86},
+ {0x5480D1CC118BAD3D, 0xC7CF77AFD13CF102}, {0x30AA520A1D016F29, 0xCADF33BC2B5E2CB2},
+ {0x301E2B9A1204E1FD, 0x27EF914554CC2102}, {0xA6B07B2FA6D56848, 0x929FFD4327E7224F},
+ {0x22B1D5D5D737D2AB, 0x45E6CFB385A889BA}, {0x6F0CE0615FB6F7EE, 0xEEA3099461BCA82A},
+ {0xD43DD722E4E4F723, 0xC1588A5F53270B3E}, {0x55D77D4959CCB1F9, 0xCE5A69164E480DF5},
+ {0x286197A181E62461, 0x37FB5152B88B8B9E}, {0x0AC915F9219675F6, 0xD5BCDF80E2AAF1EE},
+ {0xF34CC36B3B6AF32F, 0x186B31588D44F80D}, {0xA993E5FC4B0A1646, 0xB0726B71780B8AA6},
+ {0x345FC2A72470F729, 0x1DF577F18AF56D10}, {0x7DDD873BA21B179C, 0x5A866060FDE22BD7},
+ {0xC20E52A8207ED439, 0x789F4AF9DC67F60C}, {0xC54DDF9F4CAB6F65, 0x64E2B22D9D0CEA08},
+ {0x0C2277468104078A, 0x182683E75105D20D}, {0x7D8A646CE5174658, 0x223FA0889C860D2D},
+ {0xDD859E6A465F6BC8, 0x2D5ECC06ED9B6EEA}, {0x5B9C4C0793F469E1, 0x7F1AA35BDBFF8365},
+ {0xCD009B4CF59B8722, 0xBB82F6F549B55114}, {0xDCDE2B289B950E57, 0xA569864471542495},
+ {0x84DEC662577290D4, 0x9A53C8FA645B3CEA}, {0xEBC50854D886B992, 0x1EAFC0DF6FA78F61},
+ {0x5A68AE7E04752A81, 0x1381E1ADD613C25C}, {0x75472F3306644C43, 0xE1B20B53751802E8},
+ {0xE1DC28B178C02A64, 0x32FA8ACEC4C2C3D5}, {0x729E46B964F32C9F, 0xD23F77862AFEAF7F},
+ {0x613D19381FEAB772, 0xD31970EF7AD08D7A}, {0x17A28884678A88EE, 0xBE525E937E3FF6A1},
+ {0x7280DA952820F8E4, 0xE28AF178530BE2F0}, {0x05AEA2208107DF76, 0xBD2FA84992F0A49B},
+ {0x6AC10A81C35D1848, 0x26CA1AD6745597F5}, {0x71A20B2C23BEE0DB, 0x0B56F02E0674D3D7},
+ {0x45185CA7EDB64F26, 0xE3265EDFC0CAFB5E}, {0xC168DD7ED105B8EE, 0x6101DAB41C3B138A},
+ {0xAAD4833379DA55B0, 0x2D161DFCF7579F89}, {0x1DED97712C1838BC, 0x6B003BCD0F0FED4E},
+ {0xEA8783C100DA36DD, 0x1B55CBF94E01A391}, {0xC24A2D0DD6986110, 0xAA2B7AE0AF4473E6},
+ {0xCDECB6E749C4E10E, 0x1958F29037FD2BDD}, {0x61855B64C28EC3AB, 0x2667C2B5D9986D2F},
+ {0x09C3CBF5B225A5F7, 0xA0128370279AB0E2}, {0x54FB6F3DE6D9C7E2, 0x7EC00AAC95D435E9},
+ {0x882A2B2ECD2B22AC, 0xAC90AA3714DA7F62}, {0xC30F9F2703DE46C8, 0x5BE0205A6882BB08},
+ {0xA38656CC55CDA55D, 0x570C9EDEC9842682}, {0x32A92C2209B1D0D1, 0x5DBEEFE635BB7E3D},
+ {0xCB791BE081C83FCE, 0xB89DB7C75E6B50AC}, {0x32007F39799B8EA5, 0xD37865AA6E87AD4A},
+ {0xE2C7DBC2CE0C469A, 0x004A7056E639B6D0}, {0x0382F042759646F3, 0x3D381AA273FADB7D},
+ {0x39C22774639FBA6A, 0xF93496F6D3BB3989}, {0x38FEE793E05D3960, 0xA3D94C0FD68286FF},
+ {0x12261BC42EA04796, 0xE78835414CB04803}, {0x1FA7D710AE329BC1, 0x2DC922A2AC6D8751},
+ {0xA48958CE080D07E7, 0x8F79D7B0001B1858}, {0xD0E42078B7E7379A, 0xC7E6398E166E23D7},
+ {0x9F8AAE8836981513, 0xB4D6358BCD76A49A}, {0x18F9B5902A157F4A, 0xD963B5AB0831DE9D},
+ {0xAD3EBA79B12588E8, 0x74FEA748D43C5BE1}, {0xF443378FAAEBA8FB, 0x63E914B8FD390A04},
+ {0xC6307331F57728E2, 0x3A6A04C1EFE40D26}, {0x28DDD5783A8071E3, 0xBC7AC0CE8C2B693E},
+ {0x850F3C300DD25D46, 0x33FE11C58EAFB3E6}, {0x3443D8932EF72290, 0x9E817CC009D65528},
+ {0x5BAC82D0869D4419, 0x5F007C9C0881EA5E}, {0x5C420A2AA9AB71CD, 0x04EF9A22F415647E},
+ {0x13B8C8F8187C693C, 0x53A1493C86A887BC}, {0x09303360041B5349, 0xA7E980F9587E14E8},
+ {0x9E25338632BE625F, 0x0F3264D304BF76DA}, {0xE5FEE3C915AA51D7, 0xB04A5702D44A2658},
+ {0x117FEB64C1B322ED, 0xE49C9E069E73D326}, {0xD54CC6C27EE4FB55, 0x20C526B2B65BFA41},
+ {0xE0157197B5EF89A8, 0x7C08FCF680B26C44}, {0x63BEE5F374D2DB16, 0xE98612759BB34C1D},
+ {0xDF2E4EDA355B52F1, 0x539782F815680122}, {0xEBAFC89E5A770BBC, 0xFC6F55C5FDFAD172},
+ {0x920F423AED783DDD, 0x364286A6340F957E}, {0x40B4068CDDBF81C6, 0x98C612CD6958433F},
+ {0xEBCB36B80958D813, 0x57584976122ABE45}, {0x6491398364005FAA, 0xAE2E24DE8C161550},
+ {0xDCEA16BE07421276, 0xF7125AD288E53F73}, {0xDF31F887E362AF7C, 0x4837E7B1D7EAF4CC},
+ {0x5DCF5F03FD321876, 0xAC12841796C8A1B0}, {0xA536B15DC7CBE1AE, 0xA9FED66DC4E6C8A4},
+ {0xFE28B4444A08836E, 0x5AAC0F4AE404E743}, {0x85724382CDF4021F, 0x96364577EFA0D900},
+ {0x5B2314428C8B58AA, 0x07ADD4617736569A}, {0x661E6CDF179B30EE, 0x12A88AAC1C64FC27},
+ {0xF005E2DE4379431E, 0x3FB7442E4A94768B}, {0x4736CC9199FFAC3C, 0x42693940E79BD8D0},
+ {0x5D7FCD62F87EEB8C, 0x004A9D9CA5845477}, {0x66BF52DBEA32EC40, 0xB8F82CD248BFCB11},
+ {0xAE467BD266D68FDC, 0x6C863F1282343398}, {0xF60F43DF9C65AACE, 0x0217B9DC754D0A31},
+ {0x2C28720EE3773AF0, 0x94246D7379586212}, {0x9850961237E130EF, 0x7F5114F584A8257F},
+ {0xC137A30335CE68F3, 0x25377827A05BF62C}, {0xE2DEA72774A14374, 0xA9F266D3AB990350},
+ {0xF53C93D3B5A43B2B, 0xFF859D5344D04E3B}, {0xA889412FFA183EE4, 0xB070F43CD7A6EFB3},
+ {0x351BCFAC31DFBB3E, 0xBCBA021CEBF75199}, {0xB20B099D3C81A4B7, 0xC085C8B7A436B318},
+ {0x3A484B2928BFFF49, 0xAB76BB40BB8024D7}, {0x39539191609E7A41, 0x599BBA4EAEF2AAFB},
+ {0x5007236BDAC07995, 0x88DEFFDCA179EA9B}, {0xB49B11A001F35B81, 0xE2ABD309C207BA21},
+ {0xB64AA07BF370AA5D, 0x940C5FADFE9D9106}, {0x3B23F38379DA7F1B, 0xF705EFFFECC0B735},
+ {0xC30C0F06A7FCD17C, 0x761C456CB46269D7}, {0x905319242AE2559D, 0xE617CCC40824CAF7},
+ {0x75A0BE74ECD8BDFD, 0xBD539C32D9E26DEF}, {0x99766D2B34BB7DB5, 0xD1B73C0864061E7E},
+ {0x23A69EA7D1F64614, 0xAD9E53EBFCC0329B}, {0xC6671DBF4EF6E4A1, 0xACD0D8AD98521549},
+ {0x06EA2F0E9449BFF2, 0xE199D174EC79919D}, {0xC8AA464D4AE14E0D, 0xCE0BAB198B87BA38},
+ {0xCFA0E18F1B95E81D, 0xEFBE8EBDDB228545}, {0x360FC0E1E7219791, 0x2F783A9BD7935B7D},
+ {0xE6457B8413629276, 0x32E4A3D4561664A9}, {0x2593A838F484E651, 0x15764A88D2B56457},
+ {0x8B0EBFC78EFDD9F9, 0x6010ED6F55F052E7}, {0xB3A8AB2A10A1D553, 0x600910924F628A05},
+ {0xBBCCA5F43CD1D18F, 0x9DEC1F549B765E19}, {0x1E91C01FC86DA1E0, 0xEEA2835096FE7660},
+ {0xAB8616584C7D5703, 0x309F3DF1F193D7A2}, {0xBC277713FE3D472A, 0x884712C07EB8682B},
+ {0x5CCD82AF2AF7F253, 0xE0FB4C07EEB0B73E}, {0xE12525B5E0F4B0C6, 0x9FB108A5AAEDB346},
+ {0x776FEB897F64A9E3, 0x573E0F3EE36678FA}, {0x74E1E086B2102E9C, 0x4FC39EEDFC2E05DB},
+ {0xEC62DF5086C3D486, 0x48291ABD9D9A7DEE}, {0x18932E358DECCD84, 0xDD3257CB7FEE8B57},
+ {0xFDB1A65D1E00BD74, 0xC9DCE6AC7740111A}, {0x9273C3862FBC1560, 0x3E6D740B1E28F3BD},
+ {0xBDDD510599C140AB, 0xF0A2A9EFB9FAED8E}, {0x508EC5EAE08AAF7A, 0xBC5F5098DEB50E0F},
+ {0x33495F668A524437, 0x648CB4F525BA12F9}, {0x1BB1EB42E9D74B30, 0xF217B2949B8614F2},
+ {0xF51219F7317D9613, 0x743FB867F930EE40}, {0x150803428A503218, 0x0912A2555CFD94FC},
+ {0x0755506196ADD87F, 0xA0206134AE527309}, {0x3A58148C626EEDAA, 0x2418496937136182},
+ {0x587705CD291D6F34, 0xE2B61F9540B34EF1}, {0x0FE3EE247716567F, 0xA87745766538A64D},
+ {0x367C70DCF4365575, 0x13780C94E9515E34}, {0x3D9207CA8A48FC15, 0x826370A212148061},
+ {0x45C270B8E126D325, 0x74FAF3BFEFC82894}, {0x9A081EA47EAB38CA, 0x7F3FD442E0B71F70},
+ {0xED71E984B4C68538, 0xB584ABA6E668FE46}, {0x2E34A65579A96B5C, 0xA6A46C6D83F2D5F8},
+ {0x1B8B97FF5937790A, 0x4B710E2E27F378F8}, {0x7D4B40C825961765, 0x17781D0777896215},
+ {0xD6D047CACC32731B, 0x095C16DBC674E76B}, {0xE189EDEAF8607911, 0x8765920697FB5461},
+ {0xDF65843A5096FC15, 0xA853E5E34AC8DB42}, {0x9BA40825D2D68D28, 0x0D6E271F13F26A42},
+ {0x453E1E0EE0A1DDA7, 0xB05C83E50EB69C40}, {0x1E832086574B1BA3, 0x485E8816E9760FB5},
+ {0x04758ED77B505202, 0x96947B216F8049E4}, {0xD5C56C193DDE68E0, 0x139FEE2FE2B5F651},
+ {0xD5041E1FB6D725F7, 0x6A84CB6D4170FC61}, {0x7FC5AA2AEFF027EC, 0xAC592D74B2DFA27C},
+ {0xF9F704E1480AB521, 0xA6C9B2993648208A}, {0xF1775DE8DD885427, 0xAB5E268A9DA8A2EE},
+ {0xFCC16ABD6AF3C4AE, 0x2C33FFE1CBB3FC03}, {0x1FCF6C592109E6EF, 0x28F7C82DC59D6DA4},
+ {0x0EEBBDA5AD3FB2D0, 0x25F26450D0CF1794}, {0x3059F381F3B287C4, 0x5482777BFA9126EF},
+ {0x90B29D8E73E55E6F, 0x2974D5CC7A8E57E8}, {0xB6FD2E0DAAAB2296, 0x260B0F3BB17D403C},
+ {0xAD936B698A61D679, 0x8A771DDE040F7433}, {0x6B2F9B056D2C24F7, 0xF7E50EFE12196330},
+ {0x1D4E36AFFC14AD5B, 0x5D7469A22807D30B}, {0x3033F7C64E3ACEAA, 0xBF25DCE4C4D26426},
+ {0x1C335F9F47B148F6, 0x82D8C43FE8A50119}, {0x3B1EB7C8C422B3C6, 0x85B27B69B17D4326},
+ {0xAFF0FB04F0D90D6B, 0x9F346E82EB18F84A}, {0x28097B3163BA6EA1, 0x7D63725CE3BAE3D2},
+ {0xE4BD42DCEA91C8A2, 0xBDBABCF9F5A88645}, {0x07F684C1026D2101, 0x174EAA441E755BC1},
+ {0x5A1E35D274FF72BB, 0x42C976E4AA1E1B5C}, {0x4223DB5B12A5912F, 0xCD60DB8191988558},
+ {0x94C602476A933AA3, 0xEAF61CD295C41C4C}, {0x7943B5CC920695FE, 0xA8D7A0D701BA0640},
+ {0x320FACD760DB60C6, 0x7A58530D93A0864A}, {0xB5377EC3BBE20C75, 0xB12D0B45711F2F77},
+ {0x3B21FE9CF747BFD7, 0xD128A0FD9532CDAB}, {0x85958D7194BCD59B, 0xBF3E70CF5717A893},
+ {0xE5761E35504C24E9, 0x36BEC4ADC34CDEB9}, {0xF91BBBC2C6F5BA13, 0xC45ECF0230374D27},
+ {0x32B1CBD456CDA48E, 0xDD1A8BA0DCC1B7F9}, {0xEBA8795DD380DB0F, 0x3107FE6DF3A0B2D0},
+ {0x9FCBB35E8B38061E, 0x71D184A0437A78E3}, {0xCA881BF620C69382, 0xA7C0E428785296F0},
+ {0x11F9C28CA1492BA9, 0x19AD72865AE6738E}, {0x11ED68650F24DEB4, 0xACAF3BAACE963DAB},
+ {0x5969BB62EAA0E02F, 0x49A3F80848B6789B}, {0x9F6CE04DCD6DA9D6, 0xF5C46A8D5EDE5FAF},
+ {0x5D12F18E4D5C5200, 0x75FB0D8B6E7DD34F}, {0x92AD7DA6E0A864B0, 0x2DD77648F7959AC0},
+ {0x5395DA0310CF382B, 0xC9030D2821E51D4E}, {0x7BD431B1CF88BDF9, 0xC7CAA46D4AD55A2E},
+ {0x9E00A8C5AF2BFEFF, 0xABBAC4469430F081}, {0x42CCE8FC745CC69F, 0xC0CA08CE15C3207C},
+ {0x609BF13EB7A79122, 0x87C7DF44453BF59B}, {0xB812DDA24C1674B6, 0x5786B53CFBC14DF5},
+ {0x651CC80059132A15, 0xC7590777E8730553}, {0x7081EE4C5ECCE6CB, 0x5FD8175EC1E8EA6E},
+ {0x769FE1605C142F20, 0x46B064632BFC2DF0}, {0xE2397F4A45D49190, 0xF813115855B0DEF4},
+ {0x4043F5F6FCEEF361, 0x47E01E55D4CCB1A9}, {0x97F20B5D9EAD31BE, 0x5A3B11BB0B9B8571},
+ {0x89CC439C59DF46FA, 0x678FDEF5CE2FEE64}, {0xECD4C63717E419A8, 0xD4C73D23ECE09424},
+ {0xF67F050F8D51EF08, 0x4737FD52415C3F7B}, {0x5E8D91F5038EE9A7, 0x71F216F98EA198D5},
+ {0x3DE8CBD5B009DB1E, 0x8FE33B23EAF084FA}, {0x2EF9752AB2D0C330, 0xD41C9C23422B2BFD},
+ {0x96640FF30C527E1E, 0x9D7D973C986BC157}, {0x896D000FBA0698A7, 0x2F488D66B0BA56A9},
+ {0x68C543998BD3DBC4, 0xA7E6D81B558F04DF}, {0x46833046F36A4042, 0xE4FE8B43EB10319D},
+ {0x874D97243D6C19A2, 0x2DF2539978E9B97A}, {0x3999EC6AB09A12A4, 0x96E5A1A245DD26AE},
+ {0x8718E4989323BF39, 0x269B744DE215ACFD}, {0x86BE1E7C93D01D6B, 0x2FA74B41D46C1662},
+ {0xE96B922D335169AA, 0x078AC697CB3CBB7C}, {0x0F3861A1BED33FCE, 0x989ED657F18356E3},
+ {0x9CC98E559232438C, 0xC36874050B1D5BEB}, {0x0620D62B50E24D48, 0x8123DBB8EB077536},
+ {0xCC6C63685061F839, 0x23EE78BC1E2BAD86}, {0x1E4993F917C63A00, 0xA5159FE307D8BB18},
+ {0xA52F4063A3920902, 0x20639B566015A5B3}, {0xD765F9914DE5E1EF, 0x88D20A3776F9096D},
+ {0x21B46978E1FD4763, 0xF4B2B0655AA9125E}, {0xB78125457F4453E2, 0x6AFA8F60050E01A2},
+ {0x7028CA3E11667671, 0xF2238F9B57C440B5}, {0x3E010857755D8966, 0xFBEB9575046015E6},
+ {0x77B6358B56949165, 0x4B7D4328CC9FA132}, {0xC9B5E50AAFE89BCF, 0x233798E71E522234},
+ {0xB3C81CD688F487B8, 0x3024A469FFCA3573}, {0x0E71BEE8FC50ED2C, 0x6EE8EAB2391FC2B7},
+ {0x637572D9C53BE7F9, 0x9ED391E20155F7AC}, {0x2B34BF99DECB5565, 0x27325985F67D8E5F},
+ {0x5294E9DA96440863, 0xD7AE34628881E78B}, {0x34DCA2E76EA97CAA, 0x81AD7E65D87178E4},
+ {0xC48E036719E8DD13, 0xE0E523581E1BA29C}, {0x4ED77593F688DE57, 0x885317636873202E},
+ {0xFE218D7D547973A4, 0x582D968E7792148E}, {0x1A0F7F865BCFCFCC, 0x1D093FD431BF8137},
+ {0x3567A93AE899AE06, 0xD071E35ED87F7FDB}, {0xDB2B5F6E7F7B4AC4, 0x946CD623184D3586},
+ {0x830C285F1E8741AE, 0x8F7D85CA84857C69}, {0x8EC13047A5C32D43, 0xD24F32CA06E130F4},
+ {0xA141577108A9AE9B, 0x8D072C90E1F28974}, {0x4ECF28E2A4F05CCF, 0x5B71E3C9865F66C5},
+ {0x2466FA398EA11AD7, 0xB757700F0ABDD09C}, {0x7AC5C8AD517D6B0E, 0xCD460C9085D74423},
+ {0x134B57ABF2CA5217, 0x2FA240C4676BC707}, {0x15829198100FBA29, 0xEE4E00F9064E4E55},
+ {0x5BE00D8E8F9097B4, 0xD7E20B2E80C878C4}, {0xC41953A36DAA3366, 0x2FC75463E7553CD5},
+ {0x85727C8B802E13AD, 0x879C6A83D1C6A4C6}, {0xEBCBF95F7866A41C, 0x02E3D7E2AAC6D5FB},
+ {0xB855BD27574FB888, 0x7E8B0DCE01110298}, {0xA60E24F34E2A45DF, 0x376B2C9E96E33B40},
+ {0x869E36633EC5D9AC, 0x657D91999D8023CB}, {0xE1FD3D4D9255DFCD, 0x2284F8FEABB962A5},
+ {0x0D36BBDA69A2C3EF, 0x5ECA0B3BDEC3374D}, {0x825BDDF9DE33CDCF, 0x83F29D765DF05902},
+ {0x1EDD4031073CE104, 0x8EE0DAC1D4762350}, {0xE95FDEC64D463F9A, 0x0533484CB1423D9A},
+ {0xFA5D9DE5F6324EE6, 0x468B86CFDC81B925}, {0x6CB1A4B0AC55ED44, 0x534390AE771B509E},
+ {0x0AF24F3D01B84EAE, 0xBD845CF9277A6A6B}, {0xB973F2AED70D5D40, 0x5AFB65843B2F52D4},
+ {0x567CE79F0191526F, 0xBBCE49F7AE8934E1}, {0x74198F4ECF092503, 0xD383F86608E91C23},
+ {0x9829812C12FF3056, 0x27F2B0D0DD7C3E4C}, {0x93B71CD956FD5D11, 0xDEB131014C01EDFA},
+ {0x0D551AFCD2475311, 0xBE23229FB93650B3}, {0xA0DB7647CD184101, 0x059D864300D1CF7F},
+ {0x5FEADA6DA272B900, 0xBDA55263651C6580}, {0x9051C30EA22C4ED6, 0x92EB479F3748DE8D},
+ {0x7608656F59DA12A4, 0xB0DD0B9E1D7B9B03}, {0xA9521D7C75DCB98F, 0xE68F9752B423AD67},
+ {0x0EF306D667265B47, 0x0221F5787B386A9C}, {0x0C070D39FE3BF29A, 0x7761D54FE517DE04},
+ {0xE5ABCEBA8ABE6426, 0xEDA189D854085FD5}, {0x97488738BAB725C3, 0x93B8AC6F98382A02},
+ {0xE047997EFDE78DBE, 0x986625D543D6FE6A}, {0x29E8754B004FA888, 0x7A345DAF25217BA9},
+ {0x1FBC5205F32A60E7, 0x7C121A3F9091E3AD}, {0x63446D0DB2B59968, 0xFAA50BB089DB0D88},
+ {0xD0724154F572DA41, 0x604B9AE55EBECB44}, {0xA381B3C8BD104DCA, 0x7A58483FB1539952},
+ {0xB2EABF784D158EA2, 0x91029ADA0610E118}, {0x0F16D719D959B352, 0x65E966295F16A4CC},
+ {0x2F9023D9AD3FA2B4, 0xDFA15515D529367F}, {0x7D4655F45DA2DBAA, 0xF5DDF72BED44AA34},
+ {0x7AC918DA50F18B68, 0x0FFE08A86D03A7B9}, {0x2427090013E53FE9, 0x98873E85206D823C},
+ {0x8960071DCB831D32, 0x921D9B71297FD613}, {0x33633B2B98E883C5, 0xF76F6BCBAFF226B8},
+ {0x889C788F9BB727AB, 0x29BDE815A39EDF3A}, {0x747FC1F9944C61A5, 0xC4CD144598053AC1},
+ {0x866F009B0284293B, 0xFF58D0928A43A1E3}, {0x15E98BA0DF29A17D, 0x497B2F875A967E73},
+ {0xABC3DCC235A22124, 0xE346FF993FB1933A}, {0xEF8A14827C0D8D32, 0x6451D761D2DB63C5},
+ {0x12E2317EF7B01255, 0x34D6745C61D75CF1}, {0xD57E951CB758A001, 0x10A489FC2EF31AF6},
+ {0xE08480DB9B65EEBE, 0xD326FFB07EA6E99F}, {0xAC8673BC691A6DAF, 0xE8767647B19B5ECC},
+ {0x478F2234B85B465D, 0x016109723E7C77D0}, {0x219F14EF26F7DE31, 0x6E8035AF7E7C7413},
+ {0x22C6370220558434, 0x15F8F8802AB123DB}, {0xDBA44381942450D2, 0x363CD6A1A64974EC},
+ {0xE2D55E35EF373D46, 0xFF23A292BA76B512}, {0x387B09F3A49F1A49, 0x9F4B617E24C9294D},
+ {0xF7182D69B778A3AA, 0xFE799A18424AEFC3}, {0xB340388A0F38DE51, 0xFE7A67ED8ADB05F1},
+ {0x2DAE92D1BF64499B, 0x333B5B1D703896AC}, {0x7A16E34838800809, 0x094BD0EAEFE081B6},
+ {0x4D3E0DF7D9413FB8, 0xE493793DC1C81465}, {0xE13C31A6B07E475B, 0x417D2560FC6824D1},
+ {0x64601AA57381A06B, 0x2EDA1857843B4DE9}, {0x2C0257465AF51FD6, 0xFFE3821313C88598},
+ {0xB20D1726295ABB04, 0x2C1BDFDBC8898599}, {0x3B6163EC79ED02CD, 0x2842C7E15778F9C8},
+ {0x23F1CB07FA9CFEAB, 0x8E0324EB509C169B}, {0x8432265E59EB35C8, 0x0FC22D589159FE01},
+ {0xCD26D58FF49EFA91, 0x8E6800ED18F77341}, {0xD1E83B0A3929FADE, 0xEF3FFB1E07631D30},
+ {0xA618A06FBD14D765, 0x5D65AD091027FB5B}, {0x0FACA662E402EC9D, 0x8BB557B5F02FA1C5},
+ {0x0D0B916A48B4DC74, 0x278020A6DDCAB7EF}, {0x1BC6A3B3975735E8, 0x74F784A230B93891},
+ {0x54251B3F59FB1677, 0xFBD564E55B1D155F}, {0xD85373B8004DA8D5, 0xC4D6E80ECD3AE5DE},
+ {0x16FF34D2D12D8312, 0x1E66DA1F51671861}, {0x9DCBBB35AAF9733A, 0x7CA88B905F55C040},
+ {0x0B866AFA9AB63A7F, 0x88FAF7F6002838D6}, {0x3BC6AB08852E0315, 0xF1BE918A9F350141},
+ {0x8E4FF11DFC2C17ED, 0x16D15124D38A7E46}, {0xEE096A14346300ED, 0x863D7237961ED9A6},
+ {0x7F64F44E15D5FF7D, 0x518C3BB33A821B15}, {0x2BE782F780F3A5FA, 0xF1276ECB66244BB2},
+ {0xFD5E3E82CB9D0B9F, 0xDE092A688E61AA73}, {0x2731939498C4427C, 0x998C2142CF0209C8},
+ {0x665347E54D3FCA05, 0x189F5CE69A46C3AB}, {0x73CD7D4D472E1FA0, 0x46E8B46DF3568665},
+ {0xB09C18995F8AB785, 0x0DB82FD2EB7904B2}, {0x7BB2F4BAB64DA2B8, 0x83E019C26EA4C19E},
+ {0x9FDD217737C4934B, 0x5FA4CEBE0398EB2B}, {0x7A947D3FDE9D919F, 0x0B774738B0047BDB},
+ {0xEAF3D21272F63684, 0x97EC30AA0ACD370B}, {0x19B9BB4FEC874929, 0x8BA32BC2B6157597},
+ {0xFB79A02D57803B33, 0x2466CA887F3545D0}, {0xBF22DA0A472134B4, 0x351EDD17492DA4A0},
+ {0xE3CA8B8E5D067154, 0x4BE373E401F6F840}, {0x33A40EB0AB7548E1, 0x4B56C6F0EEE6BF0A},
+ {0xD12D3471E9183635, 0x61033547BB0756A3}, {0x212CA9F24471A370, 0x93FF8A748E1BA667},
+ {0xB8C79DF27251DF9E, 0xDC05CD3D6667E20D}, {0x0C30BCA7DC3BFB6D, 0x06C24FB1EF4C4E5A},
+ {0x5060B7491E0D72A4, 0x79CF1E07921F3BE8}, {0xD01ED884C4B57954, 0xB5B3FCC685C9DA2F},
+ {0x8F5EC3D7976455BA, 0x79EC39CA709F48EE}, {0x819D4D8B579670E0, 0xCE6DDF6CF778CF54},
+ {0x49C315FF146DEAF0, 0x1A31E44EB72C56D6}, {0x5C31B84FBE64F359, 0x636D050ADCD26619},
+ {0x9E8606897C5F2C58, 0x337E7F706552A228}, {0xA97919A57653803F, 0x0D758BDD60B82098},
+ {0x057ADE2D15778F8F, 0x365B5B2F2189AB96}, {0x668606DD59A27EB1, 0x08859EBB992C1D22},
+ {0x929B80CCD6E90CC3, 0xF256A32B4AA7562E}, {0x2989355CAA6CB656, 0x4230F49339C8B434},
+ {0x3BD2BC745E9890AE, 0xED172611650069BD}, {0x5B8DA0336F2B1708, 0x6DF7D3AFF3FC8136},
+ {0xC9717CF23B012F1B, 0xADD6BC47FC200EF7}, {0x2E554E004889F16B, 0x85FF85755CE069C9},
+ {0x643978B190E487C7, 0x79DB8BCC84A2921D}, {0xFB2B9C341C7B42A4, 0xB38F1A68F7705BC8},
+ {0x27F90679D4AA195A, 0x08596EFDFF14FE8E}, {0x4C74194409BF1E7F, 0xB9260CFFB44E9E40},
+ {0x8BE6F31BECCC880F, 0x247B8E2C3E751E17}, {0xAA58BB210413258D, 0x2B6D365289BAB026},
+ {0x7D99B0F57D4C5F52, 0xD1E5FE0295CAB090}, {0x4ACE74ECC7946A4D, 0x26F352D127DC7620},
+ {0x9DEC08DC93AFAB6E, 0x2C5674268743F0D5}, {0x05C2936050FF9E30, 0x8BB28284F239B7C4},
+ {0x5AA83947128AC1BB, 0x7324A6A145542496}, {0xE856B469CC0C1977, 0xCE4E251783D5779E},
+ {0x1881DB3C6D3CC7D4, 0xC016E820A4D045A7}, {0x4DF8425ECD306011, 0x587746F58B5E26F8},
+ {0xC1373C5DCEF73A21, 0xE31D806B5DA3418C}, {0x344556F2E6952E78, 0x97C403783AD1E387},
+ {0xA17522DA360E97EE, 0x216F79C1AB56598A}, {0xCD40CA4D7BB71716, 0xDE04022A956C815E},
+ {0x17544928EF137824, 0x6F6BFE02B83772F8}, {0x502849F5388263DA, 0x7E2AFED5D3F76123},
+ {0xE26B868E06090CED, 0xE20C761155CE0A30}, {0x0972BD7AABAB4078, 0x2A86F2A8F1873E85},
+ {0xDB5859AAE11F4766, 0xFDE94279AFAE3686}, {0x0FD97FC69BDC9277, 0xCAB1C223027C91F8},
+ {0x5FE4F91D1B7863CC, 0x44584B7FC7BFEE3B}, {0x23F5F0F4EBB2E308, 0x35A1F272B9ACB2B4},
+ {0x92649AA91F2E985B, 0xAE4766CB61776A3A}, {0x93E6F48832CEDBBB, 0x84ABAC38A0CE4521},
+ {0x43C4231468000ACA, 0xBC8C83E27756DCAF}, {0x8FCE874D817943EF, 0xFC151E6A09A11B40},
+ {0x71C185B5F6524EE9, 0x46FE8F654316E5EB}, {0x74BF4BC2C49D5C09, 0xC9FD4E09EDD0D90E},
+ {0x27BD3899518C608D, 0xE8EC6AA504290388}, {0x27FBFCD2192CF408, 0x0971557DF6CF3C17},
+ {0x482C093440D78FCC, 0x0E6D5EA659F8AAFB}, {0xB8C11A7D70E28F5C, 0x87C46A7051F5459B},
+ {0x893B2B62D93AF3FA, 0xB348B794FC742122}, {0x4EDD76FE42AB474A, 0xCA597B1775E6004D},
+ {0xC2832E9089B83EFC, 0xAAEC38EA7A9EDE4F}, {0x2FACCC8140F508DA, 0x38EE6A485D5E64E9},
+ {0x0D31B21F8FCCE788, 0x88FE77788C0634CF}, {0xB16C697A338D940E, 0x47102F3DF0DE3721},
+ {0x9F9523369D60C224, 0x29F194743E52B937}, {0x0E2225CEA641C5BD, 0x45041F47B93ACB86},
+ {0xE797B1A49C6F575B, 0x949CD3118D4A3292}, {0xB99EFD288ED86947, 0x490BFD3A3B4BA68B},
+ {0xD9BC8DB98352DCAE, 0xCA1ABBBAEADE6E79}, {0x8E65412A4E74E8CB, 0xB0D038BD28EE30D8},
+ {0xD3B1EC197D0C4493, 0x10777E7D515C2370}, {0xC9A4891427356121, 0xAFDAA4E87B87B103},
+ {0x4902AE305DEB2FDF, 0x861AA6AADF285736}, {0xFF7551F1D9F43A32, 0xE63F087EBE9F812B},
+ {0xAD4268B41F9C7218, 0xA0FD7AC498C7302A}, {0xAD26A1BF7BFC41BD, 0x6E3ADF2B1A3B0DFC},
+ {0x59FBEB862D3FB9C8, 0xA893E37090050218}, {0x61E80C0340DAA09D, 0x7F83019D81669303},
+ {0x0862FC38CB8E82FC, 0x08EF3E12CAC332E0}, {0x02A1E499EA56AFED, 0x830F264EC9E4FB34},
+ {0x7B065B8DEA659000, 0x908AE01471C3DE2C}, {0x49CE2B047249B334, 0xFD493BD9EA155491},
+ {0x1129F01170BBF12A, 0x31A2F5971E06E926}, {0x858FBF52D0F3B420, 0xD3E2C7B55F742274},
+ {0xC5873C248B1A726A, 0x9CCDF6EA81D8F44B}, {0x3510A5A4EC0E9220, 0xC4AF068732239349},
+ {0x4B866D9607FBCF85, 0x610BC50EF43A155C}, {0xE976697BC7B20BFF, 0xEF159914C3237D0C},
+ {0x5BAD93B3E08BB1FE, 0x71FFFC708A64402A}, {0xC9B160904F7BD85C, 0x59C5CE779E615279},
+ {0x01FE435A76C4F09D, 0x50481BC8765A4C4A}, {0xCB3EEC9BA7C9AF7A, 0x7BC9EE4282A18FE6},
+ {0x58C9FE74FFF4D085, 0x9667F6A77354BEB7}, {0xC028C2857183F4F8, 0xC1079637B1A31E05},
+ {0xC342A9F3553EEEAF, 0xBCF3014AE92EF58E}, {0x05F3DC5422E577B1, 0xA24D25AC2FE81EDB},
+ {0xB365785BECD88479, 0x1A7A5B2B1B3C8217}, {0xF3B3D821419B3322, 0x5012FAD13A6A9B9C},
+ {0xDAC4C7008B0E66B9, 0x5D32389559899A92}, {0x95DB758216012B04, 0x76EE531C455BF341},
+ {0x891D037A05F6DE1F, 0xD1D3E70B31F2FB85}, {0x76921ACCF465F950, 0x9D88C73A42C8F064},
+ {0x5B09FABB3D321E9B, 0x47D026E37D3815D3}, {0x524F1BB30D4DD4E3, 0xBC5A117362BED944},
+ {0x7B7860CF66864992, 0xC0D746C93F259C9E}, {0x8DC8AD28A909C074, 0x9507C6DB94EF6181},
+ {0xA31124FD256BE5C9, 0xB2A89F6985056B78}, {0xEB0DE8CACC937280, 0x66E2422AFFE5DEB0},
+ {0x8CE347064D5F7E6D, 0xB5B83CD4DAFC7A2A}, {0x6D426CA428FE58A5, 0x99ABEC28931D769B},
+ {0x7BED96F04792C789, 0x1E314CFEBB832E5E}, {0x35020AA5651E7C70, 0x106D4367C39CDF92},
+ {0xC2C0680F15C235A8, 0xF49DC233A8D8F249}, {0xEF37FB4BFD8F2CCA, 0x01D783509B19104B},
+ {0x9E25DCA7578E3FA8, 0x4F11912837D0A11C}, {0x4C83C420A9911F0E, 0x10C2F0219C3DAC51},
+ {0x63E3B04A6C45EC82, 0x8DA5EF683B5C40E1}, {0x275717BA0B14A215, 0x1A9F4CD2E3E95D7E},
+ {0x5EF84CCF638D1D99, 0xA1B035B8A58F2FAB}, {0xFC9C3D43BA3B87A6, 0x351346E046E4D9D5},
+ {0xD3457F159F648D37, 0x201A93B2EA0654A1}, {0x071A9578730F10E6, 0x00844C6C12FFB45E},
+ {0xA0F6BD738255CFFE, 0x129FFCD84D178D36}, {0xA1C71B5791699FC0, 0xFEC27A7D0F436829},
+ {0xDC1CBE91A71604FD, 0x0A08BEFAF3C21B8D}, {0xB86DAAA8D210EF20, 0xF4DE8AA794D81B13},
+ {0x438475A0AA131FD0, 0x106283D962B88800}, {0x90B20E4CEF823FA5, 0xA4D2C8C147030B83},
+ {0xC98DEAA6571C1F77, 0x5666B66D24A89425}, {0x7ADB8CA1224D68BC, 0x50DED7C75E255184},
+ {0xC890743A0C54812E, 0x6F1348F655590E88}, {0x227B3430220B5EF3, 0x289C03F073280B37},
+ {0x3097B2972E261DE4, 0x4749C0A3C78053F8}, {0xB93D9B89FB5A548F, 0xC169EE69D4DEBC56},
+ {0x81427DBF962738B6, 0xCE2AB049DB2A13DB}, {0x4FDC990F3D6C1EAC, 0xE6D50CA5653542D9},
+ {0x0292DBFE66F88225, 0x46A32BA052F6C138}, {0x94F6C66B5ECB4EB5, 0xF92F4384FCA9C235},
+ {0xB350C499C9201817, 0xE0233E0775C3B8D3}, {0x4BCF8D0B592E9AEE, 0x4D7CC18230C4551A},
+ {0xD5342F2D771EF717, 0xDBC62009C8C6FC2F}, {0xCD2AF20A9D255645, 0x870F7CA6FC5D1285},
+ {0xD949BDEEFE4E21E4, 0x9378129ACA89A9DE}, {0xFF77DEC93058A3E2, 0x928A2D470D52C875},
+ {0x77CB975FAC60655F, 0xFD0F48BECCFC0D86}, {0x16835880D1D9FB78, 0xE69CD1B6C0BC0B93},
+ {0xDF46C8F905C2E39B, 0xD9037125701E2D01}, {0xCD8DB5A3949FF8FF, 0x0D5904B0628B9A96},
+ {0x332996868930D6FF, 0x264CDAD59CFF98EC}, {0x8AD8812DB3BC1B31, 0x6B900710C3C77E53},
+ {0xB23C0A9DC03D83F0, 0x3BEA593C6924AEF8}, {0xAEA3DEEB9690484B, 0x62CF4C756AF2123A},
+ {0x1249867ABA36BAC9, 0xC7BCD703B549425D}, {0xD30E45C49BCCF5EE, 0x3565744A6C387819},
+ {0xECE267D7B82D71F3, 0x0B5EE65B857BD7A9}, {0x0DAFE7E819A8491A, 0x2FD303186944D38C},
+ {0x233510F23EC30B07, 0x988755DD2047DDEF}, {0x8881A6C5F8039B8B, 0x4EFACA8808E7EF16},
+ {0xD0214FDA7BB96D50, 0xF3E54DBCE9505CC3}, {0x971D8FF7423ED0E3, 0xCEF664B77FAAD1BD},
+ {0xB7B71B71D5EBC663, 0xB3602044F6D28514}, {0xBFE9454C1DB828BD, 0x7BF2EEB1D9D5B088},
+ {0xEA95D7E9100AE9CA, 0x4D6968BBA0E54B14}, {0x529481A4FE0701DB, 0x02101C32F15658B8},
+ {0x5E4A3617A388DD1E, 0x8F6C4176C10957FB}, {0xE8D7C42D26226124, 0xCAFA8318D317A10E},
+ {0xDD049A7C00464C64, 0x90422877FAECA6DF}, {0xFDE02E455541A4DE, 0x47C7A8AC37F4BE1F},
+ {0x06117D19EBD337FE, 0x7053BC36D23DBAF1}, {0xD6BED73007BF2261, 0x0AC35083FC6EA008},
+ {0xB114B1841F5B1F02, 0xCCC61F8566D3191C}, {0xBFF7E97688C30EC9, 0x425640AF1EE86466},
+ {0xDB831DEA3CFAD323, 0x1D33C96966DC35F1}, {0x17C7295D2B5EAE3A, 0x7B3FBE157974CEEA},
+ {0x0F51A375043B3330, 0xA647DFBAC6DD0E20}, {0x0C2E0274CA704B9F, 0x8E4458CBFAF5F933},
+ {0x486B985338D81B23, 0x9107E58C9EB85C84}, {0x3B2F97C5211C56C0, 0x5AD85CB95D0F2904},
+ {0xFF34203B02BC893E, 0x07F7D278DB4ABD65}, {0xBEE60D2AC311BFAC, 0x42549D48E422A25D},
+ {0x90EFAFDDD6AC76DC, 0xE8AC5BB7B91833EC}, {0xDE5B02D2BA77C37A, 0x71085F40EDE02D6F},
+ {0xED2CE2CD3507833D, 0xA0D39D5120040807}, {0xD7C321E87046C6DC, 0x65B04F513982FA2D},
+ {0x8FF6A75A61988ABE, 0x51A13DCC53BD488F}, {0xF781ECB7301B35F4, 0x23AEAA58CD384653},
+ {0xA21132C9458E5DA7, 0x540FA722B45400C4}, {0xF848CA42DDC23768, 0xDC28B6BBB5CC38F3},
+ {0xFE4BEA133AF599B0, 0x4C3E57B3898D0AEA}, {0x9851C446086A3A8E, 0x8994E90D10DA3A5C},
+ {0xAC874E560DD2C9E1, 0xC79D2D399EF7CDB0}, {0x79B9707095C433D6, 0xD6B1639DB059B8A4},
+ {0xB36380D213C3BDB6, 0x11949CF2507674E3}, {0xD2866A9AF6CD7443, 0x32D18C239F72454D},
+ {0x4765FA383E06F626, 0xDC0101174E3CFF8A}, {0x5E5B596B455BC99A, 0x7E8AED289590C4D5},
+ {0xDC2575078CFD6445, 0x4902C016C8853B24}, {0x46984D4EFD3ACDDF, 0xEA67FE8164F36767},
+ {0x01B362DB24F5670E, 0x44513A2DCC253A4F}, {0x6CB73EBF30198017, 0x246F9D33874A3A96},
+ {0x627DD5725CE27674, 0x23C07568CB29DC8F}, {0x6DDB46A11D0C3A6B, 0x5F23657FE1EF730E},
+ {0x60230A1B94FEA211, 0xB9E8F50C91EB8CE6}, {0x481530C38EF029FA, 0x7E997557B881651E},
+ {0x7554A526A5A8D14D, 0x3761566BA76E10D3}, {0x4803115C8A81B3C4, 0x9EA623371D1F2B28},
+ {0x810B4CC399B57036, 0x38D72D7905837823}, {0x05F88004C67BE8AA, 0x265D5BC026E4FB24},
+ {0x74550A10AEBF494A, 0x0B33083E418E5F34}, {0x27199242425956A9, 0x30091D272255873A},
+ {0x278A3EF3003ABF1B, 0x73574FF07A14C79E}, {0x0186E5374B7E6CD2, 0x5196895C803078D7},
+ {0x60ACA89EF106872D, 0xC74A73984EDC29B6}, {0xCFF948065B850433, 0xF8723F8092E594C9},
+ {0x0196E161FFA0562C, 0x25251A8A6ED577E6}, {0x9EFACBD932BA213F, 0xC8FAE9DCED1E09BF},
+ {0xC07E1DADD6E95214, 0x4E41F8EB4CF79C31}, {0x5CBCA647D6A6BC14, 0xECAF9E882C967433},
+ {0xD55750F251958DEF, 0xDF19951D11990BB5}, {0x2121079ABD443671, 0x6841EA94F64361BF},
+ {0x551FB2E6F25F53F9, 0x93FA49B59F25EBD7}, {0x9F33B24D5113F8EA, 0x5BF1F37D74C5303D},
+ {0x754D704053E48124, 0x3EB2239A6DC24B3E}, {0x89C108B6A1CF115A, 0xDE9BBA3F0EF33263},
+ {0x6E1ECFFA37C64CA9, 0x5B24D527405EA9C8}, {0x6AB20612699C6856, 0x0D5961B00E9C40AD},
+ {0x0B873F162AE01219, 0xCD92CADF698A561F}, {0xA10B0B478D75B018, 0x0CF7B07E60C228B1},
+ {0x09428C9B5ADCC447, 0x70C9FC2115F75995}, {0x9320F4CF8F716890, 0x47FF08041F8CE1FB},
+ {0x8936F66A647672AE, 0xB28AF3C9C7270C13}, {0xDD7628433F56AA80, 0xB74329B5C0114094},
+ {0x76FBD3E7AED13132, 0x1FD40BC65E1E5D7E}, {0x5F385BD2F5728A5D, 0xC7F72C88B9B09A19},
+ {0xEAFFA008B2A0CA5F, 0x378628330E3EA5A3}, {0x0FD663FF1CE729F6, 0x5508082A86293104},
+ {0x54EE9F760770D363, 0xB696B880DFE67EAD}, {0xF04A923CE81543CE, 0xB37F9F2A6161551B},
+ {0x05096DD9A127877B, 0x58303A2204D7F333}, {0x13A0EA86422C63EF, 0x8FBC101546DEABF8},
+ {0x960E80684C6A63AB, 0xAF117E3E8671F853}, {0x36E1BDEA17B5E6B3, 0x7F23497D36972F4F},
+ {0x3ABA6AC45AAD8247, 0x793542AB32008D6D}, {0xA4F297840CD46740, 0xF9467D6893880844},
+ {0xED21520A1C71C665, 0x3BDE44DB8FD91435}, {0xFAE3B4802B13FE63, 0x55D98ABE9EB87994},
+ {0x8834D36194308CD8, 0x69874A7F4E7241BA}, {0x7819C3955507B7FA, 0xD9CFDC91E921D974},
+ {0x1A57DBC284FE50F3, 0x5B530AC00885E190}, {0xF9CAD42451292A97, 0x4BA68C686E024050},
+ {0x83E2407FCCE203A0, 0xAF4703BF2F352E61}, {0x7C8E6E560D6B73E3, 0x33DAD7DEF9FD6EFF},
+ {0xBC3EB88C1CE6D894, 0xFD7DCA131C5732A5}, {0x364A3E997A368329, 0xB4378B995882BC05},
+ {0x411FCC436E635BE7, 0x044CA642AB970095}, {0x68622E61AAD6E062, 0x2A185D6934AB5FB2},
+ {0x99971FA690403EC6, 0x10FF7EF9338A773B}, {0x360D7D26BB5E30A2, 0x8BE8ABB4C07A21E8},
+ {0x8930A5845240727C, 0x30BC6C83B9E3392B}, {0x987AA53FCFDB5A28, 0x16987C84E2C83C88},
+ {0x8D21BFFF9E828326, 0x9606140E7E4709A0}, {0xB0AD64D18A1E1418, 0xEC087187FB19EEDD},
+ {0x3CD7A0BD3438A110, 0x38EB81A5390166DB}, {0x2C1F48F5EC02118A, 0xA966C61C0A256FA4},
+ {0x8FF6DE3CBE71D34B, 0x0514536E7BBF2995}, {0xA921DA569266C1A8, 0x3D52A27116C3C410},
+ {0x1781D0C0BCD1719E, 0x6C74CEB73A5286A8}, {0x1025729D8B09DBF7, 0xD46B692470F96116},
+ {0x4B6C31551E7F8AF3, 0xBBFC73F4456503AA}, {0x71F6DB57C775CDDA, 0x0B5BA5415625DAEC},
+ {0x0AB52B39755703A4, 0xDABFC27C0E191EEF}, {0x86C2113D6DD088B6, 0x2CE7B60FBFA138ED},
+ {0xF36356B37CF434D3, 0x2963D8DE48E84D72}, {0x69F14846819F6A28, 0xBE86F38449E4E84B},
+ {0x9198A9253D76A13A, 0x4565125D5DCA2DF3}, {0x39DCCB0AD83E9734, 0x2240933E78E0C207},
+ {0x9A9C7753D8CBF7F4, 0xD2033AEB2CE9C4FB}, {0x0C01D9019D5B3128, 0xF588457DA8E637F1},
+ {0xA7080ED946F411EB, 0x6D6F9B585159CDFC}, {0xD92AC8F1F0129309, 0x8ACFD931CF0AD4D5},
+ {0x2E3253AFCA3777AB, 0x917237DDFB6287E3}, {0x64CCD9FD27B9762C, 0x09A6376C8F15305E},
+ {0x978660A41486407F, 0x6BE594A1AA93D8C5}, {0xED52B9B6B155EE54, 0x09551218C358F8BD},
+ {0x5E2187C91A14A56C, 0xF85427BA7F30E8DC}, {0xD3C91CAD5D21859E, 0xA865A147499196D1},
+ {0x6310A55F0C706F5D, 0x1B5822745FD0D768}, {0xC7171A21C2299B89, 0x0D239F3E2851B0D0},
+ {0x46757D6EE9215051, 0x4C2C8B5DFCAD2733}, {0xABED2419CCFAC774, 0xC7110AF8605886D5},
+ {0x3376B2442C4A5B22, 0x510F496C5A1905B8}, {0xC6B291A6B40C8492, 0x7D3DE8B2D1EBD944},
+ {0xD4778F294F50F8D8, 0x4C10B6327BA33098}, {0x0DD8C580C5F1CE2E, 0x7031CBF50523FE45},
+ {0x1EA1C1E4603FF14C, 0x10BDC8762EFC2704}, {0xC80DDF93BABFD118, 0x2E9875117802F8DC},
+ {0x22CD0D9E772D75D1, 0xA396AEEF92B33632}, {0x34588D05B86F7F23, 0x943B2972CA7469AD},
+ {0x8045A0B3904E0988, 0x9CC3A301BB0C593A}, {0x73EA73A4D4A1AB07, 0x1350159D057AB72C},
+ {0x65DE4E0A3E1C26FA, 0xB95BDDFAFAC8FD13}, {0x6E8C0C5473520EB4, 0x230EAD7520093A34},
+ {0x4C757B299014BC90, 0x18FD923675171B55}, {0x31A84F3370E2C045, 0x1490DA402C046F8D},
+ {0x88697D128E123DC9, 0x933F3B27CEC5D731}, {0x254AD940F97F959A, 0xA17B10C36F1594E7},
+ {0x005C0F4114136007, 0x47BFE00BF0A73EB5}, {0x127FBB899E24B8BE, 0x5812267E0A72F197},
+ {0x31A13F27567793AC, 0x67DDC8688B622274}, {0x5CDDACD51D6CF4D4, 0x667888E5010F257D},
+ {0xBD0A2BBBFD76B088, 0x91D9DEB5DD6278BC}, {0x10ECEF2B0F25B301, 0x7D1CBC16F4B28131},
+ {0xB2F48D64E85CC9CF, 0xE6F6618F856DF585}, {0x3C35E7A6FF475084, 0x90EA932381C32E4B},
+ {0x3306AC760DCB9574, 0x7A2A6DF22D68BD7F}, {0x4FABB989AA27C7A9, 0x03A685ACA6289DEB},
+ {0x8CF48A370871201B, 0x53787836370A69A4}, {0x62DF3DEDB0033581, 0x5324597BDBDBE7C3},
+ {0x69BC191F3C12E93C, 0x8C52B20BF353825E}, {0x627BB7EB3F069600, 0x74DECD1219466FEE},
+ {0x27EE821B79FCB07F, 0x465E047CBD65940F}, {0x3DBF74FEFACF59BC, 0x58F333EE68B2750C},
+ {0x0CE8ABA8F8E1F20E, 0xD7202D2273D67960}, {0x9C09E946040D72AE, 0x24135A0B5EF7897C},
+ {0x6D816FEAB28E4AD1, 0xC99CAD60F2D6FCAA}, {0x919FE8E7B2FBA7AF, 0x9E36FC0A64367CE0},
+ {0x05F12FF67F7D6476, 0x1F873F740A4FDB9A}, {0x4AB46301918868B3, 0x0325488599362E47},
+ {0xD11F47542C34AA47, 0x6EFED14DC54A9390}, {0x6BA140B3B4EAC233, 0xAC76DD9C8FA16DE9},
+ {0x8C76E5C5B94C6CDC, 0x25EFA4FED54347C6}, {0xB26128DA03CB4A8A, 0x08E717BE786933F9},
+ {0x2B92A94BAECEC7AC, 0x1B49D786E630D416}, {0xEB4C72EFC98100FA, 0x73D4A30C614ECD8B},
+ {0x73E33C780EFDBE8B, 0x6E68857A5FE667BA}, {0xEE3B5BF41965D042, 0xC9BDA6B846D1D059},
+ {0xE1886EB7D51C8269, 0xB1F52CC944FF3F8A}, {0xD4EF4C97121B2A0C, 0x4B6A8B966697765F},
+ {0x3D43FECC43818325, 0x4B44E8CB9044AFDA}, {0x772BC6ECC8E93CBF, 0xF6407A2AB3B7E491},
+ {0xC11628F4941062A1, 0x892A5538ECC05E12}, {0xEDF3E781EA47B515, 0x6D0477B050D7C5FC},
+ {0x87ACDA8850C7C2A0, 0xAF6CD993FA48F1FB}, {0x01DE95048703A992, 0x46ABAC0754E9730D},
+ {0x1F185C8203F93EB3, 0xFF3CF5BA4B0506C8}, {0xD9BB6921C5694F30, 0x586735BEB2F51864},
+ {0x5AAD68D31FAB06E2, 0xFB146A2697974C73}, {0xC4102AAB7F82DE8F, 0xE755A1ED18251898},
+ {0xDDC4E444BFECE830, 0xD520C58865EF41FB}, {0x93111CCAE80F98AD, 0x6910AA7EF13E6CD1},
+ {0xC14C3317740B651D, 0xF76BD805D4492961}, {0x7D98EFB97D9B4AC5, 0x27D002B0A51506F3},
+ {0x549DDD685A16DDAD, 0xF21245A30BBF3BE0}, {0xD04D707D95AEAEA7, 0x94501488995221D7},
+ {0xF4EAC173350C9851, 0x955ACFC1CA742617}, {0x53A3E4C53046C502, 0x430D8EB6884A6C4F},
+ {0x47E5AB8855D71A3E, 0xAF3F0EB0F47D60A8}, {0xAC06846AD695620A, 0x70DCFCF96F667F68},
+ {0xFBCE88DDB010C2B2, 0x12B63304B99528E0}, {0xBF9071FE850D24CF, 0x359E71C150B056E1},
+ {0x21004DD0FF211A0D, 0x6090C80EFA2E20EC}, {0x18693727B342B2A1, 0x14956D06CB9BEF7A},
+ {0xC71AD2CF9BB264EF, 0x9D19AA5D9B3B8BA2}, {0x472184F70ADC8658, 0x456F2755124E1A0B},
+ {0x4617790278562578, 0x35453D733023F4E9}, {0x6DE5DD194EDA79A2, 0x72F510B9F5C92DF1},
+ {0xF3A5A19C8C500F86, 0x061817785535F7D3}, {0x5788445150810A46, 0x1F749C601C8B81B3},
+ {0x60561FFDE67C8C97, 0xAA1754645C5E311E}, {0x4430D9628FBCBB71, 0x90075D6990AEA46F},
+ {0xFCBCB2F64FA5E998, 0xEC7E3CCF0F5E1824}, {0x9ACBD005FA116175, 0x919F36D6CEF95367},
+ {0x87F52A341E9CD9B8, 0xF4A55DA8D95DAD81}, {0x463D2E28F17F7838, 0x6166025617D8F820},
+ {0x8BF6E80ADB8F808F, 0xE844DA7F722AB726}, {0x3D46590E7FB3EED6, 0xFB87EC791980D2D3},
+ {0x5661CAC5CEF6C5DF, 0x57E0EA21D9012A7C}, {0xA253EBCC9FBDA847, 0x34743DE99A7F45C0},
+ {0x8952CC03DE1DCA02, 0xA3895F79C57F9377}, {0x6D66BC01FF1FF4CE, 0x2BDF9294A990259C},
+ {0x4534109FEF56D1D7, 0x13AB628D0F8FBD4C}, {0xB5CB980812C536BF, 0x68A671C3ADDD697D},
+ {0x5BF34500B34527E4, 0xBEB48D34F374399B}, {0xBFF0A1FD407D5C52, 0xEE0F4F1244374F4D},
+ {0x20F833292721B30F, 0xE54E54353124373F}, {0x16B5555EC005C2E5, 0x4C70F4515D88D4C1},
+ {0x297264921AFA1AA1, 0x19C155AF4866FEFF}, {0xDADD2E772D412843, 0xA9E64EF14144F144},
+ {0x1BED99C99E4F69FB, 0xD66A4FD814A0ABF7}, {0xAAE218FFAC8806D1, 0x19132B3D4EF35BE8},
+ {0x19CEF0536722714E, 0xC78EA5CF03984C3E}, {0x9115C723D379B282, 0x966A616B53D4DAC6},
+ {0x2607EE0340E64003, 0x887586D036148B0E}, {0x4A39A3133E34A1D0, 0xB1ED9CF7BFA267A6},
+ {0xB5D1CD4F50055356, 0x89EFEBFC98DA8611}, {0x9C5E14D996680F42, 0x4D4599D58ADE0E03},
+ {0x4D70409BA7F5608B, 0x77248EB4D073DAB4}, {0xA9150C5A5A4C2355, 0xE4A6398A23A6F91A},
+ {0x4F2AC21A1F4E6A98, 0x4CD9F55C705BD711}, {0x11736612A22B9FE5, 0x2123B20CC5951C45},
+ {0xCC4292847A974F77, 0xC97D1D77BE07EC64}, {0xB371A4FE3AAC5076, 0xAB44E375D00DADA5},
+ {0x285D42FF75A4D91F, 0x6446ADE2F11869F1}, {0x4B6BA2D58863A39A, 0x8BC9EE1B7CBEBE51},
+ {0x48258F0972D8C4EF, 0x895D893E60E81AD0}, {0xC55084333E7044FE, 0x501305D60F557E38},
+ {0x11FBA1F5F4EB4120, 0x5D33077656FB48B8}, {0x8ED64DC267C864EE, 0xC9894DEC7977FCB7},
+ {0xCDC9BDD5C4E412FE, 0x919112A1D7BA9CBE}, {0x7387306023F6D7D6, 0x49D7E5C52776B3CA},
+ {0x48212E2C00C45AF7, 0x652D67E6DED19CC7}, {0x83CE7AC7688F7316, 0xC125EA50691EA378},
+ {0x9B744272988A9BD6, 0x1C08ED9B177C3DDA}, {0x93E361391DED69C2, 0x251BB870805BDF27},
+ {0xDBFD64B5F781DEEB, 0x6BE55ED5E84B9627}, {0x9F2B9D9FA368AF8B, 0x2EF9A25A8B90994B},
+ {0x4B18E2B1C2A08A5A, 0x296570AF9458FF13}, {0x1EC052A187FCBFAE, 0x3BB84DFE146C5CD1},
+ {0x823BB6EED8B34867, 0xEF65CAA0D1037C43}, {0x99DA696E09EC7417, 0x74A238DC61C2545E},
+ {0x02CD3B399A6E068D, 0x48C6A90A98486461}, {0xBA78C7E957A64684, 0x4EC1812C0D9CC740},
+ {0x204BE85A79198AC0, 0x110ED76400532831}, {0x79F28BFD750C3E0F, 0xE66B021F4B5F64D7},
+ {0x62F244D65CFCC2AC, 0xBDAD4348DF15D257}, {0x1086D2021154FFDE, 0x20F0D31524D40CA4},
+ {0x036B94EC53A9B6DC, 0xD0280E5C1E0BA62C}, {0x49C197BB2A256AA4, 0x8ED9DE02A5FA0887},
+ {0x753075D4E011BB78, 0x95F3B2B532D56073}, {0x88DBA8CC8CC81B57, 0x9A6AE5E4AB776E28},
+ {0xA836CAACF1FFFD1C, 0xB7C6727A717E6FC0}, {0x58EEFF8152E51580, 0x4492B1D97CDF45C4},
+ {0xD2A578E4911065DC, 0xDCEA2E4BDA4E9137}, {0x98B416EA6829AF93, 0xC6814CAAA0C743E9},
+ {0x23BC3359F53730E9, 0xE3687D3AE89924B2}, {0x3F08313375D15CA5, 0x52A8AB1A9251E0DE},
+ {0x27579BF57C227D4E, 0x4E8B2D921787C72E}, {0x1A68D890E7883CE2, 0x28C1B5C5C72C10E1},
+ {0x63295AA74E8F4767, 0x47326C9A6256BC15}, {0x3329876D1271757E, 0xF36229DF2899F9CF},
+ {0x31E8577FF44DD08C, 0x689083B6CBBF16EC}, {0x504FB59878AC925A, 0x4F910ABDE58298FF},
+ {0x83A293A89A4EE954, 0x2D5E464F90F9919E}, {0x414C2E97E7A41AA1, 0x7D85B90B8EBC0ED8},
+ {0x53D61EBFAA1F9299, 0xCD4A06AB6AE5AAEF}, {0x84CF05C352DEE0C0, 0x0B90D5E6B14D2553},
+ {0x836CD04841F95731, 0x3F0BAF8BD9A72B83}, {0xF52BCE30EA1FFAD9, 0xCE394729509A3C3E},
+ {0x616CE25E4D461F13, 0xC80CABAB127706FD}, {0xD42B5D83BE40FB16, 0xF3493D73EF6FB240},
+ {0x2378E0B8CC361930, 0x6CF3F21798CC2CE5}, {0xFC189E548A36A56C, 0x0ED06053A9D91192},
+ {0x3259CDC07B88DCF8, 0x92099DD10C229B1B}, {0xA21BBB4134977BB8, 0x674A64EF1BA62D60},
+ {0xEDF081F5FA735E93, 0x74D7052BEB2C257F}, {0xD11610F9D6E65A0D, 0x3F39CFD313EF9687},
+ {0x735D72E791204F8B, 0x7D74889394222BC1}, {0xF5A0E218CF6BA113, 0xCF3304E7B88B0517},
+ {0x8A52593B605954AC, 0xA970B0D2E6AC072C}, {0xBD3E9C5AC92BB59F, 0xDE988889D13622CC},
+ {0x37F51E71A7FB5E85, 0xC9876401B9122EA7}, {0x25E8A9ADB35CD0CE, 0x55485493D0179485},
+ {0x16D57BC10FDA64B4, 0x9A1D9D708C991BD3}, {0x4D233FF526A6909E, 0x3BCCF45430C61813},
+ {0xA671C1C332CC329C, 0x005F74FBE5997CC3}, {0xC1AB0824F6AE7183, 0x488401EEA6FD6824},
+ {0x3CD56EC12F65463B, 0x6675390A46F853F1}, {0xF1757ABA8B5A8BB8, 0x1DDC8F6A22AA84E1},
+ {0xEFCCCCB2D77308FC, 0xD9B22FEF747ABFF1}, {0x030B76E247E1BB2C, 0xC4C2F67F33D40300},
+ {0x2A919466C4DB5E51, 0x94EA2EFF66E571A6}, {0x1859D98FBD9D46DB, 0x9E2090D3535F8932},
+ {0x0C36FFA6E9C072F3, 0x528D20EEAEEA5094}, {0x619A4CC0CC485CD8, 0x63FA4CEFF966063C},
+ {0xFF5B02913DE1696D, 0xA6CBE0E317C1401B}, {0xC9A00F56AE4E9409, 0x4B01A958BFC07089},
+ {0x1934383F05BB4D37, 0x17F6FFD757E96868}, {0x854C56F06CA9A0A9, 0x96155421C30D5741},
+ {0x2A92BD5BC9BA1B1E, 0xD36C07437B5511ED}, {0x485A55F80A359225, 0x17315414D0F06819},
+ {0xD6389646299F4045, 0x7369033AAF9A505E}, {0x0328666378E24179, 0xD7E525533AC5273E},
+ {0xB2182A319C335A8C, 0xC2F4CD539559A555}, {0x00CA713A46769CEB, 0xEE2AFCE697BBD0A4},
+ {0xA0C3176292C8D069, 0x9EC2AD7E82EF387A}, {0xED79821750611C00, 0x0A30E66D55A4D1D9},
+ {0x06205192BC66BE8F, 0x83459BBFEC7924C8}, {0x530B069702A8027F, 0x219B6A7F316C36F1},
+ {0xD7996C6DD69E8E12, 0xE724FEF8E3A1FD5D}, {0xE5AFD748A647AE5A, 0x8F94FF6B1C00AB6B},
+ {0x7CC6D3635A23BF9E, 0xAB857B826AC4988B}, {0xBC7C0B2F00153CA0, 0x9110A27806DD30FA},
+ {0xD148204ADD6AFC8F, 0x8B22FCBCD72F2D22}, {0xC9C0A1BB10A839F3, 0x47A610BD4E8D610A},
+ {0x47FD13E4386C8ECF, 0x796FFEC13D54BFEE}, {0x8E2977E388CA3E3A, 0x8F6A0BD7547938B3},
+ {0x1882AA14440FE736, 0x76C89E492EA4259A}, {0x52F83B5D545B3D5A, 0xAF9ECAF78D41F69B},
+ {0x27C77A86992BC4EF, 0xE4140B49FE05F50D}, {0x07837291EA5BE59D, 0x9AE4568C0E430790},
+ {0x281BBB603FFCA2D1, 0xC5303E50E9B53668}, {0xD64A1743E1B83E33, 0x57D082C5207BD76C},
+ {0xA6CF640625C4E631, 0x9AC81445FE8326AB}, {0x725F85C94C52CDE8, 0x9755AA16E774E2D1},
+ {0x1B5984A86652A3F2, 0x3AA5051AE0F3B736}, {0x9FB3FF782F3941DA, 0xD0380C799B236913},
+ {0x7BED601AAF32A9EB, 0x9B4F4A398ED14C98}, {0x00EBCFD7F9AFF562, 0x9E99AD78630C105D},
+ {0x9C1463A88674A9C0, 0xBAC427543286D769}, {0x5F28169B68F64C33, 0xCB89F617504259BB},
+ {0xF2F311B4D2310C6C, 0xF7389FF35D90E2C6}, {0x64EAB52C3F6DF568, 0xDC22201CBC8918D2},
+ {0xE099F8725B87E773, 0x528B0CD5A5C844FA}, {0x8CF2A5433936760F, 0x1217532988A59D7D},
+ {0x24F10ECEF6C7D2BE, 0x810F626B9A889332}, {0xE06230342B4BEEFA, 0xDF7FCBA299CAFDD4},
+ {0x4AC79E1711C8F09C, 0x127FA08225608D31}, {0x73ED40949029CD6B, 0x157E93A3C5272CF7},
+ {0xB73669F70795EEB9, 0x47DDDD76F9CECFAC}, {0x4B5A6356B39ACA93, 0x8DFFA1127A775D1F},
+ {0x53B14FB9C13DB8D3, 0xB93E3BC4A0C46AB4}, {0xA0115C8ADC4EFCD3, 0x1D30EC160EF950B5},
+ {0x7F39FD0AF7139212, 0x7CD6740160678BA3}, {0x6451FC75C749F451, 0x9B94EF96DC475F69},
+ {0x7A8C8016137EFCA2, 0xACB5D1519FDFBEFD}, {0xA4050EF5E207F88D, 0x0E6139CB98310B93},
+ {0xA52E12109D3A440B, 0xBB3232999BC520CB}, {0x4857E7102AE18374, 0x71965509C4FF3796},
+ {0x9E45D5D21A915B95, 0x45C2F8168CF60531}, {0xDEB17CE82AAE5A29, 0x663B2877672A86ED},
+ {0xFBFA65964F664095, 0x6DD919302F29F8F5}, {0x72477781056802DB, 0x34C7656009523EB3},
+ {0x57CB93DA39A2FF46, 0x8B04848E49B25DB2}, {0x36A506A2039A0E1D, 0x215F5A584487C216},
+ {0x6FBA788B13E6827D, 0x160569A20ED887EB}, {0xE77D869C6AEE8220, 0xD695C00BBC868B0E},
+ {0xB84F6204F64F42EE, 0x1799B2CCADDB51C4}, {0x767762A180CEE0EF, 0xBC7D478B0A3033DA},
+ {0x27A90A27D5900C33, 0x70F7016264B4F0E0}, {0xCA85A07BA0BDDD3F, 0x60B2BF3B2B9934EE},
+ {0x3BF9058F3DEAA140, 0x283BA49FD3F423BF}, {0xE3C19150E59D67E0, 0x990DB09904248497},
+ {0xA9EEADA8C093B643, 0xC99CA061E7A52FCA}, {0x37B7F10080C6F0E0, 0x6011ED298A39D7E6},
+ {0x5ECE96A4B67EA985, 0xC4BD52B3E845B003}, {0x3297C4A2CF9FAA95, 0x66686951F0F8B8F9},
+ {0xF8300EDA896807BE, 0x97C6BB21F5E10B02}, {0x2F4DF69B591F35D8, 0x2B93391FB1AD1C72},
+ {0xB3B6604AB99911C2, 0x62231A628E6D1B8C}, {0x2E68D1A0F6E44FD9, 0x39023183369F3A35},
+ {0x7844E83C493E04A8, 0x5243F3629A719B3A}, {0x2011D0FFC22B5DB6, 0x2C9D913A683DB722},
+ {0x84FCA2E6C567555F, 0x5EE7783A3B06FFC8}, {0x910AC8B4BC1EE8A6, 0x3740210567FB0C6E},
+ {0x055C94C63C24C023, 0x09EF70A867918687}, {0xAA98F0BC6FB3352D, 0x36E27BCFFAB7AE40},
+ {0xF61D6524BF2BF5D3, 0x0C54B7DDE4915B8D}, {0x5BFA84365A98EA8E, 0x8D398E11E27F6BB4},
+ {0x8EAA46E8BB1E866F, 0x0BF9F94150F05ACC}, {0x63107BA7E11058E2, 0x8D63B668A1EDD143},
+ {0x6E05957A053D3499, 0xD0DC0C27B46DBBA5}, {0x3DEFC07C9A93CD9F, 0xBCA6E06B6798BA93},
+ {0x49A0FE730EFEE737, 0x6B5CD269BED0458B}, {0xB45000B867DE21E4, 0x073B28A851FDE15F},
+ {0x587A6F5B2E9FF775, 0x40529B1987554406}, {0xDD266C8577665CEA, 0x6A0C8A3316A06131},
+ {0x286D68F7FEAF9FCD, 0x616EF8D78A3F3767}, {0x9F813E199403600A, 0xCEE98A854822F457},
+ {0xDC38332B2EE75359, 0x52F394032070AC86}, {0xF6DF77C4A54BF96B, 0xE17CDDD91C1E99FB},
+ {0xC1EC209D16094263, 0x78162348B7AC5CFE}, {0x4546076CDBF5978A, 0x2C1A83CF225CA87C},
+ {0xAF5E01A039AAD93B, 0xA6F8488D9FCED672}, {0x2617C91B17C07056, 0x681C3E6B8A34ED3F},
+ {0x3FADAFCE43A735ED, 0x4FB11C28CA7E57C0}, {0xAB48C891E4101F2A, 0xE28F5F31904EC683},
+ {0xD6A5A63CB5CB8BB2, 0x5C7E11B782DA0375}, {0xFBCCBC2F0DFA2480, 0xE850FEA7906FF94B},
+ {0x68F180E93668F3A6, 0x5EC235D80524A3A3}, {0xB73B947004456462, 0x7915DE1501938363},
+ {0x87B7DBFACB87E794, 0xEAFA27975959DF75}, {0x7256078AACD8F982, 0xDB904F6301CFDC85},
+ {0xAB98BD7AC30BBEEB, 0xFF93B741DED4E936}, {0xE5317F9493D9D928, 0x2D0423F3C77F80E6},
+ {0x4A0491AB8A82E0DE, 0x9477DF7D6CC35EDC}, {0xD4726FFC087EA366, 0x0B2061E61FC71459},
+ {0x8CC07E6C2BA2B025, 0xA973168A2EED9205}, {0x58DB54719E6B667F, 0x511A448FCCB93BB4},
+ {0xDE6FCC372C75ACFE, 0x09BBB29FB5FFAFD6}, {0x859ACA0F94A36473, 0x41AA4DD68B5F328C},
+ {0x86554492E6313303, 0x3AE96803F9479085}, {0xE032F9D4E769786A, 0x8C38C65EC6827EFD},
+ {0xB67EBAF496FE66D3, 0x096F175431B14496}, {0xFCB16B098159EFB6, 0x13774D708D4689A1},
+ {0x04C449FCBFE86D55, 0x8697488A48D8CC43}, {0x562CF0C7B6A18FA9, 0xCF0CA497B917D827},
+ {0xDF03BCCA0518FB4B, 0xA57C42D357C82E3B}, {0xBEF489496F03C3EC, 0x6E32808A307D3899},
+ {0xE5C22C16C71C1942, 0x56CE2140759EAE2A}, {0x5DD6D457B78A2DFC, 0xC5A08348B140E4BC},
+ {0x6A766D8153506BAD, 0x65F0C02CC575F626}, {0x0B6C0216488D7696, 0xC7A4FD9E36A3A974},
+ {0x46068A68A7112F81, 0x5A891EE45A445866}, {0xA6CD67DD4A02AD4B, 0x9CDC5DDF165AA20B},
+ {0xC7D15D951DC55C7F, 0xEE46143E375C94A6}, {0xFCB9C1BE53F5D367, 0xEF303FB7E9749FA3},
+ {0xADE55A46913EAA3B, 0xB331F2C59623A3AA}, {0x3ADA40925E7E1370, 0x5F9690468BC35457},
+ {0x5912580023A164AB, 0x1A44FDD131A4752A}, {0x55696E7A1FADEFF7, 0x25504B37081F1D5A},
+ {0x76A16381C95CE116, 0x8BEC9824705CD3DC}, {0x31EAA5F431C56351, 0xBE6299004C7F3942},
+ {0xFBB6202E4E30A177, 0x6B153ADE99F97919}, {0x52DF7D6CE6043CF0, 0x6C93D7D073D679A5},
+ {0xC994A71F9E793A54, 0x4C39F76954E6831B}, {0xDFBD03EF5714DA59, 0xC01BE35D5CBDC368},
+ {0x60D9BE9AF77CEFBB, 0x840366405F5D3068}, {0xAE6B3DCCDC9BA4CB, 0x366490A17873EF6C},
+ {0xDE625E5331B927E6, 0xE109EB9D03B7D830}, {0xE83B94074E63D8BF, 0x36A0B2BE59F5D438},
+ {0x64A20E44B3FA391C, 0x46FE952591CFECF4}, {0xEB5D1A20EFDFE129, 0x05745DD9D37B4A65},
+ {0x72F3053E4DD832FC, 0x8E7AFE854A721DD0}, {0x99E99F6D0315280D, 0xE05B51EE7621CFA2},
+ {0x97AE8071207B9B25, 0x0B4723AA2F2EE3B0}, {0x55AA62A5794812E7, 0xAB6AD4E0AADAFF2C},
+ {0x08056C4E19150FC8, 0xBF2C72558D6A106B}, {0x741515EB25FAD170, 0x151D6D402DB7EC3F},
+ {0x3D892F19C627D31B, 0xE9EBB0CC34E7E6BC}, {0xD712F734D876D220, 0xCBC01668F1942C31},
+ {0xADBE633CE5893B2C, 0x2E4E8998B2AD285C}, {0x96607FC2C1B78B12, 0xE809F3F93BC5D5D4},
+ {0x3877B9B0320E1B6A, 0x1356D9F70ACB8BE3}, {0x9E83D14E80E8F271, 0xB7DEBD1EABF31E99},
+ {0xEBD559E31941E7CB, 0x3FB31D53A8F961D0}, {0x02C805277596A164, 0x8B8616FEE5D87AF8},
+ {0x75162EE5D67E28D8, 0x579B97CB49E466A6}, {0x3F17F70D6EBF7414, 0x54265D18E93C3316},
+ {0xE4A9DA99BE3632C6, 0x50A40B2BBACF96B1}, {0x08B5D8D2D2CCC6F7, 0xDC4F157A99A87636},
+ {0x1472D27D03488953, 0x8814F80EF90E3A7F}, {0xFA33F793D4E19FB1, 0x4F035FF2B4FAF0B9},
+ {0x7D417A7827787A81, 0x10983CE95F5F14BE}, {0xFFEFC070705CD8FD, 0x9454D3E7F23901AF},
+ {0xCE6708914A348F2A, 0xF6560677283C12B2}, {0x6B3D184965D9544D, 0xE136AA8256619E5B},
+ {0x0CA60654C63265E4, 0xE17BBAB030702CC1}, {0x29663EE62FB9B3A8, 0x8362AA4DF93B51C3},
+ {0x3C5E8A52425F0987, 0xB1163677E0E4D475}, {0xD0964712280E2205, 0x2A18862A2B6EF448},
+ {0xDE3759BD5DD4C843, 0xB5DAB589D7666123}, {0xD6044CE27B5D495D, 0xCD75637018C6668B},
+ {0x5DF45AFBA790E439, 0xCABF9FE8E3065A4B}, {0x66C52996C43F0222, 0x4658537AE1A74AE3},
+ {0xD8D37E63AFC94265, 0x89947BF348577207}, {0x990030B4D4A7063E, 0x21617DFA08F8B535},
+ {0x7CBB0E13CA732F26, 0x853A71C2C2E274AD}, {0xC0CB1EDCF52C4B67, 0xA2B0D00EA97E678F},
+ {0x066E462BEF0CC4E0, 0x44DE593E3C7ABDB1}, {0xFE54B05A88FC7D85, 0xBB413D9789A49BE6},
+ {0x2904A646B048F4FD, 0x85D0E3864DEDE975}, {0xB2A7A08E7BF5BADE, 0x37482A45629503BB},
+ {0x2BB411283CAB659C, 0x9CFF56177517ED40}, {0x6DF9F754133A0EA4, 0x868D47EA1F541BFB},
+ {0x9278AC0B940C481E, 0xFE44D28477FEE052}, {0x2590869849FA3C90, 0xAA7EA8CF25B2F0BE},
+ {0x794AE5A54FB8CEE1, 0x83576C744DAF43A9}, {0x52CF4EF50043A6F6, 0x5588DD068F7A54EA},
+ {0x4EA7288301F55588, 0x1F58F03261E0CC4E}, {0xDD5CD9BD938AE4EE, 0x4AE4A248991A2BFB},
+ {0xA32BDE36F9D3E11F, 0x5FB3AD2A30B1FBD0}, {0xCC14AA1870C9FE88, 0x7D96C38FACF54EC0},
+ {0x6A5B3D2B01E18FF9, 0xE413A8CF020C5A48}, {0x800A5CBBFAB4F699, 0x9504BF82CB4AE799},
+ {0x56A784D217AC8B8E, 0xC3B25B3142F1E3ED}, {0x9921FCFBBAEEC56D, 0x7353709C12A8D62C},
+ {0xC653E7177DC9D649, 0xBF9DA70EBF5C51FC}, {0x21FEE3319D32663B, 0x71A9A101231C51DC},
+ {0x4FB2BA1345CA8BFB, 0x73F172C496F323F4}, {0x3A034F8D332C372C, 0x1ADC3455F5A4E0EB},
+ {0xE99368182DD7FD2D, 0xD877FD8F207DFFE3}, {0x208F3C01A42F5D63, 0xB7A2F8C9E272650E},
+ {0x92590E1816B7AD9F, 0xDE2D4B2B2BC84E3C}, {0x6ABA00E432C9DB4E, 0xE25C6D6CF39B7C91},
+ {0xC98B4159C1920191, 0xFF228BEE4DF8CB4A}, {0x48D0D18F83A3E700, 0x27A258FBEF210663},
+ {0xB549623C6F9296EE, 0xB3A3D45F319CA64E}, {0xF33966094F9DB456, 0x7E8B379AFCD115CD},
+ {0xD2FD7B291E5701C0, 0x3E844B3C37082E81}, {0x97096303C7D133DD, 0x41B351DC515831A1},
+ {0xC64F2DB88A47F54A, 0xB82EED993FF2657E}, {0x86E14DDE7FBC9C2C, 0x9DC70E9D4C14D8DB},
+ {0xD52FE361D0EE6147, 0x2CA150E004EEF035}, {0x778B5324905B2F59, 0x02A8806D8EB1B5A4},
+ {0x3BA43852218EC57A, 0xEEE9479BD85FD8BE}, {0x841D5AE298C3A87F, 0x677B5E2215E3EA95},
+ {0xDFC2B43CD906B8DA, 0x4A30BAFA4996F37D}, {0x8E6D48E6FF824BA9, 0x4AF0EC8201ACADEE},
+ {0xBA334DE8289B64E9, 0xA72C4C184FC61A50}, {0xC0B3C2B3A4D39665, 0x91EBD552846F80F7},
+ {0x7FE5AAE7A16C2703, 0xDBFD55805534B3C9}, {0x6109A0027D8D0F56, 0x0495BADCC794A4EF},
+ {0xA6BAD0C3694ECCD3, 0x02A7893B881FE561}, {0x3FC3B2FEC1A3B71E, 0x2C794FEFC1661BE9},
+ {0x433BCC1D1823F02C, 0x5879AFD9D9F92A15}, {0x5A8E2C582835F712, 0x889F5A9F77C0069E},
+ {0x7222567087D5F8BE, 0x50F15CF85AD67A90}, {0x4A2E12595DE00CC9, 0xE3F5B25621F1BCA1},
+ {0xA7E7C216C791F1BA, 0x0B405A93C2227116}, {0x827A999C7F2E23F9, 0x369645120663D980},
+ {0x49B0999C56C47AA9, 0x22ABCABD65A6360F}, {0x2926B33E2A893522, 0x4EFF8CFBCA9479CC},
+ {0x4AD56D3B8D890AE1, 0x8978D5A604344D8E}, {0xCBE697CDF1C40812, 0x9264300E35220945},
+ {0x663FFE1F4326D77D, 0xE1746FA9BE9ECD80}, {0x38E7D94684EC8503, 0xFC587D2EB2C95C0A},
+ {0xC080743CB0BF5FC9, 0xC9FE8EE1A8C06DFC}, {0x2F2415A325BC010F, 0xDDBC55A6A4AD2FE3},
+ {0x483FBD1B0DB9D3B2, 0x62371E047AA28E84}, {0x5D2FE886D5E506E3, 0x203D848CD29C3D30},
+ {0x67FB0112C3E3DD3A, 0xA5D1B3DEFFA18904}, {0xD18DADDF7D8D4F70, 0x10683FF6B4C88E5C},
+ {0x295CAF3B00C4B216, 0x638BB6AFE5597D95}, {0xDFF8DCB69AD26F7D, 0xAE482148B21057C5},
+ {0xA4A81103078C380B, 0x9C3ADE8F39570445}, {0x1614F007AC6F8BF3, 0x31D5414A26C2D586},
+ {0xC5109D4EF7D52875, 0xFFB02FEFF1276B44}, {0xDDAFC8EE8EE32964, 0xA48EF429F1F21034},
+ {0x370F1C3E65D11DB2, 0x6073A417DBCFBDC2}, {0xC803484BD4D89BE7, 0x61B096C4FFB8E618},
+ {0x28AAA01AACB69E5B, 0x490310203A8EE27D}, {0x17EAC99C71409A3A, 0x33624D63BC535CC3},
+ {0xA43F603A46CB5F29, 0xBAE5402216640F12}, {0xC2FED8FC8FDD7B91, 0x8B4EA6D24AE6B788},
+ {0xA0852B4D6208D470, 0x296083FBB25A9B81}, {0xAB705473BDA1E2D1, 0xCDCC271B025DF9D0},
+ {0x897235D13F6CB81A, 0x500541881B88DD5E}, {0xBFCC8A60AE07D5E4, 0x2A7892B86C16C091},
+ {0x80134EEF45250E73, 0x35530DB93F6A5B7E}, {0xDF6E985EF1E6CB8A, 0xC08BB9C581BCA4A0},
+ {0x03010978ADC6DB8F, 0xCD779979AD46B6EB}, {0x62FC5829EEEBF5FD, 0x87C6A4F008322AA3},
+ {0x3029FF5B0901F332, 0xC74E3EDD4ECF4BC2}, {0x1DE96D61ABBEB739, 0x43A0A456898C6CBC},
+ {0x36EF91DF24577F8F, 0xDACC56E171B730D4}, {0xA9617E172F9C4A23, 0x7861C3F4FF03EB0C},
+ {0x917817653C7A590F, 0x5C5D313D2CAED5DF}, {0x56AE9E8497652254, 0xCA4BE1B20522486E},
+ {0xEC94E0691245D866, 0x4B367D2D505BD67C}, {0x664696AA3E6AF3FF, 0xEDC0B38567456CF6},
+ {0x862A8CD30C85E713, 0x6C222895EF98AA67}, {0xD2B0AC73E765703D, 0x09DBF30C0512BA5C},
+ {0xAD7A7AB03C6C84AC, 0x694FBEACEDE70992}, {0x31EB6759A03FE3D5, 0x6E64FB03D5DDD676},
+ {0x3FBD4A7B0E90765A, 0x429ECE51C7C40290}, {0x7ECD51EDF4C39090, 0x976BE2BC6581D352},
+ {0xCF6A072920C5F35F, 0xFF7F7F8565F19EA0}, {0x68073C3A6C683196, 0xD438ABC1F72531ED},
+ {0x2A250E4BA850D827, 0xCAC83360C70F3189}, {0x086DC5892B6B83B5, 0x857914377349D256},
+ {0x2BB8AC371DFAB2CE, 0x4D471CC7BEDA964F}, {0x49C29DDF5F4DD4DB, 0x109858EBD37B7994},
+ {0x9E2BEC1F9CF62AEF, 0xFE8B764E2EA61420}, {0xD94BABCAAE706F48, 0x4628BDE93352CDB1},
+ {0x085C5C23E544A5A3, 0x64D2B6F2F9BD736E}, {0x9C7B6590EF7938F0, 0xAC42768321C3A944},
+ {0x82885DE6B48F3A09, 0xD361D9462F15BEE6}, {0x759DFE346B8E229A, 0x5596C8D2D17DACCF},
+ {0xA84FC46C7A5D8E2A, 0x8A7AF4B702DAF775}, {0x47F31B1CA2DFFC60, 0x029508FC0759EE91},
+ {0xC2780DD13A43F480, 0x2F8649EB1D261A39}, {0xEB4DBF78A9F9C2B6, 0x2424D43D00B422BD},
+ {0xE68957526C937E82, 0x11F878C4D5E39349}, {0x03D9F1C366C63BF9, 0xCCA69888A3F08FFB},
+ {0x36F3A4C28773EBFD, 0x67DF69A580E5DABC}, {0xC6065FA108E96A1B, 0x138699A73A84FA21},
+ {0x585A5CE1B00E9C65, 0x46741AAC019B55C2}, {0xFB1189AF5FBAC598, 0xF0AE5C6E7E3C0C04},
+ {0x028C13CE8E780935, 0x5639FCCBDC351541}, {0xDEC3600ACA0DA91A, 0x4FF2C9AAFB7E2353},
+ {0x4A2541554378DA5F, 0x24CC90E2B9E3DA87}, {0xABCF43B61F5CD0ED, 0x1078F55AA3930F7C},
+ {0x2ADD9526454FC12E, 0x23E24C1E3379D2D3}, {0x5032B3C078000663, 0x34F841AD92E2CD57},
+ {0x5990BE597FD64CB2, 0x71FC72A6FB40AA4D}, {0xACEA486503DC517F, 0xE40A420CC29F314F},
+ {0xC38B8EB38C593655, 0x628A75673F70ACE6}, {0x61716DB8D9AB89F0, 0x91D243A04BABBCB9},
+ {0x0C59BFECC792BAFA, 0xDCCF1F40C061EF9B}, {0x26C9EAE6719AE6BB, 0xFFF96E0F29CE1B0D},
+ {0x4F75AE34AF566133, 0x7B44988C3FB8113F}, {0xFDC7B9B302E310C7, 0x2B848E30322B488D},
+ {0x88C33722A2954766, 0xB3C27C07CDC95310}, {0x1198C685214B77EC, 0x4A033D017FA49CE7},
+ {0xBA9BACFB73594E7C, 0x08E8F628F2B4CFDF}, {0xD78F702BE8B13A63, 0xF2138411C991BA43},
+ {0x7C9D84A861532229, 0x28B2D218624A7A87}, {0x9AC12577812E1353, 0xB787E4B31D28CD8D},
+ {0xFDEFA90ABC48AE36, 0x637DF2872811183F}, {0xC507D029E75BF21B, 0xFB9C5270B1DA56A2},
+ {0x469E95AF982B3143, 0xB3AAB41B21E490EB}, {0xB95A13176D7DF839, 0xE2C799AA4A884FA0},
+ {0x66E2EB00E9DB45CD, 0x00EC8228ABEFEB7E}, {0x68F45A4F91C2BE3E, 0xE257D635A2007DA9},
+ {0x8DE03C92B57B0E9E, 0x32CECC40FCB6DDF9}, {0x18252B791E66D71B, 0x63D548D43CA0D17B},
+ {0xD66D147A15B21A54, 0xC6D2429F18780433}, {0xCBE112B444FE13C8, 0x03D6E376894C965C},
+ {0x23737491967826A4, 0x1C0AD7E2AA58D42E}, {0x43631F053303DE91, 0x4796E4E1F325644C},
+ {0x6DA2A1ABD76C8D65, 0x3E36A750B8D31E40}, {0x61E0DDC038BCCFCF, 0xC7E447D4D82FBECD},
+ {0x96C06CE03D03018D, 0xABC97C214EE0BDEF}, {0x1212EA34E0CEFCE5, 0xF98E7AE2029F3AB8},
+ {0x50DFB0D0BE027D1D, 0x1695D4859729E0BF}, {0xC1EDF99B28D8E450, 0x543AB06E10EC45CC},
+ {0x3F0D368527E68C5D, 0xFAF108D7F64A200F}, {0xA1F97F1505572E3E, 0x17EF542D20616E09},
+ {0x533347D126F97A70, 0xB4310EDBD40597A6}, {0x947E8B318B35D8EB, 0xEE142A55ED564770},
+ {0x7B1FFEF2FAEBEC2D, 0x9930B3BC03963824}, {0xBD9C19CCAF4137DB, 0x2EBACF7DE6826503},
+ {0xF9317F902172F480, 0x129BA87004E451E1}, {0x989EACF34FC13280, 0x7C4B7A45E9297393},
+ {0x5B8640EEA3407712, 0x5C94D71992BA3E7E}, {0x74EB8EAECCA4DE31, 0x0F5F40CB6F542D98},
+ {0x3963C247B3383434, 0x58DD73CDA927B591}, {0x2BB062C0150FD9CD, 0xB38B51B08EDBF657},
+ {0xBE38A9069D988B5E, 0x80C1C01416F746B6}, {0xD1BDB4E70DA28FBD, 0x81548B79DD2E9B28},
+ {0x633DEDED08C1BA2A, 0x49F6F39B97F87792}, {0x145E4DAE60C51E55, 0x3AC64509882AFE91},
+ {0x1281B79FA14EFFEF, 0xD203E7A2F68A1AD1}, {0xE359E731E53A28D1, 0x6136B9B1581ABC18},
+ {0x89BD9205C62DBCE9, 0x96A7DE6442521823}, {0xD6E1CA6BCB7228B2, 0xE81192CB927AAEBB},
+ {0x6888D1AD2F5A3A1D, 0xF090BB4936BC7E92}, {0x9E383A7916CD23D6, 0x684F0617C32E4B2E},
+ {0x023EB02DCD852C10, 0x670F8908E0307478}, {0x6FA77BE09AEDD58A, 0x355ED9B3156D940D},
+ {0x09A285C441C479DC, 0x0E32D504E6519B17}, {0x90788BADD1D39393, 0x987F2833769EED28},
+ {0x14774EF46D3632EC, 0xF2EB5766A5ADC438}, {0x8F8C566E95E7E357, 0xA0677D30A4C87F78},
+ {0xAD57C423720074BF, 0xF7342C53F88DC047}, {0x2F1ACACF22D02334, 0x2F87D0BC02348881},
+ {0x1C4BB38788CD0A45, 0x2B1509FF1819B565}, {0x1E790C5D09C6785A, 0x3D67DE94403D773D},
+ {0x94C19DB453DC8B59, 0xE17166AE3F4DE49B}, {0x3B199D831CB26540, 0x3310F0CDFB6EDD63},
+ {0x8BEEFE7FD3EBEEC3, 0x0F1A15FC95EABEE5}, {0xD89BF75FF3101354, 0xF2622BA859228BE6},
+ {0xBA080AC2157F818E, 0x433C03F68EEDC801}, {0x886D17CE5E1E1E4E, 0xC0736D3346F807BB},
+ {0x53AE481763DF14BA, 0xC5F1C5073372A852}, {0xE8536427B0808A86, 0xE6042C88B8AAE9EB},
+ {0x711C82D496ADD40C, 0x4CEE3A0FFD49A653}, {0x7477E4250BC6F112, 0xC19AB3A5352E216F},
+ {0x334B1D507B1AF5C5, 0xE3A81BC234450AFD}, {0xFE44DB41434445C4, 0x6B99C228F36B28E1},
+ {0xC9D68CFE46DE4643, 0xD06DC27AA3D1392C}, {0xAE2703027BA1E4BF, 0x5325EB18643737E3},
+ {0xB36E2FDDBC4E48F0, 0x48E97897AB527E21}, {0xDCA21F50F0B86F1E, 0x2317F835E50B80BF},
+ {0x0D1593A0107BEA45, 0xE1BECE7CBFFB1AA8}, {0x7F9D0977055C42C8, 0x29B20F11D1B20398},
+ {0x0BA18330EFA4808D, 0x4FBB056B6CC656F2}, {0xFB05C1247CD3F5DE, 0xA2D7DD9B87FD4A7F},
+ {0x58A66EF32712EC32, 0x3A23B52D61931904}, {0xEDE2BD97139C289F, 0xB95295E2739F9D2F},
+ {0x481B9F9733D5B485, 0x8FE34108E5162B1E}, {0xE594B0D05C118715, 0xB6F18FB2E0D6D18C},
+ {0xF621C36B352C65EA, 0x44E60B500392F297}, {0x30A89922C82416C7, 0x8916E144E38CB632},
+ {0xC4D26F72C5E5956C, 0xF1999A768D87DED6}, {0x7E0962D4EE429226, 0xE89F1F5FDF8B4B3F},
+ {0xB22FD49B7E1A3B24, 0x8D767DA409E982CA}, {0x8B383448BD3B2618, 0x64F4D07ED6EC1DE7},
+ {0x89D8AD3C7B4CE057, 0xE13D00BE7240E8F4}, {0x9E0205FDCCCB51D4, 0x998BB0F3AE171C9D},
+ {0x4121339EB63141A1, 0x251D7A2557535A4B}, {0xE1B3B31B90E60B93, 0x74BBC45646CFF37B},
+ {0xE287BBD5BDC7D79E, 0xC007BD9ADAE47197}, {0x193D4C8B7B14808A, 0x332051C9921622DA},
+ {0x44D0754AE993C406, 0x86BC30EC397A47D5}, {0xAE2BC846B45D2FB8, 0x2BAA673FD6B43735},
+ {0x8B8C6A0F584D6CD2, 0x58EF0B02B72126C2}, {0xA4448AFD2EFDA5CD, 0x4845704F482BE0E1},
+ {0x81FB5A65ED1A3F4F, 0xAFE9318DAE45DED1}, {0x45C3161817CA5DBA, 0xFFE49D33480931BD},
+ {0xF307A9B97A95CA3F, 0x00970A38D847123E}, {0x17AAFAE94E4DBACC, 0x7C7413790A067964},
+ {0xC3A7253BF3C218A9, 0xE32405533AC55AF9}, {0x64FEA23B34EA9C8A, 0x68AAE6DAB6B814AA},
+ {0xCCCFDE73F7BC1FA1, 0xB8BEB0C25E54F465}, {0x1175D29883429261, 0x0EC2DB795C14FA76},
+ {0x3237AFDEBB02E014, 0xA5FFAE836D81AF62}, {0x0EACD86C80EA7243, 0xF4B96E1E39DCF59D},
+ {0x48AE082C9D88FD57, 0x90E06E6C1B5442AB}, {0x3936FEEFDAA25B56, 0xFC7F06AEAF540551},
+ {0x6431960E1E6F0A7A, 0xCDE5CD1D6B0754C5}, {0xC6A228C08AF26F7B, 0x1D9CADB5CB9E9166},
+ {0xE3094444E2AF6168, 0x4DE342E934E05F50}, {0x518CD4A5185F243A, 0x47B27E4E94B8B2B7},
+ {0x51FF7733C66000E9, 0x0C21536394612A85}, {0x6A142A317BF75317, 0xAB9FE00836BF2B50},
+ {0x6833B851816DB647, 0x785E683E7D77CCB7}, {0x56705C912B08C0C1, 0xD84863246603D37C},
+ {0x6143958712FB400C, 0x137125A6C60B5D6E}, {0xDA41782A8B02803F, 0x685049558649B8AB},
+ {0xEB2116473B1C641B, 0x666745A848DD77BF}, {0x80F913541CFFBF6F, 0xF92664FFF7D34C11},
+ {0xA25EBD5FBC4F2068, 0xEFAC1F9BBB0DB799}, {0x8BE1A9CD9EE67F4A, 0x08CC169E7D81D577},
+ {0x2269C4FBA4F826DE, 0xFCE873C5E226CF37}, {0x8A87F37BB2F4650A, 0x95E002E521EB97E8},
+ {0x7E7640E0BD832367, 0x7D7960A0FEDF57FB}, {0x9614B1849BF68078, 0x6F4B1B363898F735},
+ {0xC472E071880E8943, 0x0C9D857AFD8A3415}, {0x4E960E7525EBCB34, 0xC67D4426B2C22450},
+ {0x4DC54B1494B1BF1C, 0xA9ED520A96934613}, {0xF3156CB3E40EB882, 0x67B7804E945272AF},
+ {0x3093EC8C0F1C9394, 0x001145854FC66A63}, {0x81152AC89B03EE62, 0xE3B3C83C28DC6A5B},
+ {0x26C29412952B9E4C, 0xE290B2EB5B87C6B3}, {0x08B274A67654DF46, 0xED3E326BF40DFA0D},
+ {0x18EE6AE9ED061F85, 0xEE22626419CA7CDA}, {0x5B826D84CB8E04E2, 0x4D5F5AFF202548E2},
+ {0xDE47254F6B42C6DE, 0x754A0546FE44AC4A}, {0x9F80E74ADEE73649, 0x28ADA82EFF793986},
+ {0xC63D3AC69ECD549B, 0xBFB0460E8D093058}, {0xE641D8EC2F504BA1, 0x0C71C334A84D0D40},
+ {0x219759EC118277B5, 0xE8D50C3653E83D53}, {0x9ECF47DCBC450F06, 0x3E7D23C5606FCDF4},
+ {0x207D096729842E9A, 0x566EB57AF8063681}, {0xDB0373781979843B, 0xC8DB16C40CAB713E},
+ {0xC308031F03DB2F90, 0x39892486D7C50C12}, {0xCBA6FD98920DE639, 0xF3C2066C219D93DD},
+ {0x7F9AE16E646F7681, 0x1BF18CE733271075}, {0xB774E8DABBAE9C29, 0x5B37CC7ECA5B8A0D},
+ {0x1A537FB81A67597B, 0x1741AA66DBB4AC58}, {0xB81521BAB1B5D861, 0x759CEF0D08DC7B6A},
+ {0xEF9C5DC16F836D6A, 0x13BD3A38379995A0}, {0x5EDFF2B4E7804F47, 0x09C1F6BE4D41E301},
+ {0xE3D533C384A40CEF, 0x7F4B7CC86D89ED71}, {0x2AF9B9765881C1AE, 0x34B288C042C85A67},
+ {0x6822A2A303FA7D26, 0xE2633ED91B4DEEB5}, {0x956D18836160536E, 0xCA75D46CEE3E1CB8},
+ {0x3B83CD234ECD473E, 0x8AE7D84EEACFDB03}, {0xBADCC684FBFE8225, 0xB5E54BD9EFD34FB6},
+ {0x1375768DC5FF101D, 0x9782F60095AE01C3}, {0x2C4117ACB2E0E374, 0xE79BB58DCD320C6F},
+ {0x9B47902483DFDF2D, 0x2A74B0AD3557A967}, {0x4397174A9F6A1920, 0x0BF4808562E7BDE2},
+ {0x307E9192F7F4D937, 0x3D9133C8AF3DE841}, {0x0C2AFEBA5C863171, 0x644213B2F0F0370B},
+ {0xEAEB0F7C1840424B, 0x8F04437AE892C69F}, {0xC30EA394E54C17B8, 0x4EE20FDBBCAF2BDE},
+ {0x7B92DCDA4A38E08A, 0xD36FD7E2096E49D7}, {0x4340F1937594C485, 0x4C17F48E6EA10970},
+ {0x3D6DB6E930CD9067, 0x33FFB637E3855758}, {0x872E471557F3DF76, 0xD10058BDAC45C0F3},
+ {0x0FE90E5901EB323C, 0x876E35341C646703}, {0xC40F5ED68CCF4FD2, 0x3C2245241C21A306},
+ {0x648EC09BD9BDC022, 0xBA15A5651E4005F0}, {0x65B61F3E6D8BF87A, 0x1A355B9482F54001},
+ {0x34D5C4E51D63D448, 0x4A5DF73DEA25A7AA}, {0xB48046AE1A69C654, 0x174F1825D6FD065F},
+ {0xA56CA38DCA9F1DB0, 0x3FBA199B7573C097}, {0x52DE12A8880267FB, 0x11202296635C81BD},
+ {0x54DF7E94E13FDA2F, 0x57CC65B5EC10D4EB}, {0x37D8F00D81ECA3FA, 0x9FB155A420C71F8C},
+ {0x936F9BFB601382CD, 0xDC4C0ED2F167FF5B}, {0x3AB1D5366DD58484, 0xA7CE73DCF913CBD9},
+ {0x4BF692A224B2BE3E, 0x33415456C1AFB30B}, {0xA170291AC7E423C8, 0x3948A915AEB072B7},
+ {0x74939AA0D4DFC6F5, 0xF0A029069587E481}, {0x2F195DBC40D96961, 0xC2BE910C3E549D7C},
+ {0x0AD0E0AF172D99B6, 0xC253EB092C5D0025}, {0x5F4A0F648B463B9D, 0x75DC403832D3626B},
+ {0x558FEE0512216F19, 0x354F73BA00759775}, {0xF17BC4BA92EE0D21, 0x1B2C9096594997AF},
+ {0x5762094364D5C688, 0x04C1E51207CCCC9B}, {0xDC999A16BA3A6B54, 0x4F9986C0CA9405DF},
+ {0x312747CD71B62C57, 0x433BBC884EF52354}, {0xDD8B38E3F762D741, 0x8F7E484DDC76E5B7},
+ {0x26B348D26410C340, 0x3A6AA299E0C4BB6B}, {0x73F1E13A7A9D405A, 0x7A21E7D74DA23994},
+ {0x62A257406F081397, 0x1B8D9F7D902BB9EF}, {0xF2BC9C7A079B7EA4, 0x50FBF3BE8A9F6A0B},
+ {0x2D4CE476F9AAC2B7, 0x06E6CC859EFF7DB9}, {0xC01BB530B0AF7FB9, 0x14981EEF2F797473},
+ {0x1BB568EB99CEFE9C, 0x89C59D682DFD8703}, {0x9B989EC394169B21, 0x498B17DBAD74B4F6},
+ {0xDD065F3059344F31, 0xE3C2D0DC18151927}, {0x39E699CAFEC1F037, 0x9D8DC4C4AE49B1C4},
+ {0x35491B60CB05E365, 0xC11B76C4E596C3A6}, {0xBDF5C31D550C689F, 0x08CE22D16A24971C},
+ {0x7212446088F3C688, 0xEB0A56088FAB3C2C}, {0x1E512E2F8AC29ADD, 0xA8BA849B03BD92B8},
+ {0xB7904EC9F80B8987, 0xE674D4A336F4B3A9}, {0xF4E6C89D63708754, 0x2E1BC64DD78C4CE0},
+ {0xFB72717F4F7B0FBC, 0xC975D834A99A6820}, {0x9A3347DD768DC8E4, 0xF2AF62C0731E8B32},
+ {0xF46F8C560D388C92, 0x98837898A687BA98}, {0xD478E817D93380FC, 0x313E0E50D8E5673C},
+ {0x184230B6C7F74DCB, 0x775B3C084CC12425}, {0xA0D77922C45BE64C, 0x21734231E1621ACD},
+ {0xDC024A54E66A275B, 0x394FE51C4BADD96A}, {0x34B75D6E0A1D852D, 0xDA8BA726BD369A02},
+ {0x713507A618DAE0D3, 0x9AC752077BFD9014}, {0x71A8C38D6EF14128, 0x2DD39C09F888B737},
+ {0xF4551B30CC8EC2BB, 0x1BF141826DE92BB1}, {0x3E18349D14B4A1DC, 0x97FADB78201F2A93},
+ {0x2A64D63731A72BAA, 0x59F2EA7D64B9C083}, {0x701868B9D5F7DC8E, 0x2D714A477E1F2D65},
+ {0x42C28B4AEF328A56, 0x3791EABE8B9C65C0}, {0xBB7A6CC07C66CE7A, 0xE789F78B8DB78E3E},
+ {0x5FB3F15BE3B8905D, 0x58B9767D963ED727}, {0x62E42C98E155A7F9, 0x9BC076974EA5377E},
+ {0x10B48BC360AB9907, 0x5414B3E13AE09A72}, {0xBF0313C0CFCD2EED, 0xB4FF8565EA2D99C1},
+ {0xF76386805E011E81, 0x8DAFB446C6177195}, {0xF2DCF842168D7A0A, 0x2021625525F9A9E3},
+ {0x3AD6DA94D2CE1F33, 0x2EDADB01B21B4A80}, {0xAAD5286E4E27415F, 0x10B6324E4E6EBA0E},
+ {0x6A3D98FE05B561DF, 0x3276CEDEC2C83BE6}, {0x0156FFFE22C25EAF, 0xCD93399C53539004},
+ {0xF19D2B9F2682A298, 0xA38E9AE3720168ED}, {0xA49752088BF304EC, 0xB5FF6E555991D52F},
+ {0x88E9CCBE3D6B61F2, 0xC65DECBAF65C5069}, {0x51C37793EE0D5164, 0xF32CAF9219B9414E},
+ {0xA2E1487D71E4C290, 0x0C4A0129B771DFC8}, {0xB783B89BCDBE3A8C, 0xC887AFD803EDD8A4},
+ {0x6DCFCCBD7102C46C, 0xFC45B6449DE3CD3D}, {0x926B3C6071C586D8, 0x3C55A128C8768FFA},
+ {0x78ECB0F310D7531E, 0xEA04F4775C00C1A5}, {0x400B5DA9AA2951A3, 0xA48C0A3ECE9780A6},
+ {0x8E1B1F1A8AF973DD, 0x9C5BA1012990A428}, {0xC7FC32DB5188A449, 0xB1AA6B8E1B1673D0},
+ {0x6F494EE428ADF73B, 0x42DA76EE0B945DFC}, {0x2951B6A90165BFB8, 0xA8B4FAC131397388},
+ {0xC1F7583909B83E2A, 0x936C4A78EC9095A2}, {0x08E352421E224713, 0xFF2C7B0C0EF1FCF8},
+ {0x28B56C77F9D4E86B, 0x8987DF86B2D9851D}, {0xDADBA954D60C2FFA, 0xAC4C9B05433FA525},
+ {0x58296E62A16825D9, 0xD4FB9D3B39DA1E1A}, {0x4290137D81DA9E56, 0xA2F6CD82EDF2F5B6},
+ {0xDFE007380A711CCC, 0xDFB2A4CE7419584F}, {0x7BF622A5A706E1AB, 0x5E7B83E6BB1D5E0B},
+ {0x2A69E103D0735709, 0x9915F1500BC2F118}, {0xDA0D2B194A994E5C, 0x06D1F19F84A0FDF8},
+ {0x086E4048B6506114, 0x6159D6AB234DE393}, {0xF7D38B7BA043E297, 0x525610CEB7F25A7F},
+ {0xEABB9C1C88060783, 0xE9FCE1D3CA820D17}, {0x33167C916A172BBF, 0x99F4B00B20CAA0F9},
+ {0x3E6849907B60FE51, 0xA6FBBDBA235A71E0}, {0x3F936702BB599EE1, 0x145D8276A3FF1DA3},
+ {0x8A350A1852999CF1, 0x51E3972B23C0219B}, {0xA25E499536D4641C, 0xE0F0D3B5F4BC84AD},
+ {0x5D0154E4627FB5B4, 0x032365AFDAC3073F}, {0xA2ABEDDA17462724, 0x9602883DE60845BA},
+ {0xAF772F0BC2FF84ED, 0x375143E1B77CF592}, {0x7AE0778C7CEF64DF, 0x61E70962898A7D97},
+ {0x2807C81AAB545C7C, 0xAF7E501E747EABCF}, {0x0143F5AAA0F1A53E, 0x1A642C060AAAF4A8},
+ {0x17FE5016738806F1, 0x6F7C56F5C8037E97}, {0xF8FE0EC4CE101C9D, 0x39B63067ADCA5738},
+ {0x8D4BE1DDFA5898CF, 0xD3869CC6354CF0FF}, {0x9AC77170E40CF2A1, 0x6E48FDF5F8423C5C},
+ {0x3AEDF226B6B76544, 0xFB43506F1F2802C1}, {0xA5E79597D33FD1D7, 0xE677AC80A419D3F3},
+ {0x270D882059928976, 0x1FA62A97A5D776EA}, {0x932D490AE38AB60F, 0x1A2FA51A1F8CB5A7},
+ {0x54B4B3595B3AD6E7, 0xBDDF8FC1C379E1F8}, {0x6FCF9A6729727270, 0x438CF5A4AD5D500B},
+ {0x55C48979EF5BEB12, 0x53D99B9C115AF10D}, {0x6576F35D871B3159, 0x7B54B9F1C90C8F56},
+ {0x9D7DBEB0984B8BF7, 0xD6FB804DFAE4C145}, {0x402DDA129E37F41F, 0x32F1A84ED7F35152},
+ {0x7B3EDDEA94F4476A, 0x11778E4D1EBA1FCF}, {0x0710D721D4E50747, 0xFD50222D153F5C08},
+ {0xE0129A206DC68279, 0x0577D45B108C5359}, {0xFAEC064BDEEB5052, 0x4F8BA4D47DD04DA3},
+ {0x626529CFA942C87D, 0x82B9CED010F3AFEF}, {0x0F418C9E7DF81C94, 0x9245C5F5521D96AC},
+ {0xAC08B3C2A6AEF809, 0xAE48413D2C856844}, {0x848CFB45B198597C, 0x02F1742568FF6AD3},
+ {0xA63ACBFE6E44F451, 0x44900D546178D178}, {0xD1037C929B4D6486, 0x268FA4928313AC31},
+ {0xABFDF7B6E5CFD467, 0x75277CD5A0CCC31B}, {0x4ECCBED72F5E8F03, 0xEEBBEFD0BB09E8F4},
+ {0x605055CCE49AB15D, 0x0979A5E23940D52F}, {0x3052A6BD7F5367A0, 0xAEE569243EAB6B6C},
+ {0x63811D738B4BFF87, 0x0363D5D9DB52CC36}, {0x191C7A8CAC8143EB, 0xB07D865960616462},
+ {0x795F742E60D01436, 0xAF804555D5060865}, {0x86A3B495E3B2B1DD, 0xBFF166936F792EEE},
+ {0xACFEE8C149D2B030, 0x297175BEAFEF32FF}, {0x104509BA75D6082B, 0x6FF17468D16B5603},
+ {0x6BDC9B55C27F57C3, 0x8FE1ECB7385487E8}, {0xA216238D8090D356, 0x65B4AD84300EA68F},
+ {0x43212751B9DF9CFA, 0xD854C0483DB5E4A4}, {0xC51D7D575912F8AF, 0xA907CBAD4C41CD7C},
+ {0x970F92F96A57B609, 0xD571308E7D77FF26}, {0xE42B442BB94451F9, 0x9D8063A6C68E2AC1},
+ {0x0EBA880980AA3AA4, 0xEDC4FB08E8B4D6E2}, {0x8BC59F212646B033, 0x69E24617E1B6459A},
+ {0x03D88478782F9B56, 0xF94A8F8D6A86DBF9}, {0xA54CB4985E34244C, 0xF65B94B0C7E74033},
+ {0x3261E097DA2A8DEE, 0x57AA9C478A89CAFA}, {0xE401022A0627E380, 0xB676CE8EC5FE6115},
+ {0x73539A64AC6060B1, 0x6155182F852B5064}, {0xB7EFF5622FB75A53, 0xF7FA4CAF2DC1FE06},
+ {0xBEFB72164C80A080, 0xDFA63428AFB38B56}, {0x1C1A512992DF9A0B, 0x98C7F7B3DF75C44C},
+ {0x3D314C9C8E8B21ED, 0xAC7F40FC4F50AF9D}, {0xE4EB52641AD35C76, 0x12FE0F20A2A26ED6},
+ {0x922B342FEF2E95CA, 0x8CFCF6B65696276B}, {0xFC32F2A44F9E8918, 0xBFA9951BA5BEAFE5},
+ {0x57268785C55DFC19, 0xBEA247C21E754980}, {0x364FD2EB58F65870, 0x85EDABA6C7EB31BA},
+ {0x0E11B0B150568D2B, 0xBD8E482FA60DA8FD}, {0x129B9D81A6198987, 0x72F1F9072D5603A2},
+ {0x9CC5015CCA3FD10B, 0xE75FBA9E8F18A62D}, {0x888D5CB318C42C1A, 0x7BEA428C8420DCB3},
+ {0x55961A3E121E1141, 0x3BE71AE89CC15444}, {0x1600BF1B755CD0D1, 0x9C3703E726F35B94},
+ {0xC6202C9E2103536D, 0x512E678921D531F4}, {0x36BAFAB00B65C616, 0x5291476B81D633FA},
+ {0x3241AAD38D86BC32, 0x3AC830EEB81175CA}, {0x262121FC711A99D8, 0xD1CECB15F420E851},
+ {0x409B919F06F7EA08, 0x349FC69E8B9F5181}, {0xBBB5213CA12D6819, 0x15D2FCBF171B1444},
+ {0xC35C724CA06F780C, 0xEFF949EBF73E2F09}, {0xD0588AC1226BE37B, 0x2FC862BD2624DB96},
+ {0x25E4879B8938E90E, 0x1990D9AEB9751C54}, {0xF5713C883AFA2528, 0x1FB5253EDAC16B92},
+ {0x50DA301FB4FC7C43, 0x061D1D7E5C186E63}, {0xEED23E428A4C3803, 0x7D8401F418F1EBC4},
+ {0x45E09182C745E797, 0x2FCF862B69B8C657}, {0x89A01F151E8292D4, 0x5BDFD32578670586},
+ {0x33CFC10C8B6A7EA7, 0x878EF433CEB4E9C1}, {0x6B7224A2F182B0EF, 0x6121A0788C1FB41A},
+ {0x7B22F6779573CE6A, 0xF3326227041912EC}, {0xF56CA3110080414C, 0x96E26D34E4C85570},
+ {0x07310B237B631C71, 0x221114636E40D4C4}, {0xB5E8C551C0CAD908, 0xD114471B5C7F7AD5},
+ {0x59EFADC61C1C8BC1, 0x66F8E48CB14F7CCB}, {0x58DA73978068863C, 0xF351F9888E6F6DC2},
+ {0x5740549CE0653A9B, 0x26F966EAA76E382D}, {0xA97EB81EFF8D0DFF, 0xDB2AF8B916A7D52A},
+ {0x31070753B506E086, 0x7409C8B92861F8D9}, {0x907AE982AEACA302, 0x1F6FF2AFB48D8117},
+ {0x965A5E1DF505B51F, 0xE12C70CE991FB1E7}, {0xCA7DB845951DCF03, 0x388F04205D39E52E},
+ {0x14479A96D1303B37, 0x35D6BDE1A03AB598}, {0xC82BF2A399E14B94, 0xB2DEEC6910E13ECC},
+ {0xC899A03E8D1519C8, 0x0F44F96CF64A5352}, {0x9B9A0AEEAF899BF5, 0xA210DBF94D6F5C3B},
+ {0xD4D45EF21EDD999F, 0xDA72EDA769B1AD68}, {0xD6974B478BB3B0E2, 0xC888D339FC8727DA},
+ {0x5534341706415882, 0x26D07C6DD32FDDD9}, {0xA8E6220269B56991, 0x7A86F8BC70E685E5},
+ {0xFCDFCA7494568A3D, 0x8FBBB2B82623FD94}, {0x83221EACB9FE8812, 0x65A3545BC67ADF89},
+ {0xC4CDB12026AE86E2, 0xFD551C66624AFA82}, {0x549E9B50A892FF7D, 0x9F3AF481EFD4C5EC},
+ {0xAE3D6828F3F961E7, 0x3FCA6F0F812E87FE}, {0xAB6962712CB34CDD, 0x34BB8A3176F870E3},
+ {0x04B25505901E268E, 0x71EF8DF86A7AE062}, {0x73EADB0D661455B5, 0x076C942B2D6C42A4},
+ {0x7BCE05474E9F3FEE, 0x7F68CF1806BA5548}, {0x263115C0C8221898, 0xBC4F0B7107F898FB},
+ {0x616A9995CA0D9DFE, 0x424B7A8C3CE939D0}, {0x7F96B33D09B15C36, 0xEDE55D256C0FA04F},
+ {0x3D459E0B9BD4E86D, 0xFEEF9ED91FBE6126}, {0x8489056BA5121BA6, 0x0492B487DFA5D32A},
+ {0x4E6A074275671CE9, 0xB8CB64D20589D423}, {0xC356A51A6C14E736, 0x3BF7BB0D13B8B50F},
+ {0x5951ADC56BA53E53, 0x1E8BB980AF5056F9}, {0x8DB561C544E496BE, 0xCC6A713462030162},
+ {0x27AADA7D4301D5CE, 0x0222E1B53FCBC3DE}, {0xC6E8E0E95FBD1F61, 0x114DE4508CFB65E4},
+ {0xBF9F063FDFC508AD, 0xF8D146F7DDE1F744}, {0x9119B9B6AC85BFD0, 0xA1F4776D4790C335},
+ {0x22DF2519E2A96FCB, 0x1959AD42C8133C5A}, {0x9E4628696BC899E0, 0xB1EE6452B190E48C},
+ {0xBC188162C4C3D642, 0xD7A25776F98E1D03}, {0xB5EA6C1CD962ED98, 0xD52D25BD0577EC10},
+ {0x77D5B3F217E99241, 0x8AA680BCB9581A7E}, {0x0B5897712CEEE636, 0x8D93D840139BD9EA},
+ {0xAFE9A0431016D546, 0x880B541A2CF43FDE}, {0xB04CAA07BFFD61BE, 0x48B637968EE6B2DB},
+ {0xD5BC32A9377795A9, 0x7D0C60E51A86A63D}, {0x321821C7A7842728, 0x66FB7413EEF31B59},
+ {0x9CDCC7D6A50C89B6, 0x468C5A1C14AA0A5E}, {0x3ACB34E8C46F419A, 0xFCC32387A20FF70A},
+ {0xA5061D74C4F3EF29, 0x47878008B84A2390}, {0xAEB07C228977C3B7, 0x0BCA29B698C3DF85},
+ {0x47E1EA671F7F7BC2, 0x3C77FBDE1883F061}, {0xCD91FFDF58C55457, 0xB2377AB84EA4A0A7},
+ {0x5C09623D32FD1AD9, 0x0F00915FB19E4100}, {0x64360EFFDBDD4A52, 0x00A4BA4B14062724},
+ {0x9DD26971FD186179, 0xC3B268DA975EF7D7}, {0x7F0C5E7BFFFEF47A, 0x66BDD4AD7F683801},
+ {0x1ACB04071F5B2B84, 0xF91E07E8433E6B88}, {0x30C4670BE8C18D4F, 0xC85673D232D43CD0},
+ {0x805BE495A862FB43, 0xE72BCE9EBBE9A83B}, {0xF3C5E2F1DD517075, 0x1C3072AD6F8D52D8},
+ {0xB89834A2C267EB05, 0x2520EFF19E3D5206}, {0x71FF3C3BB6B18CA3, 0xB22D034EEB2FC8EC},
+ {0x16BAE7629CC0C675, 0x5D535F679488BFDF}, {0xC9A594982AA8C711, 0xC3E317B7E597CD2F},
+ {0x2D07F009A6BFABBE, 0x9062E84B420FFC35}, {0x25594FCFFDC74CF6, 0xC45B2739B7E3109C},
+ {0x14589118DDB4F23A, 0x6CB8197AA8C537CB}, {0x701E3A738619378C, 0x1116CAC0BFDE0750},
+ {0x12D82E0AC37CF197, 0x5776E3FC41CBCD61}, {0x25D24A0F5B887F02, 0x589A45152FD12718},
+ {0xDFBBBC8495BBAA98, 0x669B66B94C014CA9}, {0x22CC2C9AEF69D72C, 0x10DE94AAC8158082},
+ {0x06C47E52C8D28CE5, 0xC6249C5E43160CBB}, {0x64EA3A330E697F61, 0x12C4A86D4AB54463},
+ {0x5914F0AE7AFEE87C, 0x7886C82902B75CC6}, {0x063F0877796893C5, 0xF70CF291DD446C2B},
+ {0x47D4897AE90D58BE, 0xFC112346AF46A540}, {0x3A53A5190BE99CB2, 0xA86DD4CD17497216},
+ {0x8631062A0A2CA387, 0x173045038700F5FE}, {0x79E0B11FA6518F9B, 0x57AB10D9753E22A1},
+ {0x07BAA294D26EFFC5, 0xF4305C728102A9A7}, {0xB43D59398F52ADE3, 0xB7BED4A94062D5D6},
+ {0x44773E52B7566429, 0x1CBF07755E0A1F29}, {0x01A25E0BBE660C3E, 0x39F81E8ED9A87D3F},
+ {0x14F4E33874E0D65C, 0x69D1AFD45FA824C1}, {0xEB1B60EF37F6C195, 0x1258A928CCC8B9E6},
+ {0x826D3A6D7EC05D49, 0xED1CCB3C9C70528C}, {0xAF1BAD2F6C618109, 0x1D92593624C01E47},
+ {0x411C7B8C0D0B3CFF, 0xB98A31BF47FB2569}, {0xAD6D68D18BE0674E, 0x62602CB6C3DB7B40},
+ {0x215D45377D5CCE25, 0x730E826FF3B4AE1F}, {0x1DB89485819016E3, 0x8020FB7CFBDBD56A},
+ {0xB2703AE1FFA1678E, 0xCF304F84BAB1B52A}, {0xC9637A5BB880CA34, 0x36B45DD034EDD9D1},
+ {0xC034235349655067, 0x3CE4F946DAF210B1}, {0x92BA0ADC29B1EB26, 0x4B8F2BAFFD6482C5},
+ {0xC9FE922B3D5C4AE9, 0x8E8911F32EA67E26}, {0x42B5810735252A40, 0x5821D07D043C0C09},
+ {0xDD9BDCE138C5EDF2, 0xAEB8C77DED669E19}, {0x4F951CCECF042CB5, 0xD48D7E7FE888B11B},
+ {0x6E54B1E554C09488, 0xB52FB95D09EC106B}, {0xA286C473C8EDBE68, 0xBF8B6887A74450E5},
+ {0xB6685F262C2E27C0, 0xDB8857E313C33B4F}, {0x7B169A393D0D6398, 0xCE96FA8D16B003E2},
+ {0x17BF9B8635FDA1F0, 0x8E809EA0966556A5}, {0x3541AAF21F4BE71C, 0x71D5CB9DE0D25B87},
+ {0x449F9F4DB1375960, 0xE9F3EED8B20F7032}, {0x9E4C1E0DC19A3B78, 0x05F324A57F3B7131},
+ {0x0D49C573D8DE712F, 0xF6D2C3627C0C6DF4}, {0x53C49B4230EE7CF9, 0x3E13A3B62D001B3B},
+ {0xAE078265383BFD33, 0x0F309A599FC49BCF}, {0x0C139BA79D43EF4B, 0x66BE59166AD34BCF},
+ {0x32E1DD1FF0F10C22, 0xE7276641B90420A4}, {0xB35C02B2F0DD41AC, 0x0E2EE3E63BAD1E66},
+ {0x1491EC2F54BC8BCE, 0xFA0997F1B05209B6}, {0xB39868356F2B7462, 0x4FF4A9459F3380DA},
+ {0x7B21AD3A844A93D8, 0x99F85D04DE6DEF1B}, {0x7CA002049BDBF895, 0x72167C343FF887EB},
+ {0xD5374FF36B7F17D9, 0xC9724BFF06F836D0}, {0x7B3220F18CF037B9, 0x9DB3389DE988D3AD},
+ {0x90CDC88272BDE5B8, 0xC96508628F7F471F}, {0x188060B0FF919188, 0xCB3236BF45C48C65},
+ {0x7D3B2E99BA198029, 0x6E7B66DDCB5280B2}, {0x0120794EB6CE56F0, 0x9E989E680B27D3A7},
+ {0x9B93BF3DB252F46A, 0x7233E1500CF9B9D5}, {0x2A9DCFA4D3DF78FE, 0x32EF192F9B8ED601},
+ {0x21A03EBBA6ECC5F7, 0x0F66F29B08997C37}, {0x0C9FDF67421543E4, 0xAAB49B2C84AAB817},
+ {0x5A048958D51EB697, 0xB32B3F105D8E46EE}, {0x06F3B108CE32B635, 0xC7A06DAEBE640540},
+ {0xE3A2CFB0E2F694C4, 0x344CBF8277D1298B}, {0x2062FFD1516A4D48, 0xABFDEA000AEBC5D4},
+ {0xDE37411869B0D0BD, 0xACCEA3B00C8C2141}, {0x96008CF590E4D0CD, 0x60165BDEBA151924},
+ {0xE90AFE67EA72F967, 0x109887D98F72F2CB}, {0xA1480094F63CD7D5, 0x972EC3794EDA1B56},
+ {0xCF09FFA36BA3E88B, 0xDCF3AA25F28F1428}, {0x66C0CB4021DA44BF, 0x146188DF7194ED66},
+ {0x9AD2CAF5D032422C, 0x55A8DC59C75EF5A7}, {0x3E4AADACD7536277, 0x93521AAC34AC8C4D},
+ {0x0808B01B3D450545, 0x718A43E317070012}, {0x199E7631690020A1, 0x7A42B41A0A7FEC97},
+ {0x57AA728D6CE2F022, 0x4B0C4BDBB0FA65FA}, {0xD2029684C8A5CBB6, 0x7C27E8EDB83877C3},
+ {0x0E16C7D8877DBEAD, 0x225B1ACD9FA0A794}, {0x180ABCC1449B2592, 0xC9F9B417C3217D66},
+ {0x62F1634FEB1FD22A, 0x8E61F50C6BD633DA}, {0x9493BF3C167BE7F6, 0x7DFDFB6E4EC549E7},
+ {0x7C39111C0C7321E0, 0x7DD04973607C1D11}, {0x23EFFC2787916A03, 0x997F683F64A31C82},
+ {0x3D5E2141915885BC, 0xD687AAB3CD5C630C}, {0x528D55C217055F4C, 0xD2DA18ED28EF7EFE},
+ {0xB47480AF9BB35721, 0xDC074C57E26B8D1C}, {0x70E55838F03D5175, 0x60EA39F20A9BFF3D},
+ {0x55601C52CF052258, 0x070378B9C1056788}, {0x326421AEC242222A, 0x46957A4F14E73B0C},
+ {0x9028F714C101C302, 0x30FEC7E0A35C07DA}, {0x3978C2D56AF46007, 0x2CBEDAA454825850},
+ {0x96A69A7E2309211D, 0x5C52AB1C015CDAC7}, {0x22320248B3B74C03, 0xEDC98E8DADB24AFE},
+ {0x8A0D62E94371ED60, 0x62D4257D8342E0E8}, {0x40DBF2825C420404, 0xFD18F4E1BBB9D5EA},
+ {0xD8006210ABB0DD5C, 0xD94EAF8DD9248C80}, {0xF838792487028E78, 0x22A7A65608801237},
+ {0xE938C0D3EB424CC5, 0x7E9BC13E6581FD41}, {0xC3D9D0F701FECDF5, 0x8884373AB2A740F7},
+ {0xAFA143C43B2AAEC6, 0xE658193889E8FBF8}, {0x2E91421D1ADB4352, 0x11F75672642F089E},
+ {0xCC20ED914E7F4A63, 0xC0DBAD2579D38636}, {0xA9591BDBA7F92F1D, 0x1E098341F90B956D},
+ {0x3B30FFC862F0D688, 0x12423AE95035A919}, {0xAB1722BCF7532036, 0x0E7B24D2875193F6},
+ {0x95F666E2380E06BB, 0x2AA806F59DBFADAC}, {0xEF1CD1073A369893, 0x947F7E68B17ADADB},
+ {0x87FB89704CF0A0C8, 0x4EA2B6F841AABCA5}, {0x3E1DB09E1AD661B6, 0x23A87730918C6877},
+ {0x270DFE0090C52C8A, 0x586174803AF0773E}, {0x3743FE211CDDE8CD, 0xA0C43BF7D4F308B2},
+ {0x7378AF3BB7FC666E, 0x2778CEEABB93C855}, {0x6ADD1ADFC2F94AED, 0xCF6FD3C3BD67A438},
+ {0xCAB27B760E9C055E, 0x36CF9C82023651A4}, {0x546E9DE7FB6E0D09, 0x146D618BF214A95F},
+ {0x39D8A3D2C84C25CC, 0xD5921E34C5D7598C}, {0x5C97B500D5B1A722, 0x1BA7C1E83344770F},
+ {0x7B405E089C96AF68, 0xFC0B020B3F75C2E2}, {0x666FF9454784CDF9, 0x757FB9B19E171F3E},
+ {0xF966BFFEFB029A06, 0xFB46A06D2E6CF7A2}, {0x5CE037D99CA77CB0, 0x2997C15FC9A33687},
+ {0xDAB84774A5D9F42F, 0x67347C7294414D65}, {0x0B900201B04BF875, 0xCEAF2884F3836EDC},
+ {0x8C094B7D2BCF164E, 0x38974E8AD8004703}, {0x49CBA9BC8D213A62, 0xCA47D39E7B4293F1},
+ {0x381BD10AB9E1A89C, 0xC6EF5C8C95FB720B}, {0x194DA0501EC843B7, 0x6B50BA0F88266A8B},
+ {0xF4080079A05F8081, 0x34EF50B398E2C554}, {0x90DB988F480E46BE, 0x495485B74A73C0CC},
+ {0x4CE7D60450998B37, 0x898D7D4B7C3CFEB4}, {0xCEFD34A04C1ADF35, 0x17DA3FD87CDF90CD},
+ {0x4800E362618BD7A6, 0x0188EFC56A1F911E}, {0x169D355EFD1D3958, 0xF5B257F8E85EEE35},
+ {0xD13663E9E0B481B4, 0x6613B3D39CAB58E7}, {0xA6BE2862DD28ECF7, 0x7915B912B0E5CC40},
+ {0x3F99B6A4E9ECAEBE, 0x03E8C29D820CD5DF}, {0xE1B146FF3D5C0606, 0xDC960CDB951DCF41},
+ {0x7B0D78337A0626AD, 0xD1093B730054208E}, {0x9AE9F99632769F60, 0xE3143BBEA458F5A0},
+ {0xE90DC98B6E6727A1, 0x5EF61C3482EC4E2D}, {0xEB0CDF9E244B1BDE, 0xD3BC4BD6F567C2B0},
+ {0x77A6B0E1E6AD443D, 0x75B3D84AB69C39C5}, {0x086488ED344B9E85, 0x3484BFFC6836F417},
+ {0x47575AF1C15D18E4, 0xBEABA8D5E5553DCE}, {0x73EB1D8A9ACBD345, 0x2840C13B224093FE},
+ {0xA16EABAA59A38159, 0xAE73C3D1E7891E34}, {0x98AA3F69EC9BE9D8, 0x2F27B1A3463DC690},
+ {0xF654824CAE9EA55C, 0x27F210C98DE88DA0}, {0xA6FD2D8261BB98DF, 0xA040B4991D581AFF},
+ {0x5EEE23D83C440464, 0xC31165F57ABE5004}, {0xF3DCE74FE037C180, 0x10A5500D229464C4},
+ {0x797C9BD7D0BBDC60, 0x15BFA107A0847D40}, {0xB27ECE91A7E14605, 0xBD8D398A5230C472},
+ {0xB5FFCE41092F9F20, 0xE90503323C653638}, {0x95E9EB6CF8E99B30, 0xE12B1EFF9A601679},
+ {0x9EBEAED953E1CA42, 0x1231EFCC702DBD15}, {0x48B17DF63C3701BE, 0xF8E82897FB5EA90F},
+ {0xF4D9D97631D56BF6, 0x099044DCF4E8AE39}, {0xDE235C10ADB87D7D, 0x8088F73ADC7C5C9E},
+ {0x00B03ADE120638A5, 0x301B537E796E3ECF}, {0xD1016B0195C97690, 0x4B237DB4386D5113},
+ {0x7AD9AB1921DF61E1, 0xA0D067D1A5A8D2C2}, {0x1AD532F52EEB2121, 0x8008D3D0BAD6F0B0},
+ {0xB0E0F66EBFA1AE2C, 0xAB7924E8DB849D4D}, {0x2D7593C2886342CC, 0x4B011C4831C9743C},
+ {0x7DAA3E989C2F54A2, 0x6B03D2837B2E6E78}, {0xE3F73B480A1380A5, 0x5F62D2F9C610FF26},
+ {0x2C5C3AA740915DDA, 0x83AEA37F5F2076BC}, {0x4644086E294D4998, 0x24D29662DBAAAA00},
+ {0xDC5C6FA176ACE881, 0x4B289E87B09E5C2A}, {0x45B325EDD05E6D2C, 0xED437C4200FF523A},
+ {0x3802EED81BB00FAB, 0xA84893E990A4F27B}, {0x890E59EC9ED49B90, 0x324D495F11FCB9F0},
+ {0xFE487632CBCD5B43, 0x298D8607576B37AB}, {0xD08FE311C3D84CB0, 0x25E9DBAAD17A463C},
+ {0x35E01C854D83D42E, 0x5F844816C9F41D9D}, {0xC2278DF4D8B5EA1A, 0xEC5DFC16AF08D118},
+ {0x8B9FAC6263F5B64E, 0x859F3460E8E54165}, {0x12F0D2A19E2578A4, 0x4105750037CA10A5},
+ {0x5E89D0E07EB940E2, 0xC140C700423AE8A7}, {0x2221930FEF0FDAF3, 0x7B55CB052B2CED95},
+ {0xDB9ED950F6740066, 0x8DAE6F645095E1CF}, {0x8F5FECF713D5C688, 0x6BA991B4F1523AF2},
+ {0x8B19A9F0463C088A, 0x2946E2FF118B6059}, {0x407919BE77E027F5, 0xCEBFA49F1AF9B4F3},
+ {0x04BA4B24CC446236, 0xE8618F3074452555}, {0x72A21BA48C0A22B6, 0xB2AF8BB6586AF63D},
+ {0x568C1C70FC98C573, 0x659D86E31541BB33}, {0xF53CEB168744A332, 0x7DFCB2A41027DB42},
+ {0x2671D10827F0081B, 0x5A1414C579C03A25}, {0x2B84E59AFF1CFD8D, 0x8A56D7DE703CC51B},
+ {0x9E7AA74F98F77894, 0x5DF19CDA0D64C6E1}, {0x0B4692C443069CBE, 0xE0985E55E6F3C3CF},
+ {0xE228BAFADE0C3F2F, 0x118C9E4315673591}, {0x9A3D83269757D4D1, 0x64CDBACD8073D34D},
+ {0x9320ACC5A1EC6F90, 0x8B97AEE2AFF1885E}, {0xE4940A6D9B067AAC, 0x2A1B199894CDEE1F},
+ {0x3F41784B4A9E05AF, 0x06FA54FE1C12D003}, {0x97A34C606B034399, 0x99A5FFFD049A79B8},
+ {0x750B1DA773780EF4, 0xB305AA797E5831BE}, {0x005491BD207E3B2F, 0xDF8AB63BE14D5BB4},
+ {0xDD01D354E89DFE8C, 0x7CE1057EEA031117}, {0x3FE803CC62439EFD, 0x718DF8B1177C9F25},
+ {0xAB7A6B75A59C0144, 0x20D85F29C93E9ACF}, {0xDBBEEA6B2E232FEE, 0x3E03F1CFA3AA0BA8},
+ {0xA714B1D61CBD483F, 0x5900A0F8A36AF305}, {0xD0833E5908A782BF, 0xA653975D730DFBBB},
+ {0x82748A268E2E35D1, 0x899A4F025295D48F}, {0x8DC864D583486585, 0xA40025DE4B2E28ED},
+ {0xADC7A58DAEF678D5, 0x67CADF6029CB7EEA}, {0xB212D92A6D12F1C4, 0x12CE8056F44D5333},
+ {0x9C9F8C5C6FC1101E, 0x4CFB276169B21DB0}, {0x3365CBB82D82F517, 0x9F3B69538DB07620},
+ {0xA6935BF2F9CA4C35, 0xAF850B64CB589F3B}, {0x2CDB9E828BF836A6, 0x9D761CE86A425FCF},
+ {0x09F2F885291AD01E, 0x9EE4453DD4C823C8}, {0xB73ACFE7682345E1, 0x5ED6A8B0F6A87813},
+ {0x1C9149FC03831EB9, 0x25A75B63753AF377}, {0x96D7582BA7A73588, 0x896D779533517D10},
+ {0xDD09518BC40F5FD9, 0x93E4E93F278F2DB4}, {0x76F31C1D2F26AE1C, 0xD7F7D04308EC029E},
+ {0x22D02FEEC69AF48C, 0x4D8C5D4EA7DA69A4}, {0x65728AFB1694DC44, 0xBC3C10FD0D547AB8},
+ {0x145C5D6066294340, 0xC3A638DC272EB5E2}, {0xF75ABAC5739915FB, 0x99FC1ADBEC24B4F8},
+ {0xB1438EAB423501E7, 0x3DC42AEB3776C58A}, {0xE1D6D2C93EDA1B0B, 0x4E997C7AEA68F99D},
+ {0x66F0913B9E2C8F26, 0xD3538671344C3B7D}, {0x43AEC7B957354F23, 0x83241CB3021B0514},
+ {0xABA8EBE36AFDFEFC, 0x694D59AC2CC31025}, {0x7B1612418261ED82, 0x3C304112E9C14062},
+ {0x8DA6A5ABF0BC8180, 0x761AA73FE87862D8}, {0xD42C7585382D971A, 0xB593901AEFDC0CEC},
+ {0x09D90A510B4F56B3, 0xE53DE3253E47AF8F}, {0x4944139023E91A7F, 0xEB7BBB63180BBC3B},
+ {0x8F10D8FB29D1C341, 0xF8D9DBB4C56612BF}, {0x37F5A29DE3F52DA2, 0x7791734400A88935},
+ {0xA767E66F67B66886, 0xFC4ED3FDBEADF55C}, {0xFCF50DA30C20FE47, 0xD1F538AA6445D713},
+ {0xD5E8AA900BBB2AD8, 0xEDEFEE584A7FEA26}, {0xE296A7239E2482F8, 0x6E7CF7C505AC41C3},
+ {0x6A18673680A7F150, 0x111DFD1E791F09B0}, {0x466217B1A02F2085, 0x35C3E8EDCED64702},
+ {0xEEE640049722C8DA, 0xEE1ED7FB33A25FFD}, {0x722581B21D2CAFD2, 0x4B395B5C6EA67030},
+ {0xC643FA2D8AECAB2A, 0x2E27BBE98251DDA4}, {0x9DE63F87AC9216DA, 0x6E9091695CABED14},
+ {0x329C9A4A648BF5BB, 0x9AEBAA6F00C0D892}, {0xF62B5F0F2602D029, 0x433A308E680B3BCD},
+ {0x519F9D5F454B8D14, 0x940B7B988F531CB0}, {0x4D5EAD9B0D6BDBE9, 0x8A1CE0402B179165},
+ {0x302921F949E49D01, 0x63EBB83DE93B6528}, {0xBD93C5A6D23C5CBB, 0xF3A543B6536546F0},
+ {0x0FBDA1FFFBB8C753, 0x9BFE8DB3D9FA30EA}, {0xE4C996F9D1722B8A, 0x4BAEC0A949E1A6AC},
+ {0x05C8295C6C5648AC, 0xD482A8F8B679903F}, {0x58E1FCF7D1693CEC, 0x0008EB0074F5D876},
+ {0xB415D6C05E15F883, 0xED6925EFD3311819}, {0x0AE3DBC1E8821738, 0x5BC7E0F3B8F3C100},
+ {0xB85AAC57B28D7F88, 0x063F0DD95BF013AC}, {0x1197AC0444451275, 0xCAFBDB3704A4A6F9},
+ {0x1A701B7E7FE1C451, 0x4C86F9D335BCE822}, {0xB166C2D846BAFBC7, 0x3C504A35E9DAF413},
+ {0x73376A536D8AF752, 0xC6224F329F800319}, {0x08ABFD8B80253CEC, 0x31752C6A34EC6921},
+ {0x998F78404463BC18, 0x30CBD2A6699E78C0}, {0x556624C70FB522C4, 0xC6876CDB06ABCD7F},
+ {0xD9920566ABB687DD, 0x38D682F73EDE7728}, {0xF2C567104F6E46B1, 0x3668456DB25A4BF0},
+ {0x85A0AC5647A7FA41, 0x5BF230A968A41A7A}, {0x2637D49D6564FCCC, 0x9D8C4268645C3440},
+ {0xB373F60A2B38309C, 0xAD850F97011F626D}, {0x0F96108C87A1E21B, 0x40083D237303CDCE},
+ {0xB957827A09E27500, 0xB1A6110BDDC40235}, {0x02308304D12EAD34, 0xEC35CEA9072DB572},
+ {0x401A7A3C5139C875, 0x79B0D49094AE2980}, {0x5FBC47FA31133E84, 0x9C5E2F9124878433},
+ {0x93463F2FC7AA4E15, 0x63DF6AC1948CEF2A}, {0x592DDE021B90D3BA, 0xB44FB57FB4BAAD4C},
+ {0x770753E3BD5898C7, 0x3734D7D47FB69CFD}, {0x4825B827C311E5ED, 0xB84B18662BAE46AD},
+ {0x35389BE39A9F2995, 0xF044A5C03FEF0FCB}, {0x6337E6C7CB355AF4, 0x4D789E469547AEEC},
+ {0x221CDC58C7FB14F5, 0x7358F476F4C72029}, {0x6D3C72A60F5246ED, 0x8BB2E5E21F493BB7},
+ {0xA9A6192EDBF72DCA, 0x43029F1C68EC23AE}, {0xC9630EEF3A77B6FC, 0xCF59636C734B1474},
+ {0xCA87273321AFBE21, 0xCBC3F67C57E132A8}, {0x56CCCB7F353B5F34, 0xF772BAC71E3531FB},
+ {0x629F55ABED41C0DD, 0x730A0FFE2EFDE64F}, {0xB6A0DD5E0B3DE0C9, 0x5E6E61524EEF11DB},
+ {0x42538C0942F8886C, 0xC8266171B29AD20C}, {0xC4692DA96E47846A, 0xA9B3599BF1F8B596},
+ {0x5FDD27AD31B06121, 0x6DD3408B4F361526}, {0xF38925E9F529470C, 0x6E079C6A21E43FB1},
+ {0xFAFBEA8CEBFAFEB6, 0xEBF55FCE5E15786E}, {0xC1A6D2A78456F874, 0x39619420D47E5F11},
+ {0x07DF657FC42DC0B1, 0x2A8D5854765D3174}, {0xC037E70641406AF8, 0x8BA2941688538BB4},
+ {0x63DA337022A91FED, 0x17CC1CA62077C3A9}, {0xC6193FF02D48BA19, 0x8AB5B343D35DC3AA},
+ {0x365263A28730CE0E, 0x1A655D8C16368011}, {0xAE0A5EC5FA3D2640, 0x232E8024D3B3F94B},
+ {0x78C923196B1FA716, 0x6BE9AF2E14968A20}, {0xBFC5F2993C4CCA9B, 0x072AE20A08ED5EE3},
+ {0x1C266001E067C34D, 0x179AD8F61CE10767}, {0x1D027D5A479421E7, 0xEEABDED7B36C1676},
+ {0x88AEDD7CA4C7B8CA, 0x9B721DB12931A9DF}, {0xC7341ADF1E5FB46B, 0xFBA4793CF9989B6B},
+ {0xF51DC9DDFECA3602, 0x0A27994F3B8CCA9A}, {0xC26F7090343C8FF1, 0xC2CE86ECC2C751FD},
+ {0xE5A14920D5260EC6, 0x158B5AEC6C32086D}, {0xA09C02E9421B4BC5, 0x25F347A680745442},
+ {0xAE0879F0BD838622, 0x7B6E80A268A13E96}, {0x97A16FFE58832A45, 0x06DA4006CDB60F81},
+ {0xD858995B9CD83D1E, 0xBD9ACC1CC5252F20}, {0x1B3281E06B523B37, 0xA2ACDBC71517E303},
+ {0xA0FE446AD5DAF0A4, 0x3B5E0BB4734694E7}, {0x13D60BCC627137E9, 0x26A228778F289070},
+ {0x9B006FD99B05612B, 0x0D8F017BD04F857A}, {0x7F094B2D8ED13EC9, 0x3F201DE54A129334},
+ {0xCF9C6E287356CA0D, 0x8D9DFADA9069157A}, {0xC9069F57E5750EB3, 0x48EA54B5A74A3A44},
+ {0xC84D296B67502900, 0x75EB4E2C7A45C30D}, {0xD8301C8898A69C06, 0x207F18BBE510E632},
+ {0xEDF38BFDE740D012, 0x11060BFD6F6FBE20}, {0x6D069EB475FDC9DB, 0xD9490C4C83944D84},
+ {0x5894A861EE5057B5, 0xA78E9461EDE86D35}, {0xD9BE68F4973317AB, 0x5900A5E614629359},
+ {0x672F6627F1C4539C, 0xACEE21A06FDCA5B5}, {0x9D96F6955BD388A0, 0xDACD92A591541486},
+ {0x2586B4C78E27569C, 0x0346B62531F03D2A}, {0x7436E5A9A85C44F9, 0xEAACCC0E6441B561},
+ {0x63BD14B27956FBA8, 0x1DC9ABF00F3DA971}, {0x2750E7FC61106F4D, 0xD2EFC43E2E8F7F3B},
+ {0x50344F3D1866CD25, 0xC2BE8AD471E7A438}, {0x1ED6A1D52621B742, 0xE3CD3C4915E9A6C1},
+ {0x238B66C2F6B08DF8, 0xE34C200F9E3BAF00}, {0x7F1B018D2CEB7FCE, 0x659B5528B65F1F90},
+ {0x807C81E6131FD279, 0x81966414714B6398}, {0xFDE123FF39999BEF, 0xE20BE1E91B6A54DD},
+ {0xF1758F7FE68A4BBD, 0xDF76ED7F46C97213}, {0x76C60C326BBEA126, 0xE820F98052174F06},
+ {0x60DDF4B9B2090D0A, 0x070BF03C1C971142}, {0x5CDCC1549AF3F106, 0x50A02797FE502F3B},
+ {0xED552B49CB3FC198, 0x0808C8DF963E3965}, {0xBB9ECAFEE9EEF9B0, 0xB75EF2280D028FB6},
+ {0x519D8C96DB976E1A, 0x57CDEAFD739C69D1}, {0x3B64608E763F8D89, 0xF27524E54C9E9CE8},
+ {0xBC88F9A6EF26FDDD, 0x77C6D32F1B10719E}, {0xDCFA0085DB1EC164, 0x38661A322A7B6710},
+ {0xDD807F4CFDB166BF, 0xB6BB4308E80712DE}, {0x834C68AEF483084D, 0x7A4BC9DD69DBEA30},
+ {0x28F3892761F77010, 0xCA06F311E121B0CE}, {0x02EEB3DF0D604AB0, 0xA8EF867C27EF90AF},
+ {0xDAF23AE86B1D86B2, 0x031F06BD6A47EC9F}, {0x712D717BDF0C041E, 0x536E3C8634D9C12C},
+ {0x3E148DCA2AB631D7, 0xC36FEEAF3CDBB7F8}, {0x92ABDB0FE75BEC65, 0xB39DF1D25F242069},
+ {0x8945AB1F7F03A296, 0xF1F64E8884DC7AF3}, {0x1E5A218AFC2DEC0D, 0xF45CEBAEEC4D4D42},
+ {0x644DF04A3D5728D3, 0x2061D4DAF391F752}, {0xFE0DCB48864B2F14, 0xE82493FB738E8798},
+ {0x6B606EE1684A61B8, 0xE69E521A862AD2D5}, {0xC2B0236AA60ABC0A, 0xECCAF51257524821},
+ {0x9505ACBB8C477162, 0x3924A0CBB22D7A72}, {0x0F88CDDCFA8CA9EF, 0xAC8C702A165F6CBF},
+ {0xFD57AB9F41D3FA1E, 0xEC52C0A59ED04FF8}, {0x85E3CA67B103657D, 0xBB697289F17C642B},
+ {0xFEEB4B9156C7B6D6, 0xA1A1390A7607D66D}, {0x200A21388A4C11EF, 0xC6634321F5D0FDDC},
+ {0x4BDDF018ADAF5157, 0xB6DCF42E58B799ED}, {0x7FE96C874FA23DE5, 0xB87BE4CFC00D5FFF},
+ {0xF8007FA1E098545D, 0x08EE80EAA4C7E204}, {0x8564343674C67B41, 0x8507D72DB7C64385},
+ {0xAC85911517FAD4C1, 0x445BF866E3A66109}, {0xFF435DFDCE171181, 0x0050655C78B2561E},
+ {0x704711740A3C7763, 0x63F268B128F91B83}, {0xDB651497D8F7102C, 0x4693F8666361519E},
+ {0xDF535436494448E4, 0x1DE390EC38983A67}, {0x17DE5888EFFDE58D, 0x3AB9E0AE239CCF18},
+ {0x595F03C124820F35, 0x228A4C1B01700771}, {0x05CA18460C6540EE, 0xE9612146A5EDCECE},
+ {0x8F708FEBDAD97564, 0x32C1D78F53ECF197}, {0x85E709F97D07C0B3, 0xA12517C3E9EA4069},
+ {0xAE2770FA221130FD, 0xB9150F971F9CB667}, {0x1C326E782BD6DB5D, 0x2E93E2A92695583E},
+ {0xE18B936D693E60CD, 0x9777E558D83E1EC9}, {0x593D8B90B2CA0305, 0x5637CDF7C5544E7C},
+ {0xDC4BD00BE7CC7926, 0xF6D4088AE1A09EAE}, {0xD22B6270BA3BD8E2, 0x51438DF6B314E36D},
+ {0xA3B0D653DC549818, 0x0C30F122095CD20B}, {0x83342B5B8030806A, 0x4C8DF75A28A9D82A},
+ {0x4FFF86A8FCCB0ADB, 0x055B55F1593D8ECF}, {0xA9AFD502D174C482, 0xB0FB8159D5E12A46},
+ {0xD9178623EFE9580C, 0x319F0671DE5460F3}, {0x6B3E6A64E7E9AE52, 0x4D48B1032EAF4193},
+ {0x08CA69BB038ED4F8, 0xC700A16DCE120EA8}, {0x2B6F47D6EE7FBEC1, 0xAB83327C0E2004F0},
+ {0x327DB6D79BC74992, 0x83B0998F0442F67A}, {0x450B76D422D93C0F, 0xDDBAB9FD88EE3D6E},
+ {0xA43152889FB89FC9, 0x03286AC6C7023838}, {0x926E3B164C8B46B9, 0x5F2591BB74D76349},
+ {0xEADBA38847D50527, 0xA9458D4023514D7C}, {0xAA58F422AC2054E8, 0x139E077B1CB89472},
+ {0x05C533EA7CCF0826, 0x6C96FFC37050FFDF}, {0x1CC56E8AC604725C, 0x0513B79119F208BC},
+ {0x787B772268B4297D, 0x7C42F6C96C6D7459}, {0xC013C4F7E87DB4D3, 0xEA205EB2E4E13CCB},
+ {0x025421218FE3B07F, 0x31703349680EED03}, {0xA5E81EEED9D67C99, 0x79F6BF8D1A7D2F09},
+ {0x5122D943842F4EBE, 0xA9238CC92E478E48}, {0x81FD2EF1C5401BA7, 0xF7461E6A7AA16C04},
+ {0x3882A4D35117859C, 0x355B14D8AAEB29BE}, {0xCF6AC5340896DADB, 0x894584540300346F},
+ {0xAD160B81EDBB5F39, 0x23752EEA10575001}, {0xE785F5F48794CDF9, 0x7364E770DDC77EF2},
+ {0xBCE5390486D9DC0A, 0x355A6EA21C7CC04A}, {0xE805F04BD771353F, 0xF854DE84C5631644},
+ {0xD4B113CBC9B1D039, 0xD148A8014196BEB4}, {0x84338C13E26315B6, 0x889B6D4EA1E37A58},
+ {0xB795162A599E989D, 0xF3E25F7DA333E275}, {0xFDC9E25784FB9EC5, 0xDEBE197DD4929548},
+ {0x5F7569248952AD73, 0xC6A76E64440606B0}, {0xDB94F4FA1BB72777, 0xBAE468E27CE022C4},
+ {0x90081052AE32A34C, 0x4229C40C89ECC6DC}, {0x81BE7B9C15DFA3A8, 0x5DFC9186A72A96F5},
+ {0x7142AAE806383E45, 0x9E60F1183225ED3A}, {0x3625DBD75DBA5E24, 0xFE0DA35E99A777BE},
+ {0xABAD49885AB3AFFA, 0x8165301EFA6C7D9F}, {0x3EECC3993DD5765C, 0x7A272000A7394A8D},
+ {0xDEDEFAB668AC8FFB, 0xE7E2AAC0C1F5B318}, {0x3BD8DE3263CC5E4F, 0x91B1D9C0C191D3E6},
+ {0xE97D1181ED8A5687, 0x78CAC901D48867EA}, {0xB5377F83EDA32D8E, 0x4113337E21244D35},
+ {0xFE5EE73CD7A120A5, 0x6BFAEF6F41D1DD57}, {0x253586D617CC4C69, 0x4EA2131004F3FDF4},
+ {0xE39395031040AC48, 0x6DC507AC132EB23B}, {0x31CAC3CD47389EBD, 0x7C2AFFCE05BED2F1},
+ {0xE6C9577F370B5CEA, 0xB98F5C67D4D77A5A}, {0xC79DD2582A416C7F, 0xEA2EDA45EC691A6B},
+ {0x85CF6740E0BDA218, 0xDBEA82EC8E3EC418}, {0xA81B319F7A538B74, 0x16A7192DDD5242B8},
+ {0xE76F67419CD84FA8, 0x4CBA8C09354681E5}, {0x099BFF56E8F1D20D, 0x1365685739C6F615},
+ {0xAB1543CA3CB0D863, 0x75C006FD519D1F4B}, {0xF55C2E93ADF08DFD, 0x291B61B758F754EB},
+ {0x6CF0B4F61CDC45C4, 0x6112A03B11784506}, {0x1D79CD31EDEA06C2, 0x82041120663FE807},
+ {0xA720B524A865F9C6, 0x379655B9A238E9A8}, {0x28448F7E47025AE9, 0x499EAA71E85D6B8D},
+ {0x97BE9A7EE0E0E5F0, 0x7450EAA484543903}, {0x176F87AA0CEDE14D, 0xBBAC4B88BF191A01},
+ {0xE3DD5723A2799F9F, 0x9EABF3E738E47524}, {0xC17C10C3FF996425, 0xDE0F15AAC7C68301},
+ {0xCC7D3577BBFB4272, 0x8821D6924FBE4D65}, {0x9B7DADFD6BB93D06, 0xCACB012FB6B52C49},
+ {0x2E31FB73087D41C0, 0x5AD8492DD15776C7}, {0x8FF917C9D8FE1920, 0xB6554AC47C319C3D},
+ {0x4CAC1A7F9131FFF4, 0xE7CBF61FF902F9C1}, {0x10F52475911CC5C2, 0x3DDD557880A0AEE1},
+ {0x5BE26E0EFF371D6B, 0x357824BE06292B2F}, {0x71CC3869102112B6, 0xFA110156873D3C21},
+ {0x4F4E0D27B9E30BCE, 0x80096D5693A5316C}, {0x71A09EC8881FB8F8, 0x9D9AFA074B573174},
+ {0xDD18904253637070, 0x0C05FBE0DE1C0078}, {0x2198A5005B240AF2, 0x82A3EF3152FC9C25},
+ {0x57B5934046CA3DBB, 0x74E6F887D7F6F128}, {0x0A6929B49D8957EF, 0x7C721589DF2FBFAC},
+ {0x339BF0BDADFF6214, 0x5F0BA1B9F038B10B}, {0xDF04D8C5502C9648, 0xF76F96FF9BE9B151},
+ {0x37D587C12440535C, 0xC05E21FD8805E0DB}, {0x8C32295CCEABC94F, 0x185FD4663C6BF22A},
+ {0x5181BC128C6572EC, 0x2B598C0641193A4A}, {0xF777E7D25921E231, 0x86AC1A62A32D9C18},
+ {0x64CEC875DDE1810C, 0x0034F18FE561F03E}, {0xC33D97CE1EB4CAD4, 0xDB930BFAD0A27B11},
+ {0xB4FBCD6DB57C20FA, 0xA2700E47F9B8D3A1}, {0xBAB4F30403DE0390, 0x19A6EFFDC8E66DF6},
+ {0xE8FA46B0EE905197, 0xE20C7C24F638129A}, {0xCDCEAC47C948EE97, 0xA8DEB9A9917D1B1C},
+ {0x70B272F57BDFE7F9, 0x029C7D87B651DC58}, {0x6FF6947FB1E5C456, 0x400CA26791F153E6},
+ {0x687337315C2294E8, 0xDA6415D3DE131A77}, {0x242C59CA3E64589E, 0x7F133BDD65BC68D9},
+ {0xC6F21935204BEAE0, 0x1F9BD5AD2F76D025}, {0xB71A616FBF44D061, 0x2AA1764ED988FCF0},
+ {0xBB4CD3AFF3EA53EC, 0xB070734ABEE01A77}, {0x6165AB61B7E8ED35, 0xC4B343A34AF12E61},
+ {0x752EC57F26C569A5, 0xFC560B85EF01B8A0}, {0x2AD5539FF0292F59, 0x95CA101CD37472F3},
+ {0xE0B4E45CFA6E4711, 0x61D1A354E6BE3611}, {0xA5E8500B3BE7D519, 0x1EEB5A77D73924FE},
+ {0x6AB14941E61D5214, 0xCA3EB8CE8A0E7938}, {0xA93F06D925E08644, 0x6AB6DD59686363FC},
+ {0x59FCF622D0B8040D, 0x901C8671345730A7}, {0x142E7DF0B7631AD5, 0x7E676F2E9E66EF79},
+ {0x6BDF7F70B0F1FD96, 0xD7300B6B68F169DA}, {0xB79379F37B1495E4, 0x428B8425972A80E4},
+ {0xE6B4B32E0678C333, 0xAFD1B44893B75E20}, {0x9EC706F0BA16BDD8, 0x8DE99CFBF853DC17},
+ {0x0ACA169BD80942DC, 0x6D19C162D6D8E9EC}, {0x83B2EA8103FD763F, 0x63835EBB51B81AF4},
+ {0x28781B946914A470, 0xEEFA6AE5CE196598}, {0xD1E1BF3F2721AF4A, 0x125992289F97F887},
+ {0x74C1F2D062CFA1AC, 0xA28CAC6F91B53A2F}, {0xF1EEDCA95BEF42D7, 0xA60BD8A447A2AB2B},
+ {0xBC65D4CA2D4B79EA, 0x916876444E6262FA}, {0x65278C329BB512FA, 0x37F8F76C09454415},
+ {0x054FA470C0819D93, 0xB1BCFE973CAD9269}, {0xC806539D3E8CC314, 0x21D71FF2AE9E042D},
+ {0x6EBBEB74B1C6E0FE, 0xD87AEFCDF21C0632}, {0x63767834514F1B0D, 0x598E64DDA9EBEA50},
+ {0xBEA09EEED3A236BA, 0x3796B58C201B8C90}, {0xBB3A2474E41DDF3E, 0xD5952508984646E9},
+ {0x2E779DD1E058B29F, 0x36E17387816B047E}, {0x0665250719ADEFBF, 0xB6FFAE962AE138B7},
+ {0xF0DDC711D9C679B2, 0xA6420AA3412C3696}, {0xB291DA9331FE3689, 0x11AF1AA60867B4E9},
+ {0xA3B3012CFE4D85B5, 0xCBD42848C0CFCD53}, {0x5D616F161A80AEB6, 0x5F4D67AAEB260588},
+ {0x35B5CCBB614F4B55, 0xA595D3469755F1AB}, {0x5565EFB38777478D, 0x6DE489A1F320A733},
+ {0x91AE348BA952B1A8, 0x095F37DE278EDE8B}, {0xBDB25DB6423C30E6, 0xCE9F7D73DD71373B},
+ {0xE7921AFC8743C4FA, 0x5C0AB22650552742}, {0xE1B97418908C95CA, 0xC3D4CD36B3248612},
+ {0x89E6FC91E1691218, 0x73FBB2FF141D4918}, {0xC7238B40DE88DD0D, 0xEB432633222061E9},
+ {0xB0B5FA1616634107, 0xF633E0304802FF6D}, {0x93AAB2B3B964C2D3, 0x49EAD14CEB460056},
+ {0x806154CCDB10BA0C, 0x67C0E3F5469F0DCC}, {0x5DC6B68A12B1E26A, 0x57ADDE9CDDFBA478},
+ {0xD87848565CF57B7E, 0x40C5DA7696EB7405}, {0x46FF1F88671A98BD, 0x9658CB5F54F91207},
+ {0xF0FE0656C6EAD488, 0x43C66DA03452A64E}, {0x95C4593E20FAB30B, 0xD74D03CC7AAA40BB},
+ {0x4C612756F4CDA902, 0x857738904C1F9B0E}, {0x5B4A2D06F9CDD3CB, 0xB2421861890F84AB},
+ {0xB756DCDAB1114421, 0xB958265EF06C1259}, {0x75E0CAB65607FD46, 0xD0887E84A3875D35},
+ {0x7C117CEC873DA341, 0xFCDA66A55C18E40E}, {0x4154F568BBDA81CD, 0xE5B6D8CCD8DC9AAF},
+ {0x452EC5023EEF7BB6, 0x56DEF20BE85B26D5}, {0x99491805268F243A, 0x4DD75F1EC2220D8A},
+ {0x05BA7AF5FD05652A, 0xA16DE7A92D1CA0E4}, {0x915B583855235E7D, 0xAC0B654399E8FD51},
+ {0xA47EDF5B497E3B3E, 0x8CA0C033456D3C65}, {0x5622EBD287AD09DA, 0xAEDFDFD5AC8B3139},
+ {0x9F3E5D5773A034E2, 0x12185A36B52D5D21}, {0x5D6FB23A43DDAAEB, 0xD94DBD5912EB72ED},
+ {0xCE53BF2CC21D07D7, 0x5E24307E42D7CCB8}, {0xDB1689A6F0F00AC3, 0x30E51DE1D43B75A9},
+ {0xA20CD2C8CB87BCC6, 0xE0F923426DAA32A8}, {0x8AA64A0E6F86DCB1, 0xE715F320D3BAFCF7},
+ {0xE64B94306457EA22, 0x66B87E955AD1511F}, {0xDDBBE9A3152CBBC1, 0xAB1D595BE71B15D5},
+ {0x1DF978760F4FC195, 0x440926F397CECBBA}, {0xC288D11CBFD245A6, 0x7D6BE7B3A3333B71},
+ {0xD7314D87804C1C9F, 0x05B5935DA70B16DE}, {0x681153C3F1C14242, 0xC77D99B01417D5E1},
+ {0x768586C1B68A5358, 0xDA0841B440B80B4B}, {0xDF07A703BC3BC097, 0xB8B0828BFA5E7952},
+ {0x1E2E0B2F5F66FFE3, 0x6C4CC7667602F558}, {0xEA52982F33495CEF, 0x39E8FEA12248DB54},
+ {0xB17A63997D08569B, 0x97A6B1197AE36E00}, {0xC4A31789EB58D194, 0xBD8C8A4A8FFB3A4B},
+ {0x2BAE5665390A92EB, 0xCEBA0D82A532D443}, {0xC094CDFE8B6922FC, 0xEFBC0CBFA1C70D13},
+ {0x5B2DB59BACADC7F6, 0xA851F8C56A0DBFF2}, {0x0C4488FE1C96A773, 0xB4826AB8AD87ED44},
+ {0x48FCDC53657005E0, 0x6E1B026FEA48632B}, {0xCC222A49C39DC754, 0x711FAB8040E03B21},
+ {0xC3013463CF9B656D, 0xA64962F326F3405B}, {0xAC102C90251F379B, 0xCB8812FAB98600F9},
+ {0x08302535C9C035CE, 0x96F857F495F1D1BF}, {0x87C83FE1D9BD69FA, 0xEE6823167E14D816},
+ {0x649AAE3AB3788295, 0xE57430C4306431D8}, {0x12DC3233C0F6D04B, 0x1C70E1FC43FE1FBE},
+ {0xE68FFAB6100334FC, 0xBDE0439B8D828E2C}, {0x5900CE5ABCA2F0A9, 0xA60E1015566722D3},
+ {0x348E27D8C850CFF1, 0x5121AA3222F5DEB2}, {0x6D7A54EFB67F20EF, 0x213D5F21BA1241A0},
+ {0xCB7576989325CF9B, 0x1E8001587E4ECB25}, {0x18E4E70076A2A95C, 0x0D934FA20A68C0C2},
+ {0x079DBEA8563B4943, 0xAA84FE2A14EB9C0F}, {0xFE5FB1E4264FA04F, 0x008F46D778882B28},
+ {0x10BB643D1C456CF0, 0x7CC00891FD128611}, {0x86818076119A7527, 0xF45744C52D895EC0},
+ {0x10EE81F32CA5379C, 0x8C2268D8DE29C224}, {0xF57E373158EB7AAD, 0x708AD77F5C0D1544},
+ {0xF9CC2AA0F997D3D9, 0x49302943599D150E}, {0x528F1701C45B81C1, 0xBA1860D42019430E},
+ {0x4FDC2BE6E8353782, 0xE2794772398F3DC6}, {0x33D60766CA4D6A38, 0xB0654E2E48EB853E},
+ {0x536194E4D6893165, 0xA55B5A75C1EC5947}, {0xCD0E034522833FE9, 0x9876E2473CF01ABC},
+ {0x9FCDAB1463F2EAD5, 0x6E94E094A196789B}, {0x94C8BC646E66B31B, 0x921F6F0FD387DCF4},
+ {0xFBAD6F110F6C5926, 0x3BCC8CC1595D87A2}, {0x208C0E25304FE27F, 0x10062D3466DD8FF0},
+ {0xA6FD4AABAC6D2CE9, 0xFFC548E6BE58405B}, {0x2ADCC795A820C4A3, 0xB79F4FC93C5CDE79},
+ {0x6B0C6D7355087322, 0x6318628BBE4C7642}, {0x8F7017D387CB1FE8, 0xAA8BC07EC5BAAB2D},
+ {0x0472D5B385F6E6C0, 0x8306747121B455E8}, {0x2987C6ECE2F68B6B, 0xAEC960F10B5CA98F},
+ {0xBCE67C89F93F297F, 0x7EE69E5F7345B01E}, {0x9AC32CF950CF9831, 0x14DEBBEE211393CE},
+ {0x12BAD1C2EAEB2675, 0x70BC32BCD8BCCF4C}, {0x6CFE28D9EB0704DF, 0x896AB4D9874BB965},
+ {0x2A6560F018224A4C, 0x6AFFEDB40A565C38}, {0x01EED757E1B0DCFD, 0x3C67172752320400},
+ {0xC6CE3ECE812F6156, 0x77CC7E2CF16A144F}, {0x9DF92D4E0B3B9749, 0x7A5FDF13CF0E2B7F},
+ {0x22F11684C43E4D51, 0x38FD50B23E466B3A}, {0x3C1675BC57B51DBC, 0x1079EE1961CF9919},
+ {0xC8D63EAB4F0FA8EE, 0x6429E5B5CB335BF2}, {0xBC0AAE153FD8776C, 0x8CF179A33C893305},
+ {0xD55C09CE54F3256F, 0x15A38517CB962C42}, {0x3C3CA323760B43B0, 0x05BE83A75A641D91},
+ {0xD6E49BA31808B99C, 0x9987ECE7BC5D0306}, {0x3D8EA925AC5A37DB, 0xE97FDEA98C4781CF},
+ {0x3FAB5418EEDE6F4C, 0xE5717F7C388B8045}, {0x2F7D863600240C5B, 0x439B3887C0964AB5},
+ {0x9EE3AB2B818946B6, 0xA79E91DE0D08C532}, {0x6B577CB296DD1D4A, 0x78509804BB0BCB4D},
+ {0xAEC7B3887B9F2BF3, 0x14FF6E91FAA1C8A9}, {0x5A8E60C0783885AF, 0x2D0EF59126123252},
+ {0x9EC64BDABBA78685, 0xA6DF1016F33B1D9B}, {0x11F4A3B68BEF31DF, 0xAD4643B04B5C067E},
+ {0xC0C295C2AA4621EB, 0xF8084D0D356DE63D}, {0x056B1F7DCCBFDAC9, 0xD48E0B6E258BDAA1},
+ {0x8FF63F8F26BA2CB3, 0x56C0D27DDDBAD3E8}, {0xB1FA80C244620888, 0x1BD1B8A565C306D0},
+ {0x208D03009BBE3283, 0x237F855BDA0340F7}, {0xAE18A0AB7DB07E61, 0x870D621D053310DA},
+ {0xD33A57416B5A3762, 0xB9E7E6B67FE42320}, {0xF24B672D764319AF, 0x2155256C6822C19E},
+ {0x55DB6AB8AADD0172, 0xBCDC53983740C242}, {0x9CCC4EFC0FE0D64D, 0xCFC47A879412010E},
+ {0xFD5C7D6B956AB9C6, 0x4A79A1B2D5142CF7}, {0x7BB0D9A9D0F5C0EC, 0x5B7E4F8244D0E5D3},
+ {0x5ED71956FBF429C9, 0xEAC2CB9252ADCAFA}, {0xF36D49970D906216, 0xEAEC8F037DAAFBC9},
+ {0x55242491D32E9EA1, 0xB79E1FB7F8736EFB}, {0xE88E94CDB1D1414A, 0x816E57D17B0740C8},
+ {0xDC3DC08AE9CB4C96, 0x12EA231C7E08FB14}, {0xAB86DBC820380289, 0x9655BABE59E30254},
+ {0xD3C61B75F9BB1023, 0xEB313DCB9ABF3A11}, {0x4A24C830638B0149, 0x1BB4B4FB3DB7C48F},
+ {0x32EAB09158E82F0E, 0x0E6346D435A6F42F}, {0x6106637CE3239BAB, 0x7305588ABADA2799},
+ {0xF29262D310C094A8, 0xB940325BC4D76E25}, {0xA9E2BA7F9372364A, 0x2B5AE41274F09AAB},
+ {0x6A7D192DB068C33D, 0x1FA7B5A9D0FC98A8}, {0x97933AFB09EAC1C6, 0xE4E708F46139DA02},
+ {0x70A65DF8123AE7CB, 0xDBF7D549732B224C}, {0xB0A9D54840C51463, 0xA202DD82A8106461},
+ {0xAFBF337AFA7ABD9B, 0xADED2A9A58B2CE66}, {0x5EB48FF18105C8E9, 0xDDE5F23CF1CBE88B},
+ {0x58D50BE99C506A50, 0xB0755840F8C58934}, {0x38E71A318E93C683, 0x23DD94B8851A35E4},
+ {0x1042807346C802C3, 0x68DCD93C46DF938F}, {0xF0907EB15B05BD61, 0x0BA9F6A72E59D7BA},
+ {0x3A3DDE690ED0EE4B, 0x26C0C5FA9BEE084B}, {0x8F7137EEFF6D2A14, 0x78DB8C0496BAA50B},
+ {0xCB8084FBF08FDFC9, 0x6F5B64EF1EE169B0}, {0xDD333C114B33B1A4, 0xF50C721831F2DA1D},
+ {0xAEC7E295835D005E, 0xF15B578B424CB43F}, {0xA4FCAB5417BB9DC4, 0x55E47305B70A6C57},
+ {0x8C6027B89B62C5B4, 0x7E0008DF961C1B3E}, {0x67B8D7B5F97E38AE, 0x84442F135332BD6D},
+ {0xB3E8FB1DC20C0F1F, 0xAACA4E05BA71AB6C}, {0x68657D1C32753B33, 0xBA1FEE02A7B1A64B},
+ {0x403200E1E83E72C8, 0xBD4BBE4A731215CD}, {0x51D371DD9786BDEC, 0x87A449E73B773598},
+ {0x72FF240F90016101, 0xA740FC407899AFE9}, {0x5A25F480E597FAC2, 0x2BBCBC2EB06DB909},
+ {0xDFDC755B591777A6, 0xEFC50851E2D2CA4E}, {0x2E342D5DA5DBFFE9, 0x4A7E428FA8A19B71},
+ {0x0DA82F8A0718F4CC, 0x8C8699C24E8B3A08}, {0x19D66FEF360FB287, 0x534AEAECA24E8115},
+ {0xACE130A0A0FA325D, 0x184E501F2FCDA480}, {0xF34121990071F26C, 0xF0DB6AA9EC1A1596},
+ {0x766AEC744C074C8D, 0x4F59AA5FE16C7D6C}, {0x4DAF739F9DAC2A9F, 0xB683305A574E8896},
+ {0xD3165126AF97C808, 0xA2DFD3A84CBEF14F}, {0x0021E5E5E5BED55E, 0xC33BAE7BA31A2090},
+ {0xE81FDE16C924FD2B, 0x18366355BBCBBFA9}, {0xE234E1554927B246, 0x5C327075B59DEDBE},
+ {0xC95C3C261ADE8006, 0xC5E57B099640D429}, {0x0A6B199CFC39D494, 0xABEF7F3341393E4D},
+ {0x1AC65E58DC37E27D, 0x8D6D8228FABCC5F5}, {0xC4E5E635A39B31E8, 0x3C3D570CAD6E07DB},
+ {0x3ACEE3044E4AA520, 0x8CDB9FC123CD222C}, {0x3F9133684982C910, 0x0588DD14CD220002},
+ {0x4073CE76B5081BD3, 0xBAA80D3797435ABE}, {0x3C793F13247D1C54, 0xF6A3D475B4CA99B0},
+ {0xF0BA65D32E163FCF, 0x6280120697E3D459}, {0xDC85E4780FCD16DA, 0xDDCD759DDDF9A320},
+ {0x2B73EA1E85825660, 0x16099EC941960CFE}, {0xA2FAC905EF130512, 0x3D77B7EF7DDA1FC7},
+ {0xE73468076A5F52A9, 0x6BB671863879949C}, {0x20CC44A9FEA03DDD, 0xB04846B8C3732870},
+ {0x42EC0305B7A7A0A4, 0x09F0D136D8A0FB12}, {0xCA009AD66042FD8F, 0xAA96F72D59D15B4E},
+ {0x7A1E34973884B2DF, 0x59A343F462950B00}, {0x9601208216DD9CC8, 0xB02A75DD147BA2DD},
+ {0x35F4A322D1BA5297, 0x72C282D06C378D0B}, {0xFBEA9B1DC9C27163, 0xAB280E70EE60875C},
+ {0xA1B08311D2F0839E, 0xAB6F302A3D98C040}, {0x55C82A9B858F9D03, 0x18BBC654FCECE094},
+ {0x8512F2F12C42D69C, 0xFCC9D3CEFAE91BA5}, {0x89FC6D6F857931EA, 0x42AA45916459586A},
+ {0x8F1359BF9FFD7418, 0xF7A4CE21F877E120}, {0x63E7B0BEC42D47AE, 0xD07C8E5C6A98B151},
+ {0xD3EFD2AF98F49B50, 0xB310F4DA98C6EFC4}, {0x350217011A0BA1B4, 0x36FCC02B0CDB5E42},
+ {0x11069CB3C6DB2ABC, 0x2F7561606DE4175C}, {0x7F3AD92927A6216C, 0xA56F957AB9D3FD9E},
+ {0xD1EFFFD6014A771B, 0x4DAFCB8A044FB187}, {0xD0FBF994959F0CAE, 0xDE95839D981EB94F},
+ {0xA97F09885A8FE719, 0x0E0023F91A7BA841}, {0x88CBF1DC2080A21C, 0x1C6EE1A7EB3DFB89},
+ {0x38BA6246DD5B42B7, 0x13461D904ABD2872}, {0x46731E37B7AFA218, 0x95131F1D54F71D75},
+ {0xCB08E8356E46E179, 0x888238ECB3E2702D}, {0xBF8BF02C297647CE, 0x06D57639F285D081},
+ {0x6CBEF814766FD463, 0x4D32E61B945BFDD5}, {0xB8CB538E72C0324F, 0xDCEE5E223B5CDB99},
+ {0x06141DE4D12DA6EB, 0x36F0504A486DB8B7}, {0x3CCFBC26D71E57B7, 0x63FAA3EEC9E8D648},
+ {0x07B87F051558D57E, 0x56C22E134A63C2C0}, {0x3008AB2D227D0129, 0xC86C6B91C0374DD8},
+ {0x72A15A3C2D70C534, 0xAFDB85FBAFA277EF}, {0xD8599491F006FBEC, 0xDD90F419B1A31EFA},
+ {0xCDD7FC6A6A2A7ADC, 0x16527EB6B62F75E5}, {0x4FC234EA4C2F695F, 0x54F7915F10016E23},
+ {0xA17B85571FE82090, 0xC31BCC39CBDC68FC}, {0xF7BC95113CC3EB91, 0x6DED2D5E8208B6DA},
+ {0xB2D9D4376CAFC902, 0x3F6428BFA9230A81}, {0xE1171B596ECD8C2E, 0x954DD55DD30BB4A9},
+ {0x84ADD999C85E6320, 0xBC63226B8FA5F969}, {0x5BB18078F6908342, 0x7F725E7DFA01204F},
+ {0x4A334BE16D0F10A1, 0x4011951203B90CEE}, {0xAAC378B781BAC212, 0xEB7564CEEF7E66DE},
+ {0xC15389EE2E984FF7, 0x190B0FFE62D413A0}, {0xD6E9B672A85FE0A9, 0xB11FA264764B7263},
+ {0x97773902CAE1575A, 0x4AFC173122C80758}, {0x482B4BC00A3C268F, 0xAD6CAC2CF2C48F25},
+ {0xE42028543A257888, 0xBB7993D89D2FCA26}, {0xF5403F9928666B7C, 0x4A45A0B38FFF69C2},
+ {0x84F5EAD57A35C632, 0x91D613D7C923D096}, {0xBB65F25628466B18, 0x250477654FFC34F2},
+ {0x042E170F2A4535BE, 0xD46CB70CE25291EE}, {0x150E88D383666405, 0x87D0A4C7520A2002},
+ {0xA7462F42F547065E, 0x6C0F8976528EA159}, {0x8838821E4D5DB3D6, 0x3EC1466D9EDE47F5},
+ {0x9C0F167A6CE22430, 0x604EEAB8575958F0}, {0x4A84687C99E7502A, 0x2D85F617A929A440},
+ {0x0D045176956B44FA, 0xD571D64D85B3CB90}, {0xF88EEB4CA2EB4B2D, 0x0507AED408D459C7},
+ {0x4F79DFBD16C00EF6, 0x36908968AD257ABC}, {0x678F6DE8B4D14266, 0x52F23981F2364237},
+ {0xF0913B4946406506, 0x6F366E1F70791445}, {0x173E1860298D6554, 0xEE212C38A649D0A6},
+ {0x601AEA8B340DD03C, 0xDA579D9C191DDDAD}, {0xC75B61EE374D171D, 0xB0F251AAD46CA7AC},
+ {0xCA076715F54AF3DD, 0x9C646E0F372039F2}, {0x64D2A92BC6AA2C13, 0x5DD0BE5538F6BBE2},
+ {0x968F6A0B1A13F192, 0xB3034677FAEE080D}, {0x4E4E9C4B349E0D47, 0x3946998BB0C50E60},
+ {0x3C34212FA6C6C324, 0x1E0E0517012B1B18}, {0x609E30E7A5524D2A, 0xEECD4BD561AB0569},
+ {0x86ACD41B97041827, 0xD573F1A3E925B241}, {0x99FD2D23E0D1B6C0, 0xA7D2AC1C6EA6BB37},
+ {0xA93685D53600639B, 0xE7CC5750F88AB23B}, {0x6DB5986F4BE48A76, 0xCDF292E0599878B0},
+ {0x9E49CBABC78EC6D2, 0xA0211F7AEB093967}, {0x0E360372F2C896DB, 0x2B44197ED1470721},
+ {0x96C3A777E537B1B0, 0x69C280035B81FF07}, {0xAF9CF19E54CF6347, 0x144BAB30969E6048},
+ {0xE3FA002F1C3E4F11, 0x9D78CC13F14C5978}, {0x71A382B64BAE377F, 0x5FCCF032628C908E},
+ {0xA5BB782ADF54906A, 0xF4E9D82113A16BE9}, {0xDCC22FE0F095F2EE, 0x8FEED0B251FF3620},
+ {0xC5FB4C354B95AE37, 0xFCB0E4711BAEBF7B}, {0x9728FA65C9A1D394, 0x57A757651F8D04A1},
+ {0x662793B6E521CF1F, 0xF1310249F9709B59}, {0x9C1E7E8A67931000, 0x31DF597A6127B103},
+ {0xED7D8372C348AAF4, 0xA28A4502174E1A10}, {0xDF8C9A0E4A432709, 0xBE72181B81C18A4B},
+ {0x47DCB9964E1E3871, 0x25A0E7D6CA3AA9FA}, {0x67C47F3EECC9FBD8, 0x2D879D2BB1F03A8D},
+ {0x15D266D04B1CCB86, 0x335BE8B2041A9545}, {0xBCEC711FD5AE91D9, 0xA4864899393E687E},
+ {0x4760E0D86F047D07, 0x4C0209AA3E333650}, {0x9D5C6FFFF6882FEF, 0x4F4DEE67E3FEC0E0},
+ {0xDB69436979706D2D, 0x4BADE9112687CEB1}, {0xF9AD975574A3DB44, 0xB2E7A2C7F2F2AE70},
+ {0x4763ED286A1E47F1, 0x8778A72F55C3009D}, {0xC0F1DE6FAD087D26, 0x24E04835C5BEC6BE},
+ {0xE8B816E85B964BB6, 0x4422025212BB0C6B}, {0xC4CE477E77E13140, 0x94473AEE188FB80D},
+ {0xF305532A137C803A, 0xEFFA6044C14610E1}, {0x7DEEE9F5BBA7BDAA, 0x684A641489637AE1},
+ {0xC3E460C35AD336A4, 0x6439753090919077}, {0xDA16A8DAAD153920, 0xD0B2C57B6D249B69},
+ {0x7D960B73B32EFEA4, 0x374207553ED35860}, {0x066A0827BFFDED0E, 0x07561FABC5CE7DA7},
+ {0x17D5282E163C5619, 0x6FA815193F0979E5}, {0xB99E2CEC3C101059, 0xA1351DDA539BFDD8},
+ {0x5F052876AF39FAB7, 0x17991F4B847C3538}, {0x3C9330483BF3A799, 0x37DCA537F48373F2},
+ {0x1E1C2130DFFB7B64, 0x53CA53427A4B8C93}, {0xE481AB9F9F0E3DCE, 0xFC769E12BA969AC6},
+ {0xED08F52CA56DD7FD, 0x8478BAC2B3A82944}, {0x2916D2C992B8D4C8, 0x3463826F25AD97B6},
+ {0xA03BC96265D1CF79, 0x0313B317E27807FA}, {0xA6351F3A8441EC57, 0x9936E7BC0A468E3A},
+ {0x5AAF6EE18E873773, 0x331E26630EB98992}, {0xFDFD0A279E229CDB, 0x30E07A247EF0923E},
+ {0x844E908D5D845BCF, 0x9D28D03E8C5F32EE}, {0x02A3B36122B6B2D1, 0x769C0E3BDE52C7D7},
+ {0x2E199F8DA5B62C38, 0xB3000C0002CDAE61}, {0x6F42233D268A3F29, 0x3D3F353EC5368AF1},
+ {0x30F49A5AE5807E58, 0x41E6A199D06B0F02}, {0x575D8E0A2D77BF52, 0xB3E06806184D20A1},
+ {0x99FE89BA39EABF9A, 0x994D87CBF11DAC0F}, {0x166829EAA00282BA, 0x958CC9B8F84473F5},
+ {0x95D6AD9CA2220C6A, 0x8B0826FEB8426B9D}, {0x2A3D558453E8CACC, 0xACF69F010871DF6B},
+ {0x644241090D7CA7F1, 0x1E502538D15DAC98}, {0xFE43388F559B3EA6, 0x88BED0CA9512CF34},
+ {0xFC23DAAA4899E6D4, 0x733F073B683F53D4}, {0x2BBF7F8CD313CBDB, 0x9B8C992BD6392E35},
+ {0x398F3CB497BB84DA, 0x1EFBF727B058E2CA}, {0xB7ABB3DD9C3BB903, 0x8547E659EEC8DF4B},
+ {0x6C7513C4E9674C94, 0x0DC45B2AF5EB3C11}, {0xF63A9D6E1146DA73, 0xF5573AC7A1FA2DD2},
+ {0x68AE4054C503704D, 0xD6F3889FD55C052A}, {0x8C0744E61E5E5C82, 0xED80B4E2F9F64349},
+ {0x644A6DEB77BA292E, 0xDD9BFF3BA0A8CE9E}, {0xE7F5EF921BBCDAB1, 0x0752710ECF991090},
+ {0xBECA333C0EBB899C, 0x8A4DCF720ECA4A16}, {0x835EB63C95B3AFFC, 0xD041F14B3005A015},
+ {0xC938309D10FF6923, 0x62A2E3A171672DD7}, {0x2C672D9D02B71451, 0xAD95C4D64E5BDBFD},
+ {0xA55BA9CFBECEED30, 0x0E9ED66A4969ADEC}, {0x0B2D67DF88BCE55A, 0x7803F1E603F4EF1F},
+ {0x3F5F404C52716A9D, 0x8415C7788EF45F68}, {0x2F5A63539C280B9E, 0xEDA9A6C8B26DAF5C},
+ {0x85D13002454279E3, 0x666D2F13C6BF8119}, {0x40D073B9EBB483FA, 0xC3ED653D3D61C10B},
+ {0xA44BA6920F7BD844, 0x67A77E4A3B2234FC}, {0x83C25872FCCEB61A, 0xC477D82E19FD57B0},
+ {0x36A101ED3ADEE937, 0x59BBC144574E2EEF}, {0xBC8551DCA36174BB, 0x3637A14040A97AEE},
+ {0x1E0E53F5BFFB97C8, 0xB84FAE5321AFECED}, {0xA13967E7B71DAA81, 0x2F4794B9DA948AC6},
+ {0x90AE9725E14D8019, 0x67F77283132C4298}, {0x2AC65E2EE5030602, 0xED8D64782CE72EA9},
+ {0x403BEAF9A8D51D69, 0x542654A0B2A784C8}, {0x89D8520BE815D4A7, 0x0C851891B7E1ECB8},
+ {0xE539E1D46138F4BD, 0xE87E82881F547F58}, {0x4D45F0C2CCA4CAA6, 0xD14F09FF076AE24D},
+ {0x0CAA8524D6E96418, 0x7781776F284BFE28}, {0x5497A0B2B40DF132, 0xAC6587D9E13E5B8F},
+ {0x5CD110E1CBB2E27D, 0x12206ACA059C7BE3}, {0xA99546F7B8D4DE6F, 0xFA7108E0B4FD582C},
+ {0x479875ECCA7C4D81, 0x821353A2A86918A4}, {0xDB146B5B7DFD8B1E, 0x2989E0F5E9B6AEF1},
+ {0x14E882D9C1AB2C65, 0x1CC41A7D49F5C244}, {0xBEE18763DF2DB171, 0x306F6C9B7FC6F56A},
+ {0xEEB197B55BEA4DBE, 0x90FD084071821D64}, {0x785CECAE20F4D916, 0xFC5956C2CA245FFF},
+ {0x64A0BCE9C2D0B0F8, 0x41456BDF5A08C6EE}, {0xA87101A762D9EED3, 0xC0A269FEBB14A8CE},
+ {0x969D0A898A50B564, 0x8A8E3BB7014B7BF2}, {0x5A104FB82DE62700, 0xBD1A576DAA46870D},
+ {0xC9A007F064DC9E6B, 0x4F901EFC829D7C4E}, {0x9571600460A2E1B1, 0x384ECE74A3DC232F},
+ {0xEF637E433FBD05E6, 0x6A86AF71A92E3B9A}, {0x93E6820B51FCBA74, 0xE496AEB6C3C90BC4},
+ {0xDCDFB990E1DAC3FB, 0x7DCBC655FF32EE6F}, {0x8DF45A8AD6ABB102, 0x0CBAE53D0A67F09A},
+ {0x722F3411095E5DC9, 0x88809C3BEE665B09}, {0x5004617DA24DE74B, 0x36251841A9C969AF},
+ {0x0346F3719FFF0FC7, 0x2C89D11600CEF1CE}, {0xC28D13966B5B7375, 0xC5A591B976C874B1},
+ {0x44BE42E79953D513, 0x10EEA77078227108}, {0xD4B86AA4261777F9, 0x5E96E8F87614B15F},
+ {0x3B6AF64DB092D5A5, 0x8279135E1252837E}, {0x3675AD574E9B25DA, 0xEC419558B81AC8EC},
+ {0x818638B9518D7331, 0x7CB909493CAACBFA}, {0x25FF8389A064B0AD, 0xBCA5218E4BC58D99},
+ {0xA9278D22E06F115E, 0xE6AEE8085A5C1EEA}, {0xBDD7768754695A49, 0xD60AB1D19767E210},
+ {0xCFF8578ED852E68E, 0x342EDD2AFB3B8AAB}, {0x7A2E9B173EB22180, 0xA653585826B4764B},
+ {0x41B022B86CC57048, 0x2C3AAC6BC0FDAB5A}, {0xAD744F1407521187, 0xEAF9863E9B2BF01E},
+ {0xC96576E9AD28B0C8, 0x9AAC5989F561F63F}, {0x4015D85C1795AF12, 0xFD1CAD2A883A42E3},
+ {0x881B486DDB14CA4E, 0x4D2496A6E6FC2BDA}, {0x75AC20838A80C248, 0xB66268F0E15D2F94},
+ {0x29D9CB94B2F2DD34, 0x1995B1D8DF8A5966}, {0x1ED6C442C023420C, 0x2A88E956F951F611},
+ {0xA354A3FFB104E17A, 0x5875EEB7E12C5A2E}, {0xB4B755D268135FC4, 0x437C2C37DBFC1059},
+ {0x758F1E5FE1AE63E0, 0x5BF30F062EAB4DB2}, {0x74FFE08A84FCEA28, 0x201C0A6CAD5A0466},
+ {0xCCB75718E219C4DA, 0x4904EC7F0259D1FE}, {0x025EE187A68FFC89, 0x2A5F7D216732BAD7},
+ {0x662BF8DF734B01FC, 0x3BE8073E2BA7BEB0}, {0x7B1533D579DA9639, 0x81FB92CC92D61161},
+ {0x9B30C855A569E599, 0x6B7DCB332972FFB5}, {0x44B6F3ED71FEF2F9, 0x2EDA9403CAE8E8CD},
+ {0x7A70DA36C06AFA04, 0x0133A3E81EF8593A}, {0x0ED3E413209A10BA, 0x3ADC905792140B59},
+ {0x1A96A64E9F7B2BA7, 0x05157011D638D611}, {0xA0A927CFF953E563, 0x0BA6ACF03B3C1073},
+ {0xE6F9F32246670828, 0x523F84C0093F29C9}, {0xB04A01A15C3CF894, 0x7EC1C4A385D46230},
+ {0x2E6296C1DE2C6390, 0xF3B80B2B4AB2240C}, {0x93AF8DB4999142CE, 0x9B50BE088FA66D81},
+ {0xF60681064CEC997B, 0x0687C76833462260}, {0xCE05FAC3938442F7, 0xA9ED01B2F48A3DC1},
+ {0x4D441ADAC44AD3D5, 0x5C77EC17ACB53196}, {0xD3E276BA383EA8C3, 0x76CA707EA747EB19},
+ {0xB0900F525F5909A8, 0x08CA94B381A45154}, {0x3F159EF9D6CA49E2, 0xE6F201961EFC930D},
+ {0xE4795A64D959132C, 0x588D80CD8409D916}, {0x6E68E91351667923, 0xF6D0357373C024AB},
+ {0x0B0AC3FC63E5F551, 0x14EE4225A58336E5}, {0x530A392B6FF6951C, 0x3AC0FF2D1873FDBD},
+ {0xE52651C41DD7A95A, 0x0DB21C44C9A5143D}, {0x4125EA63787A6C6B, 0xBCB18C032287949F},
+ {0x8344E6FDA068BFE2, 0x9A8CB97167827543}, {0xFA170311FF567A31, 0x9C4B9AF71CFB9C81},
+ {0x75740BF152F2258F, 0xBBAB6CEEC19770F7}, {0x750598EEA46363C2, 0xDC63429CC1A99F6A},
+ {0xEB5A9D7439CE1ACA, 0x4EF6DD33948B4DFD}, {0xD7078D0BA6A5506C, 0x81E0ADCE2D1567D6},
+ {0xE1D933DAB34CF6DE, 0x0670E7DD68226966}, {0xEB015AB689C8A735, 0xCE1FAE6ACDD75742},
+ {0x3E83BE065E608F47, 0x385658491A2595A1}, {0x60FCE791974B4F29, 0x6A1F2516858A918B},
+ {0xF570CECADF779136, 0x52DDD42BE12879ED}, {0x568910816974282C, 0x11CDA689079C82C1},
+ {0xCF55664FAFB6F578, 0x7DEB8583F50596C2}, {0x2295CE103849F119, 0x8EA6768CB328D725},
+ {0xD0D16A3CD20F0245, 0x71969DC2762DB52C}, {0xA4E7BB64239D7158, 0x200B0AF62852A385},
+ {0xD819E2D3B734FCD4, 0xC6985E06F3461A4B}, {0x2E57325AF33D1A91, 0x3AFBB8692229EA3E},
+ {0x5945AD8653FDF4A7, 0xB4C14679845B5272}, {0xD46302EF434D79A5, 0xE0AA89188D685547},
+ {0x1964460D229AAC39, 0xF295CA4DCCA261E8}, {0xDB10B2BD884D0371, 0x54548C8BB3CD278B},
+ {0x39B0130157CEECFF, 0x5412798C5F7C1330}, {0xA9A66628A993147A, 0xA1633232B65B9E9F},
+ {0xBE999B441EE23E74, 0xA4ABD09F3E2F75E4}, {0x952F5981C9A20232, 0xB2631586A9810F0D},
+ {0xC08134C657F52692, 0x4081357EF2A04A95}, {0xD29203136D770D19, 0x08FD50B1D2A615B0},
+ {0x1F59DA7C7B2AF714, 0xC2CDDC87622D1FBB}, {0x2924F771B06F8DE8, 0xB5DF318238CD550F},
+ {0x903F0211D9BF8AAF, 0x05A55707377861F5}, {0x7B3007384769D369, 0x96EB3D1D7CC71C6A},
+ {0x9B93A1A4F7A782BC, 0x33A741D50F028B0F}, {0x2CCD1E9B2C0DCE81, 0xBAEB7DB84F290AC9},
+ {0x16612972120575C3, 0x45071F95035968DF}, {0x218ADA2E4503109E, 0xCA7AB51AEBB5988E},
+ {0x74EA4A06EDEEFBF1, 0x89715AD248C279BC}, {0xE1AA2A7F003448E6, 0xD66476347E4D7D58},
+ {0x7530544A6402D506, 0x640A714062E56311}, {0x237D1990A8F183C0, 0x113FEADD91F44064},
+ {0x5F8EE72493EFBC1C, 0xB58ABB22907A0567}, {0xBC1AF6925AAB379B, 0x96ECA25580C2FDDA},
+ {0x8B72F4E14F0413A1, 0x24EF6C4091D3FA7F}, {0xF285746CA60E290B, 0x81F72AAC180DA71E},
+ {0x524712C5813827E3, 0xD1F14B81D35A2B70}, {0x840BD85CE4D53B7C, 0x2258A7B49325AC17},
+ {0x922C107BCC7F0B0A, 0x8343556D4E22C251}, {0x670AAA4CD16C52A9, 0x335B6543F186DD9D},
+ {0x8B30CDCF53C847B7, 0x985D1034D8B99C8F}, {0xCEE3FF6EDCC7A6DB, 0xF525A4B26D87F3F0},
+ {0x2893976A75BD1797, 0x2C065EA716D26777}, {0xACC00D43AF41601E, 0xB34124F7889CDFC3},
+ {0x488FD0D5F902A593, 0x1AFAA61846CC16EA}, {0xA50C5AB18739FA47, 0xCC7DC43C5DCC270D},
+ {0x8C43EF0AF21645DE, 0x22C8B2458022B953}, {0x8D5B977BC682C5F1, 0x822CBA09D3F098F4},
+ {0xAD237624F4FAC296, 0x6F02E0EDD625FD09}, {0x00220756F6B12BAC, 0x143261CECF00EED9},
+ {0xE5C847D385F2A1B2, 0x33C3235C206870E6}, {0xCFBB9DEE843EC39F, 0x419A28DC3DDE5128},
+ {0x7848B6E096D11F94, 0xC9B88B5F80043CBA}, {0x90B3EC2B3A61D6C7, 0xC7A7B42C545D4FE7},
+ {0x8C11CD615BB4237B, 0xDB2932784D6DEB69}, {0x9FFCA091C127E19B, 0x60A40E9B64FD12F5},
+ {0x07BFCCF54BD3FC4E, 0x09FAD6921CE4BE96}, {0xB5096A70360C3F04, 0xD8AABC166D9DEF94},
+ {0xD50B2B3692DBD71B, 0xC1C97285981C421A}, {0x8D0299DD5A0FA0FA, 0x40307B650C126D79},
+ {0x52D56B7EAD3CCB56, 0x21E749E1F6857B88}, {0x601F7558628F0A37, 0x134412D5EDF7F2EC},
+ {0xA6CB194F2B7B98CD, 0xE5CF1DC151C3C6A3}, {0x02582C1DC4C5A4BD, 0xFCDD4C9FC219EEC0},
+ {0x98102F9633A1C0D5, 0xF149A660AE848C67}, {0xB4C44324D7E444F1, 0x9F1C2CAA0CA72573},
+ {0x9A14039C20700B5B, 0x0015A7F28409AC8A}, {0xCE3554FAEF68B064, 0xE6FC781E96103DC3},
+ {0x883C7E997B6F3098, 0xC33B29046A277959}, {0x897093EE5A014B32, 0x7EE43ADC4AFF4278},
+ {0x9B7964C4E5544CD0, 0x1050446A48E160CF}, {0x24AB69D1B4B41D31, 0x0AB771912759372B},
+ {0x37D833ACCC04E6D9, 0x52C408873F50B0D2}, {0x40B878AA206686A8, 0x5B1899919DA9B9CA},
+ {0x64892B8EA51FC2B9, 0x31CC8067C5B748AB}, {0xD2EBD3F2D69F127E, 0x4A86C112833CD1B8},
+ {0x4332741D21E42C52, 0xC965883CC81C466C}, {0x9A5AB6548703108B, 0x62D67C31A0F71A31},
+ {0xB027B591F4CCC57D, 0xF73961A02B8A2E6A}, {0x0F34159832AF13CA, 0xD1FA563F899D89F5},
+ {0xBE8A40BA4732EA67, 0x2BAA34252BE02325}, {0xD968E534A3FCD36B, 0xBA73551A1CE418E3},
+ {0x7EF696936FD0355C, 0xAFC2CA04FB8477BF}, {0x0C2C49447F877657, 0x940F2FCB9A96864C},
+ {0xF8248324A5F22F77, 0xFF6F5F01AE1B8CC9}, {0x425E8C7B84260947, 0x7601C6117BAD4503},
+ {0x8B074442F00E86E1, 0x6D98122090066219}, {0x7003988E4394ED8F, 0x3CE7AC84686E76A9},
+ {0x721E9BD20A670BC1, 0x7B4D9DAD15F4932B}, {0xB0ABE46E43EABF56, 0xF4EA04518712C02F},
+ {0x345AA2F172F58EF0, 0x7B9C4098324B5CB8}, {0x8E0BF0E5B987FF9F, 0x5FEF802F49ABDE1D},
+ {0x7B9FEDAADB457DAF, 0x8379CE81CE8E784C}, {0xDB284E502919A93D, 0x3FFC5930FFB6B6D7},
+ {0x2B97EBF1BBF5C750, 0xBB60C2BCBD12E602}, {0x257F49AB40B2A574, 0x9DD6EC43E96A112F},
+ {0x8E7CA8270B0396BB, 0x979D6E6D7FFB1217}, {0x492ABC0DC18AD797, 0x95C6297D124D86CB},
+ {0x140C9AA1FC0678D0, 0xA63351F1E6327A23}, {0xDA93E0C8067E40F2, 0xF81B10AD32563F24},
+ {0x336146C1695F5C60, 0xF7EDD50F98B1A334}, {0xAE7D264332395FF6, 0x6EE45CB40BD2CE05},
+ {0xF8541A3A9FBF3469, 0x481B5B78ED2E063D}, {0xEE74D852029B9F37, 0x8EC957A4B7229BD7},
+ {0x59F021350C3F8FFA, 0xEE7AD150FFC4D537}, {0xBEAB9430BE6C5C38, 0xE5F4BC938015BCE0},
+ {0xA08EAAEF74E3E68B, 0x14A2E6B82A0F3E2D}, {0xB3799559158559EC, 0x641BCE7D7E3C9B51},
+ {0x4B5EA94DE9574E01, 0x2D9E866CAF54A23B}, {0x3773CE4E20A00CA7, 0xD8BDF938B5E2F7BA},
+ {0xEB09741723672653, 0x9E12C711A0C0044D}, {0x81799A10B629AC51, 0x5A2F88AA84BC3A0A},
+ {0x94B2432D4BD9F3D1, 0x57F311123A6BF7E9}, {0x6E1BA709006528BF, 0x163224DA7692C60A},
+ {0xA7DABE9B888920A6, 0xDD71DAA72F6AF0C4}, {0x2BC33371324CF635, 0x00950CDFDAC724B0},
+ {0x259927FE42094B1A, 0x0BCB4E473926612F}, {0xF1A0F9B9E9A2370A, 0x5D0EEDCFF57C2EF9},
+ {0x4E6DE0DE9F23BF6C, 0xFD67B111AA4E4EB2}, {0x3D2FD09CF907732E, 0x469FD4C1C40E0DFA},
+ {0x8CFAB846D1550A83, 0x70A973A4E2444375}, {0x1087B9FF783D8D6D, 0x2AFBDB3AA1DC7B1C},
+ {0xB918396888EA87C2, 0x162D2DA8F5812F50}, {0xBE10B12CCB4CDAF8, 0xEDE749F5B212D92F},
+ {0x125FC2879856B797, 0xC0D833B12481ADE3}, {0xA7F270B941DF1627, 0xADDB7FF3DBC4C1F4},
+ {0x8B18ECAF6D625937, 0xFF7C4CC704FDBFE6}, {0x1A06F676B086912A, 0xD27B96501A664B7E},
+ {0xF3FEFB523486F7A6, 0x7822D5BCA469C519}, {0x53E4666075771459, 0xEE75456B9D276177},
+ {0xC4B246EB550256DA, 0x1669DE5A587FB54E}, {0x8CFADDEC2AC79D13, 0x92155E3D1F3C1A8C},
+ {0x2C26F05059486FBA, 0x2932E61D116E32D6}, {0xCB47E545325816A2, 0xCCB5EA55E443503E},
+ {0xCF40A558AC9EA541, 0x821E6F9B412E1BAD}, {0x3B73B24A38FF95FA, 0xA9BB8829E928854B},
+ {0x7D4755A01B4DD8B7, 0x7D06CC8ADBEFB1AF}, {0x8D284A8EA71B23F1, 0xA028C340649AA926},
+ {0x8481A2EBB2B25660, 0x45C630E4E15C9CF3}, {0x15549B1081B4C829, 0xF656B180DF33E176},
+ {0xD2AA380604B4B5BA, 0xA0AAE0C550959992}, {0x02A2FAAFA1D35090, 0x1CB7209E2E1A8C6D},
+ {0x837E94DD026329E6, 0x7A950D4890FE8808}, {0x3615CC8CE9242CC6, 0x558521C7A2D03B0A},
+ {0x309A26A721CFB9F6, 0x89041225928C95A5}, {0x5987BD6615749515, 0x1E4B291CE2947290},
+ {0x685B0C237CBF5535, 0x1D7B49A1747A7E9B}, {0xED8504C19D7AFA2A, 0xBDB7C02C83636359},
+ {0x533D3E17690A0EF7, 0x99D90B7994B416D1}, {0xB0CA50A71FE3A9C8, 0x31470585F20018D9},
+ {0xFA2CAECF702345C8, 0x9FEC0D817C2D7EBE}, {0x9DB24CE62B4FDC3B, 0xB345C794D5EAF37A},
+ {0x6612DC421D8B88B7, 0x1AAFFCCA10F0FA8F}, {0x82D3BF3BBAD08153, 0x4991610EA0EAF8C4},
+ {0xF668E4630F21625A, 0x0BE897E2EE588AD7}, {0x35A04B184B4C33DF, 0x177483049E3E8C3A},
+ {0xA8E4500868924714, 0xC46377DFD7541D0C}, {0x6FD661FAD73F104A, 0x6AC0A8C97B71DBCC},
+ {0x2066F6C0D2E853C0, 0xD5D927A0A1D425A9}, {0xCBEA17F477D8463C, 0x759EC86B8C20D239},
+ {0x5ECBAF414BB5FAF2, 0xA8CB76808307F128}, {0x0B1E6294C1BFF26B, 0x17F5C6EE2F45EF0F},
+ {0x7B2C910AEE4154BF, 0x1A3B30B1E4E416FE}, {0x593F2A1D884987B5, 0x40C663C75D043D59},
+ {0x1E4713FEE1689F35, 0x8CD0891F03F22E41}, {0x64F4CF5D0D6B4AB8, 0x49D5E8C21ED2AA75},
+ {0xCF4F7132410DB2C1, 0xF896D020289FDB8B}, {0x5E25AADE7AEB6A2A, 0x6FE29B5AA16AEF09},
+ {0xD822F6CC458A1282, 0xD1C7391BFA18BF86}, {0x846A844BDD6E68DC, 0x25E5A9798206D05B},
+ {0xEFC6355620F53456, 0xD248C400B83ADD8E}, {0xB9E40E148AF3510D, 0x0F6CDD26B4D14636},
+ {0x908B2DC5201FD845, 0xB1B16245B65FC6FD}, {0xB57569BF8E31C661, 0x17CC749D69C503F5},
+ {0xB68D2FD440DC2B68, 0x6CF2DFCB517B5CF1}, {0xED721FF1E0279776, 0xDEB1C4DD27EDDAD5},
+ {0x898157937DE7A7F5, 0x55AE502A601EC269}, {0x351E5780B8F705F2, 0xF17EC17C881E8471},
+ {0x44E5DF19EFF1F67F, 0x82A6CD0E7CC19699}, {0xB644A7192DF3797A, 0x54B93B44D737CDAC},
+ {0x628C2727C7F09153, 0x097C07D2A277E115}, {0xE3D46698BA7FA5F8, 0xEF9E6FC98B543792},
+ {0x21A39481FDB868BC, 0xA39C00212A98C6B5}, {0xC7EBB269341ED9A7, 0xAC2556AFAE8C3948},
+ {0x63BC25F910A8F18B, 0xD6FEF41165CEEDB3}, {0x2DE3AE863AEE5D09, 0x1E22066A16C66E74},
+ {0x49B08487197B27AE, 0x536620DD0A75E6C4}, {0x39CCD061769C6D14, 0x2BA327C4D5FB57E9},
+ {0x2EC1FA1DCEED6160, 0x023AABFC8F90F068}, {0xABF1A5C001300EBE, 0xD197E91925542A4A},
+ {0xF89817E95113462C, 0xAFA0810308964E68}, {0xFF45D25BC80C63D5, 0xBF73C1F2A90F77F3},
+ {0x69A7F957B719FA21, 0x749D15DBF333D27E}, {0x3AB273D2EC62B276, 0x589442DEEF781C43},
+ {0x7D8F16DECE64F830, 0x787B0C73F10CB438}, {0xE1E0C953F6121D64, 0x219F00B9889DD8B2},
+ {0xFB73BF65E8945958, 0x52905056CB1696CA}, {0xD9E14754DB73FE85, 0xF9DAB72EBFFFD3C2},
+ {0x403F4056B9A73B67, 0xAC9AE3C62C791568}, {0xA996ACF87A028237, 0x146BF53D92524249},
+ {0x7E0C9BD3CAF09054, 0x436015F9CAB19A3C}, {0x99E0F2A68F14234F, 0xDFB343088437520C},
+ {0xAD2BB2FC0A3DB7B8, 0x0AC84CF5547D99EA}, {0xF88B6B7E66C9B77D, 0x1BAFE0F81EBCD9F6},
+ {0x76B7CB3D5433B3A9, 0xE4D4D513C84545C8}, {0xBDD37332B040519D, 0x8BF70DA0F6C6ED39},
+ {0x94FCBDC9F0B86507, 0xABDA0338A394283A}, {0xCE07C096EBAB386C, 0x861F7B2E3FDC9326},
+ {0xD2CAAE252099B660, 0x58246E01DAFAE0D2}, {0x0122DBA6ED7A8A0B, 0xEC3BEDFC1E7A45B1},
+ {0xAE024BB3580527ED, 0xF7039E700AD67D4E}, {0x5C4F0ABEDD490009, 0x4D2BDC01B8CAC0A2},
+ {0x7781A52E12D25047, 0x99A0DC8BA3AF5954}, {0x46BCDEAE24E6F207, 0x182E4D3AEFF48106},
+ {0xADB3D3B070523051, 0x0DA3F582B513D082}, {0x04B465505A1A1B1A, 0x758B21E4A3E2C80A},
+ {0x3323F7DBF8652228, 0x8A01B1EB22C2727A}, {0x75A0FF7E0C405906, 0x182B0A4A43AEFDE9},
+ {0xF0BF52C341572906, 0x8ED23DD20C0653DB}, {0xDB42CED4A110DDC3, 0x7752E6E56BA4B234},
+ {0x7AD2574E6BD85390, 0x2A021DD3FB0E77C2}, {0xA691BE5C5B588A5A, 0x8A5A6193476E6869},
+ {0x918BFFD08FB6BB83, 0xEF8EBEDF3661AD15}, {0x3191BE6E08189AAD, 0x4A7F3DFAB2734566},
+ {0x64E1ED4154CE3847, 0x84C698090E9E4FE2}, {0xC3A297118E45D72A, 0xF91B693DC5CED1B0},
+ {0x0A03DAAC7449A786, 0x8931690FE7670CFD}, {0xFF6263785FCD64F6, 0x4B9B1042B91A478C},
+ {0x0FC017702C94CC1E, 0x20A48A5DB03690D4}, {0xF4AB3D5BAF805A1C, 0xDBCDE30C80D8A64A},
+ {0xCFE89B54F8E97439, 0x1666F6181819D772}, {0x5E25620F5D82F8CE, 0xC53E6B6A4533F432},
+ {0xDF43E0E88226DE12, 0xF70D2ED32C225C1C}, {0x934D43FDA9D9ED82, 0x33FC58E9DF00D950},
+ {0xFDD1A07DE0F7DB02, 0x81989B1F136070C0}, {0x6B5E890D2D7F1AFC, 0x170BF27DB5BA31FB},
+ {0x75673CFA7FFEE327, 0xC3CAAB12374B5919}, {0x5CEDB1057B6FF58D, 0xBEE7BDDF7A2966D2},
+ {0x3746C68F7E26DEF0, 0x181AC4A33BC67B62}, {0x41EEDC825E812BCB, 0xD6658C6E4F12F1EC},
+ {0x70871EFCBC7E5521, 0xF4F2BE5F1F735DBD}, {0xD37BABCA0E43529A, 0x32E721289F1BFCA9},
+ {0xF28BBB0FC5B662F1, 0x607EEEDA205B191F}, {0x44CF3692A373D87F, 0x0C7F00F11AED37EE},
+ {0x61750F383FDC27AD, 0x9436E2987008D27D}, {0x5E4C7CBD6C6B5A05, 0x14617EEEE3C13A4D},
+ {0xD3BDE361241B197C, 0x1050757D579EA91A}, {0xB7333031D618B92A, 0xFA3F7487F9217C91},
+ {0x3FE38EA584355368, 0x92D8C570FDB5600B}, {0xF92625EAF77E8981, 0x4E359FC305013F72},
+ {0x011287A5C4031E3F, 0x51A493EC57821AA9}, {0xE00AD45C0E1F7849, 0x88C6A080502C820A},
+ {0x89DFF76246F65EDC, 0xEC1F5DAB24056FDB}, {0x4B74507C55F20011, 0xD02BB92EBCBFDF0E},
+ {0xFBA11D5CDAD57B2E, 0x06F28E6524991A75}, {0xD8690485C176BB0F, 0x01537F092412DD4A},
+ {0xA3CE47EDEEE4E839, 0x71B7C9B882B58AA2}, {0xF98131D2040B6316, 0xBBB98FBEF8E37110},
+ {0x3751D6C9AEB0EB16, 0x0798A7F09E149D42}, {0x885265A26E33DF78, 0x05C7F02BF0556200},
+ {0x06ADF9BE63A2844D, 0xDB5DB3CEA11CBA09}, {0x8BB1797D9423702F, 0x7168CF39255DB823},
+ {0x404FE6961AD150CE, 0x818088DB31ED7F3E}, {0x01E6D50CA2DC1E1F, 0x8EA0D70D443C7082},
+ {0xF9EB592F4B93867C, 0x75BE9F36868AB308}, {0xF023D20032572642, 0x6F5C2E54CEED2587},
+ {0xA633793732FE9D9A, 0x4910DAB98934460C}, {0xF24CD00AAB9967FD, 0x8726988EB6349B79},
+ {0xCB5A2CB3B3D7E76C, 0x65E905CFA01263DC}, {0x097DBBEDAD3EF63D, 0x1B758D8CD789839C},
+ {0xEB24BBB4558A2B0F, 0xEA3840AEC80282AF}, {0xE65D9C846724194C, 0xE7AC2B7872B63BCE},
+ {0x1EF8C16358088416, 0xAFD6115A217C5FE0}, {0xF22E627A2CBFF809, 0x5981CC547EF7F972},
+ {0xE518DD19BCF59CD9, 0xA1DB3CDF2A70F221}, {0x77FD95F903B603EE, 0xC7EF7B488D0E85C3},
+ {0x6D17A997BCB5EFB9, 0x5C08F202534B0D63}, {0x8D6F96B4F98DE1A3, 0xAE1DA42D3536F256},
+ {0xC414E2276B0BB356, 0x2155215395A99869}, {0x9EE663956AE48D7F, 0x5993221DE7AC52E8},
+ {0xFA043ACDF826D070, 0x4747CC7A6AA0A02C}, {0x328830A2FB7F6330, 0x1F8B8C7E53C4A46A},
+ {0xA0F4D4AFC48CEBA8, 0x47DFCD54695D3655}, {0x44D43CE7BC8388B5, 0x5FDA10B947C396C8},
+ {0x94A49A6E9A0EFB2E, 0xF624AD724FD82679}, {0x068328C800670FF8, 0x491C75B873318FCD},
+ {0x42795FE89EA3244F, 0xF599282688159A2A}, {0x5541A95D50311960, 0x16AE9E97DE957CE9},
+ {0x5212E1B9D8782CBD, 0x037E510C87BE716A}, {0x02702A5F060BF127, 0x0E7A01EF32C80404},
+ {0xE7D7310FC1CCD6EB, 0x8D47802BD6B33457}, {0x999652760EE70CB8, 0x9F5F3141618F3347},
+ {0x4FDE2F733A55BC4D, 0xD18104F23D1A037E}, {0x424A14D77E244B86, 0x9647A2BF251CA1BF},
+ {0x8EF814441170D67A, 0x50B7344E2B53378F}, {0x6C0E384C25E14EE0, 0x3630B3E2F01D8133},
+ {0x4A21C6429206F17B, 0x7047730FFFB07BC5}, {0xB9620E59FD0833AE, 0x01DDBCFE53CB14BC},
+ {0xAD98A0B5870E0465, 0x5CB3A91E1393469A}, {0x7F6567C24D7ADCC2, 0x673306DD676BD851},
+ {0x04C57D761609FFB6, 0xDA9AD44F20F871B0}, {0xD3ED63CDE2A5C241, 0x0115734BB13DB7D2},
+ {0x5C0C91DA0BFF950E, 0x93EA3135F4261227}, {0xA2B7D79807D68EDE, 0x4265208B1302A727},
+ {0xD665FE9892ED94C9, 0xBF6861A9CECB98E2}, {0x6CACC903F55CC45A, 0xDC3AA470E88DD546},
+ {0xF7D8EDE41971210E, 0xEB86415368C51E21}, {0x2B224E2CEA8E9FA5, 0xA97E326445276AE5},
+ {0x1235570977EAF2F8, 0x840CBD35992652FF}, {0x17BE70D89A2EEAC6, 0x169B5F6798087C45},
+ {0x84CE878C2682BDBB, 0x37993A3E0CA3F44C}, {0x82E1AB70620BE068, 0x35DD568ECFDCA7CA},
+ {0x34D07CDC96DBEBB6, 0xBA84E945D28F27F2}, {0x6EC512B2FEA7DB72, 0x3C47ABD3F39C2326},
+ {0x3F1A67A0EC27AAE6, 0x4A420ABE73BC4F1E}, {0x1662CBFD441E6A45, 0x49C7D958996037EA},
+ {0x245002FE03D40FAE, 0x35F2D9244E4A9428}, {0xFF19DA26ACD7778B, 0x8D6C65E4C372B759},
+ {0x8BD732BF6E7994DC, 0x5F97262969F936AC}, {0x24E53277846948B4, 0x53696A1F1424E28D},
+ {0x9395D73BED639DFA, 0x022CF19F66354F6A}, {0x4C2FB10E3C03B8BE, 0x55EB88B1366ADA07},
+ {0x316E1ED5BB07BC46, 0x77EC6799E5174724}, {0xAD815FC494618651, 0xCB1E594FD4625BF8},
+ {0x579D823DB3B8C456, 0x93BA26DFFE406D01}, {0x0DE249D51E557546, 0xF028683E3BB399F3},
+ {0x570B88708BCFF3B6, 0x5FEDDA6DB92CC75D}, {0x71CEE9D4DF030461, 0xECA4194E8081B51A},
+ {0x140CA9258B833752, 0xD3272F1A34FC016B}, {0xD2AB635B6C264BBA, 0xC6A803804EA24D14},
+ {0xBE43BE179BF75119, 0x620AA0387C2CC560}, {0x58806CAE42478753, 0x6AEF41106325E062},
+ {0xE0F015A230B709F9, 0x52376BB5426FDA0E}, {0x49BD6C82ACB93974, 0xD724E1661A7049AC},
+ {0x6F2853890C810C91, 0x8DE51E610F07C61D}, {0x9D061D877217E65F, 0xB59C233A666DC203},
+ {0xB63AFA4EF2550F02, 0x9A1D65BC3BC2C282}, {0xB7AE90236597CF7A, 0x80A5CCE94E2A80FD},
+ {0x9545EB49526C78FC, 0x8110A25D8EAC1072}, {0xC650CDD02E2DB127, 0x12C00A96F83C2038},
+ {0xE9BB784B540BD14D, 0xD3A63F4462E754AD}, {0x84D3A50C0087F7A9, 0x016229D683115153},
+ {0x7CA82B3F894753F1, 0xE969FD6A3EC51A7A}, {0x28EF7FF808FAC069, 0xE4233052684A1DBA},
+ {0x2F7B124146649EB7, 0x767717F55899EFB5}, {0xAA728F8EDB16D8DA, 0x45F8D736FABC5286},
+ {0x601EDC0E61071723, 0xF2C09376222BEF98}, {0xB6AF67AF9EEF04DD, 0x05E3652D61B2D291},
+ {0x01AA0AF8EA2C9670, 0x5AFE1FAD4CA7B78D}, {0x8AA0EEF9AD5B8028, 0x4A7654BE17A88805},
+ {0xABC9342E4C88F2C4, 0xA7314B006C015FD1}, {0x63187B717877A008, 0xC9F661DA157F927D},
+ {0x1E5F7892CEC1C9CE, 0x743CAFFBD368B751}, {0x6930124CB1654DC1, 0x6A0C75F0F060568B},
+ {0xDC59B720E8E4BF91, 0x41D0AAB2DFC17CD2}, {0xE4D4C860A7BF94B1, 0x32710BBC93668C18},
+ {0x6DDA08B6FF24A785, 0xB0E103ED5905CCC4}, {0x7537EB6F99F68415, 0xAC0D58D23DA43CC0},
+ {0x9884A1B76F52C293, 0x389EE87C40380A88}, {0x851D84777DD44E77, 0x177E1101BCB6DBC6},
+ {0x46BA1C6C04D56120, 0xAA784017D9D34B56}, {0x0AB6203C6F2FAF50, 0x037310CD4B84AF46},
+ {0xA2B521E758068620, 0xD6674BF3D8FA8C32}, {0x99D3F116158B80E8, 0xDCCB6E34408A83F2},
+ {0xF422BA0D1640F6CA, 0xEF45B0CFE594C6BE}, {0x982643315D27532B, 0x668A77747B129B64},
+ {0x85B3D3522C896A1E, 0x571B3E6AC6DBD5E9}, {0x41B611935B14A7BC, 0x6276F152D96C684F},
+ {0xE7E372E18E0893E3, 0xE8DEE52034D207DC}, {0xDCB5727CD85B8100, 0x5B60C189E324B855},
+ {0xEAD6B82FD657D3DF, 0x5FF4AB2D48B5F287}, {0x3709D357D373BFF7, 0x0B9D437302652B0F},
+ {0x379C41D1D57F0E1D, 0x4C8618CC04A34904}, {0x6FC08698437DC70D, 0xB062C30C50DCBE64},
+ {0x81BCC24D1D5A9003, 0x2FD2325D47E105C5}, {0x6EAEEB42213F4461, 0xA35EDC45BB4CC840},
+ {0x888298A71278CEF3, 0xF254DDE01160DAC3}, {0x7D69D17F1162AFA2, 0x80429EF1AD6E7391},
+ {0x25BCC47AF28C4834, 0x0AC577339CD5AC35}, {0x3775C42B1D2496BB, 0x95B3A43022F168B6},
+ {0x25CFB5447C0534B6, 0x20417C6BD4A5C0DC}, {0xA1D46571A4099A17, 0xDCFCAA5CEED05DEA},
+ {0xA1F01E0AD678E401, 0x450FD96C2F90D4D5}, {0xE77F8BF24317B53B, 0xFFD5227E71E82546},
+ {0x98D5690E169617BE, 0x763DD50673187E4E}, {0xBEB86CF7078171DE, 0x2E2B5C81057F508C},
+ {0x2F0F3DDA35E2033B, 0xA21067C2CB310C34}, {0xEF3B9AD2B94ACEA2, 0xBC75DB290C2CFC0A},
+ {0x030285FF77FE7CB1, 0x79229E05C8ED94B1}, {0xDF1E61F9AF250362, 0x189E87E05960AB04},
+ {0x794AE582166DEF07, 0xE07C0D9A11028D57}, {0x8CBC798A6C05147D, 0x53E4AA08FD8748B0},
+ {0xF345516CEF0281F9, 0x45EA92C169C92122}, {0xB7B12A7314A8E3D1, 0xC0AC8635983AAECB},
+ {0xEA52A84CD6C29D0B, 0x0281D8F27D875389}, {0x32A560742A55CD84, 0x4357DE2C41736690},
+ {0xF810E09528F9D2BD, 0xB255D535218794F1}, {0x131E6415C992DB7C, 0x2FC9C281F8648713},
+ {0xAA5CB9084F652453, 0x9D3ADDDE70BFF161}, {0x6272A6D70DBBE419, 0x2C96E69265332FFB},
+ {0x183DFFF0B3CBD42C, 0x318D4DA0A5684197}, {0xF0FA3120A583EA82, 0x3E7C53D38AB8B1E5},
+ {0x6D64A50BAC3D64B8, 0xE030CE126F579D1C}, {0x288421ECA3845EA5, 0x9FD17DEC7FE9E415},
+ {0x9CE74FB43D1D6291, 0x3069EBA2732FEF56}, {0xAC6E70F7E7A1E9B6, 0xF6EF8F760C9C459A},
+ {0x6A50D8EAC84621EB, 0x74691FE325361A7E}, {0x9D4B0AD47E36FE6D, 0xA949FE614E98148F},
+ {0x14B2EA8919336440, 0xF443C44B48F7C286}, {0x19288F4C388ED1EA, 0x678B598181803901},
+ {0x30A22FBBA00B94D0, 0xD3B010E042FD4D04}, {0x6B4ED29E8E181310, 0x6649AB0B7D4EB812},
+ {0x5071D718B0338573, 0x102FB85133DB3EE1}, {0xAFE03E7211F45650, 0x7ED097027A666BBA},
+ {0x5D84C22F4A9F4BC1, 0x5286E572039411A2}, {0xA5C61965CA025962, 0x47ECBE791232054F},
+ {0x36F6FFBAD13DA0F3, 0x6E3C5F6528DF3DAE}, {0x5064F762EE01D9C1, 0x8B679A3E556CBD6B},
+ {0xEE71C2976D751045, 0x431B0A0427B2A6F1}, {0xEEEA21E10B4D28DE, 0x11F8104FE0CB5207},
+ {0xD3C24C0FB778558C, 0x0EB5BD104F76A58E}, {0xB9D701BEA4EB1BB0, 0xC992181C0517BD21},
+ {0x51BF297408AD2AAA, 0x7D557EE4F349287A}, {0x639C18ECC32A54A2, 0x4D13E099E507CEA0},
+ {0x987431F13B4DBC5A, 0xF248E7437D8F28C8}, {0x395C2CDD9F3C4620, 0x2893654EE3C745E3},
+ {0x5CBA80677B153FB8, 0xC441FECE005F092B}, {0x3D8843E5C51166A0, 0x23F24A6799ED2ECA},
+ {0x1C38AEB813BD1987, 0x6ABE87BB25436114}, {0x957B6E3749A26630, 0x381503FAC19374B4},
+ {0xD3BFAB4E9A175F56, 0x5E9791239FC342D1}, {0xCA0F35F4E02CAC81, 0x0A9BBA9EC740CA0F},
+ {0xB7905083F70ED7D1, 0x7F686130554690D3}, {0xDA61BF80A6279073, 0x1C441C18B148F61B},
+ {0xA3805475EE150A30, 0x2C7D8E0EE5993E04}, {0x67892DBB6E1A92AB, 0xE1AE4E479074ACE2},
+ {0x7AF77244552C31FF, 0xE66521B7A1A7123D}, {0xB238488A6B19D1F5, 0xC0842ADE07210A8D},
+ {0xE2C4638E2F6C7844, 0xE097C2F6BEDF0989}, {0xE2EB3B2E1876306C, 0xECF3E3C4183E93C5},
+ {0x51CE7A0D3C41E991, 0xA5645A5432512888}, {0xC06147268A8C2FEF, 0x3F5602990F61E38C},
+ {0xAF112529BD4EF45A, 0x6C22894BE24017B1}, {0x76939F76B1201679, 0xD6776604E315D2F8},
+ {0xAA335350D835EF10, 0xA5F6112DF1CFF47F}, {0x00F05D017B1C59A5, 0x570833D7CC785D9B},
+ {0xDECFA55049FAA651, 0x95A185C026F5B717}, {0x923DD2186B796FBE, 0x023BF280AEF0E0AC},
+ {0x6D36E13F15F334E2, 0xAE5446FBD845A2CA}, {0xC395A39C705C384C, 0xAE5D14AF7CE44EF5},
+ {0x56EE5E8D10C37E53, 0x098422D14B08F9BE}, {0x10E0685385463E84, 0xC6D4DF4ABC8E45A2},
+ {0xBC63F3EEC93FEB7B, 0x6D35C16174272A00}, {0x896A990292602C63, 0xEADB4F2B7BF20942},
+ {0xED3EF2637710A8B9, 0x0BC5255BE4A10811}, {0x9F118E5665A42B3B, 0xDBE0A41FF48E806E},
+ {0xEFD488F8190450EC, 0x15D47A9466850789}, {0x1B8DE94D60BF8D36, 0x07F54386278F4A6D},
+ {0x534C44A79E3F1FD2, 0x80E551BF0E867139}, {0x786877E1E598B952, 0x0DF9871E71860B97},
+ {0x3B496A25AD0FFC61, 0x06053064DBEC30A6}, {0x19F1AF79D917B772, 0x08CC353A43CCEA5E},
+ {0xA87B7627C537E923, 0xFB1B1485A4EA30A3}, {0x09AE6369C94A1750, 0x3CC0E60234EEC216},
+ {0x5592EAB857FDF853, 0x950A7B2947040F33}, {0x892D9672AF7A3E3A, 0xA3341BBC58057B0F},
+ {0xC4E33C6E0EB0940E, 0x9AD4AFAEAC6EA6C8}, {0xBAA318D35E94A2D4, 0x58B3636428486788},
+ {0xB878DDAEB62DB51E, 0xAC1EFD9FA8950654}, {0xA53EA4CDA9239651, 0x3445DC334FEED82F},
+ {0xCA7A6B2E48AB0905, 0xA7AB714A0D5E4252}, {0x20CDF5150C22F76B, 0x9EA89A032835F1AC},
+ {0xFC7458526E213F80, 0x426323185D57D8A6}, {0x8EF70B91C69FBCE2, 0xE8AF8C510576B7B8},
+ {0x894DCAF2E4137996, 0xB8569C1B85413A72}, {0x3127A6BC887FD7A0, 0x2DF1E2B9E15DB7E9},
+ {0x910589FC7CE2822B, 0x9EADE974479A2842}, {0x3CC27606F155DF80, 0xC94A85C8A4D5CDA3},
+ {0xA3B9F42D9D25A322, 0x4C8162371C6EBAE2}, {0xFA3B34E8B17481A7, 0xB02F99CF221B87EC},
+ {0xA4C45353327E8BD1, 0x9063621F0ADDC38D}, {0x1B1EF9CAF4143D5E, 0xF6E5548916BC6715},
+ {0x138AD6EAC39B8B07, 0xB9846D9AD960D9A3}, {0x1BE8D1B1B868A9EF, 0x74AFF5C9EB42D6D2},
+ {0xE69290EA39DD7053, 0x7482A50E782C3E46}, {0x2229467391F37FF3, 0xA47995FAAB48E221},
+ {0x4835C7297B1B9C2C, 0x78D8A54BAFB72507}, {0x4953EF6D58490755, 0xAA9E1101E3CA46A0},
+ {0xD2FB55B7BE1EF56E, 0x530C9DBF35D77ACA}, {0x3C08140E8DBE7E10, 0xC480F661397BF6CE},
+ {0x4191E6145C4A03EE, 0x1F59AD0E41676C22}, {0xFCFA46B16EBDDE44, 0x8984A02F010D7F65},
+ {0x7691C3DE968269B4, 0x59F069FDEEF4D74E}, {0x12F482E55E03FA95, 0xF8040C66BFBECDF2},
+ {0x0CFE64FA9428D60C, 0xEE9C53E982346025}, {0x0C1EDCD8E1989960, 0x577C406E1D27A33A},
+ {0x0E1F4502B9442591, 0x52F89896A94DE910}, {0xDF2A557EA29C8135, 0xC705C8B12F51EC43},
+ {0x8A06953FE0B7CDEA, 0x4D6EAE941F80347C}, {0x9C2E13AE1EAA9A78, 0x0188C8CE84948F5D},
+ {0xC9617D0D062DF31A, 0x05B19EF7C50BDCCA}, {0x399A7C372AEEA152, 0x1E10FA3C0454BABF},
+ {0x5F9A470FF0ED9A84, 0x2F50978692BB2017}, {0x9E110037C8AA489D, 0x88F6D03E6000ABB6},
+ {0x33E30CA7CB7B3D31, 0xB2FD2F761E9AC517}, {0xF357D27C1C58BC8D, 0x40F42CFF79F8714A},
+ {0x6D718EE9CCEDABD9, 0x06D359372CDEE5C8}, {0x93F8269213DC46F0, 0xF31D04AA5BE30FB5},
+ {0x6717275EE1C8EE57, 0xFD094F29AA91C768}, {0xB0D9EB52A00C9037, 0xFB7B478820004CD1},
+ {0x13A2D891E2CF1650, 0xB922406764AF0A68}, {0x275F58CB77ADE105, 0x65BC8D004CF5E19B},
+ {0x2E66683DD19E2BD7, 0xCA0F4BC6764FBEF6}, {0x1765B5C33AA3612B, 0x088A7FEE58A5D74C},
+ {0xF13B887FC9CA5910, 0xA62E033D7E97E948}, {0x28804E1112543F7B, 0x0629F1755597B9AC},
+ {0x69A99518637D9154, 0x2D609756860D2285}, {0xB94C52AFFD425985, 0xADB78D8CB4FD975F},
+ {0x4B65A47254704414, 0x3227CE0820A671B3}, {0x8F296C6FD27DD4D5, 0xBB7B4EA56025BCA3},
+ {0x638E5170E120FEE5, 0x64C784B15E80F04D}, {0x097447AC2F3CAF04, 0x1492405BC5CD580B},
+ {0x83956662DF98378F, 0x7A964AA54283BA3B}, {0x4441A7790B1B3E94, 0x84E4AC5CC774B877},
+ {0x5342126D498A1BC4, 0x219E852A7BBDAA5C}, {0x086DAA6C6D1B1183, 0x20C6ED472C08B782},
+ {0xCAA7FBF3536EC20D, 0xE0EA135DBB2BB361}, {0x39D83BE5B4D386E4, 0x4F952105F489BC25},
+ {0x5D8AD22EC9FF754B, 0xD6DA50AB3119E88A}, {0xF3DF8AF389536338, 0xAF2AF88C5AAD8FF8},
+ {0x4765FB26BE163A27, 0xA01CCA0C29DFB440}, {0x4C8D1AEA69F68F1E, 0x091F1058CBC036A8},
+ {0x240DF34206A3888F, 0xF49A83697164A358}, {0x76E7D4A59A47D1AE, 0xCC37CEC93205C158},
+ {0x592A2122385E3372, 0xBCFFF6BDA083A047}, {0xE60602BF31BE7450, 0xB5E499D8860763DD},
+ {0x85FEA208950807DD, 0xB453D93034683A8B}, {0x50C63B70DE19C44B, 0x12202E0C48E5A4A2},
+ {0x7F58B9797B1ACEF6, 0x6586164783986490}, {0x4BEF99BC0697A9A6, 0xFE95067941241DC1},
+ {0x7E04C61F95BBEDC8, 0xBE497A7E935806B3}, {0x948E99519E622A51, 0x61F5F9077C276D68},
+ {0x9CDBD48DAF7E2B64, 0xB7C5CB4B3FC2F6EB}, {0x7254E21597494965, 0x0F9289517084D62A},
+ {0xD0F3D97457304FEA, 0x0771916DC872845E}, {0xD40A7ADE7AB63E57, 0x6C57F14C5572C8CE},
+ {0x1B72B3D11A0BC632, 0x2D762CF1C786FFFB}, {0xEFBCFDE07DE92291, 0x41D030CED7A9C175},
+ {0x78E77A534BB72D27, 0xED4358B25B64692E}, {0xA39B5EEBD8A9CFD3, 0xFE5336B8375CA097},
+ {0xC076AA729E135807, 0x82AEECDF7E400EE6}, {0xCFCBB748F3EDCE6E, 0x676E03F42ADA6CAD},
+ {0x70574FAB6D9AAD92, 0x5AF17EFC77C907A2}, {0x0F473AC48DBCBC06, 0x54736A7D8CC2951F},
+ {0x23F3C4FB28CE916C, 0x56197002B193E0AC}, {0xB9DA1ED03ADA1CBF, 0xBA7E16CE5CEB3065},
+ {0xE5852A1393E48CFD, 0x65EF06B539559887}, {0xAA65DF13FA2FFF23, 0xA3FD8106CE84B367},
+ {0x5627E3DEA16C1122, 0x349055E532B4B6AF}, {0x4204854C536D07A0, 0xAFD59E79F994E0C9},
+ {0xA0ABC3940C54AF28, 0xA7F61EC1A445709B}, {0x313AA06CD452BBAB, 0x2CD41CE4B06216DF},
+ {0xC7D22DFEF7382738, 0x1078C07C66CE322F}, {0x096AD3D3644E0A75, 0x906ED721C18A4794},
+ {0x1EE6BF4AB34ACF01, 0xDE51A463ECAB26B1}, {0x8C39E79CDF7A9E9E, 0xD8FB4AC6E75A9318},
+ {0x8401E1665EC7A7FC, 0x2D697972A1F18A51}, {0xBC18300AB0E3FED7, 0xC6D56E0AAAD00464},
+ {0xD9452CC3FAAC1067, 0x156ECC2B0EAF8DBB}, {0x89CEB0C1431B9DDA, 0x2B58C120097EECED},
+ {0xF548D84C70A86A99, 0x4F7451EE9B71E8B2}, {0x01C3A33D84FA2598, 0xBA600F968D43F5A4},
+ {0xC54D09571905DBF4, 0x08404EFE2649008B}, {0x49514727040DFFC1, 0x45A62455AE38C494},
+ {0xE9C904B9CF3EC54D, 0x232730A88B270D91}, {0xE8B5A0F2492EACE8, 0x54EFCC7833A5060A},
+ {0xE13CE3C8BCCD3713, 0x77930CA8D1ACA8E3}, {0x82EA8CAECEC944A0, 0x820FF841688E2B3F},
+ {0x51170AA7AB88A668, 0xAEAE2F878B0EA4CB}, {0xE14F7733AE65AA15, 0x6D197152E75305F9},
+ {0xBFEBD9DDD6FC3F18, 0xD6E64801C151302E}, {0x4448BA9A9DB24FFD, 0xF923585DBA7D3D4A},
+ {0x22CCEFCA423610C9, 0xD1E887F0648ECF21}, {0xC22D3E1E72139ADF, 0x84B56C0CDC96B9FE},
+ {0x2E79C72BAF97C8A0, 0x9220CCAAFC436829}, {0x84210FECBC642A76, 0x3020F15E6E19739C},
+ {0xD3F224AB2DBEDE18, 0x2BC0433BCE527277}, {0x69300D92C3890109, 0xC92623C48381521B},
+ {0xC134092898EE0704, 0xC76775666D1E3B93}, {0xE343ED2D2600BD10, 0x3FE3D9EB9C08C3B3},
+ {0x7C9D9130CD157F6C, 0x0A0131F5EB2E8FA1}, {0xCD20E6BED12B8263, 0x466CFBABCFE500A1},
+ {0x0F6E8FD093696462, 0xBA61824C17AE2B2F}, {0x16C83F8829C24D6A, 0x642BCB7DAF270509},
+ {0x26537C004FA94768, 0x99C9BF395982F13C}, {0x9A7A6648989881C4, 0xBDE4DDC7FC8CF22F},
+ {0xFA825ECF83C07D38, 0x1B268D7CDC7C5D9A}, {0x545CBE5F6C0C9B8D, 0x65E0F02E3B46B520},
+ {0x542D5760DBE5286F, 0x64D9EF52C68540B7}, {0xD7FD7BE63A4A7829, 0xB3A1262D6AF1F994},
+ {0xDD91EB76356F5FC7, 0xB8CABBC0D29BA8E1}, {0x4C0BCAAAED028CA4, 0x9BB5AE04261188D2},
+ {0x8F00939540C1995F, 0xBF7873E0295D1CFD}, {0xA79AA25C19CC168A, 0x696E082F72E699EE},
+ {0x3662A0B99A2C8964, 0xC453B206A3FA4634}, {0xBB752534DC0455F6, 0x463503331E98478B},
+ {0x81EF7A85D7A212F5, 0x6242805CBBDADA17}, {0x65CD73A134F9BDF4, 0x841C1E149F716F57},
+ {0x3D8F63C235197EA5, 0x66A20BFE1AACFFF5}, {0xA66E708EC74A6923, 0x901C92FDC1AA01FA},
+ {0x940C8748533826CF, 0xD2FF9E2489C9F9FD}, {0x43B3F1A5942F39F8, 0x22824ABA81DCFC82},
+ {0x204C77BC70A6AC84, 0xCC870857AC7170FA}, {0xAEA70998EFB2C007, 0x1B029CB443E7BB30},
+ {0x5D3DF742FE612C97, 0x8579AB08184E1D5A}, {0x55FE2987A0E9D980, 0x97C2B5C53C69204A},
+ {0x1244AB7217AA8F79, 0x76797A66223FCF3F}, {0x2C3E99C7D5E2CDB6, 0x228E91472E8F1EA4},
+ {0xF6011A3F9E95F954, 0x50EDFC93DF69EBE2}, {0x02B07030317A1348, 0xB237CE3D621D0D43},
+ {0x2C3720159E88843D, 0x0DF13359B7B09C11}, {0xEB7F6B36289B90F7, 0xADAF1628EFFD092B},
+ {0x0AB43E272DEE9C45, 0x3BAA6D2B29E69867}, {0x76A172F0EFDED544, 0x40FC9D1334C93F4C},
+ {0x350D2B0647FF5D47, 0xDE9017D57EC237B4}, {0xB7D0162343769B1E, 0xBB88E0840E556CFB},
+ {0x7A18F09E9FBA2AA8, 0xFDEB3BF5F6862B14}, {0xB8A9E5FBAFDF448B, 0x3C347FBCC14FD43C},
+ {0x030E9A82D9F55B67, 0x25E46C6A7A88C83F}, {0x352E859C29A30DB5, 0xAA28B035ABBD2415},
+ {0x85BA1DBFDC90DE37, 0x09C325AE42EB2ACA}, {0x5AFC522464F52031, 0xC94D6EC48E64D557},
+ {0xC8744BE93001E0C1, 0xD996145DE3BEF536}, {0xEF4CC7A1AE874475, 0xC613380C3646C706},
+ {0x206615F72A9AE6B3, 0xAFF7314DD5D8DD9D}, {0xF59D95787D292C2C, 0xDD1DFF7CE67D706C},
+ {0x525BEBAA4CD954AD, 0xB4FA0C5FDC0A74EE}, {0x7B10A27477C2C87F, 0x01EB435E4FF1397E},
+ {0xCC227F559D3F50FA, 0x6D52C9CB20CE980F}, {0x6FB51F90F5C3D30C, 0x049103927AFA2997},
+ {0x1E0852874B00773B, 0xC992D3774013FFCD}, {0xC8B8C037A1BFE5A8, 0xA0B808D7D6EDDE72},
+ {0xA285C08FCFF68B9B, 0x60A1C28E57A0C17E}, {0x7F79CAC9C7EE3829, 0xB19FAE251B50C9B4},
+ {0xF527E054B2C63A68, 0xD43B7BACD4D7B3D0}, {0x258457794428D567, 0x71E31EB889CDB490},
+ {0x0EE4E02659CE657B, 0xE25DD09CF7354C8B}, {0x6BD295878CB0D947, 0x49CFD4EF8B43F1CA},
+ {0x11E5D63F6E66230C, 0xE8A4205C4B42D3E6}, {0x2318EB43020D8E0A, 0x83CF2839221D8E92},
+ {0xA23E2C864975C3B1, 0x731E828C45C5C469}, {0xA534DCF62CDE7FF1, 0x639FDF991EF0CC91},
+ {0xA371B256A6EBDAB3, 0xA22D3B86611E8717}, {0xB4BA0D2C03D823C0, 0xBF7EE4F8CAB110EA},
+ {0xC13E6251DFC71473, 0x6ADFF8AA109D25C5}, {0x412E182F07F0FC31, 0x52C3CD60594CCA6B},
+ {0x84E24E632EAAA8E6, 0x2B6BA72755033D9C}, {0x2B9CC12BE3ED9495, 0x70BA797B2C2E4077},
+ {0xC73EE2BA82B71771, 0x33CE14F011C6ACFB}, {0x0F6FBE349AAC94B7, 0x2EF97586C2B13860},
+ {0x726B7ECAD4E9F4FF, 0x43CC6F364949B8F5}, {0x0394C802A596F43F, 0x843EF2757C5B9BC9},
+ {0xD11AE85CB100B939, 0xC51CD136C07399B5}, {0xAAD61EA9D4FD68A8, 0x10D5CAF0F4C8EEE6},
+ {0x07876C28C72DAEDD, 0x7A22502DF81734D6}, {0xBA807ED2B8AF5CF0, 0x76E363DE08502774},
+ {0xDCDE672CB0088F65, 0xF1790740D0D1706F}, {0xDFC55CAF96B1E2EE, 0x51EF4B48DD7E8D1D},
+ {0x84CF353E8C72A661, 0xC6432413149C3E0D}, {0x3CF37EB424500C4A, 0x590CEF45546BA430},
+ {0x65D5CD080A9F467D, 0xA76228E0DEA40AEC}, {0x45D2B00A6AFB81CB, 0xA4B2CA3271595FDF},
+ {0x9BCF242513F7EF45, 0x44042F3A2A0D7621}, {0x8B8A0A11EB4CB8D8, 0x51A6C5C0EF60B1F8},
+ {0x5F9FD7ECCB11C2D2, 0x3E369BFE39488074}, {0xFC8E088C09CB2F1D, 0x55558AA09303E897},
+ {0xAB0D889B1AB749F3, 0x892AB5D7FEB8159B}, {0xD49EEEC42A3D1587, 0x9EE1727EF89E3F61},
+ {0x77B8CA28D5390990, 0x314B6CA0CF2450DD}, {0xCEA4B0D9C07200EA, 0xFC343527E6652E9B},
+ {0x7AF8E62F5222CB8B, 0x3AF5E1B5196776FF}, {0xD68C24A7CDBE4078, 0xA44F30F3E7260BD5},
+ {0x70740371E7C5376E, 0x4AEE72D8DA0A0D7D}, {0x3C2A2CC0D90327EF, 0x8909E26FA83461B4},
+ {0x5CA0E88A3E56800D, 0xA785AABAB29D6B3B}, {0xB4632954206C117C, 0xE1DB7B523500933D},
+ {0x3F584C0D5C707D7F, 0x169EC0EC7DFBC3FF}, {0x0F7E46443E7CF64A, 0x307F3C5B39AC1E18},
+ {0xEBB0F975ADADF184, 0xC2722971EF052436}, {0xC3DB4077AD5DC83E, 0xC5776540111D2640},
+ {0xD5F157797ABB8861, 0x9B5315DA70396C08}, {0x9248F0A5808ADB5C, 0x4EFFCD3C15305C90},
+ {0x426CC83EABEF8664, 0x8303E0D3027ED02D}, {0x630BF826A0CABC47, 0x343EAB6A6E1B8670},
+ {0x9DBB13798047CD9F, 0x2779A41A7E1BECD3}, {0xDC8DA9BC90EC90BB, 0xD181168F21D064C1},
+ {0x07E15765FE010421, 0x16C7CB4A24FBE11D}, {0x5831C6C7DBD73ACB, 0x7616AC7279AADBC5},
+ {0xDFD5CB46DC91D47B, 0x151FD85D391E1DBE}, {0x4EB7E68488F91108, 0xF5E4B1A4D07AA9C8},
+ {0x13FDA13711A85CEE, 0x23A7A4451566CCA7}, {0x74AC9C571271F197, 0xC909215DE79FABFA},
+ {0xC7F56EE931336ADC, 0x642684826D845146}, {0xDCEC29F6145C9616, 0x2E91E4E73AE79720},
+ {0xDC5720880505C028, 0xF7C13F748BD42E59}, {0xD2CEB25E081DDC4B, 0x24330333EE6863C7},
+ {0x97465A33771F1763, 0x3E0160E76ADCB194}, {0xDE49825D677A33AF, 0x8B7001616CC67AC5},
+ {0x173AAE708D3DBF07, 0x4647EDEB5D2D725D}, {0xD24818E747C6DFBF, 0x9D0933E78A9496A8},
+ {0xC210E83094C4358D, 0xFD09AFE48A2EF649}, {0xCB1D13353756CDF4, 0x75F0F64E0A5BAB2B},
+ {0x27E3B1505B0E3CAB, 0x0C3FD2159DF98915}, {0xC586D78CA20C047A, 0xDCF38015DFE94E13},
+ {0x7FAE5D01FF0FD88D, 0xDC4E36332D375021}, {0x2C739218ABFDBDDE, 0xD91451E0ECD00276},
+ {0x28A0930869F776B1, 0x4348D0AC057D2F38}, {0xF507F033C43B1079, 0xA66261AB1A67E443},
+ {0x16B27B9911A4AC8B, 0x083305AAB4248C55}, {0x0F3F6FCD0CD96A5B, 0xB48F5E76CE9428EC},
+ {0x36E5398955B94A24, 0xB0E2AAA13507DE1E}, {0x572F679C0A1E3EEA, 0xC7E332EF359BE110},
+ {0x07A997E4DB654845, 0xEB809E3BDEC770FA}, {0x4A1A6DE2669B842D, 0x9FF9DA551AD4E286},
+ {0x0107993F601CD578, 0xFDF9A1E20E2EF60C}, {0xBB8313C42AA1BB33, 0x352FDBBB8EF87C7E},
+ {0xC2E3A03FE69C0877, 0x49387173D212409F}, {0xF6C72342CA605E9E, 0xF6D400F114E3547B},
+ {0xEB0B6F410F89DC4C, 0x1D3516F2894C828C}, {0x130F88B5CB102E93, 0xBD6F51EB58D302D7},
+ {0x2BC87E904C3D8FA7, 0x1784A0CA640A793E}, {0xD083F5E7B8974DD8, 0x74BA0494DE71B837},
+ {0x069C9B9DCAFCF978, 0x22B88E9689274E1C}, {0xEC582FB032AD8C1A, 0xE8ED7E1600EFA1D6},
+ {0xE1646C05B15A8A8E, 0x60771FCF049AE16A}, {0xBE1F2300EA522B2D, 0xE018EC6227CE148D},
+ {0xC5918BF097477CDF, 0x1A0867894BEB485B}, {0x5EC5A0FB730421BF, 0xDA24F7290343CCFC},
+ {0x6FE6C98BA303B26B, 0xBE5C8CD25219238B}, {0xDC22CCCE7FFF75EB, 0xA6E2A6C2B3107B64},
+ {0xA51499BE8088B3FE, 0x9C51026FCD143702}, {0xD299534BA7CEEE7D, 0x4978883502B61659},
+ {0x5B5AFAF16076C134, 0x59647B5E95DBBB68}, {0xE3E958122ED7A8D2, 0x2615A3F6F86D0E87},
+ {0x4F19A99B3E258E8D, 0x0E63C40D426198C9}, {0x73C7AD326BE3A622, 0x6E248721C768947D},
+ {0xBAABB1955A93DE54, 0x7C8028D95374C1B2}, {0x31F4F06EC6ABEE8F, 0xB87A9E2623FFC535},
+ {0x255C0EFBE218B6E6, 0x38AC72A3FB1995B5}, {0xAA67FCAF1209C11E, 0x345D6F4612C44831},
+ {0x68A6EAFE0A03877F, 0xB1BB3474FEB4BC9E}, {0x13589D6D41EB02DF, 0x103A7AB8E7F523F2},
+ {0xDBE3F30C78E9419E, 0xF6D5CC4A7CDB76F0}, {0x9103631444C89035, 0x32E5CB9A9632708E},
+ {0xBB33007177DF57D9, 0x1E300C009F35DCAF}, {0xFEFD1D716983A847, 0xB896AA9338D8775C},
+ {0xE44E2995CF537780, 0xCD8392658FF93DF4}, {0x5EB4115B51826C8C, 0x7FE367060753BCDA},
+ {0x9F7ACD365E77C84A, 0x54E8155867B774AC}, {0xA30BB7BC7AF51E84, 0x7A206C580685C546},
+ {0xF45A0903A5D0D5BB, 0x8CF965851835B423}, {0xD426545DC6128609, 0x203B284D9F6C50CC},
+ {0x1E08582BF64F5C80, 0xCA700CC7C458D85A}, {0xB869F7EEE93DAEAC, 0xE5978F53CB18E6C3},
+ {0x00EB933FCE3F5DBC, 0xBBD7D3206A680F7E}, {0xE96CEBD0A7D9202C, 0x9336F63C7F7ACB7E},
+ {0xAEA7AFA611D90C86, 0x84B17ECD740DA902}, {0xA17B0FC76E449A4C, 0xA4E5328E3481555A},
+ {0x4938C1B243A4CFD2, 0x6A7C3EE726C61609}, {0x2FCD594D51435DB9, 0xD35E03051E0655D1},
+ {0x6E586B7608FB8E80, 0x73BD2CAEC01FF8FC}, {0x6E9F88A99F71DFEB, 0x97D1B40CA98FCD87},
+ {0x0810F609C4C05F09, 0xAA03715A78AF5DAB}, {0x9F1096CB496EBEA0, 0x8DEB34ADB2D126E3},
+ {0x2D83BCF25DD8573D, 0x6534227712053199}, {0xBBB34898498E9EF5, 0xD55269B4F5EF5170},
+ {0xFB36D239B979485D, 0x5B23A9627B248B2D}, {0x8BAAB6A4AA7AA8CB, 0x32CB071215ABBC0B},
+ {0x62AF1A7598DB61B3, 0x28D61172C0283673}, {0x9DCE278A55F4CB75, 0x3A028D6A6D5E2838},
+ {0x3755CD880FA44E39, 0xEC5F82533630D806}, {0x44903D8B3A47841B, 0x48BDD82F6587848A},
+ {0xEBA98AC4EC1E08E3, 0xDC7776016CE7F1A0}, {0xF12146067DA1E76F, 0x014FC451394605C7},
+ {0x2E078A357484E97E, 0x05FF7F5361BAAEC5}, {0x8E0B726F01D7F700, 0xB34B9D993D60A91E},
+ {0x4ADC8763B185BC72, 0x213480B295226D17}, {0x77D692A91DBB4EA0, 0xC589BC6C7B141EF9},
+ {0x5EBD5139D925DAF0, 0xA640EFE8571AE7D0}, {0xA0994244834EA32B, 0xAC0E3DDB29763A1E},
+ {0xDB82A2D0442EA71E, 0x2373DAF7127452A3}, {0x40894F0AB2389953, 0x47EB247029F1D9B4},
+ {0xB2D83E2BED04BBE1, 0x1518CBD9DF73A198}, {0xF659B4A31CCBA0BC, 0x06744B8939BE82B0},
+ {0xFC7CBB80396B5422, 0x3A0C3F0BF5835C42}, {0x6C0DF7C539DE25D6, 0x1128E0983C385671},
+ {0xD4E92A4F6CE32C43, 0x5027BBC84500F5C8}, {0x2650CB573D326668, 0x25D1B82157E519DA},
+ {0x731F0A19DBDA8AC9, 0x74ED3096562FBFE7}, {0x266D0B5A3EF0F8F2, 0xA5FE9C8E7B30C090},
+ {0x50C543293F388B6B, 0xE603DEEE182E86E0}, {0xB9A813AEE2D2F996, 0x796EE801C854EC28},
+ {0x9EF0E184A3730A22, 0x79F2D8DDBAA5B75A}, {0x863BF945273CF92C, 0x4B74742BFD199C12},
+ {0x948CD90BBCAAF7C3, 0x4E93B25782B38349}, {0xE288F655117F3BFF, 0x7B776505A7598D6C},
+ {0x9DAA398B1C09328F, 0xFFE99AA0E1675D07}, {0x431AFD4E6E662E35, 0x75ADACC7C3516199},
+ {0x1131E2545ACB2924, 0x385336AB49CCACA8}, {0x63A52A41E08959A6, 0x3D30AA74A3E57F21},
+ {0x6984E382A735B37E, 0x3D4E882FC8DC1B0B}, {0x961B0F374068BEF5, 0x30A88285513388B3},
+ {0x61116C4BC19B3ADC, 0x385852E7E2033E66}, {0x7EB651A970AF6C60, 0x1CD8C177CF5EA16A},
+ {0x605A8EB19A9D380B, 0x2BE485235F40E3EE}, {0x8846E05EEAA849CA, 0x5C813CF7935EE922},
+ {0x6E508F91B4D8DFD2, 0xCE56575D902A9882}, {0x1803223F27200E13, 0xA6E19DD29BAEF405},
+ {0x3F5C6A4F93203934, 0x54EB03E7739E5BF3}, {0xBA6290A5A78A0112, 0xB295F4C9A9819A16},
+ {0x44599A277F44B894, 0xAE1BC212CFA6B0DA}, {0x7C4C6A6A7FA86938, 0x4A29C73BF1DE300D},
+ {0x44ECC4546D12C552, 0x494BFFF9E9D3BEDE}, {0xD1572A09506E0FD9, 0xFD08DDCB43D14A87},
+ {0x17DD69F72EA857F2, 0x7FF2294AAAC5C9CC}, {0xC8A51D4A0D2813A9, 0x550186DC58824D00},
+ {0xC77CA4F831FB75D7, 0x317BB79D1A6336B2}, {0x41450283010A3A8D, 0xCC1ADBA0DD071993},
+ {0x7A0E853190F7A6A9, 0xFC6B1FEDCB56FCC3}, {0xA73948EE6D4321DB, 0x4FAE05E3346D2FCD},
+ {0x2E1607853C6AE650, 0xF6984E0C6A937D1E}, {0x1B77209AF0D39A58, 0x64C53030C49D100A},
+ {0x082314AC430AD52C, 0xFF1E2D119FC4B352}, {0xC6689F592FD963FB, 0x38191D13EA84F3FB},
+ {0x502EE3118CB2C080, 0xB7330E2CABC753CD}, {0x1DDCF8727F984294, 0xA0A1C74C5B7CCDA6},
+ {0x7F6E7AEE36AADA3A, 0xCB8D572CE5247A35}, {0xC688044F35AE0E76, 0x6242B293649A4DAB},
+ {0xF6C6F50E9F12352D, 0xF9AF8AEBB1983ADD}, {0xC7BC8EBA250EACBC, 0x471B718EF7AAE97D},
+ {0xE52FE9BF80B1AC4D, 0xB86290E8578C3EE7}, {0x132AF5D7D5660646, 0x5DE01C92EC88D39A},
+ {0xE3B46C6120788723, 0x2818CB80D188E44C}, {0x85EE907E88A2D8E8, 0x3092A355C64F5EB0},
+ {0x97B72A1F4E0204BC, 0xA6A1284CB6F360E1}, {0xE44FB16FB218E3C1, 0x8E9E4AD585F50383},
+ {0x4BF650C54ED1EB3A, 0x43EF706AD2C85F6B}, {0xD1B75B3437721138, 0xCC63BBA794198BCB},
+ {0xD9F9463AF9A041D9, 0x60153ABF35E5682F}, {0x535D3DBEF428840D, 0x635C704E64CD68F3},
+ {0x76ABC515746F9361, 0x06B1734EF53C0EB7}, {0x02E51CB5AE2603A1, 0x65821EBF2FBEB8D1},
+ {0x58BD12511112E568, 0xFF3C51D01943CAC1}, {0xFAF69656E40AEFF5, 0x8A40978D6DAC691F},
+ {0xA9C5FEF513E9223E, 0xAB6CBA4B3E47E594}, {0xF071DAD540641082, 0xB60C576AB8EA8980},
+ {0xEA742EA210B45565, 0xE230EFAB0D642572}, {0xDB79CAB2D5B7C274, 0xE9B2528348EC63F3},
+ {0x75E90C98776762A9, 0x71A05BEDB2F4CB16}, {0x7CD4F6AA29452A8D, 0xB8EA26EFA87131B8},
+ {0x13C8D41807E6ABE6, 0xEB97F91E02442C3C}, {0x7CFA92F6F69A621E, 0x6D656708865C8517},
+ {0xE94C09E7419723BB, 0x47B5BB8CB8EA8B5F}, {0x873F12EB98F204EE, 0xCA4CB5747410801A},
+ {0x7E246A8D3A9BC97F, 0x1FA35ECEC771233B}, {0x7A30B38AA40C6F49, 0x869AF9EB1D79E30B},
+ {0xA1FB4107BD8D9743, 0xC49099FDE99ECA4B}, {0x6C1F1BF71D92B553, 0x2B117C4345D51E1F},
+ {0xD10F8BB439A998F1, 0xFA4499D79FA5A296}, {0x1B38FE89A36A91D7, 0xEE6CFA9830EEE3C9},
+ {0x805DCC59E2201604, 0xEA1883FF39A15B62}, {0x247B5C8B3616DE49, 0xE19913AE07018506},
+ {0xBF55DA34B4A737D6, 0xB5A3E756E537009F}, {0x5F13ED53FD6FC2C7, 0xA93EAB6CC4AECF58},
+ {0x07D281CCB47A5709, 0x3048E45C840656DB}, {0xBC924B7CF66AFB40, 0x4683183302D5ECB0},
+ {0xEDC9F836E005EE88, 0x7BE46347C06246C8}, {0x5695DDE76A067777, 0xAB8F8E7CFFBE5975},
+ {0xE2A3148B9DD7BADB, 0x8B815F6141B6DB63}, {0x5F2A5C3D4D9DF621, 0x62ECC92636B74E4D},
+ {0xDC297832FC829A3D, 0x5E5A55A074F16E30}, {0x2AF7F05111707689, 0x2681A3A2B9AD800A},
+ {0x968629CA7ACFD6DB, 0x7345D4F068B7A7CE}, {0x5F289B17F02CFF91, 0x436DAC50312E2F40},
+ {0x09DD092FBED60161, 0x6096CD176CC53664}, {0xD7A94B1465D489D7, 0xB354845FC3FC7FC4},
+ {0x1B3076575C11159E, 0xFF34171995CB5F43}, {0xCC719EEF5A5DFB7E, 0x65A9DB2071991C86},
+ {0xDCE1A4585CBE4EB2, 0x9915071C3E456F73}, {0x2D42C1953164ABFF, 0xA3539C17B589C41E},
+ {0x45D31F7A81FD6B59, 0xD85D6F8181EB9514}, {0xFEE32566B6E89240, 0x3FFD1A13C479B2F7},
+ {0x78383E3445F41E07, 0xBAC9B32347015B32}, {0x5854EF47503BF914, 0x4E310D6AE30186B9},
+ {0x956A0E6F7D9A2D0C, 0xB6B8648B77780276}, {0x6E443ED1BDC208CC, 0xC31EB9596FD70FBD},
+ {0x7A4EF51FFD45A783, 0xA69F2B8DD03AF5D7}, {0xC17F5F1C265EEDA6, 0xA8DFC4E7FD86982E},
+ {0x1EB4866C36CF4A40, 0xB23501C1D9C001A9}, {0xCF62ACF21D8E473F, 0xE65B8F817971F270},
+ {0xC229D0D5282F44AA, 0x49793BD14DE8B6B2}, {0xC4362BE6956C0DA2, 0xE713F63577EFD177},
+ {0x004D94B97ED62E00, 0x6A453D6057DEDDBC}, {0xC41BCF69FA143887, 0x40B19BBEB9478D9F},
+ {0x3C6FD49369D03D0C, 0x6A3B33B94DEDFB05}, {0xB064C6450008282B, 0xDC0706125BC27453},
+ {0x64347E21E453BB1F, 0x47DB82C317C8CF26}, {0x7CE5D60962CD0EFA, 0xF2B6351865124284},
+ {0xE0E67D75A96C6B9D, 0xAE594BE51B7EB0F0}, {0xAF6D76466EC13AE2, 0x56AA7F3C9FA0B00C},
+ {0x167E6951AF22D751, 0x279B65C9F2C39D9B}, {0x272A0755B927471F, 0x0569D48AA3013370},
+ {0x88D8A332F035759E, 0x5CE2CB0324C09570}, {0x839A4BBB7DF71342, 0x3E3A3E0745CE422E},
+ {0xEFAFF32CE9F5FC19, 0x6F4342692D414C5E}, {0xF48091B0F45D0FD6, 0x3FE564A4B3144EF5},
+ {0xF52F8CA4A1AB4F41, 0xE04900BBB6C3D3F6}, {0x337BFD32FFEF74A6, 0xFED38469201FFE6C},
+ {0xFFF66AF6FD2799CF, 0x82E16E0F1EFA3266}, {0x535C834DE5CDED19, 0xE39CEABDF65994C7},
+ {0x1F48A3D13883FCFD, 0xF76DFBACBF66AE94}, {0x56C169BA65048466, 0xCB563095A98FC8CE},
+ {0x880B85538325DF05, 0xC71D27CCCDE36C2B}, {0x1189C8750A0C3620, 0x43CC0901F78397EE},
+ {0x3B6B86200D1A3369, 0x6467F9C1EC7F598D}, {0x17944D4D10540B9D, 0xE985F9F05AC32769},
+ {0x4A1A31A508E41F3D, 0xE32BA16615C549F8}, {0x392F483E7468DD33, 0x9E023AA2090A3356},
+ {0xF29D55C4ECFD82CF, 0xDC32DEEAC658C87A}, {0xBDB00DE6ED20668F, 0x270C19BE80BB18AC},
+ {0x0A585011EF318EA1, 0xCBFAD255B8B7518C}, {0x52F9FCA4D2BF1B8D, 0xB3C2FAC806C7C31F},
+ {0xEC47E056C6DEFA59, 0x7C039E25F4D60FE5}, {0x58D964AD9415FE6A, 0x0C6505CB782A75FC},
+ {0x9CB4AD4CB46FCF89, 0x9070E9432834528E}, {0xEC9107A28D10C953, 0x7BEA3436B4B7008F},
+ {0x8E76CAFADB24F605, 0x63F24EEC00BBDB52}, {0xFEA74207C017811F, 0x6BE726CFFCE0716F},
+ {0x2DEA86D8EA5D8219, 0x48F8B37F1E2F1296}, {0xF4A81F2D1B747A33, 0x0B77D4E94CE1F610},
+ {0xED50DE454680034E, 0x073C43532DEF5C51}, {0x7781B2BBBFAA4167, 0x64360360634AF45A},
+ {0x3E6258307E1FB0C7, 0xFC2AE712FB332307}, {0x87A6A3F5CDE57352, 0x5173403879EDBFD1},
+ {0x70D2941109E39A63, 0x052EC6CA24AF69C1}, {0x8F4F3F3B3525EB01, 0x23E053043FF1361B},
+ {0x8EE6D639B9167821, 0xB9ADCCD665E3BD88}, {0xE5FA7002F6C77C79, 0xE6C92CFEC47E7BB9},
+ {0xCFF6A5967E32C47B, 0x203B09049BC6E898}, {0x7294BCEFCAC6538B, 0xD543B7BAF9115661},
+ {0xD231CA2CF5EDF74A, 0xECF34DC48BCFA715}, {0x709F1371826C5811, 0x4EE372E813999269},
+ {0xCAEA1B811FDE40CC, 0xE38DB74570223D1F}, {0xB1F9E68B2F9101DB, 0x3DF3629C68FB4279},
+ {0x6D93585BBBB71DAD, 0x140A6AE729AF4314}, {0x6D8F11D5DFE85D89, 0x4F94D38EED84B178},
+ {0xD3782D0A1989F173, 0xDEEF7B00ADD434FD}, {0x1ED4094CBCEDD79A, 0xB9FDC57E37BBDA04},
+ {0xBFC80E4C712DE2FD, 0x87BE43D5C3060014}, {0x7D762583318E1191, 0xD62E98C9F548AA87},
+ {0x0C1EDE20AEDAFF20, 0x9996ED2894607146}, {0xE04C640E03067FC3, 0x022F22F754C6921A},
+ {0xCFB234ACF1AC042C, 0x67B34ED07DE31BE2}, {0xAA79D081AF4FF700, 0x8B403C3A957BB02D},
+ {0x25609E78275BEBBA, 0x68F3C05CED79FA51}, {0x56D2D3598DC964AD, 0x5F15963E4EEA1C32},
+ {0xF074FE4C8673762A, 0x478A17B8320851A0}, {0x9C204CDE2131F199, 0x0BD4AA1B01323D26},
+ {0xCC7E5E2753A2D9CC, 0x73B76853FCFBA8F6}, {0x0F6097549E78573B, 0x8E86132F6EE4A42D},
+ {0x0ABB2EECCCF05CFD, 0x50458FBBF48CA11C}, {0xCA26D9EBCFD273AD, 0x0147B43E86A402CA},
+ {0x39EBB39543B0A518, 0x6B6A64CFA04561B5}, {0x73B313D861788D4B, 0x3DAFAFE64A8E1B9B},
+ {0xE20E27C40EE71707, 0x0444EE7A7187D473}, {0x0285FE22332D7C84, 0x0942A675BE895E26},
+ {0x775FCA20218EB78B, 0x9C7621535103386A}, {0x3FC6C26F00130EF2, 0x884376C39D442337},
+ {0xB5B5CC180588478C, 0x6DF94CE6E1495E17}, {0xADABEB9DB323F444, 0x21ADB2A925A3FBE7},
+ {0x0A545925F2755A62, 0x1023920AD101CE89}, {0x14A688313873A02B, 0xF40CF7A083B256C5},
+ {0x14BF57F56B349E5C, 0xD67380776F2D0C7E}, {0xD284C399CD0AA9D3, 0x6D7E642F26A05A68},
+ {0x27CEAB5F535530EA, 0x384FB6DDF81722D7}, {0x51A5EFD0FEC7125E, 0xF4056B6D67041A81},
+ {0x344768439A23575B, 0x2BB40ACD8C8188B8}, {0xB111628AC711D4C7, 0x7894CCF7DFE7B2DD},
+ {0x506BEB21BE99B63F, 0xDC0A9CF7FFF371C5}, {0x99F0EF268BC7FF07, 0xA117153682C80E40},
+ {0xBAD4A1368568BCDB, 0x017D5BD8A5C73AB1}, {0x968C2B0D9BD8815C, 0x9A37126BC75E1357},
+ {0xCB3431BE9BA04C8D, 0xF5DF35BBC9D5048B}, {0x68FC0374138279C7, 0xB48E786B0E89900F},
+ {0xBA8B0F6B7BAA22D1, 0x14CF8C3E960B95FD}, {0xB1344C2E56BC1F83, 0x9616664BE96D2B28},
+ {0x9C10DAAB09AAFC52, 0x7C5391497AEEDFC8}, {0x3F718AFC5B4A7706, 0x5834293B08AC0719},
+ {0x1912B4E27C4D3F98, 0xA585E7349817CD4E}, {0x9C09ACD2160D94F8, 0x8EFEEDF61D995709},
+ {0xBD2A98B3E3E69A76, 0xEDA62EDFB7BD0408}, {0xB142CDD168DBF1A7, 0x7D198245A5030A04},
+ {0x68E766E468FA6C60, 0x0894DD08D40BA9F3}, {0x33B34A1C1A7C615B, 0x311CB96D10FD1D8F},
+ {0xD7EF9D3FFA72C24F, 0x3C19EF718E7D4EDD}, {0x1323CE13E6B860AB, 0x8EB666434F13B1E4},
+ {0x55547535EEA6CC49, 0xBC508525D6020DA8}, {0x75E6129ABCFBB86F, 0x1655856A070355CE},
+ {0xF146E82E8B03ACE7, 0x3F28FFF95D1BA51C}, {0xC0DAA59897642FC5, 0x20FDFB5405607225},
+ {0x0A3A6FFD518EFF7D, 0xF5123237CADC769A}, {0x94AE8D6A2F4BADB5, 0xE0C6EF7F9C278B3C},
+ {0x9380E66648361155, 0x222A0E561A19398B}, {0x34253206ADE61189, 0x1DD073E4D489F042},
+ {0x497009B566C7863A, 0x7014104D2EDF69C1}, {0x4D9A80A939427B6A, 0xEB1BA236A7DF2D3F},
+ {0xD5FA007AA72C52F4, 0x3955018C36E796BF}, {0xC7697CE2BA6B09F7, 0x241667FE1DC7BC54},
+ {0xADA80D6748420C92, 0x38963C32F2C44ECD}, {0xFF365ED7485F02FE, 0x22812D6AB2346D62},
+ {0x65FD9CC52F0274D6, 0xD53A0711515062F4}, {0x70D9B843F94E1E3D, 0x4D4C369557ED674C},
+ {0x520308E995DCD144, 0x26F8FFE960ACEAD5}, {0xA6D6FFB068DDDBAD, 0x0416902C85F7704F},
+ {0x0B1F9BCBCE43D8BC, 0xD874E3F69723A37F}, {0xC0BA491AF25AD0AE, 0xD2C786A1F5383D9D},
+ {0xE2A16D813E8C7E6E, 0x2F16AF7C9CF7758C}, {0x03BD1F6BE3E6F1FB, 0x1D044C99EBE02CE1},
+ {0xC5A55CBAEDAC7F02, 0x5802831E754A4723}, {0xCFEBF4632EB83BBC, 0x1D724DCF8002E52E},
+ {0x4F54B2F0F48E912E, 0x5970FBD4BDEC9619}, {0x6C1814E0336F06E8, 0xFB8D0928103C1342},
+ {0xD143A6F3550FD730, 0x2800FD23DE579FB5}, {0x5916108C8367FF3E, 0x8AC4582B1A278DBD},
+ {0xA157E38B4E70A264, 0xD879EF56A35A75D2}, {0x329BC4E729AD840F, 0x247437885283BD39},
+ {0xE0A33985FD42E35F, 0x1169BECB121ED7E2}, {0xFEEDD91D957B6D31, 0x166D4F21A6B2358A},
+ {0x68CD141DF1966A15, 0x3C93C2827824B6E8}, {0x081937BFA61D9845, 0xC2D58CF5F7537252},
+ {0x32B23155DFF9006F, 0x6D2254C2BF572342}, {0x922CC8425BB26D82, 0x04F069990FA76B21},
+ {0xA36A61BAF191D8DD, 0x68F0C8DF5F59301A}, {0xB84C582D5F685437, 0xC12CBEDBDE66A59D},
+ {0xF2E9F052BADDC655, 0xA6292D07E7AF0DCB}, {0xB188762C93061CCB, 0xB9650999222BEF8B},
+ {0x529030C3ACE2CDCA, 0x4BDF91FAE944FC23}, {0x2ED3C6DF7394B1D7, 0x367DF494B63C62B6},
+ {0x51EDE13D772EC5C4, 0x90A21B55D1F9F88E}, {0x138063D3AA0ABEB3, 0x8FB2412D62990F8B},
+ {0x51216C59EDB20086, 0x99B1C7E3E1F62810}, {0x016BE4AA9DC5D240, 0xBC827B78E5EC0A22},
+ {0x63047E60B302E454, 0xA34A06C1E83F07B5}, {0xD467156CE7D539D8, 0x357ED54A5792C9C4},
+ {0x7152D5647D26557D, 0x7B27D314068E100E}, {0xB1800320F9CA726A, 0xE515DA6449AF005E},
+ {0x02CA6B86219B288D, 0xFE3D69272A3B445A}, {0xF8F44AF3836C9EEC, 0x3F55635B7289233B},
+ {0x018EC349F3CB9A04, 0x47ADB5F712B555CB}, {0x05B1DB636242F77E, 0x4E15755AE67B711E},
+ {0x12FE0AF1B595BF36, 0xA4C223F5C2007C57}, {0x10280DF4CC30C8EF, 0xACD713531225800F},
+ {0xE84EAE7A8653AC1C, 0xD2371CD5C12A6A96}, {0xBCAA1CAA7721FEAC, 0xE48471E2F26F79D8},
+ {0x632FE42F6FBA2022, 0xBFD7FE682AF38C8B}, {0x307CC7F23D1F7803, 0x4B2B765BC8582B00},
+ {0xCE973ED404B24262, 0x1194275FFA15C3BA}, {0x0A57A6B951F5D6AB, 0x0373347056C05F22},
+ {0x9D879ADE3EB908C4, 0x44A3F5E1059F74A6}, {0x435463BF0CA764C9, 0xE8215E92074F0CB2},
+ {0x6C34BB08763E63F1, 0x08FC27424546EED1}, {0x2DD7C8BC9D9E96D5, 0x637575EFB0CB9417},
+ {0x364665A07802CB99, 0x35A506AE158A05CD}, {0xC9C849F78531BBAE, 0x02CD9735DF786B00},
+ {0x9B10B639117A5F87, 0x272C9CAF0C937C1D}, {0xCB7B33094F368D49, 0x7A8E75C8EAED880A},
+ {0xFB7FB10453BBB621, 0x62A684BAF64D57F0}, {0xBC7C5FDDF30A3CF2, 0x4D8B06B63F665AB8},
+ {0xBCDAD15D208D4899, 0xEE945D5B1F762E0F}, {0x662B0A3643B6F8A7, 0x485A8E6912B48BD2},
+ {0x9FCF75B8FAEE2FDB, 0x21758A8783E52332}, {0xD3D353AE0045D362, 0x97D5DCBBCC607780},
+ {0x5B550D75755823CF, 0x5912EEC5AB8C4505}, {0x79D04D3E116C20CB, 0x21376F87E739FCD7},
+ {0x0A89B821E645C806, 0xE0D580944D7179AE}, {0xB53959E086B328C7, 0x752D76B4DEF6FFB8},
+ {0x87ACE248CA5A094F, 0xC7CBB2A2FA1B6142}, {0x24E297C4DD7DB75D, 0x40F77926A6D6AA7E},
+ {0xA688BB5D58AEC059, 0x96FA1A7F64E8E4A9}, {0x082B35771B2C4D6D, 0x74A62024F26F243E},
+ {0x7C39FFF914F5A4F0, 0x72834D955F3FC0D4}, {0x2E6F9DC84FE5C731, 0xB9C50B3322699383},
+ {0x802A307D8459A729, 0x8DB0C47C21F46666}, {0xB92D22D82674D707, 0x39407601D3D19E3C},
+ {0xDA79956BA66E1929, 0x54F120234E8DB16E}, {0x0333DB430CDF9841, 0x50D244A28BE6931A},
+ {0x1F11C5863117F803, 0xA5089BEF97000D35}, {0x463D2C9CCFB3FBA3, 0x1825E1020FC69367},
+ {0x7B5DAE46CD11EFDA, 0x519F11C03B259AEB}, {0xC199DBDCCF1549FE, 0xF4BE40274F95F717},
+ {0xA231CC04875885EA, 0x93748CE9DEEBF8A7}, {0x4B38D996A0BB95B9, 0xDAC54F8453760B9B},
+ {0x7D2D47C83057CE40, 0x7D04AA1A51739BD9}, {0x0FF32FD47259B52B, 0x018ED4DF1B092FFF},
+ {0x224078110B167B55, 0xD0994ACB8221E68B}, {0xC2C4EFDD4235A0D6, 0xE2206A2E4752B30E},
+ {0xD1165EB0A988BFB1, 0xE88B188E575E90FC}, {0xB8AF522214E24DBC, 0x8B73F358925AF121},
+ {0xE0914D59921889FA, 0x266A764E156EAC2A}, {0x09D1F0ABAD943217, 0xC341EFA5F6C89E4A},
+ {0xF6A748F467750B9F, 0x23217E1BD003FA11}, {0xF63E7A00AA25ECD1, 0x07E8D0CD6AD1AF9F},
+ {0xFB0FAFD2FD4FD6AE, 0x90BAB74C15C6CE33}, {0xF6B222104BD34049, 0xF58964649AAC5C62},
+ {0x838A7EAB3B749A6B, 0x088FC6277AD42F92}, {0xE32FF14D23F8486D, 0x5176E05FAFBC2C9F},
+ {0x0FFDB803BEE9AD31, 0xBCE9550CD335F8C7}, {0xAFBB52F8C35F4BDB, 0x457D214D949BA895},
+ {0xA818FAA7096F5C68, 0x136D9AE30D337681}, {0x5C66A2F020F56A2B, 0xCBA176342BB777E1},
+ {0xC7E8CC6709A0F71B, 0x73E53CE11153E565}, {0x442A0BCC5C5A1BD7, 0xCD1A163521AB2E6F},
+ {0x00B9183E5E207AC4, 0xA39C8741B5E72DA8}, {0x6E3ADB74CF68DFF2, 0xA4410F166FBF5CC0},
+ {0x206FA02AD4A9E8BB, 0x83543E34406E1503}, {0x908AE4BFBD666E94, 0x6EC1A0235DA08C73},
+ {0x3886489035C6CD2E, 0x8ACCCB4A6EB9A989}, {0x13C3C5281B08F1DF, 0x13E9C4A394537D6E},
+ {0x5E7C10B738687AD1, 0xF7754B1A84B03BA1}, {0xFC049BB9B5D19CEB, 0x0FCE81B465A1D46E},
+ {0x7D6F22C44B09DBBE, 0x832D289196D29B98}, {0xE3F457171CD2B9D2, 0xB55037A61EB96B0C},
+ {0x2C92E5DEF91212CD, 0x0920D6C6E3B17CBB}, {0x950A80B0B11FA81B, 0x8AF4DFE57ED4CAEB},
+ {0x2A61DA1B83675EF5, 0xEBDA3B749FFFBA8F}, {0x3B475DDBE7CB1666, 0xB487E993E58B477F},
+ {0x523A8D1C1481427B, 0x118E1C4DC5BD27AD}, {0xD4EC7ADE2891BD25, 0xE8016DB98AA69E97},
+ {0x18C838CD4C59E2FB, 0x060DBFB2B6834CC4}, {0x0E7637EDDA49BC36, 0x565E8594EEB897BC},
+ {0x6DCB929AF6946D22, 0xA45808C811DFC295}, {0xB4AF2C5658EC0270, 0x001BD844D4022B41},
+ {0xC05C43D8E0B670DD, 0xAF270C341AD54EA7}, {0x1EC4FE6776B4F7EA, 0xBEA6DB61E3C105CF},
+ {0xF6C089F087EF242F, 0x89DA054BFB852302}, {0x7CF96FF69E2777A4, 0xD8EE944557FC048C},
+ {0xED24A7291A6D5E49, 0xE14B30E8BEC7F6A0}, {0xE28AB498D4730B10, 0x9FF88B05EB79F5CA},
+ {0xC5D9AFDA9C51843D, 0x0006E4CB5E632D57}, {0x7E7B58CEDF6D4E06, 0x6F34D7C7579AB37C},
+ {0x0EBD8F1E21E2D599, 0xB8B677CE49644FA7}, {0x13ED1F35943B9DF3, 0xC4D2FAFB427876F9},
+ {0xA5B3C44016677E7C, 0xA096C3F6366C3A09}, {0x9BD30EC8BA683E97, 0x8854AE4D27D57316},
+ {0x504B1C78484C9C14, 0xA4AE538AE96975B4}, {0x1C87299246E1469D, 0xEA2A662CCB7DB496},
+ {0x6A62CE2777822206, 0x2D75FB37B63C8BD6}, {0x4606A596B1CDE0E0, 0x5FFFE27AA56FAF29},
+ {0x8D898C1CDC1C972A, 0x459D41B67213B594}, {0xC886808EF9725556, 0xF729E25961D3AC4B},
+ {0x687400129730E51B, 0x94059D7B375813BA}, {0xA781448CF6633634, 0x05F354236B306D40},
+ {0x43E5BFD02253B9D3, 0x72C87F699975B11A}, {0x76E7DAA774E3FFC1, 0x0DE107FDF3FB7361},
+ {0xDFCD164D3D85D9CE, 0x06D68C79B3028B74}, {0x74C3103CB7328D83, 0xDC82085DEF1360BB},
+ {0x40F827033CE7F06C, 0xEF2D237CFAC287D1}, {0x68548D9E917B63EF, 0x7D34CAE80E7E9432},
+ {0x2CBA20B14BE2485A, 0x23388ACBC6D6EB4C}, {0xC561E58034CB13EB, 0x0BB09C10A8F7847D},
+ {0x4ACF9BC3D685EA07, 0x3C4E8146479034AC}, {0xFC3F3C85194AE9C0, 0xBF0823B0AF7018BF},
+ {0x4EB3ACED0D459997, 0x53EA9AEC5C4B1A7E}, {0xF36C9C1827BA8995, 0x48AABFF4A6E2A494},
+ {0x74DE9DA1C48073FB, 0x7F4DB8AB5B8BEC21}, {0xCAB41745B0A4B326, 0x83F887C96C9F8923},
+ {0x23A2B78FA9F1C9A7, 0x4ADC4B2D6A557580}, {0x5A02FAC215F4CC60, 0xE920B66F201317F2},
+ {0x44D499CB2D0D50C0, 0xDB5F4E6F8F040D8B}, {0x8EC97B47ED37AF11, 0xE5C35D8787A7D66C},
+ {0x4E1C7938AECC37B5, 0xF8017100DBEEAA5B}, {0xC9FF88C5D7345218, 0x1D4B82104445F5CD},
+ {0x8ECDC9116D1324C7, 0x0B991780107F4F22}, {0x2794DC0E4889BCC2, 0xAF3BB745A7332A14},
+ {0x1C90ADF41C1D95FE, 0x9D2C9D31EFF7FA74}, {0xBAC3C7F30A243B57, 0xB45DD880761EA991},
+ {0xBBC382E181ED4ED8, 0xC0DC31ED338485A4}, {0x3863C754855F4B86, 0xDE44D3EC8EA382FB},
+ {0x4C456AC32C4E4A34, 0x777179FD5FC3AD55}, {0xBD89289F4A9F6ABF, 0x5FCEA27A53D7CBA9},
+ {0x475F5CC1E6FE3B9E, 0x2167A90E5C94940C}, {0x84C0B4C76EE2BE49, 0x29408A1FD4124CD9},
+ {0xD2497BB0027D788D, 0x91FB63BCA8736CC1}, {0xAF0DF3D63CBBAA4C, 0xC44F0EBE204D72FD},
+ {0x632FB13E8410D197, 0xB60A20DA46CE1741}, {0x67E0A550F24786FB, 0xBAD56F1FE2397684},
+ {0x5EE6C17BF5FF5B18, 0xA3831A6AA6C09DD1}, {0x108B2646BD081A23, 0x7D299E2EFBA6E5A8},
+ {0x1CF6C0782F15E304, 0x563E5E0B4CDFD037}, {0x603041C2EC098402, 0xF47D920FB9B2AFF5},
+ {0x0F392467D3F260A1, 0x16493D502E97D18D}, {0x9581F6BD85BB350F, 0xE141946518327DEF},
+ {0x68DC28647C0C021B, 0x7FB5AD28DEC5451F}, {0x5FE5D0902BDFDC7E, 0x903DAD1ABCB949D5},
+ {0xCAAF9144ACADC3B5, 0x4C4CD506CE19C596}, {0xC5A9E92F8CECEF4E, 0x2B1595A90B02391E},
+ {0xA53959C2361D434C, 0x1953916DEC31196B}, {0x46F1276C73B46CDF, 0x1F04526BFFD86609},
+ {0x97F91C0B28BD253F, 0x123838C2CBC0768B}, {0xF5B563D10DA898BA, 0x4CED1E98FA2AAF80},
+ {0xCDF4C56FBE81712E, 0x6FEA80B23E3574B6}, {0xB0B4AF73221B1C11, 0x684D5826B65FD02E},
+ {0x72315A55A6A25F6E, 0x39597A976F94A6CE}, {0x2785453A4F597AD3, 0x136AE7FBEA30ECF6},
+ {0x878AC780F4F32D63, 0xB4062B1E79E23210}, {0x9F41AB3989EEF9DB, 0xA0B408FB1A184A4C},
+ {0x04DD40D7DCDD8391, 0xC0D28B9A8D4E47FC}, {0x13C4A1AB8EFD15F7, 0xD66294BE69B55D62},
+ {0x93CDA75AB1A2DE22, 0x78C3E72B49655219}, {0xB57BCE3DFC49E92C, 0x72C88407EAF89E9E},
+ {0x0443042CC3E93F5D, 0xCEBD2BF74657E2BD}, {0x437EA8C8BA6B2CA3, 0x6EED2DF5620CD938},
+ {0x40BC50F013A54A36, 0xF358E900CA7D0C95}, {0x61657A9546BEB1C5, 0xC18674AEC71217EA},
+ {0x1C5405585E01E405, 0x528D8E937A20E067}, {0xE975828B9B3CFA15, 0xDF761D35D5344D34},
+ {0x3B350FD54B12077C, 0xB6813689B88F3FCA}, {0xFE85CFFC5AF06DFD, 0xB4DB6262F43BC854},
+ {0x2B50D7E5B4265179, 0xAEC04356B5456268}, {0xCF0258CB9F73AD39, 0xC98A3BCA7ED22156},
+ {0x68F5DE84FB037310, 0x1359650DA40B0D36}, {0x6D498C50366307C1, 0xDF559F170B6ED3BB},
+ {0xA5168D4B35A6427D, 0x214A173542E6F708}, {0xD1B3883D847ED61D, 0x770D47661EB0AE70},
+ {0xB5942AD17464D70C, 0xECA2FF813DABED0C}, {0xBA55FCD60E23AA0A, 0x414B49B1A75855E8},
+ {0xD19C05BF07DCD390, 0x94EC2CD1A1AD3CC3}, {0x3F02256ED8637EE6, 0x5AA8A858625EDB63},
+ {0x20EBB3DF1090B05A, 0x8214C4F3DC088675}, {0xDE700D15DAEAC06E, 0x91327BA6EBBB0B58},
+ {0xA64E755031EA18A0, 0x87A105A86FE120EB}, {0xF83E030FBD79383F, 0x30839D02049B2193},
+ {0xEF510DC97E51B978, 0x05D39612DF9295B4}, {0x4B01F47FC5F7F7A4, 0xF4772987E793D16E},
+ {0x3A0F96EAF01ECB13, 0x228CFD2E95A84DDB}, {0x2AD330F03F442394, 0x40795BE1CCA6C5E0},
+ {0xCA000ED5E7B5D593, 0x9A285ACBA22F8B26}, {0x2A0934FE71717B9A, 0x4B3B1A48E911D07D},
+ {0x6A80CB610E5C0089, 0xB6DCB8137201D280}, {0x2B0851426809185C, 0x270CCB57E9A1112E},
+ {0xA7811F0DF1CA0DD3, 0xCE6D88D3F670BE01}, {0xDB40E801E1CEFC60, 0x3F43021DCC369F3E},
+ {0xE6B21D55D803B7C6, 0x0982646BF665D398}, {0xABA38C1043E7B6D9, 0xAFB8E2F21E7E3098},
+ {0xA706325B26619955, 0xEA47EBD23D2B13BE}, {0xEB5F9A765D8D4827, 0x8B5DB38A852111EB},
+ {0x0C5BE960C7E216D2, 0x0794EABF38CE0554}, {0xAB54AD6A5FAC122A, 0x0D1B24B6F2DD4E2E},
+ {0xBA89E0586C1428D0, 0xAA810F34C8BD45FA}, {0x0AECA35D48F8D06E, 0xC11FD206661CD305},
+ {0x44EC9BB538F1D624, 0x58240474A7614E9C}, {0xD25169B243B6786E, 0x1842F45F1D9F0AC1},
+ {0xCAE828F260DD8F24, 0x20BACA9ADC6CA99D}, {0xC0DE3D3D597A6236, 0x1D950F72E428352C},
+ {0xA6E8579B15861530, 0x399697F14F24E7CB}, {0x2DB2D236C748913A, 0xC8DA59657D1EA816},
+ {0xC13446ED9561D3F4, 0x784625EB52AC7356}, {0x9091FC6D501D2447, 0x1D8E9011EB39DE97},
+ {0xDD67C87C938F7B42, 0x2CC025C30F567D23}, {0xC11F05CC56164A2E, 0xB4548C72D0620460},
+ {0x8469655E919B4C9C, 0xA1549A466F7F97C9}, {0x4424C379F3079258, 0x55D2E1E4B9C3AED1},
+ {0x153C3BC6E4E6EA98, 0x0C07EC5A5E253C75}, {0x39B70FEBB1A77ECE, 0x3E9A2455915499BA},
+ {0xEB233EAC96D45C3F, 0x144F9D73D0A484D3}, {0x093151BDB239A099, 0xD8557F48729CC335},
+ {0x5F72656A2C145293, 0xF6AB31EEE717E564}, {0xD90A9FB152F86B89, 0xFD3ACF8E2471A318},
+ {0x5420799168C64CFF, 0xC0B9E6DECB1305D3}, {0x2AEFDF25D9763763, 0xAAEE694E6B826075},
+ {0x037771FB31938368, 0xA8E016B92D9F5CB8}, {0x786639723386855F, 0x34957C025933C8CB},
+ {0x5285C010BB0F1682, 0x550B055B7AA376B3}, {0x2EEB9C04508286E8, 0x746E89509ABF0D7D},
+ {0x81BA43990AA78C57, 0x73B613821A8C787B}, {0xD7819FFD8D38026C, 0x9DE1364300134CFC},
+ {0x0DE37EEAC8B06101, 0xDA7DDE200DCED2AE}, {0xFE88AF296D199C13, 0xA22475609B6CDE8F},
+ {0x1C9D983FF2A0E000, 0xED9BCC36F33BAC0E}, {0x9DF80B29B5398902, 0x5E3DC738942F1D71},
+ {0x5D88D5BC0AD39880, 0x4324FE71676E6E74}, {0xD4B8AC3A190B4029, 0x7CC58CEF59F1269F},
+ {0x2C1A7E2085A643A9, 0xA639A84D30B760BF}, {0x6A119DCA90D1328E, 0x26F7145858906795},
+ {0xA39F5BD85AC08A71, 0xF34C3D7B72912290}, {0x877FECA1B4867C22, 0x9E5EA1A57CF11EF7},
+ {0xC879EA00E82A6071, 0xA39AA06A082D1399}, {0xF10788C899FA707B, 0x90ADE3480F682714},
+ {0x5CA65AA6885751D5, 0xD88CD7A1A177931B}, {0x91DA236543267BA7, 0xA2443FB9EF23EF91},
+ {0x6679118E222FD928, 0xEE6D82DA698D7F4F}, {0x568069193C925649, 0x69A1817F1B9B49F8},
+ {0x09A6B1CA9829E67A, 0x04F4BEAAFD85A58E}, {0x16800CA4663B8007, 0xD0591EA183033CF4},
+ {0x54D441A9BD1B7FDA, 0x1E44EDE4333C5B98}, {0xC729D7E1F7E19F1B, 0xA7EEB911B19B535E},
+ {0x12594FBEAB5E04B7, 0x259E722041520614}, {0xBDBE6A4832E40EF2, 0x93A171A267F6BBBA},
+ {0x570D35613D10620B, 0xE70334F070D670A1}, {0xFD429B75E121E041, 0xC5FE8D40FD6120D8},
+ {0x90EB1A3FE267FC3C, 0x7F5EB7CAC5E82E47}, {0x1949ECD591771B64, 0x3BAB7838FBABD75B},
+ {0x1D0F611F188A8668, 0x328670DDB536ACAC}, {0x8CB53398E71F78C6, 0x2764579622E60D8D},
+ {0x3295FB64143E6D33, 0xFE041C2C30AC57E8}, {0xBF596D76C91BF1D8, 0x885B09079CDC3839},
+ {0x887B479469AC00BF, 0x0C94254C06F05CB3}, {0xAA21CA32B29CA505, 0x0B60976964F479B7},
+ {0x7E1A5E5CF4E08190, 0x6415952B1DFAC558}, {0x7F15DD4776352B32, 0x8EB305EF0DCD982F},
+ {0x85B92BA51971AB82, 0xA36BDE433FDC339C}, {0x20C4BDD79C22FCA3, 0x7AEBE5A5A4E93B06},
+ {0x83D91C4AD400DA8E, 0xDF7B19C2215DD9B5}, {0x65F558894C99D62A, 0xD9E37B2604B75484},
+ {0x4580647B0160B7A8, 0xA50F6BD361655803}, {0x7B9ABE67AB408B51, 0xA4E886075C12B776},
+ {0xA776017ED84BAD04, 0xA3D0E5DB2B3285DC}, {0x0057CEF287495CB5, 0xF6D4259F8FE5C408},
+ {0xB771B33EF483E4EC, 0x6DF22C80721F3C1E}, {0xEF93F33A93BD1ADC, 0x226A0EB6AC33E206},
+ {0x54B7822C94448370, 0xF2039F48765DD568}, {0x26B2D7D383B0A288, 0x05A9490BB18E6C3D},
+ {0xCDBC494AD97A8197, 0x7AF205057A3E5F01}, {0x24D90A4C8AF708FF, 0x9CBD54E58A03352C},
+ {0x38FB9F3DE3DF1618, 0xB5459FF59402A1F8}, {0x227767A2C4B79BF5, 0xDEB36C0A1AA72793},
+ {0x00E9995E78FBB39F, 0x23DB5401D8D70536}, {0x864EF59948B77D48, 0x4727581CF5008F46},
+ {0xB413C4A19055EB28, 0xCAE572C3B31EE53D}, {0x12956E1E489F7CE8, 0x0A2ECA48CE9A63FB},
+ {0x74408E3DBCBBD1AF, 0xA6F896101B8D09AF}, {0xA654289F1D14E4F4, 0x5E25DC7F5BBDE6F3},
+ {0x08B6D5C17DE6A1DB, 0x317AFC8D821AC664}, {0xC3D70BA2C6B38AE5, 0xC286EAE0AE4F90B6},
+ {0x7DAE10306F184611, 0xC83854277FC7AF4D}, {0x30725687E15BB292, 0x19EE5B260622ABE4},
+ {0x0DAF1207E167EB92, 0x544AF9C69581E4F2}, {0xF5B974FE65600A5E, 0x2B186FDD9CDD54E6},
+ {0x52DCBAF880AB0D68, 0x24D6FFF08AB7EC68}, {0xAEA93C49264196FE, 0x494B58CD7D44C2A7},
+ {0xEE3F31327BF322B8, 0xBA666AB08CB7D2FD}, {0x6FD01AB6FACD197A, 0x9858B83AE903F063},
+ {0x35B1E43D3F5EA64B, 0x4B97D929B5EC6213}, {0xE9547B541B7EAFCD, 0x52F7ECD083C2F7D6},
+ {0x5AA8AF1F2B20E571, 0xAE9DF8D2441B30A2}, {0xE9E6541A31B24F9C, 0x76D2A8FAB174AE93},
+ {0xF5102920693767CE, 0x338BC948FA83D100}, {0x2B3D5240388D7CE9, 0x340AA9B815005029},
+ {0xA1AA3498FE3970CB, 0x9229BEE7F4AA0F7A}, {0xBC4C7D9AA875C47B, 0x3E70FA627AE06F9B},
+ {0x9199A60DA960BFB6, 0xF14A141CDFE5C9AD}, {0x671EAE4BB9C7D36A, 0x738C502B78E268DA},
+ {0x20EAA49DDAF46388, 0x9176FF89F533D3EC}, {0x1174D3413ADF128E, 0xB58E7C14FEA61B8D},
+ {0xB857CAB0316C28E6, 0x3E0C1A0E13BA2308}, {0x5A20DDF74B3B7EB5, 0xE0A89DA3C02E901D},
+ {0xE37F5E927FDD36A9, 0x0F0DBEF9CF591114}, {0xEA17B177AA8E29E8, 0xD732B304CF2B5FC3},
+ {0x93F93E72B74BF6C0, 0x1E1A1FBE05A616D7}, {0xCF4B69C13834E195, 0x201A7A466B4EA29A},
+ {0x2D8B75BB1592A09C, 0x5F56A420B0B670B4}, {0x3B434F43474DD266, 0xB4C4486828E29649},
+ {0x14F89F142891A0B0, 0xC3ADD19987F25EA5}, {0xAAA68412C4EB0F62, 0x3EF27F8314E325BC},
+ {0xC92E09E99423B648, 0x115881A41732B379}, {0x8FD073CC3E83BC57, 0xFED672C94A06366E},
+ {0x4E66AD4F5734A4FF, 0xDE222014555C6640}, {0x92A661F6B039E568, 0x9A484EAFF32BC34E},
+ {0x16BFB7B9D588EEFB, 0x932B81C0C79A8A2B}, {0x966C314F1418486C, 0x1046904AC480AC1D},
+ {0x72C4E8019AA3BF04, 0x02F7081F7E85BD2D}, {0xEEAD37C9A75CBD5A, 0x1F845C9590800256},
+ {0xF552E82D0EF4E2A8, 0x34B6E67A25D38AC5}, {0x8A43513D666649A8, 0xD7AA75C48AF05BEC},
+ {0x3A37AB926E96136A, 0xB2FBB066971977AD}, {0x234F2B70B41433E0, 0xA86F89904072C16B},
+ {0xD814602A8553FA48, 0x3AC1D1297D4895D7}, {0x56B5F54D41839B03, 0x85C45033C379F8F6},
+ {0x3FCAA36BE220533C, 0xCB62DE444A2D7043}, {0x3C5CD554A6D8C7F5, 0x453600D44AF0D187},
+ {0x182287BEB545ABBF, 0x7D2FF76B585253F9}, {0xE5D0AE81D46A6B4F, 0x713D68F812FC7BBD},
+ {0x5074D28575203C55, 0x564FC448CB431CC8}, {0xDC0EAFC3B96994AE, 0x6F307086A2D1EB9F},
+ {0x6CB2B9188A1330A1, 0x7E551771F17EC838}, {0x643670EC2038A29B, 0xC83F0B8974238335},
+ {0xA9ADBFBCEF651B34, 0xD86CB9DDE0993586}, {0xE3CA7F22A3469ADE, 0x5AD08E3F807EFD62},
+ {0x37AD18080DDDD03C, 0x6B47FB291DA460FE}, {0xBC9E8E02A6B78A82, 0x903511A31CF862C1},
+ {0x20B397BAB7C986A1, 0x33C3091372F39E19}, {0x10BB081EDEE9D09A, 0x3BAF20ECB43F598F},
+ {0x98D76F82B62B26EF, 0x495BA095B4CD2AA2}, {0x0329D0E77807FAC6, 0xE251BBD938DC4F89},
+ {0x75DBF12C9DE7AA6E, 0xA56544346A372F5B}, {0x0A143B438160FDDC, 0x4C584429FE61BE9E},
+ {0x65AC2D7B5484B1BE, 0xAE74180733B5E799}, {0x9EECC4135872891C, 0x2422F3915734ABCA},
+ {0x91C5A6C0C2D43C9F, 0xBA614EA34B0EF1AB}, {0x4AD8C7005F25A2B2, 0x44BDE54EFC7BE3F2},
+ {0x82D2C146C213F255, 0xABA5ECBB91C4F0E4}, {0x239894A4DE706A4F, 0x40B48D315F7C9A78},
+ {0x7AD849136BBD18CA, 0x8E7838710F30184F}, {0x27A00BDCEF7039E4, 0x72B2C63BDB6A5471},
+ {0xE1F0C5ABF4154AAA, 0x8879D976E2F5FCE7}, {0x725DDF5A01F87032, 0x41B6271BE3E4AF6D},
+ {0xE6A94763263E1A7E, 0x0426EB7796A58ED3}, {0x3EF207518E87579D, 0x9D2E05320C963B0D},
+ {0xB444BCA17A15247B, 0x7A5305EED28F267F}, {0xFB42811C13D3316D, 0xB8E1C4A075DEA97D},
+ {0xE676AD2AA31C93B4, 0x59F38E8705A32501}, {0x491EEBC946CB436A, 0xB491A4D9297B0AF5},
+ {0x674469368EE87B68, 0x125108D56C2A9ADE}, {0x25C88493C553B746, 0x6B977B77FE7A2773},
+ {0x80CB39522E9B0DA8, 0xD0FF29F93B1FAADC}, {0x39CF44F61B6D2EB8, 0x544570485106EF5D},
+ {0x59E3CDBC9D77945B, 0xB93A1FFF7F1A147B}, {0xF84A713997886C70, 0xB2187774C49005E4},
+ {0xF2B2D0C95673CB9F, 0x264315A909D80E41}, {0xAA2E15E84F48F394, 0x6DAAD98075CD16BA},
+ {0xC9E3E91D536B1FD2, 0xDDEA00C2E16AF3D8}, {0x90056F9B451E37E2, 0xDA5321205C82236E},
+ {0x63DC158A3347821F, 0x53F129DD12ED7DD3}, {0xF8EAA236146F01E2, 0x2139B4368B4B1050},
+ {0x4BBE7315D8CFA4FF, 0x0A651B7757A1463D}, {0xE7E6FBF4508E6D0A, 0x87DF85A03745D690},
+ {0xABCB0AD02043A24E, 0x65163A45134E2B53}, {0x211D2C5B0784903E, 0x0F246D7DB1F53435},
+ {0x367C418A1F03443F, 0x90C9DAE4DE049176}, {0x0F1C008D7A54386B, 0x0936825135EDE553},
+ {0xDAD30A3C4DFD755A, 0xADECBA82817DAB1C}, {0x1A8FE21D2E3C3114, 0x18B490950F069012},
+ {0x98B665639B72B2FC, 0xD6B1D2EF8882087B}, {0x85811F9477D28014, 0x5676F1E074585AFD},
+ {0x45B5D39EB5A26A13, 0x19C9E3A51FAA61D8}, {0xD30434CC90FC5296, 0x3F6BD52B03A6C7E8},
+ {0x3FA995F8CBFCCDA3, 0x9B6DE516D9D0F044}, {0xCADF6C70989CB34D, 0x118D74BA465DBF59},
+ {0x66849E8A08000807, 0xCC69E4EF47E0BD5C}, {0x0FA71AE994C41716, 0xF7B2D7C5D9E02E4E},
+ {0x02E5ADAFA7E9C119, 0xEA7EE43AF3D3939E}, {0xC03998EC576C5438, 0xE67F25CB0241E0E9},
+ {0x489582CB1F1679E7, 0x9D3DCCDB753920D2}, {0x92A87F4A2B76B6FF, 0x69C45502A8BD9F64},
+ {0xC1F8719BE44C7A41, 0xB15DF150F69A15E9}, {0xA758C4BC5F492271, 0x97D4286A98582C7B},
+ {0x7F88C3EA921BFF39, 0xFDFA7C1EEF454DDD}, {0x835148C97E591F4C, 0xB837F0D06D4AC17D},
+ {0x3BE801C90C377C82, 0x68BA827112921B72}, {0x9E1DD2B3536C4011, 0x277CA9AE55E20413},
+ {0x2EDD6A8E0A7E736D, 0xEE5BF902322CF342}, {0x9B2A02A2A137D62C, 0x6C2F504A27B60F4B},
+ {0x3B73856EB46C948F, 0x21468ED9625AAF7B}, {0x7E78240204B0FA90, 0x3DE02A94D46CA327},
+ {0xF29DA2CC5539DC4B, 0xE2E16473F1CE0657}, {0x52EBA20D13E0CBB7, 0x143E915C8D3956B0},
+ {0x6C8EE72C7C14F578, 0x8ECDC7646E55E90C}, {0xD0E2FE6FAD4CD806, 0xD2C4DBCCC6D87A4B},
+ {0x4D897D9E13E80E44, 0x7BED31D01DDAC4B4}, {0x71E4739E10069213, 0xAAFF05E646607865},
+ {0xD31F94FD3CD320C7, 0x71C4A977687D7633}, {0x752306E5B52AAFF0, 0xA182F6E9A06B70AF},
+ {0xEDE9FF153CF4EF9E, 0xA34DA24D253B2322}, {0x0FA9E5C932814FDA, 0x0EF5049CDE2C1873},
+ {0xC367A49C86C64E56, 0xCF0682C90C4F4428}, {0xB8E8AAE605F5FDC2, 0xA52203B6AA621C91},
+ {0x7FE47A8151585D41, 0xDA2B0E8226BE13F3}, {0xE3D99EA1548C2100, 0x1C181CECF9A218A9},
+ {0x985D50882EFB8CE6, 0x65E0FE3B941EA7EC}, {0x614944EBFF34E744, 0x3AD40D8DB4B9D8FB},
+ {0x5FC41A5DF4CC06A8, 0x48E56D66B8BCFFDA}, {0x3B74E28A4A679E3B, 0x4DCD16897200EC54},
+ {0x76E52B1B8DFE00CC, 0xECD12EFE45EC94D5}, {0x5A414B467E11123C, 0x3D08B9526B2FFFEE},
+ {0xE8BADF55B749C535, 0xEEA31E5C3B17078E}, {0x519AB64DFDF48EF0, 0x483463CD75EF4F36},
+ {0x5DED2436CD2FC747, 0xACECF469D31F1C53}, {0xFF3C8FD77A619BE4, 0x8D78D898D72A8B5E},
+ {0x503399E681A89318, 0x855625F1A20BE398}, {0xA90837A150DB94F0, 0x35F40AEF3F1EAC31},
+ {0x50E2DE7040774023, 0x30865E8A86C633AF}, {0xC376F94EFA5AA945, 0x98C30C015142492F},
+ {0x08A2B875A44098ED, 0x2726E1AA79BF33AF}, {0x2C19CD2BCA83FB78, 0x860AFB4068D73DC6},
+ {0xAD9FE47276B675BE, 0x3EC6EDCF64B2478A}, {0x1B55692E9BC74F36, 0x6C2E8F3D4C6D51B9},
+ {0xF77774C870E48354, 0xE5D7AAF4D8DDBE62}, {0x283F117A2955B09C, 0x77E7C6E65DA58E59},
+ {0xB093C8A64931F7D4, 0x495FAF6408BA687D}, {0xB835690A04893922, 0xDAB363371A3F24B6},
+ {0xDFF4D3AADC50322E, 0x187D72DD57E82FC8}, {0x18E466C5CE3BA5C3, 0xBF3451DB1C5160D0},
+ {0x5F5C09D31279ACF1, 0xADEB45819749F331}, {0x2236CC977EE42FD8, 0x0832436A86B6CE7C},
+ {0xA0FD8340F4E1D87B, 0x0D4D5DF2FDC20938}, {0x30E9336F6876CF31, 0x542C3D9B4DCB4AE1},
+ {0xDFD9576A73323ACA, 0x9A6B091561E3F59A}, {0xAD92B21887E3109F, 0x16DB564D694547BB},
+ {0xC03FCD0D843A5F68, 0x4B2EAB8D01C141E2}, {0x63F92528E6AD4246, 0x886D5A7675334F2A},
+ {0xB6A61317CD775765, 0xEA392C4FDCF4D97E}, {0x65BDF194CA2108C7, 0x56B37964BA885D66},
+ {0xBD77082994AD5E87, 0x59FED257C0AEF05A}, {0x96D970C3528EE7CC, 0x01E4EE88CDC0E98F},
+ {0x2E48E1BC52E50849, 0xE74CCCD2F6AB9F62}, {0xBD68552A020ABBD9, 0xCE8595F21259ABDD},
+ {0xD4D16532234A0F8C, 0x8358792D9F59EC5B}, {0x8FB3EFF6844264BF, 0x07621EFB6A5EE1A9},
+ {0x5782A94655611BAD, 0x485521D624B922E1}, {0x67CBDFA073A9EBDE, 0x3F45435AEB41D1C7},
+ {0x76A6D977FF78B132, 0x5BA6B8696AF09A39}, {0x3B67CD457A3D40EE, 0x8993CBCC6FF21FCE},
+ {0xC82DA2FAFBB8B2B2, 0xDCB8EB93F46CE924}, {0x6887FA1CCF09FD9C, 0x0D70854855D91923},
+ {0x09CE79B0FF80379D, 0xB926B83047AF017C}, {0x6F843263611DA4EC, 0x5BFAE23862DFD7D9},
+ {0x33AB3F027588107C, 0xD72D83C35140FD9D}, {0x81C244D919A48C30, 0x34D4447F5EAC97D9},
+ {0x1BA9D34982B5A73F, 0x239FE1E0FC0CC1AE}, {0x4C9754529CAEC71C, 0x9DA65AD3033A8075},
+ {0x68574BA4FDD742E5, 0x4C727441A155C0AD}, {0x829ADB2FF0442565, 0x3C16CBC7902B537B},
+ {0x4BE50E0781E664C3, 0x2A05B2A834FB8A69}, {0x90688873928B08BE, 0xE549D56E66B1A26C},
+ {0x2D8B826F6288B913, 0x77B875158F9D70CF}, {0x078BA7EE29459272, 0xD84FAAD28208CBE5},
+ {0x6095C024B9B76697, 0x574A509C536E310D}, {0x97EEF247ADB6B7D1, 0xCAC1D89533336B33},
+ {0x2DF4DCFEC2CA8AFC, 0x9FFD6DBE69772FE4}, {0x2D927DDF7EBC1266, 0x444F54A72D786C40},
+ {0x5128E845350EB513, 0xD65A5BDEB575FB6D}, {0xC7740FE462D333C6, 0x00786BE6CD8C650C},
+ {0x337C117DC1094C60, 0xAC38449256872205}, {0x503BDD872F1E7891, 0x9FD0A18256B475C4},
+ {0x520F1FDC3D7815FF, 0xCB98B4D61867B970}, {0x852CA403D608BF52, 0x040890A4D6EC3482},
+ {0x21E4D878577BD5E7, 0xF43C503063521C6D}, {0xA51AA4B015070251, 0x7DC6DC9163874DC0},
+ {0x978290D2A7855860, 0x36F148B2FB5F926C}, {0x5138E207F77F4AF2, 0x2529151E98114EDC},
+ {0x92F923CB2131858E, 0x26A128D91F912E1E}, {0xBCD33B6159A1186E, 0x5CA37D71CC6C8128},
+ {0x49055F527EC4F301, 0xDF557287F33B8C93}, {0x79B90DB09C530956, 0xB9D22508D34515C2},
+ {0x0D69E93AC1455951, 0xE3856EAF08140302}, {0x61EA9DAA359ABAFA, 0x6E6B6F42E2ADF859},
+ {0x5A16E42E02D60C56, 0x85D930970B3AF1B0}, {0x20140860A3A9F9F3, 0xCA6E63920ADB4C7A},
+ {0xD6F6FDC1DC7A2122, 0xFFD6411F9F2FA8E5}, {0xBBF8C84F8D57DF09, 0x254D7A45D3F26DA5},
+ {0xB1047307F6E3DDB1, 0x046ED54EF6BA497A}, {0x668756AC1BC44116, 0x93BFE193C23A0968},
+ {0x7798C66B6509625A, 0x7CE3AE726959D2DB}, {0x4FE2AFBCEF3F0BA9, 0x81095BE5C3021516},
+ {0xA76282959CD8156D, 0x75000EC15B8ED70D}, {0xB963FBCB2CF33F52, 0x965DC2FFFB99E04A},
+ {0xB357087C2D26B7CD, 0xD3D15B9792C69F19}, {0x6F455E8886A5CF86, 0x0885632CF24D8E7C},
+ {0x30638EA493055D5E, 0xF2D84109DBE625DC}, {0x8EC116F63B4E927D, 0x55BA75B5C183804A},
+ {0x79B23493E0E44FEE, 0xD8C8F499F1DB3B85}, {0x0D18F4CF4CF568D8, 0xF0AA67CDAA9225EE},
+ {0x22AF9CA4F4FF5BE4, 0xECC77D83DF362E8C}, {0xB44E0A1917680837, 0x21649181C29EBC4C},
+ {0x52868543615624FC, 0x0B0227337FC796AC}, {0x319931B2849D9836, 0x18F8BEEDB2ACB1AB},
+ {0x0A73CDFF0B39C7F1, 0x9FFED76C2B82D62D}, {0x2E1D45D6FC87D18B, 0x2AA262483B877F72},
+ {0x23E04444CD04B178, 0x8053E84114586292}, {0x81ECEBE4FBA6D4A9, 0x14FACAB55D1BF15E},
+ {0x4832A9DB462C6AFC, 0x44D880D24BBB67AB}, {0x053084A8A823B68F, 0x3BEC0B4FEC1743F0},
+ {0xD92F35354D02D8BF, 0xC49980654FD02223}, {0xF103DE8DB166F312, 0xF7D2215CE06C5459},
+ {0x9698E41946E8F6DF, 0x14CD0D1B33614F7A}, {0x615D7AFFD333AAE4, 0xE5EA3743BABC8649},
+ {0xEF22C1632C167E79, 0x0EAC67612C65B2A1}, {0x030579017765BAEC, 0x1609D8CC893EFB0E},
+ {0x926D79A84F7D5333, 0x227C06472D1708C0}, {0x2127B0B84C9C1E59, 0xEFCE1EB793865980},
+ {0xDB97737B4688C22B, 0x6B06B1791CCE36CD}, {0xE797704D29A1C6D5, 0x4BDF96369D62825D},
+ {0x8381FB6779EF38D4, 0x32A7AE1AD0717886}, {0x7B2A8EA87565C909, 0x235EC19A4806F340},
+ {0x2C157FAFF834C26D, 0x4706E22426BCC44D}, {0x2A276185CFD173D3, 0xBF8D537F3D5B7E2F},
+ {0x3D04D5F5948F0CBC, 0xC687E383FD33D07A}, {0x77676F9611BC0F77, 0xB560E5E1986110D6},
+ {0x66A8E3B01F3EE3B3, 0x761E8C2D96CDD5AE}, {0x4AF9261DFF0CEFA3, 0xE15A387A6E019C81},
+ {0x1A18FDEADC3F0941, 0xCC0A9ED7AC0E26D1}, {0x33759868863BB53C, 0xDF518DA39F72D1DB},
+};
diff --git a/gdb/cheri-compressed-cap/test/decode_inputs_64.cpp b/gdb/cheri-compressed-cap/test/decode_inputs_64.cpp
new file mode 100644
index 00000000000..51421953c7e
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/decode_inputs_64.cpp
@@ -0,0 +1,2509 @@
+#include <cstdint>
+
+struct test_input {
+ uint32_t pesbt;
+ uint32_t cursor;
+};
+
+test_input inputs[] = {
+ {0x14B1CE39, 0x7D4625CA}, {0x97BD62BC, 0xB43A7561}, {0x3365010B, 0x9E8800AC}, {0x315F25D8, 0x87DCDE3D},
+ {0x1AB768A0, 0x0C58DFE0}, {0x23F2BC0E, 0xA0083F75}, {0x5690A9EE, 0xF6326A21}, {0x2A7F2DDC, 0x65D069DB},
+ {0x1C698DCB, 0x13717FA0}, {0x44DBD319, 0x6605E69F}, {0x250CC4BF, 0x3F6E8ED4}, {0x72F49A07, 0x26677D7A},
+ {0xE6F0126D, 0xC9DA9261}, {0x07B90574, 0x5C923C28}, {0x67D74ABA, 0x270D2429}, {0x267FCF0F, 0x5A7111FC},
+ {0x8F2CB5E0, 0x88450DE4}, {0xB88D863F, 0x8F5A4BB8}, {0xC158326C, 0x5B568959}, {0x3DF1F3DF, 0xD64F0693},
+ {0x1B8CEDB5, 0xB40FCBAC}, {0x198547DE, 0xA481590D}, {0x95AB0CD2, 0xAE6275B0}, {0xDC95CAE3, 0xEF968E5B},
+ {0xF1A4A42E, 0x2D72D00A}, {0xBF61CA8B, 0xF1A11DF6}, {0xB120B152, 0x789C15ED}, {0xD281FEF4, 0xDC29F000},
+ {0x9D115560, 0x49D94676}, {0x1CD8C891, 0x5EECDAB2}, {0x010A2A53, 0x189925C1}, {0xAD01F244, 0xC233FEFC},
+ {0xFCF6C333, 0xB7F5CBD7}, {0x1F898E4A, 0x9E04426E}, {0xCC5F03B2, 0x4F9FBCBB}, {0xBB016FAF, 0xC01A4E37},
+ {0x1FA1EF97, 0x998D79D2}, {0xC33258DF, 0xF70BCA39}, {0xC676D2EE, 0xA4B8AFC8}, {0x1152594D, 0x42D06A76},
+ {0x5FF9E61E, 0x9ACEABCE}, {0x46C2DA68, 0x72054984}, {0xCB1631F8, 0x835E6BA4}, {0xAD8100E9, 0x3FC109D8},
+ {0x1D09FFCA, 0x9627572C}, {0xCEC838AB, 0xA0D5B5F4}, {0x61B67C21, 0xB6C081D9}, {0xD909DBFB, 0xFAC10D7A},
+ {0xE1D3CE3F, 0xBE5992D8}, {0xB2DF5B7B, 0x66ECD1A5}, {0xB0B6C80A, 0x8E1EEF40}, {0xF99B7E69, 0xC7598E8D},
+ {0xF60EDFBB, 0xC9B9EE95}, {0xDC80F9E0, 0xE745C199}, {0xC25EA73C, 0x9BF3255B}, {0xCF444C68, 0x87F0F802},
+ {0x9DF13EF1, 0x3488DD22}, {0x1063337D, 0x29F705E3}, {0x53631B79, 0x3631960D}, {0x086E942F, 0x94DD69EE},
+ {0xB4209D3D, 0x008421D4}, {0xC0DEF0B8, 0xCFFF9DF8}, {0xEA8DB753, 0x19DE325A}, {0xCE91D93F, 0xDC4D77EF},
+ {0xF34FA531, 0x0A6AE74C}, {0x2B593B4E, 0x0D2076F1}, {0xF767E06A, 0xD3E6948B}, {0xFEC66BAA, 0xB3AB68F8},
+ {0x40CBE1D6, 0x19831D83}, {0xC9AE7898, 0xD1F53FC4}, {0x16BB3F87, 0xED0059C0}, {0x0895D28D, 0x2F0B41F8},
+ {0xB2D4AB67, 0x78F94020}, {0xA1B09869, 0xA33D8E00}, {0xD8F516C8, 0xDF6BDA0B}, {0x1B6EC52D, 0xD339AF45},
+ {0xBAF32A0D, 0xAD626747}, {0xC2D73F59, 0x2020ECF7}, {0xEC49468D, 0x13ADB691}, {0xFCE2FFF6, 0x8D2B45A3},
+ {0x51BA159B, 0x718EC185}, {0xEE97B49C, 0xE330716A}, {0x2605EE88, 0xEB210077}, {0x37A38B3B, 0xE8EE10CE},
+ {0x581B02F5, 0xC0FF84A0}, {0x44EACB0E, 0x88E6D83B}, {0x4AE8B97C, 0x86D22ADD}, {0xD92DBF68, 0xFEC1F56D},
+ {0xC597037F, 0xDEDECB27}, {0xA9A841F6, 0x58924ECC}, {0x6BBBE44D, 0x1C642156}, {0x48878D65, 0x4ABAAA36},
+ {0x72469265, 0x58565DE6}, {0x7132BF52, 0xEF44ADDC}, {0x371E3005, 0x14FE9429}, {0x2BB21D5E, 0xB6226B02},
+ {0x969740B2, 0xD6A3A408}, {0x16CA6E93, 0x7CD976C0}, {0x5E107430, 0x5EC081ED}, {0xA0E6FA82, 0x7DF2E19E},
+ {0x3B40590F, 0xC1D7A43E}, {0xC394962D, 0x60ED590D}, {0x9C02F321, 0x4A46DD3A}, {0x5C6CAC88, 0x95BC4DD1},
+ {0x0E5C4A29, 0xBAE96E0C}, {0x1BFEA9E5, 0x377289FA}, {0x5D3B010E, 0xD3DD2E48}, {0x283BE545, 0x8DAFA5C0},
+ {0xE5F3EA59, 0xB61C33B4}, {0x8CE6CB73, 0xD2E788C1}, {0x268CACC2, 0x0CDAEC95}, {0xFD284965, 0x9F5F23FB},
+ {0x2598114F, 0x256DE40B}, {0x0AC206E6, 0x64F982FD}, {0xBD6D7640, 0xDF5BABE1}, {0xFD18559C, 0x0C219F5C},
+ {0x6153914B, 0xFFB20B01}, {0x05928FBF, 0xAABF2B01}, {0xE1397B4B, 0xA830C186}, {0x3359A485, 0x0EC9C5C9},
+ {0x3B64542F, 0x7F3DC900}, {0xF5C98300, 0xDF21EA9D}, {0x60DFFA2A, 0x170CB7D9}, {0x921C554F, 0x356582CE},
+ {0x4D411E79, 0x14C408B7}, {0xAFC6B62F, 0xC2E7FBFE}, {0x2CCF56EE, 0x7A1B8673}, {0x84552044, 0xD3101245},
+ {0xE3FCC9A4, 0x19F42065}, {0x93D695EF, 0x32EA84A5}, {0xF2176E10, 0x64E23FE2}, {0x28254E5B, 0xEC7060F9},
+ {0xA08EFEB4, 0x3B4E6D6D}, {0x5198FC95, 0x796ED56A}, {0x45FEB0EB, 0x57B943BD}, {0xB02426B8, 0x727FCD91},
+ {0x15EB9F41, 0x9756B3B4}, {0x916EFBC1, 0xF2E62AA4}, {0xFD4170C7, 0x48E2822C}, {0x06AD1F3C, 0x61E9EE7B},
+ {0x2BEFBC4F, 0x18225AEA}, {0x0BE6BAEB, 0x1577D5C6}, {0x73BE5814, 0xDCC934AF}, {0x55D9A13C, 0xCC4C9C2A},
+ {0xAE109C7D, 0xFA72096F}, {0x65133BC0, 0xFD8FD8BB}, {0x7A1A04E1, 0x31673CF9}, {0x3D78BCB0, 0x36C42E79},
+ {0xD7E352F3, 0x9530AE9E}, {0xD3E05D8F, 0x297445F5}, {0xA7664295, 0xC748DAF6}, {0x613AAEA1, 0x30B31D82},
+ {0xC2B860EE, 0x5F7FA831}, {0x1F5971B1, 0xE74B1AD0}, {0x6EABE9AD, 0xBCA72642}, {0x181AE7B6, 0x5ACA7BAB},
+ {0x710C94E0, 0x86A5C359}, {0x471C26B9, 0x940803B8}, {0xA3030ED7, 0x7801F94A}, {0xA974B901, 0x315CEA4A},
+ {0x63F78A53, 0xC76D6399}, {0x6FF58DAE, 0xF9B86585}, {0xB04F3AE7, 0x363735A7}, {0x44BFAD67, 0xCA36F852},
+ {0xD7A6D868, 0x9273F027}, {0x4753D6AC, 0x6D74922A}, {0xDF1BE250, 0xBA61B72D}, {0x370FC62F, 0x7DCF9331},
+ {0xDB2AD885, 0x3EDA0A5F}, {0x4F69C0D0, 0x0F8E3D3D}, {0x3C15471E, 0xD72F72DF}, {0x39EC3FAE, 0xAA244A5F},
+ {0x2F86107D, 0xD10E3561}, {0xD44EB342, 0x8DEFA865}, {0xEBFA5B33, 0xD7F27922}, {0x813FAF7E, 0xE0893F8F},
+ {0xF5380399, 0xAFDD4591}, {0x8904D06F, 0x3F9F9FE5}, {0x7C99216E, 0x42A9EA82}, {0xF6722C51, 0xDC8AF60F},
+ {0xB00B518E, 0x807ED9B7}, {0x413DE04C, 0x6BCBE906}, {0x0A5508AB, 0xB1CD00F1}, {0x370503D0, 0x3081095A},
+ {0xC08DE79E, 0x67039A04}, {0x679772D7, 0x69771024}, {0x644AC1CE, 0xA799808F}, {0xC412766F, 0x526A1A47},
+ {0x5B047639, 0x41951F60}, {0x10409EC8, 0x54130838}, {0x5801FF2D, 0xD75EBB39}, {0x24318105, 0x85DF280D},
+ {0xC088BE32, 0x9A30D14C}, {0x489D053E, 0x20E8FCE6}, {0x9B001C1B, 0xE47A74B6}, {0xC2093F89, 0x7CECAFF3},
+ {0xA669AE8C, 0xCF8C3064}, {0x06C22BC9, 0x34744D2E}, {0x1F07EEC3, 0xCB69C740}, {0xC2A0F95D, 0x4B2321C3},
+ {0x4E4D4CE2, 0x280E0CBB}, {0xFBE922E5, 0xB9C764E2}, {0x7A780632, 0x2B826F7F}, {0x7C909847, 0x172ECE33},
+ {0x002BC8C3, 0x42FA6508}, {0x45E84D31, 0x3E13FF59}, {0x4BACEEBB, 0x8C4A9B4D}, {0xC3BF45A7, 0xE3284846},
+ {0x254C0DE1, 0xB39B1271}, {0xB663074C, 0x11C8A658}, {0xACCE6660, 0x8F35A948}, {0xB4084324, 0x6FA54AAF},
+ {0x424DB0B6, 0x564E3D12}, {0xABF44F9B, 0xA6C7743E}, {0xFBFE3BF1, 0xA170DC33}, {0xD74EBFB7, 0x736F3669},
+ {0x23F91503, 0xB6E9100F}, {0x99B61F87, 0x197A0825}, {0x65D3EB33, 0xF68C42C4}, {0xBD6E43DC, 0xD5DA3B4E},
+ {0x6E733E12, 0xEE93E2F3}, {0x46589C8A, 0x1F590ADF}, {0xFD4C309B, 0x6D1798A6}, {0xFE34D38C, 0x00091C32},
+ {0x68B987D1, 0x10AB729C}, {0xCAF78000, 0x978B6520}, {0x7ECE2ABF, 0x179EE3B7}, {0xB4093E93, 0xB8B72EF6},
+ {0xD32B4406, 0xF01551C4}, {0xA157080A, 0x87948628}, {0xF0987769, 0xB725735B}, {0xEB8A3DA7, 0x4487F4B8},
+ {0xDEB4D956, 0x07F0AB0C}, {0xBC1C4FC5, 0x798E819D}, {0x494546D2, 0x2FD0DDD9}, {0x7A0BF3FD, 0xA4E10994},
+ {0xFA06269E, 0xC8D0E40A}, {0xE367F83A, 0xA26C17B7}, {0xD718866F, 0x49BA53A1}, {0xE041B53E, 0x41988274},
+ {0x52B91945, 0xE8FDA61A}, {0x62B47B1E, 0x0FB50EB1}, {0x47F317B4, 0xBC67ACD5}, {0x43315FB1, 0xC8FC1A85},
+ {0x948D6F92, 0x57738754}, {0x33A0CC73, 0xD4FE7AA2}, {0x16A6C5DA, 0x48AF5296}, {0x49D5B040, 0xEC33C7D9},
+ {0x109EDB08, 0x93AAF2F4}, {0xC28FD769, 0x4F899B56}, {0xA1DDB89D, 0xF7582ACC}, {0x014257AE, 0xCCFFB29A},
+ {0x1A51172D, 0x7EB307F9}, {0x0EEB9953, 0xCAF3D8EC}, {0x483AFA91, 0x3CEC6A15}, {0xCEEBDAB9, 0x4A1E5B8B},
+ {0x5F27AB44, 0xC5613FF6}, {0xADFE685F, 0x8F1DD0F7}, {0x7D4D4DBD, 0x6C97AA5C}, {0xB4E4C09D, 0x8F8A8610},
+ {0x92B168FB, 0xB3CAD010}, {0xB97FA9A2, 0xCAAB03CE}, {0xD9950295, 0x55A87D9C}, {0xCA328DA3, 0x86A57C84},
+ {0xA223A0C3, 0x65AF2609}, {0x20FCC69D, 0x0E12CB46}, {0xF1302766, 0x5561F894}, {0xCAABC3CE, 0x6FBDB59B},
+ {0x749D8451, 0x71BE3EDD}, {0x4F620400, 0xE487A354}, {0xD8398FC0, 0x48B6448A}, {0x894C940E, 0xB9501E50},
+ {0xBFA23C44, 0x268B5446}, {0x1613886F, 0x2E2BDC6A}, {0x1FD64750, 0x65F71419}, {0x637AE9B1, 0x54EB42B2},
+ {0x674D1230, 0xEBC360FC}, {0x12F4FC6C, 0xF87C800E}, {0x880F5D07, 0xCE409557}, {0xFB80B146, 0x4AA9A1D4},
+ {0x7C115EFA, 0x759BED47}, {0x305D408D, 0x3ADCEEA0}, {0x321AA530, 0x8CB1BD38}, {0xEAEF89D3, 0x1728471D},
+ {0xA0125B91, 0x874B1503}, {0x621E00DA, 0xC1EF26CF}, {0x36DA7ADF, 0xDA9D605D}, {0x3AC70A4F, 0xDB955775},
+ {0xEEC093BA, 0xB8F764AA}, {0x77491306, 0x7C9740DB}, {0xBE843943, 0xC8BF9CD2}, {0xE79A991C, 0x3120F092},
+ {0x3060BD99, 0xB4A4F1B9}, {0xEF59514F, 0x48C930A7}, {0xF715FA7A, 0x05770A5A}, {0x02D21F16, 0x7046DE82},
+ {0xE0F38724, 0x30AA342B}, {0xF18A65DA, 0x76A9E6F7}, {0x7BDAC91C, 0x71C32B13}, {0xBB32A288, 0x94E87A9F},
+ {0xF142ECD5, 0xBE03CB1E}, {0x70AA7CCF, 0x5EC7EB66}, {0xB3D989F2, 0x052F363C}, {0x39A843B6, 0xC103A080},
+ {0x227A995B, 0xD5E8BB5C}, {0xE437CEA6, 0x9A60ED69}, {0x4E2B7BDE, 0xB708A256}, {0xF802265F, 0x452E63C4},
+ {0x84AFB513, 0x30FA3812}, {0xAA29BEEA, 0x634983F0}, {0x3C833F3B, 0x0DCB00F2}, {0x75EC9980, 0xA61689CD},
+ {0x83276FE0, 0x61C9F1BE}, {0xF775BFEA, 0xDEEA6816}, {0x88315F90, 0xCF4C01CE}, {0xF507F12E, 0xF520FE50},
+ {0xD11189A7, 0x7ECB6A18}, {0xD2FC0014, 0x28EAA3C1}, {0x17209486, 0x093B0123}, {0xCE5F7992, 0x7E03C496},
+ {0x5870C3A2, 0x70F1DF92}, {0x4F985DD0, 0x30662BC5}, {0x8EE38839, 0x8C9E5B15}, {0x57BDA45F, 0x2A754F84},
+ {0x508CF7E8, 0x2A6955D1}, {0x3BC25866, 0xEB9FCC41}, {0x8A86B515, 0x9146CE5A}, {0x6FF1CFD1, 0xF23C4B52},
+ {0x61400DDD, 0x3C55B16B}, {0xB940490A, 0x17289088}, {0x4D0B4BB5, 0xEFE69F87}, {0xF8B0ADF0, 0x1E707D08},
+ {0xBB30DEEF, 0xCC2717E6}, {0x850B51D9, 0x66EF8CC0}, {0x34A506C8, 0x3AF806E0}, {0x358C0C98, 0x1E046FE5},
+ {0xE15D0B46, 0x5502442E}, {0x7FB8D828, 0xF4536E49}, {0x1FD70BCD, 0x45A2BAD8}, {0x685FF70A, 0x1B8818D7},
+ {0xA0DDDECA, 0x62D0E87B}, {0x104CEC87, 0x0A0CE05B}, {0x5083BA7B, 0x73F0ABC4}, {0x631C0B02, 0xEAE0C719},
+ {0x3740053F, 0x253320DB}, {0xCF2FD556, 0x0BCAAED8}, {0x6CA653A4, 0x59F69B6A}, {0xB27F9509, 0x0DD60F0E},
+ {0x0BE502DE, 0x6C940514}, {0xC18002E9, 0x83C123C5}, {0xC3FBB409, 0x1FF5B39B}, {0x521A874E, 0x857D6CF8},
+ {0xBC84C516, 0xF40B3B4B}, {0xD48784B6, 0x48E25AD9}, {0xB9E45B73, 0xEAA846FD}, {0xC0E2EE6A, 0x1F5136C6},
+ {0xB84DDCE2, 0x3D75DEA7}, {0xB56642A7, 0xCA6A8783}, {0xF60AEF02, 0x8F3AF233}, {0x597E760D, 0x19D5F81D},
+ {0x616926CC, 0xC8A9ABEC}, {0x079B31C2, 0x32821B0B}, {0x84106BE8, 0x39A43C10}, {0x487E2D9A, 0xDE99139A},
+ {0x8F7FE81F, 0x21AD3533}, {0x06381EB6, 0xA03354A8}, {0xBB6A771F, 0xB6617571}, {0x5EFC8E94, 0x9B3E2311},
+ {0x0A1267AD, 0xCA6E9F0D}, {0x2BC261FF, 0xC6F229AE}, {0xBAE3D7D7, 0x425FDD5F}, {0xC8ECA29D, 0x8910DE26},
+ {0xDB958A60, 0x24849C8F}, {0x49706993, 0xED2C606F}, {0x19FC0A56, 0xE87BD7C7}, {0x1694F244, 0xB1398477},
+ {0x225500B8, 0x93ADC130}, {0x46244D98, 0x48FB0DE0}, {0x920CD2D2, 0xA4549A65}, {0xB1A62C57, 0x4633B9CF},
+ {0x0ECF1ACC, 0xA10D5D0E}, {0x4671AC8E, 0xF38AF39D}, {0x95B9845C, 0xE5EA102A}, {0x96C16B96, 0xC7F433F4},
+ {0x824373B8, 0xE8D7929E}, {0x532D8709, 0xBA9AD296}, {0x3A6FB3E0, 0xF65D944E}, {0x5ADEE6D1, 0x4A0A49A7},
+ {0x5D596A92, 0x350F7060}, {0x9757340E, 0x378B8799}, {0x5410B982, 0x627F995E}, {0xF83275CF, 0xADA8081C},
+ {0x80535912, 0x83C1FF5F}, {0x57DF7BD5, 0x32DC0870}, {0x3EAC0F29, 0x0B8372DD}, {0x9ED758D2, 0x57EA57BF},
+ {0xF1EF8134, 0x4EA84B87}, {0x33BB722B, 0xEBABD0A3}, {0x558546D4, 0x1BE9E692}, {0x03944504, 0xFB2CDD6E},
+ {0x390650B3, 0x4F29E251}, {0x4B0DA376, 0x1EF4F0CB}, {0xA33402DD, 0xD2A13E9E}, {0x03B24FF4, 0x8068CCA6},
+ {0xAF69602D, 0xDF5A8676}, {0x0826F52C, 0x15054DDC}, {0x7743F0F8, 0x658F4DB8}, {0x1CB231F1, 0x2D4F920C},
+ {0xE2BE690D, 0xA277F1DD}, {0xFDF5227E, 0xCA14E688}, {0x878E0F72, 0x95BB5043}, {0x63E22AF5, 0x74A027CB},
+ {0x75581EFA, 0x0B8BB943}, {0x0D8225B8, 0x8CF3E1F9}, {0x0FFAD93C, 0x6407F9EE}, {0xDED078AC, 0xFDB2833E},
+ {0x3DFDC81D, 0x2792ECB0}, {0xAF22A3E2, 0x7471210D}, {0xC0BBA188, 0xFD4D7147}, {0x39B04066, 0x5BC89C83},
+ {0x19B9DF0B, 0x47A73463}, {0xB9F5FD8C, 0x92323F91}, {0xB8F72740, 0x19591D49}, {0xF63ACEDF, 0xA8CC1596},
+ {0xB596A204, 0x4E74077C}, {0x19E3D2AE, 0x9923CB51}, {0x20ADC79A, 0x69A6B326}, {0xDFA5028F, 0xAF36125D},
+ {0xC11CDCAD, 0xF071192B}, {0xFA4B6ECE, 0x5A553AE9}, {0x4799E65A, 0x1073D812}, {0xD630A065, 0xA7584989},
+ {0x8DF84D39, 0x1F588451}, {0x758BC727, 0x7777BDF6}, {0x92BFD591, 0xF5644B9A}, {0x9162C169, 0xA838C31F},
+ {0xB55302DA, 0x434D366E}, {0x779C55BB, 0x62905BC5}, {0xC4102A3D, 0x5F449543}, {0x63BC6D9A, 0xF3C14D46},
+ {0x062FA1C2, 0x72A8A626}, {0x867A1BEA, 0xFC030456}, {0x2C7B0AAF, 0x337F07D8}, {0x27816EF8, 0x6AE19BF2},
+ {0xD3149799, 0xD27C932E}, {0x89524FA2, 0x4A439A94}, {0xE10FF593, 0x0967CC96}, {0x994B9FA2, 0xF831BF7B},
+ {0xFF9E9777, 0xD5C38351}, {0x97FCA1BD, 0xD96A6CC2}, {0xF7FE8A83, 0xBA9F25A5}, {0x9EEFA216, 0xFD87CA08},
+ {0xB4D2541D, 0x66E3495C}, {0x84E01DC2, 0xB9D2823E}, {0xB686CD75, 0x2A44F92A}, {0xE247F55D, 0x6156E079},
+ {0xC9EFDABB, 0x8E205FE8}, {0x0D8841F1, 0x4580B54C}, {0xF0BAD11E, 0x2CB45653}, {0x256EE72B, 0x4F4D5A02},
+ {0x92987860, 0xAEB84D6D}, {0x5F652B01, 0x0FAB8337}, {0xEE26CE35, 0x4240463D}, {0x389BA289, 0xC8152589},
+ {0xC6CA62EE, 0x557884A6}, {0x66653103, 0xEAD5CE9F}, {0x2A19B41E, 0x049E0A8E}, {0x303884ED, 0xC12F6F1F},
+ {0x34781AFA, 0x9DF52710}, {0x029487B7, 0xC829AEDE}, {0x0A1EEAD8, 0x987AB573}, {0x25E4865D, 0xA82F130C},
+ {0x21106791, 0x7A99B131}, {0x1268EA64, 0x4D9F4ADA}, {0xCF147FD4, 0x064D3C78}, {0x1DAE6C1E, 0x427B0F44},
+ {0x0B7569AE, 0x4EEAA787}, {0x3ACAE513, 0x622A2637}, {0xAB1B7FD0, 0x25ED6F49}, {0x08531DFD, 0x1B536DD5},
+ {0x4854F548, 0x7F7C2D92}, {0x5105DC97, 0xF6B09CBE}, {0x9BF52278, 0xFF314CFF}, {0x1B032A31, 0xA39F14F6},
+ {0xF5B4F747, 0x28C7BFF3}, {0xAD1EF16B, 0xE11FECD3}, {0xC7F779C5, 0xC5201B1F}, {0x59DDA5DD, 0x4B027CAE},
+ {0x7FA896BD, 0x94BFD999}, {0xDB28F82B, 0xE8DE5D70}, {0x79BDBE18, 0xBA100ABC}, {0xD803A39C, 0xD366E283},
+ {0xF359ABD6, 0x0F539132}, {0xA29D12C6, 0xE0E8F10D}, {0xEE074C7F, 0x50F3AF5B}, {0x3FADBD34, 0x7003924D},
+ {0x44FC4272, 0x6F888A1C}, {0xABD320AF, 0x9E90AAD1}, {0x06907F66, 0xA5D2C18C}, {0x7E3B7C80, 0x8918BB23},
+ {0x44D6A9F5, 0x0DB146B4}, {0x775806C6, 0x5F3BE35C}, {0xB2CDF903, 0x7FEC15C8}, {0x91615B8A, 0x42701CD0},
+ {0xFE1AD496, 0x89663A3A}, {0xC34F765F, 0xEECE2C88}, {0x4A541C79, 0x026E6B15}, {0xE4EB1CC9, 0x38A14130},
+ {0xCCDA3FE0, 0x3598BBAA}, {0x9DBD9148, 0xBF73C83C}, {0x17DBC826, 0x9AEFBFDA}, {0xC7DE53CB, 0x5CA94234},
+ {0x8E1785DA, 0x0C162814}, {0xF423D8B5, 0xB3AE692B}, {0xC3317EC3, 0xFA912260}, {0xA518E1E7, 0x444DF732},
+ {0x571D562E, 0x7EFB1D98}, {0x2D6C98DE, 0x6DA38587}, {0x8532F2EF, 0xEAC86379}, {0x68CC1513, 0x00E67967},
+ {0x85D5E017, 0x1203FB29}, {0x9D4013C7, 0x0BC5C353}, {0xAC1A0DEB, 0x2576D845}, {0xFDB5DD2B, 0x7F957BB8},
+ {0x941BDEEF, 0x03397CCE}, {0xD9197B70, 0x03B73464}, {0xFFDC90FC, 0x54B52322}, {0x6CA14073, 0x0B5742CD},
+ {0xF4599B59, 0x23905156}, {0x865BD350, 0x9C577C27}, {0x0AD330A0, 0x1FBC5D55}, {0x6CA43CD5, 0xBEEFF94C},
+ {0xC21D9EE6, 0x5003AD0D}, {0xE8B7792E, 0xC439BAE3}, {0xBFE86063, 0xFB709119}, {0xC8006A74, 0x9C1E9862},
+ {0x2B451C9C, 0x6A7EE1EF}, {0x0C0FF519, 0x0057B1FD}, {0x7E811B48, 0xDB8E6B22}, {0xC17EC4D9, 0x94B42368},
+ {0xC4599A7B, 0x792BAA3A}, {0x9BB0F709, 0x969F3BCF}, {0x1B020F37, 0x1ADB7C80}, {0x5B05321F, 0x8D87EC40},
+ {0x9167477B, 0x4E2BD0A0}, {0xC6A8C362, 0x6FC1E241}, {0x9CAEC4D4, 0x4E28F65A}, {0x92C1344C, 0x5E270533},
+ {0x7205E0CF, 0x747F3450}, {0x06385648, 0x440308D5}, {0xF82F2028, 0xC12636A0}, {0x2444FFD6, 0xC4E8CAC0},
+ {0x4EAD050A, 0x6CB7642E}, {0xF60CB5AF, 0xA6ADE437}, {0x41A59708, 0xC9044E4D}, {0x61C7FA83, 0x246CF102},
+ {0xA3B58E4D, 0x383F32F9}, {0xB34D94F1, 0xA5028C74}, {0x02D7DE1F, 0x4C0755F1}, {0xDB2061C0, 0xEED12CFE},
+ {0xB9CB5203, 0x71F01B89}, {0xF0347B45, 0x4994000A}, {0x1D1F3C02, 0xDF795C07}, {0x336BF61E, 0x04DE10ED},
+ {0xF57993F5, 0x82BE0E31}, {0x4AEBDB44, 0xE09333C2}, {0xA96BAF9C, 0xFD3DBFB9}, {0x7992E53C, 0x0F3B1E34},
+ {0xF9482DC4, 0x4D977DDC}, {0x8ADAE7B3, 0x501BEE0B}, {0x8B175FAC, 0x61DEBD1D}, {0xBF5EC3AC, 0x7FE9CA5F},
+ {0xD0465DE1, 0x4DA2ACE5}, {0x6A3D20FA, 0x7AD7F28F}, {0xB64950F5, 0x5CF8B916}, {0xBEE003FE, 0x8BD0D574},
+ {0xD04C4054, 0x9EE4772A}, {0x76C50550, 0xEECE5677}, {0x06D8CB99, 0x9AF92CAC}, {0xF274A0C7, 0xEF66A008},
+ {0x826EF8F1, 0xBAE73D8B}, {0x2C43C4B6, 0x560E636B}, {0xBE85BA1A, 0xCE5C5887}, {0xA5D7FB44, 0x0DE689DD},
+ {0x168F7421, 0xE92B4476}, {0xDF8AD432, 0xF9424D19}, {0x23563300, 0x93B1D73C}, {0xEA3E7ED4, 0xF1673DDD},
+ {0x396CA849, 0x54C64A7F}, {0x74F46943, 0xE18B7829}, {0xDC0AF38C, 0xD5DE3B2B}, {0x9A9B30AF, 0xD67E2B15},
+ {0xBFEBA17A, 0x85B7ECEB}, {0xA253898E, 0xFFE7FC37}, {0x39BDD931, 0x561130E5}, {0xFAAA784D, 0x1D81E7E8},
+ {0x77C950E4, 0x07E5F248}, {0xCC8759B4, 0x79DBA342}, {0xAD9A5FF9, 0x81534432}, {0x62EE74CF, 0x7AE9FFB6},
+ {0x9DA54FA4, 0xE31DC887}, {0xF5326D9B, 0x93FEFFA4}, {0xE6DE7E2B, 0x04565D99}, {0x7DDCA4DC, 0x1775281C},
+ {0xCC6E8189, 0x0C84E6C4}, {0x69B96036, 0x50CF2A44}, {0xDD9B1502, 0x58229FCF}, {0x9A09D2E8, 0x34487532},
+ {0xAFF53E56, 0xD6520798}, {0xA4468017, 0x83FEB80F}, {0x9EE39A23, 0x5036C07A}, {0x4AF4E01E, 0x27066134},
+ {0x34A02B1C, 0x6B17E4EB}, {0x6B5F1EBD, 0xE6968401}, {0xFBC7F2FF, 0xAB1FC439}, {0x4E0EA43B, 0x9070C83B},
+ {0xDB5252C1, 0x42E22F4A}, {0x8A4834CC, 0xFBE5B0DB}, {0x10F9B3A1, 0x6B80F2FF}, {0xF8315FA2, 0xA7485D18},
+ {0x85D76242, 0xEAFDD390}, {0xB0FDDF88, 0xD8F6C801}, {0xC63D4775, 0x613C6CC6}, {0x45ABB36D, 0x0A713BE9},
+ {0xF3443EAE, 0xB536EB9B}, {0xCE6EAF49, 0x6DEB645D}, {0xBF774D92, 0xA713B4EB}, {0xC2CF2A0D, 0xB995CCFF},
+ {0x30164EBF, 0x35CA73F1}, {0xFAB643FE, 0xAAD370B2}, {0xE41084F5, 0xBBCA1EB2}, {0x8E2540AB, 0xE2EA3C01},
+ {0x48C69E1E, 0xB3F3F80D}, {0x8E5FB278, 0xD1A0CBEA}, {0xD0A7E663, 0x5F25D250}, {0x9702D7F8, 0xB14EBA6C},
+ {0xC6A7C09A, 0xA1280836}, {0x325E621D, 0xC5F39006}, {0xF5296D8E, 0x961AA86D}, {0x0D09763E, 0xEF640488},
+ {0xC251138D, 0xBB28ECDE}, {0x87EFFB45, 0x7F30AEB9}, {0x820F60B4, 0x30E7A459}, {0x49AEBB5E, 0x49226A54},
+ {0xB3E964AE, 0xD5AFE8A7}, {0xB0D1B62E, 0x29892AC2}, {0x8FA85B12, 0xFEAF3CD2}, {0x60D49D4A, 0x9D03F3D8},
+ {0x04FB673C, 0x910F677B}, {0x2197FBA7, 0xAE4844FF}, {0x31397F77, 0x7D644793}, {0x63A050E6, 0x3CFA8837},
+ {0xD6ED76FB, 0xD01FD791}, {0xAD16F6BA, 0xE9C6E2FA}, {0x16D2576B, 0x8A300326}, {0xB7A0455D, 0x8767B2E0},
+ {0xB629A0C4, 0xE8BBDB2D}, {0xC051C6A4, 0x072AEE97}, {0x2A43EC80, 0xFF911948}, {0x486BD471, 0xE0688C24},
+ {0x44645AF9, 0xDE9EEDF0}, {0xDE680249, 0x8FFFB852}, {0x97AA6FE7, 0x54BF8590}, {0x7E945501, 0x1E728612},
+ {0x47C082D3, 0x12DF6E67}, {0x19C3B0CA, 0x18E4FC65}, {0x9A3D02AA, 0xB69E3B35}, {0x874A56FD, 0x084658F5},
+ {0x1E059CB9, 0xEEF0BA5E}, {0x3D4CC830, 0xE40B84B9}, {0x2883318B, 0x8C4A4350}, {0x37FF907C, 0x7CDC24A3},
+ {0xE1DF5448, 0x937AA16B}, {0x268772EA, 0x63AA383F}, {0x0FAC8015, 0x231A68BF}, {0xEE2F3089, 0x27348F71},
+ {0xA923909A, 0x31FF3843}, {0x689B7EFD, 0x862C729B}, {0x23913B92, 0xD261539D}, {0x7F2D41B7, 0x46436061},
+ {0x01C9345F, 0xF11E9AD5}, {0x53368131, 0xD0F08FF0}, {0xF731874C, 0x104C2CB2}, {0x66AD51DE, 0xEBF9AB3E},
+ {0x8813FD14, 0x00FD225D}, {0xBEE0EA1B, 0xF25885FF}, {0x75B253D9, 0x86DF5808}, {0xF060E93D, 0x5708591D},
+ {0xE1132BE7, 0x0D4D9026}, {0x2E8F0738, 0xE365E8C4}, {0x5AE95741, 0x9B88785B}, {0x0F214814, 0x25EA5D3D},
+ {0x821B1C7F, 0x42F57CFF}, {0xBC9D4112, 0x9B0FCA5C}, {0x5A889C9F, 0x58120F7B}, {0x06622BD5, 0xCD873DD4},
+ {0x4F8FFE7D, 0x310C8790}, {0x2C8333C9, 0x41391C47}, {0xA1A9661C, 0x172802BB}, {0xC795D122, 0x8839D9B9},
+ {0xF2334FD7, 0x465EAF99}, {0xA8E8916E, 0x25EC17F0}, {0x5625642E, 0x1BB0B222}, {0x1F277453, 0x800364D1},
+ {0x02B82840, 0xFFEEC0DF}, {0xD6A325B6, 0xD9137F04}, {0x0F8EA32C, 0xD836EF52}, {0x7E40D539, 0x0C6C564B},
+ {0x0F9CCEAE, 0x0556707D}, {0x5C255858, 0xD81F423A}, {0x0F93C729, 0x53AF095C}, {0x3E2B73F5, 0xBB38C042},
+ {0x8CDA49AA, 0xCE2BF266}, {0x5E454330, 0x8520D2C1}, {0x361F7929, 0x2CA95D65}, {0xFB03EE18, 0xC7C72477},
+ {0x019289CD, 0x60880F29}, {0xC8F92CBC, 0x3A703E82}, {0x25C597C4, 0x77B01032}, {0x532AF99B, 0xCD914A88},
+ {0xA220E377, 0xC6C90B71}, {0x0FBF95D0, 0xA32D660C}, {0x5ED98DFF, 0x4F16FB45}, {0x31268343, 0x795729C5},
+ {0xBF01791C, 0xA1367B3A}, {0xB256BE05, 0xD2F82B41}, {0xF98E9B0A, 0xE0B04B57}, {0x5D940403, 0x0FB727B1},
+ {0x4EEE91BB, 0x2A55530D}, {0xE3E62627, 0x5C45F188}, {0x03E523A5, 0x08FFA026}, {0x4B79F0E2, 0xE2F6C561},
+ {0x49D81C2D, 0xAA355464}, {0x7A456E2A, 0x556762A1}, {0xACD02816, 0x105E8A1F}, {0x93095F4B, 0xA503CEBF},
+ {0xE4EB1E4C, 0x73F7CD2A}, {0x11573BD8, 0x621E56A3}, {0x771DB7D7, 0x6D37D60F}, {0x30AB2BBB, 0xFA1D12C6},
+ {0x7F284FD7, 0x496A816E}, {0x0C94B02C, 0x118BAD45}, {0x86388F2E, 0x1948BA04}, {0x43C61A63, 0x4231B24D},
+ {0xF23A93FC, 0x0A008071}, {0xA7C30AFD, 0x05C27192}, {0x712701F4, 0x53969FD2}, {0x512C6FCD, 0x55DF955B},
+ {0x14F570D7, 0x3FE46CA7}, {0x14A1C7CC, 0x3705FAA4}, {0xDC784FDE, 0xB3FBA136}, {0xCC3DAD9C, 0xB32AADB6},
+ {0x40861C5B, 0x4B6D6448}, {0x30A03D24, 0x25749814}, {0xE1E7DD27, 0x672B2FF7}, {0xF0E10FFF, 0xAF9D5C23},
+ {0xFBF7AE53, 0xC8EF5B36}, {0x03C799C9, 0x40535A3E}, {0xA6A145EF, 0x678101CA}, {0x23EF1382, 0x6A22482B},
+ {0x7F6BCEFC, 0x22317339}, {0xBEB1A9D9, 0xE179DCC3}, {0x9CB50012, 0xFE0CCACE}, {0x328101DE, 0x743D79CD},
+ {0x000F57D6, 0x81ECFB36}, {0x5FD9CA24, 0xD7DC7A7B}, {0x6756AA64, 0xC7A2F8A2}, {0x02556A1C, 0xE74EB847},
+ {0x56C96BAF, 0xCC26F3A6}, {0x3A7352E1, 0xE106CAF6}, {0x58AF6CEE, 0x8CC9E824}, {0x63B7691A, 0xEB328FF4},
+ {0x94C8B952, 0xC0A8B36E}, {0xCCA396BC, 0x36450563}, {0xD5F4DA3A, 0xEB143290}, {0x8D754131, 0xF11F86A3},
+ {0x11B016A4, 0x9B2997BD}, {0x0FC0FA52, 0x51DADD1B}, {0xCC08B200, 0x2FA5F012}, {0x7A68BF8F, 0x25DD3673},
+ {0xE191D037, 0x5826A065}, {0xC5CF147B, 0xED5C0D72}, {0x8A33539A, 0x065D75DC}, {0x3B083C71, 0xB270CE5E},
+ {0xB2622BAF, 0xBDFC2105}, {0x026F0717, 0x50A1587C}, {0x40522BC3, 0xA8E557B2}, {0xD17FDF7F, 0xF969D116},
+ {0xFF6FD9F4, 0x25BC0939}, {0xBA339705, 0x1C2689E6}, {0x194572CF, 0x15781F42}, {0x4A74D954, 0xDDAAA960},
+ {0xA67EDF6E, 0x21500E4D}, {0xAE36274F, 0xD48B0F16}, {0x602D0252, 0xBDDF755A}, {0x6894A417, 0x97E848D4},
+ {0x59E72A5E, 0xD47DF53C}, {0x3E74C0A7, 0xCB4FEEE2}, {0xAE36E886, 0xE91D5CF6}, {0x21EA7DA4, 0x43B4F72B},
+ {0xEDF5B6BF, 0xED4EDCC2}, {0xB3C8EA09, 0x60666B1B}, {0xB130CCB1, 0x214D8488}, {0xA98666A3, 0x8AEE24AF},
+ {0x7C675C7F, 0x50BC22B9}, {0x24750417, 0xDDBD8709}, {0x89B9043E, 0x5BE7D7D4}, {0xD83085D4, 0x79306662},
+ {0x656DDD70, 0x273F2438}, {0xA3C58305, 0x30708258}, {0xC1974EC6, 0x4B35B1AC}, {0x2AB1D4A6, 0xC109C904},
+ {0xDA19752C, 0xEFC79D22}, {0x42F0501C, 0x105BA353}, {0xD197537D, 0xB7196F2B}, {0xA4219C60, 0x73C11C4D},
+ {0xB4E63F6E, 0x67278D0B}, {0xB7A9770B, 0x68F8A3BE}, {0xB049A4BA, 0x46126217}, {0xED169915, 0x013A96E7},
+ {0x734D5D31, 0x1C1BF52A}, {0x3648EDB7, 0xB52E7B10}, {0xE9C2D045, 0xA8D208C8}, {0x6B218600, 0x3B66FAC6},
+ {0xEEAE37B2, 0x8098B6BB}, {0x8D6F476C, 0xB90CEC3B}, {0xA421702E, 0xF5F57073}, {0x5BDCD612, 0x2C4BA425},
+ {0xEF9E9314, 0xAD27CC0A}, {0x11806128, 0x2BBB20F5}, {0x7A4E0ADB, 0x79F285A6}, {0xA8F67509, 0x87C3B0C2},
+ {0xF7197D26, 0xF775151C}, {0x730BC234, 0x28EB34DB}, {0x68EEA7FB, 0x5B89D264}, {0x0E0A4514, 0x9911600D},
+ {0xCCCF6EF1, 0x909B4610}, {0x8341885B, 0x4973D8DC}, {0xC6CE05F4, 0x52C4CC4D}, {0x3C970AEB, 0x6564A4D4},
+ {0xDF824797, 0x44DAA398}, {0x2FDFAA75, 0x05B0E52B}, {0x76F34C94, 0x16FA15B9}, {0x8DAE194F, 0xB3470C42},
+ {0x283E9FD3, 0xD2012B25}, {0x3DE8BFAA, 0xF35AA79D}, {0x029FEC4F, 0x881CB3D8}, {0x41D823E4, 0xE5330000},
+ {0x3B95C5B1, 0xEB34FE3E}, {0x4D32FB26, 0x3E5ECD46}, {0x179CF1BF, 0x7FAFD38C}, {0xD788708D, 0xDB1432C6},
+ {0x5939C117, 0x46B00E81}, {0x18C1BF72, 0x0A27A721}, {0x97F35552, 0xF9E11B7A}, {0xB6A3253C, 0x40DAED09},
+ {0xE01F8566, 0x5757556C}, {0x7B980998, 0x9CACA06E}, {0xBD89E116, 0xBF6558A7}, {0xAD385A35, 0xFAE5A345},
+ {0x6A9979C4, 0x22E8B4AC}, {0x66C29F48, 0x54973C90}, {0xFAC14D6A, 0xBC0C5878}, {0x9AC78B6E, 0xF97026CD},
+ {0x428432D0, 0x49E80D1D}, {0x288B92E4, 0xBDDD55A5}, {0x42055D93, 0xE48A449C}, {0x5B5C2589, 0x27C2A13A},
+ {0x79119B28, 0x8EF6CB0C}, {0xFDB90B6E, 0xF464B2A1}, {0xB45D69D0, 0xC192414F}, {0xE22A0E5E, 0x1BDCE512},
+ {0xB35FC23E, 0x444F27BB}, {0xE9DEFF54, 0xF43748F5}, {0xE2121E44, 0xD5CFE459}, {0x00832EF3, 0xD77D1346},
+ {0x57743CAC, 0xAF633176}, {0x619832D1, 0xE7F9A0DD}, {0xFC7AE0C4, 0x7D2CFA4C}, {0x6F344CF6, 0xBA777445},
+ {0x91365160, 0xE489C8AE}, {0x5877F750, 0x204112CA}, {0x5697BE98, 0x8CE66C64}, {0xF649315B, 0x93BF3B4E},
+ {0xEF6132EE, 0xE4B6D020}, {0xA31577A3, 0x5036DA86}, {0x4D457644, 0x290AD29E}, {0x1A24BB61, 0x91E5457E},
+ {0xB4B7B57A, 0x98C68338}, {0x22472CAC, 0x0E4EBFB7}, {0xAF85699E, 0xA5C2A55F}, {0x0969B33F, 0x399A57AF},
+ {0x4321A3DB, 0x0E11CB99}, {0xDBB89D44, 0x3B5F0D65}, {0x69B78787, 0x67999776}, {0xCDCDEB34, 0x8F63E2DA},
+ {0x471329BB, 0x247B3EB6}, {0xA2A2EDA7, 0x35DB3EF7}, {0x68341028, 0x65A48FC1}, {0xEB694530, 0x1D4F6C3D},
+ {0xB821ACA8, 0x75DD7A52}, {0xF95FCFF8, 0x0361F528}, {0xE4B567A4, 0xDB19BA85}, {0x86C8888D, 0x119FEDCB},
+ {0x3DF7CF3A, 0xAA9A1911}, {0x7F81D419, 0xFA23A7B6}, {0x65CD910E, 0x45816B17}, {0x8C02356E, 0x207CE628},
+ {0x30D2F582, 0xD5171243}, {0xF7014D97, 0x32AB168F}, {0x40BC862D, 0x7DD395E0}, {0xD8E6BC8C, 0x8D819ECB},
+ {0xB5A0786A, 0x9BC24975}, {0xCE92CB72, 0x35638868}, {0x7D4F3252, 0x9066B2DD}, {0xB0DFB87B, 0x6D0BD8B0},
+ {0x455570A6, 0x5F722B35}, {0xD7E8F840, 0x4F197ECC}, {0x021840EC, 0x9EAAE223}, {0x124037CB, 0x3674F023},
+ {0x5E525492, 0x271EC550}, {0x40ADC24A, 0xE15696D8}, {0x8414C613, 0x24D74121}, {0xC401E2DA, 0x2CC42188},
+ {0xC5129E1F, 0xBF86BF90}, {0x7C84D167, 0x9EA0D0F8}, {0x164FC847, 0xCDBCBDD2}, {0x17C29A0D, 0xE3A1D898},
+ {0xD3837D34, 0x4F80E2BA}, {0x7A813E4B, 0x3A1B3482}, {0x67611B37, 0x953B9946}, {0x5E631282, 0x54F65623},
+ {0x956F4560, 0x80F03A06}, {0xAFF68FC2, 0xC35AA24F}, {0xFCB3E530, 0x1D679041}, {0x1E5DD59D, 0x55CC7D35},
+ {0xDFF65457, 0x85B8155F}, {0xE5B65F95, 0x0D06F7FF}, {0x342A7074, 0xCE63109D}, {0x10B1C1CF, 0x79DE31AF},
+ {0x5D3C2C9C, 0xA97B5387}, {0xD97B2C11, 0xB76D32DA}, {0xA79A4B55, 0x16EF3103}, {0xA987B677, 0xE76977DE},
+ {0x11B2BF58, 0x68E118DF}, {0x76662E30, 0xC9899F96}, {0xCE6F70B6, 0xA9492286}, {0xB63953FC, 0x0029A1B6},
+ {0x1790A516, 0x2F4DA035}, {0xB3FF8055, 0xE86A06CC}, {0x63D1302D, 0xE3AB548C}, {0x0D2781A4, 0xE81AB16C},
+ {0x59B998AB, 0x398765F3}, {0xB4F61E28, 0xCA82E83A}, {0x8CA16467, 0xCD134694}, {0x6C54C2A9, 0x0FDC5273},
+ {0xBCC9C4C7, 0xB2BDA27F}, {0x9A4FE1F8, 0x1A0EF734}, {0xCCD9B194, 0x273E2B3A}, {0x59C076B2, 0xEE0FABAA},
+ {0x077608A9, 0x5BC6D089}, {0x70EF1997, 0xFDA2E277}, {0xD1DD3293, 0x626F37F5}, {0xC9EE07F3, 0x63C04BBF},
+ {0xC129926A, 0x09B5AAED}, {0xFEAC75C5, 0x44F04E2C}, {0x334DA3E7, 0x583050A5}, {0x45805C2B, 0x0A363990},
+ {0x5DFE3D93, 0xF87F223A}, {0xC52655EA, 0x3357E341}, {0x3253935A, 0x8BE3DBC7}, {0x10537E04, 0x01B1B235},
+ {0xDA97181F, 0xFE1A846E}, {0xBAEC1329, 0x10769B6C}, {0x3E8D7C98, 0x7E3FBE0F}, {0x3FEE3DE4, 0xDB054692},
+ {0xEF098873, 0xFCAC91A6}, {0xC679B95C, 0x784348B0}, {0xC4C9C290, 0xCD12E8D6}, {0x1C8E0DA5, 0x00BFDAF8},
+ {0x6031094A, 0x9C18C476}, {0x74E67B4D, 0xF174DBE7}, {0x02C3EFEE, 0x9B87B552}, {0x5C5DA271, 0x4E9EB3F4},
+ {0x11486A03, 0x0A69A198}, {0x879F992D, 0x0288DD49}, {0xF9C7DEAE, 0x7889A24C}, {0x5A298A89, 0x5286EF45},
+ {0x5E138A82, 0x32A074EB}, {0x0F5C6FAF, 0x0031656C}, {0x2BF11F3D, 0x3FBD36AC}, {0xB39A17EE, 0x82E5DBB5},
+ {0x39A2CA44, 0xCEE7BC18}, {0x0E24250C, 0x442B779F}, {0xE9CF518D, 0x218D2DC8}, {0xBE77A9E5, 0xE51E7AD8},
+ {0xBA3525C0, 0xF550922F}, {0xAA99DDC1, 0x697448FA}, {0x69F66FFF, 0x7D8C2C11}, {0xBA0E1167, 0x05436DF4},
+ {0x9C247E07, 0x820D33FE}, {0x5674E2E5, 0x6A49EB4B}, {0x6787C1F0, 0x096F581D}, {0x708BBD10, 0x776A45CA},
+ {0xF2E974FA, 0xEDAB682C}, {0x42D87330, 0x245D78E3}, {0xCE50CF24, 0xAC29F460}, {0x1BA7FD8E, 0x6C469D58},
+ {0x58A6E3CE, 0x2EC7A1D3}, {0x7CD2043A, 0x9FA4DB08}, {0x79621525, 0xE18CB78D}, {0x1F5FEB07, 0x5F5BD6A0},
+ {0xA017CF7E, 0x29A06AF8}, {0x15291FA3, 0x4233A550}, {0x527F5601, 0x086DE31F}, {0xD02C5F93, 0x01A9C946},
+ {0x51FB80AD, 0x6457CA1B}, {0xE0B32246, 0x3D86019E}, {0xC16C4656, 0xE27087BF}, {0xDF0F9651, 0xFA31471C},
+ {0xBC93F387, 0x64FB1830}, {0x1A321E00, 0xA766F55B}, {0xEE239A31, 0xB90A7934}, {0xA2F1AF15, 0x59814664},
+ {0xC904391D, 0x89894784}, {0x6BCA4811, 0xF6C544EF}, {0x41D20AAF, 0x79B679F3}, {0x5F143206, 0xD083880F},
+ {0x9A3D8938, 0xC7EA70AF}, {0xC3E9367B, 0x30F8B012}, {0x9439E3CB, 0x092903D9}, {0xAAA35951, 0x8DDDD9C0},
+ {0xFD79A71D, 0xC259636F}, {0x1C1C6D7D, 0xAA4C3E30}, {0xBDDE9319, 0x1523E6E4}, {0xE268A6C0, 0xD8E25EBC},
+ {0xC2F3862A, 0x1DEAE87A}, {0xE72A54EF, 0xA6C67B26}, {0x4EB23CAC, 0x9480E6BF}, {0x3DADD1F2, 0xDAAC630E},
+ {0xE786F2FC, 0x062B996C}, {0x93F85340, 0x321CC6AF}, {0x43ED17E6, 0x50F6FBD1}, {0x9022D198, 0x05412CE6},
+ {0xB31C9B0E, 0x2401DED4}, {0xD8636FEB, 0x3E2B53DA}, {0xA260047C, 0x17BB04C1}, {0x270AC2C9, 0x2C2480E8},
+ {0xB973E77E, 0xD1B9A0EC}, {0xC9DBE8CA, 0x6C48EE4B}, {0x185581FD, 0xB6405264}, {0x7A656429, 0x2087BF37},
+ {0xD0AF00FF, 0xD7C7E223}, {0x38281816, 0x021E4BB7}, {0x70122573, 0xF70C369A}, {0x5199914E, 0xA0429876},
+ {0xDAF15E53, 0xAFAEEEA8}, {0xCCBDB053, 0x6042930D}, {0xB332801A, 0xF8CEDD1F}, {0x0F87C5DC, 0xD4E2FD41},
+ {0xEE94060F, 0xDCAC8D36}, {0x851C6D16, 0x22922641}, {0x73066F0B, 0xC96A16FA}, {0x71E636A9, 0xF703E414},
+ {0xD96762C2, 0xFDF012F2}, {0x1014A6EB, 0x09242FC3}, {0x4DED1C61, 0x507BA6E2}, {0x7B2CF08B, 0x4197B504},
+ {0x76F59204, 0xEBF4442B}, {0xE4DC7208, 0x7DBF825C}, {0x602F0810, 0xF5AEF5F6}, {0xDAA41F89, 0x61D15D5A},
+ {0xAC328C65, 0x7607A6D9}, {0x006C66F6, 0xC0F86E7B}, {0x24565E4E, 0x49B7E00D}, {0xECDFC981, 0x4BAFABD1},
+ {0xEC5E6648, 0x5025FB1D}, {0xA3C0C2B7, 0xE719F795}, {0xA3E8CD50, 0x9498BB58}, {0x586A5E9A, 0x565CAC92},
+ {0x20A9F1D1, 0x37154A62}, {0x93F7D737, 0xA3D6D362}, {0x67D278D5, 0xC7C0AF08}, {0xC6BF9464, 0x8EF86D05},
+ {0x051E810D, 0x1ED6C29B}, {0xA82D524D, 0xEE2B6B24}, {0x3E19ECBE, 0xAB90025E}, {0x354E2B0E, 0xB5A570BE},
+ {0x0CFE132E, 0x10FCB52D}, {0x5FA9D7F1, 0xDEE2C8AC}, {0x440EA4AA, 0xB922CFDE}, {0x4FB93C16, 0x14F51E4D},
+ {0x36D61100, 0x929A3449}, {0x79A5699F, 0x2F0BB923}, {0x306B7C70, 0x30FDF311}, {0xD7F19B5F, 0x6F883D07},
+ {0xA0638A3F, 0xCA7F7514}, {0x90EF6C94, 0xA2FAE0C3}, {0x2EE0ADC7, 0xC0048860}, {0xAB3C9CF8, 0xA3B6F93C},
+ {0x8ABF3C03, 0x180FDB4D}, {0xBD6CC5E0, 0x5D45A18B}, {0x4D16A1DF, 0xF1F06D88}, {0xCF118FEF, 0x3E8F62C1},
+ {0x0740225B, 0xF180D7CA}, {0x6C295EE0, 0x96CF4CC6}, {0xFFA02DA6, 0x37DE2037}, {0x0F00C9D7, 0x547C3934},
+ {0x10464EE9, 0xDB54F29F}, {0x9DC62BA1, 0x71FFA3FD}, {0x317A0116, 0x4542D690}, {0x47663AAC, 0x9B7EBD71},
+ {0xDF030C16, 0x11489CB1}, {0xCA91A744, 0x56C9953D}, {0x3E63CF3C, 0xDF64CC08}, {0xF50101EF, 0x56413AC8},
+ {0x800961C8, 0xBE76E2C3}, {0x7D85AD13, 0x08F1860E}, {0x66873D5C, 0x552A5D54}, {0x4B179D35, 0x8D97709B},
+ {0x52EAF1B8, 0x6B3EB93A}, {0xA68785B5, 0x82BCE5EC}, {0x5C3BE7FD, 0xA8D919D0}, {0xD82A2FEA, 0xE30585FD},
+ {0x69E70E50, 0x42ECCBEE}, {0x7769EB08, 0x71FF1CB0}, {0x4A92398B, 0x83F2F609}, {0xE2B81CA7, 0x6DF1C681},
+ {0x5C96E918, 0x85828598}, {0x757642C9, 0x915D4AEF}, {0x99102000, 0x2922423D}, {0xB9FBC652, 0x2EEC083C},
+ {0x29F92227, 0xFFCF6C77}, {0x75DABC40, 0x3F6F9772}, {0xDA15AA1C, 0x39FB6931}, {0x1D038645, 0x6FDE6DD1},
+ {0x8D0F99D7, 0x4EE83677}, {0xFC3B53DD, 0xE55D6EE4}, {0xCE80DA92, 0x0037ECFA}, {0x6F14E68F, 0x9C50A744},
+ {0x67BEBAC0, 0x358263B9}, {0x59B8971E, 0xDA465564}, {0x39B65BDF, 0x824A2D73}, {0x7363AAC5, 0xD56D75A0},
+ {0x2C1D1942, 0x46522B13}, {0x168D8B92, 0x0F05B722}, {0xA03F9756, 0xB184AAAB}, {0xF0C2B684, 0x29BF7D5C},
+ {0x0029E9D3, 0x69B217A2}, {0x4CE098BD, 0x06B772EA}, {0x52789BF5, 0x9DA6C650}, {0xD0796722, 0x544F332C},
+ {0xD0F08345, 0xB51AD8AC}, {0xD62D79BB, 0xCBE307EF}, {0x04C54DA0, 0x7FB9DCF0}, {0xAD9AE3EB, 0x17205003},
+ {0x9031CBB6, 0xF5B2BCCB}, {0xC4EE3589, 0xC5C85C1A}, {0xDCE53E16, 0xDF90F2C4}, {0xC20EE57B, 0x3C5D9596},
+ {0x92003BE4, 0x7CAB4039}, {0x369596AB, 0x98B9F826}, {0x1FF05F04, 0x5E15EA81}, {0xBA538945, 0x87CB2523},
+ {0xB856DD3B, 0x3A0BD82E}, {0x375A2255, 0x8988341C}, {0x67D5FA66, 0xE44081F2}, {0x4AA30F90, 0x396B15D2},
+ {0x6C921C2B, 0x74A14EBC}, {0xEE6E8F76, 0xFC9081B1}, {0x02719589, 0xB48988FA}, {0xE391C0AA, 0xB3669E57},
+ {0x73886C4E, 0x24F778F0}, {0x68D1957C, 0xF2B5A36E}, {0x0120834E, 0xCFD4E77E}, {0xBDAC60A5, 0x51704F00},
+ {0x79CEFA5D, 0x095D98EB}, {0x6937DFF8, 0xA7F1748F}, {0x8EFE4145, 0x4AABBD98}, {0xDE41FCD7, 0x3E83CC84},
+ {0x1E5AC81C, 0xA5C17571}, {0x18886C82, 0xB4CF9758}, {0x2C23D2A9, 0x69EAA353}, {0x91E2A2F2, 0x3B9A8CF9},
+ {0x52898721, 0xBAECE6DE}, {0x1660D5E9, 0xD312F84D}, {0x4F41B4A2, 0xC77AA5FA}, {0xC5E90225, 0xC556786B},
+ {0x476329B0, 0xA781256F}, {0x5D48CD31, 0x861B7FB0}, {0xA28858E8, 0x85F1B85A}, {0x103EC722, 0x915A7DD2},
+ {0x3E6F206E, 0x2C5BF8CE}, {0xEC78395F, 0xF7AB3B28}, {0x4F5832C3, 0xBFC69496}, {0x9244C7EC, 0x141CDDFC},
+ {0xF0829D3E, 0xD5224B7B}, {0xB9909A06, 0xE6024FAE}, {0xF63FDA31, 0x6C2191F0}, {0xE721FDDC, 0xFFCA59F8},
+ {0xC3CEB155, 0xA7C030C3}, {0xCCEA940D, 0x3F4FCB71}, {0xB1405102, 0x55FF60FF}, {0x69FCDFC7, 0xBCCC3368},
+ {0xB69529BB, 0x69430A0E}, {0xE26A33D6, 0x8847E201}, {0x921935FA, 0x7FB2A843}, {0x882269AE, 0xA58522FB},
+ {0x7DBA3E78, 0x34FA6680}, {0x1611E1C3, 0x4B1C7F9F}, {0x0F797623, 0x28980F94}, {0x47CE098D, 0x4347C95B},
+ {0x5EF814A0, 0x105C2923}, {0x143485DE, 0x070D076C}, {0xB3E5224F, 0xFCF78FBD}, {0x35976B13, 0x57B5D7B5},
+ {0x826817E3, 0x37C016F8}, {0x6A7EDD53, 0x57E81452}, {0xE5640534, 0x48011B79}, {0xB37F96FE, 0x07FBE482},
+ {0xA72A9F75, 0x197BF379}, {0x35FE4A7C, 0x8FC3620E}, {0xE2E3C7AA, 0x9BC950DD}, {0x89A8D0D4, 0x911D667A},
+ {0x21443E55, 0xCD93E442}, {0xC2932BC4, 0x77966F47}, {0x3478B7BF, 0xF19675D7}, {0xF22A866A, 0x568DC935},
+ {0x91697FD9, 0x76CF5767}, {0x36A3BC57, 0x5C36EFEB}, {0x20A0A4BC, 0x7AD55732}, {0x7295762A, 0xE0A62A60},
+ {0x9441EEB0, 0x79410BD4}, {0xDAF892EF, 0x1C1B2C6D}, {0x2B2076BB, 0x793BD41F}, {0xB55B16D4, 0x8CC91652},
+ {0xDFA8B67A, 0x25741E07}, {0x1DAB2551, 0x0E8E2CFB}, {0x365A4938, 0x657A0ED0}, {0x9880BDE0, 0x42B04C65},
+ {0x9BEE1541, 0x05B5BCE6}, {0xA838AE70, 0xC61D3BB9}, {0x6E4529CF, 0xCAF3B6EC}, {0xBDD24734, 0x23871D95},
+ {0x7C77DB40, 0x1190B98E}, {0xE63991D3, 0xE2574173}, {0x15A2C796, 0x4A19D678}, {0xB353EFCA, 0x578764F7},
+ {0xE82F9FF7, 0xE2A7A6BC}, {0x439F9138, 0x7847EB27}, {0x6489DE07, 0x1E3CE183}, {0xBD5BA0FD, 0xE44CBDB6},
+ {0xA3D6B051, 0x2682B5C4}, {0x27201B7F, 0x093CEBAA}, {0xAE351A31, 0x2BE9548F}, {0x1E69E916, 0xFA58A496},
+ {0xC7B48864, 0x77AEAF79}, {0x04C63751, 0x00574721}, {0x782D7573, 0xE6988DA7}, {0xB9A420CE, 0xBA8AC0A6},
+ {0xA99D177D, 0x6EFA8031}, {0x9020A1BD, 0x1A7CE1F7}, {0xA0EC56B6, 0x9A9A79C9}, {0xB1F88988, 0x3F70E558},
+ {0x9DE287DB, 0xD67F3F18}, {0xE9403399, 0xB9624B97}, {0x310A7E1A, 0x103AD30D}, {0xAC022701, 0x8E606BED},
+ {0x08041999, 0x2062822D}, {0x504FF154, 0x02E820E1}, {0xC11B8B29, 0x60437564}, {0xB38B9997, 0x6492F5A3},
+ {0x34E8448A, 0x0BE07D00}, {0x69C0F913, 0x46D1302E}, {0x6DED8981, 0x6EEC1457}, {0x72F94DBA, 0xE32ED26F},
+ {0xF3888A08, 0xB21EF058}, {0xE5FC965B, 0x4E00A3EC}, {0x94E321E3, 0x0C300A80}, {0x2720AD44, 0x5FDEB6DC},
+ {0x91FC1F9D, 0x4BADB22B}, {0x1279107C, 0x704CB87C}, {0x01D75DFF, 0x75EDE21B}, {0xB2FD0621, 0xBB2990E5},
+ {0x8F3F6128, 0x039D851B}, {0x7A7545E9, 0x9C4012CC}, {0x8B20EA6A, 0xE3E25A2D}, {0xA9D62CB5, 0xECD753CB},
+ {0x4D7E705F, 0xF9B27400}, {0x5A39A623, 0x1BD01F4E}, {0x23396D60, 0xC5FE6E24}, {0x86A1CC63, 0x1CC7A0C8},
+ {0xC8E97F51, 0xE97536DC}, {0x9FF2E609, 0xB655FD3B}, {0x78058B29, 0x2ED17287}, {0x1BA82369, 0x7D93A2F1},
+ {0x6DA8CD49, 0xE5B51B78}, {0x7D493D1A, 0xCF26F70C}, {0x8010DE16, 0x1AAB372C}, {0x0AB157A1, 0x37CF7EB0},
+ {0x678CC23E, 0xB6F58E4C}, {0xECD2CF65, 0x6AED1856}, {0x11D41A7B, 0x1E3668FC}, {0x62EBA8CD, 0x73581392},
+ {0x1641C940, 0x17A5F0EE}, {0x1AE958EE, 0xF0613E9A}, {0x0FD0DD35, 0x3036A819}, {0xFA1C528D, 0x6215FE8E},
+ {0xD3B2AAE9, 0xE5D3DDEC}, {0x65016093, 0xDF6519DC}, {0x1998B55C, 0x95F2AAE3}, {0x8952D60C, 0xE8FA46F4},
+ {0xEF040C59, 0xE74C7833}, {0x57FC3842, 0xEDD7608D}, {0x242AFB02, 0xCE7D93A8}, {0x3741D184, 0x363AA419},
+ {0x232F6223, 0x00615AF3}, {0xE6113402, 0xD05A0779}, {0xB75D4506, 0xAF63AEB6}, {0x3B5438B8, 0xE55E02BA},
+ {0xB893CBAF, 0xE92A17E7}, {0x375296C0, 0x2A8E4664}, {0x869491A2, 0x31544011}, {0xD6EB93DB, 0xBB8F5807},
+ {0xDF124CE3, 0x07A3928A}, {0xFBDE995A, 0x8A208346}, {0x838BB60F, 0x311011AD}, {0xF21E173B, 0xF9CD8B32},
+ {0xF59CD077, 0x83F4B350}, {0x4E985F4E, 0x6E9C03F6}, {0x9750B3D2, 0xBA43AE17}, {0x94ECA520, 0xF587332A},
+ {0xEDA35DD8, 0xE65D3FA5}, {0xB4E77C5A, 0x5F092557}, {0xBED741B4, 0xF8F89E0A}, {0x88028195, 0x949AB56F},
+ {0x5205A659, 0xAB2E9E99}, {0xA452F908, 0xF65BC8EB}, {0x05FA5CD5, 0x88550F0F}, {0x91D55093, 0xC449CF47},
+ {0xBD59DE72, 0x406479E2}, {0xA87CD8F8, 0xA5B6463B}, {0x697286BE, 0x8D2A73E0}, {0x75708301, 0x857617D9},
+ {0x4386D745, 0xED85DA11}, {0x734DEB1A, 0x4FCADF4C}, {0x2AE31452, 0x5A5E07A7}, {0xC10A1316, 0x83989264},
+ {0x4121152B, 0xB7B8691C}, {0x901C18BB, 0x2EF64B2A}, {0x0C3F20ED, 0x30C96E48}, {0xB19BDA15, 0x76AEB092},
+ {0x8399D969, 0xCED0426D}, {0xA30D1907, 0xF922269E}, {0x358A729B, 0xEA44CE51}, {0x4FF16054, 0x3B5CD269},
+ {0x999C6083, 0x64883ABC}, {0xA5E20111, 0xA63DCE7D}, {0xB93D0C9F, 0x68E594B5}, {0xED1E3877, 0x6B7F1E03},
+ {0x8AABBAA4, 0xB2CE63C2}, {0x05741F7D, 0x87C420F2}, {0x0C01FD39, 0xFF32EA61}, {0x9B551A41, 0xA57C8DB0},
+ {0x3C5B30E9, 0xF0683734}, {0xFB2AE0FA, 0x3886A7D0}, {0x29A1F05A, 0xC7D88474}, {0x80459493, 0x303FB173},
+ {0x45A640ED, 0x5E7E7956}, {0xB9DF733E, 0x19F3DB91}, {0x969705F8, 0xD3ABED3A}, {0x9D72CFEA, 0x3081D7CA},
+ {0xBB70ACE8, 0x510DE29C}, {0xFBE6925B, 0x9B7C3FB3}, {0xE13DEF5B, 0xA44C8EF6}, {0x3B6D3427, 0xFA45C9D6},
+ {0x7F28A7F1, 0x7FD78996}, {0xCEB48BD0, 0x0CF4EEC0}, {0x781442D6, 0x6DDF0DCA}, {0x8034AA51, 0xFBFA2980},
+ {0x854843AC, 0x9F3C3A1E}, {0x3818499B, 0x7DBEDD04}, {0x6D7E2365, 0x1F945557}, {0x38750581, 0x068089B9},
+ {0xBA172349, 0xB80F9AD8}, {0xE1B2CE7C, 0x4AA90519}, {0xB66F422D, 0xBA2D8C21}, {0xBF1828D6, 0x71D9C40E},
+ {0xF686A984, 0x6FC4342B}, {0x06721359, 0xCB8A4B76}, {0x92BF9667, 0xB4913552}, {0xCD1235A9, 0x1671E311},
+ {0x1FBC6AC4, 0xBD860E9D}, {0xBF782A6A, 0x97487810}, {0xCBE062A8, 0x244CA768}, {0xDAB8D6A4, 0x3B6BD674},
+ {0x4113B1DA, 0x25824679}, {0x95D4E3E8, 0xAA26BFF2}, {0x2734B88D, 0xE6EF65DE}, {0x3287B8B1, 0x6E2C0CC8},
+ {0x304F0C96, 0xC9C24FB9}, {0x27FCDE2E, 0xDF49028A}, {0x79AA61BF, 0x2A4DD5C8}, {0xDB7B1702, 0x3088606C},
+ {0x235B51EE, 0x92CFF40E}, {0x45715055, 0x1DC18B2F}, {0x7FF3712F, 0xE6A243C7}, {0xCB1464BA, 0xBC72FC24},
+ {0x3D910EBF, 0x2E970F8E}, {0x59292017, 0x7F981372}, {0x049AE57E, 0xCCE87A30}, {0xCC0E55EA, 0x0FC94F1A},
+ {0xEBB29F83, 0x5BA52C5D}, {0xC4656971, 0xD658F638}, {0x41925274, 0xD7437950}, {0x9A708140, 0xB6B36E54},
+ {0x25828FA8, 0x30FE6E4C}, {0x9D76CDD5, 0x89579C8A}, {0x91A507C6, 0xDF922A52}, {0x44CCF557, 0x21811BEE},
+ {0x0CB41A66, 0xE1DF885C}, {0xB2FC3399, 0xD621950C}, {0xD5B41D3F, 0x956E2B92}, {0xA0F8406E, 0x1824B7FE},
+ {0xE2C1CF78, 0xB189E75B}, {0x842CE7A9, 0xC416F5A7}, {0x56979B5C, 0xFBCCCBF9}, {0xBF717B0C, 0x29D096B5},
+ {0x48E362E2, 0x764A11E7}, {0x1B1AC1E9, 0x9EF14758}, {0x591DA044, 0x870187B5}, {0xC8F8D2C9, 0x81420851},
+ {0xD7C83450, 0xFBB720A0}, {0x120E77D6, 0xA61D4E56}, {0x8F5244F7, 0x6DB46B74}, {0x749240B3, 0xD340FABF},
+ {0x3C09F14D, 0xA5487A12}, {0xB4475BC9, 0x6CC16552}, {0x530847E7, 0x8B5673B4}, {0xD1B247F5, 0xD97CC201},
+ {0x3BA8A218, 0x2694E324}, {0x80024D32, 0xBD4312F1}, {0xE0968AA9, 0xB8B9D268}, {0x6A46299E, 0x05C8A3B8},
+ {0x8C4B6629, 0x054F6DC3}, {0xB32DE4C0, 0xC3D0EBEA}, {0x1B820A6E, 0xDBAE348F}, {0xC9FC5915, 0xF45CA82C},
+ {0x04EB78B1, 0xE9CC3BB5}, {0x728F5128, 0x19D86CCE}, {0x6BC107D0, 0x9B0358A7}, {0xD4F88307, 0x7F1EF011},
+ {0x5C539CE4, 0x4EFA2B12}, {0x148F9F02, 0xAE3C502F}, {0xBBA238FC, 0x64FE5B18}, {0xA59C17B4, 0x1D15B7C6},
+ {0x2F639CF4, 0x307DE6F2}, {0x32FF639A, 0x43BAAACE}, {0xC603A15E, 0x6871FC92}, {0xE98ECCCA, 0x2790E13D},
+ {0xF022EC9D, 0xCFFCC9F3}, {0x6296792C, 0x267570F4}, {0x24F19CA0, 0xF196CCDD}, {0x9BC4D0FC, 0x5C4DDB34},
+ {0x9D93842A, 0xB73BC3CF}, {0x8DBDF240, 0xF3CDD90B}, {0x4FD2776B, 0x77A35C0C}, {0x7B8C7E82, 0xB27A9C60},
+ {0xBA990C37, 0xD14C0514}, {0xD2C15513, 0x64F8565F}, {0xE0727461, 0x536DCB6D}, {0xAF2B0D84, 0x9DA9DF29},
+ {0x8F4FE9E2, 0x7771ADD9}, {0x255B69C7, 0xEEAD7B6C}, {0x3DE56801, 0x4AF40CEB}, {0x9F6958E1, 0x8246DC81},
+ {0xDB94B81A, 0x51E31E74}, {0x49452522, 0x9F48000B}, {0x9EB316E1, 0x4F7FF9CC}, {0x28047658, 0x9212B129},
+ {0x6997E82D, 0x87EE68B5}, {0xE421BA68, 0x0961441C}, {0xE5C88AB7, 0x368E7B32}, {0xF62BA7F5, 0x7E871ACA},
+ {0xE69925CA, 0x39790F55}, {0x719B02A1, 0x0E8CCD1D}, {0x42E068A3, 0xD998390B}, {0x68977818, 0x1FF25E90},
+ {0x6A44E79A, 0xD40DC030}, {0x9518BFAC, 0x67B830DD}, {0x50DD4B6C, 0xAC3E9CE8}, {0x4D5E7EBD, 0x875DD663},
+ {0x74ED18A3, 0x013765CC}, {0x00DDFFA8, 0x014E6BCE}, {0x2909996B, 0xCE0E723C}, {0x3FA9033F, 0x291AD085},
+ {0x46C04724, 0xEBF1A7C7}, {0x4E08FD10, 0x3816B838}, {0x8AA6DE8F, 0x3B8ECBD0}, {0xB2B15E00, 0x1BC5A701},
+ {0x5823AE38, 0xFEB83ED0}, {0x6455FD51, 0x4B4552D6}, {0x9732EE7E, 0x61B40BC1}, {0xF80F764F, 0xE7BBC644},
+ {0x3820B6E8, 0x502F9A6C}, {0xE8557973, 0xD7EACC4B}, {0xC898499C, 0x44D069E7}, {0xE9A5566B, 0x3550DC5A},
+ {0x1260B48F, 0xCC70C7A1}, {0x01ED0D5C, 0x30DAE6EA}, {0xC26013B5, 0x0529F9E4}, {0xD3B13A83, 0xC13AF38F},
+ {0x2FDCE369, 0x07FEAC17}, {0xC0BEAD1F, 0xF0396A34}, {0xCC6375CF, 0xA6805613}, {0x204A83D0, 0x826D787A},
+ {0xB9F09707, 0x457E441E}, {0x039AE242, 0x7B80421A}, {0x6B8EBD7D, 0x1A0B61D7}, {0xAF98EF04, 0xC9B4A030},
+ {0x0FE251FD, 0x3E52620D}, {0x1D900976, 0x8D39C51F}, {0x51BF4D41, 0xBFBDD159}, {0x9255E29C, 0x70D46F01},
+ {0x3E35E76A, 0xA27B98C5}, {0x90F152C1, 0xCD78EA26}, {0x4C8E82E5, 0x31D53F6A}, {0x46ED7EDB, 0x0D17219D},
+ {0x32AE3E36, 0x8BAC57EB}, {0x23D3A95C, 0xF5F62191}, {0x9CF01829, 0xD00EB8E9}, {0x5C7E8717, 0xCB1AFB42},
+ {0x5D9A661F, 0xE99C3458}, {0x54B10BD6, 0x945FA816}, {0xE43D4E28, 0xE44AF9FA}, {0x5462FA17, 0x69FA8CF3},
+ {0x7FDE91EB, 0x670BE904}, {0x7097F3F6, 0xA20FAEE9}, {0xE54EC954, 0x9BB479C4}, {0x355608FA, 0x8A866D28},
+ {0x8A69FD01, 0xF63BCB01}, {0xC09DEEC9, 0x3AECCC27}, {0x513970B8, 0x223A4E5E}, {0xF3D36D0C, 0x61DAD00D},
+ {0x6A1070E3, 0xF06817B5}, {0xB0977EE1, 0x4DDCDB32}, {0xFB4D15DE, 0xA31722CC}, {0xB16B3485, 0xC4181EBE},
+ {0xA77F13E4, 0xB013BF6E}, {0x637F4A65, 0x542F5868}, {0xB26DF628, 0x1D7D9412}, {0x01AF0E8E, 0xF87C8862},
+ {0x1A406E91, 0xD0B4938C}, {0x09C5F930, 0x5C28F1FC}, {0xACD0585E, 0xC68F6E98}, {0xE43E26D0, 0x215D1346},
+ {0xB3EBC620, 0xB9B45BC5}, {0x1593462A, 0x0F47320A}, {0x1F666CE8, 0xDA067A55}, {0x5378E3B3, 0xD596CD77},
+ {0xDCD3208C, 0x27017CD1}, {0x1CD6E905, 0x437FBB46}, {0x345178B4, 0x1D283E45}, {0xCBB19AD9, 0x919E0E71},
+ {0x5648EF04, 0xA0C73284}, {0x87FF543B, 0x82AEB82A}, {0x1F2D9048, 0x1BB45965}, {0xEC0C041A, 0x56606962},
+ {0x698AB543, 0x7EB5829B}, {0x61554704, 0x06328146}, {0x9CAEBAC6, 0x9ECF4889}, {0x79AE7868, 0xDD8035CD},
+ {0x0ECB150D, 0x487D5D4C}, {0x272D117B, 0x309B43FF}, {0x6DAA92F0, 0x9FE41A26}, {0x2BAE7F32, 0x3E959DF8},
+ {0x043E68E5, 0x45F18348}, {0x52B52AC3, 0x979A64EB}, {0x3351E61D, 0xB885E8D8}, {0x9343E26B, 0x040C7CBE},
+ {0x267C975B, 0x7D6F4458}, {0x4DE01B88, 0x9AFC9AF0}, {0x5113C612, 0x9CB896EC}, {0x56B2B057, 0xC8BC906C},
+ {0x2171C887, 0xEDD9D507}, {0xE3AAB349, 0xE4F340DC}, {0xB54F0D47, 0x8ED3AE4D}, {0xC1BD9514, 0xB65BA816},
+ {0x01DAE84E, 0x56441199}, {0x7A25A541, 0x21568065}, {0x6E58906F, 0x2BF82AF7}, {0xF13241E0, 0xDA3D40D0},
+ {0x8FF170CD, 0x3F6E93B6}, {0xACDA0330, 0xF4C09B19}, {0x41BEEABC, 0x0A6920FE}, {0xB55CC1EC, 0xAF823A02},
+ {0x999CC12B, 0xEAA691CD}, {0x9D16C7F2, 0x8AA840D2}, {0x06422B23, 0x2B696807}, {0x62D41965, 0x3A53CD86},
+ {0x4B573CAB, 0x4E869C85}, {0xA5984099, 0x9B27EB4A}, {0x71324F5D, 0xBB3F9121}, {0x958F9910, 0xF203132D},
+ {0x1DF15554, 0x8619A223}, {0xC48DE35D, 0xBEB90F67}, {0x45A2FC90, 0x68983849}, {0xD97C8C49, 0x04A21BDE},
+ {0x8E4ECAC2, 0x1E4CA71B}, {0xD997A9BC, 0xB46F9796}, {0x77565B5B, 0xC8FDA9E7}, {0xE0AD3E44, 0x150C3142},
+ {0xDF0EF8B0, 0xAFA1AE60}, {0xD0A1C26B, 0xC81A09FD}, {0x780ECEE6, 0x2DE34656}, {0x831A0648, 0x41A46ABB},
+ {0x1FD1F576, 0x127C7FCB}, {0x286B6D5D, 0x09AFAC3D}, {0xDE729F90, 0x1A478504}, {0xBD8FB495, 0x3F8F4209},
+ {0x105B8A92, 0x503F0D0F}, {0x37DD36F1, 0xC38DA732}, {0xD46D824A, 0xC52495BC}, {0x3D462C3E, 0xDBE109C9},
+ {0xF2B2C8EB, 0x9454857A}, {0x5B71AA2F, 0x4C0467CC}, {0xF73A8D2F, 0x7CC0ED79}, {0x8D17E08C, 0xBF0AFB15},
+ {0x27BD041D, 0xD55395E4}, {0xA8F68B7F, 0xEFEEF5BC}, {0x29CDD4B6, 0xAFB35D0A}, {0xA2534BEC, 0x398FE58C},
+ {0xF64F8C2D, 0xEBB1A31E}, {0xC64CFA4E, 0x90B0F2B9}, {0xF44B1D22, 0x517144D5}, {0xE6E5BE11, 0xE0B41B57},
+ {0x159298BC, 0xC17779A3}, {0x92AED678, 0xB55158AF}, {0xE3B75D0B, 0xD6F2D52B}, {0xA6305C82, 0x4F32B931},
+ {0xB2C03835, 0x04F9058F}, {0x63E5A58D, 0xB5818E4C}, {0x19BA22B9, 0xDB6B1887}, {0xDCF1C607, 0x593B5B0E},
+ {0x44C71F1A, 0xEE683FAE}, {0x1EB2A57A, 0xFF3443DD}, {0xB230EA98, 0x05665119}, {0x4BE3343D, 0x2966460B},
+ {0x8DBD5F0D, 0x17C8DFBA}, {0xD1226E3B, 0x7C55BC4B}, {0x90A3C6EB, 0x635AA90B}, {0x59330273, 0x99D74CC9},
+ {0x21EACE98, 0xA1983253}, {0xFF809253, 0x000E63C9}, {0x9FF8AE26, 0x5D2A7CFF}, {0xD35888F7, 0x0A86C1A7},
+ {0xCA054E5E, 0x9B8BFE53}, {0x762D89F9, 0x3D7183B8}, {0xDD27309B, 0x129AEE03}, {0xBBC6C60A, 0xAB1973FD},
+ {0x657AAE7C, 0x129DA6B4}, {0x7EAE45A1, 0xC960100B}, {0x07009468, 0x702D5FE1}, {0x93AF4BE0, 0xD9C83DF4},
+ {0xF188FF8E, 0xD42DB5A5}, {0x4EDD2BD4, 0xC722053F}, {0xCBA9B29E, 0x9F66E389}, {0x1CFB2A6E, 0x1E33D429},
+ {0x12A23CD6, 0xFFADA5C7}, {0x77B6E8C4, 0x59502159}, {0x4F280FE7, 0x039158B5}, {0x7C91681B, 0x1DD7CFF8},
+ {0xB8A3BD3C, 0xB7C0CDA0}, {0x3CD3536B, 0xE235EC8B}, {0x096B029B, 0x48E4DDE4}, {0x806582C1, 0x44B6B44D},
+ {0xAF0FD78B, 0x807FAA10}, {0x687D6AFE, 0xABE9BF44}, {0x956D911D, 0x747A95F2}, {0xA45D5975, 0xBC8F5034},
+ {0x48BCA1E3, 0x26BEF1B2}, {0x80760D90, 0xE8CE258C}, {0x00D461FB, 0xBAA97040}, {0xEE78F6D7, 0xD4A8E8B4},
+ {0xCB53C4D8, 0x09CDC872}, {0x2552B568, 0xED2D4746}, {0x6158682A, 0x1549C3D7}, {0xB6F1CE12, 0x4A192669},
+ {0x5A85BCA7, 0x133A3981}, {0x1D83AD82, 0xF2603A2B}, {0xB627E144, 0x16F584B0}, {0x9667E5F0, 0xACE6FAE8},
+ {0xAC412247, 0x50B6698A}, {0x8C76C384, 0xE9EF353F}, {0xAD412E79, 0x831619DF}, {0x0311CEDF, 0xEAA3A77B},
+ {0x15D2AA4B, 0xF9503169}, {0x7CCE5730, 0x25DDB2D0}, {0x4953C59B, 0x27B123DC}, {0x3691702A, 0x2ABE9C75},
+ {0xA0B0B8A6, 0xB047FE7B}, {0xC46A1EB8, 0xAA4751E0}, {0x6A10900C, 0x65ABF888}, {0xB9128318, 0x1650E4CD},
+ {0xE8A667B4, 0x71AA95AE}, {0x2E2420BC, 0xBEBB317E}, {0x5CB0DE9C, 0xF3332EA0}, {0x25B6AF81, 0x0B7822A7},
+ {0x9BA7BB76, 0x1E60066F}, {0x20E3DA2E, 0x5DA35427}, {0xECBF2927, 0xF35443E5}, {0x0F112B13, 0x1D64E88F},
+ {0xD67B93C0, 0x31F7FC96}, {0x5D4B04A2, 0xA6CAD69E}, {0x8948E9D9, 0x71837FF5}, {0xB6900675, 0xF1734D12},
+ {0x99E85184, 0x5F409475}, {0x999416BC, 0xCC67199B}, {0x0C096F7D, 0xE4BE1B71}, {0x63056BB9, 0xDA4C8CFF},
+ {0xBCF24B1A, 0xD1BA8404}, {0x3C86F2D9, 0x5411D110}, {0xCD2938B9, 0xC52073A2}, {0x159098F5, 0xE22595C7},
+ {0xA71163B0, 0x7019066C}, {0xE661202E, 0x166299E7}, {0xA0B34252, 0x559E2F72}, {0x34999B52, 0xADD01437},
+ {0xC5CF88B7, 0xBFF7BF9A}, {0x85173AB7, 0x9170F092}, {0x5EE3818F, 0x369B14A4}, {0xA53AFD02, 0x71E6AB87},
+ {0x3B285D99, 0xD26F6449}, {0x759B855F, 0xE0A30015}, {0x384D77AE, 0xCBA4EF6F}, {0xAA81C85E, 0xB6D22902},
+ {0xC710E643, 0x004073F9}, {0x8FD63446, 0x0EA4C5D2}, {0xD00F355B, 0xF4987D21}, {0x1DB48553, 0xCA373DD9},
+ {0x27271F2D, 0x2B5D4DFF}, {0x22DE3038, 0x61A63E31}, {0x95140211, 0x74483163}, {0x160B7E4C, 0x42AE1AA0},
+ {0xF80A3E6A, 0x11116D3E}, {0xB3D171C1, 0xE93C5374}, {0x4C329B22, 0xE61C00CA}, {0xE69D9239, 0x6727792B},
+ {0xFA42DC3D, 0x122EDC40}, {0xB27CBFF3, 0xD004F1E1}, {0xA8A44105, 0x401707E2}, {0x9166016F, 0xE4404223},
+ {0x08D1E2DF, 0xCCBBE78A}, {0x51F341A4, 0x5A88CB5B}, {0xE3A1DF2C, 0x34D5E0A2}, {0xA09F9596, 0xC22B7D25},
+ {0x01FF45DB, 0x5E91D52A}, {0xE55DA648, 0xE83E567E}, {0x1C5506BB, 0xFE390325}, {0x58E34343, 0xEBE5F29F},
+ {0x28E7A217, 0xC9D65452}, {0x07BDB57D, 0x89674FE8}, {0x6162D891, 0x0556F700}, {0xB66F7398, 0x533A8D91},
+ {0xB48F11BC, 0xF0EDE5E7}, {0x012DDC63, 0xB60ED94A}, {0xD91E9F3C, 0xAC399D5D}, {0xA1A1E7DE, 0x6C6EF0A4},
+ {0x7A06698D, 0x7B3108A7}, {0x0F14E7F4, 0xDBB78502}, {0x1333769A, 0x10DF4058}, {0x361DEAD0, 0xB3FB15A3},
+ {0x4E438178, 0x55E3E46D}, {0xBD73152D, 0xBB713192}, {0x0CF2B478, 0x2CCCF8BD}, {0xADC24CC7, 0x0CF6D847},
+ {0xEFE68F34, 0xF9BDA09D}, {0xECE07647, 0xCEE82B51}, {0xEF791670, 0x92021879}, {0xBCF99CA3, 0x158162D9},
+ {0x845C8FDF, 0xD80F879E}, {0x8ED6392E, 0xBF3D90B6}, {0xB908C9DB, 0x8CF431CF}, {0xCAD26D6B, 0x47426302},
+ {0xA2D129B1, 0x00BCDE12}, {0x54B1558D, 0x7A99536C}, {0xFDB1482C, 0xC3F78571}, {0xC3C1D849, 0xA452FA58},
+ {0xF3356D42, 0x680AB628}, {0x56A677E5, 0x0D2583BF}, {0x5BA20FDD, 0xA63E13F1}, {0xC067931E, 0xAF1903EE},
+ {0x61F09E70, 0x77C76621}, {0x9EEA261E, 0x3AE76A06}, {0x1F327279, 0x8140DD41}, {0xC3C30257, 0xB77DF492},
+ {0xE052835E, 0x77133A21}, {0x431C741A, 0x4DFF9C23}, {0xFDCEF998, 0xD21DF66E}, {0x2CA2C943, 0x536A5F9E},
+ {0x4B56B77D, 0xF240E976}, {0x52D37DC1, 0x15D3CF1D}, {0x81BBE3A7, 0xF8E18D04}, {0x03D561D5, 0xDBC1EECB},
+ {0x9D3F38B8, 0xF79B3E22}, {0x74CA9640, 0x6BD767E2}, {0x648B7FDD, 0x2FA7F184}, {0xF9729D9D, 0xF265AEC1},
+ {0xC25D3C50, 0xF0C0511A}, {0x1E1C2252, 0xFE31709B}, {0x17E74715, 0xD66270C5}, {0x1CB30BE7, 0x04086798},
+ {0x68FD55A2, 0x2D9587E3}, {0x2A767B73, 0xA550B764}, {0x108BE3C0, 0x7E5B9DC4}, {0x782F9A3D, 0xE5644249},
+ {0xC92F9A6C, 0x6379C6E1}, {0x65069573, 0x4874AF5A}, {0xE9AFD72F, 0x74025A50}, {0x206D6F05, 0xCA8EF960},
+ {0x646AFE18, 0xB6C691F9}, {0x57823FE6, 0x50F0BD52}, {0xAACD9A33, 0x73B6FD3F}, {0xB999324D, 0x149552F6},
+ {0x59D36153, 0x0B657549}, {0x8AEB6F92, 0x41B5E4F1}, {0xD28B9C81, 0xE7B0EB48}, {0xD57F9E8D, 0xD322A3FE},
+ {0x95232B51, 0xF5B49B65}, {0x693F8121, 0x3A84D79B}, {0x0240A97C, 0x6ED8FEA5}, {0xD2BC7731, 0x7AD9109C},
+ {0x831319A1, 0x6C042B4D}, {0x9E3190FA, 0xCD3EEFE0}, {0x40DFA914, 0xB2A9469A}, {0x836E570A, 0xA39C2840},
+ {0x7E770961, 0x5C2AD1A0}, {0x0732DF7B, 0x75BDA4A1}, {0x76AC2337, 0x4E935E77}, {0xDE8E568D, 0x24B482B5},
+ {0x1ED9ACB9, 0x34B142B4}, {0x12E1776C, 0x3E04DCA4}, {0x9BCC6F6D, 0x4BBB482A}, {0xA789CC13, 0x766FB9F6},
+ {0x0BCBB133, 0xA1374AF4}, {0x8CC31162, 0x0E8DCB82}, {0x4A23DC7D, 0x37574F45}, {0xC26E813D, 0x9DBC82E6},
+ {0x1EE8D797, 0xF291583F}, {0xE60F1FC2, 0x4431B965}, {0x7A44E00E, 0x0C0A84DF}, {0x2F5FFD5F, 0x18DBEF67},
+ {0x3953ACC6, 0x63F49B43}, {0x5277F35F, 0x1473DDCA}, {0x196CEEB1, 0x8CF1FC2F}, {0x09B01200, 0x5957EB89},
+ {0x80FBCD32, 0x42E63892}, {0x35E09D78, 0x1DD5C878}, {0x1A54970F, 0xCB232938}, {0xC6C2C634, 0x9C788FF3},
+ {0x4852D416, 0x19BFD8EF}, {0x2F1CF76B, 0x0E580F2C}, {0x7D44ABC4, 0x6210A3B2}, {0xD778981A, 0x5B2BE740},
+ {0x1EA5FF35, 0x55EB82E5}, {0x88CF890C, 0xECFFED95}, {0x4DEEAFDE, 0x34E9D149}, {0xF9B0E1B8, 0xDE9F272D},
+ {0x9C54AF3C, 0x9CD06D5C}, {0x7CDA1ABB, 0xA715D50D}, {0xF708423A, 0xA9ECDE78}, {0x14EF4E46, 0x9BDEA8F2},
+ {0xEE741A10, 0xA7ED3202}, {0x11602CF8, 0xA64AA912}, {0x78B2D1C7, 0x49D52EC8}, {0x2AB1AA72, 0x5CC3A929},
+ {0xFD1E34C7, 0xD56E4F29}, {0xD89EC46B, 0x8BCFFCFE}, {0x7671EE26, 0x46362167}, {0x1258D7C1, 0xB4EC034A},
+ {0x55BD2B7E, 0xCA174F87}, {0x6EEF1979, 0xE0C4C67D}, {0xFD9E1861, 0x4037624C}, {0xF9C4967D, 0xE6D013E1},
+ {0xDF298102, 0x6F6BAEE9}, {0xAB5F1807, 0xD9E2048D}, {0x0C138775, 0x720C24FD}, {0xE737FD27, 0xB6F59CE3},
+ {0x1EA0D645, 0xB9283B49}, {0xB381F9E6, 0x4A03F584}, {0x55F34775, 0x942F229C}, {0x6A9179DF, 0x92B4AA14},
+ {0xAEC751FD, 0xDF688D4C}, {0xF2D97321, 0x08073870}, {0x7094857B, 0x009CB37C}, {0x3EACD669, 0xEE2DC3A4},
+ {0xD8BAE5EF, 0x66DAA2F5}, {0xEE1F29CB, 0x71D702D4}, {0xBE2574CD, 0x12DF09D4}, {0xD025620C, 0x42802286},
+ {0x43C7B475, 0xCCD03517}, {0x7711D136, 0x0F4F4226}, {0x04DF6275, 0xE4257053}, {0xB2802D75, 0xB07AF751},
+ {0x67526C39, 0x9EA4A716}, {0x68B15E8A, 0xEA9C61DD}, {0x04EDA191, 0x47A3CCB1}, {0x927D0761, 0x1A65E624},
+ {0x3F98DFA6, 0x359FE950}, {0xD298B9D7, 0x9605565A}, {0x4BCC4A5C, 0x7D2B72DB}, {0xA75A619D, 0x2CBDEF3A},
+ {0xAA1299CC, 0xD249BD03}, {0x07F2B395, 0xCB4F2278}, {0x0E6451F4, 0xA346E8FB}, {0x1E63E931, 0xD00BCC3C},
+ {0xA4BBE4DE, 0x8FAA7C31}, {0x4737D359, 0x64E7FF34}, {0xF19BAA20, 0x207F0423}, {0x60774180, 0x2D125BB2},
+ {0xFA38D524, 0x36B9B52D}, {0x6E8456ED, 0xD8F7EFA2}, {0x44604C91, 0x62831774}, {0xA964028B, 0xE9929807},
+ {0xD289EA44, 0x697D05EF}, {0xC9AF1596, 0x346A681D}, {0xE2FBDDBC, 0x1643B538}, {0xB9BF55C9, 0x01677F70},
+ {0x9C5A253D, 0x1678ED5C}, {0xA30B291F, 0x8BC3118B}, {0x47FA6928, 0xA3D5F014}, {0x85D3DAF4, 0x490A87B2},
+ {0x1EE82688, 0x48A1C2DA}, {0x1C3A2D2B, 0xCD169FFD}, {0x56D5688D, 0xC3410AC6}, {0xB48179CC, 0xBA3C95C4},
+ {0xD4F596B8, 0xD2712B45}, {0x2985971B, 0x3B43F51A}, {0x44B51D4F, 0x3FA5AD08}, {0xECA5662F, 0x680E2CD7},
+ {0xBBD7C36C, 0xF50FBFB5}, {0x9BE613A8, 0xFA427EA4}, {0xA35FEE87, 0x9DAF1F33}, {0xCE1B3225, 0x5A7BB4E7},
+ {0x1BBA7013, 0x286A4E97}, {0xFF9DB02F, 0xF5F480EF}, {0x6F7E3715, 0x4BE72C3E}, {0x61D73E43, 0x39B6B76F},
+ {0xECA9E5C7, 0x8658628F}, {0x283BD904, 0x37FAD9F7}, {0x11CF2904, 0x4848D8C3}, {0x3F6A8C23, 0x8DB797AF},
+ {0xB3C50D2A, 0xE467D535}, {0xF944093F, 0xE01CC8FE}, {0x03E77023, 0x91A31706}, {0x59837D4F, 0x703C3D10},
+ {0x4AB752D3, 0xDABB9A40}, {0x8128D4E9, 0x38EFA99A}, {0xD3C92A4E, 0x7F786E0C}, {0x6B0760E1, 0xD9E678B2},
+ {0xEC402828, 0x99AE375A}, {0xC9C53170, 0x7DBE001B}, {0x5C56DD63, 0x361B8F4E}, {0x1AAA2763, 0x797DB655},
+ {0x9D771383, 0xF1EB4C09}, {0xF37F8A4B, 0x053DC4AC}, {0xDDDF8A03, 0xEAE075BE}, {0x71CFBA46, 0xD37AE529},
+ {0x1F49AA8B, 0xE7451E53}, {0xC3D571D3, 0x8E93C113}, {0xB4ECE5DA, 0xF67034E2}, {0x56BC70E2, 0x7200AF45},
+ {0x764E8943, 0xACC8CD26}, {0x45C19F7C, 0x68A46F51}, {0xD9A74C07, 0x222DD9FE}, {0x21CA2F45, 0x377269C9},
+ {0x4DBFEAE7, 0xB9E6AFDC}, {0x88AF41FF, 0x5318D67C}, {0x15935462, 0x43CE6885}, {0x98CB8542, 0xD62FEBF1},
+ {0x8D53AC62, 0xB4160452}, {0x1DDB8056, 0xDDF8499F}, {0x4E5B27D9, 0xF551E6B7}, {0x9AA17C28, 0x0FAAE6FD},
+ {0x6B61BC68, 0xFC8C4CD8}, {0x1FD64962, 0xF1C8C24F}, {0xA9318D7B, 0x809FF5B3}, {0xFCDB3892, 0x9A2B8496},
+ {0xB40D265A, 0x6EBE738B}, {0x63DF03D6, 0x012B64BE}, {0x714ECD4E, 0x9F39FC05}, {0xCB15DD1E, 0x00CF4479},
+ {0xEF71F714, 0x98A93426}, {0xD47064A1, 0xE2C76D44}, {0x1DEB0BEF, 0x225B7212}, {0x9A714B48, 0xBFC28A4F},
+ {0xC2380D8E, 0x4052A1F5}, {0x30BF9957, 0x2E2A9521}, {0x18244A2A, 0xD7213561}, {0x9B0D1125, 0xC5D8870D},
+ {0xEB17D99E, 0x5D284864}, {0xFFE5202E, 0xE2EB7DB4}, {0x070071E9, 0xDA9C7ABF}, {0x7324167D, 0x57995CB2},
+ {0xEA7E965F, 0xC9DE625F}, {0xEF671A3D, 0x908BF742}, {0x7C32372E, 0x98FC61E9}, {0x18E434A7, 0xA26A0304},
+ {0xEB1C316B, 0xC167DF1F}, {0xF013C10D, 0xF26DF117}, {0xC3766D86, 0x1F34FE76}, {0x82064129, 0x82EC5C03},
+ {0x370E1C16, 0xA426DE10}, {0x0EAC0C75, 0x56EB5653}, {0x83FA54AA, 0x9663C7E6}, {0xB90A88F9, 0xA3195584},
+ {0x91E0D34A, 0x769D587B}, {0xFD0D4E55, 0x5781E9E9}, {0xDD2B9CE5, 0x78C99E44}, {0x0AA2DEF0, 0x633B101A},
+ {0x7B3EC30B, 0xEB2D6339}, {0x46E1C969, 0xE147C1AC}, {0x6DE2B75D, 0x9B03E9CF}, {0xE9C0978F, 0x4D7DF399},
+ {0x9144D09C, 0xA55695AF}, {0xD0858007, 0xD1A006E9}, {0x59D63E18, 0x0FD622A8}, {0x0792A2D7, 0x2EED6C9D},
+ {0x7876A631, 0x66E42EE7}, {0x1C7E69A3, 0x6F65374E}, {0xF421568B, 0xD943CF68}, {0x6DC74BCE, 0xE5A154B8},
+ {0x40F92820, 0x2A59523C}, {0xD2585D6F, 0x8069D3FD}, {0x05D9E000, 0x4E8F0F08}, {0x094D3EBA, 0xE9F49AB7},
+ {0x8C189D12, 0x2676E7E5}, {0x457495E0, 0xCD96E496}, {0x4D85B4E9, 0xA038AF8F}, {0x83DAD46D, 0xFD535736},
+ {0xA4F8BD79, 0xD495743D}, {0xD4B26AC9, 0x262B0175}, {0x035E5D76, 0x7774563D}, {0x0FFE23BD, 0x81CF3087},
+ {0x71ACEDEE, 0xE4B6E7AD}, {0xB5A23F50, 0x5FBCACDF}, {0x55CAB70F, 0xB950628F}, {0x8DA303A0, 0x5F9312E3},
+ {0x0B077A55, 0x2067D98E}, {0x8BAEF314, 0xA10703AA}, {0xE5875FB6, 0x76F6B459}, {0x0025FD57, 0x770ECB32},
+ {0xF70404EA, 0x2E7AF5B6}, {0x42339E29, 0x2A6CB3AC}, {0xBACD2909, 0x3113AC07}, {0xC3EA32D1, 0xC8248F21},
+ {0xD12ED1E3, 0x609CD6F4}, {0x8A42AF71, 0xF84963B5}, {0x4CE5626D, 0xDCE730E1}, {0xB8F5FD8C, 0x18F2135C},
+ {0x01E7595B, 0x7682A357}, {0xA94E446F, 0xDBB88B96}, {0x8F033BA7, 0x953B5F31}, {0x479BB8F9, 0xE860036F},
+ {0xDC7BAF8F, 0x70C29249}, {0xF1753AEF, 0xC9A22468}, {0xD9955E58, 0xDBC8E8A9}, {0x05A73723, 0x10740A63},
+ {0x8EC012C4, 0x1082972E}, {0x2105EEB7, 0xB2C308BF}, {0xA4AFAD96, 0x08650DE5}, {0x4C3B348A, 0xC9F36AFA},
+ {0xBF7EEC3F, 0xFFBA3637}, {0xBC92D2FF, 0xF65090B1}, {0xB0D84588, 0xDE051ACA}, {0xA472A0B8, 0x69BD2FAC},
+ {0x71EBE8CE, 0x9349E27A}, {0xC786A1C7, 0x144E2AD9}, {0x31C9BB05, 0xB0F7C6A6}, {0xD14D7548, 0x30EE3CB8},
+ {0x0CF49198, 0xAB77DD59}, {0x3FDF0F3A, 0x9911E20D}, {0x57E2C483, 0xAC622201}, {0xCDA72D27, 0xC637F88A},
+ {0x075CCF2B, 0x0F35CBF1}, {0xE115D134, 0x3314B0F2}, {0x4002A4AC, 0x484FD8E6}, {0xE326C23C, 0x129CA1A1},
+ {0x187C28C7, 0xD148D10D}, {0xD2A3C4A1, 0x3F1BA9AE}, {0xD56CBBF8, 0xBA1770C6}, {0x2492071B, 0x6F89DA23},
+ {0x3E76D72C, 0x2D1EE9D1}, {0x81E7A20C, 0x8D83A3B1}, {0x06C517D7, 0x55977B65}, {0x20C5C133, 0xB500C3B9},
+ {0xCBE71F86, 0x10CE4E6B}, {0x3F5DB07E, 0x72DC3E78}, {0x3695F986, 0xDBF62A33}, {0x688F0A50, 0x7C597AD1},
+ {0x7C97A99F, 0x6DDACA43}, {0xCCE6DE2C, 0x001B95BA}, {0x45AAF1B4, 0x32B82CD2}, {0x43A70A0C, 0xE720D85E},
+ {0x09EEC006, 0x941657BA}, {0xDDBFB792, 0x4FB78E2C}, {0x3F5A1760, 0x3966E894}, {0xA974C8E2, 0x62D63608},
+ {0x416DD16C, 0xAED1C129}, {0x7A9A34C9, 0xB3684315}, {0x987CAF37, 0x07FB247B}, {0x38414165, 0x1C2CE325},
+ {0x4F7D6BEB, 0x94111489}, {0xE99E1AF5, 0x9646A129}, {0x0BAE9A1B, 0xEF8677A2}, {0x86F2A63D, 0xBE4A703E},
+ {0x02EC6A2F, 0xD4172B67}, {0xE838607D, 0x86D1FA90}, {0x14F55936, 0xA54F7973}, {0x94EE5C5C, 0xA2BCE0ED},
+ {0x4D78DE6A, 0x80AC54FA}, {0xD257D7F0, 0x40F564CE}, {0xD632A6FD, 0xC363B648}, {0xB93DAE14, 0xB79D4377},
+ {0x472FE670, 0xB099070D}, {0xFC2399F9, 0x7486E717}, {0xAAA0DFF8, 0x4B55B8CD}, {0x7A90C318, 0xED03FA93},
+ {0x5A33E444, 0x4504C6FA}, {0x46C2E7D4, 0xDB5539C4}, {0x1A6AE4A6, 0xC0C3C434}, {0x1660CAC2, 0xBDA59FC0},
+ {0x1D856754, 0x9A451811}, {0xB69D8D8A, 0x54A83F7C}, {0x5C774F75, 0xCFBC9F7E}, {0xEDA5C418, 0x5777F8F0},
+ {0xA40CA2BA, 0x9B04EB7C}, {0xE3010977, 0x4996439C}, {0x79B78A05, 0x4C3E4FEB}, {0xB1013DCC, 0x8764C15F},
+ {0xCC196CD2, 0xC8A4A557}, {0xB921FF9E, 0x80C060B5}, {0x48214F39, 0xB9557A4E}, {0x5B3B7609, 0x20CC31F0},
+ {0x2EDE6030, 0x6ADED0B2}, {0x119AA428, 0xC6CA563D}, {0xA0C6779F, 0x27679F96}, {0xC8777506, 0x644AF143},
+ {0xBC119B90, 0x1A3BC4B7}, {0x1BA9CC19, 0x4F161088}, {0x10512110, 0xACDE6366}, {0x95E369EB, 0x2C92CA71},
+ {0xBBEFF75A, 0xA40D218C}, {0x5581E855, 0xAA1D4A84}, {0x412EBA09, 0x5162D4B2}, {0x099EBBFB, 0x93C96467},
+ {0x7E3760C8, 0xF31C74F0}, {0x3EC04E9C, 0x972D30D9}, {0x09E55B10, 0x9EC4004A}, {0x05387B62, 0x465A462A},
+ {0x02EE93AF, 0xF59CFF81}, {0x2089036A, 0xB368842F}, {0x19A012C1, 0xB0AF3CD2}, {0x045D3057, 0x2D42A460},
+ {0xE71A4750, 0xD6BFE1AE}, {0x01857502, 0x04D5C656}, {0x25D58B4A, 0x4F6C2C4F}, {0xABE3016A, 0xEF2FB22B},
+ {0x46BBDB99, 0x837588E2}, {0xDAA7E96E, 0x91100575}, {0x787FA5F0, 0x9DCD6451}, {0x0E7325EE, 0xB0B176DD},
+ {0x71B4D6C4, 0xE3114E7E}, {0x42D20426, 0x940364D6}, {0xB530CDC6, 0x1B24C377}, {0x4CEC40D6, 0x7B72A185},
+ {0x2E25B679, 0xDAE82015}, {0x5DD95E1D, 0x31C38EA6}, {0x634C8907, 0xB3B2D8AC}, {0xC1544841, 0x8754AF20},
+ {0x9CA56381, 0x43FD2551}, {0x7FB240F2, 0x1C88665D}, {0xEAB86F7F, 0x19BA0624}, {0x3D98EC35, 0x58DA25E9},
+ {0x5CC9412C, 0xB1BDE0FC}, {0x242CC202, 0xAFBEFB21}, {0x5B180CDA, 0x91EFB388}, {0x68C9947E, 0x4F479E77},
+ {0x382B4ED9, 0x46714259}, {0x26A470CD, 0x0D1646B8}, {0x93A3ECA9, 0x588DD4CA}, {0x45C01C17, 0xD81F9284},
+ {0xC8F2DE19, 0x68914667}, {0x55000061, 0x58C2041B}, {0xFE4E1D5A, 0xCD5BA71A}, {0x35ECB315, 0x0BA63696},
+ {0x0A64B6BC, 0x279F5F50}, {0xF59622B4, 0x1FA16C82}, {0xB6ED366C, 0xE4E98C89}, {0x22188A33, 0xD72FACEE},
+ {0xC71D2933, 0x00AE53B8}, {0x863463FB, 0x5702D991}, {0xD3313EE0, 0x69FB2938}, {0x19DE7D80, 0x5387CBB9},
+ {0xC311BF0B, 0xF90E8684}, {0xC4AB3EC0, 0x2D14ED5C}, {0x8AA0E660, 0x39D64053}, {0x83E3F8E1, 0x9544442C},
+ {0x03F48076, 0xCBBDF86E}, {0x2AD4FD31, 0x60471E46}, {0x55887960, 0x59EA2713}, {0x45515634, 0xFA1E2910},
+ {0x7489F571, 0xA1DB42B9}, {0xD2A41C8C, 0x59D473DA}, {0x9749F19A, 0x6B7ADD51}, {0x869B7837, 0x8F18770B},
+ {0xB9D17899, 0xAB71F22E}, {0xC0AAD6FE, 0x6D80644E}, {0x6D07C620, 0xB2D731AE}, {0x0799F03B, 0x9B9BC815},
+ {0x4D548961, 0xA48878A1}, {0x495DE710, 0xFC8A7667}, {0x2BFB99A4, 0x08D9592B}, {0x082F1348, 0xAE971F5D},
+ {0x842034C4, 0x33DA2FF7}, {0x0C8CD07C, 0xF32F7443}, {0x91FF86DF, 0xF99D293A}, {0x0B8D7481, 0x52C7299D},
+ {0x11FDDC23, 0x682A80D1}, {0xA472F761, 0xFEA86D7C}, {0x0B5CCF9E, 0x0367F9EF}, {0x957888F1, 0xBD72C237},
+ {0x8F4EBC11, 0xA626EE8E}, {0x1B89930B, 0xB2354D05}, {0x0FA18783, 0x804AC513}, {0x280E3191, 0x2F4E5D41},
+ {0x841BFD76, 0x1E7DCBF5}, {0x0898AB18, 0xC8A2FBAD}, {0x6E1326B2, 0x837E4E6A}, {0x734AD8C3, 0xDC497AF6},
+ {0xA4254A1A, 0x6D4D9AB1}, {0x2C11CD9C, 0x8DE5D9FA}, {0x0EE49B85, 0xEFBC5137}, {0x91666CF7, 0x2A0D69F7},
+ {0x4DF4C673, 0x3694B0B2}, {0x3DB692A3, 0xF08B2529}, {0xDBB17618, 0x833ECBA3}, {0xF913A656, 0x9117EA4B},
+ {0x31F5BDAC, 0xFAF7D440}, {0xDE91B590, 0x424EEE65}, {0x7FF136AC, 0xF7FC1995}, {0x149EB7D2, 0x3522C213},
+ {0xF3390B2A, 0x52AEA6AB}, {0xFE3C3E6E, 0x14FDEF89}, {0xA3D725B6, 0xE1BC9D70}, {0x79B09127, 0x2D1173B5},
+ {0xD8A7AAF4, 0x089FFDD9}, {0x094F6C5D, 0x3794ABD5}, {0xBF111E21, 0x12B9BB52}, {0xD0A6E979, 0x623E05A8},
+ {0x6D98AE7B, 0x510E6F8A}, {0xF84EBD69, 0x00551946}, {0x274D2684, 0xEAB34AB3}, {0x5BA2CF45, 0x6B867D4E},
+ {0x5CE7BD13, 0x46C2E673}, {0xF448A670, 0x8F342B1B}, {0xEF648E1D, 0x7EB12BE9}, {0x0894A903, 0xC297AEB3},
+ {0x7EA8C11C, 0xF2B71A74}, {0x5E43C401, 0x33B20529}, {0xBE672772, 0xE22A796D}, {0x2098325E, 0x126C3524},
+ {0x6804FDAF, 0xEA1D157F}, {0xCD37615C, 0x87BFD02B}, {0xA451E067, 0x097BB6B8}, {0x19C91F08, 0x7959D822},
+ {0xFA06DBB6, 0x0F0AA517}, {0x1354393B, 0x32C9F3A4}, {0x02A22395, 0x928E2FE3}, {0x4BF2DCD6, 0xB855B119},
+ {0x2F11A648, 0xCF53DF29}, {0xECEDB0B9, 0x83EA1F8E}, {0xA92E7034, 0x1DF62E23}, {0x5A56ABC9, 0x7B031F62},
+ {0xCD2518B1, 0xAAF2CF69}, {0x1AC2680B, 0x0B934FD0}, {0xE607E688, 0x0F92D836}, {0xA7C22D18, 0xBF953E26},
+ {0xBB768A19, 0x39F70295}, {0xC6C99A5F, 0x64A28CEC}, {0xF4668A3D, 0xD88C9A65}, {0x0EFA8462, 0xD4BF2075},
+ {0x5A256BD5, 0xD1376EE8}, {0x410403E6, 0xE38CC9A2}, {0x4659685E, 0xD53A41AE}, {0xBA785DEF, 0x3C72B824},
+ {0xE5772A49, 0x77348471}, {0x1930CBC5, 0x27BBCE29}, {0x510A75C0, 0xAC2BC669}, {0x19AF42CD, 0xEC0269DE},
+ {0x1D360250, 0xE734B278}, {0x519D6407, 0xE69CAF15}, {0xBE5405AB, 0x96E8D48F}, {0x4620D15D, 0xB2BF9E8A},
+ {0xA2A20F2E, 0xB939E64E}, {0x19666DC3, 0x518C9793}, {0xCD24399C, 0x6873EE95}, {0x25447D81, 0x2DD1B50B},
+ {0x6559DFDD, 0x2C30BA6A}, {0xCEB1E053, 0x7B2FB3FA}, {0xF210A6E6, 0x6975D766}, {0x3A9EE621, 0xCB26AF16},
+ {0xA2ED821B, 0xFDB27D24}, {0x398A737D, 0x3FC7A0D1}, {0x9BEE23D1, 0xBEF427CD}, {0x48E2E127, 0x130DFC56},
+ {0x5F258747, 0x67F89C8B}, {0xC8082019, 0xF685F3FC}, {0x61BD0070, 0x1FDEC180}, {0x93712B6C, 0x26A2ADD8},
+ {0xEB4A1270, 0x9D8C9AC6}, {0xD62D8B9A, 0xA00BCFD8}, {0x4BECF039, 0x1A56D2B3}, {0xAE0C8ACF, 0xFD367753},
+ {0x46CCF87E, 0xF98BC41B}, {0x8D45C335, 0x38DF97EF}, {0xBF8A2CC9, 0x1F87AF36}, {0x28EC2651, 0xD36C0456},
+ {0x7047282F, 0x3E673C38}, {0xFD5FA119, 0x0562961C}, {0xE9BAB392, 0xA3FC2227}, {0x4B4D81EA, 0xCC0B13DD},
+ {0xCFC92808, 0xC3DED6DE}, {0xCD444094, 0x3955E3D4}, {0x58DEA460, 0x1FD879B7}, {0xBA881AF7, 0x81812CBE},
+ {0xBBD18E34, 0x293A8E58}, {0x9D37FEDE, 0x59209A49}, {0xC5094807, 0x659460CE}, {0xEEA831CA, 0x7A1668A0},
+ {0x9DFE3B4F, 0xD0839EC9}, {0x0F943563, 0x2DBA05F3}, {0x86E13991, 0xB77A6EDA}, {0x35B302B2, 0xC4406018},
+ {0xCAD3D44B, 0xD359E8BE}, {0x8C2B5E7B, 0xC450BACB}, {0x5AF99265, 0xF1682390}, {0x2B1C39F4, 0xFBB2B365},
+ {0x2EFDA00A, 0x10439C69}, {0xFD9B60C6, 0x9467FB2F}, {0x5555F35A, 0x957B8C99}, {0x8EBA811D, 0xE22FACBB},
+ {0xF42B6EAA, 0xAFC446FA}, {0x51B16B78, 0x8AB41426}, {0xC8EC1B10, 0x70AAE061}, {0x0DFB48AD, 0x9E6EB76D},
+ {0x6CAABB42, 0x4E9C698A}, {0x98100B86, 0x95A05720}, {0xE166A269, 0xC0072E05}, {0xAF16E626, 0xFCCEC647},
+ {0x4F42DF47, 0x86330F01}, {0xCE0510FA, 0x0D91CA85}, {0xBA32CEF4, 0x3C4CCEA7}, {0x414D16E1, 0x2052AEB4},
+ {0x231EF286, 0x3E770CFA}, {0x72074A12, 0x06273B84}, {0xA0A4AAD1, 0xFB598FB3}, {0x95EBC3B2, 0x8AE76657},
+ {0x383FDE60, 0x5C03D2FF}, {0xDECD2D67, 0xDAD106E3}, {0x968975B7, 0x2FDCB796}, {0xEC91347B, 0x0EF878E7},
+ {0xE5795F2C, 0x7BAD6505}, {0x7CF9442B, 0x157D5A9D}, {0xE0EA27BD, 0xBFC9AA61}, {0x1533C896, 0xAF737CF1},
+ {0xA7EABC78, 0xFE04C3D0}, {0x842D900C, 0x68BDDDAC}, {0xC4D1A05B, 0x669D6BB0}, {0xB4782800, 0x9C136DAE},
+ {0xDBA494F9, 0xFE6DA7AD}, {0x2B6E59E8, 0x6AAC02E2}, {0xE9AFF9C0, 0x8375381B}, {0x83C34D7C, 0x5006157D},
+ {0xF001E1E7, 0x7ED97E5E}, {0x8C105273, 0x8CE97194}, {0xD2615410, 0x9BF8F575}, {0x89FE21C1, 0x890D5C38},
+ {0x085B589D, 0x3C65057B}, {0x7D6D8F47, 0x425488C8}, {0xD9904D67, 0xD68E9D99}, {0x17AFDE28, 0x7FE28C54},
+ {0x42C2580A, 0x3A2AB304}, {0x716D7E38, 0x6FECC320}, {0x2FEB36BB, 0xB4B4329F}, {0xF74D3A41, 0x8F48AF61},
+ {0xB53450A8, 0x1F9D04DC}, {0x335D49A4, 0x49F63DF1}, {0x9F1C4368, 0xF62ACE1B}, {0x4CD43C51, 0xB623A6A5},
+ {0x3C0FD174, 0xAEC96BD3}, {0xAB1FD947, 0x1C903557}, {0x81619588, 0xD8678E9D}, {0xB142294E, 0x5A64DF09},
+ {0x456CAA06, 0x7DF97879}, {0x6251C67E, 0x24BD123E}, {0xA9B8F3F9, 0x0B27CE79}, {0x02511A10, 0x7688CDF2},
+ {0x4AE82280, 0x638251D6}, {0x14A8E566, 0xBD19891F}, {0xDF78BB4F, 0x30221728}, {0x6D277EDF, 0x44E46F2D},
+ {0xDA30E037, 0x5171A08D}, {0xF4394FDA, 0xA143A310}, {0xA8D0D455, 0x29A6B329}, {0xDF7628A2, 0x752E3FA6},
+ {0xB5229ED5, 0x3BC44DE2}, {0x706975C5, 0x278CBAD5}, {0x7DD9E1B4, 0x8644BD61}, {0x9C52F276, 0x04A7250A},
+ {0x319FEBDF, 0x1A0CDC21}, {0x9F9B8EB6, 0xCD006747}, {0xDAF6BA26, 0x988233C5}, {0xE6B1769B, 0x881A9EFA},
+ {0xF1182C34, 0x470631B5}, {0x19C74608, 0x2848F48E}, {0xF4A86439, 0xEB1E80C0}, {0x760664CF, 0xA24E1249},
+ {0x256BB53C, 0x14A6B7B2}, {0x6FF59195, 0xF9733636}, {0x023ACA30, 0x4894C373}, {0xD7B2B39F, 0x365A24F0},
+ {0x9657A383, 0xF4E5799B}, {0x8C181B3D, 0x1358B2B6}, {0xF43F4301, 0x2260ECDA}, {0x0E328400, 0x4C37EA13},
+ {0xA623361C, 0xCA25B988}, {0xE52A88A1, 0x09D674F5}, {0xC3FD56DE, 0x2768CB96}, {0x3A50D602, 0x65D886E9},
+ {0x816FB195, 0x0D1962F4}, {0x574E2F7E, 0xFC49442B}, {0xF718001F, 0x82DC0FF4}, {0x79940818, 0xD9FDF49F},
+ {0xA34A2301, 0x5BE6B4CD}, {0xD66664F4, 0xD8050A90}, {0xE2D3E430, 0x607C529F}, {0xF4478449, 0xD66288F1},
+ {0xE1A7C69B, 0x0E9FAFA9}, {0xB68FFED3, 0xEA02000F}, {0x6EDF5615, 0xC6378FCC}, {0xB94A3E23, 0xA16F664A},
+ {0x8F95E227, 0x2ABAA1D0}, {0x894E93DF, 0x9F7224D9}, {0x119E220D, 0x65847C56}, {0xD2EA38F9, 0x399CC3AD},
+ {0x617FFB9D, 0x7BD5F7FE}, {0x082A8430, 0xDF6174A0}, {0xA3CE83EF, 0x00013911}, {0x5E663802, 0xE09003A2},
+ {0x39D2E539, 0xBACC903A}, {0x3CB501CD, 0xEA9D1678}, {0x49CE5A56, 0xB8F57846}, {0x47D24145, 0x1AD55942},
+ {0x41167D72, 0x72FF483D}, {0x70968E68, 0x528850D1}, {0x0E14A0C0, 0x0C8E555A}, {0x10EF230D, 0xD10FD887},
+ {0xD69E6800, 0x5A848931}, {0x62005AD2, 0x02DEB053}, {0x3E3909C8, 0x9191007D}, {0x083AB9F9, 0xA078EB1B},
+ {0xC4E1CDC0, 0x1DC0BC45}, {0xA46B7AC5, 0x4AE54EA8}, {0x43A71BF1, 0x06370EFF}, {0xA1F537D1, 0x78C49CF5},
+ {0x2024B362, 0x3EE30D20}, {0xC1AC428D, 0x8A4DBD71}, {0xFA8979B3, 0xF44BD546}, {0xF33E5A61, 0xE0D568A1},
+ {0x230476BF, 0x418063CE}, {0x0EE8AEE8, 0xD6B7FA72}, {0xFE9A45F1, 0xF084B486}, {0xF5EB2A88, 0x2BA2D5F6},
+ {0x1F6B57CB, 0x43B16A04}, {0x1767E900, 0xA3DFBCD3}, {0xC8E78C7C, 0xCEE6CBE3}, {0x428735E1, 0x83AA3592},
+ {0xBB8BB7F7, 0xDCBF48CE}, {0x5FCCE2D7, 0x02CAD839}, {0x1F192667, 0x8B3C742B}, {0x5EFD15FA, 0x6DF62D47},
+ {0x119EE002, 0xE2C0532D}, {0x79DD2955, 0xD0036D1C}, {0x22D5218C, 0x1D2D52D5}, {0x10AE0B58, 0x6B99E552},
+ {0x8BD4A191, 0xFB2D9C4E}, {0x96229240, 0x3C371237}, {0x5110A985, 0x387E527B}, {0x382F32E1, 0x4CFB9F9D},
+ {0x65AD7FE1, 0x02E19006}, {0xB4D308BA, 0xFDCF3F4A}, {0x8317BB5F, 0x11E59193}, {0x21E6264C, 0xE1325FD7},
+ {0xC4A15F6D, 0x7BAE3025}, {0xD1F7F484, 0x11B190E3}, {0xB56E80D1, 0x633EA020}, {0x10983AF8, 0x668016F4},
+ {0x026C3FC6, 0x0688FEDC}, {0x015E4F24, 0xC50ED719}, {0x715D9F5B, 0xF0DDC7A2}, {0xA1A26EDF, 0x941E8FCC},
+ {0xD316E798, 0xC273E28C}, {0xA34180C1, 0x2032D205}, {0x51C039FB, 0x2957AA0D}, {0x7E6A198E, 0xD4B833B1},
+ {0x88E6F311, 0xF3D1D6D0}, {0x26239FA3, 0x14086ED7}, {0x774ACDE4, 0x4CEE9AF4}, {0x0466FEEB, 0x5192B27E},
+ {0x78663925, 0x97B2B6DA}, {0xAA1858CB, 0x9E4B411B}, {0x07CA6C3D, 0x777722D9}, {0xE365A927, 0x495281A2},
+ {0x738A8508, 0xE0B85EBD}, {0xF6EE9AA3, 0xF34CBE15}, {0xE32B04BB, 0x786D658A}, {0xDBEF2FA5, 0x7FE23433},
+ {0xC0A9BB38, 0xD91C5C14}, {0xA7890FCE, 0xCFF53665}, {0xDE2ADB15, 0x56FBBF58}, {0x273A5028, 0x0EBF5D72},
+ {0x55872379, 0xDCB1348D}, {0x223CD567, 0x6855380D}, {0xC832C06C, 0xD85B4F61}, {0x39BC89FD, 0x7C31B42A},
+ {0xB0B47A41, 0xB75F7941}, {0xB30F17FF, 0x3FB990B2}, {0x1C7AFD8C, 0x06BCDE8C}, {0x24CA42B5, 0x15C4F599},
+ {0xD2453775, 0x4D644A39}, {0xD670F0A6, 0x54501562}, {0xDF8303D7, 0x9B0D3998}, {0xAEF9B90E, 0x9BA6F6B3},
+ {0x1042D1E4, 0xA0410486}, {0x3A39869E, 0x0A8D3E94}, {0xE801525E, 0xFD25771C}, {0xCA3A30E5, 0xF6B6E159},
+ {0x2917075C, 0x609B567F}, {0x4BCC235D, 0x9B4DAF6D}, {0x1DAD1A45, 0x12F0250D}, {0x77C9BC31, 0xCF476888},
+ {0xD50335DC, 0xE67D7B76}, {0x36C64610, 0x9185FEC9}, {0x5397F399, 0x5C810F39}, {0xE17486A2, 0x9185539A},
+ {0x8E5892EF, 0x6AB27BF5}, {0x26C06A8A, 0xD126DFB7}, {0xBE21E2B0, 0x2EE9C0FE}, {0x588DE8DB, 0x8C91381B},
+ {0xBC2B041F, 0x854EED21}, {0xAD6FFF51, 0xB6017751}, {0x9CB77414, 0xFD29F8EE}, {0x81CC95C6, 0x0AF58B7D},
+ {0xC9EFB6D3, 0x3842D3DE}, {0x44721B92, 0x117725B6}, {0x286F3CEA, 0x36ABF2BA}, {0xA3B0E4F7, 0x4E2E6A3E},
+ {0x49274518, 0x814600BB}, {0x1184473C, 0xF05B5555}, {0x6DEAF964, 0x732A1720}, {0x3E16339F, 0x23955D44},
+ {0x68E1720F, 0x491C8F02}, {0x0ACB7C08, 0x6B10CF60}, {0xF90CF7A2, 0x28745A31}, {0xBFE4A79D, 0xE6774A7B},
+ {0x7DA8B4B2, 0x1A1A4319}, {0x0CB3628A, 0x32A136BA}, {0x9406838C, 0x29714628}, {0x9D9F6FD2, 0x4E01488F},
+ {0xD919DBEE, 0xE4D654AA}, {0x9F150D20, 0x23DD32CB}, {0xE57257CB, 0xFDA88563}, {0xC05C812D, 0x61DD0461},
+ {0x95A68693, 0x6F51BE10}, {0x12613AC3, 0xF774D6AC}, {0xB46E5E5A, 0xA9107C98}, {0xBF2CD12B, 0x51818F4E},
+ {0x96857ECF, 0xCE33591D}, {0x0644A065, 0xF77E1F02}, {0xF997B14F, 0xE0D9D38C}, {0xBB58F13E, 0x0C70E720},
+ {0x5EFD27CB, 0x8E8E75C6}, {0x24472804, 0xFD23F74B}, {0xF457A2BA, 0x99459E9E}, {0xC420D0D5, 0x3EE078AD},
+ {0x12D7553F, 0x05401FB0}, {0xD02E68B6, 0xA7619C48}, {0x3883DEF0, 0xA4459AEA}, {0x93F86304, 0x78CF79BB},
+ {0xF1BB982E, 0xC2D5955B}, {0xAD677885, 0x371E60FB}, {0x14C21E0B, 0x4E107EBD}, {0x245E81B8, 0x8F8863D0},
+ {0x8C422105, 0x389C3A34}, {0xC1AC047A, 0x45D414C9}, {0x16E8AF2D, 0x21987E2D}, {0xACA558B7, 0x572B3FA3},
+ {0xE48D373D, 0x92B531E3}, {0xD2090F41, 0x80583512}, {0x83808C1D, 0x57AEBBC0}, {0x8D79CAA7, 0xFF970A5A},
+ {0xC15413B8, 0x6273EE5B}, {0x589557AB, 0x24859D33}, {0xD3F6709C, 0x7F8F3C62}, {0xC1DB9AA3, 0x24AB9996},
+ {0xB731B064, 0x7AD7541D}, {0x576E1341, 0x5D7416AE}, {0x2AB72CE2, 0xFB69E6D4}, {0x5AD913DA, 0xB6D6CB64},
+ {0xAB5719D0, 0x14B2DDE0}, {0x15ADB38C, 0x23BDFCAB}, {0x748865B9, 0x94F4FE6E}, {0xC323150B, 0xB15DF985},
+ {0xCA6602E3, 0xBA818154}, {0x71F12132, 0x13664F98}, {0xFDF72B8E, 0x580020DF}, {0x0BFEF425, 0xC89CB6BF},
+ {0x148A652F, 0x3A61484D}, {0xCD4F091C, 0x3183CA72}, {0x303D8714, 0xEBA3611E}, {0x94ECBC0C, 0x1EE96FF1},
+ {0xFE3CFA4E, 0x9CFF21A6}, {0xA8181C9F, 0x72BF3809}, {0xCD7E1825, 0x8F36F510}, {0x4C7A16EC, 0x9DC20B12},
+ {0xB902FA44, 0x4FB785A7}, {0xF4E0BED0, 0x18DED795}, {0x9B17F2A6, 0x60DC1770}, {0x39EEC7B2, 0x7010616C},
+ {0x8FB013F2, 0xBE333F22}, {0x786FBF92, 0xCD75465A}, {0x64E696E7, 0x8CB3B127}, {0xE852A5FF, 0xAC021894},
+ {0xC5457877, 0xBF3944DD}, {0x51D571B8, 0xC0AC0DF9}, {0x569CCF7E, 0x49541D94}, {0x8015E23A, 0x117B33C5},
+ {0xDACAC13E, 0xA01759B1}, {0x10F3382B, 0xAE777BCE}, {0x29AE918A, 0x963A577F}, {0x03528B44, 0xAD371780},
+ {0x81857CB6, 0x34B3661C}, {0x6D32F8BD, 0xBEDA813E}, {0x257628E6, 0x618DB928}, {0x818768B3, 0x97B3D5CE},
+ {0x0703BB62, 0xF5606E8B}, {0xF19A59F2, 0xF753EF26}, {0x2807474E, 0x1B3FBC44}, {0x0F20CC05, 0x9018E747},
+ {0x4FE25CF5, 0x0B7048BB}, {0x9DE30F98, 0x66E91F3D}, {0x0A9371FD, 0xA7737458}, {0x4F5836F6, 0xE413A123},
+ {0x66E00980, 0x22FD79D9}, {0xB1DE2B68, 0xD44CFB31}, {0x8A9D2592, 0x99C7F669}, {0xADAEC0B5, 0xBB636F1F},
+ {0x3D30D497, 0x013A6792}, {0x1ECB6D05, 0x835AAADB}, {0xEC0FF949, 0x8E9D0C23}, {0x579010AB, 0x85CF29BB},
+ {0x560EC863, 0x4B1662B3}, {0xBBC46981, 0x0DE6BCC0}, {0x816D032B, 0x1547819B}, {0x6032533B, 0x4094EFC0},
+ {0x7FBDA410, 0xDB5A73DC}, {0xCD4D2E66, 0x574721E2}, {0xE2088323, 0x9700BFC5}, {0x51A10C57, 0x7C52FC76},
+ {0x03693412, 0xC49AACA2}, {0xD0C00746, 0x9BF96F91}, {0x49CDE5BB, 0x287C761C}, {0xE5899FF7, 0x40F886D0},
+ {0x8D18B0DA, 0x27829E7D}, {0x340D0A94, 0x7245E3FC}, {0xA610AC39, 0x6C0A2140}, {0x3608169A, 0x11B408A9},
+ {0x4ABDFCB3, 0x1A37819D}, {0x2785C41B, 0x160E739D}, {0x64366EB8, 0x0FB217DE}, {0xB858E983, 0x44111803},
+ {0x55934501, 0xC70EE764}, {0x62DC7990, 0x0A87083E}, {0x18626D3A, 0x0FBE894A}, {0xF4D6A17F, 0x41093311},
+ {0x12B45461, 0x52BCF79B}, {0x8AFA855B, 0x4407894A}, {0x874B42EC, 0x203EA319}, {0x6CED8F43, 0x1D7C3C21},
+ {0x37582120, 0x3BC1EE1A}, {0x18FA499D, 0x4BAA57FA}, {0xB7BE150A, 0x44082081}, {0x4592511C, 0x0D25A8E8},
+ {0x9448788F, 0xD8F308AE}, {0xBAB1BAD8, 0x2A0E5726}, {0xE0C2F60B, 0xB8BBC4F1}, {0x69773C43, 0xBB971E93},
+ {0x9847922D, 0x3F8515E7}, {0x62D5AC57, 0xE5F517FD}, {0x9FC7AD36, 0x62B635C5}, {0x293F087A, 0x5E3AF1A4},
+ {0x0D909188, 0xE27C535E}, {0xF6250AA8, 0x60B5238D}, {0x4F0B7574, 0x577BC5DF}, {0x6ABA7D54, 0x19AD29AD},
+ {0x392CB1DE, 0x726F5EDC}, {0x021F6C90, 0xC0E79981}, {0xA06EAEE9, 0xF64AB803}, {0x7DEFB04F, 0xDA2DCD02},
+ {0x7BC9E21B, 0x7F71BD84}, {0x75EEC1DD, 0x44C9201D}, {0xBE7B7F2D, 0x644C6B30}, {0xF41ADE15, 0x808DCC4F},
+ {0x3269C9EE, 0x10BD931D}, {0xB2F24CA2, 0xAA0BF767}, {0x6786D720, 0xEAC987E4}, {0xD31CD266, 0x85D492C6},
+ {0xBE1E5370, 0x34C78574}, {0xE37AE393, 0xB90F0ADA}, {0x6B425EF8, 0x71B070D4}, {0x7EEAC1B3, 0xA369103F},
+ {0x915E89BE, 0xB5DC17AD}, {0x4C9C57B8, 0x3081C654}, {0xE437DF3F, 0x2E62FA00}, {0x0C4A5966, 0x00CAE644},
+ {0x5D49F5B6, 0xCF6710B9}, {0x63902145, 0xBBBB4696}, {0xC385D4FC, 0xF142821E}, {0x3CDD65A1, 0x968B1063},
+ {0xECB060EA, 0x99D582E8}, {0xBEEEB320, 0x832F1256}, {0x09BA1C9C, 0x50B65A9C}, {0x09AD1D25, 0xFE5A07AF},
+ {0x01D6E2B2, 0x8BDCA5A5}, {0x6F169E8B, 0xF4DF388C}, {0xAA23433B, 0x8CED039E}, {0x6306D446, 0x6D84F83D},
+ {0xCE1DF4B1, 0x11E5F4AA}, {0x09A54A8B, 0xF8320462}, {0xD1EAB681, 0x7E7BF507}, {0x1699971E, 0xAB861528},
+ {0x01FE79BC, 0x115F5728}, {0x4B3ECD67, 0x8F59CCC0}, {0xBAFF497B, 0xF4032E4B}, {0x6B917F9F, 0xFE06AB87},
+ {0xE9D57141, 0xE514C0AD}, {0xD9A20B67, 0xD78D184A}, {0x60699D94, 0xBEF6B650}, {0x5ED9AF21, 0xCE945154},
+ {0x4AF402D2, 0x7B317807}, {0x2B3711A5, 0xCAC82A9B}, {0xDBC30F4C, 0xD28D19A4}, {0xE849E3E2, 0xF2C58FF4},
+ {0xB950D9E8, 0xF8F9A77C}, {0xE58D3DEC, 0x49F7576D}, {0x40FC1720, 0x03693CD0}, {0x6C162B9A, 0x762C7D51},
+ {0xAD63272D, 0xEA214BE8}, {0xEBC1B87D, 0xB784F5AC}, {0x44A0D9EC, 0x9AF6846B}, {0xE04527EF, 0x74E2EF46},
+ {0xFD3217EC, 0xB997FCAD}, {0x19AC7703, 0x2794C85E}, {0x9E6FBA47, 0x4F06C77D}, {0x8C6ECFB0, 0x44E623A4},
+ {0xBD846BBD, 0x29765272}, {0x314D5877, 0xC965A05F}, {0x310493D0, 0xBCDC06A7}, {0xAE352B81, 0xE1EF1158},
+ {0x86D45CA5, 0x70DC2485}, {0xF72314C6, 0xD96E1940}, {0x094080EE, 0x6937E52D}, {0xC91C6F63, 0xD4CF92DA},
+ {0x9FED6E4E, 0x69FF38CF}, {0xA37B1B7A, 0xF315A736}, {0xAF5C5719, 0x6C244311}, {0x0B9F7468, 0x217CC196},
+ {0x1885E9BF, 0x9A2CA36F}, {0x17736435, 0xB77D6408}, {0xE41C5215, 0xDC85B604}, {0x9BA88EF0, 0x4BB6E0A7},
+ {0x03332126, 0x5EF7D107}, {0xB4C023AF, 0xED4442D7}, {0x2E6E001C, 0x4AD08811}, {0x69424BFD, 0xCD1901A7},
+ {0x317A522A, 0x7859FF76}, {0x6309480A, 0xCF065CC2}, {0x95025E42, 0x89D527E0}, {0x54065869, 0xCEB46975},
+ {0x833C4A8F, 0x82952D56}, {0xB9E15871, 0x9F335821}, {0x68C6C483, 0x67FD09F2}, {0xA8BE9C2A, 0x18F197A2},
+ {0x215CFA14, 0xFCCCCEB5}, {0x4EB3E24F, 0xD103A4D6}, {0x2C1F2110, 0x4EFC8770}, {0x424C0B32, 0x7CB4870F},
+ {0x3F37E44C, 0x94C825AE}, {0xAA1AA5F9, 0x9B22EB6A}, {0x3BD70F2B, 0x567A0E69}, {0x0DE12FA6, 0xE2120B6D},
+ {0x93FE95A4, 0xA0DEE9CE}, {0x02AA33CC, 0xC4CD7714}, {0xD65C003B, 0xA5E7C2A3}, {0x726588BE, 0x2543F27B},
+ {0x2643E56F, 0xE8A94E96}, {0xE329A89A, 0x05CBDEE9}, {0x2AA14D2B, 0x69521765}, {0x105EBED8, 0x11877CC9},
+ {0x0F5FB63F, 0x006004B3}, {0xDA8AEF47, 0x00747706}, {0x6B341F56, 0xFC11CC97}, {0x52C72CBA, 0x0A10D77F},
+ {0xC489D78E, 0xBF2BD7E6}, {0x8BC65C4F, 0x6DB0C2BC}, {0x2724FCB5, 0xDFDD1A92}, {0xA306CA04, 0x5B83C757},
+ {0xC3FD3149, 0x628FCE75}, {0x9036D448, 0xB5787C26}, {0x27126850, 0xB7FD6278}, {0xA4693AA4, 0x2991AB65},
+ {0x21C22094, 0xB1577606}, {0x1DCCD755, 0x559A2EC6}, {0x1FF3BE37, 0x0482DB3C}, {0xAB840788, 0x9617DE8B},
+ {0xA2D2B262, 0x8AC428C6}, {0xDE61C33D, 0x6E8476E2}, {0x3C3440E7, 0xA3A5A3DA}, {0x8A17D494, 0x28C3264F},
+ {0x3DACE98E, 0xF382EF09}, {0x9B38B869, 0xFCFD0310}, {0xD64A52F6, 0x5D6FB5BE}, {0x3B20FDB8, 0x0104C068},
+ {0x096FF547, 0x865DBF73}, {0xDB90D9BD, 0xCD9BC62A}, {0x271E5726, 0x62E10BF3}, {0x88D5B0E3, 0xC0756DE8},
+ {0x879941C9, 0x77154153}, {0x1ED42868, 0xD54B6FED}, {0x783022DE, 0x8B29A094}, {0xE024A295, 0xC734A23E},
+ {0x7C3F1280, 0x4DD6A568}, {0xC15A4FD4, 0x7A72A176}, {0xA8A6F698, 0xF748917F}, {0x0FD13FD1, 0x44960539},
+ {0x1E2DFE19, 0x6BCBE87A}, {0x19E71AB2, 0x2A38B12C}, {0x158F30BF, 0x68EAFEAB}, {0x5F25A1DF, 0xAD17BC97},
+ {0x21EDA7BE, 0x38479F20}, {0xA3215538, 0x0C980427}, {0xCBD82992, 0x754528A3}, {0x8242041B, 0xF5F55A32},
+ {0x8EDC46AC, 0x5766D47B}, {0x255A7CEC, 0xCD479C37}, {0x874178A5, 0x7DB8C159}, {0x1FEB0CA1, 0xE976D9A2},
+ {0xFE270B29, 0x14B58D1E}, {0x55575A5A, 0x1E48DA37}, {0x49C1057D, 0xFCD1619A}, {0x4C821728, 0x79A1B400},
+ {0x52EA2246, 0x2101EE72}, {0x008F823C, 0xAC22A133}, {0xB43B01EC, 0xE7367159}, {0x6B1DC7BE, 0x9A17C34D},
+ {0x57E96388, 0xFA23801A}, {0xF8CC1B68, 0x2DFE1FF5}, {0x70C702E1, 0x5AF1C9BC}, {0x0ABEB7FF, 0x4C1F8004},
+ {0x35465A15, 0xE2514FFC}, {0x94919EA0, 0xC74D6A13}, {0x00CBCAA6, 0x14704D80}, {0xA3DADDE8, 0x72DA4FA7},
+ {0x1FB186E8, 0x49BC2A58}, {0xC71BA3CB, 0x887D384D}, {0xAE41219E, 0x172E1EB0}, {0xD57F6C08, 0xA3ECE03D},
+ {0x4393FE8C, 0x8BC72A6F}, {0xAEC6E58C, 0x097FB054}, {0x616552C5, 0xBA4B85AB}, {0x50726D28, 0xFA04E928},
+ {0x7AD98409, 0xF191461A}, {0xC79D6952, 0x281E2161}, {0xF4F7A6BE, 0x022F8BC0}, {0x44011B8F, 0x1A980437},
+ {0x9A58A2C4, 0x73305F4F}, {0x632B2CEB, 0x05EE8622}, {0x32764BCE, 0xC31C892D}, {0xC85F8D17, 0xE5129796},
+ {0x8B2C2521, 0x6DFDBC65}, {0x962BAB2C, 0x71E26DD7}, {0x55178116, 0xFD3FDEC0}, {0x642CFE55, 0x80CFA718},
+ {0x4C15317C, 0x40F51A2A}, {0x572C3036, 0xC81754C2}, {0xEC75FC45, 0xD2B96C69}, {0x19E7A0E7, 0x3019A705},
+ {0xBE19D5D2, 0xDB4BF9A6}, {0x7216C867, 0x82D6DBE3}, {0x3D6A7D48, 0xF200EA39}, {0x9F43E630, 0x39DCE99B},
+ {0x5E7CC8FF, 0xD95719CB}, {0x49737627, 0x81DB00ED}, {0xD11272BB, 0xCFF9BB65}, {0xCF618AE3, 0xDE36FB56},
+ {0xD6708B39, 0x8666C866}, {0x689757A7, 0x9069B449}, {0x6395CDDF, 0x60F2050D}, {0xC2204700, 0xA5330733},
+ {0xF233BBE6, 0xAC0293A6}, {0x3D3FB467, 0xC408BAD3}, {0xD6B623F3, 0x9EB80E06}, {0x55F30F91, 0xD64E9C3B},
+ {0x34CEA433, 0x0BED5D2A}, {0x473495C2, 0xDDBB9602}, {0x927E7168, 0x257A22D4}, {0x1976EA27, 0x78080C2C},
+ {0x549EDEC7, 0x494D771A}, {0x18F42776, 0xFF8B5803}, {0x9D8A13E6, 0xAF8B51D5}, {0xB6FCCCF4, 0x5632D841},
+ {0x68943C6D, 0xCDFC2FFC}, {0x513642B5, 0x2C33251F}, {0x5A35414F, 0x319E554D}, {0x032AE0DA, 0x201CAB21},
+ {0xEF0D62F2, 0x4596232A}, {0x2CD484EF, 0xF6560B10}, {0x3BE924BF, 0x3C9FFEFA}, {0x372AFD79, 0x002722F3},
+ {0x808FB881, 0xF56E6EF1}, {0x54067C8B, 0xEF809A9C}, {0xA8B64491, 0x1C3AC2A1}, {0xC417059D, 0xCAF7F5D3},
+ {0x72232F30, 0xB0C76479}, {0xF15EC234, 0xAF48F5A7}, {0x5C13F14E, 0x85CADA20}, {0xD618A9FD, 0x41BBF406},
+ {0x96E717B0, 0xCD9B9538}, {0x05462E44, 0xA9579F8A}, {0xD3644B5D, 0x39DE2570}, {0xD96003F3, 0xB1D2681C},
+ {0x6671A37A, 0x51A687F3}, {0x608AE874, 0xF4BDB9DA}, {0xD797B565, 0xD7A95A09}, {0xAB70276B, 0xC02DFB0A},
+ {0xE655A74D, 0x560A1B9B}, {0xDED43A7D, 0x7AE220F6}, {0x313204A8, 0x51C1789C}, {0xA13305BB, 0x2268AA92},
+ {0xD21E1426, 0x130773AE}, {0x69BF2C96, 0xB6EFE308}, {0xCA9892D8, 0x8F268505}, {0x73A81CF9, 0xA68835D1},
+ {0x03953392, 0x22D1E056}, {0x8DC49ED4, 0xB9DE5BA8}, {0x706662C6, 0x16F6EA0C}, {0x7965BB1F, 0xDE8969B8},
+ {0xD3217283, 0x7F5129D3}, {0x844A521E, 0xF5437A5F}, {0x4415EDF0, 0x714CF6CE}, {0x90CC6F16, 0xEAE730EB},
+ {0xC66E2ADD, 0xA0A587CC}, {0x87E67AEB, 0xA10E3C9A}, {0x67405520, 0xAFA660C2}, {0xECBACE95, 0x5C037A8F},
+ {0x1715ED87, 0xAB862DB1}, {0xEF8499A3, 0x1DC5546B}, {0xE511CAFC, 0xD41986A3}, {0xC61CE786, 0x61214F12},
+ {0x07A22140, 0x5BF19B71}, {0x544F66F4, 0x1A349D14}, {0xECB52622, 0x59B50276}, {0x70924390, 0x0A4E0FF5},
+ {0x324B8769, 0x69522722}, {0xD13358EB, 0x21DDDA3D}, {0x2C7FF1C0, 0xD92E24BB}, {0x56D96EE6, 0xB75FFB0E},
+ {0x4064476F, 0xC479143E}, {0x9564F26D, 0x51D0F827}, {0xFA021243, 0xBA698EA9}, {0xC9A69649, 0x46C22700},
+ {0x96B88376, 0xA19DA92F}, {0x1A6E34A4, 0xC4132A27}, {0x2F13667D, 0xA406C819}, {0xA764C559, 0x661BDA00},
+ {0x44F31600, 0x382529D9}, {0x45D9E4F6, 0x2D34FD90}, {0xDC72AA33, 0xA6FB6AE5}, {0x83039335, 0x3E39BD96},
+ {0xA785DF18, 0x6DAA24D2}, {0xA61A98F1, 0xA4E66FA9}, {0xA3146684, 0x42575DD9}, {0x735E25E1, 0x53F85CBE},
+ {0xE871F9B8, 0x50938AA7}, {0x5C9F9928, 0xFA672FA6}, {0xDE23FE54, 0xEFEBED4E}, {0xF085F1DC, 0x0330286C},
+ {0x2C1E5071, 0xB1C62D2A}, {0x52E68E4E, 0x62EE39FE}, {0x9A79A0B0, 0xC225CDE8}, {0xEC9ADEE4, 0x7C9A504C},
+ {0xF3562C6B, 0xB0128854}, {0x98157B98, 0x0368DCCE}, {0xB726A605, 0x3B06CEB4}, {0xE82BF1F8, 0x5911E3B6},
+ {0xA063A114, 0x363771E7}, {0x70249589, 0xD6D14E4F}, {0x1CE592C5, 0xE2BC0399}, {0x7B28AB18, 0xFBCE27D6},
+ {0xC6F8CFCC, 0x04A2C404}, {0xB41F305D, 0xA5F34050}, {0x3E767358, 0x37733021}, {0xEC01B76C, 0x4108D5F8},
+ {0x95B03607, 0x44A37EE7}, {0xADD9E454, 0x33E959A6}, {0x6483E523, 0x9D4AC94F}, {0x1FF275DE, 0x8CE07F93},
+ {0x3C07D332, 0x5DA51121}, {0x4DD643B4, 0x57E6E177}, {0x742DECBA, 0x50843D60}, {0x53C134EF, 0xD6133CF7},
+ {0x161490E5, 0x63290B88}, {0x29BE235A, 0x84FAE3F3}, {0x1B9AD12E, 0xAF3B8A23}, {0x6DE50915, 0xEA60726E},
+ {0xEC8BAEE7, 0xA7DAB632}, {0x81ED4805, 0xE19A0679}, {0x69D17F29, 0x2EAD13DD}, {0x0B384825, 0x832B2A43},
+ {0x6A778ABF, 0x30ADFB49}, {0x2540EBB6, 0xC05B75CA}, {0x3B3B035B, 0x52783A55}, {0xBBD3ACB8, 0xE21C02A9},
+ {0x0678B28C, 0x6CEA9D10}, {0xE809FB36, 0xA3ECAA94}, {0xD5BDCB92, 0xB80EB3E2}, {0x5F5A12E3, 0x48BA4CB3},
+ {0x3894E8AD, 0x54F2C6F8}, {0x0428E54E, 0xF30D801A}, {0x95BBD42B, 0x309F8A36}, {0x1BB4DD18, 0xA2504205},
+ {0x31FC144F, 0xECD8AFD5}, {0xB284392B, 0x011BD925}, {0x14FDBFA3, 0xF0AD1F8C}, {0x79C41678, 0xFBAE9640},
+ {0x3EAB3564, 0x1B3089CE}, {0xB39E19AC, 0x4E08B885}, {0x861E3DC7, 0x06053F16}, {0x2FBD1055, 0xBB5B92BB},
+ {0x3EB6F5D2, 0x7FF78231}, {0x0C18F24C, 0x626F58A3}, {0xA54E022B, 0x21CC7451}, {0x2BC1AC3B, 0x960725BF},
+ {0xFA6DFA80, 0xD151CC78}, {0xCFFE7E9A, 0xEE526446}, {0x3931D35E, 0x1FD7D4D7}, {0xD9A6D2EA, 0xC602DCDF},
+ {0x3CF0BC6B, 0x5BB56DD4}, {0xBD705E9B, 0xD27E3641}, {0x4E8509E6, 0xF3E4027A}, {0x090D3932, 0x2084A3C2},
+ {0x00047004, 0x7DF034DD}, {0xB15D66BF, 0x1A10AE19}, {0xC7AA9E4E, 0x6BCB5701}, {0xDCFD09BA, 0xE69E6C43},
+ {0x976E472E, 0x9BC91FEA}, {0x3993E5E4, 0x4E01AFB3}, {0x84BC282F, 0x96F75499}, {0xDB808D82, 0xB5852357},
+ {0x39115F44, 0xC69560A1}, {0x91C4CE88, 0x6A2AC4D0}, {0xB1FFD702, 0x5BD12097}, {0x2AB09B7B, 0x8BFC2844},
+ {0xB04D1891, 0x87312E66}, {0x205F694E, 0x94A71D16}, {0x265D5BAF, 0xFEA80BA4}, {0xAAB94315, 0xBBC08ECC},
+ {0x9DF14C43, 0x363F2D56}, {0xA34CEE59, 0xE87558D4}, {0x475371D3, 0x05E0FEB4}, {0x9845D1C0, 0xC88FE08B},
+ {0xC4F7167C, 0xA621E597}, {0x242313AC, 0x8E40EFD5}, {0xB4F4F790, 0x1D4B718E}, {0xF76A4FF6, 0x322BFF30},
+ {0x291BCA7A, 0x4CCBCE65}, {0x9735B222, 0x62E67A74}, {0xD188D877, 0xC0C8B689}, {0xB04F0060, 0x3289AD2D},
+ {0x40502D60, 0x0AD7560B}, {0x398F1CFE, 0xE54242A7}, {0x2B88C439, 0xF5768A05}, {0xCD8457E7, 0x075A8BA3},
+ {0x910CD521, 0x1E7DB41B}, {0x2A58B8AF, 0xCBB42A23}, {0xA514FB83, 0xD996512B}, {0x40F28373, 0x561AE727},
+ {0xB23D6FC0, 0xB244FAD1}, {0x5EE23420, 0xDE5F4F54}, {0xF9BD3BEE, 0x6C3996E1}, {0xBF8227F6, 0x8538E2FD},
+ {0x27722266, 0x6610D65E}, {0xED60E3ED, 0x01DD288C}, {0x3D861AA2, 0x37DD7A02}, {0xD9BFA8F8, 0xE8CEEB98},
+ {0x4003F0BA, 0x564BE3A5}, {0x16FA4939, 0x4476B2CD}, {0x86259110, 0x8D7D2362}, {0xBBEB9B88, 0xE1BA42D6},
+ {0x5399DE82, 0x0AB973A8}, {0xB2837461, 0xEF09D38F}, {0x20B12497, 0x2E5B1B6C}, {0xD3C87148, 0xDD0E7154},
+ {0x7F967E28, 0x675C68D8}, {0xC7648BEB, 0x3BF41F9F}, {0x1E405A72, 0xEF91E994}, {0x6B4AED5B, 0xC29EB8DB},
+ {0xB15854E1, 0x108F2A20}, {0x55E90651, 0xC6740207}, {0x3AACCD29, 0x41D67B83}, {0xD9A3B67B, 0x9B85B1D5},
+ {0x4664E8E3, 0x8EE072DB}, {0x89FEC900, 0xDADBA201}, {0x13BFE9A4, 0xC10FCB75}, {0x0DA147ED, 0x03DE3663},
+ {0x6B963648, 0x8EA5264E}, {0xCD5C5295, 0x39BF6607}, {0xA7CAA9BE, 0x179B536A}, {0x8ABB53FD, 0x0102D7B5},
+ {0x23A7CF94, 0x5C19E8D5}, {0xF5D94B0D, 0x520B7CC4}, {0x107B35D2, 0x39F0C2A9}, {0xBE527148, 0xB26D6803},
+ {0xB8CBF1D1, 0xBF6F7828}, {0x8B2442CB, 0xEBD9D5B8}, {0xEDE45EA2, 0xCDF32C1E}, {0xF038CBCA, 0x5CBC521E},
+ {0x041F3DEB, 0x8407E5D5}, {0xBA190E73, 0x1A4FE9AD}, {0xDA52C650, 0x3F233C13}, {0x26387F5D, 0xD4F89076},
+ {0x4FEDA62D, 0x3CA3C0EF}, {0xD36CC1E5, 0x5C5D7D0B}, {0x0FBACB86, 0x3521A109}, {0xD64FAAE1, 0x509B1471},
+ {0x84C2FF86, 0xD1814A62}, {0x0D284724, 0x4C2C52AC}, {0x7FB12F81, 0xF995CC06}, {0xA5F6394A, 0x227C3447},
+ {0xF73D323D, 0x8F36422C}, {0x4D02BBBF, 0xD34D5163}, {0x08FA6F60, 0x59E6314C}, {0x46309E5F, 0xF5D39AFD},
+ {0xB51878ED, 0x7D35B590}, {0x9A98A56E, 0xE7B0800D}, {0xAE92E2B7, 0x9065D5F1}, {0xAB962E3E, 0x93A6CB06},
+ {0x6FEAB8F9, 0x9C049024}, {0x85BFDDE8, 0xAAF03F6A}, {0x64D79D43, 0xC73220A8}, {0x8C610622, 0x79F8BDB9},
+ {0xA4A6D923, 0x81BE8210}, {0x43A640CE, 0xC22EA829}, {0xDBBA0FF7, 0x5F4E1150}, {0xACF9B600, 0x0CF7211C},
+ {0x6D430C25, 0xF216F2D1}, {0x31AC7E63, 0x4BE37BD2}, {0x4F17C854, 0xD4BF2474}, {0xCAE6CDEE, 0x5920835A},
+ {0x8010806C, 0x9B958382}, {0x0C9FDA4C, 0x6696CD1F}, {0x840165CC, 0xA0C8CEA8}, {0x0E4F15C4, 0xBFB66E5C},
+ {0x2C215A01, 0x1111E392}, {0x8D4AB83C, 0x074C718F}, {0xE45FA3ED, 0x1F35B26F}, {0x4DFB721D, 0xAF93E14E},
+ {0x783686D3, 0x92D5ECA7}, {0x1ABC3AFC, 0xBC6B6A0F}, {0xDC3EE93B, 0x6805E7D2}, {0xF8BAD1A2, 0xC71A7D17},
+ {0xD065DC5E, 0x9C7E2CD9}, {0x40FCE9AE, 0x10173071}, {0x470BD741, 0xDF3E26DB}, {0x40B45A7E, 0x8B1F2C6F},
+ {0xF6EE5AB5, 0xC78BDCEB}, {0x83594D65, 0x2F7AB110}, {0x6EF85DA1, 0x5648052B}, {0xF7593C7D, 0x626828A1},
+ {0xFD4D33BA, 0xF15B6EB0}, {0xCFE90FD1, 0xC18F2841}, {0x516B706C, 0x1EE1366C}, {0x92AEC4BA, 0xED6D7471},
+ {0xFF2FEC1E, 0x97CBB5EF}, {0x5A2D2A24, 0xD879CE4C}, {0x6C47F11B, 0x669D9B5C}, {0x5B3DBBB1, 0x61260D57},
+ {0x039ED6AA, 0xF5A82DA3}, {0xC87ABDA7, 0xAA501D5C}, {0x3D0CA206, 0x19FB126B}, {0x2F9000CE, 0x12CD7F34},
+ {0x092B7467, 0xE1C9D860}, {0x4F8AD136, 0x080E30D3}, {0x055407DD, 0x7440A859}, {0x65556CDB, 0xBBF7FA66},
+ {0xEA5D6692, 0x5F9605FD}, {0xF131348B, 0x3FB4DC2C}, {0xC15C3CCA, 0xCCCECDEA}, {0x80761D7D, 0x845B4F7C},
+ {0xA8A60B31, 0x12705901}, {0x9F01ADF1, 0xE28CD6F3}, {0x8C3E924B, 0xB904A943}, {0xD42A27A7, 0xD04326C2},
+ {0xB509CFBB, 0xE3174A94}, {0x43BEE9C8, 0x2C060240}, {0xE71B460C, 0x187E5032}, {0xE90E98BB, 0xC85CE87C},
+ {0xBB250A5B, 0xBA01EB1A}, {0x9FFDA3DA, 0x2895ADB0}, {0xEB1F72EC, 0x74CC7798}, {0xED914697, 0xDF70D7A1},
+ {0x72702CD8, 0x9D41984F}, {0x04CDF124, 0x357CE5CC}, {0x41410F2C, 0x03776446}, {0xEEC77C97, 0x3B2FB729},
+ {0x52D13B51, 0x693A58F1}, {0xB79A9FE0, 0x16ED7203}, {0x0E4F0927, 0x621925E0}, {0x37EBD7CD, 0xFF052319},
+ {0x51D1EFA0, 0x63B1F39E}, {0xFBE3EBC3, 0xDC07E67D}, {0xEFDDA9EC, 0x2EEE91DE}, {0x6EEF727A, 0x6EE1A968},
+ {0x3EFDAEE4, 0xCA120C4E}, {0xD1A6C360, 0xE2D10AA6}, {0x13F1C989, 0x67C0F20B}, {0x9FD9E28E, 0x03CD0084},
+ {0x71795481, 0x699AB283}, {0xA742BA91, 0xB647EB41}, {0x2502D0CC, 0xE8931E2B}, {0x6786A8A5, 0xF866ECF5},
+ {0x7BF5A2AD, 0xC34BCD4C}, {0xD0791637, 0x4F98E00E}, {0x4ABE229C, 0xD9F90436}, {0x066F126A, 0x669551B2},
+ {0x3B5EFF5F, 0x31EF2F30}, {0x7EE492F3, 0xA208F9C8}, {0x2A8C2A10, 0xA06D0DCC}, {0x4C12E826, 0x4E99ECF1},
+ {0xD0276F23, 0xA66ED3B8}, {0x737FBCDF, 0x49DA3D93}, {0xFF126252, 0xE5CF2A8B}, {0x1FC1EF00, 0xF4EE119C},
+ {0x3B9CB004, 0xAF4B7FCC}, {0xF7B75DF4, 0xF3ECE7B6}, {0x8CA5A156, 0xDC660248}, {0x18969BDB, 0xC9F88F51},
+ {0xDD723CC7, 0x15D08103}, {0x711F9036, 0x525A5587}, {0x2493AFDA, 0x3F4353D8}, {0x5D31B394, 0xC1F037DE},
+ {0x61C2E35A, 0x228451EF}, {0xA4189CB4, 0x4F9B1CB4}, {0x6489EB73, 0x50885C7E}, {0xA05A1F75, 0x9886269B},
+ {0x8EDAA3E2, 0xF593486C}, {0x67C3DE69, 0x619AF6CD}, {0xD0C74418, 0x74CC3709}, {0x71B68BE1, 0x8F56A245},
+ {0x91CA0BB6, 0x8F0E69A7}, {0xAF279A1D, 0x5FFF6DED}, {0x98B4E15F, 0xF24AC039}, {0x61892FEA, 0xB0A963DF},
+ {0xAEE9C619, 0x755F0C14}, {0xC0B668BC, 0x3F061145}, {0xB41DE0AD, 0x053EE57E}, {0x1EE73DFC, 0x30B4C5BD},
+ {0x4E8A40B5, 0x6BCCE717}, {0x7F57CEC2, 0xB4156FBA}, {0x73CCA135, 0x28693445}, {0x31862FBA, 0x55B697FC},
+ {0x444E329E, 0x4BCC1E11}, {0x4E95C668, 0x6EBA784E}, {0xA365CF25, 0x64D4A00A}, {0xB4CBC106, 0x0CC1CA83},
+ {0x9897EC91, 0x310E77FD}, {0xD1FEED3F, 0xC635373C}, {0x733AD7A8, 0x00E3E3B7}, {0xF21C7F0B, 0xE7ED93A2},
+ {0x8AD9677D, 0x2CD1DBAA}, {0x5D0015D1, 0x13B291F4}, {0x3ED41E1D, 0xF00BB321}, {0xA8B792A6, 0xB07DC9C5},
+ {0xE8F23F98, 0x750AC8A4}, {0x51100F52, 0xEC53BBEB}, {0xFBF1822C, 0xEF83B36F}, {0x4CBDA1C5, 0xA7AD51B8},
+ {0x45DD6449, 0xB152DFFC}, {0x0DB6CA6A, 0x3B84832F}, {0x64BCA756, 0x0511705F}, {0xDF858BAB, 0x5799C532},
+ {0xD819104E, 0xDEB55964}, {0x7E2FC0E8, 0x87F81BF4}, {0xCA9F1E02, 0x9C739FA3}, {0xC4312A98, 0x45157DCE},
+ {0x204CF927, 0x6CB51DCD}, {0x15F10B28, 0x5BCF3178}, {0x7BF677AB, 0xE205423B}, {0x9C5F58F5, 0xF4DAA162},
+ {0xDE9DFA79, 0x1AA7EF13}, {0xF654BABF, 0x17B70070}, {0xBC2C6F44, 0x5607CCD0}, {0x9D703581, 0x660D72A4},
+ {0x12BAEB1C, 0x4F223731}, {0xAE017D28, 0x7F916B8E}, {0x39FAB56B, 0x1A4DEE8B}, {0x8B6D5FBF, 0x8348A97A},
+ {0xEE555660, 0xEF971DF0}, {0xE6FDF65B, 0x1AD4DBE1}, {0x98836AE4, 0x414BEACA}, {0x3FE30640, 0xB1F17089},
+ {0x6230E4DF, 0x0AC425A4}, {0xE517A95F, 0xC328F69F}, {0xD10F9561, 0x3C3A45A9}, {0x3A3CC92A, 0x408AA442},
+ {0xC5861779, 0x558BB6AB}, {0xB3753C34, 0x85CB6A0B}, {0x1D7F1EE5, 0x9C03019D}, {0xBE78023D, 0x88666CBD},
+ {0xB3939BFE, 0x561DB7BC}, {0x745FBD88, 0x4D5B242C}, {0x35F17563, 0x589E8A24}, {0x0A7A616A, 0xA664856B},
+ {0xD465F009, 0xC9B95848}, {0x00AE4932, 0x52835F23}, {0xAA403E00, 0x240BE2B2}, {0xA53CAC5C, 0x8AA58F5F},
+ {0xCDAC9048, 0x191A24C0}, {0xF9737C5A, 0x9552BC41}, {0x938AC33E, 0x6FB9CA6E}, {0xD853960C, 0x7A609B04},
+ {0x53EF1ACB, 0x16BD7F9F}, {0x29C2E2D4, 0x9A7E5365}, {0xB7973E5E, 0xCDBFC3C1}, {0xCCC0B530, 0x70AB6019},
+ {0x0551590E, 0x34FCEE45}, {0x0567F280, 0x04DD7413}, {0x6BD38143, 0xDB8873AC}, {0xAD8965A8, 0xAA52BA60},
+ {0xE468FC27, 0x703EECF7}, {0xA708614B, 0xB2C00116}, {0x05BAECE7, 0xEE7C75BB}, {0x6D0DD5D2, 0xEA29E8F3},
+ {0x6DCA6D56, 0x6706CCC5}, {0x242DF101, 0x03248C66}, {0x8C8B6C9C, 0x6B724468}, {0x14D701D4, 0x147FD9E1},
+ {0xD2B3B229, 0xE0723297}, {0x690625FA, 0xE7A867EE}, {0xCC8D44EB, 0x2011686E}, {0xA6256174, 0x909EC4B2},
+ {0x38AF8A5C, 0x1F5A7492}, {0xB84095BD, 0x70E33B2E}, {0xAC61FED8, 0x58E49DDB}, {0x91E9B2AB, 0x3276E20B},
+ {0xB69DBBA0, 0xDA9E29C0}, {0xAD9F55C0, 0x362405D3}, {0xF683EA61, 0xBFF84585}, {0x43F00CCA, 0x9B16A90C},
+ {0xEBB519C3, 0x1332F4F0}, {0x8B14A121, 0x21B4138F}, {0x8A29BDB9, 0x217090C8}, {0xE4F4B341, 0x18FC2224},
+ {0x1F94B7F8, 0x0AA6CEA7}, {0x9E6A1F69, 0x0C13D1BC}, {0x6E3EC98D, 0x8C920040}, {0x177EB6A1, 0x26E9185A},
+ {0x22223C40, 0x54D2C2B5}, {0xCD6E90F9, 0x24FC128B}, {0x62F4328B, 0x03FA1A53}, {0xF5BE8451, 0xE59157CB},
+ {0xE8D346A9, 0x1BF9D233}, {0x8A66C421, 0x1822ED97}, {0x9EA1C3B7, 0x622BD353}, {0xB17CCBDE, 0x73D799B6},
+ {0x820CFCBE, 0xC36E9FC8}, {0x30EFC1AF, 0x19EE640E}, {0x86C06D7A, 0xE56DBF02}, {0xFEC8B4D5, 0x3F931084},
+ {0x1358AF67, 0xDB88D5D1}, {0x43DBCE54, 0x204F3013}, {0x77548608, 0x87E8631E}, {0x849A17DF, 0x28C0B204},
+ {0x7A9C438D, 0x51FA85D9}, {0x56941A5B, 0xDCBF71CD}, {0x8A634DF8, 0xDFD57D74}, {0x4991638E, 0xA6C45D65},
+ {0xDF48A7E4, 0x37DB2C6B}, {0xDD367CAC, 0x63165397}, {0x00878CD6, 0x1C18A76A}, {0x6AB7A7F3, 0xD04CACE7},
+ {0x36FA655A, 0x6D3B6B4C}, {0x0A4659B6, 0xDDF823CE}, {0x597B3903, 0xB745C966}, {0x33533D3F, 0x6DCFE936},
+ {0x7DEB0616, 0x7EEC03F5}, {0xB8819CA2, 0xD43768F3}, {0x7384E491, 0x64E48297}, {0x8F80D9B7, 0xA2765634},
+ {0xBEF39474, 0x770E0F3A}, {0x6D48F636, 0x1626E7FE}, {0x932A2CE1, 0x76717EA7}, {0x1C717ECF, 0xF36E7FB3},
+ {0x5D4E4DB5, 0xCB455A14}, {0x9963D8E9, 0xB8A514E9}, {0x5DD58B15, 0xCFDD06E9}, {0x848F85CF, 0xDC76DCD0},
+ {0x40914BD0, 0x03AA0295}, {0xB6B1C15A, 0xD12DFC2D}, {0xA2EBBFAA, 0xFF59AF5A}, {0xB5AACA36, 0x9CF2AB8E},
+ {0x58E53886, 0x0BF4B7F0}, {0xEFEDA28F, 0xB73A6427}, {0x5B6711AF, 0xFE513769}, {0xC4220F84, 0xF69FB0D9},
+ {0x7AACD215, 0x498B3856}, {0x7A1CA771, 0xF9A12DB9}, {0x1ADAD938, 0x6953B22D}, {0x740E8C77, 0x738EA3A1},
+ {0x1A0B1E84, 0xC253BD90}, {0x564F9509, 0xBBA6D36F}, {0xDB5C99D9, 0x2B36CD45}, {0xAD64114C, 0x4031C500},
+ {0x1524B450, 0xDFF24BFE}, {0x7E32E3A2, 0x17C8ADD4}, {0xABDB98A4, 0xABBBF9DD}, {0xBE1D914D, 0xA8E8B5AA},
+ {0x1AD4DB4D, 0xCB93EA0B}, {0x9905C131, 0x812DFD2F}, {0xFB25D998, 0xCDBF3C37}, {0x8BD63617, 0x0DCB8F0B},
+ {0x2B5995F4, 0x93F2610A}, {0xE98C5E13, 0x22B196B3}, {0xF38AADB3, 0x8AA87267}, {0x75918189, 0x397793E3},
+ {0x4E08A607, 0x5DEA84EA}, {0x0C6C8843, 0x232F6959}, {0x9DBA6DFB, 0x167F6750}, {0xFE461CF4, 0x328B66F1},
+ {0x9872CAA9, 0x8099E6A6}, {0xD42EA1F0, 0x2DFF1B61}, {0x2869FC49, 0x838F2FD6}, {0xE09D7F37, 0x318C6E33},
+ {0xB2A46942, 0x2C990C96}, {0x5B564F57, 0x6B93AFF2}, {0x7E9C6ED5, 0x3026E82E}, {0xF4F2743F, 0x851F7FB6},
+ {0xEB4E4303, 0x7721BD0C}, {0x28A1AF89, 0xC1C7F085}, {0x6A107E60, 0xA79E182E}, {0x247E6AE8, 0x96796714},
+ {0x00BD462B, 0x589621F5}, {0x5F2542D2, 0xBBD5CA37}, {0xCBB7F6BD, 0x412BDC56}, {0xA4F261CE, 0xA8D4D14F},
+ {0xA132D6C4, 0x58ECEF12}, {0xEA273DB4, 0xC8E1A16D}, {0x0979971A, 0xC4B1D120}, {0x2A483ECB, 0x38126097},
+ {0x72932E38, 0x12373774}, {0xAC3A8FE3, 0x0CD665DC}, {0x83705A2C, 0xDDD74C3C}, {0xADB47F0A, 0x52FC9BFF},
+ {0xF1AB3B00, 0xBFB8060D}, {0x5D4C16DC, 0x879DACC2}, {0x6DF57AD8, 0x21F66388}, {0xF3B3FE79, 0x237F276A},
+ {0xA5B025F3, 0x02984D3C}, {0x71210F0B, 0x78A3CFF3}, {0x7C3EAD6C, 0x6D6BD1EC}, {0x214689DD, 0x52838458},
+ {0x7F6F05EE, 0x67431ED4}, {0x7EA754EE, 0x898B53A5}, {0x211D1080, 0x32932C20}, {0x7FEEAB86, 0x466B16A6},
+ {0xCB76A963, 0x2C0CACFD}, {0x3E01D811, 0x704B0E2C}, {0xB7C70AA4, 0xCA2D62AC}, {0x5819D6E4, 0x87D4C879},
+ {0xB7104C58, 0x7A185208}, {0x71100EC5, 0x181CE880}, {0xE36D7BBC, 0x50DC5BA3}, {0x8EC6E079, 0xAA874BB0},
+ {0x7B53178B, 0x1AE590F9}, {0x75917F07, 0x876FC24E}, {0xED0A92D4, 0x773A4C77}, {0x2CD4EC57, 0x5DC124D5},
+ {0x3BD78472, 0x6E113067}, {0xFBDD7C83, 0x0D0C9C84}, {0x56254493, 0x0042A9D7}, {0x68449384, 0x15AE968A},
+ {0xD467FAAF, 0x4019A586}, {0x2EF2A708, 0xFE0CB497}, {0xDE43D2C5, 0xEFD67764}, {0xCC226E3F, 0xA18D72E8},
+ {0x84B8B859, 0x13946048}, {0x7F36537B, 0xB5838104}, {0xDF0B6240, 0x24A83DCA}, {0xDB904F2A, 0xBB488203},
+ {0x290A8F77, 0xB26380EE}, {0x74DACF31, 0x3DEA450A}, {0xBAE015FE, 0xBA3C5E01}, {0xE6E8FA36, 0xD8B5E7B6},
+ {0xA20713F7, 0x338807C2}, {0x622EEE6C, 0xBD69ADD0}, {0xF2EB273A, 0xD5F3D129}, {0xADE8CC68, 0x9DA25EA5},
+ {0x6E2E0672, 0x949B76AC}, {0xEF51B39F, 0x17AF47CE}, {0xAADDA23C, 0xB37C22BA}, {0x232FE91C, 0x27BE1630},
+ {0x4B301030, 0x8226C7A9}, {0x6F7A68C9, 0xCFE88ECC}, {0xFD360D8F, 0x0E276602}, {0x22746290, 0x0675B45F},
+ {0x31F659AA, 0xD94CBCF4}, {0x0511DD95, 0x79B20C54}, {0x171BA58D, 0x92F8691C}, {0x260C3A93, 0xACAD14C3},
+ {0xF528E275, 0xA7B12D1B}, {0x31EF1121, 0x97699F05}, {0x6B8FB340, 0xF0C0E1C1}, {0x87CD5544, 0x278E6BA6},
+ {0x42BD9D2B, 0xC9233471}, {0xDCC737BB, 0xD62C170C}, {0x977A8566, 0xF40418FB}, {0xD23937FA, 0xB58A7B6D},
+ {0x73585EFD, 0xE1CEFCBE}, {0x3B2DF8CD, 0xEBD457D1}, {0x354AEFDB, 0x4E9E9904}, {0x231874F5, 0x46593159},
+ {0xF60DAAD9, 0x759A9D78}, {0xE0BA8072, 0xCFEBF547}, {0xFEFA33C4, 0x57F0EBF9}, {0x124A69C7, 0x67DD4CD6},
+ {0x5127CD41, 0x67F0EAFB}, {0x1A47E8D0, 0x77D762F2}, {0x3C09C57C, 0xDA0A30BF}, {0x89A728C4, 0x36595BB0},
+ {0xC277DAC5, 0x86DBF074}, {0x19346220, 0x3F210395}, {0xC88F44D3, 0x58CC87F0}, {0xBF2E9F42, 0x31170538},
+ {0x858E0285, 0xF4F164BF}, {0x3B67970A, 0xB316BAA7}, {0x7ACEDF06, 0xF2E7F05D}, {0x2B364201, 0xC7E1C81F},
+ {0xFC517296, 0xEC0D2C4D}, {0x88DBAC41, 0xA6F99F63}, {0x025794E6, 0x4C833EE4}, {0xED1ACE4D, 0xE2336B8D},
+ {0xF0498FDF, 0x638352DF}, {0x9653D192, 0xADF2D9C1}, {0xA8D08EE5, 0xC09DDCD8}, {0x33C3765D, 0xA432294C},
+ {0x43DA48E3, 0x375A3801}, {0x34CB3DEB, 0x77A4DC23}, {0x0CF19FAA, 0x45D9F93C}, {0x12D6F3C6, 0xFAF1F822},
+ {0x443E92BE, 0x5BFBCA65}, {0xC9DE7D32, 0xF131EDEA}, {0xE8A575F2, 0x30C0E79D}, {0x31F65F88, 0x3C174BD0},
+ {0x53C75E4E, 0xB41BDE14}, {0x5D07BA89, 0x615594DB}, {0xC33EFC9A, 0xC6A0277D}, {0xA15191FF, 0x14795D60},
+ {0x14B927F9, 0xCB6BA7C8}, {0xFCB40CAD, 0x4E866BBC}, {0x2B7DDD0F, 0x608EA279}, {0xC95BB84F, 0x61CA6E01},
+ {0x9C26C769, 0x4F1E5916}, {0x2D698612, 0xB86BBA34}, {0xEDDE32F1, 0x6735914F}, {0x05B2BDDA, 0xE493679D},
+ {0xDFAF2AE4, 0x57645389}, {0xA7FDEE0D, 0x02FA0D8C}, {0x7A2103A6, 0xF78073E8}, {0x2F25D608, 0xDBFA6A0A},
+ {0xA0E3BB3A, 0xDE464494}, {0x9D52CEB0, 0xA5381299}, {0x8F85A11E, 0xF0F0B910}, {0xBBCA60C1, 0xB674E430},
+ {0xC6D17B10, 0x307AC60F}, {0x2500CB41, 0xA51DB30B}, {0x904D3765, 0x71E72C8B}, {0x71643D39, 0xA9952FBE},
+ {0xF68E7BF4, 0x1872033B}, {0x2AB020D5, 0xD132D372}, {0x224E20C8, 0x0D362F83}, {0xD8B22005, 0x4BD4E4AC},
+ {0x9CF2BEC2, 0x6A9CBA34}, {0x098756B0, 0x64055C0F}, {0xE64DD10B, 0x9F50754D}, {0x9845950D, 0xA6C92F70},
+ {0x86EC8630, 0x3C0E48E1}, {0x3468E90A, 0x88EFFD4C}, {0x625F0369, 0x35A05EEC}, {0x8A8FE5E5, 0xC016C324},
+ {0x40DE4341, 0x4D7C96E9}, {0xBEBF28FF, 0x03B4F997}, {0xB81C7068, 0xAC664F86}, {0xA20797AE, 0xA02AC045},
+ {0x2F048692, 0x45C75EAD}, {0x346FF8FD, 0x746FE3EC}, {0x534880C0, 0xCFD07EB8}, {0x6B2300C7, 0xF3EEAEC2},
+ {0x26BF01CE, 0x06BBDD4C}, {0xDA68A27E, 0x7DC9C6D5}, {0x07F2577A, 0xA1653AA5}, {0x972CD304, 0x5ED68401},
+ {0x986BD7C6, 0x11C1F2CE}, {0x429ECB52, 0x273D8384}, {0x79F7797C, 0x15A3D752}, {0x14175A43, 0x0135EC3D},
+ {0xA2AEB939, 0xBC21AAC1}, {0x5A6A4FEE, 0xF88C0CA9}, {0xEE63AEB9, 0xD93FB98E}, {0x63C86B75, 0xE6EA8157},
+ {0xFF40253A, 0x7463A9A8}, {0x3AA07421, 0xB599A6D0}, {0x4267109D, 0x5D4A3199}, {0xCAA8C969, 0x97198F9F},
+ {0x14E43EDE, 0x98756A8C}, {0x7929B0C8, 0x274A0ED6}, {0x52FBCD92, 0x9743DC49}, {0x7485F3E3, 0xF89CBAD1},
+ {0xA9AC6414, 0x100FCBFD}, {0x1686CF7F, 0x6A217516}, {0xBF78C7C2, 0x937B2354}, {0x76B48DC1, 0x6B809681},
+ {0xA7886FB5, 0xCFE33ED2}, {0x6D824BA8, 0x32C5537D}, {0x170BE2F0, 0x59C3FA28}, {0x989C663F, 0x171F5232},
+ {0x59278394, 0xA44C5EB5}, {0x5A6E2F7A, 0x7A2F7630}, {0xC942AB54, 0xFD356234}, {0x3504FD32, 0xEAFEBB10},
+ {0x48F43AE6, 0x017DC988}, {0x8DB57999, 0x196D3D7A}, {0xBC208611, 0x97AB0CFE}, {0x8373F416, 0x5B7A920C},
+ {0x9D97CF50, 0x7FB5A525}, {0x086D704E, 0x93B147E6}, {0x93E008B8, 0x8BE904EF}, {0x782A7E9F, 0x2FCD67C7},
+ {0x016B44F5, 0x59421FA1}, {0x854E3595, 0xA3C1AC61}, {0xE144EE94, 0x16AFD1E2}, {0x44D7E11E, 0xFEE5B0AB},
+ {0x8145E366, 0x8F1C1B8A}, {0x04663F73, 0x0974AF1C}, {0x48F026C7, 0x8026C5F2}, {0x4545E5DD, 0x7426517A},
+ {0x32CDF644, 0x10A67133}, {0xBE3870AF, 0x7F00367D}, {0x3F3C2C99, 0xEEED187A}, {0x988CB761, 0xFAF95831},
+ {0xCABAE7E1, 0x75495BA5}, {0x64056AA6, 0xF3F5B1F0}, {0x8A078C38, 0x455D842E}, {0x5A601097, 0xAF355712},
+ {0xC4ACFE61, 0xFB7C0EF1}, {0xDC8064C3, 0x7F6F4800}, {0x91299463, 0xFBBE9FD0}, {0x715D8B8B, 0xB8646510},
+ {0xF214C8BB, 0x8D9B447A}, {0x83DA5A41, 0x6478ACA1}, {0xB8D33C94, 0x62F6C1F5}, {0x1E4A218E, 0xB9D6B4DC},
+ {0x28BB707D, 0xB996AF58}, {0x56C63539, 0xCCDDB171}, {0x994F85B8, 0x49C09816}, {0x8C1B1E21, 0x581ADFA0},
+ {0xF8571091, 0x25E4F872}, {0xCD30A827, 0xC71789CF}, {0x52D4E619, 0xCCCAB7F6}, {0x561A827C, 0x75003E81},
+ {0xC5D6A655, 0x449987D2}, {0xDEC76D90, 0xB36C2E37}, {0x8665A7AB, 0x9E00CC90}, {0x5903C312, 0x1F5276D8},
+ {0xECC8E3EE, 0x553DC08F}, {0xA0BD0399, 0xC32FDB45}, {0xAC44734C, 0x42B8CB43}, {0xBD6FD692, 0xE6EAD9A9},
+ {0xA264B8FE, 0xA85D49AC}, {0x79D4517D, 0xAACAB64C}, {0x3ECC5D25, 0x37A861F5}, {0x9A13C1B3, 0x25F99E87},
+ {0x3066E16E, 0x876B73DA}, {0xD9397393, 0xFE6D7166}, {0x546CC421, 0x5CD029CA}, {0x8752CC37, 0xC008866E},
+ {0x35DFC769, 0xD7FA2DB9}, {0x97A6E597, 0x7F86FEE4}, {0x60C599AA, 0x3D3EEB64}, {0x262A786E, 0xD5D1AC1F},
+ {0x6B735ADB, 0x2E182671}, {0xC617BBC9, 0xC6985A7D}, {0x3544F0FD, 0xFC46A841}, {0x0C321D51, 0xA3A30511},
+ {0xE06FCCC3, 0x6AB56C27}, {0xB5F54843, 0x7F195C62}, {0x867B6765, 0x68B262F5}, {0xC546543C, 0x2F8159F2},
+ {0xE1F8ED0E, 0x21F551A2}, {0xFBF69C01, 0xED674C58}, {0x45EB3594, 0x54B4B11D}, {0xF2B5AC06, 0x9AD651F4},
+ {0xEDC8EB9F, 0x53AD5165}, {0xDDF737F0, 0x67AB6B77}, {0x47E30666, 0x409CC005}, {0x875FD8B6, 0xFF113ED1},
+ {0xB8BEC757, 0xA83B7165}, {0x641E0145, 0x6A353CEF}, {0x46FEE4E3, 0xB7024CE4}, {0x18781E45, 0xD2833A3F},
+ {0x0A09C286, 0x1500D781}, {0x261786D0, 0xFF60E001}, {0xB43085B1, 0xBB6C8ABC}, {0x66038163, 0x03C281DB},
+ {0x47193EEF, 0xCFA4771E}, {0xDD59763D, 0x4F793BE5}, {0x2B9545C3, 0x6326307A}, {0x2087D5C5, 0xEF9505E9},
+ {0x9A8E6E94, 0x6645E1E5}, {0x229C9DE4, 0x1B8762C7}, {0xB4351DCE, 0x2CD88CFF}, {0x933945A0, 0xEDA1C21B},
+ {0xF6169671, 0x1B40F1FF}, {0x9CF429EF, 0x72D0BD72}, {0x29FE1937, 0xCC8D2220}, {0xF4D87F5A, 0xEA78BDE7},
+ {0x864FB679, 0xFD3CC495}, {0x02253C7E, 0xF60737E9}, {0xC1A4FCB5, 0xA6CD8111}, {0x52F4B89E, 0x54E8EFA3},
+ {0x60EDF160, 0x4A10BFB9}, {0xA200462C, 0xCCA4D2B8}, {0x0B8B3562, 0xDB4DF2F2}, {0x3C6CC070, 0x55CCEF33},
+ {0xA9518CEB, 0xFECC08BA}, {0x92F4E341, 0x0DA39743}, {0x912F235C, 0x6228C64C}, {0x4B877524, 0x734E388A},
+ {0xBDC36FA1, 0xC9FA6531}, {0xD1F9D774, 0x517ACD29}, {0xDC3002EC, 0x0ECF006C}, {0x557BD73E, 0x4419F74F},
+ {0xF1EA28ED, 0xCE5E502B}, {0x10085017, 0x6B5363A2}, {0x258DE857, 0x13AE517A}, {0x817AB30A, 0x13971948},
+ {0xCF711459, 0x93CCFDD4}, {0x84503464, 0xA7389693}, {0x8DCFFF8A, 0x01593E3E}, {0x1683538D, 0xD6469909},
+ {0xEB00CD7D, 0x68095358}, {0x72413C2D, 0x09EB430B}, {0xF383343D, 0xE579F452}, {0xFC151CE0, 0x324848EB},
+ {0xAEDF818D, 0x01B22E24}, {0x9D417140, 0x425EE5CE}, {0xCE083ECB, 0x8B3D56E1}, {0xFB4D98E3, 0xF98F5E06},
+ {0xE8E3663D, 0x0FCDA0B6}, {0x8938547B, 0x09EA3FFF}, {0x9CF1B677, 0x0F8C0311}, {0x8EAB8212, 0x9DA003A7},
+ {0x7E0493A5, 0x47A79687}, {0x173D1B32, 0x8491245C}, {0xC6612E67, 0x7CAC1830}, {0x3AB3AD9A, 0xF944EB47},
+ {0x31284931, 0xE5852A2B}, {0x926E1F76, 0x3C4522C9}, {0x71543259, 0xD8D5BFD1}, {0x3A522144, 0x81A19F9C},
+ {0xA5B4116D, 0x6EFAF8CA}, {0xEC418E56, 0xDA2301D7}, {0x61675A2E, 0xB03BC5D8}, {0x1675917C, 0x9567842B},
+ {0xED66E6C1, 0x1B888AC8}, {0x068899C2, 0x719C75BF}, {0x5AFFB28B, 0x05CC78AD}, {0x37AAC5FA, 0xD983E063},
+ {0x96438702, 0xEA368347}, {0x1CE6A331, 0xBF540911}, {0xE8D68971, 0xADD0DD26}, {0x77F5AD0A, 0x4BD285B0},
+ {0xC3123E2C, 0xB053D198}, {0x3E62E0BE, 0x472F34F4}, {0x6A639565, 0x903F2C3B}, {0xBE51BE2C, 0x7AEC8AE5},
+ {0xB24BF944, 0xFBCE33B7}, {0x88BC4B6E, 0xD60E39D9}, {0x2804FC1B, 0x35DEE2FF}, {0x53B7A0C0, 0x0EC8F48E},
+ {0xB2A0087A, 0x77DFBDDF}, {0x6841A399, 0x5F84A6CD}, {0xED99BD93, 0x3B542A22}, {0x74126755, 0x5E6DE611},
+ {0x127D910D, 0xCFF80FC3}, {0x6B6D280D, 0xEBA90850}, {0x8DAFE209, 0x67D7963B}, {0xCD840DF0, 0x66F93EC1},
+ {0x69032B83, 0xE37FD642}, {0xD9E40E5D, 0xCA10382F}, {0xF2FEEC5B, 0x558572A9}, {0x82C955EB, 0x6EFEE193},
+ {0x1C5D3951, 0xD608B2B1}, {0x9DAC1B90, 0xB759F091}, {0x4C032626, 0x2FF47CF3}, {0x08795F2C, 0x9848FADD},
+ {0x7FEC07E4, 0xB6CCDA73}, {0x8B5D7E89, 0x42E154AF}, {0x28217A0E, 0xD9B3AB20}, {0x0050ED13, 0x1917EFC6},
+ {0x3F2200CC, 0x4CE7DF6D}, {0x9C0AB703, 0x17A8B4A9}, {0x20D87676, 0x2D5FE12C}, {0x11C7AE3E, 0x865D8D21},
+ {0xE78C849C, 0x0B2F4FAA}, {0x70153080, 0x86C1A610}, {0x3CA20856, 0x742E7E1B}, {0x68A5BE58, 0xEEC3D96B},
+ {0xD6527F24, 0x923964DE}, {0x7CD5AEB4, 0x1DB3D3D1}, {0xC7B6D817, 0xEF61BBF9}, {0xBFD09F80, 0x6B01D56D},
+ {0xAE18E9C9, 0x9BF74EB0}, {0x63EB019E, 0xA8C9CFF3}, {0x74D0F49C, 0xC21B4575}, {0x723A4DE1, 0x33B8D5AC},
+ {0x5DC98806, 0xF44F1E86}, {0x60567277, 0xBBD77755}, {0xA1D576CE, 0x9B414151}, {0x5E1EF4C2, 0x059C9A9E},
+ {0x9B971329, 0xAD57B707}, {0x526CB110, 0x9F873BA3}, {0x4EE490F5, 0xD572EB63}, {0xB851D0B5, 0x8C3C0EEC},
+ {0x8838601E, 0x713B4CD9}, {0x77535B74, 0x934E434B}, {0xA2F71E59, 0x1C9EE736}, {0xAC00012A, 0xA0B5F937},
+ {0x75E48F21, 0x051E6991}, {0xD2CFCBDD, 0x9547BD1D}, {0x339C693B, 0x659F3EB3}, {0x962027A2, 0xFEB9E738},
+ {0x51D1AD46, 0x7350C9DD}, {0xE8DA38F6, 0x4E0B2A12}, {0x58740827, 0x16C030F6}, {0x14430BED, 0xA8B56DFF},
+ {0x6347BDC0, 0x64A839E8}, {0x604D85CA, 0x2D6AC5FD}, {0x2399E86B, 0x94AA2C6E}, {0xC316391D, 0xFF571F76},
+ {0x5982FCA7, 0xB6076004}, {0xA2CD332A, 0xCF786F02}, {0x367A4B2F, 0xD15E639C}, {0x2A9280AF, 0x31BEAC29},
+ {0xD7A8E383, 0xDC9A21EF}, {0xABD44696, 0xB2F990D5}, {0x7F90B8FE, 0x020AB707}, {0x31BAB698, 0x370750D1},
+ {0x57C085C7, 0xB17D6164}, {0xCB73265B, 0x5FF6FDFF}, {0x655F92CC, 0x1B4E8909}, {0x96AE5F8F, 0xE7CD5D93},
+ {0x28464EA7, 0x15EA027D}, {0xD2BF6755, 0xFF6886A1}, {0xDB3F94D2, 0xD55453C3}, {0xA081E249, 0x9402937E},
+ {0x718466DE, 0xBE14B699}, {0x05E433A3, 0xEC1F3339}, {0x8CF27048, 0xD7D09C3E}, {0xB5A3420C, 0xA70CBB24},
+ {0x9C04C465, 0xD1E4C971}, {0x5E6C6A59, 0x9477BAAF}, {0xCD099AC3, 0x6FCB8BC5}, {0x0ED61E24, 0xA083AABF},
+ {0x38EB9117, 0x369D7D20}, {0xAD2517DC, 0x595E7E59}, {0x36CE8E4A, 0x538655C3}, {0x6D8852C6, 0xDE5D5E8A},
+ {0x7FC4D070, 0x087AB95B}, {0xD109091D, 0x2A5FAAFC}, {0xBDE3C73C, 0x6121660F}, {0xCACF3411, 0xC8BEABC6},
+ {0x9EC703FA, 0xB215158A}, {0x3D2DD697, 0x5B26A867}, {0xE5B29312, 0xB120A2BE}, {0x48D07552, 0x28A5284A},
+ {0x0435D6AC, 0x7D3AA58F}, {0x49E1FBEC, 0xB7E69476}, {0x6B09CAA2, 0x1E4FEF15}, {0x87B1A8E5, 0xCDF1A329},
+ {0xC2AAF152, 0xE13015BD}, {0xCD7724E7, 0xF8AAF952}, {0xFA4ADDF4, 0x0190B070}, {0x1B4DB88C, 0x0423DE3A},
+ {0x4CF5C614, 0x1AFA3446}, {0x9BAABCE3, 0x4CF22C2D}, {0x101560BA, 0x67855370}, {0x69DB4B5D, 0x3C641768},
+ {0x9CCD7C95, 0xFE451B43}, {0xD4BDAA29, 0x70012371}, {0x5EC66F58, 0x92704FF6}, {0xD0A649CF, 0x80213B3B},
+ {0x90364828, 0x0D978875}, {0xA5F95102, 0x7B809339}, {0x29A4CB45, 0x3A29AE14}, {0x4C156FEA, 0xF2AE711D},
+ {0x874D26D2, 0x435F1310}, {0xDDF64454, 0x10149F70}, {0xD2F20738, 0xD2AF4314}, {0x576344F5, 0xBD4C8275},
+ {0x537D9587, 0xD62E5EC6}, {0xE3E5F353, 0xB8575BDE}, {0x2EB16E77, 0x05E4585A}, {0x0CA0C35D, 0x2ACD0384},
+ {0xE17BCC98, 0xE7A9882A}, {0xE77C169F, 0x0F1B08EE}, {0xF548CABF, 0x92C7BF17}, {0x62AEF662, 0x5FBB2894},
+ {0x5E3DD7A6, 0x77C156E2}, {0xA4CF4EA6, 0x586B7401}, {0x2B8BA565, 0xCF50ABD2}, {0x3ABEC735, 0xFA9E65B5},
+ {0x0DD9F190, 0x8CA5442A}, {0x2600F855, 0x00C6F02B}, {0xC8EB1D3B, 0xB965A3AB}, {0x6C6DC9C8, 0x43A94B29},
+ {0xDA36111F, 0xB394F1C7}, {0xD25A5E21, 0xC89DD942}, {0x9ED7ADDA, 0xB7AC74F4}, {0xA109F1FF, 0x229EFE92},
+ {0x273FD332, 0x9194FA51}, {0x977D8EAC, 0x6F21A990}, {0xEB1D5B98, 0x51BD7237}, {0xAA573ED6, 0x6840A374},
+ {0xB5F356CD, 0x7656897A}, {0x8391B934, 0x342493E0}, {0xB1CCB80C, 0x0E9464DB}, {0x2302DF75, 0x2EBCC444},
+ {0xA9A1FF5F, 0x55BB0DA7}, {0x0D5B2010, 0xF5A0CC67}, {0x950AD843, 0xB7CBDC03}, {0xFA4708FE, 0xC883CE86},
+ {0xD27F92F2, 0xCF941B32}, {0x7CF2836A, 0x7042F198}, {0xAA223ACA, 0x00F2247E}, {0x0C0CFB60, 0x882FC5A5},
+ {0x27664248, 0x24AEEAC1}, {0xFB76B68B, 0x0038ACF8}, {0xEDBBFE47, 0x08DC3AF0}, {0x4DD59DC6, 0xE26E105D},
+ {0xACE12862, 0xDEBB31B8}, {0xA82C67AA, 0xA9A5F3B4}, {0x4C523D08, 0xF052997F}, {0x88B0C1B0, 0x165AA821},
+ {0xC7447A15, 0x6ADD7BB0}, {0xABA7886F, 0x301CA805}, {0xB8C58DF9, 0x5B10E73A}, {0x969C60D6, 0x5B67D0B7},
+ {0xAA9B3BFF, 0xAE62C1A0}, {0xC480D664, 0xB08EB376}, {0xA5E82596, 0x2704ACC0}, {0x00D89C37, 0xD6083429},
+ {0xDA42E8C8, 0x2A25324D}, {0x916792E8, 0x859215B5}, {0xD426833B, 0xC98D463D}, {0x52EBE3B0, 0x73AE47F8},
+ {0xBAD228DA, 0x08C85C18}, {0x06B02A6B, 0x7C209DC9}, {0x9B8B8387, 0x514A85CC}, {0xB5F49554, 0xF5BC6394},
+ {0x0F7CEECE, 0x5FFCA9A5}, {0x56A54DF6, 0x33B3DFA3}, {0x457862C4, 0x46E11324}, {0xA43F8C1B, 0xCA40C3BF},
+ {0xE9EF19F3, 0x3D0888CB}, {0x53AFDC35, 0xC2F6DB88}, {0x524BA9D2, 0xE885DFFF}, {0x781842C5, 0xA45841AE},
+ {0x59E54516, 0xC389CF1A}, {0x1DE350D4, 0xBF0C9892}, {0x1BFF4276, 0x54F67F48}, {0xEC43C398, 0x818B5791},
+ {0x6693FE94, 0x0F06AF4E}, {0xD63D88C1, 0x08AFD89A}, {0x8D2561DD, 0x5A48FE91}, {0x7E5D7ECE, 0x8E355115},
+ {0xB0A82F05, 0x83D8D69E}, {0xD0F3E455, 0x563669D3}, {0x38B545F9, 0xA41CBCF8}, {0x1DBE04B0, 0x14B72CBF},
+ {0x3909AE6F, 0x51DFAF0E}, {0x2BFC947A, 0x342A418D}, {0x114798DF, 0x2D1A473C}, {0xCD419B5E, 0x110A0EB3},
+ {0xAB2F1E5E, 0x06EC068F}, {0x4780A2E3, 0x40F34E53}, {0x69DA090A, 0xBE012BA3}, {0x31F3DA63, 0xCF08369E},
+ {0xC99667C6, 0x2EC98B68}, {0xDE2446F1, 0x16FAE937}, {0xED08D0EF, 0x807D8628}, {0x16878B60, 0x97CBC2D7},
+ {0x0D9DCFE7, 0x9A054F66}, {0x3E3F6574, 0x87E276AD}, {0xEBACC504, 0xBA465B43}, {0x1B108D2D, 0xC7752D15},
+ {0x71B1972C, 0x40CEE396}, {0x17B7049E, 0x809B7DA5}, {0xD5069F57, 0x23AF51B6}, {0xE3800EE6, 0xE4414A33},
+ {0x5F2B2D1C, 0x8A5CB757}, {0xF92F47B4, 0x32BB879E}, {0xA5F24294, 0xA9AE7454}, {0x772B27E9, 0x1D4E041F},
+ {0x26CB2E34, 0xBB3C3155}, {0x84E5E236, 0xC9CC713B}, {0x8CA0FC6E, 0xACB6F7E7}, {0x0196D27D, 0x90B7584B},
+ {0xFA33EAFA, 0x14C83133}, {0x19485778, 0x392068F8}, {0x7CA8719A, 0x08CCF372}, {0xF3DD42A6, 0xAC65344F},
+ {0x1F07625D, 0x1417F18A}, {0xAB0AEB10, 0x0C02BE22}, {0xDD4D9E55, 0x9C3ED2C6}, {0x982510F8, 0x1E37D150},
+ {0x98AF2D77, 0x9204D19B}, {0x578B27D4, 0x583DB115}, {0xEE4AF318, 0x04574EFE}, {0x19EC352A, 0x50F55A8C},
+ {0xBC1B64A8, 0x0E80828A}, {0x583ED2C5, 0xDE64684F}, {0xE460359E, 0x8785229E}, {0x9F844EA4, 0x1450725C},
+ {0xCB2EAC25, 0x91944AAB}, {0xF147C5D9, 0x436F2BAA}, {0x87CE5C0C, 0x04B74C23}, {0x5D78AE62, 0x539AE7CC},
+ {0x63D16266, 0xECCBA733}, {0x4481F902, 0x0DA2ACFA}, {0x22B5C9B4, 0x56D8A1B3}, {0x470009B8, 0x9BCEC1A1},
+ {0xB161D57B, 0x00B14957}, {0xB7363F8B, 0xFDDFAD13}, {0x4D2A05B8, 0xA8423968}, {0xA63E1F9A, 0x4A5809D0},
+ {0x463BF10A, 0x71C78E87}, {0x858A0C22, 0x872ABD33}, {0x45D81F1D, 0xF9A8C6B5}, {0xFBC0B0FE, 0xC6BD6F6E},
+ {0xBB38DEDD, 0x657235F1}, {0x7749D0AB, 0x02FF56B4}, {0x144EDB11, 0xD29CFDF8}, {0xEDBD4A01, 0x2143CACC},
+ {0xA7CA513C, 0xCACB7CF1}, {0x52A1958C, 0x88525DCA}, {0x6EB730D1, 0x9377EAFA}, {0x849B6C18, 0x21535D9E},
+ {0x7C6E202E, 0x6742160E}, {0x42FAC0F6, 0x7CFCC23A}, {0x8BC3D3FC, 0x35506FF1}, {0x63FA90D2, 0x2B4E475D},
+ {0x4CFA4A43, 0x8A307997}, {0x1B85D651, 0xBABCC72A}, {0x251C5298, 0x8E8B04AD}, {0xA69F0200, 0xB1E28AE0},
+ {0x7BD25EB3, 0xE4F8F0CC}, {0x93C16658, 0xB40F5F16}, {0xDBB411F1, 0x1DD67D21}, {0x4B4E5F3E, 0xBC4820FD},
+ {0xC9ED0139, 0xBEC4755E}, {0xD6FBD082, 0x0E25B1A7}, {0x9A372A2C, 0x32EA7448}, {0x6015708E, 0x7059B6DF},
+ {0x7E81F274, 0x3497BF67}, {0x5477EAEB, 0x6361285F}, {0x1B8BDE62, 0xE0B9BE64}, {0x209D79C7, 0xA82377A3},
+ {0xBBD17D39, 0x4A7BD3CC}, {0x88677DF3, 0x651AB092}, {0x455DF562, 0x74CD1C90}, {0x1DF1F9E8, 0x2A81274E},
+ {0xBF71E7C8, 0xE9B37347}, {0xB8EAA4F1, 0xAB06097D}, {0x8410E8D2, 0xE53FABCC}, {0x9FDA7774, 0x7674ED44},
+ {0x3674C1BD, 0xC560D63C}, {0xBB7B11D8, 0x458BD94F}, {0x67D5F096, 0x9A62EE8A}, {0xF2528539, 0x64BBE2DB},
+ {0x0AF101B7, 0x1F735A6C}, {0x7836AE95, 0x1740C54C}, {0xD9261607, 0x7433E15C}, {0xB01E0CBC, 0x726B4D6B},
+ {0x94F9BECC, 0xBDE4B6F3}, {0x0530AEAA, 0x1E39A706}, {0x26B2B90F, 0x9B9ADC49}, {0xF9C25E9A, 0xBD0804ED},
+ {0xBEB3DF29, 0xFD042A6A}, {0x06A93BC5, 0x5CE558C0}, {0x1748BD1B, 0x7CC96FA1}, {0xF8D1B958, 0xE952FC0D},
+ {0x7F3F3396, 0x11B9E354}, {0x8C522B6E, 0x4AC7A529}, {0x42028596, 0x7F12770C}, {0xC9BC5BA6, 0x6AC6D3C2},
+ {0x940246F9, 0xEC147DEA}, {0x95B8078B, 0xCBC29B61}, {0xC06710A7, 0xB3020829}, {0xF5A75F00, 0x9334310E},
+ {0xCA27124B, 0x2885705D}, {0x641F68FC, 0xFD08372C}, {0x61AE5CE2, 0x8FEBD0BE}, {0x194560A6, 0xE82A29F9},
+ {0x761BDF69, 0x1E6522EE}, {0x8B4F9215, 0x3CC28673}, {0x2C68FAAD, 0x880ABCA4}, {0x61B96470, 0x3EED6FE3},
+ {0xEC73D8F8, 0x4035F3C1}, {0x232A826C, 0xEB7EDCC9}, {0x1E8F1521, 0x213F41D6}, {0x9C9D399C, 0x84B5FC06},
+ {0xA8BC3BF1, 0x7EB774FA}, {0x191BFB75, 0x721852E4}, {0x87BBAE27, 0x16045764}, {0x4614E959, 0x3CC59E08},
+ {0x0D217120, 0x086A8A9F}, {0xDC8FF980, 0x9B63F835}, {0xE49E5ACD, 0x8B5FC867}, {0x6A1D2515, 0x9393C06E},
+ {0x1CFC2AB0, 0xB7094F18}, {0x2B7DDF1D, 0xE05927B2}, {0x3A8B0370, 0x5645F8C3}, {0x7A75699D, 0x8837D8DC},
+ {0x1072118D, 0x9A9EBC86}, {0xED7C8C2A, 0x6F70197B}, {0x25E992EE, 0x91D0123E}, {0x2AE858C9, 0x96F37612},
+ {0x69A86714, 0x08B464F3}, {0xC6B464FE, 0xE6A9CC71}, {0x9B355590, 0xBC69947A}, {0x29C0CA3B, 0x8D182E0B},
+ {0x5B903859, 0xF0AC06DE}, {0x1EC70A8D, 0x386B089D}, {0xCC601BF1, 0xAC5E0A82}, {0x3750A2D3, 0x8BB97439},
+ {0xD069522E, 0xD69FFE2B}, {0xBD1DE561, 0x037D28EF}, {0x20F9825B, 0xE0C07661}, {0xA5F304C1, 0xDC6F819C},
+ {0x0C9A1D4A, 0x72784E20}, {0xA2ACA99D, 0x90F1D1CF}, {0x52F61F5D, 0xC9BCF0CA}, {0x3E9553AE, 0x8DE2CDDD},
+ {0xEB16FE36, 0xE45983AE}, {0x8EDB05F8, 0x39E88B4D}, {0x3F96FC94, 0x3272F6C6}, {0xFAE9C8EF, 0x23745E81},
+ {0x77A13EC1, 0x84F9AEFD}, {0xBAE4E3A4, 0xE1D70560}, {0x5DF0C237, 0xEE42B2D6}, {0x85B7A028, 0xA54BA8A6},
+ {0x8E622687, 0x6C246DA8}, {0x04032414, 0xA80E602B}, {0xEF8A04AC, 0x310D7291}, {0xCD302F89, 0x4A70D609},
+ {0xF4CC22FB, 0xC9E5C2B6}, {0x48A141B6, 0x2A296432}, {0x0B128156, 0xBDB18428}, {0x5F95E6D5, 0xACC3FF0F},
+ {0x70BDD921, 0x40378745}, {0x28DC3363, 0x7E0AD4B4}, {0x87DA5D4F, 0x218509AA}, {0x471CCB49, 0x646B4CC4},
+ {0xF1319433, 0x671F8780}, {0x9D8A7A73, 0x8C23C61F}, {0x5389042D, 0xF9A05023}, {0x8A719827, 0x08BC3B62},
+ {0xA7A60F29, 0x674EB040}, {0xC413A757, 0x85D6ED21}, {0xEC53B06E, 0x599E3F70}, {0x9CED94B9, 0xB8C7E91E},
+ {0xCAF7F621, 0x4686072C}, {0x79C2AFD8, 0xC4686ED2}, {0x4D5AFE02, 0x06144371}, {0x09DDD7BC, 0x21693DAD},
+ {0xC8E8607C, 0x6B4CB89A}, {0xEBF017BA, 0xF239FA62}, {0x19BD033C, 0xF4A5C95C}, {0x256D6A2C, 0x65940145},
+ {0xDF50ADF2, 0x19BB6AE8}, {0x8648B280, 0xCA335D6C}, {0x77B374DD, 0xC09B3780}, {0xBF91F003, 0x77C15357},
+ {0x50FB8655, 0xEAB8DD4E}, {0xD7655A89, 0x153428A4}, {0x151C8BE0, 0x237C08D1}, {0xBBA51DF2, 0x18773C3B},
+ {0xBB06C561, 0x1D90911B}, {0xE27DCE49, 0xC2937E19}, {0x253257D6, 0x6AE47373}, {0xE3F41C48, 0x94D82E63},
+ {0x428DCAB8, 0xDCCFD71E}, {0x9207D86C, 0xB1302B75}, {0xC99B43EE, 0xBB014B0C}, {0x30EFFA66, 0x0DB571DA},
+ {0xF0139F97, 0xE244BB8C}, {0x2748320B, 0x29D178D5}, {0x1513D5D0, 0xD4347199}, {0x234AB880, 0x77096397},
+ {0x57B76425, 0x0869248C}, {0xCAEE2C2A, 0x07A564BE}, {0x29F0D267, 0x3DEE1A52}, {0x46FE7BE9, 0x66B07794},
+ {0x5AF36095, 0xF74945C4}, {0xFD1986B0, 0x311F697F}, {0x771B2340, 0xBEF673C7}, {0x96A5C12C, 0x9C43AA62},
+ {0xA4E79FA0, 0x45927687}, {0xE10E0616, 0xF1BD6D75}, {0x20852937, 0xAF62D4DD}, {0x9444C0D5, 0x502F9261},
+ {0xBF142CF6, 0x9C22CCC2}, {0xB0101BDD, 0x1288523D}, {0x7646E53A, 0x8993C6A1}, {0xAC400643, 0xDF5BFCB5},
+ {0x3E888A25, 0x77CA4ABA}, {0xF0742CC0, 0xF74DF4D4}, {0x55154187, 0x441F5D14}, {0x00D9C829, 0xA0F73FCE},
+ {0x89E9112E, 0xDDFE4701}, {0x1C8EA350, 0x60FA547A}, {0xF40107C8, 0xB5728640}, {0x1094AC0B, 0x404A42E0},
+ {0x10ACF890, 0xA54DAF72}, {0xFC4A4513, 0xBD979318}, {0x3226B057, 0x2562F04B}, {0xD75515E2, 0x301F3556},
+ {0xD13C73AD, 0x8C1ADA41}, {0xA4172498, 0x665F9905}, {0xBB86DFF0, 0x83077CC9}, {0xF436ED34, 0x5DE20CC5},
+ {0xF8617BAA, 0xF5A1C4C1}, {0x8AF1084B, 0xF7A248FC}, {0x0DBF63D1, 0xBC8DF67C}, {0x3668BB08, 0x9D54E8E5},
+ {0x5E385E18, 0xB020C854}, {0xD9E038E8, 0x85E32961}, {0xE2D196E8, 0x75629F13}, {0x64D90619, 0x9EEE56A1},
+ {0xDD9AA237, 0x1208B1A4}, {0xD0FC4839, 0x787DC209}, {0xA91C6AF7, 0xCA1D6FBA}, {0xF8309789, 0x3DD43C06},
+ {0x1B04A80E, 0x6EF94EBD}, {0xEF75EDC6, 0xA5F758F7}, {0x526A0CF3, 0x81C072BB}, {0x0FE50626, 0xEB7906A2},
+ {0x8F786243, 0x0845708E}, {0x44BCF2A6, 0x4AF1AF7A}, {0xC85F2B85, 0x2493EAD5}, {0xBB86B3A9, 0xF125C5BD},
+ {0x02FBB602, 0xE2095A86}, {0x9F0C0E2A, 0x051D47A0}, {0x4D99128F, 0x5E9086B7}, {0x67F98FD5, 0xD70052EB},
+ {0x03187718, 0x4C2733FF}, {0x002172B6, 0x0A2227C8}, {0x19E38D0D, 0x468CCE43}, {0x21B289DE, 0x569D8F4D},
+ {0x2B7EF287, 0x87F6884C}, {0xEE67E90A, 0xF8055384}, {0x8A9089D8, 0xBE8AA820}, {0x1139721C, 0xA889F770},
+ {0x4D244A7F, 0xBE01DD78}, {0x6673FA36, 0xE4A389C5}, {0x20A37A1D, 0xE3E75D1C}, {0x3F651A9F, 0x85ABA9B8},
+ {0x4CB03C3E, 0x1A1F82B3}, {0x5E7A1E99, 0x666C46E2}, {0xE54D3004, 0x6DB02BA0}, {0xB025FA5E, 0x6428BA8B},
+ {0xB00CA58B, 0xCE2C3AFF}, {0xAF3AF504, 0xCFEE38EF}, {0xB01D6A95, 0x52A6ABE0}, {0x03A33DA1, 0x7DE37F90},
+ {0x529BA232, 0xB20C5629}, {0x4BBAA2BA, 0xC3679592}, {0x745821C2, 0x2ADAD285}, {0xDBF9746D, 0x3C7EF463},
+ {0xAC08502B, 0xC97FF860}, {0x73927461, 0xC7C3EE73}, {0xE211C89F, 0x02C49DB4}, {0x238F47C6, 0xF8A07799},
+ {0x018661A6, 0xE9E7AF6B}, {0x160ED7E5, 0x7F1C76B6}, {0x248FE064, 0x4111D312}, {0xFA6F0EDF, 0x25C2AA57},
+ {0x43B03393, 0xAD52B6E1}, {0xD5023E8E, 0xDDC39725}, {0xB0CB0B0F, 0x34E25383}, {0x5EECC117, 0xDF092145},
+ {0x3BA87EF3, 0x00F2329E}, {0xD3E6364F, 0x6ACC395F}, {0x7D506076, 0x3608259D}, {0x0D89DC43, 0xDC036DC4},
+ {0x212B4E6D, 0xE016E55F}, {0x16FE731C, 0xEE6D7253}, {0x8BE162FF, 0xA62F575B}, {0x0808A675, 0x73BF070B},
+ {0x76A4031C, 0xC96C6F46}, {0x1D04465A, 0x12D331F7}, {0xCC8F5FB0, 0x36E0C2C6}, {0xC8E08EDA, 0x60308674},
+ {0xEC258EA2, 0xCFAE3EF5}, {0xFF06A8CA, 0x70A6D35F}, {0x7F885FD0, 0x6D86C5A5}, {0xCDFEC1EF, 0x0867B15A},
+ {0x78066F3A, 0xD32C8C8E}, {0x063CCA1C, 0x39DAD617}, {0xBC881290, 0xBD4216A5}, {0xD0C2D4B9, 0x545E112A},
+ {0x3339E76B, 0x0149CC0A}, {0x7B31A3CD, 0x082741D8}, {0x3A0FEDD9, 0xC752FC48}, {0x2C71DAA7, 0xBD406BD6},
+ {0x6A3A7619, 0xC42A8B39}, {0x7DAA0891, 0xF19D566A}, {0x24291498, 0xBBED426A}, {0xCE39519B, 0x2860D539},
+ {0xDF5E5777, 0x11D1703B}, {0x776C6604, 0x24764FDC}, {0x6B790BE9, 0x09C5CA13}, {0xDDA9DACE, 0x6AE514A8},
+ {0x62676270, 0xC77E3D11}, {0xF992760A, 0x38146996}, {0x4782540B, 0xCF68392F}, {0x66215530, 0x646EC61F},
+ {0xBBAD3AE6, 0x5CA38785}, {0xA7DC7D91, 0x340E4804}, {0x700C4D85, 0xE956CF85}, {0x9B433254, 0xD1B93452},
+ {0xDDF0C5DC, 0x3089361B}, {0x99DD6810, 0xE283ED59}, {0x4B6AC66A, 0x6A3CC486}, {0x44C66556, 0xF17910A2},
+ {0x83CD2841, 0x9FE3F245}, {0xC6960FFD, 0x66BBB4C5}, {0x8C6C74E9, 0xC9A07C3D}, {0xA023DD23, 0xB62DFA2E},
+ {0xC2D3B514, 0x256C2F52}, {0x4CA19BD2, 0x6B4D7D07}, {0x9A6E9A1B, 0xE4A21488}, {0xAD22CB50, 0xCD8A7033},
+ {0x9E7FEB04, 0xB86E350D}, {0x99132FBE, 0xF4AE9F71}, {0x2E3FD41E, 0xE3B216F7}, {0x32DE193B, 0xA3AA49C6},
+ {0x80B7105F, 0xF4F0945E}, {0xA486E9B2, 0x47F39DC0}, {0x88BFAB06, 0xBBCAA534}, {0xC3471639, 0x4906E8E0},
+ {0x9F4148EC, 0x6927339D}, {0x01734B49, 0x97F23E8E}, {0x7D6CA9D8, 0x3D1B7CA4}, {0x2F94BF01, 0x1D26BB55},
+ {0x76F864EC, 0xA53116CB}, {0xCBF78009, 0x5E1FCEA3}, {0x7BED6E42, 0xF6EFB4EC}, {0x166066C9, 0x7D126EBC},
+ {0xCEBA82F9, 0x8B11D6DB}, {0xFC86F91D, 0x95EB317E}, {0x82B4BCDA, 0x07E01D4D}, {0xB29D52F5, 0x58A58A39},
+ {0xDE9F5A68, 0xAFD099BC}, {0x68365DDC, 0xF5FDC06E}, {0x8C87B236, 0xF8DDBDE8}, {0x2333E32E, 0x49A785B3},
+ {0x9C025A1F, 0xD42B874F}, {0x08BB10C4, 0x6C8FF8AB}, {0x72D6BDEE, 0xBFEEC27A}, {0x90D63DE5, 0xFBEE6923},
+ {0x8AE8179A, 0xD5D4DA67}, {0x4262418C, 0x6DF897B4}, {0xDD296D87, 0x46DEC750}, {0x8B15DA7C, 0x2334F65E},
+ {0xAE6B86A5, 0x6FA08D3D}, {0x84C1C830, 0x3A2453C5}, {0x9D596A7F, 0x34C51757}, {0x14565541, 0x2C3F496F},
+ {0xC378F34C, 0xA72453A0}, {0x98D71A38, 0x3ABCE56D}, {0x10608C3E, 0x2E02FAB1}, {0x19660FD9, 0xFD4752BB},
+ {0xA0BDD9FC, 0x5630CD24}, {0x5F279B9E, 0x631064A7}, {0x08785803, 0xDC7C468E}, {0xD5009739, 0xA17F5B75},
+ {0x3539AF26, 0x8DD11D90}, {0xD7CB775E, 0xA0D4EBD3}, {0x44931AD6, 0xCBA07298}, {0x05D9958E, 0x94576531},
+ {0x6FE8CD17, 0xB0E82277}, {0x038AEDB1, 0xDF7C6F77}, {0x21A920E4, 0xD2DA84B9}, {0x6F8F3C14, 0x0DFE0917},
+ {0x7F1D1C69, 0xF15C3BE9}, {0x6AD62780, 0x1B38B4BD}, {0x5E7B540B, 0x2BEAAA53}, {0x013D9489, 0xEE9149D8},
+ {0xF53C874A, 0x0F53A635}, {0x6C579B2C, 0xE2489721}, {0x254E6C97, 0x1AB497AE}, {0x079F83B0, 0x93F48996},
+ {0xF04095A4, 0xE423C313}, {0x75E2E8A6, 0xE0B65415}, {0x7794C390, 0x3D2074A5}, {0x992E3555, 0xD998486B},
+ {0xEA250E66, 0x34DDDE68}, {0xC0360936, 0x61A5A5A1}, {0xA7C8958D, 0x531DCD53}, {0x17497DA1, 0xBE324456},
+ {0x73C6A6F7, 0x53228A7A}, {0x2B831B7A, 0xC7978C46}, {0xD3CDF6EB, 0x315AD392}, {0xDA129ADB, 0x06FDAB9C},
+ {0x59A9280C, 0xE67B7FCC}, {0xC63444EC, 0x6512F0E6}, {0xAA86AE04, 0x6B4D04BF}, {0x0D065E29, 0x3305ABD8},
+ {0x19EB4A47, 0xFA0BC91A}, {0xDA2D4554, 0xE0956964}, {0x3D92802D, 0x3F4FF54D}, {0x45C4A93B, 0xE8CB85EC},
+ {0xFC8C8B24, 0xBC9C444E}, {0xA21104D0, 0x65F5C64B}, {0x677B91BB, 0x715B6EF6}, {0xA5D30709, 0x8DF9AAF2},
+ {0x83453DD4, 0x0975C625}, {0xAC1E27A4, 0xCC1C9FE4}, {0xF14FBEC7, 0x592FFB81}, {0xF856A48A, 0x3D0770E5},
+ {0x15DADA0A, 0x8076678A}, {0x7AD04865, 0x4A58E0E8}, {0xB30115F2, 0xF1D62433}, {0x62B4076F, 0x73F0242B},
+ {0x5AC82C0B, 0xF5058CD2}, {0xEB1CCD9C, 0xBE54C829}, {0x099D6B87, 0x59C94D94}, {0x896F35FE, 0xAD50ACBE},
+ {0x026BB053, 0xA84EBC64}, {0xC0BB5668, 0x1C720054}, {0xDE9ECCBA, 0x4777D08A}, {0x6C0F863D, 0x6EAB4606},
+ {0x5D70E8DF, 0xB8BEC349}, {0xCDE6951C, 0x8F8678DE}, {0x4470688E, 0x361D3A64}, {0xED2EE16E, 0x932841E2},
+ {0x19C57835, 0x48998ED7}, {0xA362A2D1, 0x6CEB10AB}, {0x88EDAB21, 0x25B7723B}, {0xAC88E208, 0xDCB1B86B},
+ {0xD5DC3647, 0x2207581D}, {0x9E47C953, 0x7DD32187}, {0x66D121CE, 0xFB5826CF}, {0x235C76BC, 0xD7C393CD},
+ {0x06603AD1, 0x6DB0491C}, {0x94E7FFE1, 0x5E3CF39D}, {0x17E38768, 0xA5BE6E3C}, {0x542723A0, 0x2578FDFB},
+ {0x5FAB7D0F, 0x34D30845}, {0x7BBCE305, 0xCAED8E3F}, {0x4DAEBBF9, 0x6022ECE6}, {0xE7F634C6, 0x94611FD6},
+ {0x0D3193B7, 0x9269F3E9}, {0x964FBA31, 0xC088E84B}, {0x48ABF4ED, 0x1D74B315}, {0xD0531033, 0x075EC72F},
+ {0x0573E9A5, 0x1240CCA9}, {0x4D932AC9, 0x9CA85273}, {0xFA5100D1, 0xB94EFDA9}, {0x7EDD3E6E, 0x25DD65CB},
+ {0x181FC354, 0x03347F09}, {0xA9B4CB75, 0xAD52C146}, {0xE8DA72A1, 0xCD23FDC0}, {0xDF3E3C7B, 0x83937AEE},
+ {0x6E5FF77A, 0xDDCE573B}, {0xCF074BD5, 0xE5060BDE}, {0x56EDB1F4, 0x99E563C4}, {0xC20686BB, 0x12686144},
+ {0xEBCA7586, 0xD024BBF1}, {0x3294E3CF, 0x87A5E5F5}, {0xE6B2D4CA, 0x74AF179D}, {0x426631A5, 0x33B0CE9C},
+ {0x56961C9C, 0xCB7283D2}, {0xAD743E2C, 0xF99244DE}, {0xBAD1DE69, 0x071FC651}, {0xDEEBECD8, 0x122CD2BC},
+ {0x44AACB01, 0xC71CB498}, {0xCA9A9548, 0x1C85D23B}, {0x1F40E8C3, 0xCB5DFBD1}, {0xEED55D03, 0xA49BC893},
+ {0xEF0791C4, 0x67157447}, {0x5297AAE9, 0x1D318966}, {0x51DBE915, 0x8A8D5CFF}, {0x34FC1B57, 0x182066E3},
+ {0x4091BD27, 0x2BEA5B0E}, {0x982FBB2E, 0xD45B08B5}, {0xBCB6608E, 0x9081C99C}, {0x0D5A29B8, 0x153557BE},
+ {0x212F9ABE, 0x8A3C69D8}, {0xF193DA58, 0x30D7BB82}, {0x39DADC97, 0xE1F8A604}, {0x781BD477, 0x6C8F2B66},
+ {0xD09F684F, 0x2959DAD0}, {0x2B9CC93D, 0x1256EDBE}, {0x5B1EBE03, 0x3D3F1A52}, {0xDF80C6A0, 0x1CEA5729},
+ {0x45B5A1FB, 0x107D5095}, {0x946173D3, 0x881F5F6A}, {0x96112673, 0x592A3A1F}, {0x71FE339A, 0x000B3A4A},
+ {0x87876BD7, 0xA1C6A9CD}, {0x49570C50, 0xC1DCD099}, {0xBA8E29C3, 0x341EEEC5}, {0x398BB32F, 0x9BDAF020},
+ {0x3EA3C108, 0x019F5A71}, {0x7B2D253C, 0xF7216B01}, {0xEB07F1CA, 0xCC68EFD6}, {0xE4C83BFC, 0x026E4B8A},
+ {0x84CEB103, 0x21CAF4A4}, {0x02FA67CD, 0xA4728393}, {0x63985FE7, 0x952BCAF2}, {0xF8B03E56, 0x02837FCC},
+ {0xB6799DBC, 0xE5CBD1C8}, {0x4D3F75D7, 0xA5B8C240}, {0x8F2EA6C1, 0x3B774946}, {0x272DBF6B, 0x716DFFF9},
+ {0x54FDE8F0, 0x430D8419}, {0x757BA874, 0x9063E5B2}, {0x6C210288, 0xF37DFB00}, {0x0DE7B945, 0xFB660975},
+ {0xF89D0BB6, 0x96931126}, {0x5EBD26A0, 0xD98E8B26}, {0xD93BF2B3, 0xC18852DB}, {0xDE01EC3F, 0x88451FB0},
+ {0xE1E8C516, 0xFA79446A}, {0xFC723FF2, 0x90182E97}, {0xF3EA3421, 0xE4148F0A}, {0x1F426E5E, 0x8FA2D5AD},
+ {0x9E3511D8, 0xA4169EF2}, {0x4B0A3B6A, 0x9B6AA032}, {0xC3356245, 0x7FE78205}, {0xA8BD0C6B, 0x27162D05},
+ {0x1D09D5AB, 0x3240F1BC}, {0xB604EB41, 0x2E66F140}, {0xE5603136, 0x8FDE9577}, {0x75B24370, 0x20945B48},
+ {0x5BE98D82, 0x8F48B385}, {0x7044FDD4, 0xCC5E5F1B}, {0x70DD5AB1, 0x49C4EB97}, {0x8BB0B0D3, 0x091F0FD7},
+ {0xF749EEB7, 0x5CB27352}, {0x65BA3EB1, 0x4FEBAAAD}, {0xC67CB0F2, 0xAD52B200}, {0x31AA09F8, 0x92C511E0},
+ {0x89FB9AA0, 0xB1E05E14}, {0xFAA5A1C9, 0xFD854A57}, {0xD40D1FA6, 0xA2D58AC6}, {0x42400155, 0x22BF2C74},
+ {0x450273E1, 0xC9409162}, {0xCA6EA773, 0x061FD7B3}, {0x5C9D3487, 0x2505F156}, {0x1919F7CA, 0x9BE4460D},
+ {0xBCBB26AC, 0xA65289CB}, {0xA656CF94, 0xDF263D88}, {0x6E8DEFB3, 0x054BF929}, {0x15445BBD, 0x7937A8D0},
+ {0xB0E31193, 0x3559C025}, {0x3547AD50, 0x2A9AC958}, {0xF846A3A5, 0x371ED9E8}, {0x2C956CD4, 0x70D6F56A},
+ {0x32E1A72B, 0x72144B5E}, {0xB0C21373, 0x27059160}, {0xD8564975, 0x8DC08DAC}, {0xB8530CD0, 0xDA0C754F},
+ {0xAA8FFEA5, 0x2DB57280}, {0x11A54F5E, 0x3EE089E8}, {0x041F6BE6, 0xFFA6F389}, {0x932F64FE, 0x02D445E8},
+ {0xCE7993DA, 0x92030449}, {0x01BC39C6, 0x7D270DAE}, {0x80D05804, 0xAFC9DEC2}, {0xAD3A201D, 0x130679CA},
+ {0x071F9091, 0xD0E81B16}, {0x04563A69, 0x274A61FC}, {0xEB8B4A4F, 0xD7C2B97B}, {0xC79BFCB5, 0x0DCCC659},
+ {0x45CA9BC6, 0xA3E6CF81}, {0x176F64E2, 0x28D6488D}, {0x497D9954, 0x3D944609}, {0x402D985D, 0x24234EE7},
+ {0x7A4A957E, 0x91506C4E}, {0xB8DBB7EB, 0x9361BDDE}, {0xC50C215E, 0x24649583}, {0xF9727E1D, 0x01BB9F7D},
+ {0x196EA1A1, 0xA5F60F0E}, {0x2B1E9F16, 0xF53B2AE6}, {0xB596283F, 0xF9092DE8}, {0x58BE9366, 0x5BB20C17},
+ {0xD05927EF, 0x695D4E48}, {0x80485592, 0x2289B708}, {0x646EAFFB, 0xBDDB17F9}, {0xAC2F3F54, 0x2170F3A3},
+ {0x43120ADB, 0x81BA5648}, {0x2DCAAAB1, 0xB8FC6420}, {0xAFD1B797, 0x94398D6F}, {0xD5AA7DEA, 0x06357621},
+ {0x92DFCAD5, 0xE1F5AAC6}, {0x4BE096F9, 0x11E793CA}, {0x6F7F5E1E, 0xDB091B92}, {0xEDC14859, 0xC9714587},
+ {0x5BD4EDFC, 0xE80B42AF}, {0x5045EC82, 0xB7CD2702}, {0x7AA4667A, 0xA79E1A6B}, {0xEFFB2BAC, 0x5E201841},
+ {0x963CCF88, 0xA04D27C9}, {0xE9357849, 0xFAD2C823}, {0x7F2A28F2, 0x1407712A}, {0x58C073CF, 0x9A4894FD},
+ {0x4DF01947, 0x4EBDCE1D}, {0x949EC7B1, 0x1BF94759}, {0xB5DD2F85, 0x7FD9A76E}, {0x0E3BCFCF, 0xF97BB248},
+ {0xDFAA28F9, 0x4B09A459}, {0x3BEA7DF5, 0x3495913C}, {0x9BB70E26, 0xD07F8350}, {0xAAAEF3D5, 0x8C852F57},
+ {0x8E67F46F, 0x090CC9F6}, {0xCBF809E0, 0x34911896}, {0x40BF3658, 0x254D3D39}, {0x9D6D5ED8, 0x62AEF6C1},
+ {0xB955BA3A, 0x449D1852}, {0x586DCA64, 0xE812F7B8}, {0xB2028154, 0x73DAF0EE}, {0xF0CD25AE, 0x593D558A},
+ {0x0E1A1D59, 0x29F21F03}, {0x73AA31F2, 0xA3111A3D}, {0xD141EFA1, 0x2B95F313}, {0x9F02D486, 0x16C248F0},
+ {0x4ABBBD86, 0xFB854EE8}, {0xB714D283, 0x08BE9D99}, {0x09C489C8, 0x42B07D7D}, {0x89242FBF, 0x3BC6D2B5},
+ {0xDD74E05D, 0x08492BE9}, {0x735DAD15, 0x37321F31}, {0x6387B2C4, 0xEF971B01}, {0x744801EE, 0x391056A4},
+ {0x7419792A, 0xC53E13DB}, {0x00B09D2D, 0x142AEDD7}, {0xC78EA0D1, 0xCF995EFF}, {0x39D5B442, 0xD409455D},
+ {0xF4527E52, 0xADC1EF2A}, {0x6C025F27, 0xE8078A63}, {0xDCEA7085, 0xF50CC1BC}, {0x4DFC8BEA, 0x01AF3814},
+ {0x10ECA239, 0xF880026A}, {0x92F60FA7, 0x0FEE9E22}, {0x2841537B, 0xDF21B61C}, {0xF9073597, 0xE6467AE6},
+ {0xFF073C6A, 0xEE18E474}, {0x0C8FD191, 0x34FB9AA7}, {0x80D77D94, 0x3B722E95}, {0x0E99ABE2, 0x97C5926C},
+ {0x9F41AC65, 0x54FE4EE9}, {0xE228E3AB, 0x9D3F4EA9}, {0x7DD682AE, 0x7602564E}, {0x8812F622, 0xD874E1E1},
+ {0xB1A065E7, 0xBAF87516}, {0x39D422E1, 0x373F371F}, {0x13C84740, 0x6E1593C4}, {0x2CD6DAEB, 0x867F4F12},
+ {0xB66B7E6D, 0xEAC39DC9}, {0x8C980AE4, 0xA9D44CA8}, {0xD418F9C3, 0xC3A87BC4}, {0x7D7AABC3, 0x7CBF2452},
+ {0x9F59A292, 0x58A3B546}, {0x71BC1D92, 0x6D1013F3}, {0xBD15C819, 0x6993297E}, {0x3986FA61, 0xA1B1179D},
+ {0x30B76825, 0x23E383DE}, {0x5A7EA99B, 0x5497B320}, {0x3A778A02, 0x1900214E}, {0x77F3FEE7, 0xF5E0156B},
+ {0x6F875E1A, 0xB6C7BB9A}, {0xB5823D32, 0xB6FF32F8}, {0x2C415FEA, 0x3CB9046E}, {0x8EEC4EC0, 0x361673FA},
+ {0x5C7C168D, 0xE1BB9668}, {0x5789CFAD, 0x423DD4A2}, {0x50B775DC, 0x282D04EB}, {0xF11335B2, 0xF6372E22},
+ {0xFE24B688, 0x8CF0C1AF}, {0x8FF9DF4A, 0x959D6799}, {0xDC4B663F, 0x2B9F4E78}, {0x3F3939CD, 0x60772EB5},
+ {0xEF19160B, 0xBC99702B}, {0x6450C4AD, 0x6B966451}, {0x945F6B81, 0xC0666A3D}, {0x22CDD6F3, 0x0467FB0B},
+ {0x93A3A5D8, 0x6FA5DFAE}, {0xE49AE16A, 0xF4F04904}, {0xE8638BA3, 0x763CB040}, {0xA682EB3A, 0x7BB35DBB},
+ {0x2710E00B, 0xE276E47D}, {0xECAA4ABC, 0x7348A872}, {0xD3A5F621, 0xB61D82FB}, {0x5122E42B, 0x821ED711},
+ {0x18D0393D, 0x207A8EE8}, {0x1D386886, 0x66A747E9}, {0x2A3478AD, 0x3090375B}, {0x659BAE88, 0xB76A5057},
+ {0x6CD796D2, 0xC3670845}, {0x6B6B7740, 0x7C103A48}, {0x08EA97DD, 0x5C61F4DC}, {0x7892300B, 0xF2D0C04A},
+ {0xE033FE22, 0x3CF578A5}, {0x2A155CBA, 0x33E3A67F}, {0x7AA36C72, 0x56BF11EF}, {0x6F281AEF, 0x958C32D5},
+ {0x72F072EB, 0x1A94621C}, {0xBAD65D6B, 0x6357F6E6}, {0x8988BA74, 0xC6412546}, {0x81DB371E, 0x8C706436},
+ {0x1F314861, 0xFFEB8CEB}, {0x65129002, 0x46532AD3}, {0x97221629, 0x21C859EE}, {0x703EEA0B, 0xB19C5296},
+ {0xBC95B6D8, 0xDE60D662}, {0xE540D326, 0xAB1EEA59}, {0xE1801A82, 0xF713F13C}, {0x0AC4EBAF, 0x625B1941},
+ {0xBA49AA9C, 0x56BC6E51}, {0x6AB603AD, 0x9F7F69BA}, {0xB39361EB, 0x9CBF8FE3}, {0x2E3AC81C, 0x5177DE18},
+ {0xBD0433C0, 0x10823651}, {0x348D37D2, 0x4D763112}, {0x1295352E, 0x66F3598C}, {0x08EA6AEC, 0xF4EB45A9},
+ {0x533A2972, 0x8A9E22A9}, {0x9EFD8096, 0x41D6D9EB}, {0x5D7C1B9E, 0x9DA2A59B}, {0x39D6A315, 0x85695077},
+ {0x3FFD23CC, 0xDBE1A425}, {0xA7DF7017, 0x7390D985}, {0x635DEF6E, 0x167E041B}, {0x53CC5961, 0x740014D6},
+ {0x189476D6, 0x7D829BF1}, {0x03E618D5, 0x3258AA06}, {0x7214D5E3, 0x1E45DAF0}, {0x6EAE9825, 0x747D86DF},
+ {0x42CDC1B5, 0x628F2F2C}, {0x1F0AE6D6, 0xCE9075C7}, {0x568ABF99, 0xB46BB635}, {0x4C111755, 0x63E9FF9F},
+ {0xB68763EC, 0xB1688A32}, {0xFAE0FA79, 0x19EFF945}, {0x044A6E9F, 0xAEB937B1}, {0xAD0309FE, 0x6894EABB},
+ {0x658184F8, 0x8E877CCD}, {0xB190C358, 0xA1E638B5}, {0x432E710D, 0x365077D4}, {0xCBC7EC78, 0xCF0E0ABE},
+ {0x574570A2, 0xFE07160A}, {0x963ACCAF, 0xA5B0CC13}, {0x6C94BDC1, 0xBD87C585}, {0x43FFE2D5, 0xB6E29F27},
+ {0x3993139A, 0xA1D0E342}, {0xB95CBBFE, 0xA86E24D8}, {0x3DB82DD3, 0x64F0A90D}, {0x123FF458, 0xE71979D1},
+ {0xA5BFC609, 0x76C4944C}, {0xE55828E0, 0xBD587838}, {0x92858644, 0x4D317676}, {0x96DDC9EA, 0x7541D76E},
+ {0x37537DCE, 0xC7C3E3A8}, {0xFAFC988E, 0x83E85F83}, {0x7367AF75, 0xB64664DB}, {0x2EE77A9B, 0xE34D4040},
+ {0xBA85B816, 0x3DE5358E}, {0x988BF26C, 0x98967539}, {0x9EA24F9E, 0xDCD3F6A2}, {0x826CFD7C, 0x264A1400},
+ {0xD4C6897F, 0x832DFABD}, {0xCB78B3C5, 0xE4E722A6}, {0x60802D00, 0xE442EE1D}, {0x6FD7EF4E, 0x467F3269},
+ {0x0F04ECAF, 0x75D0854D}, {0x5A9CE0F4, 0x722FCA97}, {0xE2A10B73, 0x8C50D230}, {0x30ABD33C, 0x478BEF81},
+ {0x795270A8, 0x8DC29322}, {0x6AD4B3D1, 0x0F5D24B7}, {0xDCF3288A, 0xBE6720FC}, {0xF79F0EAB, 0x2FA1E136},
+ {0x8FD0253A, 0xEA134B33}, {0x16C03F5B, 0x81644B5D}, {0x859F61D8, 0xA310301D}, {0xF5DF1A3F, 0xABD014D7},
+ {0x2099837C, 0xF7AA1336}, {0xF8D1F59D, 0x45DC8185}, {0xFBF0D5A0, 0x840CF4B3}, {0xD6255D5B, 0x2840E9D6},
+ {0xDD60F8FE, 0x237DCF88}, {0x3418BAB1, 0x991A2EE5}, {0x421F77F9, 0x2A67A812}, {0x870CDF5D, 0xAB836CE7},
+ {0xAE7A95CF, 0xB3242C64}, {0x379A7367, 0x46EAF199}, {0x1DCC0963, 0x78B34408}, {0xA6C86E7E, 0xFF1CC005},
+ {0x3DD1CF2B, 0x862C2038}, {0xDD37BA8A, 0x317601D3}, {0xC009D4B1, 0xE8AD66FE}, {0x13A5F170, 0x98FE546D},
+ {0x6B60F861, 0x4960386B}, {0x6C7A4DF9, 0x8732A961}, {0x0B25765D, 0x3C67473F}, {0x67806C19, 0xDEADA20D},
+ {0x03D06581, 0xB183B960}, {0xD1A624FE, 0xB742E3C3}, {0x2D1F334F, 0x908BFDF0}, {0xA88E9426, 0xDAA8B44B},
+ {0xB3635100, 0xEB6A48F0}, {0x40452E9B, 0x1E23FCC8}, {0x13E20CE5, 0x91F7C64B}, {0x27D0CE63, 0xDD466D60},
+ {0x284A85D9, 0x3BDA456D}, {0x45686A22, 0x3CE6445B}, {0xEEAE6E64, 0x84D1E542}, {0x7C2BD767, 0xAA6A52DB},
+ {0xA71691A6, 0x5DBCE1BF}, {0xD66A9BE0, 0x235D78A4}, {0x5AB73ABC, 0x302B4DFE}, {0xC119E4B1, 0x7DCA7E57},
+ {0xB155D79D, 0x85059B1E}, {0x9302486C, 0xC9E9BCCC}, {0x32D00FF6, 0x5320B27F}, {0xB86961AE, 0x6C8DED05},
+ {0x1D63E8E1, 0x2602D92F}, {0xF3F2D781, 0x734BD980}, {0x601E3DB6, 0x4C255242}, {0x36DE9D3D, 0xED47A8AB},
+ {0x2EBBE823, 0x718610AE}, {0x95BA23CE, 0xB08B9AF5}, {0xF1CB2629, 0x0CA40F03}, {0xB310DE2A, 0xCC013585},
+ {0xD6F5607E, 0xFAECA0D8}, {0x3B0565B9, 0x978E4F0D}, {0x803EB4A8, 0x7148C675}, {0xF1E64339, 0x3DA9CFE4},
+ {0x285F61EE, 0x7E814219}, {0x483C7080, 0x417AA8B7}, {0x2AF468A6, 0x12FFA477}, {0xA3D38807, 0xCB87CBF4},
+ {0x10726B52, 0x938A9D20}, {0xF1AC78E6, 0xDC253FA3}, {0xF3B3593F, 0x13CB9380}, {0xB9A3CDA7, 0x6D2AE51A},
+ {0x0B225635, 0x2278D48A}, {0x1F4BD855, 0x9E188A47}, {0x710B93DB, 0xB4E762E8}, {0x02BFC220, 0x5D7953CB},
+ {0xA113D4AD, 0x0472DEFE}, {0x53302924, 0x71FEF61D}, {0xAE92820E, 0x14CCF66E}, {0x1A4EADA3, 0xC96B670A},
+ {0x4D2C13E4, 0x4BCC2F7C}, {0xCB2C51BD, 0x81C99CDE}, {0x7C09A45D, 0x50A88DF9}, {0x6B04BC4B, 0x9362F64F},
+ {0x223E93D9, 0x3BE8850E}, {0xA7256BB9, 0x1AE58D88}, {0xFE836E04, 0xDA45888F}, {0x9236DD2B, 0xABA0C5A6},
+ {0x8E3A09C5, 0xF96A37BE}, {0x9F83766B, 0xB32BB943}, {0xEFFB83E2, 0xAD91767B}, {0xDB7CDC3D, 0x73C4DAD1},
+ {0xBBE8FD68, 0x37FC059A}, {0x73FEB1F0, 0x59C37AB4}, {0x1FE2756F, 0xBD3D9C5E}, {0x99AF68A4, 0x4A1C454E},
+ {0x36F4A082, 0x50238DE0}, {0x391D3158, 0x1E2A723B}, {0x1DA5E666, 0x5BCDD0F2}, {0xF968B617, 0xF3E4BAF7},
+ {0xE7FD02F6, 0x1E88A741}, {0xE7E35430, 0x1640C653}, {0x88887691, 0xBB98FC68}, {0x3ADBABC9, 0x90EABFD4},
+ {0x172346E0, 0xCAB983A4}, {0x8B9488A4, 0x7EA36519}, {0xEB8FA0B5, 0x6295D6BF}, {0x438AF754, 0xAC257EE0},
+ {0xDC13B3A2, 0x1A38B348}, {0x292885EE, 0x814863EF}, {0x336F6E1C, 0xF200E8CC}, {0x9F97C1E7, 0x70FB300D},
+ {0x5AE09ED7, 0x27D88FB3}, {0x0000BDFF, 0xECF211FA}, {0x62DF5103, 0xE4BC09D0}, {0xE70A227B, 0x1BBEC282},
+ {0x81C50B64, 0xF5961C69}, {0xADB4D791, 0xFEBFE2BC}, {0x843C2FBC, 0xC5F64C52}, {0xF70A1E42, 0x5D484FC0},
+ {0xA3FBC79F, 0x555C23A3}, {0x15DF9A4E, 0x865AD48A}, {0xE162E6DF, 0xB7E1CCAF}, {0x570C3228, 0x5C6FBD33},
+ {0x8CCC3A0E, 0x356D787A}, {0xAEE9C4F0, 0x452715F9}, {0x65D10197, 0x78149460}, {0xDD83163D, 0x81517464},
+ {0x3BA7B9B2, 0xFE8BCA8A}, {0x6E0400E3, 0x257C5C8D}, {0x7431DC7A, 0xAF23E3C9}, {0x4C8DCEBD, 0x85CC5E17},
+ {0x8AD4C0ED, 0xA107DDAE}, {0x79680DD1, 0xAD4E75F7}, {0x75E914C1, 0x438C7002}, {0x0F0C53E5, 0x2501F824},
+ {0xF5A0CD4B, 0xA724D041}, {0x2964FE5D, 0xC2F8BE7F}, {0xC7FB1153, 0x5A0C5AC9}, {0x8804E19B, 0xC17772CC},
+ {0x045277E2, 0x9A76523E}, {0xABD9BB78, 0x7CDF2436}, {0x9F7B3472, 0x2635060E}, {0x120DB45E, 0xF39CCABF},
+ {0x5593D8D9, 0xDCEDE3DF}, {0x280D466A, 0xACCB9642}, {0xFC8CF6AD, 0xCC24C2DB}, {0x17963E42, 0xE165F052},
+ {0xAD496E84, 0x1FAC2997}, {0x5866FDD4, 0xDD7C2A70}, {0xB34CE868, 0xAD835156}, {0x96D954C8, 0x6F05EA72},
+ {0x02092B79, 0x212B022A}, {0x45E6FBEC, 0xBA276DAD}, {0xDCE47E0C, 0xB8D77230}, {0x23FBA5F7, 0xD5CE5DC2},
+ {0x15440246, 0xE0A8FAEE}, {0x1458571E, 0xA54D8B2C}, {0x513DBE84, 0x6FEEC83E}, {0xFE64AB2D, 0xC2A9B1A3},
+ {0x32D953CA, 0x2FA699E3}, {0x188872DB, 0x7BD37E48}, {0xEFBCCF1B, 0x98D005A8}, {0x6C86ED6D, 0x89795149},
+ {0xD68516A9, 0xAFCEA89E}, {0xD1E81757, 0xB3C8153E}, {0xFB0B91EE, 0xB5F3D075}, {0x6EA555E3, 0x9A4976D9},
+ {0x01EBAADC, 0x462F2DCC}, {0xB17D95E4, 0x2ABC9BEA}, {0xA16CACAC, 0x31B15B81}, {0x1CE55F36, 0x4B161627},
+ {0x04F76F55, 0xFF8ED7B9}, {0x69FDCBF3, 0xA4F978FF}, {0x3EB3FD0F, 0x8AF06FEE}, {0x1D51BB2D, 0xF59A801C},
+ {0x3738D4D7, 0xFB085ECC}, {0x0A62CEC5, 0xFFD38622}, {0x2087D634, 0xFC3854D2}, {0x4853064A, 0xC2E9E508},
+ {0x5E5BF760, 0x504B844D}, {0xA350FAE8, 0x00F53D1F}, {0x9E8466D9, 0xFA728ED0}, {0x9ACF4DF2, 0x485EB187},
+ {0xE860ED7D, 0xBB7A12C2}, {0xE6F625E5, 0xF20C9DFA}, {0xA27937B5, 0xEC04B959}, {0x5AA8B4AC, 0xA2C4A9D2},
+ {0x782F52B8, 0xD489D0F1}, {0x84A800C2, 0x178FA9A2}, {0x72A7AE22, 0xCDF946C6}, {0xBC4D45D9, 0x465133E3},
+ {0xD2A508BB, 0xFD59AB89}, {0x3BDC5F96, 0x28F1A1D3}, {0xF2AC3303, 0x77228950}, {0x4D483804, 0x320D26B0},
+ {0x9D4E074C, 0xF4C0781C}, {0xD544BD37, 0x1FBEA0A5}, {0x3F4B3F66, 0x3F8D2427}, {0x679F9849, 0xEE28B881},
+ {0x5E83F77E, 0xDB0C1762}, {0x1476587C, 0x83196E62}, {0x4CE0695E, 0x04AC0782}, {0x4B745683, 0xFAAA4C6A},
+ {0xE341A92A, 0xC312AA1A}, {0xC8186CCE, 0xEBD28849}, {0x037CB99C, 0x89E44D47}, {0xBAD85F49, 0x3F59C565},
+ {0x5E4CC512, 0xCE093D89}, {0xB9E59B74, 0x1916A64C}, {0x99A484D3, 0x73E88AC1}, {0xCCC3B704, 0xE3FFBF82},
+ {0xD841B12B, 0xCE7030EC}, {0xF0A0C071, 0xB45125BE}, {0x5F28382E, 0x2A749BD8}, {0x5CC57A89, 0x4E892106},
+ {0x3659B801, 0x761CBBF6}, {0xF449F062, 0x60441C1E}, {0x3D71D879, 0x817FADD3}, {0x8816C6EF, 0x114A1A64},
+ {0xBC1570EF, 0x7CE4972C}, {0x331D854E, 0x8752E056}, {0x8871B9CC, 0x5B56F5E2}, {0x6945F0B0, 0x66BCBFDF},
+ {0xB2527D57, 0x82234F96}, {0x85D69CAE, 0x16B082C1}, {0x629A2798, 0x25D5E383}, {0xD754CA0E, 0x7FBDA68C},
+ {0xF7BA060D, 0xB6FECC76}, {0x3695152F, 0xB00FC1FF}, {0x9792EC8D, 0x1F2ED267}, {0xB4CFAC72, 0x2E53B04F},
+ {0xA91C307A, 0x3C1A2852}, {0xE0C047C5, 0x74F339BA}, {0xE0ED082A, 0x8A9291AA}, {0x34AE9CD8, 0xCDD3DB49},
+ {0x245AC1D0, 0xBBE69D24}, {0xFE06D38F, 0x98C3B622}, {0x5B058EBD, 0xC2B79E8E}, {0x814DF442, 0xEF57AFAC},
+ {0xAC0F9230, 0x6983FDFE}, {0x84700949, 0x621F62BF}, {0x190821A0, 0x03939BF3}, {0x77426337, 0x4634F53F},
+ {0xCF975F34, 0x7C228123}, {0xFDD561F3, 0xB5AEDCE6}, {0x34DF84D5, 0x2041E01A}, {0x19D5C88A, 0xB45A0642},
+ {0x80EC5EA2, 0x54866716}, {0x0C636FF2, 0xF3EC1BF3}, {0x6ABD63E6, 0x68861E75}, {0xE21E4873, 0xCCCA63EF},
+ {0xA42DE077, 0x5673A7AD}, {0x89A49493, 0x03050975}, {0x981E291E, 0x9396A25E}, {0x3D0334D1, 0x98BB8213},
+ {0x69AA197E, 0x8A0AD547}, {0xB497FB85, 0xD7C629C6}, {0x4FF55F3D, 0x40118E41}, {0x828617F8, 0x8CCC3219},
+ {0x6AC355EE, 0x8240B5F5}, {0x29B47456, 0x646BA60D}, {0xC1AEC096, 0x951E30E8}, {0x4E1E457B, 0xD6B944A7},
+ {0x869EB235, 0xB74DFE99}, {0x47BE50FC, 0x930B1A6B}, {0x092271A6, 0x8D4F14C6}, {0x1826DBDF, 0xF2A9BA56},
+ {0x539CC787, 0x3599F035}, {0x3AEC182A, 0x287A8A94}, {0xBF2F6EAD, 0xA0A1650A}, {0xF23D2A75, 0xB0DFE222},
+ {0xE83A68F2, 0x8808308E}, {0x69E4CF2A, 0x49794D99}, {0x896B58D7, 0x7F7D2A9F}, {0x61522B01, 0xCB18ADD9},
+ {0xA6299177, 0xFD1B9CDC}, {0x10AE8751, 0x747D9EB2}, {0x145AFF48, 0x2DAC0F11}, {0x4A36E9F7, 0xCE8AD6AA},
+ {0xC338FED9, 0xB794727B}, {0xD2ED36E4, 0xF94EA13C}, {0xA9C4FC46, 0x342555B5}, {0xB9C74904, 0x80F1D20D},
+ {0xF71E144C, 0xA78B06A0}, {0x9D26A393, 0xD2BC0D38}, {0xE3DE0FEC, 0xB4E5F10C}, {0x459A3793, 0x195E3954},
+ {0xC402750B, 0x1CB49DA5}, {0xA33BD319, 0x319694EF}, {0x5D60D156, 0x16B330C9}, {0x0474BD86, 0x4A1AB104},
+ {0xB0C48D76, 0x166426A9}, {0x2E0CB85C, 0x726ABFE0}, {0x699B7B20, 0xCFBE9C94}, {0x4B38188D, 0x04D77FA6},
+ {0x09DB5CDC, 0x436E83DF}, {0xD5D88E0E, 0xA7F16742}, {0xC6F1565D, 0xF9BC72E4}, {0x06A1A5E4, 0x514AF0E8},
+ {0xC71AF795, 0x497A6648}, {0x1F462B37, 0x6DFC0DC7}, {0xF4EE43DF, 0x68AAC520}, {0x94A68E5C, 0xD4B781AA},
+ {0x3D598A85, 0xAB42CB4F}, {0x1ED6FCCB, 0x38744C47}, {0x572A2FA7, 0xF6732BB9}, {0x3C1AC78D, 0x789CFCAD},
+ {0xDA87965B, 0xFBACD0A0}, {0x380FE0EA, 0x4DE29049}, {0x1D75D268, 0x97009470}, {0xA7D5645C, 0x49E572BA},
+ {0xA5AA4DA8, 0xBBD69B70}, {0xE4159309, 0xD453302F}, {0xC54E8472, 0xB6F189A7}, {0x7E5D8772, 0x6CAB363C},
+ {0xD4751A98, 0x511A15D8}, {0xD446DDC3, 0x839E6883}, {0x8315E661, 0x8CE53380}, {0x3E487971, 0x0D2D189F},
+ {0x0DCA170C, 0x41425AE9}, {0x82F03B46, 0x7BC6C284}, {0x6AB56845, 0x8F0D16C5}, {0x392E0140, 0x4FA91264},
+ {0x91829396, 0x0894C053}, {0xFB6F5DD9, 0x816A52F7}, {0x8B1D51F7, 0xBC9425FD}, {0xE57D6FA8, 0xDF170643},
+ {0x536332A5, 0x4335F71C}, {0xAAF9D578, 0xB51FF6B1}, {0x1D8C0C4C, 0x3B634B88}, {0x5B9A2142, 0x70961042},
+ {0xD90BED09, 0xFFD4B980}, {0x22F0E103, 0x35EB3DE7}, {0x85D73E7F, 0x1D706921}, {0x24D330B4, 0x31BE84F2},
+ {0xEFD028B6, 0x7FADC8E7}, {0xD0505184, 0x4F46E757}, {0xFE337FA0, 0x236D3B04}, {0x9BAECC55, 0xFF91ECF9},
+ {0x62BE03E4, 0x0B821990}, {0x39AA675F, 0xD08FA4CB}, {0x4B4C0875, 0x49BDE6E3}, {0x1E0A3A2C, 0xBADC96E2},
+ {0x573DF265, 0xBB445E05}, {0x8EC22F4F, 0x407F6FD4}, {0x5D5426EC, 0x793E0120}, {0x7C60B9A9, 0x7809E3B1},
+ {0xF6580E4D, 0x7BD855AD}, {0xB76C7F4C, 0x325D8723}, {0x16EB713F, 0xD133E6A4}, {0x1561D2E8, 0x838ED93E},
+ {0xA7DFA6E6, 0x3B632456}, {0x6B45FF2E, 0x94F029BA}, {0x02CDE15A, 0x97EA132D}, {0x6B2C6770, 0x826755C6},
+ {0x4FF4686E, 0x47BCB9DE}, {0xF772785B, 0x73D38815}, {0xB445EB61, 0x5EE8FD92}, {0x896433E8, 0x42513F30},
+ {0xF97354FF, 0x663F0DA3}, {0xE9809E12, 0x00EC75AB}, {0x3275744B, 0x168362A4}, {0x5D492E31, 0x872537BF},
+ {0x404F94C2, 0x62C07F05}, {0xDD3A5CB0, 0x917A8C1E}, {0x5722FDFE, 0x7A44734C}, {0xC84E5364, 0xD4567156},
+ {0x2759E447, 0xC72B1597}, {0x2DDCA9EA, 0x34726B44}, {0xC1794BB6, 0x7B0C0899}, {0xC0AFA819, 0xE6B91060},
+ {0xC39D8E7F, 0x26D5B96E}, {0xDBDAE973, 0x47BC89B9}, {0x14888439, 0xEEBD89A1}, {0x4796B09E, 0xF7B4BDB9},
+ {0x37427C4D, 0xD88798AD}, {0x75A9357A, 0x095D5710}, {0xAEF8C40C, 0x0ED2A15E}, {0x6064369A, 0xD01FD4B8},
+ {0x81756D22, 0xE37E4D3C}, {0x20CA1D0A, 0x63B7FCDA}, {0x275674CF, 0x91B6BFB0}, {0xFB2F6654, 0x75FB9748},
+ {0xC7C0C40E, 0x5531D7D8}, {0x6032BC7D, 0xBD6ED118}, {0x5A236F4B, 0x4F7D0DB9}, {0xBD904C58, 0x5DB24A5C},
+ {0x062C9106, 0x417E9594}, {0xA9A0A880, 0x406A0FDE}, {0xAEBAE3A0, 0x121E5D49}, {0x7AE6BDC2, 0xD4CACF90},
+ {0x48817E1A, 0xD118BD1C}, {0xD2A66490, 0x9A033045}, {0x25C28759, 0x49093D3B}, {0x40C717E1, 0x3AA1B31A},
+ {0x8042AC53, 0xDBBE27E6}, {0x6E80972A, 0x6233C0A4}, {0x751444E0, 0xD45F7928}, {0x32BB5CC1, 0x244A1992},
+ {0xF083682C, 0x1B4B0E28}, {0x12F8658C, 0x2298C239}, {0x48B478DC, 0x54B8F49F}, {0x01276307, 0x2D7D81E2},
+ {0xE1B741C7, 0x2D899EEE}, {0xE439ED48, 0xFB8339EE}, {0x3705EAA7, 0x999E8964}, {0x30AFD428, 0xBEF14598},
+ {0x836FDAAD, 0x413F8292}, {0xFA1DD56D, 0x6FAB2194}, {0x0C6E9AB8, 0x71AFF0A3}, {0xDE3BA234, 0x52C02AF9},
+ {0xCA66C650, 0x63791225}, {0x374692D3, 0x84841CC4}, {0x40A284D5, 0x02C0C3B6}, {0x39FBCA3A, 0x4BCE62C7},
+ {0x8ACD450A, 0x272FE427}, {0x56B841D0, 0x1C9BE59D}, {0xFB050191, 0x8F8B2874}, {0x542ECA0E, 0xAF09096D},
+ {0xF7BF4C76, 0x100683AE}, {0x862AFC41, 0x5F006CC8}, {0x438BE8C5, 0xB78639EC}, {0x775B79B0, 0x3293C753},
+ {0x426130AC, 0x9DAC1E9F}, {0x1C4C749C, 0x32436A6C}, {0x6D362996, 0x7EB9C29F}, {0x540DE199, 0xC4ADD357},
+ {0x2B700705, 0xD7B805D7}, {0x7D1F496E, 0xBF01F4CE}, {0x12B68E37, 0xE4F5BAA2}, {0x0F92B26A, 0xCCBC53DA},
+ {0x74CF1E0E, 0xBD27FE65}, {0x300A54AD, 0xB3E3118C}, {0xE7B273A7, 0x1985D298}, {0x607AD598, 0x7746087F},
+ {0x481E8F50, 0xDEDD9DB1}, {0xFEF43351, 0x18116426}, {0x18F05EAC, 0xA3C875BC}, {0x7EB4738F, 0x447B42AB},
+ {0x7A66FF2C, 0x97100E0B}, {0xDDFEA762, 0x57F0BEBA}, {0x1BBE6A0C, 0x55768709}, {0x810B64AC, 0x39845927},
+ {0x0D87F56A, 0x090C20D7}, {0x06320557, 0x5359C8BD}, {0xA0FA46E7, 0x71C90730}, {0x5B215203, 0xCB71E888},
+ {0x9219AE90, 0xF9F5FFD2}, {0x3B47EB28, 0xD66ADAB7}, {0x42EEFA22, 0xC6DEBECC}, {0x855F6466, 0x38AB0F49},
+ {0xD7775535, 0xD0742DB1}, {0x28F4E6CA, 0x786755D2}, {0xC4AF0369, 0x99C387BA}, {0x4D7692FA, 0x085E90BB},
+ {0x5C727892, 0x33B9F7AF}, {0x881CF2DA, 0x523A7E81}, {0x8319EA9D, 0xA4A80AF8}, {0xAA38F56F, 0x19A4E845},
+ {0xF53458BC, 0x2447FAA7}, {0x8639CCCC, 0xEA0F87A4}, {0xEDA81A51, 0xA0FCBF58}, {0x5333EB4D, 0xB20C52A5},
+ {0x2FB99DA5, 0xFA32A342}, {0xDC74C157, 0xA57C9E42}, {0x8D9BBDC3, 0x2AF9A7FA}, {0x906C3431, 0x3997BCE2},
+ {0x8A31BDA1, 0x3906EE5F}, {0x7004D8C3, 0x7EA421E8}, {0xC37128EB, 0xF32C994A}, {0xB79BB71A, 0x0FADD06E},
+ {0xE1F25C6A, 0x8650F5AB}, {0x8465904B, 0x2BAA8186}, {0x4D97DB6C, 0xB3B13213}, {0xDC4898B1, 0xF0F6A578},
+ {0x04F5D6FB, 0x00453774}, {0xDDDBA3BB, 0xB8A60726}, {0x806AA3F0, 0x4ED76AAC}, {0xF944101E, 0x0766E87C},
+ {0x70186185, 0x9E66D13D}, {0x55ED1BC8, 0xD3F2219C}, {0x447D2E35, 0x6DA82F4F}, {0x761B2F7A, 0x2ED9B838},
+ {0xFED1E791, 0xB947E05D}, {0xBC3A4788, 0xAC8C3186}, {0x8CDCD94A, 0xF13C3C9A}, {0xA3619CD8, 0x5C8A10F4},
+ {0x29478B14, 0x3EFF2D67}, {0x4F651783, 0x19AD548A}, {0x98B16762, 0x7341B784}, {0x65D690AE, 0x41E88D20},
+ {0x69E12215, 0x91C0B4C4}, {0x18BD601F, 0x726C63EB}, {0x3C110658, 0x5E7A1B18}, {0xAE6CEA4E, 0xE312E5A9},
+ {0x661DAB26, 0xBF7F34F0}, {0x833242C6, 0xB5AD8D2E}, {0xE5D58260, 0x47291397}, {0x6097D48C, 0x468C03CE},
+ {0x0461730A, 0x828E547B}, {0x691DF000, 0x5E5423A6}, {0x16277E1C, 0x632FB432}, {0x65F6F558, 0x117B6278},
+ {0xC91E7FF7, 0x241D71A2}, {0xCE153C55, 0x4ED9C55D}, {0x2F7E773D, 0x49E996B4}, {0x2AF0AF9E, 0xDF09CA79},
+ {0x085D0CC9, 0x1F0C82F1}, {0xA6C9A1CB, 0x0B08CC1B}, {0x29204C0E, 0x1D161DFD}, {0x51F1EFAB, 0x2907CD7F},
+ {0xAAF2C59F, 0xAD1E435C}, {0xAC70BB1C, 0xEB629B75}, {0xF3191A0F, 0x57C11C84}, {0x3F2AFF27, 0x9BA5A46E},
+ {0x61C8988C, 0x3BB6145A}, {0x5FDF8A6B, 0x0B06B345}, {0xD0E16E80, 0xC66CCF96}, {0xC0DF5070, 0x11EFA4F5},
+ {0x833EFE4E, 0x955CD269}, {0xB03B3EF0, 0x0D61A5BB}, {0x6F0DE3F4, 0xE9232BC8}, {0x971FAD6F, 0x4C14D127},
+ {0x2B72D4BB, 0x967E2BB0}, {0x33D60E2B, 0xE07E9704}, {0xA303A042, 0xE2A8F4C0}, {0x699272CD, 0x6922D60E},
+ {0xA94AFAF3, 0x939EEF9E}, {0xF24FDDC3, 0xC19EBC35}, {0x1D3E9F20, 0x6EF8111A}, {0xDCC83489, 0x0DA11642},
+ {0xCBFFB595, 0xB1BF9F21}, {0x5BE9CB9B, 0x630CF8D3}, {0x0734828E, 0x0FBAAC0A}, {0x8EE7BDB7, 0xD5A1D9D7},
+ {0x2DC09F1E, 0xD9224FD1}, {0x3366A9D5, 0x315CC535}, {0x3C104F1C, 0x5B360721}, {0x5FB1C6D7, 0x63BD6170},
+ {0xA385B9C5, 0xDDAD238E}, {0x73C934A3, 0xCDB3ADC7}, {0x8F16AB31, 0x19C66A52}, {0x1853D35E, 0x006DD875},
+ {0x863FE690, 0x3C30BEB9}, {0xF1343E07, 0xFC1F11A4}, {0xF2EE1A7C, 0x60CF9CCC}, {0x0C3B93A7, 0xD53EF5E2},
+ {0x8B2A3D27, 0x75AF9066}, {0x46564FFA, 0x4C67C833}, {0x1FEFEFC8, 0x7A4E2360}, {0x3D428ED7, 0x0E21AB52},
+ {0xB2E63D13, 0xDF30A972}, {0x67C94725, 0x227F9865}, {0x91A8FC9B, 0xA8B3EFB0}, {0x417BC008, 0x7283B671},
+ {0x59003656, 0xB1357B32}, {0x0AE1B948, 0xA36DC436}, {0x05AB726E, 0x9E0CB0F7}, {0x7DF2BABA, 0x4E749B65},
+ {0xF2D351BE, 0xEC1C6EEA}, {0xC9575AF7, 0xD6D57CE5}, {0x0BA25B7B, 0x8E2D85AD}, {0xD7495E1D, 0x739D1A81},
+ {0xE15707CD, 0xBEA50F11}, {0x17865C47, 0xAEEE280D}, {0xEDB3166C, 0x1234FA16}, {0x81F71D60, 0xA84B86C5},
+ {0x37656C86, 0xF66D9B64}, {0x5ADCF5A8, 0x26256ACF}, {0xEF8BD001, 0xDD7979A4}, {0x9334D199, 0x548DCCD0},
+ {0xB39D9EF8, 0x019370D9}, {0x9ED6C694, 0x77E76E54}, {0xCF2F293C, 0x77E944CC}, {0x9D9E38CF, 0xEC4D49CA},
+ {0x8C1D546B, 0x3D237B05}, {0xC10F5C03, 0xCF660EDC}, {0xE941B90D, 0x620E8531}, {0x43B7F819, 0x452F4BDB},
+ {0x2B78C97E, 0xCC32A383}, {0xF474A7E1, 0x265588E0}, {0xC2F9DDB9, 0xA7D8C770}, {0xA3430B37, 0x7B9F4C27},
+ {0x269A092C, 0xE4F2A1BA}, {0x317FDFB9, 0xA72435BB}, {0xB3229A2A, 0xFC1A0161}, {0xA26253BA, 0x9E53DE55},
+ {0xB6FE768D, 0xFBD0326B}, {0x40E67558, 0x411EC1B6}, {0xC7778C8F, 0x1ACC984B}, {0xC8AB3C91, 0x9AC297B4},
+ {0x284C9341, 0x07FF97F0}, {0xCEB315B3, 0xBBB44869}, {0x1AC05F82, 0xA06D0FE4}, {0x702FB955, 0x7E5174C5},
+ {0x4D7322D5, 0x2F98C511}, {0x40C9D754, 0xD6F5C5B2}, {0xF17958C9, 0xF2FE7487}, {0xBF0142AE, 0x56EA8867},
+ {0xEBC96442, 0xF351E086}, {0xB7790D55, 0x4A91FDF9}, {0xCE0DA567, 0x2E960145}, {0xDDCD4DB2, 0x1519CF69},
+ {0x9E4026B2, 0xE53FF32E}, {0xE9021529, 0x91C81D86}, {0xD3A17172, 0x4F0D3710}, {0xFEA45DE3, 0x0C263DAD},
+ {0xAF545B63, 0x3F04B689}, {0x32A5D792, 0x0EA72DDD}, {0x1E1F0879, 0x594FDE78}, {0x5DAA84C2, 0xD8642427},
+ {0xECB063EC, 0xFB0C2890}, {0x15249184, 0x8747EF68}, {0xC230FBF5, 0x8A0A6587}, {0x54EFC719, 0x87453F15},
+ {0xC7D737D3, 0x7690DEEA}, {0x7F3A08FB, 0x1D32F3FC}, {0xFF78FE14, 0xC9E5169E}, {0xDBE15B23, 0xA899CBE5},
+ {0x341E1ABA, 0xEAC0DC3B}, {0xA3AA8282, 0x45C89311}, {0x1B6790B0, 0x16E599A5}, {0xAD2F0F9B, 0x0253227E},
+ {0xD8881691, 0x6DBBF383}, {0xFF15963A, 0x0CD06660}, {0x7137FFEF, 0xD3B40127}, {0x5C882A9E, 0xFFA46B92},
+ {0xF1955982, 0x17B8866E}, {0xEEB617DB, 0x8E3EC4B9}, {0xC48D6719, 0x165C7E73}, {0x204EED43, 0x31EECC7D},
+ {0x92AE213B, 0xBF32AEE7}, {0x07534E97, 0x45B2ECB9}, {0x1CE82E74, 0xCBBF2D50}, {0xD1E3DC7A, 0x25BCEBF8},
+ {0x3F179732, 0x4E6F9F9F}, {0x7E3606E0, 0x3070B7FE}, {0x12360881, 0x9E874AF3}, {0xBD6AA740, 0xE4D39AA8},
+ {0x7757FB63, 0x38725A9D}, {0xFC7AC853, 0xE7B2E201}, {0x06F88441, 0x1A0736C9}, {0xA2DD9041, 0x4B7B7371},
+ {0x6DDB72B2, 0xCB598281}, {0xA60D8FD6, 0x43EDA71B}, {0x3B5678E0, 0xC5C7B1B9}, {0x43E64B26, 0x9DB96178},
+ {0x7D709D23, 0xAF6710BF}, {0x58BEA56A, 0xB0449801}, {0xA785EF00, 0xDBD2838B}, {0x8F6B8F60, 0xEF8DA68B},
+ {0x34684907, 0xD16824B5}, {0x861B9475, 0x7F35448C}, {0x5392810C, 0x562DB811}, {0x0A4A931D, 0xCEF17A93},
+ {0x3E0292D1, 0xF619F13C}, {0x6A5975A1, 0x9F829B91}, {0xB4F16CB4, 0xBD294C5D}, {0x0951396D, 0x222ABCA6},
+ {0x39113A3C, 0xE75E7B33}, {0x74177D59, 0x61CCE714}, {0x086C8B3F, 0xB81E47B4}, {0xC983D578, 0xD8997B45},
+ {0xB538F3CF, 0xDD26AE79}, {0xAF6367BA, 0xB00E1408}, {0x16319DFA, 0xBBF96861}, {0x343D0F8C, 0x9FB19E73},
+ {0xEF64FC29, 0x2690E501}, {0x2C825487, 0xD1E2CD56}, {0x84DDDA14, 0xF1CCD4CF}, {0xE9C703A8, 0x28BE50E7},
+ {0xB2697CCD, 0x9D9FE1BC}, {0x21470E46, 0xD192D937}, {0x75D84E14, 0x97262A42}, {0x039C9A09, 0x9579F1B1},
+ {0xB53EB81E, 0x631933A4}, {0x79BBA399, 0xE1ADDDF8}, {0x32F13598, 0x175CFAB5}, {0x80E709EA, 0x9BAA8421},
+ {0x7B9F1F30, 0x653D52D1}, {0x36150DCB, 0x7DCF5CDB}, {0x2F82E5AD, 0x9D23E077}, {0x2C593209, 0xD11D5306},
+ {0x13B3786E, 0xA911393C}, {0xC7F83DBB, 0xB78E9C79}, {0xCCAF3BDA, 0x792913B6}, {0x6EF63FD9, 0x90F76E4F},
+ {0x4A89FA0E, 0x097D311B}, {0x36FF7906, 0x92470CFD}, {0x05ED3AA5, 0xB3B0578D}, {0x8EBB4840, 0xBEE4DFEE},
+ {0x0CA7F80B, 0xB1281A49}, {0xDB883926, 0x35448B00}, {0x3FA2FF5B, 0xC3AAAD20}, {0xBD6B3222, 0xB488A04B},
+ {0xAEC39F40, 0x7C2C1848}, {0x0305F2E2, 0x3C7B2ABF}, {0x764E3B7C, 0x606352AB}, {0x40B0A593, 0x094FF2D9},
+ {0x1AB0CE41, 0x56267B15}, {0xCA9909B6, 0x4C977674}, {0x672DC355, 0x5F5259EE}, {0xFA18A487, 0xA855BD6B},
+ {0x69685922, 0x0F6DB088}, {0x8C916D54, 0x09DE9E0D}, {0x0504AACC, 0x36926D29}, {0xC5146D3F, 0x091531D2},
+ {0xE1772C5A, 0xEE8455F7}, {0xAF52D6C3, 0xD0B251AD}, {0xAE536364, 0xC1F48D3E}, {0x935C08F3, 0x8F947F69},
+ {0x579326A2, 0x3D676D85}, {0x6964CDCC, 0xFE41A2D7}, {0x3AB44DDA, 0x38747F02}, {0x2376F0C5, 0xE4A6A86B},
+ {0x3FD4C8CF, 0x2ACC2F5E}, {0xC357E828, 0x2391408C}, {0x531A4CCE, 0xA2B6EE80}, {0xCC2CAEC7, 0xA08C77FD},
+ {0x539EA4CE, 0x904AAD5F}, {0xF2293A9A, 0xABCF19C3}, {0x1DA3892E, 0xFA5D2B92}, {0x4893AEE6, 0xFD60DB48},
+ {0x34DB9750, 0x71720FAB}, {0x9A4F5EB2, 0xE08C77CD}, {0xC5378C01, 0xCE019AA5}, {0x659743ED, 0x976A80BB},
+ {0x9D3DE396, 0x2318891C}, {0x02D5A74E, 0xA5991BFF}, {0x0B6A9DDC, 0xD51407FE}, {0x4ECD4C0F, 0x23F900E6},
+ {0xB808CE56, 0x67D0B115}, {0xAB423A02, 0xE68D67BE}, {0xCAC1DDF3, 0xE4D79357}, {0x641D991C, 0x5B9CDB79},
+ {0x2F9FD7BB, 0xD77867DF}, {0x74AAB237, 0x0913D05A}, {0xE4B12442, 0x3A09E34F}, {0x32640D84, 0xFBF6459D},
+ {0xE3B0127B, 0x78DE08FC}, {0x7251B90E, 0x35EEB7AE}, {0x60736A2A, 0xB40BD421}, {0xCBA71FBF, 0xF2AAB0CB},
+ {0x27D3A382, 0x03CE6329}, {0x9B7CC169, 0x2457653F}, {0xCC88A0FC, 0xBB2A0BF5}, {0xADB1159F, 0xF1E39EAD},
+ {0x8A92F44B, 0xA581B788}, {0x7D112AC5, 0xF2C28F40}, {0xF162A754, 0x27F84B82}, {0x53191A2C, 0xD2639C87},
+ {0x23A0F482, 0x9C668652}, {0x54A1759E, 0x34CEEB58}, {0xD7BFC3B7, 0xB3254DCB}, {0xBDEAAADD, 0x5034BE87},
+ {0x08234DF0, 0x5CF3ABE6}, {0xAFF8AB30, 0x06088A4F}, {0xFC5493F9, 0xC7D1186A}, {0x241AED07, 0x5E5B6CF9},
+ {0xB702A801, 0xCB41F9A0}, {0x8B65DB87, 0x14F08330}, {0x2314B600, 0x7BE55520}, {0xAC7BDCF4, 0x04899910},
+ {0xD0FFAB6E, 0xA9D7EE3C}, {0x692A0A16, 0xEB851BFF}, {0x6BC98421, 0x4E1C7614}, {0x2C571BD5, 0xF125D986},
+ {0x76DAB088, 0xB1AA0B4E}, {0xC55A292F, 0x53964573}, {0x8618B203, 0xCB290124}, {0x633358D8, 0xA0A78984},
+ {0xD550B118, 0x7C3FACC2}, {0x2831B5DA, 0x8228725A}, {0x9CB76D1C, 0xE378543E}, {0x40F8A67C, 0xAF678A31},
+ {0x5AB4E412, 0xD68C6234}, {0x2F0AC4BA, 0xB395357B}, {0x70E60E1C, 0xA288C288}, {0x10FD712A, 0x87BCD745},
+ {0xAF8EDEA8, 0x4B16DE1A}, {0xFB598D20, 0x3E0196FB}, {0x9D44B66F, 0xDFCDD70C}, {0xD4288F8F, 0x8E353E59},
+ {0x4355425A, 0x565409FB}, {0x69EEA647, 0xBF653BEA}, {0xD3A1411A, 0x8D36B57D}, {0xC92A736C, 0x90D943FC},
+ {0xA5A81830, 0xA5C0A443}, {0x9B9E9D41, 0x7A9420F6}, {0x59200C95, 0x20A0CB14}, {0xC74C26BA, 0x0E3B926A},
+ {0x2617C0C4, 0xCBECB6B1}, {0x814CA426, 0x5CA27355}, {0xA93926E0, 0xDBD6C32A}, {0xB310AC2E, 0xB33BBB6E},
+ {0x9C96B99F, 0xE57E403E}, {0x5F994DC0, 0x408F5F2B}, {0xD247D62D, 0xD56251DB}, {0x7476783B, 0xA5F6DA17},
+ {0xF90D7ACD, 0xCDC090CD}, {0x5306ABDF, 0x91ECEB52}, {0xE74C5BAD, 0xE385506F}, {0x94F58092, 0xAF57E81D},
+ {0x41487A6D, 0x5EFD9204}, {0xD1B36549, 0x86CDA523}, {0x8621E371, 0xB7D95C3B}, {0x0376F18D, 0x70FB3879},
+ {0xE5AF5FAB, 0x49A73293}, {0xCF4A780D, 0xE6F3A918}, {0xE1D56218, 0xE0AB2F60}, {0x8AF69349, 0xA9517F61},
+ {0x8560C204, 0x958FA44A}, {0xC1AB4F9C, 0x61CDC7EA}, {0x7ECDD586, 0xEB77FC1C}, {0xDE4F37F7, 0x2B23FB57},
+ {0x80A43092, 0x1FDBFE4A}, {0x7C97C5F7, 0x5BE4F76B}, {0x1935F893, 0x1776BE38}, {0x1121F610, 0x9ABF42AA},
+ {0xEDC65558, 0x7D25E592}, {0xC73F98BB, 0xD164F23C}, {0xBBF95CE1, 0xF18E9946}, {0xFE4B8B89, 0x9E6AED0C},
+ {0x651F63B4, 0x5C458B1C}, {0x560DF957, 0xD01BCD75}, {0xF0170CCE, 0xD1824893}, {0xF7B5BD68, 0x7A56ACCF},
+ {0xFF8CE836, 0xAA5DC47C}, {0x4CB55CAA, 0x8A80B5D1}, {0xD091B189, 0xF2F5D780}, {0xD1C5E484, 0x766C341F},
+ {0x6B493677, 0x226852E0}, {0xA72E00CD, 0xF2CD308A}, {0x43A0B713, 0x5A1264C3}, {0xD7B7B516, 0x141EDC61},
+ {0x5881D1AF, 0xFB8D46DE}, {0x1DC7AD46, 0x49F2F0DE}, {0xF353BAFF, 0x79C0263B}, {0xD04F55DA, 0x84D40603},
+ {0x98B2E4E7, 0xAA379B44}, {0x043EC33A, 0x6E9577B8}, {0x65D648BC, 0x1D4AE527}, {0x3A137730, 0x7C3C2532},
+ {0x0E1A8491, 0x79EA2032}, {0x0CF679FD, 0x70B0CBF1}, {0xB7CC9C1F, 0x2E4D1055}, {0x0C1E9A05, 0xE98247DD},
+ {0x92FD5DF6, 0xB1A2D0F2}, {0xCB3D2F42, 0xB268DFA4}, {0x8771634D, 0x887A27FA}, {0xC1F17675, 0xC35A1648},
+ {0x1E154EE2, 0xE11FD664}, {0xC41470B6, 0xCF257665}, {0x956A2018, 0xB48265C9}, {0xA9235F9A, 0xC689B80C},
+ {0x197E0895, 0x4A756894}, {0x960A716F, 0xDA25FCA8}, {0x049AD41F, 0x4E769E60}, {0xB0B64451, 0x1529874B},
+ {0xA8E32763, 0xC5A3A37A}, {0xC2497D21, 0x4F0C61C3}, {0x33B5EB0B, 0xE7DBAED1}, {0x1B815E18, 0x6461AF3B},
+ {0x6C5B53B6, 0x9E464758}, {0x0D872152, 0x9767F10F}, {0xC3EEA864, 0x35795811}, {0xA4BEA03A, 0x8CF63BE4},
+ {0x782B44A8, 0x58F402E6}, {0x9B94F990, 0xFAA27AB1}, {0x66940BB3, 0x1A4B2500}, {0x07ADBB4D, 0x693AB7D9},
+ {0xB049EC92, 0x1D792323}, {0x1DF8616F, 0xE5549A5B}, {0xF8CBA890, 0x298933C7}, {0x8538E6EB, 0x8113C437},
+ {0x5F1FD407, 0x6D57108C}, {0xECD5B739, 0x9222003E}, {0xA3193C53, 0xD2240015}, {0xDFFE4656, 0x2A037F1F},
+ {0xAB55D585, 0xA8B2AD1E}, {0xE97C56B6, 0x11790D6B}, {0x5F38B3DC, 0x4CF79DCA}, {0xB15C7DA9, 0xFE3768E9},
+ {0xDBE3CF89, 0x3DD92B68}, {0xE305742A, 0x39B5A996}, {0x187DF5CA, 0x87F1B63D}, {0xD76AEDC3, 0x966CD1F5},
+ {0x79A7EC95, 0x53307F4E}, {0xFC51B302, 0x69843A4A}, {0xC5CFF1BD, 0x0021B999}, {0xD4494CCC, 0x490F5102},
+ {0xEAE8A189, 0xD42FCC65}, {0x9949CB28, 0x7C123F15}, {0x953CE848, 0xF0F84148}, {0x95B9E46C, 0xAF4A01B4},
+ {0x5B66EC93, 0x54613B1A}, {0x63AFC27B, 0x241F4208}, {0x5E49C997, 0x500CB565}, {0x7CFB9FF5, 0x966A04D5},
+ {0xD5F606D4, 0x7F59FE76}, {0x12FE4A97, 0x65E83589}, {0x0321494C, 0xA16DC44C}, {0x17354708, 0x13FF444F},
+ {0x07B2398D, 0x3A061719}, {0x708882CD, 0xB80A4A82}, {0x5686A747, 0xA557576E}, {0xC82DAA3B, 0x2E397D3E},
+ {0x175BBD45, 0x799FC601}, {0x7DB76140, 0xC65524C4}, {0x9547D267, 0xA5C9B626}, {0x93A61FEC, 0x7A664713},
+ {0xC927E456, 0x898E0443}, {0xDCAEA492, 0x96A6B30A}, {0x5E4A59E8, 0xC6347E79}, {0xBE54AD9F, 0x01E5F4B4},
+ {0x9A1CA438, 0xE07190F8}, {0x9C12E1A3, 0xDBD715CF}, {0x4C82F8D3, 0x2E34488C}, {0x3B0C3C1E, 0xB845C0F5},
+ {0xB17C3600, 0x727F9441}, {0x5D737903, 0x0BB6C94F}, {0xF8D2D761, 0x9A08D292}, {0x56B9BB0C, 0xF95F3B0A},
+ {0xB47E7874, 0xAA460BA9}, {0x4047E538, 0xE6B77621}, {0xC01FBA99, 0x4F967E63}, {0x1486861C, 0x2B37298E},
+ {0x2324E38A, 0xC01B813E}, {0x60872511, 0xFA6C2C79}, {0xE9DEBFFA, 0x8C46BC06}, {0xD472B814, 0x6E5B3186},
+ {0x3F278164, 0x072433C3}, {0x11940FDD, 0x71DACFB6}, {0x25FD4395, 0xA7BF133F}, {0x3E645F5A, 0xFA5AE421},
+ {0xC2BE4D1D, 0x15C40E7D}, {0xA6373850, 0x57C39318}, {0x966D89B4, 0xADC2AE7C}, {0x21FBE303, 0xB54C5817},
+ {0xE59CDD51, 0x034E52FF}, {0x3230B334, 0x083E0E2A}, {0x35E0F7F1, 0xC7386A03}, {0x89F31DAE, 0x1F6F1ECD},
+ {0xD9377D1A, 0x2E59BF98}, {0x0EC9FFEF, 0x3CCE1A42}, {0x2BA6371C, 0x80234F84}, {0x0CE12FF4, 0xBD56B92D},
+ {0xD6160A0B, 0x979D312A}, {0xD66CDF1D, 0x8E6E212E}, {0xBA82B461, 0x08268E10}, {0xCD5360C5, 0x4BDA8621},
+ {0xEA8B28D3, 0x3A26A049}, {0x685E6900, 0x9448887A}, {0xAAFB2530, 0x353DBA5D}, {0x3837C737, 0x80EC3D82},
+ {0x2A9A3B8A, 0xF2473C73}, {0x74130573, 0x65109265}, {0x0149E9AA, 0xC1C5C928}, {0xE5FB64B6, 0x829C7379},
+ {0xCA24958A, 0xD85A8ABC}, {0xED5EB367, 0xEA35AB0C}, {0x744BD8F4, 0x80ABE4AB}, {0x79DC2BB3, 0x28C37B43},
+ {0x61D4025E, 0xE5391244}, {0xE1EB5C74, 0xBE61B854}, {0xEE0ED97A, 0x0EB6C559}, {0xFBD61B52, 0xC943F9B8},
+ {0x54D8E34A, 0x57766A16}, {0xE6273ED7, 0xAADBEB4B}, {0x9AD30508, 0x5FCBED8B}, {0x9F742D19, 0xE25EA98E},
+ {0xE96C2746, 0x2F7D4E07}, {0x69E6CEDE, 0x2C35D0BC}, {0x4D2B4C03, 0xBFD814D1}, {0x2E354E45, 0x1326F3B6},
+ {0x405E8A6C, 0xBB13099E}, {0x17B1E9D8, 0x18175888}, {0x3B195838, 0x1ACBE37A}, {0xC7F6A18D, 0xE7A6A169},
+ {0xEA92EA62, 0x32F76898}, {0x6CC0DE3D, 0x62AFF2D3}, {0x7E7C87FA, 0xB6BD355D}, {0xF95BFCC4, 0x98E0F733},
+ {0x9B471FDA, 0xCDB135ED}, {0x6CB63AB3, 0x19D73A9E}, {0xD3AF9CDB, 0xFC37D33C}, {0x52D4D3BF, 0xABBE1628},
+ {0x9EA8DDAF, 0xA6839AA6}, {0x739BB648, 0xE7509A9C}, {0xCCA1CAAF, 0x9ECF7717}, {0xE3CB4522, 0xFE928BB1},
+ {0xFECBCC64, 0x524B4721}, {0x629257E7, 0x29E63282}, {0xF2027981, 0x8D2358C2}, {0x5464F2B2, 0x36454A5B},
+ {0xDE4956A3, 0xD546771A}, {0xF5AF8BCF, 0x31C57CCF}, {0xD84E36AB, 0x8F4A0029}, {0x2E47260D, 0x1FD18A54},
+ {0x28D33F12, 0x9D8E1FCA}, {0x321D7D4C, 0x30B85DCE}, {0x3894F304, 0xF6CDF229}, {0x3285A8A3, 0x18190CD8},
+ {0x3844AD1F, 0x4A875D51}, {0x6E8600F9, 0x6AEECE8E}, {0x8276E3E3, 0x01CA2DE3}, {0x42439F14, 0x6CAE9EEE},
+ {0xC7286B19, 0xFA7A6114}, {0x53EAB4A8, 0xF6AF2830}, {0xB8A0DA84, 0xB1A2C120}, {0xAFE4723D, 0x5DBAD33E},
+ {0x36259BF6, 0x6CF21DEB}, {0x5629BBD9, 0x515C0BE3}, {0x78890D49, 0x43B829F4}, {0x2E859CF1, 0xF452348E},
+ {0x4B3C5D8B, 0xD5D44607}, {0x4035CDA6, 0x4B4A9121}, {0x413BC7E3, 0xD9132378}, {0x127494E7, 0x605EDD52},
+ {0xF31184A3, 0x43629366}, {0x55502C78, 0xA80899AF}, {0x5B47CB51, 0x32177DB8}, {0x7E555760, 0xB3F21DD8},
+ {0x1ECF25B3, 0x688F2168}, {0x8F76EF30, 0x31326840}, {0xAF93C02F, 0xC760CB29}, {0xB0DA639F, 0xFE6671B8},
+ {0xCC77123D, 0x903BD26D}, {0xCC77DC12, 0x9C5564A2}, {0xE409909D, 0x4D049840}, {0x41AA1EA6, 0x58FC20D3},
+ {0x33BEDC30, 0x52B3A0FE}, {0x8D8874C8, 0xAF0A94A0}, {0x08894712, 0xCFAF66E7}, {0x30A2ECCC, 0x078F15D3},
+ {0x32BC30CF, 0x9A4A2AD5}, {0xE6FF55C0, 0xEB9E5A47}, {0xA48116E0, 0xCCF19DD2}, {0xE81E1247, 0x47EE1DB0},
+ {0x68D9736C, 0xEADD7A0E}, {0x7CE1702C, 0xCB707FEF}, {0x614075EC, 0xECFEF5C8}, {0x52197F51, 0xF40B893D},
+ {0x89A5FDD9, 0x04DF8085}, {0xDA0FE5B0, 0xD908F9FA}, {0xE8CFA785, 0x76E87D04}, {0xE074D181, 0x1BB0E9BD},
+ {0x11A35C28, 0x7658BD89}, {0xF0683169, 0x6BE81D8C}, {0xA4DBCFE6, 0x5D2AEA31}, {0xE51CA5DD, 0x478BCAE1},
+ {0x5FDEACC5, 0x60B6C390}, {0x63667457, 0x84CCCABB}, {0x02A7DB87, 0x851E1F6D}, {0x0419398B, 0x95CC1678},
+ {0x878620D9, 0x2ED9DDA2}, {0xA4677580, 0xFBFDD4E5}, {0x49B80150, 0x0231FFDB}, {0xC31B9141, 0x5E1DC89E},
+ {0x9269396F, 0x8F7C31D2}, {0x90B74E05, 0x501FD7AC}, {0x7A88BCAC, 0xB136438C}, {0x75CB5EFC, 0xF7868AE4},
+ {0x316935D9, 0x30335811}, {0xEB4CBF3F, 0x057D4878}, {0xCAA27B7D, 0xED0BD079}, {0x8EBA345F, 0x5B6F6E58},
+ {0x5222F666, 0x7ACD2947}, {0x7ED28764, 0x08C84791}, {0x94D74D63, 0xF5DFB61D}, {0x0790704F, 0xB8526C55},
+ {0x39F59997, 0x26E0F7D9}, {0x48DD3D1E, 0x86D95C43}, {0x86849D50, 0x76C7C810}, {0x66A09732, 0xED0462CD},
+ {0x07DE3F23, 0x4D610DF1}, {0x33099E12, 0x2655BEE7}, {0x67549881, 0x61EAAE9F}, {0x9CDA4099, 0x9B321B94},
+ {0x7D67214B, 0xD6C07619}, {0xAFEC1AAB, 0xD426BEEB}, {0x1A0A6FEE, 0xFE3F5B9A}, {0x0938C3BE, 0x2C6B3C54},
+ {0xC4087505, 0x21B800FB}, {0x5D8F8049, 0x721CD166}, {0x111BDD60, 0x4A2A8D68}, {0x0EE00786, 0x1EFACB51},
+ {0xE9D36723, 0xFFE73EBB}, {0x3958B91E, 0x29B8B2A2}, {0x57058B97, 0x8EB857DF}, {0x9D82E3E1, 0xA9EEEDCC},
+ {0xBB3111F9, 0x2B328493}, {0x570AE5B6, 0x7C5A6B91}, {0xE2B7C9FE, 0x38FE9AAC}, {0xBDAC9A64, 0x0D7C6CC7},
+ {0x0B77C9EF, 0xD2075E5F}, {0xF5CEA434, 0xF4F679FE}, {0x2CAAF6F3, 0xAB86EB07}, {0x6423CC5E, 0x8B630121},
+ {0xAFA30F8B, 0x2C578AEA}, {0x1FA654FC, 0xDC84AED5}, {0x2519781E, 0x804714CC}, {0xA41915CE, 0x37019794},
+ {0x91B805FE, 0x040E0D11}, {0x500A0BA2, 0xD74771DB}, {0x529348DC, 0x7688733F}, {0x66844A5B, 0x5046CCFC},
+ {0xD607A266, 0x8EAAF301}, {0x3CE8C3B1, 0x20D67144}, {0x814F0C2F, 0x1F9BF781}, {0x28D551A4, 0xB18EA1C8},
+ {0x2D287ACD, 0x9004D8E9}, {0xE119C938, 0xB56470DD}, {0x49D2EAB1, 0x9A32499F}, {0xBF3E663C, 0x3566290B},
+ {0x6BCD47B6, 0xB78B81FE}, {0x111E29CF, 0x8E33B10C}, {0xD1506FBC, 0xAE1FF57C}, {0x7D4830B8, 0xE08D8E5A},
+ {0x07096D98, 0x6A58280A}, {0x8191D866, 0x45B764EC}, {0xF724F89D, 0x988CA7FB}, {0xD184DC66, 0xE0E16387},
+ {0x077BB2BC, 0x2B1200EE}, {0x3771DBAD, 0x2142437B}, {0x7FC02A93, 0xEEAA2AF9}, {0x31010598, 0xA23339F1},
+ {0x8E82A548, 0x0EF8FA94}, {0x4E4E35B0, 0x8110A083}, {0xF39C37E9, 0x060F102B}, {0x13A63742, 0xE5868F47},
+ {0xD4E422F2, 0x7CD42B12}, {0x98F345D2, 0x0F7E6FF4}, {0x4CED0DCC, 0xA7822C15}, {0x5111AA46, 0xD57DA1B7},
+ {0x689AA17E, 0x25244D52}, {0x575E84ED, 0xF666559A}, {0x649993AA, 0xE16E163B}, {0x4FF34A4C, 0xF109D1C7},
+ {0xC4FB3F87, 0x2FD25F7F}, {0xBCA859A5, 0x5387DB3A}, {0x4B1D7C42, 0xA152187F}, {0xEACF3B00, 0xA9EF3A33},
+ {0x449EBA3D, 0x959D5552}, {0x9F575B06, 0x4F2A4E8D}, {0x9974E206, 0x0BAC46E3}, {0x573485A1, 0x5A77CC7C},
+ {0x2929C133, 0x83502254}, {0x4046C785, 0x78664EFA}, {0xD651B287, 0xD25D5687}, {0xF210F86A, 0x7CF3F1B1},
+ {0x40FF86CB, 0x244D653F}, {0x28BCE1CF, 0xFB7DD97E}, {0x65776CD5, 0x92BC5EC4}, {0xC23EB8D7, 0xADC5E48A},
+ {0x56CC8DA7, 0x60EAC7E4}, {0x502ADED6, 0x93D0F31F}, {0x62BB609E, 0xF0147ED2}, {0x62B848A2, 0xBCF60DE6},
+ {0x2E58A173, 0xF9374FC8}, {0x58D00490, 0x595907FC}, {0x3DD1AC5E, 0x268A4796}, {0x203BA5F7, 0x02746B79},
+ {0xCB1EEED8, 0x6EF076A1}, {0xEDDC7A7B, 0x41599B2C}, {0x10A0FD77, 0x76694638}, {0x13515AAD, 0xBB5592A8},
+ {0xF032BEE3, 0x886E5EEE}, {0x4446F2A3, 0xDA683502}, {0x7BBF62E0, 0x6101ED4E}, {0x8240D926, 0x7D6A0331},
+ {0x0E6B6199, 0x70A7A77F}, {0xE988DAED, 0x028469FC}, {0xCF70EC0E, 0xFACE49A6}, {0xAF35D073, 0x0842832A},
+ {0xBAAA18A6, 0x55843C6F}, {0xD13F58B6, 0x3EDC5865}, {0xF0F1A517, 0x5F2E272D}, {0xA6E53D5B, 0x1C749369},
+ {0xE03A4581, 0xF5CFE130}, {0x0E5B2D97, 0x39F47A3A}, {0x91EBF257, 0x2FF556F9}, {0xE8FEB930, 0x1A1EA806},
+ {0xD287C8FA, 0x40609F92}, {0x5B5BEA09, 0x05B6B7DA}, {0x69B3F3F9, 0x68DB2334}, {0x3DBD5C82, 0x3521BB51},
+ {0xB9E07EFC, 0x3B07081C}, {0xD03084AC, 0xBAB53828}, {0x3D63D276, 0xF08E054F}, {0x0AD30644, 0xE3D71EAB},
+ {0x2FA39DB1, 0xF1AAABAE}, {0xFBF149B3, 0xFED03D0C}, {0x623D5997, 0xEA000181}, {0x16DC12F6, 0xDEF43CB5},
+ {0xCF22B775, 0x193EDE57}, {0x65B40AC1, 0xF7B19E95}, {0xB8BE3A36, 0xBA306B9A}, {0xB70CDA3B, 0xF4F5B173},
+ {0x6EA0F9AB, 0x33B04B81}, {0x508231A6, 0x380C507D}, {0x82B8EF37, 0x4A510649}, {0x1AE9D786, 0xC28120B9},
+ {0x07F69061, 0xE1787F10}, {0xF96EDB0D, 0xFEEE87E5}, {0x098CCEFC, 0xC1841EDC}, {0x26E06647, 0xB654D215},
+ {0xB2321F3D, 0xF34BC2CD}, {0x6EA33E67, 0xFDB24AAA}, {0x7CC5E898, 0x8F7260CC}, {0x6014192A, 0xFB134365},
+ {0xC3D69DB8, 0x2D34A4EC}, {0xD63E6472, 0xBD1D8E3B}, {0x38F9E497, 0x782EDC80}, {0x88F12413, 0x8D10A5EF},
+ {0xF6509335, 0x19B528D9}, {0x0D89258C, 0x42E0BD4E}, {0x0B3F5A38, 0x359F834F}, {0xB931EDCF, 0x497EDFE0},
+ {0xC982FCBC, 0x1AF8DB61}, {0x47CBB4F2, 0x067CD20A}, {0x495CD49C, 0x39B2501B}, {0xFBBFCF7F, 0xEE7A3B17},
+ {0x0807097E, 0xE1D56AA3}, {0xC84A6540, 0x2FE2E888}, {0x7B4F2122, 0xDE3BF74E}, {0xDE2A523C, 0xEC3E95A8},
+ {0x5E09C837, 0x9F6E79CA}, {0xDF4F74B1, 0x959D58AF}, {0x24CC0889, 0xA3E68E45}, {0x1BA93409, 0xAEB03EBD},
+ {0xFC6EED88, 0x4A636C55}, {0x738B3717, 0xFA78BB52}, {0x97F3407D, 0xD1C1B7D6}, {0x23419192, 0x05D8F4D1},
+ {0x296C58AA, 0x99108184}, {0xAE73E15B, 0x85582142}, {0x6CB2FD99, 0x9BF4EEBB}, {0x789C541A, 0x01EC3467},
+ {0xAF9FA215, 0x8C650CE2}, {0x267E9DCE, 0x9631ABA7}, {0xD4CF73A6, 0x5D86AB31}, {0xD73BE114, 0x56653C27},
+ {0xF9F98471, 0x67F81D16}, {0x80859679, 0x0FF2A834}, {0x4887DE22, 0xA3C82579}, {0x76553F1C, 0xC646F52D},
+ {0x6CE72066, 0xE336551D}, {0xBF1DC7FF, 0xCB769ECB}, {0x1BD2549D, 0x6C2C4CAD}, {0x8C49DE09, 0xFC354201},
+ {0xD9050754, 0x61359420}, {0xA346C7F2, 0xE16FFEF3}, {0x9B0AA3F2, 0x9EBEE894}, {0xCFB22D20, 0x8F3F279F},
+ {0xD41C79AC, 0x8CA23965}, {0x38A6E4EE, 0x50BECA2A}, {0x6E5DC746, 0xD846A9A8}, {0x404AE669, 0x9BFBB69D},
+ {0xCEB34F3D, 0x0A9A7AEB}, {0xACB65FDC, 0xDDC3FE29}, {0xF878E1FA, 0x18DA5CD8}, {0x3119870D, 0x7E1D7F09},
+ {0x329F7BB8, 0x3E11ECE8}, {0x279021E8, 0xF3353DC1}, {0xB4733FED, 0xB89240EE}, {0x48498A78, 0x878C4BC7},
+ {0xC5C2474A, 0x4B045211}, {0x1F03A47A, 0x6B722DEE}, {0x23E8F822, 0x219E541B}, {0x55148EE0, 0x86373027},
+ {0xDD364446, 0x442C240D}, {0x3CD527D8, 0x4A6204F0}, {0x0FE5DE84, 0x7FAB2FCE}, {0x7955FA31, 0x991434AA},
+ {0x631D3705, 0xFE9C694F}, {0xBD33BD2E, 0x8EBDD6DC}, {0x365F5964, 0x58D2AA3E}, {0xB399F591, 0xFBDBAD8F},
+ {0x7B9407C7, 0x5D597CD2}, {0x70C3DC62, 0xEEB3241F}, {0xB1885E38, 0x1DA88934}, {0x90E99FE0, 0xBF54C69E},
+ {0xF8BC2E2F, 0xD8A7C219}, {0xB2AC2DBB, 0x94BFD616}, {0xFAAE7073, 0x56595536}, {0xF1EF776F, 0xF197602D},
+ {0x790B364D, 0x23DF50DA}, {0xB40C319D, 0xB4675552}, {0x207F0862, 0x2D2756EA}, {0x0FAE8FA9, 0x5E468039},
+ {0x84F47112, 0x26936CA7}, {0x4C9A2695, 0x24A1DE36}, {0x1F5E3089, 0xB4787531}, {0x5FED4941, 0x93282713},
+ {0x8180D380, 0x35697306}, {0x3121B647, 0xBB5464DF}, {0xCC0E3348, 0x8BA98438}, {0x28985686, 0xDDA69E79},
+ {0xDEF3A797, 0xE20A90A1}, {0x573AD18F, 0x8B901C26}, {0x71182B33, 0xD6431BE3}, {0x5BD0A149, 0x6EC16F15},
+ {0x9608E608, 0xC858D4BD}, {0x070B03C5, 0xEAB7484F}, {0x08E1B06A, 0xE9EA71AD}, {0xE763AA69, 0xE51553D9},
+ {0x5D54A79A, 0x6E74DE33}, {0xD85C00C7, 0xF6D72047}, {0xFF4E67A1, 0x94EB0615}, {0xCB9927DA, 0xF95293A4},
+ {0xB67A4419, 0xC8A15A7C}, {0xB36F660E, 0xD45D9EE9}, {0x46CA3CC0, 0x9F198B96}, {0xC46C915A, 0xEF456467},
+ {0x1D7647D2, 0x8B97C968}, {0xAC42E446, 0xC39E3E6C}, {0x38DBD397, 0x62664137}, {0xB8CE98D7, 0xF11438B0},
+ {0x36821D5F, 0x541563F3}, {0x50D8D375, 0x97E3174C}, {0x7E5C0659, 0x02A29664}, {0x200E7412, 0x3CDEF068},
+ {0xE7A17654, 0x123D7FF6}, {0xB699F6F7, 0x17A86976}, {0x656ECBD8, 0xC662F3B9}, {0x3FC1756C, 0x25B7840F},
+ {0x9FADD648, 0xA0C8CA32}, {0xABE4CE10, 0xB699ED33}, {0x863432BC, 0x97EAF1AA}, {0x57A19958, 0x400EB52E},
+ {0x14DCED39, 0x6AAC0AD5}, {0x3E6BA2CD, 0xD2117D98}, {0xC947A494, 0x83C31541}, {0x8B10C607, 0xDB1A0A83},
+ {0x5B95BEC7, 0x965EB7D5}, {0xCC328915, 0xC6ACAAC6}, {0x263D09BD, 0x9EEDC0AA}, {0xF391988B, 0xB571A5F8},
+ {0xB8328B4E, 0x05B6B9EC}, {0xB37A21FE, 0x6EF2EB03}, {0x13039F57, 0x66C62E56}, {0xD4915A02, 0x181F3960},
+ {0x4B074BB1, 0x9A4BB0A2}, {0x4E84A398, 0x17925920}, {0x80B2E1F2, 0xA042292F}, {0x73C918D6, 0x25359563},
+ {0x2D398698, 0x6311E336}, {0x45894332, 0x4B8F5AF3}, {0xA2E0297A, 0xE7FF34D6}, {0xD650FB09, 0xF0536245},
+ {0x2203CD91, 0xB259A88F}, {0x6ECABCEB, 0x3868249C}, {0x15AA0BDC, 0xCCB64742}, {0x4D0F5F70, 0xD0125C86},
+ {0x9BF93BA8, 0xB2AAB84A}, {0x634E9EE2, 0xD145C97E}, {0xE74E3E8D, 0x2B90D522}, {0xE77038B4, 0xC7736D22},
+ {0x377FA6FC, 0xE07759BD}, {0x36812FAC, 0xC3B0A425}, {0x26A64DDE, 0xC23E3F0F}, {0xA035D6A3, 0xE0E4F035},
+ {0x0DA2E5A9, 0x2FA596CF}, {0x3F3F7F35, 0x123E3FA2}, {0x31180155, 0x282C103D}, {0xABCA5DF8, 0x125F1A34},
+ {0xC6591198, 0x8E787F04}, {0xCFDDAB3C, 0x0A4731F8}, {0x4C0E45CC, 0x6A866BE9}, {0xE9DED5AC, 0x46CF0D54},
+ {0xCBE74B1A, 0xCB35BECD}, {0x2D0821D8, 0x0578D30C}, {0x00D45A70, 0x86EA5087}, {0xD4D00E94, 0x611BC816},
+ {0xBF2C124D, 0x014E4F84}, {0x20CB84B3, 0x028AFE74}, {0x136E69C2, 0xF5C45EFB}, {0x37EAC4B2, 0xBF8B91AA},
+ {0x270D0943, 0xB2BECDBD}, {0x8CBD1EAA, 0xCC52DD1A}, {0x76203903, 0x88BB4CD2}, {0xB47535C1, 0xEE5F2E3A},
+ {0xAAC2B3F4, 0xD49C2828}, {0x3335CEAB, 0x20923AE5}, {0x0B5B34D2, 0x4BA517B1}, {0x2FA9C405, 0xFB0AF0E7},
+ {0xDFF814E2, 0x945DBBD5}, {0x1140D2DE, 0xFF5A1C12}, {0x6DA75D7C, 0x48347FEF}, {0x71B9FBBA, 0x03521338},
+ {0xA3556FB4, 0x13AB9D67}, {0xA11E30FB, 0xF8D99E4E}, {0x109CD47F, 0xEC39F7AE}, {0xA64E121E, 0xB7FBC12C},
+ {0x4DC84EB0, 0xC87FB89B}, {0xB610C825, 0xFBCE5B36}, {0x89574994, 0x73A4CA41}, {0x4D327CCE, 0xE0B2EBAB},
+ {0x5393CD15, 0x41C9718C}, {0x96271627, 0x0DBBD3C1}, {0xF7D9BCC9, 0x80844070}, {0x3D00075A, 0x8F873A65},
+ {0xF786F558, 0xFB9947BF}, {0xCE28E25C, 0x0980AB6D}, {0x36D63AD1, 0x3DD7B3A8}, {0xD9B1546E, 0xD9CCBBB4},
+ {0xCFB7D8B0, 0x29572F49}, {0xFCC384FE, 0x2B6ACBE1}, {0xF1E507AF, 0xF9735529}, {0xEA16E6BE, 0x7E8F6AF9},
+ {0x0B7DC245, 0xD34FB57F}, {0xC672949D, 0x6D6710D8}, {0xD36FB5DE, 0x10FEC65E}, {0x2EB5C180, 0xD9AD0536},
+ {0x976894AE, 0x95E7303A}, {0xD1C79999, 0x524E79E0}, {0x74CEB589, 0x1B882E6B}, {0xF7BD6863, 0x8583093C},
+ {0x2B3BD3CC, 0x23DE6BDE}, {0x3969FA3B, 0x4EDDEA1B}, {0x3DDAD189, 0x6AB7565E}, {0x11725AF1, 0xBE1A0808},
+ {0x6704AC8C, 0x8CAA5FD8}, {0xB5F90408, 0x39AD93EC}, {0x646699AB, 0x2151ACF7}, {0xE22D631A, 0xD6BFD83D},
+ {0x13C79F96, 0xE61D3532}, {0xCA6C53BF, 0x385C1B3B}, {0x804DB3DB, 0xB8B1365D}, {0x670AE467, 0xB43889CA},
+ {0x3699A1A7, 0x6E5056B4}, {0x62D68B10, 0xABC1DB29}, {0x2C835E68, 0xB88234EC}, {0x7AC99ECB, 0x9EF75BF8},
+ {0x12C7F149, 0xBBD82A9D}, {0x75209A95, 0x2B7CE40A}, {0x96E966AD, 0x3561AE31}, {0xEDBA70F6, 0xC11B34FA},
+ {0xEEA674D7, 0x1DCEC412}, {0x32147828, 0x14D15307}, {0x4D6374F0, 0xDF9142F4}, {0x4BD07D6D, 0x46726097},
+ {0x556EB97A, 0x3F659F64}, {0x7D12ED6C, 0x409AEB96}, {0x02B8BBC6, 0xB7FFF22D}, {0x56C80708, 0x2DC37135},
+ {0x5BADD024, 0xFE5B3CAD}, {0xDDC4F754, 0x68921708}, {0x8501E41C, 0xFCE1BAC6}, {0x5ED4ED8E, 0x355ACCCA},
+ {0xE2F0C365, 0x5751C909}, {0xF481A0BB, 0x1130A8CD}, {0x149BB288, 0x6C61411A}, {0x3E563A29, 0xE01D1DA9},
+ {0xD3E4E623, 0x8E99EC11}, {0x7FFF2AEE, 0x775CD03E}, {0x2DC3E594, 0x97ED1EBF}, {0xA32410A5, 0xC706C870},
+ {0x5BC5C478, 0xE863F493}, {0x1F9AAF85, 0x11451FAA}, {0x486ACF10, 0x73B52A04}, {0xA262ECEC, 0x4CA4486A},
+ {0xAAC52F73, 0xBFFA7DAB}, {0x2B3EAD9A, 0xA235EA05}, {0x02964A2F, 0x735B79E3}, {0x32382AE8, 0x7521DC76},
+ {0x2E0A8619, 0x5AC9CC3D}, {0x7EEED46E, 0xED3110BB}, {0x22B9325A, 0x966C71D0}, {0xC4B53E3D, 0xCDAD8BE5},
+ {0xCB77C721, 0xDA7D8A86}, {0x816DCDBA, 0xD69C7E17}, {0xBD39F644, 0xB04E704A}, {0x3EA67706, 0xB357C7DD},
+ {0x91630BE4, 0xC4E9B74D}, {0x44A3E549, 0xC49B68CF}, {0x7202628A, 0x3A1279E0}, {0x775F1B4F, 0x55669F6A},
+ {0x0BDAEF53, 0xD1CF8CC6}, {0x0A227200, 0xDB1508D1}, {0xFE155601, 0x4398331F}, {0x4A205C63, 0x84BC812A},
+ {0xCAC1E687, 0xABD72223}, {0x70C811E1, 0x0FD5A2D9}, {0x92165B7E, 0xA8DF36F9}, {0x091CD284, 0x09F96166},
+ {0x1F9084C3, 0x5A258506}, {0x149AD997, 0x799DC927}, {0xF1413597, 0x90F193BB}, {0xD03E799F, 0xA6B5A66C},
+ {0xDBDE0C76, 0xB6661CD6}, {0x3D3E654A, 0xCDE8367F}, {0x8938155B, 0xCA535C74}, {0x3085069B, 0x99C58299},
+ {0xCBDC06E9, 0x52224396}, {0xA325CD10, 0x6A3A4DE3}, {0x816E458D, 0x81F49072}, {0x5C02A137, 0x3E89E35E},
+ {0xFF428476, 0xCB097D11}, {0x01632BE9, 0xA71AEC4A}, {0xEA057973, 0xD5FA548D}, {0xC455F62D, 0x9695D3EC},
+ {0xAF30C710, 0x95F3BE6B}, {0xD73E804E, 0x005DB4FF}, {0x0A7DC448, 0x2D93289B}, {0x561877E5, 0x8B8663BE},
+ {0xB1451D54, 0x53741008}, {0x8FF6B9D4, 0x2FD95A41}, {0xD4E5C08C, 0xF0C7E028}, {0x0C15CD91, 0x6DE63C17},
+ {0x07BF20FD, 0xC65A23C8}, {0x2725BD94, 0xA9F4CF08}, {0xD9BA894B, 0x4EE903AA}, {0xD4EA4C9D, 0x96A85BEC},
+ {0x3C4FD512, 0xCB12120D}, {0xBED81A89, 0x751D2FBD}, {0x45940252, 0x2C4659A3}, {0xAB08BF3F, 0x92C33640},
+ {0x4098C7B9, 0x14DC4370}, {0x98D0C1FD, 0x014A3797}, {0xDEC1840D, 0xE0F6CE45}, {0x3248E11A, 0x19A72836},
+ {0x9F6B453E, 0x03383ADA}, {0x58D7064E, 0x23D15B45}, {0x6485E537, 0xE68AAC21}, {0xE27D62E2, 0x6D7E353B},
+ {0x3C0EDD02, 0xCC472780}, {0x56DC1C0C, 0x543982E3}, {0x05CA3CF0, 0xE65EE4AE}, {0x6CD1A71E, 0xB92B49F1},
+ {0x475DABBC, 0x80E10A0A}, {0x616082E5, 0x3268F0D3}, {0x64E92FA0, 0xCDA35A67}, {0xF86C0A01, 0x1B518A9F},
+ {0x4B9CFA8D, 0x1D07EE5C}, {0xD4408F37, 0x789E5662}, {0x7DA97F97, 0xD9F8625F}, {0xCF95D76D, 0x3CC0C67C},
+ {0x594E8048, 0x793F058C}, {0xA1E27620, 0xB9FF8AC1}, {0xFDA34D0C, 0x0AEF3A6A}, {0x53D67BED, 0xA18E5EF9},
+ {0x7B66DD6D, 0x37DD3205}, {0x30FD83C2, 0x5BBD49DA}, {0x5F95634A, 0xDC0BFA71}, {0xE94A457C, 0xC5F33DEC},
+ {0xBB4C4AF4, 0x5ACA12AE}, {0x0636E11B, 0x89825099}, {0xD8018ECB, 0x1835CCD5}, {0x09D80E3B, 0x9B6036B7},
+ {0x39653CA9, 0x3AE3E49C}, {0xBB1BEC80, 0x2806E112}, {0xA25FC846, 0x10E6E9F9}, {0x6D661166, 0x9E9E655F},
+ {0x774C56DD, 0x728D067B}, {0xC3189740, 0x9D23242F}, {0x7018EEE8, 0xCE28C384}, {0xE6175D14, 0xBD4D7B27},
+ {0x09A40DC7, 0xDEE78D81}, {0x5DD421B8, 0x1C27C415}, {0x1910DB30, 0x45C951E7}, {0x13BF7818, 0x7B03FF12},
+ {0xEE462BF5, 0x776D7C2F}, {0xB34543C4, 0x1A9CADD9}, {0x9A96315D, 0xD8CB9D28}, {0x1540C016, 0xD7225397},
+ {0x9E7A4F63, 0xFC8761F7}, {0x847B4636, 0xD7389622}, {0x51540A46, 0xAE690739}, {0x4C667516, 0x978C25CC},
+ {0x17C59A77, 0x8173D0CD}, {0x45511DE6, 0xE971BE4E}, {0x37D77087, 0x00778003}, {0xD7966E43, 0x4CD768AE},
+ {0xB748D88C, 0x49EE7852}, {0x73D24E58, 0x16378BBF}, {0xC8DD2718, 0xA196A010}, {0x0D9D48E9, 0x6B474558},
+ {0xC4A749D9, 0x41241C70}, {0x5FDBE0FE, 0x3E40BBC0}, {0x51FDF97C, 0xFDE79091}, {0x99F4CACA, 0x20E7D89C},
+ {0x25F58F07, 0x784FE738}, {0x1E362886, 0x7E045AF5}, {0x0508FF19, 0x8EEC61D9}, {0xA5A1B5BF, 0xFD4E22F9},
+ {0x4BB6BD77, 0xC2207608}, {0xE5E14F87, 0x13291649}, {0xD802E4C7, 0x913B6DEB}, {0x3A3BCA56, 0xE687F2E3},
+ {0xDF04513D, 0xB0814954}, {0x66655400, 0xE782B8C9}, {0x881D94BA, 0x9338310C}, {0xFB305330, 0x21F18275},
+ {0xBCC41F28, 0xF7A32459}, {0x9A0090DD, 0x0EA24E65}, {0x5CFD270C, 0xE17E89DB}, {0x7D15B38F, 0x636527B0},
+ {0xE013DE1F, 0x1BDBAD2F}, {0x3E6ABDAF, 0xAFB3C6BE}, {0xE99AF35A, 0xF58E128C}, {0xC0512E72, 0x9216614B},
+ {0x9FBF31AD, 0x78F3B665}, {0x1B128A24, 0x495F32C0}, {0xD2E908C6, 0x0AF9135A}, {0x738C6ACC, 0x998DEB38},
+ {0x9C72E5B3, 0x4F1114FB}, {0x08F2F53F, 0x6B2BBFFF}, {0x7C79CDF2, 0xCC396CBE}, {0x7E4579E2, 0xA941257E},
+ {0x4B3402FD, 0x0BA3C38D}, {0x6BCD7DB1, 0xFF9B64D1}, {0x620880C5, 0xC151FDE8}, {0x8ECE0269, 0x10A88A01},
+ {0xD40B2863, 0x74776D4E}, {0x86682029, 0xD7D217DB}, {0xAF241F1B, 0xD70E6910}, {0x2CE454EE, 0x18926D54},
+ {0x0DD1508C, 0x246F0DB0}, {0xC62D6E5A, 0xAD919DAE}, {0xB2511DA7, 0xC9824927}, {0xAC372BF9, 0xF3522231},
+ {0x38402F99, 0xA3EF9F34}, {0x344C0FC0, 0x26DE381D}, {0xC1A1938A, 0x71CC94D6}, {0xCECE647A, 0x454E3C48},
+ {0xAF24030D, 0x6D06B879}, {0xAF85E85A, 0x910597EE}, {0x3195A3E0, 0xCEF40431}, {0x2E4CFB6E, 0xA09FE0BC},
+ {0x23DB06AD, 0x46EEEC5B}, {0xC14FC54A, 0xDCC47619}, {0x043AA1F4, 0x5005E3B2}, {0x4D598058, 0x32DF12C7},
+ {0xE36AB10C, 0x091E4528}, {0x95F306EA, 0x97E9C868}, {0xC4BF1703, 0x11F55305}, {0x8F863890, 0x2DB5BC90},
+ {0x40925732, 0xAD648094}, {0xB51EC2AC, 0x10313A29}, {0x54B0041A, 0x24242860}, {0xB676694C, 0x9C8343B1},
+ {0xB9F39C3E, 0x80DD1011}, {0x58CC5C6C, 0x2C1A957F}, {0x86BAFC53, 0x7CBDD1FC}, {0x4BB6357A, 0xAF0A8A3C},
+ {0x6CC55040, 0x406E5F7C}, {0xE8AE1CF9, 0x081D3F2B}, {0x9D0E93CD, 0xBB9A19AF}, {0x818FD260, 0x57613CD2},
+ {0x92CA7DD2, 0x320FA2F4}, {0xCD6EC4D7, 0x092BD51B}, {0xB4D32445, 0x0379353E}, {0x08F9EE2D, 0x733B483D},
+ {0x015E9802, 0x52512C55}, {0x11E5AE26, 0xA00F0A10}, {0x06CF6584, 0xF599B1EB}, {0xC8E6F3EE, 0x19493235},
+ {0x8410C540, 0xF3CA7963}, {0x87404E98, 0x0F8CBB15}, {0xB6E7939B, 0x368B2F3B}, {0xD9EAC389, 0x8C603AED},
+ {0xD887EE51, 0x818D9ABF}, {0x870309E8, 0x1865C765}, {0x77AFCD04, 0x49961C6E}, {0x917FF74B, 0x5CBB737E},
+ {0xA0FE7424, 0x4A749977}, {0x7B7CFE62, 0xBBEF8527}, {0x073EA15B, 0x9E850FD1}, {0xA70CC448, 0x6F89251A},
+ {0x63A89B1C, 0xBA9469FD}, {0x52C32056, 0x00F42096}, {0x3A228D23, 0x126A7AF6}, {0xD09A37B9, 0xB1ADE9F1},
+ {0x81BFE121, 0xA903C9AA}, {0x46954F18, 0x3B216B37}, {0xDADD87F7, 0x02394E9B}, {0xC1F6D7BD, 0x2769FC5E},
+ {0x9D8FDB0A, 0x5C0BF16A}, {0x4A6F69E8, 0x76857059}, {0xFBBCB9ED, 0xDA360501}, {0xCBB21BC0, 0x7910FC65},
+ {0x4F54475B, 0xCB8A45EB}, {0xF209278A, 0xC2B03A21}, {0x9760D388, 0x96D7435F}, {0x52D2D78A, 0x980AEA59},
+ {0x3576B886, 0xDAE50F2C}, {0x26258B9E, 0x894A1C21}, {0xD28EC0D8, 0x43DB10BA}, {0x3FB40D32, 0x0BC5E903},
+ {0xF517906B, 0x88C85708}, {0xC90EC52A, 0x5CC27E46}, {0xC3DDA761, 0xD0019401}, {0xCD116B95, 0x8B34CEF8},
+ {0x4E087BC4, 0xFB8D93CE}, {0xA1497033, 0x7489F06D}, {0x3CD9CF0F, 0xBF05EF85}, {0xF5B5B680, 0xCEF7331E},
+ {0xEC60480D, 0x0C1E894B}, {0x7203B5DC, 0x477E5345}, {0xBC7CDDB2, 0x9ED79C81}, {0xE5B2E7B4, 0x6B738497},
+ {0x5E856E6B, 0xCCDEEB56}, {0xE9921232, 0xBC24789B}, {0x83FCD7C2, 0xCC17EB01}, {0xA501DD2B, 0xB80EEBC9},
+ {0x4B54E127, 0x31839B65}, {0x9E77D599, 0x90A6DE6C}, {0x54DC2F27, 0x8EAA076D}, {0xA0E15826, 0x23105E6B},
+ {0x9F238ADA, 0x27F09014}, {0xF6FBF4B2, 0xE26B34E4}, {0x82D28C1C, 0x2F5994F4}, {0x1FFD8EAF, 0x956888B4},
+ {0xD2D11AE0, 0xF70457AE}, {0x774B7A53, 0x9C4CF0E3}, {0x3A36553E, 0xCDFCBC10}, {0xD2699F5C, 0xB5FA184E},
+ {0xAFCFC6AA, 0x7F0AC56B}, {0x26680D18, 0xFF0CA623}, {0x0B44771E, 0x023156E2}, {0x5780369D, 0x3BEAB8C7},
+ {0x5CCE0159, 0x4CF34133}, {0x4441B1F9, 0xE2FB9F76}, {0xD16F4F86, 0x68482F49}, {0xAC64EDC2, 0xAE0B52FE},
+ {0xC6D12E6E, 0x13F081C8}, {0xD4B7E4B6, 0xCA92BC25}, {0x8118CD88, 0xFE381F32}, {0x1EB9A41A, 0xD19C48BD},
+ {0x7E6ADD69, 0x4E7D180D}, {0x5BC314E4, 0x5056C1BF}, {0x28A3CC8C, 0xDC89EF03}, {0x12BFA707, 0x0A5B333B},
+ {0xC31E5BD3, 0x6D94E43F}, {0x38A6964A, 0x1CF48424}, {0x4109DCFF, 0x26A15FAF}, {0xCC919E4D, 0x0694A9BF},
+ {0x64569AEC, 0x03B9CF42}, {0x68C01C86, 0x06085B18}, {0x0F3BFE47, 0xDF596D30}, {0x853CC9DD, 0xAC77F788},
+ {0x06411460, 0x5EA983FA}, {0x2436FB8A, 0x75C6F496}, {0x9E654918, 0xC71DD888}, {0xCB8DA603, 0xC5B5AAB9},
+ {0xB4DF2AD0, 0xA1F74E06}, {0xC41BEEAF, 0xCB4BF26E}, {0x25E0BC7C, 0xDF867471}, {0x88C2CD03, 0x43CA7640},
+ {0xCF090788, 0x65511CEB}, {0x9EBA0CF2, 0xA1EA3663}, {0x1D20F61B, 0xEE0E75EB}, {0xDF3CBCAD, 0xFDCB038D},
+ {0x27F110AA, 0x17C17574}, {0x63B7C276, 0x190B67F6}, {0xCBA734CB, 0x85FFF27A}, {0xEC4D24D3, 0x3BAA66DF},
+ {0xC3A6D85F, 0x7A3BF3B1}, {0xB2EBE8FB, 0xB1DDC42C}, {0x6EE24ABA, 0x8B084204}, {0x4C0B98AF, 0xA90B972F},
+ {0x75605BB4, 0xD00154A3}, {0xC9E99FA2, 0x8ED0F61E}, {0x279689E0, 0x1E6B58DD}, {0x46918B55, 0x251831D6},
+ {0x12A08DF3, 0x8B23419A}, {0x4D54A4F4, 0x0C4260AE}, {0xFD0297F3, 0x947D3861}, {0xE5262D8B, 0xC0336656},
+ {0x5EE8A59F, 0x3371E2E4}, {0x5CA7EF09, 0x6300BD8C}, {0x962C47D2, 0x11164354}, {0x23B3CB53, 0x976A66FF},
+ {0x829A3E0C, 0xAD2132A3}, {0x80BA7705, 0xCF2FC254}, {0x9FBDA86A, 0xEEBD3E1D}, {0xE4E2C2D2, 0xDF805A3D},
+ {0x5D6E2B08, 0xD542AEA8}, {0x98F6A4FE, 0x9115CDBD}, {0x17B90734, 0x17744304}, {0x55B500D3, 0xBE0193FD},
+ {0x89ED84B6, 0xA1CDAD07}, {0xE84C2983, 0x8DDEDB48}, {0x05C67D32, 0xBD132BFF}, {0xE28D393F, 0xCD556AE5},
+ {0x1258E72E, 0x2F7772B2}, {0xE1953563, 0x6A64A411}, {0x0D397856, 0xA43ABEA7}, {0x00AA47AC, 0xD7B2A103},
+ {0x9FCD1B82, 0xD1812CFE}, {0xBF5FA5F1, 0x6CB1459A}, {0xA6ACF6C1, 0x42129B65}, {0x94D4FA4C, 0x13C8DE3D},
+ {0x866F33BE, 0xFC2A60C5}, {0x30C52897, 0xAD0C91BF}, {0x0045F1C7, 0x6C67E48C}, {0xFD5BDF10, 0xE2100233},
+ {0xF7D1C9B5, 0x091EBA7A}, {0x2CE56726, 0x3B699C96}, {0x5BF0F92E, 0x088BAE50}, {0x94ED6D6B, 0xF7B6F871},
+ {0x42CE7DFD, 0x2A9F2F4E}, {0x482F439B, 0xC2C651FC}, {0xD2229A42, 0x7B9E9D09}, {0x93BFE2D5, 0x7714909D},
+ {0x03F7787A, 0x0695CFB8}, {0xFEE5ACD6, 0x87011DDF}, {0xC617941C, 0xB7921234}, {0xFE984F74, 0x770AE576},
+ {0x7C69B137, 0xEA9605AA}, {0x2A97445D, 0x2B484E3A}, {0xB60CCB22, 0x031B9C8E}, {0xDDB15C7A, 0x49349620},
+ {0x0D5C3C9A, 0x10F3AA1A}, {0xCCE7FB87, 0xE7A10027}, {0xA8F4493C, 0xFAAA527D}, {0xB6D654B3, 0xEE562941},
+ {0xC52F27B3, 0x5B92DCCB}, {0x18C59F92, 0xB16A867D}, {0x34BEB72C, 0x7C35F3C2}, {0x0631B444, 0xCCBA6E1F},
+ {0xDA27BA9C, 0x33660621}, {0x89A66831, 0x6349E428}, {0xE4EF865B, 0x9E9ADB81}, {0x6272B214, 0xFD937018},
+ {0xE1323C81, 0x67CD9490}, {0x97E63937, 0xC7D5F8E8}, {0xC5987E99, 0x2539AF56}, {0xB80E4EF4, 0x77C793BB},
+ {0xDB9BC2DE, 0x6C77205B}, {0x4443594E, 0xA7F8204C}, {0xB0A3E7FE, 0xF9EB428E}, {0xF69EE732, 0x33862503},
+ {0xB74DE8AF, 0xFF402BAB}, {0xCC218B6D, 0x4F166632}, {0xA96664D1, 0x33D5DF41}, {0xFD50C6D7, 0x9842873F},
+ {0x33D56886, 0xFA022496}, {0x84207F9C, 0x770D870B}, {0xA3DD50A4, 0xD2616DC1}, {0x89A9F51B, 0x0D9F7C10},
+ {0x7F65EC8A, 0xF526647F}, {0xC55DA36B, 0x0345F181}, {0x0099872A, 0x1DCD7889}, {0x3B9C3802, 0x55CD1453},
+ {0xD617E17F, 0x608F6BF7}, {0x763AEFB1, 0x85DEA661}, {0xDE0017FB, 0xAEF7F342}, {0xF75A7CC5, 0xD7BD2BBA},
+ {0x8F0C963C, 0x51AD08B6}, {0x2C65ECBD, 0x832301EE}, {0x3B98F3A5, 0xDBEE9D5E}, {0xF1B7AD01, 0x42662DC0},
+ {0xADF5764D, 0x870A1FA4}, {0xDAE4DC48, 0xB8BD31FB}, {0xC6661E49, 0xDA4A4F90}, {0x927A3EF7, 0x5D28ED07},
+ {0x5E30025C, 0x2D28A6C6}, {0x3F22CBC8, 0xBB361D85}, {0x8CED9A76, 0x7B23854C}, {0x7374E0D4, 0x1AF74FF1},
+ {0xE72D2336, 0x4E15569B}, {0x046AE6DB, 0x8443FC74}, {0x48207DB3, 0x3625A818}, {0x9972CA7F, 0x48CBC88F},
+ {0x0E10A145, 0xA6BFE2F0}, {0x72230544, 0xD4FB6B83}, {0x0556729D, 0x273FA950}, {0xE0B9D3E4, 0x105D91D3},
+ {0xF151362A, 0x879BDBCC}, {0xFF2E1910, 0x6CE6D47A}, {0x7AF403CC, 0xDFA48B55}, {0xCF8A913B, 0xA3077A7D},
+ {0x51D5F65E, 0x569D47C8}, {0x32B68582, 0xB07050BF}, {0x99ECFD0C, 0xFF6C9AC7}, {0x6ADFB9C4, 0xA9FBA086},
+ {0xA4CC37DC, 0x4FC84517}, {0x928100A8, 0xA951EF55}, {0x6F1F2928, 0x2DB8BFB8}, {0x49D06597, 0x290AFEBC},
+ {0x9938FB16, 0xC311C462}, {0x69813B36, 0x3E3528AE}, {0x180A63FD, 0x7CF88D68}, {0x15034CED, 0x4A32D38C},
+ {0x48C46AA1, 0xDC436B51}, {0xA8961E48, 0xD75D4DE7}, {0x61F7773E, 0x247978E0}, {0x70ACCDCE, 0xBFEE015A},
+ {0x0DB7207E, 0x369EE417}, {0x18142CEC, 0xC54FDDFD}, {0x63F4017A, 0x638FD32A}, {0x14C2E601, 0x646B9BF0},
+ {0x48EF2C30, 0xF8F41B7F}, {0x09EFE101, 0xAED76A48}, {0x85DAB07B, 0xE1A0E6C2}, {0xDF7F58F3, 0xA92644F9},
+ {0x2E15858A, 0xA2F421A0}, {0xD656F1A9, 0xED4E56FB}, {0xFFDA1FE2, 0x6A441072}, {0x5FF2340B, 0xFF55AE36},
+ {0x2DBDE323, 0xB4FF0DDC}, {0xDC0F30B5, 0x3764BC37}, {0xA0D3C276, 0x8A77D64C}, {0x76425483, 0x8400E486},
+ {0x49292277, 0xDD94DA09}, {0x3725225D, 0x8A70065C}, {0x35A8CB38, 0xFC82D2AF}, {0x1C42E030, 0x62886122},
+ {0xD1B1A341, 0x40CBF052}, {0x3A6030D6, 0xE470E8AA}, {0xE7D84982, 0xADB42260}, {0x05DE77D7, 0x3183D214},
+ {0x9FDE06A8, 0xB922FC83}, {0xC15DE86A, 0x39155DFA}, {0x4D24FF57, 0xBE1CDFDA}, {0x74D427B4, 0x1FB59F1D},
+ {0xB339971F, 0x5CF5F7EC}, {0x72ECEEDB, 0x445CF382}, {0xC46500AC, 0x0F431B28}, {0xCC9E1540, 0x358C27DB},
+ {0x2A3E2D38, 0x12294379}, {0x3551FD02, 0x808A38BC}, {0xF8E69E30, 0x2102D6AC}, {0xCE49985F, 0xA5388E79},
+ {0xB6504190, 0x50C6734C}, {0xAC6B2EA5, 0x56CB88ED}, {0xD144CA75, 0x30BADE4F}, {0xD0C2D654, 0xFD7A8A5B},
+ {0x4A137898, 0x0BDABEBE}, {0xF9EEEF15, 0x72B701F5}, {0x080948BE, 0xFC0EDFB8}, {0x1B69967A, 0x8432E4E2},
+ {0xEA833CE5, 0x869C4FEC}, {0x8C0ECE7F, 0xD57CA234}, {0xB9C2F464, 0x27171C3B}, {0xA706E4D4, 0x8020F52A},
+ {0x459AFC27, 0x04F75C17}, {0xFAC2C301, 0x5E99B663}, {0xC0288A95, 0x61509F3C}, {0xEDBDE22E, 0x8A4C710B},
+ {0xDEBA4369, 0x46FCACD8}, {0xD66A3FB7, 0xC3A99A4F}, {0x25789F79, 0x723607A2}, {0xFCBA5573, 0x9D960C5D},
+ {0x2F9C679B, 0x6403735E}, {0x2346D378, 0x3A6F1B21}, {0x611E1F7C, 0x308978FF}, {0x16823949, 0x618657FC},
+ {0xD98894CC, 0x53AE6F31}, {0x7C57A6CF, 0x47B114BB}, {0xD81570D3, 0xABE4A83E}, {0x95A468A8, 0x6DE2338D},
+ {0x1F990B89, 0xF4094C88}, {0x1D42A283, 0x8ACE1DB7}, {0x26A95759, 0x19D9F7AE}, {0x05EC0F74, 0x126369A3},
+ {0x4562D965, 0x364F1D41}, {0xD17CB524, 0x2C08BDB6}, {0x3F16C9FF, 0x018C3C76}, {0x68E7588D, 0x42CF0231},
+ {0x6DDBFB93, 0x41AE7ADF}, {0x3C866814, 0xD326C840}, {0xF9985D72, 0x61B16B85}, {0x3B53D772, 0x56665BD0},
+ {0xC666D726, 0xC038D2F2}, {0x8E17A457, 0xE44DAB54}, {0x07E4BD94, 0x7EFFEAA0}, {0xD4C9CB4D, 0x0745E6CA},
+ {0x8D8C517E, 0x4702FE40}, {0x917DD0B1, 0x2FF2E2A7}, {0x347EBB52, 0xF5EEA68A}, {0xEA3AFF57, 0x28673EAE},
+ {0xB4BBCA43, 0x7E417D05}, {0xFC989C91, 0x8F550AB2}, {0x72AFBEF7, 0xF8D12815}, {0x3C16FEF3, 0x01568C6D},
+ {0xE8D0D8D1, 0x6553C758}, {0xC9B760D2, 0x8BB8D2FF}, {0x93E4F693, 0x920C38A1}, {0x2C5C2E58, 0xDA529922},
+ {0x0DFB5798, 0xBED6ADBA}, {0x8F3FFA36, 0x86879B7A}, {0xC1B59DBD, 0xC8E3C6DF}, {0x5F8E381E, 0xD808EFE4},
+ {0x8A066FCA, 0x40B88961}, {0x84659FC7, 0x31FECAA5}, {0x35C18886, 0x46A9D695}, {0xB87885B0, 0x6BBD5817},
+ {0x2C240468, 0x4766E9B2}, {0xF575121F, 0x67493B6C}, {0x0D183027, 0x8EBFFE14}, {0x7583C981, 0x4CD6E068},
+ {0xB6C9D004, 0xAE27FA6C}, {0x697F191A, 0x977C86A7}, {0x8FC6BAA1, 0x03069F72}, {0x6481DD43, 0xBAAFB734},
+ {0xE8B6AD6C, 0x13B2262D}, {0x756F38E0, 0x202A585B}, {0xCEB00B0D, 0x444E0E1B}, {0x6C27FF50, 0xD88F43FA},
+ {0x49371733, 0xB6BFCC57}, {0x3C47C0D9, 0x5CB71D7D}, {0x8922D838, 0x67993300}, {0x6A25F2F7, 0x5785711B},
+ {0x359AC5C7, 0x22AEE6EB}, {0xFE72372A, 0xBA8BBB05}, {0xE936C134, 0x85FBDEEC}, {0xE3AD50B3, 0xCFEF3A3B},
+ {0x218D5A62, 0x075ABCBE}, {0x70D86E92, 0x01ACB400}, {0x636AEAFC, 0x8BAB314D}, {0x15923A19, 0x0B871AC1},
+ {0x531B8668, 0x07ADFB9C}, {0xF4963BE9, 0x69F569E6}, {0x9ACDBBD5, 0xED7BFBC6}, {0xFB39E49B, 0xDCD93DA5},
+ {0xD6E10B22, 0x1BE02284}, {0xD5C2BB7B, 0x50918AB3}, {0xF1F2C516, 0xB46EBEB5}, {0x8BBF264D, 0xCC254146},
+ {0xB1067F58, 0x23C6028A}, {0x307CB5E2, 0xDF2A498B}, {0xF47C4403, 0x8BCA2539}, {0x6D2FE746, 0xA9802FE2},
+ {0x1B2E6745, 0x0B0172B8}, {0x19CF2BB8, 0x81725BF4}, {0xC568E74E, 0x75AE7F90}, {0x76AB1233, 0x18181DB3},
+ {0x1D55C5F3, 0xAE0DAF74}, {0xA0B55CB5, 0x00303E3A}, {0x80F3015F, 0x68ACD9FE}, {0x8ED766E2, 0x6151E6BC},
+ {0x379C0C29, 0x9AB6372B}, {0x12745DA9, 0xB64B90C5}, {0x141B8F28, 0x584DDA29}, {0xA68C0B66, 0x04D5EE85},
+ {0x37FC5A75, 0x96EAE717}, {0x8E346FC6, 0xECE3C2FA}, {0x8F5BCEBC, 0xCE93FBE7}, {0xAE7EEF11, 0xF9EB3509},
+ {0x4A96DC32, 0xE8A4DE01}, {0x490B36ED, 0xA60F22DC}, {0x242EB6C4, 0x8E66BC74}, {0xD3C4B5EB, 0xBEFB1C8A},
+ {0xA85ABA3B, 0x8FD92FE9}, {0xAFDFAF03, 0xB4B5BC3E}, {0xA8CAFF82, 0x279DCB9C}, {0x3518F2BA, 0x87C03F7E},
+ {0xF65A6DC8, 0x9629C014}, {0x0F8E5196, 0x66FA338A}, {0xE3514C67, 0x248D75AF}, {0x04748F92, 0xF2690DF0},
+ {0x782E7B07, 0x2023A554}, {0x202AC583, 0x5FF45E2F}, {0x16A4A2BB, 0xA829ABE0}, {0x9922FD98, 0x687588B1},
+ {0x6AD220F5, 0x80459BA6}, {0x54740FA6, 0xF4D1AA1F}, {0x9731033E, 0x1B7161A3}, {0x9AF53FE7, 0xFF1D6A02},
+ {0x7961BF08, 0x5B5F81E8}, {0xD8DF5DC6, 0xEA2BCA1C}, {0xB45C48DD, 0x7B4C017E}, {0x5886B49F, 0x8D826551},
+ {0x9C9C50FE, 0xCD472997}, {0x907C480F, 0x0AF4D89C}, {0x94F1DDA2, 0x2FEE2984}, {0xB5FDC0AC, 0x295B1171},
+ {0x03693A31, 0x3F11E9A5}, {0x709DFB08, 0x51371A72}, {0xE0302A02, 0x50297A98}, {0x0CEA6B91, 0x09364F39},
+ {0x745F352E, 0x60364FF8}, {0x18392E44, 0xD603E667}, {0xC0196151, 0x743DA714}, {0xCAAD2288, 0xC5E3B298},
+ {0xE3EBF105, 0xEFBA742E}, {0x86E44ED0, 0x0E5112CE}, {0x3D9C8604, 0x3938613F}, {0xD84F36F5, 0x5E6E8382},
+ {0xFA88CF92, 0xAF16E6DC}, {0x9B4CE90E, 0x2D34D77F}, {0x6C3520E0, 0x396D8799}, {0x2A4B4CFA, 0xDA76F31D},
+ {0x0FBB4D40, 0x88CFDE4A}, {0x957F7137, 0x9640FB4A}, {0xD848E900, 0xF27C0501}, {0x3D0DCA23, 0x8E4F1133},
+ {0xB2D6C4AF, 0xB69BEDD6}, {0x12412D7F, 0x3837C303}, {0x674094F9, 0x22118C06}, {0x96F44442, 0x35AF793A},
+ {0xBBE1A3C5, 0x833A9367}, {0x01877B36, 0x9438F39F}, {0x96F8B8E1, 0x3361F05B}, {0x34AA2F64, 0x96BFE69D},
+ {0x15BD9336, 0x3AE2140E}, {0xD7E68AF4, 0xD082B199}, {0x3AF91D35, 0x2656ACA9}, {0x6D33783E, 0x0D6C35E0},
+ {0x0129A0E7, 0xDFD21377}, {0x4385A222, 0x31225AD6}, {0x71CC8E65, 0x7437D2D3}, {0x09EE909F, 0xD8A32451},
+ {0x95C2A41A, 0xD9985B58}, {0xE3F61728, 0xECF465A2}, {0x179E9A2A, 0xD1DB2F57}, {0x915CE49D, 0xD4567B53},
+ {0xBAF772E0, 0xEE85581D}, {0x6CE217F6, 0x5D4917DD}, {0x325A504C, 0xB43D76B9}, {0x40395438, 0xD15ED885},
+ {0x3D7B75A3, 0x753228FE}, {0x26E5DEE5, 0x29107AC0}, {0xD5CA4B59, 0xE101CFE3}, {0xEE64D781, 0x35FFDF8D},
+ {0x3797CD89, 0xC7014A2B}, {0x50A461E6, 0x244912F1}, {0x930BA352, 0x86AA7F8D}, {0xCFB74589, 0x2F431274},
+ {0xF927F126, 0xE4A2F3C2}, {0xBCC9F8FE, 0x78D4AE24}, {0xC95C4C7A, 0x92CAB6B7}, {0x0311E412, 0x11869412},
+ {0xEE3BDE78, 0xEBE26B8E}, {0xBC6D2DC7, 0x0A67EBCB}, {0x3EB0CDBD, 0x8C7A8273}, {0xFC55C9AB, 0x417A2B5C},
+ {0x3239B061, 0x93589CF9}, {0x8661519C, 0xB3FE2ECC}, {0x55CB6114, 0xF0D8B2F7}, {0x955E76BE, 0xE91EE32B},
+ {0xFD047B1D, 0x6C7744B2}, {0x5D210D76, 0xC914BD75}, {0x56F6EDD4, 0x2E5B24C6}, {0x82952203, 0x0205C4A7},
+ {0xA45AFC44, 0xE9A1C3BF}, {0x74FC8368, 0x479C664F}, {0x280FB601, 0x2D0B24FD}, {0x707315ED, 0x72BCE889},
+ {0x6874F7D7, 0xD3454E03}, {0xE82D68A8, 0x0927C487}, {0xECB39644, 0x626BBCE9}, {0x881CFC8A, 0xCCD3FDB5},
+ {0x11340AC6, 0x20D72590}, {0x7031EACF, 0xBED7B15F}, {0x28C23D16, 0xA65FDE28}, {0x4D09A0B9, 0xC0B70231},
+ {0x9969D824, 0x589F5F59}, {0xE9662953, 0x94232291}, {0xBCFE67D5, 0xF08B36EA}, {0x1B44CD76, 0xE2982AB8},
+ {0x8F885671, 0x1B023576}, {0xE94792CA, 0x8FB8EA29}, {0x0403A590, 0x4B51863F}, {0x220B407F, 0x29E588BB},
+ {0x0385ACCC, 0x1EE1A2A2}, {0xC24A81B8, 0xDCCFCB0E}, {0x279D3E4A, 0xA46E37EB}, {0x3F546A6E, 0x4034F6D3},
+ {0x5087AEEB, 0x7DE64177}, {0xF8F69B2E, 0x434CCB44}, {0xBCE5C20A, 0x36556597}, {0xA2BBFAF0, 0xED6F86C2},
+ {0xAF1BFEA9, 0xA83E85D7}, {0x2D970427, 0x75149207}, {0xD529CC39, 0xEE89F8B4}, {0x2A35F1AE, 0x6AF32FDD},
+ {0x901B6630, 0xB4A101C8}, {0x15FF8C81, 0x4D16BAF3}, {0x9E70CD15, 0x3D51980A}, {0xAE7306B3, 0x0D542EA5},
+ {0xB335A705, 0x493B3904}, {0x5FBADF60, 0xB77369D5}, {0x722639A4, 0x87E879BA}, {0xE9873809, 0x37029F15},
+ {0x19CEDDAE, 0xB1C66B86}, {0x2EE794F2, 0x9F2F1FA8}, {0xA6F06674, 0x3320199A}, {0x44D46665, 0xC35290CC},
+ {0x9584A422, 0xF7F92D04}, {0xF321ED40, 0x61928E01}, {0xC37AF9A8, 0x22B30F3B}, {0x2581AA2D, 0xE050F329},
+ {0xBD5EAC52, 0x3AC8379E}, {0x7042B64E, 0x36A19131}, {0x97884F3B, 0xC4281C5E}, {0xC70A10E7, 0xAB96133B},
+ {0xF600595B, 0x950A233F}, {0x98B11C37, 0xCEB0A496}, {0x5020FA07, 0x44D3560F}, {0xB16E236D, 0x36C60C17},
+ {0x2DB350F0, 0x0CBC938E}, {0x8A1FE38E, 0x393FA0D4}, {0xF911E079, 0xD3A07B00}, {0x8A65DCFB, 0x6E35E29D},
+ {0x4EEC364F, 0x7D991D98}, {0x09B73853, 0xC14A6C8C}, {0x89057B7E, 0xA6A9943E}, {0x9C6FE2C4, 0xEE865ECE},
+ {0x26FBA134, 0xB685DF6F}, {0xCEB05CC5, 0xE3465F41}, {0xA49B8BED, 0xA7B0EF4B}, {0x4DEE854A, 0x74190CC4},
+ {0x0A26FF20, 0x3582AE04}, {0xD87B4355, 0xF4EA96F6}, {0x82B60CD4, 0xC5A78EB2}, {0xA8F51C99, 0x528B4A2F},
+ {0x24BDECD2, 0x10380AA6}, {0xBE4B2B1B, 0x14D45CD8}, {0xEE07E8BF, 0x499C9E4A}, {0x7663BB57, 0x4809C08C},
+ {0x9A33F929, 0x26EA0B42}, {0x8C251CB9, 0x5A5779F9}, {0x98FDBAF7, 0x9554CEB8}, {0xCDFCF722, 0xCE5BCF20},
+ {0xE0A474D5, 0xAAE631A3}, {0x124498AC, 0x7D8D479D}, {0x55563BE2, 0x6FB1BF33}, {0x24C8DAA7, 0xAF0BAC8C},
+ {0xD081F44B, 0xFDEDA35F}, {0x1265AAAE, 0x6AE91D37}, {0x9734AE7F, 0x151F4A64}, {0x4207A463, 0x7E6E8D1B},
+ {0xEB54D3FF, 0xB9DB7C2C}, {0xB1CD60FF, 0x44FE1A2F}, {0xCE5D5E1A, 0x52BE5FE3}, {0x95E9C444, 0xCA1F074B},
+ {0x7EE3BE96, 0x6E7DC722}, {0x338B8DEE, 0x0A841229}, {0xF2FDD8FD, 0x4551A092}, {0x34044374, 0x34C63721},
+ {0x11E68D01, 0x05AED38F}, {0xB90D094C, 0x9FF6B41E}, {0xA7DF7746, 0x9BB5F113}, {0x555E5681, 0x09190C40},
+ {0x8218720B, 0xC89B88AA}, {0x14D13DBB, 0xB652E2EE}, {0x4C520BC5, 0x2CD16F51}, {0x08CC97A9, 0x6A8B9B2E},
+ {0x505FED39, 0x5E8AB9BF}, {0xF3BFB029, 0xBC3406BB}, {0xE9B30C07, 0xC65A84C9}, {0xFA69A1CF, 0xA8CA2D89},
+ {0x1F50266F, 0x8316285E}, {0xCCA98064, 0x659DD051}, {0xBE3545B1, 0x5B9EFADC}, {0x6A151978, 0x7F06AD11},
+ {0x85EB7181, 0x6DF7C6D0}, {0xB7FB2F36, 0x2B9FBE67}, {0xB85F7A8D, 0x2A630F3B}, {0xAA17508E, 0x61B6D0E9},
+ {0x9E3D2A7F, 0xC8DE2188}, {0x277EEEAA, 0xF98AB3D5}, {0x1C10C2DC, 0xD9764CED}, {0xD6984FA8, 0x0FC6D76F},
+ {0xAEC37DAE, 0x0DDC2699}, {0x433E14C4, 0xA83FA968}, {0x9F92E1E1, 0xC6035112}, {0xD5AEE6EF, 0x79F7E788},
+ {0x29F126EA, 0x89BD16C1}, {0xB8687B02, 0xBED6CAFD}, {0x6D401848, 0xB221C48C}, {0x9974A573, 0xB79D3712},
+ {0xEDFE843E, 0x8D80706F}, {0xF0A8D755, 0x1CBC944A}, {0x4421B11D, 0x735F21E3}, {0x28499242, 0x569FA472},
+ {0x8C3BC476, 0x4D91156B}, {0x34E05E28, 0x6FD1F5E5}, {0xAA6AD51E, 0x814912F0}, {0x5DA66205, 0x2F2234F0},
+ {0x3D8D1689, 0x2C38BFF4}, {0x133241E2, 0x4600F9A5}, {0x51E777E9, 0xBFDA895E}, {0x40AF57B9, 0x7D01B977},
+ {0x9D12EEB2, 0x728C2D1B}, {0x935C06F9, 0x213C38EF}, {0x076DB788, 0x329C4D70}, {0xAEE47638, 0x4AA45B55},
+ {0x466E002F, 0x77375C49}, {0x34F6DD60, 0x337106A1}, {0xCCF776A2, 0xFF44EB53}, {0xC1D6EE3C, 0xF74300B7},
+ {0xDE24C8D4, 0xBB7DB56F}, {0x267F8EFE, 0x19FD2E07}, {0x8FDAEC6B, 0x40BE6C0A}, {0x6236AC44, 0xF88CDC87},
+ {0x06CA67F7, 0xAC03D7C1}, {0xCC0E9F88, 0x177E29B4}, {0x3F8D5214, 0x7E12213F}, {0xFB6842A2, 0x7C4A8C76},
+ {0x5EA52694, 0xE70A3174}, {0xF2C238D9, 0xB5A9F1FF}, {0x8F462454, 0x048243F8}, {0x34260660, 0x963D2CE9},
+ {0x0A73FB0D, 0x6DA524ED}, {0x33EC743B, 0x93AF9DAD}, {0xEA72B5DD, 0x3D727B05}, {0xC04AA360, 0xED18A087},
+ {0x450BF219, 0xB795797C}, {0xEB6FAB7A, 0x30770DA8}, {0x569C3D20, 0x5D573C8C}, {0x6B6854EE, 0x51825E1A},
+ {0xF0D84C71, 0xDF586F96}, {0xD208B67B, 0xEBFE0A09}, {0x121791C8, 0xDE258B4B}, {0x592F60CF, 0x4233836D},
+ {0x5BDBCEE1, 0x55998833}, {0x6F245E24, 0x5126FC50}, {0x663DB925, 0x93E93C0B}, {0x5B2BABA4, 0x15FC99FF},
+ {0xAD053D3B, 0xAEBA32C3}, {0xD3D4B232, 0x746AB318}, {0xF6F66927, 0xD639EC12}, {0xAB3194E0, 0x51FE3FBC},
+ {0x422A72AF, 0x8FD3D1F2}, {0xF7AA3DB4, 0x5F8F09D9}, {0x7BD72C03, 0x9D37DE95}, {0xA1CBE46A, 0xC7FAA4EB},
+ {0xB0E6F651, 0xCDD490E6}, {0x70A33D5B, 0x29C71957}, {0xF564B120, 0xF6CFEF80}, {0x02DA5BF7, 0x0D9E0443},
+ {0xE57AAC46, 0x7969CE17}, {0x002DA801, 0x66653CA4}, {0xE7809F82, 0x58400FDD}, {0xA81E4B7A, 0x65BFE9B2},
+ {0x62DBD435, 0x20146DF2}, {0x436CD60A, 0xF4E9222C}, {0x9024B2BF, 0x3E3B9366}, {0x62137BC4, 0xE0682978},
+ {0x59FA6DD5, 0x6D0B382D}, {0x1C0DC6BD, 0xFDBCF244}, {0x71D9DF9F, 0xAFD29A88}, {0x1C1FADC6, 0x4381BA75},
+ {0xACB784E2, 0x9AB6A41C}, {0xFFDFC05B, 0x59D55EC2}, {0x53D5D2C7, 0xA78D1D8B}, {0xD8948D5D, 0x8AA30F8E},
+ {0xD1FE29DA, 0x65174B97}, {0x109691E7, 0xBBF584DA}, {0x40D5B187, 0xC27074EE}, {0x4CD63CF5, 0xA8A940FB},
+ {0xB1B8E43F, 0xB9D43E06}, {0x1D8B3C58, 0x277E278B}, {0x8830E70E, 0xDA0E134C}, {0xD31216DC, 0xA5B272D8},
+ {0x1D359550, 0xC594E4BC}, {0x6AC63D86, 0x32C6A655}, {0xC785D1FE, 0x1FCA5E46}, {0xBBDC03F1, 0x4C7CBA74},
+ {0x9E01401A, 0xC60D24A6}, {0x6C1F3433, 0x49D5504E}, {0x3E364A79, 0x9BF15B88}, {0x5328771B, 0xCC88A6F7},
+ {0x5FEF2F09, 0x5B600EBA}, {0xE5D9CC99, 0xC7AC4552}, {0xDF6D756B, 0xAD40B119}, {0x4326891C, 0x32F67C27},
+ {0x9857C93D, 0xC637D7FE}, {0xFBBA7EA7, 0xD4D6FCCD}, {0x48BE4FC0, 0xEA409F53}, {0xF380ABFB, 0x463FB611},
+ {0xCD8280CF, 0xC647E9D1}, {0x25C11643, 0xADB3C845}, {0xDAC83016, 0xF6D28D1F}, {0x40BAEE69, 0x3D85F1AF},
+ {0xBB831D78, 0xB1B5AFA5}, {0x911D8D64, 0x6268225D}, {0xF445B001, 0x08781015}, {0x5903B9A7, 0x32D7EDB0},
+ {0xA341DE5E, 0xCF00CCD1}, {0x01BBB22D, 0x23EB068E}, {0x3FBF3F69, 0x1D3D74E8}, {0x0951040E, 0xCF2A67AF},
+ {0x9EED8079, 0x0D835651}, {0x0FF2F4D3, 0x973134FB}, {0xC1C4770B, 0xE3A7AAA8}, {0x9DD2221E, 0x9461035B},
+ {0x2DCE49B2, 0xD5ED95C2}, {0xD649CBB4, 0xB626E54D}, {0x5AC6429A, 0xBC9F40D2}, {0x550359FF, 0x42B5BF14},
+ {0xAA0BBB1D, 0xDE3980A8}, {0xD325844A, 0xAD0036CB}, {0x41E4C608, 0x5ADCBF33}, {0x0576FDD0, 0xD59D79CC},
+ {0xC2487784, 0xF25DABC4}, {0x3F62047F, 0x3227DC2D}, {0x91E8ABFE, 0x3855A025}, {0x8518D334, 0x60B097CA},
+ {0x425113D0, 0xC552C910}, {0x12DFC8C6, 0x4B140C6E}, {0xC2D35FA8, 0xA3093F22}, {0x6B694A5D, 0x8EA634F8},
+ {0xD6849E4A, 0xC6B7D643}, {0xEA1C9BC8, 0xE87C36F2}, {0xE7157F37, 0xF07659E6}, {0x33EB11C2, 0x1F272E8A},
+ {0xB2EAF1A0, 0xF8987221}, {0xD2B68270, 0x5A202DE9}, {0xF2FBF2EE, 0x4576B7B9}, {0x1A610DD5, 0x184F6FCD},
+ {0xF8F0EAEC, 0xA4F07F3A}, {0x705DBF0A, 0xB4F82A01}, {0x41C50D01, 0xC49DD5FD}, {0x49C9800B, 0xBFB328C4},
+ {0x3764AC40, 0xCF10A287}, {0xC54BDC2B, 0x6DDBE692}, {0x849DCFFB, 0x1C026B8F}, {0xD555D813, 0x22873AB2},
+ {0x4EE4F854, 0x82ACEEBF}, {0x0DF30B2C, 0xB3EECC2A}, {0x0ADB476A, 0x9F4BCE69}, {0x46A81CD2, 0xF7A7AA36},
+ {0x7253B8AB, 0x8904E992}, {0xA34FA615, 0x1AB8DB30}, {0x07ADC94A, 0x9C84C791}, {0x7C6CB440, 0x3C889516},
+ {0xFFF6A29E, 0x059EE37A}, {0xC1589844, 0x77781FF6}, {0xF4F1DB6E, 0xCCBBA661}, {0x49EB7C5A, 0xFAFCFA19},
+ {0x8B7DD028, 0x68388650}, {0x70D76737, 0x79F3DAD9}, {0x900C6CAD, 0xB40777B5}, {0x3F4CFC82, 0x04769F67},
+ {0xACF274A3, 0xEC19E8EF}, {0x15BBFDDF, 0x73284311}, {0x95383DD9, 0xBCE2532F}, {0x4BCFFD9A, 0x9CF458A8},
+ {0xA43E01C4, 0x2EB19934}, {0x352CFC38, 0xEFFC663B}, {0x66A59C4B, 0x99947208}, {0xEE25A693, 0x8586F534},
+ {0x1A6C0484, 0x0C8AE2F6}, {0xD7D7C399, 0x93BB1D51}, {0x5E48B714, 0x87C63D12}, {0x08F95567, 0xBA9194E9},
+ {0xA407CE88, 0x14891207}, {0xE3F47E47, 0x266CC2F1}, {0x3278F3E8, 0x20954191}, {0xC30B475A, 0xF5F7643A},
+ {0xEB384E0A, 0x79802870}, {0xED6B3697, 0xF3176377}, {0xE7E5123A, 0x996A55A8}, {0x32FFE32B, 0x2CF186E8},
+ {0x58898C82, 0x2B792660}, {0x604FBC62, 0x47CD5AAB}, {0xE0383C36, 0xF3F64CF7}, {0x09B9E8CD, 0x499A85F1},
+ {0x412AAD9F, 0x67859FBF}, {0x94D5AFA4, 0x8F951CA6}, {0x0FD3EA4F, 0x2CA34A66}, {0x55AD1FD0, 0xE0AC866D},
+ {0xBA2BB89F, 0x017460F3}, {0x7D7FB967, 0x7EA72BAF}, {0x518F29CD, 0x4B27F54C}, {0xB7990776, 0xCC5409BA},
+ {0x49F854B8, 0xABE18F15}, {0x159737FD, 0x1637A5ED}, {0x5257E47E, 0x35C42946}, {0x732C5A3F, 0x20A80F8C},
+ {0x87E07952, 0xF95EE2FE}, {0x53355BCD, 0xD241AAEA}, {0x03A5119A, 0x2C1E67A9}, {0x45E63455, 0xA9C05B7C},
+ {0x16175CF7, 0xBBD3F21C}, {0xA252C992, 0x7AF682AE}, {0xEA65684A, 0x53DFBE53}, {0x86B36055, 0x98512A73},
+ {0x828BB3A7, 0x8EA380CB}, {0x08376F41, 0x119DBD5C}, {0x5E41E5B4, 0x51664806}, {0xAC770940, 0x6BBBFDF8},
+ {0x08BDC254, 0x9CEC3DD9}, {0x36500F4E, 0xECF7D38F}, {0xF625BBB8, 0xA9715A84}, {0x2C5837F0, 0xD099F167},
+ {0x99DE87F8, 0xC0FF03E7}, {0x8E823408, 0xB4F53062}, {0x45F3DAF7, 0x07B270FC}, {0x2DE04E35, 0xF2555EBC},
+ {0x4A8AB8B7, 0xD6C83118}, {0xED487A36, 0x7EA0074B}, {0x800DDD77, 0xABB48CAE}, {0xCFAA715A, 0x7652C9D3},
+ {0x82B0F274, 0x9377F9CC}, {0x56A2B2DE, 0x54024548}, {0x9040422F, 0x921AD8C0}, {0x46568137, 0x2EB79776},
+ {0x20ECD048, 0x2FFCBC8F}, {0x1E08CA32, 0x3E97443B}, {0x10DB99D3, 0xEBC7FE96}, {0xA8BA8D81, 0x01880FC1},
+ {0x6B882D6F, 0x391DD4C9}, {0x35A8A1EF, 0x06634F9B}, {0xB9004537, 0x6A04B063}, {0x5066CDA5, 0x6859633F},
+ {0x16A27954, 0x1D593508}, {0xA5384DE1, 0xC4F06F70}, {0xB7BCC0EC, 0xD63FA4FB}, {0xABA2F8F2, 0x417E8CA1},
+ {0x8320ABFE, 0xC82BB9D5}, {0x9593CEBC, 0xC3BC58C3}, {0x8D8E5E95, 0x9819CEB0}, {0x147F2858, 0x1137980D},
+ {0x00E06E5B, 0x3B6E3C97}, {0x6CE2DBE9, 0x6ECC73D0}, {0x254985A1, 0x4E92A92B}, {0x637B250F, 0x9BA6D09A},
+ {0xFDA788C4, 0x5AC18553}, {0xCC9E6CBC, 0x6CA2E0E5}, {0xE99548B2, 0x62BF7AD3}, {0x88B13912, 0xA0B2C839},
+ {0xF94FEB18, 0x1FCE4B1D}, {0xF41BD5AA, 0x8F7A7FF5}, {0x5B80F60C, 0x22240D03}, {0x06F40256, 0x9830CBAB},
+ {0xEFEB85E9, 0x0FDC26A5}, {0xDA82118D, 0xD5DF61AB}, {0xE2711ECF, 0xEEAA5EC7}, {0x24E42B5C, 0x972D2BA6},
+ {0xE9A3A87B, 0x896379D8}, {0x97342474, 0x41C588E4}, {0xCEF7DB54, 0xBDD7E1A6}, {0x8B667DB9, 0xD857DBE6},
+ {0xD03DCB13, 0x9744F9AB}, {0x4CCE921E, 0x4DEE3388}, {0x53195A04, 0x0DD187D5}, {0xD2D4E7A4, 0x17BBCA5E},
+ {0x2F9F6126, 0xFEA31E06}, {0xB26DDE52, 0x016959C8}, {0x34ABA75D, 0x38E9C378}, {0x56803B0F, 0x49E0E7ED},
+ {0xB298B62F, 0xF5CBB737}, {0x6B99F7CE, 0xA37AFAA9}, {0x3CF3953D, 0x8B937DD5}, {0xFADE0B52, 0x84C7E883},
+ {0x58CFF5ED, 0xD6DE9F52}, {0x0E96420A, 0xE67CFA5D}, {0xC1F24B4F, 0x82BA3F2C}, {0xA17398CE, 0xB4D5C6C8},
+ {0x1117CBB5, 0x46E15612}, {0xDADBF9A0, 0x3F49C12C}, {0x67559E02, 0x65988E10}, {0x3EDE5AE3, 0x092DC03A},
+ {0xB681921C, 0x88451C63}, {0xD704C549, 0x37AEBC56}, {0x0AF5B433, 0xCAD4214E}, {0xC71B1723, 0x36C52714},
+ {0x0DC0A628, 0xB8D0E76C}, {0xA7F61403, 0xBED3BB3B}, {0xD8288429, 0x557EB9A2}, {0x7C0AB2FB, 0xE1214F0B},
+ {0xB3A0924B, 0xB04A7CB4}, {0xCFE45789, 0x41B35424}, {0xA704D30B, 0x82D050EF}, {0x9ECBC21D, 0x48D3A8AE},
+ {0xC267DD09, 0x82966F5E}, {0x5D727046, 0x0A255671}, {0x331705A5, 0xC13AD88D}, {0x5F61DFA6, 0x992EF723},
+ {0x6A7811A5, 0x180E4499}, {0x6301E14B, 0x8878CDC6}, {0xF58AA18A, 0xECDE05F0}, {0xAE1770F6, 0x9B87143D},
+ {0xB296F840, 0x5B7833F9}, {0xCC2C0468, 0xABF3F74E}, {0x3AA115EB, 0xAD80BD5C}, {0xD3FEAA33, 0x639A4772},
+ {0xA9676324, 0x5AFB7B62}, {0x4F62A980, 0x32BF0A78}, {0x89F78720, 0x7AF8ED4C}, {0xEC7A0B6D, 0xE8AA0A4B},
+ {0xD4491C45, 0xD3371A54}, {0x70D2EB4E, 0xBE4A2DC3}, {0xB399BA75, 0xB6564B0E}, {0x800C3F8F, 0xD6C23876},
+ {0x456E435C, 0x7E93DA65}, {0xA4E2144B, 0x69F874E8}, {0xF0DE9344, 0xF5EE236A}, {0xC030085F, 0x250CECB3},
+ {0xE93DFE18, 0x11126B39}, {0x5B4AFF7D, 0x8EA26CC5}, {0x464A9F83, 0xB414CC95}, {0xCCD7E252, 0xB1C9B15B},
+ {0xE9DFE6F2, 0xC11CF744}, {0x0182233D, 0x6D782522}, {0xFAB086B3, 0xB266B302}, {0x9B3A7911, 0x9A212A26},
+ {0x13BA57F3, 0xF622B380}, {0x0E082254, 0xB199A61E}, {0x42F909D5, 0x11DC23AF}, {0x22C20088, 0x5643508D},
+ {0x873744FB, 0x1D13771E}, {0x81B97277, 0xC43D741B}, {0xE98D9FE6, 0xC60D6880}, {0xE0FA0F05, 0x58165989},
+ {0x064350AB, 0x2EDF7C47}, {0xD3CD9C1D, 0x2586A329}, {0xE8711662, 0xC246CE06}, {0x37062E4C, 0x544FD962},
+ {0x90D9419E, 0x7CF957A5}, {0xD97F06E9, 0xAA900F87}, {0x4055DE6E, 0x3A6B3CE6}, {0x8709C08E, 0x00954F56},
+ {0x3A4C09E2, 0x9DF6B82C}, {0x3C5B79FF, 0x140C256B}, {0x78012296, 0x8C4D5E6C}, {0xA4585ED6, 0x3F217DFA},
+ {0x5943279E, 0xCC535764}, {0x9E400D7C, 0x6DC5FAD9}, {0x185F4B9E, 0x2B9D4C7F}, {0x17675316, 0x729B3B50},
+ {0x4C5F1F97, 0xAD8B2015}, {0x0B2AC3E5, 0x63E90C7E}, {0x6AB35015, 0xFE6C493C}, {0x6B893819, 0xE54C2CAE},
+ {0x0ED7DE33, 0x7CDCCD51}, {0x287059A6, 0x93E430A0}, {0xEE5728FC, 0x484E5680}, {0xDC6C0143, 0x9F107046},
+ {0xAF9E3FB2, 0x7B4D7153}, {0xD688EFD8, 0x09059F14}, {0x36586060, 0xAA99C142}, {0xF97FEF7D, 0x8EBC2163},
+ {0x38573517, 0x2285DBB4}, {0x0D72E67F, 0x2B29F255}, {0xB6F1C703, 0x7ABC3679}, {0x2A2B7353, 0x4C795B6F},
+ {0x04774255, 0xF825D12D}, {0xEB17E751, 0xC3A06136}, {0xE63EA708, 0x66E0271A}, {0xACF5B7D7, 0x6FC9CFE9},
+ {0x8516B3EB, 0xA3DEDF8F}, {0x92315985, 0x93B5A407}, {0x9F21DB74, 0x563387AC}, {0x35183DCA, 0x5A446D6F},
+ {0x5A3A82F6, 0x87FF67B0}, {0x2F0083BB, 0x8CC34914}, {0x813AB938, 0x6C43AB84}, {0xA4BA66A0, 0x288C7142},
+ {0x1DD060EE, 0x1E884BAA}, {0xC1DFABC5, 0x25268396}, {0x364338F7, 0xC23F777C}, {0x7D662387, 0xBEC049F3},
+ {0x57FD2C29, 0x69A2FBBA}, {0x0B93C328, 0x581E8A77}, {0x6F330929, 0x9D354C97}, {0x65465A46, 0x239C2D46},
+ {0xD4EC5D65, 0xA0085F5A}, {0x7250EBDF, 0x0016A163}, {0xA31D3E99, 0x4655DD0A}, {0x779240B3, 0x2EF16432},
+ {0xA9E28CCC, 0x8FAE2F82}, {0x5E433C78, 0x3AD8EEF8}, {0x098A651F, 0x0D976275}, {0x7FD2E248, 0x2156288A},
+ {0x16B103B0, 0x603B7135}, {0x46DA1277, 0x7F95B74B}, {0xA6EEA22F, 0x16EA4ED5}, {0x5E106711, 0x799D4162},
+ {0x2399A147, 0x1B15C14D}, {0x1BD1D072, 0xFD354E05}, {0xB97EF1E2, 0xF834D5EF}, {0x1389D7B4, 0xA5BCA1C9},
+ {0x7D0C460B, 0x4CDA3F33}, {0x0FB8E8BD, 0xC46A32E4}, {0x18E7457F, 0x30D6EAD6}, {0x072DD5EE, 0x5E0C130F},
+ {0xD44ED6D3, 0x03A73927}, {0x320D9FB2, 0x42EE140F}, {0xB0CEE685, 0x285F57E3}, {0xA890CBF7, 0x76439094},
+ {0x34974D9E, 0xE66296A4}, {0x952A0C56, 0x0C97EC6C}, {0x9EFB0751, 0x2B6EA7FC}, {0x113ACC08, 0x86C43C11},
+ {0x77CB82C2, 0xE0B83EDA}, {0x99D9EFFC, 0x3FC7AB77}, {0x5AF397D9, 0x15BCCEF9}, {0xAD875090, 0xB3036DC0},
+ {0xF6A69F9E, 0x36AFB8E8}, {0xDF2328D6, 0x2D2B91AF}, {0x190E1037, 0x4608C0AA}, {0x827544B8, 0x24F4DE6F},
+ {0x9760EAA9, 0x6B15A26F}, {0x8B95B472, 0x9BB303D2}, {0x4F5B5D46, 0xD038485C}, {0x592206C3, 0x37EBE68D},
+ {0xAD900C00, 0x7DA70ADE}, {0x5AC18BB8, 0xC641DF15}, {0xD132355A, 0x31E399B3}, {0x844B8BE3, 0x1D469049},
+ {0x61C6441B, 0x989513FA}, {0x5450DF01, 0x6A190449}, {0xF049FFF3, 0x4CC069D8}, {0xB16DAE6B, 0x21140538},
+ {0xC4D1802B, 0x132ED5C0}, {0x2AD7581D, 0xA588393B}, {0x0A138315, 0x632E4D97}, {0x06F914BD, 0x960236BB},
+ {0x09647E6E, 0x3C1653F8}, {0x535A4F66, 0x9729F602}, {0xB4BF585F, 0x7C1CA445}, {0xD9FD1E1A, 0xDE8A4783},
+ {0x8526F448, 0xD0A9AF7B}, {0xAF91BCA9, 0x7FDE4D70}, {0x269628FF, 0xF70AF1E1}, {0xDD4E4D71, 0x05244929},
+ {0xFF72DCBC, 0xA156EEAA}, {0x7014E8DC, 0xE8C3D4FC}, {0x92C90A54, 0x204072C3}, {0x79209CA2, 0x95AED5AB},
+ {0x1FAD3964, 0x4016E35C}, {0x94594CB6, 0x52999E5C}, {0x08AFCFAD, 0x76F61E1D}, {0x5AA66E02, 0x446BECEA},
+ {0x91056216, 0xF68AA60F}, {0x036B3926, 0x8796B2EE}, {0x7F3D2153, 0x837F6A6A}, {0x82438B94, 0x1CE6233D},
+ {0xFD02FDF4, 0xDA0816D3}, {0xF7690DE3, 0x40125F4D}, {0x19F60E4A, 0xD738320B}, {0x9A2A776A, 0x39F12238},
+ {0xA837DD84, 0x6E3F8E2B}, {0x3DF83735, 0x2953F6F4}, {0x327E7424, 0x81F58308}, {0xC5AC0218, 0x2038F59B},
+ {0x881B836C, 0x514C6CCB}, {0x6F7FF720, 0x15F1496F}, {0x247CADC2, 0x531C4C2E}, {0x131DF236, 0x14E8BD09},
+ {0xC86D7AA9, 0x1525A233}, {0x906B96B6, 0xD3860D74}, {0xDE5A53CF, 0x75C5BB98}, {0x5185E1AD, 0xDB09A7E1},
+ {0xAF4ADECF, 0x1DFAA091}, {0x03E2F580, 0xC9818C11}, {0xAC2602F8, 0x57376538}, {0xDC52D259, 0x1A7870FC},
+ {0x57C55EC9, 0x2DC65C90}, {0xCE5C7C68, 0x7BC31FFE}, {0x127169BB, 0x538F1594}, {0xF9550EB5, 0x471EC6D7},
+ {0x10864E6E, 0x0C080113}, {0x445F217C, 0xB2E1FFDE}, {0xFCFFA626, 0xA0E9C6D9}, {0x5F5926A6, 0xB43F67C6},
+ {0x53BB61A6, 0x93118109}, {0x8605322B, 0x469849CA}, {0x7E3D76FD, 0x7FAD3F82}, {0x4B67C7B7, 0xA18C53F8},
+ {0x1995DFCD, 0x87E7C304}, {0x87D0C0D7, 0x6912A69B}, {0xE8E3F4BE, 0x9CB25676}, {0x4ABB4875, 0x0AAEB149},
+ {0x86B739DE, 0x5435F976}, {0xB493A5AA, 0x2C886FF6}, {0x2784D617, 0x0A0BE4AF}, {0x74114984, 0xFCF127BF},
+ {0x1B541F87, 0xA5AF7CD1}, {0xB3F1FC08, 0xA3245D14}, {0x2F419DC9, 0x75C7E0A7}, {0x0D940650, 0xAFF648C0},
+ {0xF0CDEF64, 0x9001E21F}, {0x35D08519, 0x8AA5DFC7}, {0x1457E82D, 0xBF3D825D}, {0x836AC0DD, 0xBE3F8309},
+ {0x5F25C969, 0xA1236872}, {0xF751A6E1, 0x10A810DD}, {0xB366923C, 0xDA8DA913}, {0xDC8F8458, 0x74E62B67},
+ {0xB6035B41, 0x41FEAE06}, {0xC4BB81A1, 0x8BC2EDE0}, {0xFF59DDD9, 0x02C076B5}, {0x3D8A3D26, 0x41EB385B},
+ {0x5B804BC7, 0x1707C86E}, {0xB2A58965, 0x198F9472}, {0xDCEC85EC, 0x80837DA9}, {0x5E9486FF, 0x002CD05A},
+ {0x4576AFBC, 0x08688DDD}, {0x1744E58B, 0x4E26A24F}, {0x4EA32C5C, 0x412EDDB2}, {0x1BEC4A6B, 0xFB06B320},
+ {0x2FD7C85F, 0xD5D0D077}, {0xD0074973, 0x08A35715}, {0xAC7D04A4, 0x0CB38DCC}, {0x42B00424, 0xA9151CA2},
+ {0x9F72C680, 0x514C837C}, {0x50827EC1, 0x05A6C1DE}, {0x9741B75F, 0xFD56253D}, {0x47708979, 0x4EDC76C8},
+ {0x5C270EAE, 0xEC098057}, {0x84CF851C, 0x42CA7EE9}, {0x443FB83A, 0x7D0BD027}, {0x79E488C4, 0x282B1CFF},
+ {0x2A1F1F43, 0xD668757A}, {0x4C5A08B2, 0x155ADE9D}, {0xA353EB6C, 0x90ACD37F}, {0xC8672491, 0xBA20DF8E},
+ {0x32A08C13, 0xC1B8FED1}, {0x5050C51C, 0x959ED291}, {0xB71B3572, 0xDD5BB916}, {0x4ACD7201, 0x5A3B92CA},
+ {0x528B99A6, 0x958A19F3}, {0x92C58D32, 0x864A580D}, {0xF777C4AB, 0x0E892E58}, {0x893BB085, 0xF0AB6C55},
+ {0x65BB4820, 0xEDF7CED3}, {0x2C03B715, 0xA6121EE6}, {0x3479C693, 0xFFDAA5D3}, {0x7C01A1A6, 0x7929805B},
+ {0x154F4B45, 0xD4A2FDBB}, {0x13957C5A, 0xFBBA3DCA}, {0xE4FC98A2, 0x471E186E}, {0x7CAC71D1, 0x163A663B},
+ {0xEBD9D8E0, 0x16B9A2F8}, {0x460480C0, 0x59BB4DF1}, {0x447A8BE8, 0xB2874862}, {0x2852875A, 0x4405720E},
+ {0x1D4C280C, 0xDB8284CF}, {0xDDE6C164, 0x0F956F2B}, {0x88C3DF67, 0x6CFCC27F}, {0x54F3C72E, 0x1323ED92},
+ {0x17668042, 0x67D3FD4F}, {0xF4817590, 0xCB76C51A}, {0x4B9EA2CA, 0xF0517393}, {0x4C7E5858, 0x9C7F8A73},
+ {0xB91C0988, 0x516C27C4}, {0x3DA6AA14, 0xC9DD07E5}, {0x01517A40, 0xF16BD7CB}, {0xE8D5B990, 0x75D14E3F},
+ {0x3E2B506B, 0x90380C15}, {0xA67B8FCC, 0x486D87CB}, {0xA685CB57, 0x4E1FB9DC}, {0xE7DE92CF, 0x1C9D1883},
+ {0xE9D87985, 0xBA8B028A}, {0xD0B116FB, 0xFC254AB1}, {0x14AABC6E, 0xAA825897}, {0x3E6FB099, 0xC364459C},
+ {0x82558E96, 0x350D39A9}, {0x686FDE3A, 0x03BF26C1}, {0x14C0A0FF, 0x8E40D000}, {0xA71278F6, 0x1354C638},
+ {0xAFEA7BD6, 0x3A06888E}, {0x9CBD18DE, 0x44838927}, {0x5A8DEAC1, 0x47004480}, {0xC7B2D79F, 0x2E6D687B},
+ {0xCA54A841, 0xCF251663}, {0xD328F1D2, 0x791A34B6}, {0x2B8542A3, 0x7CFE99AE}, {0x88FFEA92, 0x1F55D2F1},
+ {0xC6CE0D25, 0x98C0CE8D}, {0xE699B9D2, 0x924C9D68}, {0x7051853D, 0x8A708852}, {0xDA89297D, 0xAE048E15},
+ {0xEE2A1CD4, 0x0742C200}, {0xED4DCA71, 0x5AB6E3B2}, {0x43F357D6, 0x4CCEFB03}, {0x2E55F29C, 0x9AA3B6F2},
+ {0xEB960597, 0x1B1DD76B}, {0x45A658F8, 0xA27DC8DA}, {0xC7FDCEEF, 0x33480562}, {0x29EA4E0C, 0x9758CF22},
+ {0x0340F806, 0xE477FA92}, {0x1ED4C2C5, 0x982865CC}, {0x7F519180, 0x7889444E}, {0xEA4ED5DA, 0xA1A6F8BA},
+ {0x47324DE9, 0x773A0536}, {0x26940591, 0xBAC94762}, {0x8C316DD5, 0xB3BE0112}, {0xC750E15C, 0x7C58E647},
+ {0xA92A0CBE, 0xFD933547}, {0x3F48BF2F, 0x807B9608}, {0x18926308, 0x7D4EC96B}, {0xD5A281D3, 0xCC42907E},
+ {0x62BE7B4F, 0xF897249E}, {0x460773FB, 0x1620725F}, {0x0AEE0510, 0xAB5FAB4A}, {0xFFC78832, 0xBAABD015},
+ {0xC4845296, 0x5DB8F462}, {0x3FC1AC73, 0x0D28427C}, {0x184BC342, 0x332859E5}, {0x63B44E53, 0x3D19E289},
+ {0xA1AC2DC1, 0x69AB6918}, {0xE5B2819F, 0x916E56F8}, {0x6B34747A, 0x8BD378C6}, {0x122429E6, 0xD6DFB3BD},
+ {0x75D8E38D, 0x9C3ACF9E}, {0xDBC291E7, 0x7E308854}, {0x482D7233, 0x8A113862}, {0xBEAA687E, 0xE7755A37},
+ {0xAC508B0A, 0x12D20FD7}, {0xC934CB6B, 0x4AAE097C}, {0xDA7C6DE6, 0x7A69B345}, {0xE89201F6, 0x668B1118},
+ {0x51CF85A1, 0x246C87F6}, {0x43AB534E, 0xFE4B73EC}, {0xADD1D445, 0x820ED05C}, {0xF16CA70E, 0x1F12CE99},
+ {0x038DB62B, 0x4AEBEDF1}, {0x1282D472, 0xCEBF4A1F}, {0xCE4C21E3, 0x91601DBA}, {0xEDE74EF1, 0xCBDCCD3D},
+ {0x20F5D0F9, 0xD1FD89DD}, {0x3F018306, 0xBAEB7BD4}, {0x81E1132D, 0x04F08354}, {0x26C8CEE0, 0x356D6FCC},
+ {0x27DDD8BF, 0x957767CD}, {0x76204CBB, 0xF3D2D82B}, {0x566D2F7E, 0xC47F573E}, {0xDA87DFCA, 0xE17C86D4},
+ {0x8F5AA818, 0x99DEEB83}, {0x6FA79579, 0xC25F8CF4}, {0xBF9793D4, 0xBB66990B}, {0x269723CF, 0x62188584},
+ {0x526C006C, 0x925C3EB6}, {0x4432B012, 0xACDD7BE8}, {0x7D248B2F, 0x3177CBC6}, {0xD33DB5A1, 0xB7EFBBF1},
+ {0xA0FB8A5D, 0x870E6F23}, {0x9860773A, 0x8B1892B3}, {0xB6368D30, 0x12AB0938}, {0x98BA38D7, 0xC4F9E351},
+ {0x36D7809B, 0x7C734D45}, {0x08F9658E, 0x2841189C}, {0x3A07E6A0, 0x77C7870C}, {0x1BE2A102, 0xC68A61C5},
+ {0x4C495B43, 0xFDA4457B}, {0x273ACFCD, 0xA3786040}, {0x5A254CCF, 0xF2129819}, {0x1DD56958, 0x25A47F30},
+ {0x58020E7D, 0x22D2F37F}, {0x02A8EAF6, 0xBD798B1C}, {0x95DBE088, 0x9D8D1B03}, {0x25819D0B, 0xEA6B5B6B},
+ {0x81D27F6A, 0x6A6CCADE}, {0x8D431DFB, 0xFD120975}, {0x0A25A1E1, 0x7931F2CF}, {0x9066C2D5, 0x5B73EB75},
+ {0xBF6A333B, 0x3624B9D0}, {0x2AF570AC, 0x1274D741}, {0x5B661965, 0xCE5DE2AB}, {0x08A0BEE2, 0x9C64C785},
+ {0x2AA1AC75, 0x4DE65552}, {0xC3CB72E8, 0x0B503B28}, {0x1DEF7721, 0xFA5F7828}, {0xA5842115, 0xC439FADB},
+ {0x69F55206, 0x8E5BB1CB}, {0x247FF663, 0xE8043E1B}, {0xAE8F24AF, 0xB813D20F}, {0xE6FAABEC, 0x09F6FAEA},
+ {0x9DE31492, 0xC8638ABD}, {0xEF6138F4, 0x8F7887C1}, {0xDEE21DA0, 0x384325D4}, {0x1DB27575, 0x5F3D0EF6},
+ {0x163BB2BC, 0x8A8F12F4}, {0xE0687C62, 0xF4B831A9}, {0xF51B0836, 0x3CD8167C}, {0xEE879C45, 0x8EE58BFA},
+ {0x89EF0EB2, 0x7760019E}, {0x2EF4CFC1, 0xC6F5B372}, {0x6FD80C0F, 0xFA9C741B}, {0x7CE950CE, 0xD4CFDD8E},
+ {0x44DF7ED9, 0x30831E42}, {0x594EAAE3, 0x797F9DD3}, {0x9589A011, 0xFF02E19F}, {0xFCDF8326, 0xE951740C},
+ {0xF616875B, 0xB502D094}, {0x7641685F, 0xCC2F0C31}, {0x727DD1BE, 0x73C328E1}, {0xA6EF81D9, 0x8F299CCA},
+ {0xB1ECBCC6, 0xA655B46A}, {0xCB3BCBDA, 0x22A44A39}, {0xBFE2C052, 0x4556E5FC}, {0x3FE78E83, 0x7384F18E},
+ {0x91F3C33A, 0x25F8493F}, {0x293FC0C1, 0x2615FAE3}, {0x020EED7C, 0xF9B27F13}, {0x9A6F8413, 0xAAC1D580},
+ {0xBBC11D0B, 0x7E20CEE3}, {0x79630764, 0x952C60B5}, {0x0870E02D, 0x43B6EC06}, {0xCD2D162F, 0xE4CA870D},
+ {0xB7486230, 0x45FC579E}, {0x2D3814C2, 0x0B4169B8}, {0xE4943902, 0x6ECDEF6D}, {0xBD2F26BB, 0xDEE6450B},
+ {0x4B4EC5F8, 0x0E9ED5EA}, {0x77386A25, 0x8D5C4594}, {0xF724AB88, 0x31C9C0E0}, {0x30872F23, 0x01E094E8},
+ {0x909AB4B8, 0x2AFA5BC4}, {0xEBF5CCD3, 0x405B0A42}, {0xA8EBB3D2, 0xE64F8273}, {0x83332AD0, 0x7713F446},
+ {0x4C65F5CF, 0x6B75C1DE}, {0xB7733A0B, 0x470FD1E4}, {0x11B8EC83, 0x8B84324F}, {0x3F322D07, 0x7F063141},
+ {0xE9F849AD, 0x8EF7AE0A}, {0x3CD67453, 0xC03488F4}, {0xF76B8774, 0xA0AFFE43}, {0x5F8124F4, 0x5075F878},
+ {0x9ABA6E15, 0x04EF9C24}, {0x768B49DA, 0x1E898F06}, {0x0E16DD65, 0xA1469E5B}, {0xDC34C6C1, 0xAD971FB3},
+ {0x6E8F72DC, 0x1EBD087F}, {0xF3616F05, 0xFD5396D2}, {0xB603453F, 0x82E3BF1A}, {0x2B6C013E, 0xD7946F37},
+ {0x24CB0A2E, 0xCFEE5259}, {0xFED1C980, 0x8E817D5E}, {0xA4A83ACF, 0xB78BD1FB}, {0xC719225C, 0xD4CC8CBF},
+ {0xA1EB6CD2, 0x295AA39E}, {0x31281D1F, 0xDED38D5D}, {0x269AB874, 0xA1711C6E}, {0x79A86EC6, 0xBE222778},
+ {0x7FF8FD0F, 0xACE28009}, {0xE373BF05, 0x3724436D}, {0x54F08AE9, 0x9F9065AE}, {0x7356021D, 0x89A92EB8},
+ {0xEDBC99C1, 0xB0BF5790}, {0xD0BDA09A, 0xCE2E7C8E}, {0x872A97AD, 0x355F85A6}, {0x071A6C9B, 0x3CC41DE6},
+ {0xC9A63095, 0x3B9C2377}, {0xC1AD6B88, 0x5DCE9D65}, {0xE092698D, 0xBB4CD4E6}, {0x10B934F1, 0xB09648C6},
+ {0xE7EEB8E9, 0x435BD0FC}, {0x8A933D9D, 0x4ABF71C3}, {0x046C2528, 0x5442D82D}, {0xB7B4DB09, 0xFCD17A91},
+ {0xDDAA78D5, 0x5EEBEE18}, {0xD30037A7, 0x8BD67399}, {0xB6333B54, 0xB5D1269C}, {0x23D38EC2, 0xE0888C14},
+ {0x48CCA45B, 0xEAD0696D}, {0x42C703E8, 0xF226A913}, {0x36AD0B87, 0xEE851F0A}, {0x71E60B21, 0x3B932E43},
+ {0xCD5BA6D7, 0xCEB49DFA}, {0xDA9B0645, 0xC2EAF0F3}, {0xBA22CD25, 0x34A11FAA}, {0x9205A2D6, 0x8E048F5B},
+ {0xABD56F74, 0xB3B7C79F}, {0xCFD3014F, 0x8526D134}, {0xB30D7516, 0x0F0BCA16}, {0xCFDA6864, 0x5C3787D3},
+ {0x437345AF, 0x9D78BEA3}, {0x246271BE, 0x22165B68}, {0x22E8D205, 0x75BC77E8}, {0xAD403541, 0x45EC57B1},
+ {0xB43CD115, 0x75869393}, {0xDB0035A6, 0xB3D1160B}, {0x72CD5E2D, 0xA63F1F0D}, {0x5E2D994E, 0xBFB467CB},
+ {0x42E023CB, 0x1D203D8D}, {0x0AECCECA, 0x99AB9937}, {0x0E4517BD, 0x884C9687}, {0x67534095, 0x2D495276},
+ {0xA4F70DB9, 0x106A1B5B}, {0xE8C4316F, 0x3B1F2D7D}, {0x03325D66, 0x1482815E}, {0x769BFE98, 0x4C8016E9},
+ {0xB82486BD, 0x3BC61699}, {0x1AA49E62, 0xAFB7F79B}, {0x1F0A1731, 0x4D8438D9}, {0xFF441E03, 0x7A25A1CC},
+ {0xCFB636D3, 0x9FF6A8CE}, {0x08965564, 0x35120266}, {0xE5FFEF52, 0xBFA92B53}, {0xB8132A6A, 0x12A01CDC},
+ {0x56F972D3, 0xF79F5E4D}, {0xBDC5260B, 0xD7E2CC9B}, {0xEFF6A34D, 0x28F1FFF5}, {0x0DE0C5E6, 0x4581E362},
+ {0x455A829A, 0xA588D426}, {0xBBFBA545, 0x79EA46A1}, {0x4FDABCB7, 0xF8D39FD4}, {0x3084B057, 0x909C2529},
+ {0xC712031F, 0xA0C7A905}, {0x1704BFAA, 0x65E35606}, {0xE09F294A, 0xC23A2DCB}, {0x5973DF5F, 0x3054EDED},
+ {0x8709FAFA, 0xADA4846E}, {0x3B96C11B, 0x2717F877}, {0x3AD069FF, 0x3CC11A7F}, {0x58D0BF52, 0x817FA7A6},
+ {0x3E2B192E, 0x64B045A7}, {0xBE8F745C, 0x0875868E}, {0x1B080B58, 0x9FBF75DA}, {0x2ED9B1AC, 0xE7820556},
+ {0x29B62FD8, 0x2A63D72B}, {0x5C4F8207, 0xDE9119DB}, {0xDC644371, 0x3C72C022}, {0xADDCDEA1, 0xE2EA2A85},
+ {0xE158DAA1, 0x04BE46F0}, {0x81A1A03F, 0x1D6668AD}, {0x4D605B7C, 0xEE0B361B}, {0xB60A99ED, 0x2FFE3892},
+ {0xBC9D8879, 0x3691E3C3}, {0x9406BD37, 0xF3C50077}, {0x3BEA4EFC, 0x96FCFF6B}, {0x7691E034, 0x3B4C399F},
+ {0x8CFD82A2, 0x2EEA1A2A}, {0x12EDE7FB, 0xA3E82609}, {0xA69E4823, 0x4C235A00}, {0xB19CB2E9, 0x04FB8D20},
+ {0xBB65B36E, 0xC51A2F46}, {0xF788F61C, 0x4B026939}, {0x8DB489D0, 0x44C9EB2A}, {0xF49D6C1F, 0x8E57F1B8},
+ {0x0C465E6D, 0xA8207EAF}, {0xD59962F4, 0xD8575158}, {0x4B4A0556, 0xFB94C4D5}, {0xA0CEFFE2, 0xDB9BF7BB},
+ {0x778B0FD8, 0xE0F27124}, {0x4D8DB74C, 0x2110255B}, {0xB99B17C8, 0x701C8012}, {0xCCCF7E17, 0xDCFC8EE3},
+ {0xE3118810, 0x8E548682}, {0xA92AB337, 0x6332D480}, {0xA2ABFAA5, 0xDF23987A}, {0xDC1442EB, 0x7350F63C},
+ {0xE75487FC, 0xD49E8EF1}, {0xEF564E1B, 0xEA0CF975}, {0xF96D49AB, 0x3068B064}, {0x41A27D8C, 0xDE866111},
+ {0xBFB22BC5, 0xB340A2DA}, {0xDE3E6C40, 0xB6C585D2}, {0xC9885DA0, 0xF4194967}, {0xC173E8AE, 0x4F586291},
+ {0x29255C40, 0x5A737E7A}, {0x7BE0E463, 0xD366F1B9}, {0x3898F7AF, 0xA92DDC99}, {0x2D93AB27, 0x63ABAD7B},
+ {0x542A96F9, 0xF09786D4}, {0x371E2F19, 0x23446DA3}, {0x89F59953, 0xB74C5D0C}, {0x91C21D1F, 0xDA038064},
+ {0xFDA1741B, 0x1965F264}, {0x234268A4, 0x762D487E}, {0xFD25B25E, 0xF2A95BD6}, {0xC1B0E287, 0x088FBB41},
+ {0x1DA1AE68, 0x73DCDAA5}, {0x2D89FAA9, 0x4B95E9E1}, {0x4853807B, 0x74E17A42}, {0x9860F019, 0x402864C4},
+ {0x69F8F6C4, 0xE5CC625E}, {0x1B97C870, 0x59A68B51}, {0xE1676D25, 0x7809CCB4}, {0x7A73C9F1, 0xB70BFA19},
+ {0xB5BCF260, 0x73F5C554}, {0x097D8C95, 0xBFBDBE4E}, {0xD991108E, 0x02A31119}, {0x3BA1C66A, 0x6E7D7E67},
+ {0x68B6A787, 0x1B9DD0FD}, {0x7A15DB0F, 0xF02061D3}, {0x1EF041AA, 0x8814BA6E}, {0x22813922, 0x0C5453DB},
+ {0x1BEFE151, 0x8A721066}, {0x9260D73E, 0x003FFE47}, {0x883F4564, 0xC7CD9D82}, {0x535B8D86, 0x96AE829C},
+ {0x8F0505C1, 0x0964A789}, {0x7A65AE57, 0x2B4B78C5}, {0x0655E472, 0xF5DABA72}, {0x0FF146AD, 0x3EE3C9A2},
+ {0xC7329798, 0xEC47FCA4}, {0x28844BC2, 0x5B153CA6}, {0x024DAC39, 0x44545D09}, {0x832955FB, 0xBDB8D798},
+ {0xE35DBEFB, 0x31E8F567}, {0x89E5783E, 0xDEE3D950}, {0xEE07E598, 0xD38C3775}, {0x763715CD, 0x254670FA},
+ {0x224C1887, 0x2E7BD74B}, {0xDC5E1AA8, 0x412C51E4}, {0x6200EBFF, 0x681BC992}, {0xD24DA580, 0xD64F2E2B},
+ {0x536A5EC9, 0xDCD7382E}, {0x597DE064, 0xF7968AEF}, {0x141F2665, 0xF6DE7BC9}, {0xCA271AFC, 0xE36D98D9},
+ {0x9E504517, 0x1BC4E349}, {0x2AAFA8D9, 0xAC04A9C9}, {0xA453966C, 0x9F472464}, {0x36B015B1, 0xD56F1800},
+ {0x1D29BDBB, 0xC6303822}, {0xEB145594, 0xFAFEA4CC}, {0x60F9273A, 0x5D288C2F}, {0x16DC6967, 0x27567681},
+ {0x1CD31DD5, 0x54246A60}, {0x2EF05F51, 0x524593C2}, {0xD7DC9159, 0x27A7DCEF}, {0xDD491937, 0xEDCB7AAB},
+ {0xDB71BED1, 0x4F81DAF0}, {0xAEFEF292, 0x3F064484}, {0x807ED092, 0x60CEC8CF}, {0xBC8FEBD5, 0xA6317BFC},
+ {0x5B965BC5, 0x2626EF3C}, {0x3C826015, 0xBB46BD13}, {0x71A2FD77, 0x26D1D615}, {0x7DCEECCD, 0x92299BC6},
+ {0x8F91102C, 0xC84898F6}, {0xC65CA40E, 0x8D5F3093}, {0x484CE392, 0xB26D1763}, {0x166E12F8, 0x812F89A3},
+ {0xB54CA7BD, 0xA2165B29}, {0xEEDE3C61, 0xABEB90D0}, {0xA1CE2C5D, 0x02409BD0}, {0x23824B98, 0x6A7454AA},
+ {0xDCE74395, 0x7C675145}, {0xEE2FE54A, 0xBA94CBA5}, {0x85239467, 0x3F5C2780}, {0xFD87A24C, 0x4F79C59C},
+ {0x34857AB9, 0xE63E19BA}, {0x8726DB2B, 0xDEA73797}, {0x8236309C, 0xB28CC7DD}, {0xB58E9518, 0x6E1BE818},
+ {0x364F08A9, 0x3A24118D}, {0x0667DDA6, 0x041CA58D}, {0x62FAB8F7, 0x0B3D73C2}, {0xBD4BD43F, 0x2C54523E},
+ {0xCD9924E3, 0x6355D3E3}, {0xC5F2DED4, 0x53AE5136}, {0xB6DBC812, 0xA4992460}, {0x74646965, 0xC4D8D62C},
+ {0x07818FE8, 0xA2A8175D}, {0xD4B688AC, 0xEF89671E}, {0x183D1667, 0xCC09B0DB}, {0x95AB69D9, 0xF3BD1AC4},
+ {0x175B2FBE, 0x32CCA7CA}, {0xFFB37313, 0xEA3CD3C5}, {0x54EF894E, 0x75F06306}, {0xE8EA0F48, 0x507B505E},
+ {0xD9104B0E, 0xA3025F5F}, {0xBDB24FA2, 0x2F66BAC5}, {0x2284468D, 0xE25D2F8A}, {0xC54EAEE9, 0x6C1ABE90},
+ {0x492B7B6C, 0x965198B3}, {0x0F852D58, 0x1E3FE5B2}, {0x38DF9156, 0x4A0AB76B}, {0x56343164, 0x40D2F085},
+ {0x4D88249A, 0xC3D656B4}, {0xD4D8A173, 0x03586973}, {0x5A1F8D1B, 0xFE0598AC}, {0xD3E9CB30, 0x2AB8E797},
+ {0xF55399BB, 0x64CBC279}, {0x8F20CBF6, 0xCD459C0E}, {0xD5D03D7A, 0x2BF3446C}, {0x50AB7AB2, 0x2E7B33DC},
+ {0xB0D172F5, 0x297B83AD}, {0x575CE918, 0x9E8BD51D}, {0x4BE4FA4F, 0x8229B2B0}, {0x6ED88AF5, 0x16CD77C3},
+ {0xB810582A, 0x7D601A58}, {0x370309C7, 0x7D289CAD}, {0x12BD3B0C, 0x9797417D}, {0x43B9BB34, 0xB6F4984F},
+ {0x94CA7549, 0xB285645E}, {0x69CAE82C, 0x464C443F}, {0xA009C8E0, 0xBED5B48D}, {0xEFFA5B8E, 0x9CF5E8AB},
+ {0x92BFAEB6, 0x9DE703C6}, {0xCCA09A18, 0xEFD82C18}, {0x86C0ED83, 0x2A3B06A5}, {0x7872C4C0, 0x27A454B0},
+ {0x27D638A8, 0xC019F608}, {0x92FF6C19, 0xA9FAD1C2}, {0x1E10E11F, 0x34340C86}, {0xECCC1F96, 0x2D01366C},
+ {0xDE83DD8F, 0x98EFCEB9}, {0x7C99A460, 0xE7DC5D72}, {0xCD39C4FB, 0xADC4321A}, {0x7F2D11C2, 0x7C9667EF},
+ {0x458E2268, 0x5699B758}, {0x8AEFB324, 0x47B44566}, {0x21CAAB1B, 0xD0A1FE12}, {0xCF74EF0C, 0xBED35F8F},
+ {0x912A44E5, 0x80C8E604}, {0x0A275321, 0x1F84A260}, {0x82EF4D80, 0xE2D2CD11}, {0xF4581BC8, 0x5FDC7D51},
+ {0x0C8D4FB3, 0x0BB2496B}, {0x49520620, 0xCAB66AE3}, {0xCAB622E9, 0x5321774E}, {0xDCEA604D, 0x0BB66106},
+ {0x3A971C61, 0x2460CEA7}, {0xF75131E7, 0x894A8D34}, {0x9A9394F9, 0x3A80B7C0}, {0xA8AD6149, 0xBAE1CB9A},
+ {0xE0B2E4CA, 0xA0955FE9}, {0xB0A06B32, 0x21ED379B}, {0x36932866, 0x7C05473A}, {0x4EEB32CF, 0x9D14478F},
+ {0xD87B9E4F, 0x2D061FAA}, {0x5662D883, 0x151CC32C}, {0xE69CE57D, 0xAAB17822}, {0xC665EACA, 0x861BC039},
+ {0xE19159F9, 0xA7A35EC5}, {0x59A36221, 0x0D3AB2AE}, {0xE5AB2523, 0x41D50346}, {0x7A2B97C7, 0xFAA1ECE7},
+ {0x70E42B0A, 0xF2EB3A80}, {0x9F5C4470, 0xBC1E4A6F}, {0xCDE78A9A, 0xCE68F9A3}, {0x18379DBE, 0x840EDE09},
+ {0x06FB6884, 0x73D93281}, {0x0B1ED9CB, 0xA87E0650}, {0x910A8E27, 0x7F630569}, {0xD5CE7237, 0xB7B87A4F},
+ {0xC15DAEF5, 0xEFE7F5C2}, {0xA0FD7ECB, 0x1D972F79}, {0xE3243467, 0x51CB3CDF}, {0xA0744178, 0x13317E0A},
+ {0xF9906A3B, 0x9A376710}, {0xF78DC8C6, 0x4965D2CD}, {0x2C8CB1F9, 0xD4E7B6C2}, {0x4E568435, 0x06998B4C},
+ {0xB2E533F3, 0x4745E8D6}, {0xCD5BB061, 0x28829A93}, {0xD17255E7, 0x548B220E}, {0x56E68D20, 0x14F70FC6},
+ {0x75C6F023, 0x3A6621EA}, {0xC18591A5, 0x8BFBD1A3}, {0x0535C6F9, 0xA3601E0C}, {0x1707ED0E, 0x555B9130},
+ {0x992641D6, 0x6B73841A}, {0x28A23F5A, 0xE424D770}, {0xE06008D5, 0xA9D9C309}, {0x0BCE7F7F, 0x9D274D72},
+ {0x3714F281, 0xDFADAF10}, {0x1C05B445, 0x61D6DB43}, {0xE0EDC346, 0xF86AFBE7}, {0x2A7B76FC, 0x2FCA9A6A},
+ {0x2D80C38E, 0x96D0A37F}, {0x7BC087D5, 0xA73E258B}, {0xEB86DA9C, 0x4A1E6319}, {0x99549934, 0x1A439431},
+ {0x376F5A6C, 0xA76514D0}, {0x82DE13E2, 0x16283F0F}, {0x85CEAFAD, 0x3BF28471}, {0x22B44B4E, 0x734EBAAC},
+ {0x08AFA04E, 0x15B89A65}, {0x59CA228A, 0xAFF321D1}, {0x52D781A5, 0x02E031FD}, {0x3575B4F9, 0x658C5D6E},
+ {0xF3A651F3, 0x91B269ED}, {0xC43F608B, 0x22F969F3}, {0xC6D53868, 0xF86338B0}, {0x6D29DD87, 0x46B0B404},
+ {0x8C49D573, 0xCD05A1BB}, {0x942F20A1, 0xCFFE4923}, {0x16F23DC3, 0xB2B5582D}, {0x167481C6, 0x20BC99D4},
+ {0x6FBFB7C1, 0x700B10FB}, {0xAE62DE10, 0x20E70B8C}, {0xDEF58A44, 0xA58D3D30}, {0x2A9E73DF, 0xF5D8C95E},
+ {0x51D81179, 0xA21DF808}, {0x17ED8017, 0xB6BB6152}, {0x4088476F, 0xE8422157}, {0xC020C526, 0x47484221},
+ {0xE9D3A3E8, 0xDDC1B9C5}, {0x45294DAC, 0x3A5DA575}, {0xFCD181C8, 0x3019D37D}, {0x1A64978F, 0xD3E9CCD0},
+ {0x227A6059, 0xC1E1F116}, {0x984C3A41, 0xCB6E4E85}, {0xB52B7042, 0xD0F1AAEF}, {0x81E69903, 0x197EE99B},
+ {0x42D717C5, 0xC4318918}, {0x3DFC0FD5, 0xCAF4FD04}, {0xAF2C37D8, 0x2615ED8C}, {0x52205E24, 0x9BDF5E78},
+ {0xC6E8BF90, 0xCF02C46F}, {0xF2FCD996, 0x204869FE}, {0xE74E7A75, 0x79094765}, {0xC144CA2B, 0x41A6F026},
+ {0x86A511F2, 0xA8FC40A8}, {0x1855F13F, 0x6E3C77AD}, {0xF9375892, 0xF1BEA7E8}, {0x33994B1C, 0xC78BAB12},
+ {0x6E56849A, 0x88B070A4}, {0x85129B43, 0x876CBFB5}, {0x34774CAF, 0xDEAD29FF}, {0xDA30B982, 0x0BE96D81},
+ {0x01EC1917, 0x508F96E0}, {0x235EDC6F, 0xE0AEC5A8}, {0xCD057973, 0x2AE86E6D}, {0x75B7B053, 0x98075B6E},
+ {0xE8AB7AF2, 0xA9D81841}, {0x8424FB6E, 0x4813DF3F}, {0x3975B5D0, 0xEEC86009}, {0xF74F2B0C, 0xB8C73B7B},
+ {0xB7A5D132, 0xA3E0E5CB}, {0x53C42224, 0x13B83F62}, {0xFB7CC54B, 0xCFE49C8B}, {0xB10E728A, 0x4960462A},
+ {0x8F1BA08F, 0x084810F8}, {0xF35E4094, 0xD81662F0}, {0x625F1D7C, 0x4BB8F563}, {0x5333F6A4, 0x328DABED},
+ {0xAE4826AF, 0xB418A0C8}, {0x941FDB58, 0x066F0B12}, {0x8A3595B8, 0xAC7013E6}, {0x2B25C2F0, 0x5CC6DFA0},
+ {0xA0DB07D9, 0x9100E456}, {0xCFD349BF, 0xD1E2DE6D}, {0x073FDCDA, 0xCC102360}, {0x00E6170B, 0x9570A8CC},
+ {0x3FF52311, 0xED6F0AC0}, {0xD5192A45, 0xBD4C8C6B}, {0x4DCF1436, 0xB04C04CB}, {0xD9639660, 0x94244D22},
+ {0x8D066846, 0x8AC711F1}, {0xD9E248B9, 0xEC6D576B}, {0x047225C0, 0x715C2B5B}, {0xCAE2FD09, 0xA6C62F70},
+ {0x74FF34E7, 0x170A3D6F}, {0x62956971, 0xCDB69444}, {0x755FD437, 0x1020951D}, {0xCE02E38A, 0x0F9E35AF},
+ {0x619DB164, 0x927C11BF}, {0x5DA9EFD0, 0x0BE0BD5D}, {0xD8CB0BD6, 0x10802CB2}, {0x1A14A7B8, 0xE23D9E6D},
+ {0x768E454A, 0x220861EB}, {0xB68971A4, 0x506E3366}, {0xAEDC6225, 0x62EAEFF9}, {0x8E3D06D5, 0x54C480C7},
+ {0x3C7DA4DD, 0xCF65AE89}, {0x6D7550C0, 0xC2227701}, {0xF4C4527D, 0x52F73782}, {0x45DDF497, 0x156EB439},
+ {0x47E653D7, 0x4277B1CB}, {0x63A144D7, 0xAD8A54FE}, {0x4EA723F7, 0x4FC8FE63}, {0xBCC6D0DB, 0x75648A9C},
+ {0x410505C0, 0xFB109EB5}, {0xE1C91E6F, 0x4BE07536}, {0x81617ABD, 0xADE76CBB}, {0x436722A0, 0x01A265DB},
+ {0xC5B5455D, 0x082ED3CA}, {0xA38363C6, 0x9A512FB1}, {0xA7C1F222, 0x2B36F759}, {0x257E9A3A, 0x6AB85A50},
+ {0x3978D196, 0x507F74C7}, {0x25850FFC, 0x6873D584}, {0xCB8FFD18, 0x3E99BBEE}, {0xE2F7A40B, 0x66497B44},
+ {0x9E4EC7F1, 0x6D6E82BC}, {0xC5B225C2, 0x0CB17B83}, {0x1A1F88DE, 0x8C10AA05}, {0x0FD72DD1, 0x7B4E3FC7},
+ {0xF5EA8873, 0x1283EE4B}, {0xC2780C9C, 0xACD9285D}, {0xF195C954, 0xC48C575A}, {0x0B85C40B, 0x050FB697},
+ {0x7620017B, 0xFFA8E209}, {0x93AB870D, 0x9EAD5911}, {0xE46A11F5, 0xA11B0508}, {0x7229EA9E, 0xBF997B42},
+ {0x88669937, 0x709936FD}, {0x1B446157, 0x1E3BB2E5}, {0x87EDF66E, 0x461F92A0}, {0xA28E46BF, 0x74AFB69E},
+ {0xED0E97EC, 0x8755C507}, {0xF28D3BE4, 0xFBBEB449}, {0x5F1E8D7C, 0x3CAC4030}, {0xF0F3D0D9, 0x59DC037A},
+ {0x9012A331, 0x704AFF9A}, {0x34139347, 0x413BDF15}, {0xA32B6EC9, 0x9664BB73}, {0xE4F83424, 0x3A4AEC28},
+ {0x633EBD61, 0xE3E830A5}, {0x84C11CE7, 0x3A7183E3}, {0x9B4F53EC, 0xFAB83699}, {0x141B61F1, 0x8A21B772},
+ {0xF5739A79, 0x1EDF07B0}, {0xDB999235, 0xA6F20AB1}, {0xD800509E, 0x204BA438}, {0xE907FC5A, 0xF763DBB9},
+ {0xA0D95082, 0x8FBFFF0B}, {0x185458F6, 0x7D17918F}, {0xFD0AD18C, 0x3F4AE778}, {0xCCCEE71C, 0x68B81AA0},
+ {0x2D205E1D, 0xF4875F34}, {0x1F68A7E3, 0x3D45925B}, {0x0393EAC4, 0x06DE6566}, {0x837EF930, 0x6F878DCB},
+ {0x072751A4, 0x1BBF7327}, {0x54671BFD, 0xD5334E17}, {0x258D41D1, 0xDBECB759}, {0xEB1B7032, 0x1629419E},
+ {0x08DA7D4B, 0x0EF08B6F}, {0x8BE24BBE, 0x16128F78}, {0x6806C0F0, 0xE2654FDF}, {0x203E2D27, 0x6A787283},
+ {0xD8F4CD8C, 0x211BC056}, {0x1E319CFD, 0xFADC9B46}, {0xA04E644A, 0x520362A8}, {0x5E40F0B3, 0x40DF83CC},
+ {0x15C397D7, 0xE78B3C5D}, {0x1405575B, 0xA76D63C3}, {0x7AB39C83, 0x6E700E73}, {0xE5B4D358, 0x03BC93EB},
+ {0x66F570DD, 0xE5D55AA5}, {0xAED268AB, 0xF1C8A0EA}, {0x26D99F2A, 0x97349E4A}, {0xC6249A56, 0x92108C49},
+ {0x64FE986D, 0xC8F8068C}, {0x9039D2D4, 0x18F7D15B}, {0x5DA341E7, 0x58EFF10C}, {0x6390B25E, 0x5909E1B2},
+ {0x8CB23D81, 0xE931B851}, {0x2CB6A4BC, 0x76BBD812}, {0xE6FA30DD, 0x587F4A26}, {0xA9C2D038, 0x0FAFADDD},
+ {0xFC4159E5, 0xEA8FAC0D}, {0x6E79EA30, 0x45D2BB7E}, {0x3EFA051B, 0x8DC58EAE}, {0x506FDAF5, 0x26A75B48},
+ {0x143FFB94, 0x3AEFE67B}, {0x5441BB00, 0x4D824E29}, {0x5F11AC66, 0xAC0924D0}, {0xBE77D780, 0x5E77C3FF},
+ {0x24969EF7, 0xD4B4FCC7}, {0x06B63E90, 0x95E69C30}, {0x33DB2A05, 0xC978F89E}, {0x1E60AFE5, 0x4824A37E},
+ {0xDD4E080A, 0x932E7B6E}, {0x89EDBFF3, 0xFA4855BD}, {0x759914C9, 0x93D5DA16}, {0xCF60BE3C, 0xBDF0D503},
+ {0x43913DF4, 0x268250E0}, {0x6F94819B, 0x5E44A72D}, {0x5EED3B2F, 0x7C85C88F}, {0x0815C9B2, 0x563BFF33},
+ {0x0004342E, 0xFE8CF1EC}, {0x2A9F1698, 0x7CF23666}, {0x1249C9B6, 0x85AAD726}, {0x990218E6, 0xCB88975A},
+ {0xFC1D8430, 0x4327CE3C}, {0x9A6C5870, 0x04CF68FF}, {0x3DB8662B, 0x9DB8AE39}, {0x6EB401AB, 0x9F2712DE},
+ {0x465C5D9D, 0x009BB2BF}, {0x90F83135, 0xB2914DD4}, {0xB4A386DF, 0xB388972F}, {0x810FE026, 0x0EA0F792},
+ {0x613452ED, 0x6A062966}, {0x8CD113D4, 0xE37EBDFB}, {0xEAFA4DFA, 0x0CF8AD9E}, {0x62DD739F, 0x992DC667},
+ {0x04825996, 0x7182B6F6}, {0xD9008F4D, 0xFCC6E3AA}, {0xEDA882D2, 0x59219B39}, {0xC302082B, 0x0FA88BDF},
+ {0x8747A5F1, 0xB30604EB}, {0xC400593D, 0x419A31E6}, {0xAD7D1D44, 0x07B20B72}, {0xF427EB91, 0x831F3232},
+ {0x98D5604A, 0x3ACB7D6F}, {0x987653BB, 0x41F2FF2B}, {0x0E24001C, 0xFE1B3F8F}, {0x10F8A400, 0x7DBF5D55},
+ {0x365E9A66, 0x6E5CE6A1}, {0xF5861736, 0x12D3330F}, {0x04CB4B6F, 0x0D68C6E3}, {0x9BB44294, 0x2EFEA007},
+ {0xE36BB71F, 0x7027E0EE}, {0x90EC7732, 0xD3432D3A}, {0xF160DFDF, 0x8AC31F17}, {0xD91F6F8E, 0x67C0352F},
+ {0x4C83D14E, 0x20F14C65}, {0xF845221F, 0x46FD477A}, {0x89F4D045, 0xDAF57250}, {0xE0557191, 0x34C9BF21},
+ {0x6643FF7A, 0x67E16F48}, {0x3A16C79B, 0x828C88AB}, {0x58D1B98A, 0x40E86747}, {0xB6C9710B, 0x290C6573},
+ {0x8CE5CFE9, 0xAFC01F6B}, {0xD5B624F9, 0x6AC84485}, {0x04D28BAE, 0x8D094BFF}, {0x89C5A7B8, 0x618C9726},
+ {0xEEEFA92B, 0xD6D0D466}, {0xA7FA28D4, 0xD137F27D}, {0xF3C283C0, 0xFCC4130B}, {0x1D1FE6C9, 0xA0A292FF},
+ {0x71F78440, 0xD539B491}, {0x28B9192C, 0xB04FAA40}, {0x54C52486, 0x1A6879D0}, {0x0FEFD24F, 0x67417AD1},
+ {0xA573BB12, 0x8DFB7935}, {0x47724C8F, 0xF2543902}, {0xF2CDE422, 0x358DFE1A}, {0xF869B1A9, 0xC71396EE},
+ {0xC986298A, 0x49FC3381}, {0xFAC18DDD, 0xA36C405A}, {0x9C4F94D4, 0xDAFC4050}, {0x0FE4C199, 0xA073B54A},
+ {0xC1BA189E, 0x3EA730D5}, {0x7A3BA2D3, 0xDDA9B986}, {0xE9619F32, 0x3F832B64}, {0x443300FE, 0x75CC2334},
+ {0x67E4C7B1, 0xDD8B175E}, {0x9B6CB7F7, 0xD7633DD1}, {0x9E872C72, 0xF43BCC87}, {0xE10FD216, 0x1C04EFB5},
+ {0x61E90104, 0x5B2D06DC}, {0x39070C34, 0x0C10D900}, {0x89BEC703, 0xAFDD2DFF}, {0xBDFF4FFC, 0xEFDB773E},
+ {0xAC47D51E, 0x4D96C0D3}, {0x62F31E41, 0xDD84265A}, {0x178EE81E, 0x51964944}, {0x10BE4F3E, 0xE3994180},
+ {0x2B20AA9B, 0x2FDC4B68}, {0x072B65A6, 0x7A76C794}, {0x8F5EB0DD, 0xD4544759}, {0x84C3A0C2, 0xBE23227A},
+ {0x9008DE1E, 0xE1096F87}, {0x064078C2, 0x515C536C}, {0x45181C26, 0x74F18E5F}, {0x9447D0F5, 0x74DB88B6},
+ {0xD6A35788, 0xCD3DCB09}, {0x9649A0F2, 0x4842705B}, {0x29113A45, 0xDACF1EC2}, {0xD2595A7D, 0xC33E2027},
+ {0xE28DDC70, 0x2447D4FB}, {0x64CD7FDE, 0x57B8D2B3}, {0x4CF4FB55, 0x892978E0}, {0xDE046EEF, 0x6676E80B},
+ {0x464EB3F9, 0x9D3FE261}, {0x2CF0E078, 0x83DFEA75}, {0x26547FD8, 0xF509DFCA}, {0xD5A19BA3, 0xD11E36D3},
+ {0x66DA7327, 0x60EB663D}, {0x472814A0, 0x6D3E2C1C}, {0x0AC16B1B, 0xDB7114E2}, {0x0D775186, 0x8E6FD40B},
+ {0xAE619F0A, 0x83D53984}, {0x77A89D35, 0x25D4C762}, {0x1A04FB44, 0x1C608056}, {0x1B82CEED, 0x068ADF17},
+ {0xF7FB0078, 0xEB26A0A9}, {0xD984F676, 0xF3A777FF}, {0x8F771D2D, 0x0E7AA644}, {0x3503EAA9, 0x3E67FCA1},
+ {0x12C9E355, 0xB63D7288}, {0x9F46D8D4, 0xE5C5B243}, {0x2AEF2676, 0x6FE07712}, {0xB0190F8C, 0x92A5AC60},
+ {0xCDF68D83, 0x87F032AB}, {0xD888D6E5, 0x7115B5B1}, {0xC28A91D5, 0x33DAFF4C}, {0x8EDA0643, 0xC0D673E0},
+ {0x49B99583, 0xA7F163BC}, {0xF885C638, 0xE13A75F8}, {0x1BF88E6A, 0xF3D77208}, {0xFDC47499, 0x75D6EFB0},
+ {0xD27E8F13, 0x105CDD63}, {0xA0F3A3C4, 0x702F5BB6}, {0x6A3879F8, 0xFAE622A9}, {0x3B6D91BF, 0xCBA3EF85},
+ {0x9C3031E8, 0xF97D8D1D}, {0xFBA0EF10, 0xB1193124}, {0xAD0991E3, 0xE0B35C9B}, {0x05B982EE, 0x8FF7042E},
+ {0x7A2AD3AA, 0x8CBCA83F}, {0x38667C99, 0xA9ECC4AD}, {0x42635715, 0xBF5D4B45}, {0xB2A4EB68, 0x5F872C14},
+ {0x1E6BB229, 0xC618CBF2}, {0x7AC56E24, 0xB96586DD}, {0x93FB693B, 0x2FD5395F}, {0xE791FEBA, 0xBDD12D6B},
+ {0x9B6EFF50, 0xF558B241}, {0xA9EA41D1, 0xEF677300}, {0x7CB459A5, 0xCB6653D9}, {0x9564845C, 0x9855E45D},
+ {0x23D65665, 0xB030D00E}, {0x35D453E9, 0x2568AB7E}, {0x728C77D2, 0x392008B6}, {0x6DCCF4EB, 0x99DE053E},
+ {0xA591E675, 0x7F244786}, {0x2057E9B7, 0xECCA5ED9}, {0x5CFE049B, 0xDBB91AB4}, {0xED5FF44C, 0x02E6C1BB},
+ {0x2744B564, 0xB48323E9}, {0x632A772C, 0xD396B6F0}, {0xD45A12D3, 0x26026DE5}, {0xF40CE5D4, 0x9F668717},
+ {0x20F66B54, 0x81F3597F}, {0xD83386B0, 0x68E595B5}, {0x003D7856, 0xDD6B08EC}, {0x56672D86, 0x002FC4DF},
+ {0x1D53CC23, 0x4A585709}, {0x6B1BC5C8, 0x10966CA4}, {0x328ACE90, 0x8214C6E8}, {0x676AC479, 0x72DE4C3D},
+ {0xE8A0ABB4, 0x9D44F849}, {0xF2D5F203, 0x6C8E977F}, {0xBA1A8F09, 0x84C13DB3}, {0xB2F03424, 0x021FE476},
+ {0xE3F74319, 0xF135A27E}, {0x084F0BA3, 0x04A1F178}, {0x80BE8AC1, 0x82BE4C04}, {0x863670D6, 0x378985BC},
+ {0x631B5C4B, 0xDF365C10}, {0x26E88F92, 0x40DF1727}, {0x431951F5, 0x2C8F937D}, {0x878EF21D, 0xFC0DD467},
+ {0xE2885C36, 0x594B3529}, {0xCFEDB8D0, 0x2E17C12B}, {0xCB334FBE, 0x7E71FBF7}, {0xED2C3587, 0xEE65E6E1},
+ {0xD6BE4E39, 0xB5177B70}, {0x71677B27, 0x5DFE417D}, {0x34A2DECE, 0xCA24EB94}, {0x111502AC, 0x56E8C8E9},
+ {0xA2F32FE4, 0x6EEB6F4E}, {0x04FABAD2, 0xCFADC281}, {0x6A1AD251, 0x38A63AFF}, {0x76A84888, 0xF2089C87},
+ {0x8EFD57D5, 0xFCA58867}, {0xDEBA6882, 0xAAFD68DC}, {0x6922EB50, 0xC77B7FFF}, {0x17B2F720, 0xB24CCA1A},
+ {0xB6DE9DC6, 0x031525E0}, {0xB3B60D2B, 0xE488E563}, {0xCCCBE9F5, 0x3AC481B0}, {0x851B142E, 0xBA2DE7F8},
+ {0x1FD9AD23, 0xA5397B8F}, {0xF70BC5C8, 0x129A907B}, {0x94149E5E, 0x9786D756}, {0xD82BA6FD, 0xAA9D3CDD},
+ {0xE75128B5, 0x0394317A}, {0x602CB192, 0x49878B49}, {0x31E679ED, 0xAD463712}, {0xAA87202D, 0xDF376110},
+ {0x220F93D6, 0x139DCFC1}, {0xBE444000, 0x757F6268}, {0x0F007D2B, 0x724968B7}, {0xA13AE2E3, 0x43AA197D},
+ {0x68A1150C, 0x351CADDF}, {0x562206E7, 0xC87451F2}, {0xCC7557AA, 0xF2D72A72}, {0x9438FF97, 0x9503A927},
+ {0x0B6669DA, 0x14A7EC09}, {0xAC8F1355, 0xEF203FE7}, {0x93E813B3, 0xF12B4418}, {0xAB701551, 0x58E91C8E},
+ {0xCC7CF14E, 0x70067B51}, {0xDF6523D4, 0x33B8DFB4}, {0x79F53767, 0x72D12698}, {0x26C07F78, 0x8D079C54},
+ {0x51AF6068, 0x6DFB6620}, {0x7BC24B2D, 0x161E71DA}, {0x960465F9, 0x8BEA3E9D}, {0xB1AFC996, 0xBBCF1C6B},
+ {0xC2666D8D, 0x08F7AD4D}, {0x924AD656, 0x7C78124C}, {0x3EEEFBD4, 0xE600A80E}, {0xE744F867, 0x5E9BF087},
+ {0x390D352F, 0xD7133AF7}, {0x8E1E6797, 0x2834C8FD}, {0xEF4A5278, 0xFD58D3C8}, {0xD642B168, 0xA4A54DAA},
+ {0xBCC244D6, 0x642F14FF}, {0x87598F71, 0x0570D761}, {0xB8651D34, 0xF74470B4}, {0x48D9CF29, 0x10A1D772},
+ {0x9CE8CDB8, 0x2134E726}, {0x7C2A5EEF, 0xA0E8AA59}, {0x1BF16129, 0x7A54BB7A}, {0xBB4B4E34, 0xC0A33BF5},
+ {0x8F39AE5B, 0x25F9B969}, {0x27D861C6, 0x10B67C49}, {0x5CAD2E74, 0x42C39A0C}, {0x173E8327, 0x1E092FF8},
+ {0xF7281D19, 0x89D3E087}, {0xE62F11AB, 0x8CCA2489}, {0xF4E484A0, 0x93992FE1}, {0x0188C1B4, 0x9DD0E113},
+ {0x8E04967B, 0x34251551}, {0xC5D1D505, 0xF8929851}, {0xFF6A4B7B, 0x58D27B9C}, {0x03524218, 0xD959FBB0},
+ {0xAB39C4C3, 0x81624539}, {0x7A97AEB4, 0x406BE731}, {0x9C738753, 0x62ECBF1B}, {0xB648388D, 0xE5A9C7DA},
+ {0x05C497E6, 0x22882142}, {0xD22D8EF1, 0x87A7B1B1}, {0xA0F02A37, 0xF3498A58}, {0xA6F250A8, 0xB5123451},
+ {0xA40D3DCA, 0x9F682928}, {0x2C824F85, 0xD6C9DA6F}, {0x17AFA228, 0x284D930A}, {0x1F03AE31, 0x931C8864},
+ {0x65872DF2, 0xF607B2F5}, {0xCC2BD480, 0x135D96FF}, {0x807F00FA, 0x0C402FDF}, {0xC87C21D5, 0x42E3C50C},
+ {0xC44B9DCA, 0x0537A2E0}, {0x277CE76B, 0x872D8B27}, {0xCBB2EE4A, 0xB2057032}, {0x950B91E3, 0x3FFA1175},
+ {0x1EB63D86, 0x54C58BF6}, {0x08B48909, 0x856684AD}, {0x9FEE49D3, 0xAE9D909D}, {0x50BEF18A, 0x80FEB907},
+ {0xC15A747A, 0x34D6A683}, {0xD2854A3B, 0x124DB4B4}, {0x3FD7292A, 0x2A4E923A}, {0x0E93BB81, 0xE4FB1A33},
+ {0x417D2DD5, 0xD630A4F8}, {0x5BD65A11, 0x25B98D9E}, {0xA554F8AD, 0xDCF140F4}, {0x1DF7BCBE, 0x1D2CCBA5},
+ {0x6155180E, 0x72F1F047}, {0xD67190CE, 0x20066F55}, {0xE4CB9E29, 0x2CD47800}, {0x7EB0489D, 0xE79810C9},
+ {0x77ABCF9B, 0x21D1D93D}, {0x6374F1E1, 0x252E2995}, {0x568392E2, 0xC839122F}, {0x21EBD66B, 0x9A182203},
+ {0x8FD1B803, 0xE9867866}, {0xF25584F5, 0xF7F1436F}, {0xBBF7591F, 0xEB755948}, {0x6D3EF9C4, 0x2BB71078},
+ {0x7ED2E3FD, 0xCCDD6BDB}, {0x024C137E, 0xCE25D64A}, {0x920E10BC, 0xD090C8F4}, {0xFCB36986, 0x7F19A73F},
+ {0x8789D5AB, 0x400350B6}, {0x39DA818C, 0x19726178}, {0x8E15B258, 0x2CC3D311}, {0x4C1B09BE, 0xB61B5F83},
+ {0x2CFC4B82, 0x9F5F86FF}, {0xD2EBAF6C, 0xAF8046D2}, {0x2AADB8A9, 0x3B90DF05}, {0x33532572, 0x5874ADDA},
+ {0x23D86491, 0xA6B05FA5}, {0x7CE2D695, 0xF975FDC4}, {0x0CB3336F, 0x3967BBCC}, {0x50F7F07D, 0x9A1E0009},
+ {0xBF24DEDD, 0x9A37A06A}, {0x93D9538F, 0x95518188}, {0xFC12241F, 0x7FB91347}, {0x95D5910B, 0xFEE3EFD0},
+ {0x1008BD82, 0xF45BA448}, {0x505A0813, 0x94FB592F}, {0x66DE1F7A, 0xFC97676B}, {0xF7AF7B9F, 0x7F4DA3B5},
+ {0x7E5F913B, 0x11530CF1}, {0xA3C41ADA, 0x7A70602E}, {0x06C6D007, 0x7C9F5254}, {0xD5D0EDF5, 0xA5A41774},
+ {0x305E818E, 0x20DA1B86}, {0x2CDDD955, 0x80CF89F3}, {0xC4AF7D6A, 0x243422C6}, {0x2C3C48F0, 0xF9D5B5C5},
+ {0x5728FF26, 0x5D1B17E0}, {0x4717EAF5, 0xF29C8E57}, {0x3A04CF27, 0x872A881D}, {0xF8C99D1B, 0xCC8AD170},
+ {0xF853B0F5, 0xB12E5CED}, {0x478CF804, 0x2D375D3A}, {0x2B820F5C, 0x4DC4592F}, {0xDCCFAAAC, 0x5A5C0189},
+ {0xDE3FCEC0, 0x2A5431AE}, {0xD3ED8E6D, 0xC974F4D6}, {0xA5516D96, 0x4E542F08}, {0x3E3EDE2B, 0x1CB65F43},
+ {0x6514B132, 0x9921A660}, {0xE4C8F8DB, 0x041AE6BA}, {0x8D685333, 0x99DF18B5}, {0xB4267A3B, 0x815CB776},
+ {0x5CF0C9B0, 0xB56CBF6D}, {0x7ED0E0E3, 0x14084B6F}, {0x2A1B0EA0, 0xA1CA0B3E}, {0x03A7AB86, 0xECBDC324},
+ {0xF08BA8B2, 0x920EDECD}, {0x618E0CFA, 0x4582BF9F}, {0x967E9A7D, 0x9306BEC0}, {0xDF055179, 0xB8D5F605},
+ {0x46185235, 0xA3EC316F}, {0xB8E51031, 0x496F382B}, {0x4A3DA22C, 0x2FF31412}, {0x880D79EC, 0x87429059},
+ {0xEAEAA9C4, 0x2B4F1B15}, {0xD706285B, 0x250498B0}, {0xE63D7A01, 0xF1722579}, {0xFE4E5F4B, 0x531DDAB0},
+ {0xD685075A, 0x52CE8700}, {0x75585694, 0x2B6BCE2A}, {0xDEF34276, 0x04EE1F2F}, {0x1018693F, 0x7B67B3D3},
+ {0xF89F3463, 0xD324081A}, {0x3E7AAA0C, 0xD14DEF20}, {0xF9A8856B, 0x85E8D165}, {0xB5EFEABF, 0x43BDF302},
+ {0x7E4F74F2, 0x11B20278}, {0x5DEEE6C5, 0xB7F4B60D}, {0xB4FF7044, 0x9257DDCD}, {0x7AF2771A, 0x23E88E40},
+ {0x85011160, 0x1B4BBECA}, {0xAFDBA5E7, 0xA6EB34FD}, {0x88D42331, 0x97C3CBFB}, {0xC4C203E8, 0xF769213F},
+ {0x96AA9D54, 0xB08A341D}, {0x31B2D3FD, 0xE85D080A}, {0x033E0908, 0x8F1BB103}, {0x20152393, 0xE8662F43},
+ {0xEBFDBE83, 0xC1E86ABF}, {0x65D8ED61, 0x597484D2}, {0x285DBB3F, 0xA6764F80}, {0x761A1F17, 0x6FB5EF09},
+ {0xF46544C1, 0x958BF9B6}, {0x149F02A1, 0x155906D4}, {0x0AC0FFAF, 0xE46C3F31}, {0xED8C06AA, 0x8D5C152C},
+ {0x289F87F9, 0x502C1D2C}, {0xBA187EAC, 0x25A59381}, {0xD060F956, 0x4F78CA1C}, {0xAAED7274, 0x3E6F1D64},
+ {0x9C031AEF, 0xADFA262B}, {0x9D3D6352, 0x35764353}, {0xFB16AC8C, 0x8C47A2C9}, {0x90D6D778, 0x8B5058BD},
+ {0xF3772501, 0xF4511761}, {0x886EE734, 0xB58108F2}, {0x30B51A82, 0x3A717DF6}, {0xBD9A175B, 0x85A3C32B},
+ {0xE6D4185C, 0xA8C790C9}, {0x31440AAC, 0xCDBC783A}, {0x36206772, 0x26343804}, {0x4D7053B9, 0x6A604ABE},
+ {0x93E19FAE, 0x588ACB6D}, {0x17D6BAC7, 0xFB5A983D}, {0xEED9C7CB, 0x5EB244EB}, {0xD0D5D87D, 0x42D35C63},
+ {0x6D1C9681, 0x41CD1854}, {0xE1CECEEC, 0xC2A24F86}, {0xEAA393EA, 0x7AB55BC9}, {0x02B5CEAF, 0x5B37656C},
+ {0x5EAC3094, 0xF969EA26}, {0xDC1DF26D, 0x70B3EB7B}, {0x80DD41B9, 0xDD6FEF69}, {0x623528DB, 0xB38D375C},
+ {0x5D499CEB, 0xB33FE283}, {0xD07A00FB, 0x2E42328F}, {0x29DD2FF9, 0xF1D5E231}, {0x40A0B473, 0x771B52C4},
+ {0xD7574148, 0xC25A9FDD}, {0x82FA3A2A, 0xE371B45F}, {0x8D783A4F, 0x9F9F6DE7}, {0x2769BCF6, 0x962FB8E2},
+ {0xF923DCB7, 0x680DCF59}, {0xE20AAB50, 0x0160E369}, {0x528CE1FE, 0xFD1267F2}, {0xEFE2151F, 0x03104F9A},
+ {0xB0F0905C, 0x26991B1C}, {0xB98D507C, 0x8F6C6483}, {0x94F7FEC5, 0x34826C9D}, {0x0F07F442, 0x94DA0830},
+ {0xB8482BF1, 0xD774D213}, {0x9E34D71B, 0xDB520741}, {0x58023526, 0x376C4497}, {0x2944A262, 0x19D3B846},
+ {0xF953B921, 0x02927947}, {0xE59870CE, 0x7F7A5F22}, {0x94C2B958, 0x6D965AF8}, {0x77EC56A2, 0x2505F3D1},
+ {0x2BFCBF13, 0xD9CB81F3}, {0x02237477, 0xCD54BA12}, {0xFC5FC478, 0x87094025}, {0x9EEB24E5, 0x4A8B942E},
+ {0xEEF47302, 0xE499916E}, {0x9F0A7ED6, 0x98DA1AA5}, {0xE93D259E, 0xF57AA3EE}, {0x2E1EBB79, 0x00B35AE9},
+ {0x49FC040C, 0x5EB7B1B1}, {0x378EDB15, 0x2DA77990}, {0x721C47DF, 0xF5A3FC6C}, {0xAC02A49E, 0x9F0D3E97},
+ {0x7E650473, 0x240B0D17}, {0x40E2F45E, 0x76FB85D1}, {0x4AD9AF45, 0x426FDAB8}, {0x0FAC07C0, 0xD5F42E1B},
+ {0xF61D56AA, 0xFFAF96B4}, {0x002A11F5, 0x3BE4E65D}, {0x2803A2A6, 0x07D8CE28}, {0x55ECDAC6, 0xE6DAE268},
+ {0xED66D41B, 0xBED3B716}, {0xA6E3C83B, 0x12855BC9}, {0xA5A16F4D, 0x3F6F821E}, {0x8FBE556F, 0xDC4FA444},
+ {0x323B283B, 0x61D4B375}, {0x59C33798, 0xD7B3BC52}, {0xE50736F4, 0x3C92A6A7}, {0xCDEDBCAA, 0xC314DB50},
+ {0xEF3FAE41, 0x452616DE}, {0xD310A842, 0x5281A59E}, {0x7EE216B8, 0xB6DD4FDF}, {0x8E48D36E, 0x0855E290},
+ {0xF8A88F04, 0xBD5B32AA}, {0xE3EFF0D6, 0x65ACE167}, {0x45259A1E, 0x8FE258B2}, {0x578BE3CE, 0x81F8BDBD},
+ {0x2F3ACD67, 0x90657AB3}, {0x65764EFF, 0x09BE5B87}, {0x703AE7CF, 0x7DCDE6D0}, {0xF5FEAF1E, 0x0AF16B64},
+ {0xEC17EB51, 0x1A1571E9}, {0x0B6270C2, 0x52B5A673}, {0x8FC3B725, 0xD999AA5F}, {0x1869B304, 0x15F2F9E7},
+ {0xB95E9194, 0x952BC66B}, {0x94C36A05, 0x644AECCE}, {0x59193501, 0x7FBE638B}, {0x71DCFEFA, 0x9151CBE5},
+ {0x445F2A6B, 0x0BCB85EC}, {0xFA9645BE, 0x9F009C75}, {0x1E7372CF, 0x1F361FBD}, {0x2A2E32D0, 0x79E66205},
+ {0x29CA079F, 0xC2A628D8}, {0x03A46267, 0x84829DA3}, {0x460F89E1, 0xCCD47D29}, {0x536698C3, 0x040DBC00},
+ {0xE8AD9970, 0xF766B76B}, {0x27C7F701, 0x878899E3}, {0xD35EB237, 0x1247CEAC}, {0x3515049B, 0x30E43450},
+ {0x115FB4FF, 0x7C54A48C}, {0x65399252, 0xF042EF53}, {0x58AC7BBF, 0x78F4282A}, {0x175FE90A, 0xFFC61847},
+ {0xCFFE96BD, 0x4BD48046}, {0x249FE34D, 0xF938A751}, {0x77FDEE3B, 0x8F804870}, {0x9C061AB8, 0xEE47C526},
+ {0xD1993242, 0xB0166F50}, {0x8A2B6C12, 0x16ACE362}, {0x2A397CD8, 0xF60A6C42}, {0x423B7E4E, 0x06044CB9},
+ {0x1D967343, 0xBB7D13AF}, {0x940BA0CA, 0xA5E0DFBC}, {0xAA2F981E, 0xE3D790CE}, {0xD2DB1D19, 0x93120F1C},
+ {0xEC84A7BC, 0x7FD94E6C}, {0x8CB41A9D, 0xFAB7D158}, {0x6CF2C5DA, 0xCE2877A8}, {0x52B5DDD6, 0xE60A29B2},
+ {0xA2046235, 0x0D2245EB}, {0xFF075122, 0xF8A2BD1D}, {0x95DF3838, 0x782D18D2}, {0x743616A2, 0x1F65B198},
+ {0x3C3CD412, 0x2C82360A}, {0x0236B04D, 0xAC814D67}, {0x81A2C04A, 0x8BA66368}, {0x98605336, 0x58385FCB},
+ {0x7F2646EB, 0x6DCA7F78}, {0x9C6BEF0D, 0xBFFEC762}, {0x4EC225CA, 0x5C0025F0}, {0x28FFD096, 0x767EB88A},
+ {0x32DBA0C7, 0x90AFEAA0}, {0xC0E27441, 0x4A98B825}, {0xAB945641, 0x6E07AEB0}, {0x63285C46, 0x6DA485A0},
+ {0x416C5BA6, 0x003A08B1}, {0x9A7897EE, 0x78A75763}, {0x19D585F7, 0xA39842BE}, {0x33970304, 0xA073D9B3},
+ {0x3BACD3F9, 0x45BC43C6}, {0x350A6538, 0x18710D64}, {0x7A41EA50, 0x899DA261}, {0x545CFFD7, 0xFA3B2F0D},
+ {0x811AD01A, 0x4A791648}, {0x2708B2F4, 0x793D524C}, {0x129EAD94, 0x63A92A8C}, {0x899C3F8C, 0x64D859CD},
+ {0x1DA9C8D1, 0x8CC4A6C8}, {0x091B51EC, 0xCDFB8D04}, {0xD990C7AF, 0xDFFFD072}, {0xABE956C4, 0x8B31E04E},
+ {0xBAC8D6CC, 0x24181A01}, {0xCB18926E, 0x67594171}, {0x71B000DF, 0xC48E2B13}, {0xCD359B0B, 0x0D71A958},
+ {0x6E48C329, 0xD05212D6}, {0xE9C46A35, 0xA4A16453}, {0xF0914B5C, 0x0D64A679}, {0x8132AF96, 0xDD53FC2A},
+ {0x5DF5F645, 0x9B1A502C}, {0x1D5B73C2, 0xEA8D9832}, {0x7B8EE29E, 0x032C2D00}, {0xE1D1EEFB, 0x2AE2A915},
+ {0xFD5D6F32, 0x087175FD}, {0xEDC357D3, 0x11E35D0F}, {0x39C305A6, 0x4FBF50A9}, {0x58F8D3F1, 0xBC4CF828},
+ {0x645F7767, 0x6973430E}, {0x06C480EA, 0xBF6FD691}, {0x74C0EEB9, 0x8F14BB95}, {0x60D9AFA6, 0xD45AFD8B},
+ {0xB0C24EED, 0x1ECAD026}, {0x27E9CE04, 0xA80F0DF1}, {0xD21A0E6D, 0xB5A759B1}, {0xE3095ACE, 0x4571637E},
+ {0x1CE2EE03, 0x3CC796B0}, {0xCEF0173F, 0xED379B9C}, {0xC3278568, 0xA9CB9C12}, {0x2268D713, 0x8B3CEA6F},
+ {0x31E724B0, 0x6DA02DE7}, {0xCE3E673F, 0x8D6F4F57}, {0xCE8C375A, 0xF911E29B}, {0x978F28B7, 0xE55D5F3F},
+ {0x164FF24A, 0xD7EF2510}, {0x2D10DF20, 0x6AB8680E}, {0x75586662, 0x5168D96F}, {0xCC9630DC, 0x12703815},
+ {0xF27C050F, 0x68C28038}, {0x97A321AF, 0xD686FC5E}, {0x33E1B21C, 0xCF250B3C}, {0xC709B6D3, 0x144DA9A0},
+ {0x810044D0, 0x673DC5E7}, {0x2357CB5E, 0x4E401C7B}, {0x9684DBAC, 0x6D46F37A}, {0x92C86674, 0x08D46226},
+ {0x55B6882D, 0x985A1554}, {0x7AD07FD5, 0x05820AD5}, {0xC4B3C513, 0x21E94D6B}, {0x94D99C04, 0x6D39E6B0},
+ {0x53BCBB43, 0xDF6C95F7}, {0xE982AFDF, 0x88BC137A}, {0x02A5C9CC, 0x6B8FA7E2}, {0xD42BB7EE, 0x25BB4543},
+ {0x7041E612, 0xF8DDA3EA}, {0xED3B2FF7, 0x0E16DACB}, {0x97EFE4E3, 0x895A1266}, {0x1E10BA59, 0x515B4CEF},
+ {0x2FBF8D9E, 0x2D0DC687}, {0xC52C0B5A, 0x66E20972}, {0xCF4C44C1, 0x39D16518}, {0x46F452FA, 0x0BF9DB2F},
+ {0x1B3F0803, 0x9E225A80}, {0x0A26B86B, 0x3A4BFD94}, {0x30FC521C, 0x184953C0}, {0x9CD58388, 0x35DF0E95},
+ {0x74148A88, 0x8542F222}, {0x51FF89E7, 0x74AB5762}, {0xAC70FDD1, 0x284A0E4C}, {0x5F4D6E2C, 0x690B0B1B},
+ {0xEC56AE6C, 0x0B09CAD9}, {0x1A76A22A, 0x9D15008A}, {0xF6AA03AF, 0x5A4BD30F}, {0x51EAA330, 0xB8E966F0},
+ {0xFDA5AFE6, 0x716204D0}, {0xCFA838EE, 0xE9418410}, {0xCBE831AF, 0x9CB88815}, {0xA1628776, 0x74C92D55},
+ {0xD70A4676, 0x16C8FDEE}, {0x8A1FCD44, 0x93C3B6DE}, {0x79DCD80C, 0x8B69E313}, {0xA54DC086, 0xA1A98806},
+ {0xBE01CC03, 0xF52A9E4E}, {0x68066A78, 0xD23DD043}, {0xB074C12C, 0xA0EF9EE0}, {0x7A9CA32B, 0x27A9BA82},
+ {0xF9A465FC, 0x0E10397A}, {0x895E8953, 0x4046647D}, {0xA8C9E169, 0x01974305}, {0x49A52B64, 0xB52A21ED},
+ {0x3315D10C, 0x53A4B665}, {0x47DA71A4, 0xF6450A37}, {0x0A44BC5D, 0x6536B23C}, {0xBE29FCA0, 0x82E5DAD1},
+ {0x6ABA8DE0, 0xDA5A31E5}, {0x03216F9D, 0x9BAD8992}, {0xA2D9C347, 0x3A85AA90}, {0x6289BC79, 0x2A8E7E7D},
+ {0xBE6AE973, 0x2D524BB1}, {0x3D1DE0AE, 0xCB2E9191}, {0xA3ECD4F9, 0xC75F62FF}, {0xBEDDA2A7, 0xD2663407},
+ {0x11CE5682, 0xF825AC85}, {0xD021F9E8, 0xDDBBA73B}, {0x60B34174, 0x33BD2DC7}, {0xA8C0C536, 0xBFF36936},
+ {0xC56BC85C, 0x79B0CA67}, {0x8F2068F9, 0xCA528304}, {0x8A73A169, 0xBD09DDFD}, {0x9938DD4A, 0x8E34DF95},
+ {0xBC4A4E0B, 0xAC489930}, {0x2C79EAB5, 0xE84DF5FC}, {0x4085F328, 0x2B85213E}, {0xD6820A5A, 0x44E2C6FE},
+ {0xF3671134, 0x97F773A9}, {0x7F57D237, 0xC308B589}, {0x03A716A7, 0x6440C28D}, {0x1F0F57D0, 0x88D0E8E3},
+ {0xA1E36DCD, 0xEE70BB61}, {0x209A6176, 0x149C0076}, {0xE590CBAD, 0x41FA63FC}, {0xC5F8527D, 0xF3113F67},
+ {0x330AB3B6, 0x23C95CC2}, {0x637FA8E1, 0x15C63DE3}, {0x8FEC1747, 0x2225BA6C}, {0x6303D7E2, 0x01AA40C9},
+ {0xD15C4C0B, 0x0D5531F1}, {0x23D95770, 0x4E966A4E}, {0x309FDA3B, 0xFA9CA978}, {0xA893FDBE, 0x49B8DBA8},
+ {0xAAF4FB7E, 0x7D6A325E}, {0x5BE67D06, 0x84D446DD}, {0xC67DEE5D, 0xFE710394}, {0x68734A30, 0xEDEA1EBD},
+ {0xC26C1A5E, 0x97D49C7B}, {0xE995EC31, 0x7665A721}, {0xA0895BF8, 0xBDB0919F}, {0x6CE3CFA9, 0xBA154326},
+ {0xC1BCAB16, 0x579F61C7}, {0x3DC47E6B, 0xBE477124}, {0xEC3548CD, 0xC0B9B122}, {0xDACCAD0A, 0x8A498ABE},
+ {0x305CA82A, 0x02985773}, {0x2274E176, 0x20417007}, {0xA61166B9, 0x39AA25BF}, {0x008D981B, 0xC0162DE8},
+ {0xAB853B1A, 0x93CF1D7A}, {0xFD009E00, 0x2C24F229}, {0x2B756D9E, 0xEAEF0755}, {0x67EA8569, 0x3913A5FC},
+ {0xA5AC5534, 0xF68FB01D}, {0xBA292720, 0x1B9461C5}, {0x7023652D, 0x63E220E6}, {0xDB21E486, 0x13E657BD},
+ {0xE3CE02A3, 0x819D1FCB}, {0xA96DAC46, 0xA2F4AB39}, {0x24A14A33, 0xDF8282F5}, {0xA4DED21D, 0x99993A57},
+ {0xE8C96BC4, 0xDFB5D2BF}, {0xBBA13BF2, 0x1F646665}, {0x2356157B, 0x88989BA1}, {0x91E85148, 0x258C0E24},
+ {0x2ED02987, 0x2C845514}, {0x59C1F67E, 0xAC7D7B95}, {0xEBB3538C, 0xFE59A11C}, {0x9805BB55, 0x2CE68D89},
+ {0xC10B3878, 0xE3723FE1}, {0xA68677A7, 0x0B82E88E}, {0x761E108E, 0xB84FA25B}, {0x810B9CD7, 0xA84DB7C9},
+ {0xA383607B, 0x1FC24B90}, {0x4E201F8D, 0x23A368AC}, {0x1B26C6C3, 0x9A0A7180}, {0x4E3D1F79, 0x36FF4177},
+ {0x38739CB4, 0x7B13B672}, {0x8DD65BD9, 0x7F655B0C}, {0xBD6E0E22, 0x4F32C860}, {0x4F54AA09, 0xD7BA595F},
+ {0x925399A7, 0xA62A5A83}, {0x14AB2AAF, 0x73D7BADE}, {0xEB45E657, 0xEC92F9D3}, {0x912A0B32, 0x6F7A9A49},
+ {0x32D88479, 0xFC177C81}, {0x5F20A855, 0x5F2F451A}, {0x95FA6030, 0x071316A7}, {0xF1196250, 0xF51206FC},
+ {0x1884602E, 0x9C9B444C}, {0x0F177604, 0xAA13A542}, {0x26B67866, 0xC13E68A8}, {0x561D7289, 0x71219BDA},
+ {0x142F37CE, 0x57314484}, {0x057E84E4, 0xD43103B6}, {0x617D78C3, 0x3F2AA65C}, {0x6DAE7377, 0xC9FB0F7F},
+ {0xC8D1896B, 0x57B060EA}, {0x0F532836, 0x7073FFAD}, {0xD068A73F, 0xEA077CF2}, {0xA6CD4C77, 0xDE689D3E},
+ {0x9D65EC0C, 0x07D81626}, {0x8CF7D95E, 0x5DF81A39}, {0x9B1B7555, 0xE4817C73}, {0x1ABE96C9, 0xDF4D6C12},
+ {0xD427CAB3, 0x0541C408}, {0xA3BAE995, 0xD57F9845}, {0x6833FC05, 0xB1FC3673}, {0xD09A1E09, 0x953298B0},
+ {0x3377C3B1, 0xB653A1FE}, {0xE60C90C9, 0x18F7DCC9}, {0x0AEB57EA, 0xD88AAC58}, {0xB1B9E579, 0xCFD12D74},
+ {0x2B57282C, 0xC61F8712}, {0x71D68F2F, 0xDF347E6B}, {0xBABD9113, 0x677801E6}, {0x08B0CF76, 0x0960F7D5},
+ {0x518C987C, 0x83DAA95C}, {0x0B68F00E, 0x476D355A}, {0xA671FB81, 0x1BD5310D}, {0xEDD53976, 0x55FC2CDF},
+ {0x4AB13FAC, 0xB107884C}, {0xBA3534C1, 0xA85E02A4}, {0xDAC6F093, 0xB7BF2339}, {0xA6D87C81, 0x4FE98EB6},
+ {0x20D10DAB, 0x0176AAA8}, {0x5C70ED61, 0x5D7440A2}, {0x27543AC0, 0xD508ACD2}, {0x8F4E7E05, 0x26DB4C40},
+ {0x9AAA9EF5, 0xEC0B5DAD}, {0x11282A0D, 0x6A2DFD53}, {0x83516D41, 0x34962D18}, {0x2A41C77F, 0x0C3FFE91},
+ {0x57F22CB8, 0x350503AA}, {0x88F09373, 0x9AA44181}, {0xB075FC32, 0x142BDBFB}, {0x19DA52B9, 0xDE1D38AA},
+ {0xCF2E5F7E, 0xF3E8F25B}, {0x3C091B9D, 0xB157690A}, {0xD774C526, 0x8C3948C7}, {0xF772AB7F, 0x1B360A84},
+ {0xF51F4F58, 0x9074F1CE}, {0x8F6AB09C, 0x501EAC6C}, {0xD2084178, 0x8751CAC1}, {0x26DA61B3, 0x77E4A96F},
+ {0x0ACA6580, 0xE026C7BF}, {0x0F5E54AE, 0xE184193F}, {0xD8DD3AA0, 0xC5FC5183}, {0xC313C0BA, 0xC191E164},
+ {0xE543CDF0, 0xF285A02B}, {0x2C159647, 0x3DCE2BED}, {0xD4DFEC74, 0xBD3FA9CF}, {0xE871142F, 0xFF5A02B0},
+ {0xFC799DBA, 0xE0A7AA07}, {0x7CC0C649, 0xCAA91EEA}, {0x8BD1C6DD, 0xCC8CA4CF}, {0xB2CF5E4E, 0xEFEA0056},
+ {0xE5C44F6A, 0x2176FCD9}, {0xCAAC74D5, 0xAEC5BE3D}, {0xFC47EA2F, 0x556D0DFF}, {0x38AB7E24, 0x040B2B00},
+ {0x57B655FB, 0xA66C5AE6}, {0x7E362CEC, 0x312493B6}, {0x24CCC480, 0xB8C9AD45}, {0x10B9451F, 0x5646CFE2},
+ {0x0461CA16, 0xE323CFE1}, {0x3FA61BE4, 0x0EF8990F}, {0x6F09182A, 0x0962DEF2}, {0x0BA36702, 0xA4E31458},
+ {0x53D11916, 0x725B90C1}, {0x1A09E8EF, 0x4AB20E46}, {0xBBB17847, 0x1E57D782}, {0xB84C7E35, 0x541C87FF},
+ {0x2D875B49, 0xA59FCCC4}, {0x98A8B7A8, 0x8CA1DD9C}, {0x6EE09150, 0xFA7CC605}, {0xF0FE6FAC, 0xD508B23B},
+ {0x144F5C15, 0xC70AD525}, {0x988405D1, 0xB4A96315}, {0xD10DC525, 0x1117D9AD}, {0x3A081620, 0x4794F286},
+ {0x7BC41744, 0xAF1BD73B}, {0xEB1CAB58, 0x146FCB91}, {0x8F2F4AE2, 0x58A81E50}, {0xF5D3918E, 0x7093AE93},
+ {0x386CF7F3, 0x4885E6AE}, {0xC6083918, 0x8EFEFD3D}, {0x815897B6, 0x8BB09E95}, {0xCF0E5DB7, 0xC0973C5C},
+ {0xE37B3650, 0x5A019438}, {0x1735666C, 0xEFD5B420}, {0x8B1BE776, 0x4E29C832}, {0x4B7174CC, 0x2958975F},
+ {0xE0FD9F9E, 0x27898D0C}, {0xE87431F8, 0xDC4C961D}, {0x3C99AF9A, 0xCD0F65FC}, {0x9891EBED, 0xFF37FD7E},
+ {0x2E60423E, 0x06C49C2C}, {0x3C0250FF, 0xEF347F91}, {0x1DB2118A, 0x18B5CFF0}, {0xA76CE77B, 0xEA1689FF},
+ {0xA2C81A5B, 0x9324CD3D}, {0x35173140, 0x5F1EC02C}, {0xB2826AE4, 0xDDBFB214}, {0xC70D8318, 0x932E3FAE},
+ {0xBC94AF40, 0x4291BE10}, {0x3053BBC1, 0x1E60D532}, {0xB73F43DA, 0x0AD0900F}, {0xC478D19D, 0x9C0A946B},
+ {0x0DFF65B9, 0x7CF937AE}, {0x020F1ED2, 0x9C401917}, {0xA95F3426, 0xF3A2D35F}, {0x8A4C5FFF, 0xBB0E42C5},
+ {0xC231BC78, 0x3613FA8E}, {0xC1AD0B42, 0x188B9265}, {0x6E2D0446, 0x2D127E93}, {0xFA37B11C, 0x93186274},
+ {0x00196623, 0xFC266A5A}, {0x340D4FF2, 0x1FCDA140}, {0xA1EBD17B, 0x7AE12A4D}, {0x1741D1A0, 0x336957D5},
+ {0x628067CB, 0x79BE4245}, {0x74FDF57A, 0xBE60145E}, {0x3B756D9C, 0xEFFF3143}, {0xD2C682D1, 0x9BC05C84},
+ {0x32C5D0D1, 0x48E7665B}, {0x3E70B7CC, 0xE9D8F75F}, {0x1F00B307, 0x2D2BBC89}, {0x66A6B31B, 0x2BCD9E06},
+ {0x5A9534B1, 0xDA6F5B01}, {0x4FA0D6F1, 0xB7396C15}, {0xED617EAC, 0xBCADF95A}, {0x5E5AC41A, 0x73A75B99},
+ {0x60261EEF, 0xB6198F1C}, {0x846CE192, 0xF37139AA}, {0x90BD9E83, 0x7B1965ED}, {0xFE5C0B79, 0x8C6D21FD},
+ {0xEE9A11C8, 0x6BE08EA4}, {0x2D325591, 0x0D2220E7}, {0x31FC07C8, 0x47DF9F0F}, {0x1DFEC6C4, 0xDE6C3FF2},
+ {0x94766732, 0xF13FF40D}, {0x2EC0B9D1, 0xD89CBF02}, {0x34B20BF9, 0x253B4560}, {0xFA638ED3, 0x74283459},
+ {0x8AC20EA6, 0x52826A49}, {0xD26BB41A, 0x765D2830}, {0x7B4DD0E6, 0xE4E38EC6}, {0xCB8799DD, 0x633F2B31},
+ {0x83EB2757, 0x2E10B0FD}, {0xEF6BF7C4, 0x8ADDDA6D}, {0x1ADF84DE, 0xFDC871CE}, {0xAFE8E118, 0x5DBDA0D9},
+ {0x201D47F9, 0x4F21DFED}, {0xFF32E325, 0x252C31AF}, {0x3E38E4D7, 0xF52DC84E}, {0x00002264, 0xD026929D},
+ {0x73CE645A, 0xDD0DD47D}, {0x6749B338, 0xDC4D6E35}, {0x74C4551B, 0x3449D864}, {0x996FA298, 0xE8EE0CEF},
+ {0xA20731BD, 0xDD0DADCA}, {0xE69E0F59, 0xBBC02C6F}, {0x3C343878, 0xF8E01918}, {0x5B30CC2A, 0xC64468FD},
+ {0x9704E2D4, 0x6899E7D0}, {0xDF1496FA, 0x8494A8F8}, {0x3DD2845C, 0x251D1384}, {0xB43C7CFC, 0x8011CC64},
+ {0x08721305, 0xC130F334}, {0x95E560FB, 0xC7A67040}, {0x2FC165B9, 0x3F0F7F17}, {0x23AC96A6, 0xACB3C2B7},
+ {0x3803DCB5, 0x156165D9}, {0xACCD82EC, 0xC1FA551A}, {0x45979DC0, 0x2DE8EB36}, {0x02C9022B, 0x68CF6A10},
+ {0x0C4418EB, 0xFE2AB135}, {0xA6FC905B, 0x1B1E2416}, {0xB7414512, 0x33DF4679}, {0x6D1DBBE8, 0x79B669A9},
+ {0xAD8BF1A6, 0x69FF08FB}, {0xA3DBEB38, 0x5B797AE3}, {0x7D948467, 0x362FC1AF}, {0xF1168111, 0x2F1C11AE},
+ {0xB8469CDA, 0x98792028}, {0x9A045047, 0x0198EECE}, {0x666A4B53, 0x2EA983E4}, {0x3FEA51F3, 0x854438AF},
+ {0x382FAEBF, 0x9F17FC6D}, {0x8B56956B, 0x614080C8}, {0x1DB463FE, 0x722FA192}, {0xAD2E2043, 0x01EF5F5C},
+ {0x2E9A715F, 0x8B766897}, {0x3195FB98, 0x441BDEA1}, {0xBEC9C509, 0x88A302D0}, {0xF25C2BCE, 0xC391A76F},
+ {0x6F55A397, 0x4AAAD930}, {0xD8C26467, 0x4B697B3F}, {0x8568D1E2, 0x0F2DD9E1}, {0x4019720E, 0x2372B2C3},
+ {0x72E41993, 0x2B9006A8}, {0x9B0EC16E, 0xECB1A19D}, {0x060B97B7, 0xD181B7EC}, {0x24364972, 0x0B332D98},
+ {0x42009834, 0x1C2C45B5}, {0x27FA236A, 0x061FFBAA}, {0x70390CC7, 0x4F1E2E38}, {0xDF3CB491, 0xF6973F09},
+ {0x1072D4EE, 0x8115B8B3}, {0x7CDA9155, 0x5FC82EB5}, {0x6BCFEEF7, 0x77DF0ACB}, {0xD95375C3, 0xC971D96E},
+ {0x61B31FC0, 0x3776ECB5}, {0x10888257, 0x0B8CFB69}, {0x0598F8CA, 0x44095805}, {0xA8E487AF, 0x31C8AA22},
+ {0xB16355BC, 0xC23F8A3A}, {0xC0E148FA, 0x76D5BE9F}, {0xAB0F5872, 0x60326C1F}, {0x6EA114F0, 0x2F418C45},
+ {0x21090CC2, 0x6DD75C91}, {0x3EA02435, 0x2D3E3A55}, {0x759339BF, 0xBF1F95FC}, {0x4C26654C, 0xF36E2147},
+ {0x4909E1BD, 0x61C15A2D}, {0xE778094F, 0xFBB5F77A}, {0xCC3CB2FB, 0xE9E18F05}, {0x625470D2, 0x626A0BA6},
+ {0x35389D92, 0xD31EA0A4}, {0x4ECC589F, 0x03DF50D8}, {0x3FA38CC5, 0xEAADA832}, {0xA7BEDD00, 0x07E41E84},
+ {0x5E404019, 0x9C6206B1}, {0x59B9C3EA, 0x75E082B9}, {0xA1AD1FB4, 0x6153C868}, {0x29F443F2, 0xF8370C72},
+ {0x8827ACEB, 0x2A97655E}, {0xF890A3D3, 0x031B139A}, {0x9BFF967B, 0x167FC0F6}, {0xCB4E28CB, 0x41980567},
+ {0xB79A995B, 0x23356011}, {0x826BB620, 0xDE1B00C6}, {0x1AF79B10, 0xDD8363D7}, {0x16B0EE06, 0xBE2331BC},
+ {0x017D9CB4, 0x92CF63C5}, {0x3E5D0E46, 0x96994159}, {0x657487BD, 0x4E9F46B1}, {0x67BB8847, 0xDA1825EA},
+ {0xBC7C8702, 0x3355103B}, {0x06F2758D, 0x086151FE}, {0x2342B403, 0x7C7625B4}, {0xCE1112B0, 0xAA48CF95},
+ {0x8FA52CD0, 0x6BAF4040}, {0x6601AF67, 0x76DA2BA3}, {0x3D5F98A4, 0xB1924C94}, {0xA61A0D57, 0xEE533102},
+ {0xAEB155D1, 0xFC37A8E4}, {0x8ED9FBB5, 0x881B66DC}, {0x19C33CE1, 0x251F4895}, {0x0D6A8446, 0x189C7E2C},
+ {0x2E56870B, 0xD2AE3976}, {0x132AC587, 0x970537B2}, {0xCA54F3B8, 0x3E0DF535}, {0xE2DA3E3F, 0xBDB0E3D5},
+ {0xD88ACFD6, 0x9BFCE914}, {0x7CE2D123, 0xF4EB93B5}, {0x97F45B2F, 0xED5E81ED}, {0x66CFF714, 0x4631FE58},
+ {0xAEBA8B41, 0xC99CFD4F}, {0x9FC24B3F, 0xBCA2B2AC}, {0xA64AD914, 0x7C9509DD}, {0x437D44FC, 0x678FE859},
+ {0x5B20CC1C, 0x348078AE}, {0x751025E5, 0xFF19BA69}, {0x15FDF917, 0x2F65DB18}, {0xDA7A1589, 0x4EDE25A8},
+ {0x379D4139, 0xC603A768}, {0x70242756, 0xFC2B35A8}, {0xA2CC075F, 0x73EFFDE2}, {0x493CE400, 0x9217FE19},
+ {0xC7CD51B1, 0xA4C6C04C}, {0x8F73B56F, 0xA3CBB07A}, {0x672CF8CA, 0x1438D384}, {0xECDFCD67, 0xBCFD33DF},
+ {0x3537AEF4, 0x2E982E4B}, {0x37475C31, 0x64325320}, {0x2D89F5D1, 0x248257F8}, {0xD7BEA72D, 0x799E0C1F},
+ {0x4BB74895, 0x1E0BF8B2}, {0x8C8135A0, 0xA7184360}, {0xB115A503, 0x315B4180}, {0x59DF8B5E, 0x3CF44012},
+ {0x35B0506B, 0x063306B2}, {0xD62ED4D7, 0x49249C1A}, {0x16BB7945, 0xF4513BB8}, {0x31AD9780, 0xA3455AE6},
+ {0x9AD56B06, 0xA85AE3F1}, {0x9CFFFAF0, 0xB726E777}, {0x7E223E80, 0x8DEE803F}, {0xD82BFDE8, 0x6E41D875},
+ {0x885F9B53, 0xD11BF8B3}, {0xE0C0083A, 0x20632BB3}, {0x737B4154, 0xC30EF336}, {0x78B23A09, 0x6B666BCC},
+ {0x2B0D2B0A, 0x4753AE60}, {0x353348D9, 0x4DD96692}, {0x24F78194, 0x16E3856C}, {0xD8394B38, 0x0864A175},
+ {0x8417D3CB, 0x83AC5652}, {0xB664DEA6, 0x41A9C027}, {0x65FE63C8, 0x2A8CB565}, {0x4200BB5D, 0x3AE35EB4},
+ {0x137A5F7C, 0x01AEF149}, {0x9F31811D, 0x9A38A112}, {0x7A8988FA, 0xEE2C8770}, {0x60663EBE, 0x8BBB0E3C},
+ {0x0C78C08E, 0x9083E65C}, {0x6DD000EF, 0x7AC39428}, {0x3D5941CA, 0x8B833841}, {0xC072AF05, 0x86CF7760},
+ {0xB5F9739B, 0x8E846A96}, {0x69CC8BCE, 0x1B816B41}, {0x7FEB1AB8, 0x9750A554}, {0xCECB8324, 0x607AE7F2},
+ {0xBF3ED6CB, 0x2EFC1136}, {0xAE8453A0, 0x2A213CF0}, {0xCA018FD8, 0x288C5204}, {0x15B938F6, 0xCCBD9A98},
+ {0x3ACA5170, 0xFBCA88EA}, {0xA2192C3B, 0xC1B200B8}, {0x6D9CB40F, 0x91AF872D}, {0x385FA803, 0x88E817C5},
+ {0x90D8373D, 0xB6BF9353}, {0x38D1EF48, 0x04BCB66A}, {0x906F1965, 0xD18A7209}, {0x7CF9AF2A, 0xB805DC1A},
+ {0xEAA9021D, 0xF35C46EA}, {0xEEBAEDB4, 0x2137A6EE}, {0xCD697A98, 0xA0AD7E8C}, {0x300D9019, 0xE55152B5},
+ {0xA2D988D4, 0x166EA839}, {0x937EA655, 0x3F24B005}, {0x0D0A9E8A, 0xF9A1AA16}, {0x385896AD, 0xC829FD13},
+ {0x67FA1765, 0xCC1848BF}, {0xC406C3C8, 0x073ECFD6}, {0x6CAC9923, 0x5E487F6B}, {0xE1081C6F, 0x8F6E5CB5},
+ {0x590D7C2E, 0xEDB29A65}, {0x8F76E966, 0x3DD92EF2}, {0xD4C00F82, 0x62C25812}, {0xFD74F152, 0xD18A7D54},
+ {0x5D597211, 0x66DD18A4}, {0x47648DAE, 0x3A009118}, {0x396DD63D, 0x46146704}, {0xB423B6E9, 0xC942282B},
+ {0xB8CCF5D7, 0xC2FDCC2E}, {0xF7842D6D, 0xB590919F}, {0xCB282EE8, 0xBFFB752F}, {0x8E55DA61, 0x32081A24},
+ {0x8C5301A9, 0x3ADDF05F}, {0x80D83FA6, 0xF9E63C55}, {0xAB41B2AC, 0xBD0D9AD1}, {0xB8E96458, 0xE7B6FBBF},
+ {0x69737325, 0x50F25EB4}, {0x867AFA7A, 0x86D702CC}, {0x8E971C3D, 0x87F21D86}, {0x66AA12D7, 0x3742346D},
+ {0x790F0B4D, 0xB6170B13}, {0x4A2D1261, 0x3811C6C6}, {0x76425020, 0xFF53F66D}, {0xC846855B, 0xD629EA14},
+ {0xF1FA207F, 0xEA2A88DA}, {0xCBB76EC3, 0xECA9B829}, {0xF4A42547, 0xE8155B1E}, {0x10A3C601, 0x08CBA1C4},
+ {0x7E8D14F9, 0x2F3A470D}, {0x5B47B384, 0xBFEE49A4}, {0xB8FC5579, 0x3D7AE615}, {0xBD63FE13, 0x09E312DC},
+ {0x601092B7, 0x7E657258}, {0x9A0C7DEE, 0xB39C850F}, {0x8CC47CBB, 0xB9BC78B5}, {0xEC0C452E, 0xADC93437},
+ {0xE0998EB8, 0x072D2250}, {0xEC22CCB9, 0x8226A538}, {0x80459C9F, 0xD0903E58}, {0x6579F6DD, 0xBB308923},
+ {0x7B2D654E, 0x17737C62}, {0xDEEEAB5E, 0xBFA0A297}, {0x5902BDFE, 0x3D7ED50A}, {0x95D1CF7E, 0xBB510220},
+ {0xA220721B, 0x51AD5F84}, {0x73136267, 0xCCA70046}, {0xCA7EB641, 0xDF672629}, {0x9E4FD7B9, 0xF846A384},
+ {0x39958D9D, 0x5894B5BB}, {0xA45334E3, 0xAAEF8896}, {0x3B85FA7E, 0xBDEB9B36}, {0x08BB68FB, 0x08B5AD1C},
+ {0x40E650F7, 0x3B527056}, {0x7D4F45A7, 0x3FDF9095}, {0xE5239DCE, 0x3C96FFB2}, {0x50A10BE8, 0xEFBFA121},
+ {0xBE5483B0, 0xE5216556}, {0x9B546529, 0xCE410B0C}, {0xE2899158, 0xC89B7DD0}, {0xE90EF12D, 0x836EB00E},
+ {0xEE931BC1, 0x3604DE8E}, {0x0574EADF, 0x9A5CAC17}, {0x15CCC686, 0xB0E05204}, {0xE516E149, 0x49B84621},
+ {0x4B9D40A6, 0x52D73901}, {0xD7553AC3, 0xD6F44F96}, {0x77A85B84, 0xBF92F548}, {0x8AD90296, 0x5661E07A},
+ {0xC8D21210, 0x99D77EEB}, {0xDC31858B, 0xBB12B6FA}, {0xF4BD717A, 0x4150A368}, {0x143D111D, 0xB95C89F7},
+ {0xFC4DA482, 0xEB1D5E70}, {0x3E1F027F, 0x6C4BC8C1}, {0x15D39444, 0xE714C0B0}, {0xB4510457, 0xF2B5AC15},
+ {0xA20B7367, 0xB6674A3F}, {0x04B8F301, 0x210AB414}, {0x0C85B679, 0x2EB97F26}, {0x14018D3E, 0x1D8EB961},
+ {0xC9813105, 0x92A53CC5}, {0xCE8E9AB0, 0x4DE51DC9}, {0x1C5594B4, 0x596B5F98}, {0xE5203C8B, 0x7B9ED85E},
+ {0xD26EBDC7, 0xFEDA3322}, {0x70C5317D, 0xD7431308}, {0xD0CC662A, 0xAD2BED8B}, {0x6F1AC0BA, 0x6859B2AE},
+ {0xAD826E49, 0x6C24BBAC}, {0x90594994, 0xBFAFDE81}, {0x543246C6, 0xA0067DEB}, {0xE4190145, 0xDC0572A6},
+ {0x7336DBC8, 0x6C7C3B3E}, {0x4496E880, 0x4FD144D8}, {0x12C76E79, 0x79D8CE6D}, {0xD65F16A0, 0x9142F682},
+ {0x917854EC, 0x11AF8702}, {0x4C2C68E9, 0xC7CBAA9D}, {0x17AFE16A, 0xF9915424}, {0x4EFF0743, 0xEDAA2720},
+ {0x0386E526, 0x4BAD2A24}, {0xD34D3B7B, 0x1EAE088E}, {0x5117890C, 0x89FF21F9}, {0xCED7D6C4, 0x82A17B36},
+ {0x1E3EAB69, 0x1531A377}, {0x9EA0C94E, 0x04A5128D}, {0xD729B638, 0x8CA1F248}, {0x006E002F, 0x26493A74},
+ {0xDDD1C49B, 0x777D3BFD}, {0xEE9EEF82, 0x0900E835}, {0x143671A6, 0x67ABF70A}, {0xADB3222F, 0xC79FDE77},
+ {0xA6CEDF78, 0xCE0C727C}, {0x27FEC4A2, 0x2962F382}, {0xD30D274D, 0x4A114DB2}, {0xEF672A0C, 0x2F4EF86A},
+ {0x7C69B16A, 0xAE8BE6F2}, {0xDDF5AD38, 0xEA596A45}, {0xD17A5294, 0xD4BFB291}, {0x31DBD7FC, 0xFBDDD29D},
+ {0x6D7EEBB4, 0x66F32054}, {0x6D0692B1, 0x8DA65901}, {0x9AD5632D, 0x3D5B4108}, {0xF8827380, 0x38FF2AB1},
+ {0x5AD58F72, 0x9923E008}, {0xA5119EBD, 0x9A5ACB44}, {0x0F8F3946, 0x52677A5E}, {0xCCC6D59E, 0x2FE63359},
+ {0x4DA47466, 0xF6D8EAF5}, {0x5870B8D1, 0x8E4782CA}, {0x6598C7CA, 0x69F769D5}, {0xD805433D, 0x2C3D6B5C},
+ {0xB185FF4C, 0x29CBA4BE}, {0xEBAEDF7A, 0xE8E3C68E}, {0x7E285659, 0x75065B68}, {0xD6D558A0, 0x6A62BDAA},
+ {0xAC3BB8E4, 0xD2F534DC}, {0x07DDE649, 0xC6C6D0B9}, {0xB35C1D79, 0x24A7E0A2}, {0x67C3BBDC, 0x843C8D14},
+ {0xDBB6ABC0, 0x43BA161D}, {0x7B65DE23, 0xF9B087C5}, {0xB5B3D58C, 0x1A207C33}, {0x05491785, 0xC8F834E1},
+ {0xF77E83DE, 0x87BC02A8}, {0x51BF6E5E, 0x22F148A0}, {0x880A3596, 0x60DF3F04}, {0xAC9FC34B, 0x1FFA40A0},
+ {0xB412C6CF, 0x55D8DEE4}, {0x810CF9C9, 0xD5C48533}, {0x7B69A10D, 0xC6DDEB39}, {0x742BA082, 0x3C6DE94C},
+ {0x4A2A0DD7, 0x940B244C}, {0x7193AC3F, 0x26411473}, {0xC4390B44, 0x0F996ACB}, {0x023507DB, 0x7414FCB8},
+ {0x41FF0A8F, 0x92BF2F41}, {0x6649D0D9, 0xE96AC491}, {0x2D29CC1C, 0x0D9933DF}, {0x80899B93, 0x026C2848},
+ {0x73B758F2, 0xEF297911}, {0x9A5288DB, 0x8E15398C}, {0x328510C3, 0xA683B72D}, {0x09B8EB0C, 0xA14CEEE0},
+ {0x475FE138, 0xCFAC590A}, {0x671561B4, 0x89B33E43}, {0xA9F3210C, 0xFA894A3B}, {0x73D70C45, 0x4F78D6CF},
+ {0xB868EC3C, 0x89DE6F0D}, {0xE88A0CD7, 0x363EE4D9}, {0xC40FBAEB, 0xAFDBCB0A}, {0x8C48AE95, 0xA1013408},
+ {0x2AF27526, 0xF4D5A60E}, {0x1B26C347, 0x0B540DEE}, {0xF0B3902D, 0xCA2DBD33}, {0xC1CD59A4, 0x1EEF8287},
+ {0x8989C09F, 0xBECBF832}, {0x86D9B057, 0x0A8BB66D}, {0x27DD4274, 0x98C94495}, {0x1A683627, 0xB02C4E79},
+ {0x987C77BA, 0xC594EDD5}, {0xAE431457, 0xE503A367}, {0x434E59CA, 0xA7EC5943}, {0x8A58DD86, 0xA273D1EC},
+ {0xA0CFA48D, 0xB574E601}, {0xB193509C, 0x7786F8B7}, {0x965CB380, 0xDE0F612B}, {0x794035B6, 0x5E40F488},
+ {0x3D43CE5D, 0xDCD5A5C7}, {0xA1015AF8, 0x0EA7F30A}, {0x027BB39A, 0x2053EB87}, {0x514D85CD, 0x6C289422},
+ {0x3F138403, 0xD589065F}, {0x519B600C, 0xD49E479D}, {0xE9918E2B, 0x063AB8E3}, {0x22F9409C, 0xB07A0A27},
+ {0x1AA30653, 0x8B3246F0}, {0xEF417019, 0xB55E322D}, {0x2C92C9AD, 0xEC9B0F1F}, {0x1C35D4AD, 0xF17F6C55},
+ {0x1B54AA9A, 0xBAA074E5}, {0xE9DA3A1B, 0x60F481F9}, {0x61E77645, 0x343F4A41}, {0xEE23C787, 0x31E36813},
+ {0x0C515137, 0xEC8F58EF}, {0xD82EE006, 0x6B405E7B}, {0xD1AEDE4D, 0xF052F082}, {0x1D8C6FC1, 0x137F5F01},
+ {0x8222322E, 0x4899AF0F}, {0xC1EFD5B2, 0xA9502C59}, {0x8B656919, 0xBC3025AA}, {0xDC70712E, 0x4B1A7AAE},
+ {0xDB63ABA1, 0x16D7223D}, {0x80F32B8B, 0xE5CA8D5D}, {0xC6DB995F, 0xA1BF4314}, {0xBAE0A4B5, 0x6FFFD7F2},
+ {0x95AAB695, 0x7B250E71}, {0xEFAA4BC6, 0x8A68F31E}, {0x7E977360, 0x37363912}, {0x8EC0652F, 0x9F8FD718},
+ {0x1F4C41A6, 0x4A7CCA6C}, {0x51334969, 0xF48EAD87}, {0x92F092CA, 0xC88EE80D}, {0xD096E904, 0x4B559F07},
+ {0xB1547F0E, 0x04C8EDF8}, {0xE00BAD99, 0x3AF5C2BA}, {0xAF2388C7, 0x9183011E}, {0x93CC6A29, 0x03760175},
+ {0x26ED1D28, 0x51150386}, {0xD924A9DC, 0x10CD6373}, {0x2E6B3454, 0xBD389677}, {0xE4DC389E, 0xFE6DDBDD},
+ {0x53F0FF43, 0x7494AFBB}, {0xF7F15146, 0x34BED4D3}, {0x3F8B091A, 0x39F7CF0A}, {0x07CD6983, 0x7B132B45},
+ {0x19B886F4, 0xD61938BE}, {0x00340342, 0x18A50FFC}, {0x6A418315, 0x5E182AD0}, {0x14FF40C4, 0x8D73B12F},
+ {0x036DFACA, 0x6849F8A6}, {0xB5146A0A, 0xA051CA9D}, {0xC29020E9, 0xF3E54B30}, {0xDD7822FC, 0xE2F628F2},
+ {0x9A80E375, 0x87985FF2}, {0x41730851, 0x63EF5D0A}, {0x397FACCA, 0x611E98E4}, {0x310F10EF, 0x933DDF0A},
+ {0xC762990E, 0x9867862A}, {0x443E6414, 0x32860796}, {0xB468F105, 0x0D3BEB9A}, {0x691092D8, 0x7D757494},
+ {0xEAE15541, 0x0760DE4E}, {0x44565695, 0x084BE823}, {0x3CB92C8A, 0x2B076248}, {0x6D38CF6D, 0x1791478B},
+ {0xD9D2F763, 0xD9C84EF0}, {0xC5DE7574, 0xE379AE6B}, {0xFC076A7F, 0xFB2F0AD7}, {0x77783026, 0xAB251029},
+ {0x0665127B, 0xEDDF8B98}, {0x446F9EA3, 0xA791B94C}, {0xAFE2C027, 0xA3CD8BE3}, {0x71F70BAA, 0xF8732BBC},
+ {0x4FD03D51, 0x6DC16D63}, {0x6BD98DB0, 0x62C5FD9C}, {0xB43D3DC9, 0x0DE06044}, {0x2DBD6D4C, 0xE3258AEE},
+ {0x7AD304DF, 0x3221123E}, {0xCF03344E, 0xAB04FB94}, {0xB804A112, 0x4E27EBCA}, {0x681AD5B8, 0xFBF35193},
+ {0x922CB0B3, 0x51520E8A}, {0xB7F4FEA3, 0xF7F672B0}, {0x0747DAFC, 0xE20114F1}, {0x53AB3FC7, 0x171A0F30},
+ {0x004796BF, 0x0625E169}, {0xCF3D3062, 0x18EDD608}, {0xC1032D4E, 0x1BF6CFFB}, {0xF4C20AEB, 0x97977814},
+ {0x833BF30E, 0xA877B66F}, {0x202FF8DC, 0x051D375B}, {0x3B4DB7B2, 0x6D270481}, {0xE693D604, 0x0D49406F},
+ {0xFC3051CC, 0xE0F6E50C}, {0x76323C1F, 0xF0A974B9}, {0x23D74B7C, 0xC1C81A00}, {0x525BDED3, 0xF95CC8CB},
+ {0xA2CEFB8C, 0x3B04F977}, {0x3B70A0EC, 0x44AFB892}, {0x5751E81B, 0x96E4EA36}, {0x7A31C696, 0xE9BB41F2},
+ {0x4F44BAB5, 0x7D97D7AD}, {0xDA6E30D1, 0xFBC10F12}, {0x17F66B6B, 0xDAC8026F}, {0x2D2B4784, 0x74A4FA0F},
+ {0x66E62745, 0xAC00B104}, {0x644EEBFC, 0x0CAB175B}, {0x9FBA7F83, 0xF3FE6ABF}, {0x89EB86C3, 0xFD82E418},
+ {0xC2856883, 0x8D3EE838}, {0xC9143A5B, 0xF136BED1}, {0x1BD7543B, 0xD1477418}, {0x61CC4DF5, 0x85410EA0},
+ {0xC65245F6, 0x1C8A8991}, {0x5FFE0A52, 0x90549E74}, {0x97F8FBAF, 0xAC805E7E}, {0xE1028D86, 0x80848941},
+ {0x7D8C8CBA, 0x0AC4E2C5}, {0xD3DE63BB, 0x7EED4E65}, {0x704D166E, 0xBD2598FD}, {0x88584D1A, 0xB9F86E1F},
+ {0x55F2AC91, 0x0E7CE40B}, {0x88B69756, 0xDD33D44B}, {0x5597C96F, 0x30973AFB}, {0x5625FF51, 0x971BD85A},
+ {0x3C7FEBB0, 0x779AF6D7}, {0x875E73D4, 0x361D1866}, {0xFFAE1371, 0x517EA730}, {0x83F27BDA, 0x5AFE6759},
+ {0x3B7CACB5, 0xED3E1836}, {0x1F2CFBBA, 0x95B95A8B}, {0x853F08A5, 0xFF11F39D}, {0x14D6D125, 0xBCBA8F74},
+ {0x313ADDC1, 0x7D4EBA5D}, {0x0AD5868E, 0xD66D13D5}, {0x9A41D5A1, 0x8B1355D2}, {0x80B50932, 0x5AB86736},
+ {0xAB7FAB88, 0x680DE257}, {0x6BACCB16, 0x8CECB73C}, {0x15075601, 0x7BD81D99}, {0x94AB6259, 0x2ED51B3F},
+ {0xDC30F01A, 0xD8E8953D}, {0x91B70020, 0xD6B37386}, {0xFA3A3216, 0x71291AB3}, {0xA7251C77, 0x18B36DC5},
+ {0x8A8E77DB, 0xFCE70409}, {0x24029E9D, 0xC9DDBD54}, {0x830C65D7, 0x50E78242}, {0x6D9BD75A, 0xBFDDD743},
+ {0x1BDB58E0, 0xDBDBE5E4}, {0x34E76C57, 0x63410963}, {0x8C7A66A6, 0x3583F997}, {0x608B9220, 0x877324A0},
+ {0x4143F01C, 0xB762FC87}, {0x50D66B18, 0x32A1FE5F}, {0x9546A2E9, 0x10857D2E}, {0x53C9C91A, 0x6A8F450F},
+ {0xE46A49DD, 0x0FDFDF17}, {0x1F907094, 0x3E9379BF}, {0x5E415F59, 0x67AAFF68}, {0x0361CC10, 0xEC1532D4},
+ {0x96E64E0F, 0xA3781E8B}, {0xE25B82B1, 0x6582D5DD}, {0x4CDF7280, 0xE57CC8A6}, {0x78C1C4F0, 0x04E3DB68},
+ {0xEAEB6D93, 0x44815E0B}, {0x84B27D0C, 0x0EF60E9D}, {0xA4609CBB, 0x9AF0D8D5}, {0x4C31CB11, 0x2520EEF9},
+ {0x646DAAD5, 0x181744C5}, {0xA2D88B99, 0x8EF39DE3}, {0x45352FD7, 0x4A875782}, {0x98C57347, 0x3A49298B},
+ {0x93B340AB, 0x2FFAF073}, {0xE720216C, 0xD77086C6}, {0x7CD8B231, 0xC1C83E3B}, {0xEDDD3A3C, 0xD98D9BCF},
+ {0xD9219873, 0x4F50FBEB}, {0x89EFB500, 0x60222B32}, {0xD5237077, 0xFA053354}, {0xAAD8FB6E, 0x53F4A037},
+ {0xE5CE12FC, 0x3BB59BAD}, {0x3127D93F, 0x1C25C75E}, {0x610FFF44, 0xE702051E}, {0x69064DA8, 0xFE39671C},
+ {0xF944F5A2, 0x43A462EC}, {0x9ACDA070, 0x2035C65B}, {0x0F205451, 0xE493CCB9}, {0xB2A52F29, 0x6AC9FDC8},
+ {0xE40CD1FF, 0xD3F4C35A}, {0x10B1A4C9, 0x9200FD6D}, {0x0D94BE53, 0x82D7AB1A}, {0x30E62780, 0x4519A188},
+ {0x68CB59E8, 0x9909B373}, {0x809D9EF5, 0xF03ECB79}, {0x617B1BF2, 0x2AC7E51C}, {0x0B093030, 0x4EDB4EEB},
+ {0x469283D7, 0x5729C95D}, {0x19CD27CF, 0xA7809DDF}, {0x31E090CF, 0xDF3D4F7A}, {0x8199F4D5, 0xADA94BBD},
+ {0x5811F7FF, 0xF7B7D3FE}, {0x8342790D, 0x3F7F8363}, {0xB7417E6E, 0x33153490}, {0x2650A4AE, 0xA8D0C345},
+ {0x5DD1C84A, 0x81691899}, {0xB2368DA7, 0x0C47599F}, {0x02F4E73D, 0x2F24B2B3}, {0xBEAE25D4, 0x87D4F16E},
+ {0x903F887B, 0xF2DB8942}, {0x1EB159AD, 0xFBC35AA7}, {0xE1BE3E91, 0x2766C719}, {0xEC6E21A5, 0xDB9AF692},
+ {0x33304CA4, 0x751FF6DD}, {0x473C1885, 0x325E44EE}, {0xB431F98A, 0x89D8CAE8}, {0xA6E796D4, 0xE9093363},
+ {0x6A8E7ADE, 0x8757BD4D}, {0xDDECB703, 0x4822B215}, {0xB3746629, 0xE15653BC}, {0x7DF99404, 0x873DC5F5},
+ {0x2D3D58DF, 0x0D574295}, {0x14F979A2, 0x9415224B}, {0x2C5D4F02, 0x4B3CC47D}, {0xD8F1E8FD, 0x3D96A7E2},
+ {0x4EAC56AA, 0x378219CC}, {0x8697538A, 0xEB96F47C}, {0xB7CC8F4F, 0xD83E7E0A}, {0x87C925C3, 0xD64751B3},
+ {0x9B1BDD29, 0xD0370246}, {0xB6C367FA, 0x35CA706E}, {0xF3FEDA8B, 0x8DEC5CC7}, {0x01688D2A, 0x1017CBE0},
+ {0x117693DA, 0xCA08F773}, {0x152251FC, 0xB9F928D7}, {0x5CF5FEF1, 0x0B671BA4}, {0xE72A44E6, 0xE09D2201},
+ {0x5E8712A2, 0x81FFA84F}, {0x759A3032, 0x994D97D8}, {0xB63BDEBE, 0x041234CF}, {0xDE952093, 0xAF04E066},
+ {0x62EC3A12, 0x1CB18917}, {0x4FC0BDD1, 0xE04C79E3}, {0xAC84944F, 0x737145DA}, {0x2539852D, 0x9CDBA146},
+ {0xC6C9C9CF, 0x52749ABC}, {0x515D35C3, 0xD094A79A}, {0x87150380, 0x0C81FD31}, {0x3895C9F1, 0x58DF8F94},
+ {0x55AAA200, 0xCA277C58}, {0x8ECE4E29, 0xC27DE7E3}, {0x34B68100, 0x7799E2DB}, {0x06BB4767, 0x87E01C72},
+ {0x61551208, 0xECC2624F}, {0x7F3CA950, 0x52C28FE9}, {0x48B11658, 0x8014C3CE}, {0xD4D8A7CF, 0x9D65E995},
+ {0xC783A916, 0x96393311}, {0x16BD0981, 0x05F97816}, {0xE180C03C, 0xA400438D}, {0x21C98740, 0x8292336E},
+ {0x5F08E32D, 0x199003BE}, {0x395F159F, 0x548F006A}, {0x56C0E1A8, 0x615AFB92}, {0x34C25F6B, 0x09A94E17},
+ {0x065E7EE2, 0x261D653F}, {0x34098CAE, 0x98C4F883}, {0xCCE9F189, 0xE130A6F3}, {0x0B2623B2, 0xB37D5DF2},
+ {0x15060552, 0x6696A996}, {0x9A6BED1D, 0x06AD8687}, {0xB3BE361C, 0x544BB3BB}, {0x794CD2F6, 0xABE0044F},
+ {0xFD63A961, 0x1C022D3A}, {0xB0D8CA4A, 0x35CF00D5}, {0x191AA53A, 0x7A67012A}, {0x86E467F8, 0x677C55C2},
+ {0x05049572, 0x3D9B41CE}, {0x5AF799BF, 0x70859774}, {0xBEE65CDB, 0xFFC53BEE}, {0xDA391429, 0x10833449},
+ {0x6C9D5184, 0xC86F03B6}, {0xD4BFC9E5, 0x062AA3A6}, {0x837F0544, 0x1F6EB9B0}, {0x401BD376, 0x070FF410},
+ {0xE7422BF8, 0x737D53AC}, {0xE1C047E4, 0x5A0C90AE}, {0x6880766A, 0x4DB36B21}, {0x9196F1E3, 0xDC891595},
+ {0x8546F6EC, 0x9CE82ABC}, {0x757165C0, 0x2DAEB31D}, {0x515B8185, 0x447E8705}, {0x1FC52296, 0x2FE3028B},
+ {0xC00FC243, 0x90FFC906}, {0xE61722A1, 0x9ACF294E}, {0xE238AEDA, 0x4CC77F32}, {0x55775387, 0x040105A9},
+ {0x9674592B, 0xA856C32A}, {0xE25046B4, 0xE3281A1F}, {0xC8FCC844, 0x0821ED90}, {0xFADD60E4, 0x074D28BB},
+ {0xD32EB188, 0x84F4C054}, {0x70D216A3, 0x75A046E5}, {0xFDF8C2D9, 0x44BB0A90}, {0x33E5F1CD, 0xB7465AAE},
+ {0x90FC236F, 0xD125E8DF}, {0x9DD44A65, 0x549270AE}, {0xB900B551, 0x03FC95BC}, {0x9DB07B57, 0x14222C4B},
+ {0xBA270693, 0xBC86DC9E}, {0xA53E9D1C, 0x542BEA4B}, {0xE604EE5B, 0xC003442C}, {0x00AEA1F3, 0xF2747F06},
+ {0xC961E8EB, 0xDDA2E977}, {0x2D7F2094, 0xAFAEF730}, {0x3973AF7B, 0xD1D45824}, {0xC7737E14, 0x50DEECB7},
+ {0xBEA24EEF, 0xDAA0EFEF}, {0xA8D6E83B, 0x8DF1748E}, {0xA5D7CC38, 0x193E2001}, {0x98D7AA62, 0x0CD26264},
+ {0x55DC598B, 0xD5203CF5}, {0xAA987D6F, 0x09993C8D}, {0xEE9BD96F, 0x1BD66106}, {0x85AF8C63, 0xA7E604FD},
+ {0x81D0A10B, 0xB3D7D87E}, {0x3CCEA652, 0x28D3EADE}, {0x738FFA8E, 0xE80A7F01}, {0x4F164BD6, 0xBE4C4217},
+ {0x9C212C53, 0x1814DAC3}, {0xAC79FE16, 0x908FFEE2}, {0x380B97F1, 0x420A6899}, {0x969D74FA, 0x8C8F36C6},
+};
diff --git a/gdb/cheri-compressed-cap/test/elf.h b/gdb/cheri-compressed-cap/test/elf.h
new file mode 100644
index 00000000000..909dd3ab76b
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/elf.h
@@ -0,0 +1 @@
+// This is included by sail generated code but not actually needed
diff --git a/gdb/cheri-compressed-cap/test/fuzz_decompress_128.cpp b/gdb/cheri-compressed-cap/test/fuzz_decompress_128.cpp
new file mode 100644
index 00000000000..fc41ab800c3
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/fuzz_decompress_128.cpp
@@ -0,0 +1,4 @@
+#define TEST_CC_FORMAT_LOWER 128
+#define TEST_CC_FORMAT_UPPER 128
+
+#include "fuzz_decompress_common.cpp"
diff --git a/gdb/cheri-compressed-cap/test/fuzz_decompress_128m.cpp b/gdb/cheri-compressed-cap/test/fuzz_decompress_128m.cpp
new file mode 100644
index 00000000000..6bb36ca80b5
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/fuzz_decompress_128m.cpp
@@ -0,0 +1,5 @@
+#define TEST_CC_FORMAT_LOWER 128m
+#define TEST_CC_FORMAT_UPPER 128M
+#define TEST_CC_IS_MORELLO
+
+#include "fuzz_decompress_common.cpp"
diff --git a/gdb/cheri-compressed-cap/test/fuzz_decompress_64.cpp b/gdb/cheri-compressed-cap/test/fuzz_decompress_64.cpp
new file mode 100644
index 00000000000..311f129cb16
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/fuzz_decompress_64.cpp
@@ -0,0 +1,4 @@
+#define TEST_CC_FORMAT_LOWER 64
+#define TEST_CC_FORMAT_UPPER 64
+
+#include "fuzz_decompress_common.cpp"
diff --git a/gdb/cheri-compressed-cap/test/fuzz_decompress_common.cpp b/gdb/cheri-compressed-cap/test/fuzz_decompress_common.cpp
new file mode 100644
index 00000000000..4702a7965e6
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/fuzz_decompress_common.cpp
@@ -0,0 +1,137 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2018 Lawrence Esswood
+ * Copyright (c) 2018 Alex Richardson
+ * All rights reserved.
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include "../cheri_compressed_cap.h"
+#include "FuzzedDataProvider.h"
+#include "sail_wrapper.h"
+#include <cinttypes>
+#include <cstdio>
+
+#define CC_FORMAT_LOWER TEST_CC_FORMAT_LOWER
+#define CC_FORMAT_UPPER TEST_CC_FORMAT_UPPER
+
+#define DO_STRINGIFY2(x) #x
+#define DO_STRINGIFY1(x) DO_STRINGIFY2(x)
+#define STRINGIFY(x) DO_STRINGIFY1(x)
+
+static const char* otype_suffix(uint32_t otype) {
+ switch (otype) {
+#define OTYPE_CASE(Name, ...) \
+ case _CC_N(Name): return " (" STRINGIFY(_CC_N(Name)) ")";
+ _CC_N(LS_SPECIAL_OTYPES)(OTYPE_CASE, )
+ default: return "";
+ }
+}
+
+static void dump_cap_fields(const _cc_cap_t& result) {
+ fprintf(stderr, "Permissions: 0x%" PRIx32 "\n", result.permissions()); // TODO: decode perms
+ fprintf(stderr, "User Perms: 0x%" PRIx32 "\n", result.software_permissions());
+ fprintf(stderr, "Base: 0x%016" PRIx64 "\n", (uint64_t)result.base());
+ fprintf(stderr, "Offset: 0x%016" PRIx64 "\n", (uint64_t)result.offset());
+ fprintf(stderr, "Cursor: 0x%016" PRIx64 "\n", (uint64_t)result.address());
+ unsigned __int128 len_full = result.length();
+ fprintf(stderr, "Length: 0x%" PRIx64 "%016" PRIx64 " %s\n", (uint64_t)(len_full >> 64), (uint64_t)len_full,
+ len_full > UINT64_MAX ? " (greater than UINT64_MAX)" : "");
+ unsigned __int128 top_full = result.top();
+ fprintf(stderr, "Top: 0x%" PRIx64 "%016" PRIx64 " %s\n", (uint64_t)(top_full >> 64), (uint64_t)top_full,
+ top_full > UINT64_MAX ? " (greater than UINT64_MAX)" : "");
+ fprintf(stderr, "Flags: %d\n", (int)result.flags());
+ fprintf(stderr, "Reserved: %d\n", (int)result.reserved_bits());
+ fprintf(stderr, "Sealed: %d\n", (int)result.is_sealed());
+ fprintf(stderr, "OType: 0x%" PRIx32 "%s\n", result.type(), otype_suffix(result.type()));
+ fprintf(stderr, "\n");
+}
+
+// TODO: Implement for Morello
+#ifndef TEST_CC_IS_MORELLO
+static inline void check_crrl_and_cram(_cc_addr_t value) {
+ _cc_addr_t sail_crrl = _cc_sail_representable_length(value);
+ _cc_addr_t clib_crrl = _cc_N(get_representable_length)(value);
+ if (sail_crrl != clib_crrl) {
+ fprintf(stderr, "CRRL(0x%" PRIx64 ") mismatch: sail=0x%" PRIx64 ", C lib=0x%" PRIx64 "\n",
+ (uint64_t)value, (uint64_t)sail_crrl, (uint64_t)clib_crrl);
+ abort();
+ }
+ _cc_addr_t sail_cram = _cc_sail_representable_mask(value);
+ _cc_addr_t clib_cram = _cc_N(get_alignment_mask)(value);
+ if (sail_cram != clib_cram) {
+ fprintf(stderr, "CRAM(0x%" PRIx64 ") mismatch: sail=0x%" PRIx64 ", C lib=0x%" PRIx64 "\n",
+ (uint64_t)value, (uint64_t)sail_cram, (uint64_t)clib_cram);
+ abort();
+ }
+}
+#endif
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+ if (size != 2 * sizeof(_cc_addr_t)) {
+ return 0; // Need two words of data
+ }
+ FuzzedDataProvider fuzzData(data, size);
+ _cc_addr_t pesbt = fuzzData.ConsumeIntegral<_cc_addr_t>();
+ _cc_addr_t cursor = fuzzData.ConsumeIntegral<_cc_addr_t>();
+ _cc_cap_t result;
+ _cc_cap_t sail_result;
+ memset(&result, 0, sizeof(result));
+ memset(&sail_result, 0, sizeof(sail_result));
+ _cc_N(decompress_mem)(pesbt, cursor, false, &result);
+ _cc_sail_decode_mem(pesbt, cursor, false, &sail_result);
+ if (memcmp(&result, &sail_result, sizeof(result)) != 0) {
+ fprintf(stderr, "DECODE FROM MEM FAILED\n");
+ fprintf(stderr, "PESBT 0x%016" PRIx64 "\n", (uint64_t)pesbt);
+ fprintf(stderr, "Cursor 0x%016" PRIx64 "\n", (uint64_t)cursor);
+ dump_cap_fields(result);
+ dump_cap_fields(sail_result);
+ abort();
+ }
+
+#ifndef TEST_CC_IS_MORELLO
+ check_crrl_and_cram(pesbt);
+ check_crrl_and_cram(cursor);
+#endif
+
+ memset(&result, 0, sizeof(result));
+ memset(&sail_result, 0, sizeof(sail_result));
+ _cc_N(decompress_raw)(pesbt, cursor, false, &result);
+ _cc_sail_decode_raw(pesbt, cursor, false, &sail_result);
+ if (memcmp(&result, &sail_result, sizeof(result)) != 0) {
+ fprintf(stderr, "DECODE ALREADY XORED FAILED\n");
+ fprintf(stderr, "PESBT 0x%016" PRIx64 "\n", (uint64_t)pesbt);
+ fprintf(stderr, "Cursor 0x%016" PRIx64 "\n", (uint64_t)cursor);
+ dump_cap_fields(result);
+ dump_cap_fields(sail_result);
+ abort();
+ }
+
+ return 0; // Non-zero return values are reserved for future use.
+}
diff --git a/gdb/cheri-compressed-cap/test/random_inputs_test_128.cpp b/gdb/cheri-compressed-cap/test/random_inputs_test_128.cpp
new file mode 100644
index 00000000000..81ae425f742
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/random_inputs_test_128.cpp
@@ -0,0 +1,4 @@
+#define TEST_CC_FORMAT_LOWER 128
+#define TEST_CC_FORMAT_UPPER 128
+
+#include "random_inputs_test_common.cpp"
diff --git a/gdb/cheri-compressed-cap/test/random_inputs_test_128m.cpp b/gdb/cheri-compressed-cap/test/random_inputs_test_128m.cpp
new file mode 100644
index 00000000000..1a94a3b2092
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/random_inputs_test_128m.cpp
@@ -0,0 +1,5 @@
+#define TEST_CC_FORMAT_LOWER 128m
+#define TEST_CC_FORMAT_UPPER 128M
+#define TEST_CC_IS_MORELLO
+
+#include "random_inputs_test_common.cpp"
diff --git a/gdb/cheri-compressed-cap/test/random_inputs_test_64.cpp b/gdb/cheri-compressed-cap/test/random_inputs_test_64.cpp
new file mode 100644
index 00000000000..797aeda4006
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/random_inputs_test_64.cpp
@@ -0,0 +1,4 @@
+#define TEST_CC_FORMAT_LOWER 64
+#define TEST_CC_FORMAT_UPPER 64
+
+#include "random_inputs_test_common.cpp"
diff --git a/gdb/cheri-compressed-cap/test/random_inputs_test_common.cpp b/gdb/cheri-compressed-cap/test/random_inputs_test_common.cpp
new file mode 100644
index 00000000000..dac32e5c88f
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/random_inputs_test_common.cpp
@@ -0,0 +1,150 @@
+#include <cinttypes>
+#include <cstdint>
+#include <cstring>
+
+#include "test_common.cpp"
+
+#if _CC_N(CAP_BITS) == 64
+#include "decode_inputs_64.cpp"
+#elif _CC_N(CAP_BITS) == 128
+#include "decode_inputs_128.cpp"
+#else
+#error "Unknown capability size"
+#endif
+
+#define CHECK_AND_SAVE_SUCCESS(expr) \
+ do { \
+ CHECK(expr); \
+ if (!(expr)) { \
+ success = false; \
+ } \
+ } while (false)
+
+template <class Handler, typename test_input>
+static bool check_fields_match(const typename Handler::cap_t& result, const test_input& input,
+ const std::string& prefix) {
+ typename Handler::cap_t sail_result;
+ memset(&sail_result, 0, sizeof(sail_result));
+ Handler::sail_decode_raw(input.pesbt, input.cursor, false, &sail_result);
+
+ typename Handler::bounds_bits bounds_bits = Handler::extract_bounds_bits(input.pesbt);
+ // TODO: Implement sail_extract_bounds_bits for Morello
+#ifndef TEST_CC_IS_MORELLO
+ typename Handler::bounds_bits sail_bounds_bits = Handler::sail_extract_bounds_bits(input.pesbt);
+ REQUIRE(sail_bounds_bits == bounds_bits);
+#endif
+
+ CAPTURE(bounds_bits);
+ CAPTURE(sail_result);
+ CAPTURE(result);
+ // TODO: CHECK(sail_result._cr_top >= sail_result.cr_base);
+ // TODO: CHECK(result._cr_top >= result.cr_base);
+
+ bool success = true;
+ CAPTURE(prefix);
+
+ CHECK_AND_SAVE_SUCCESS(sail_result._cr_cursor == result._cr_cursor);
+ CHECK_AND_SAVE_SUCCESS(sail_result._cr_top == result._cr_top);
+ CHECK_AND_SAVE_SUCCESS(sail_result.cr_base == result.cr_base);
+ CHECK_AND_SAVE_SUCCESS(sail_result.cr_pesbt == result.cr_pesbt);
+ CHECK_AND_SAVE_SUCCESS(sail_result.flags() == result.flags());
+ CHECK_AND_SAVE_SUCCESS(sail_result.type() == result.type());
+ CHECK_AND_SAVE_SUCCESS(sail_result.permissions() == result.permissions());
+ CHECK_AND_SAVE_SUCCESS(sail_result.reserved_bits() == result.reserved_bits());
+ CHECK_AND_SAVE_SUCCESS(sail_result.cr_tag == result.cr_tag);
+ CHECK_AND_SAVE_SUCCESS(sail_result.software_permissions() == result.software_permissions());
+
+ // Since we are parsing arbitrary bit patterns, the length can be negative.
+ // For the CRRL/CRAM check we only look at the low 64 bits of length.
+ // TODO: Implement sail_representable_length/sail_representable_mask for
+ // Morello (though idempotence isn't guaranteed so shouldn't be tested?)
+#ifndef TEST_CC_IS_MORELLO
+ typename Handler::addr_t len_truncated = (typename Handler::addr_t)result.length();
+ typename Handler::addr_t rep_len = Handler::representable_length(len_truncated);
+ if (rep_len != 0) {
+ REQUIRE(rep_len >= len_truncated); // representable length wraps to 0 for >= 2^64
+ }
+ // Check that CRRL is idempotent:
+ CHECK_AND_SAVE_SUCCESS(rep_len == Handler::representable_length(rep_len));
+ // And equal to sail:
+ CHECK_AND_SAVE_SUCCESS(rep_len == Handler::sail_representable_length(len_truncated));
+ CHECK_AND_SAVE_SUCCESS(rep_len == Handler::sail_representable_length(rep_len));
+ // Finally check CRAM:
+ typename Handler::addr_t rep_mask = Handler::representable_mask(len_truncated);
+ CHECK_AND_SAVE_SUCCESS(rep_mask == Handler::sail_representable_mask(len_truncated));
+#endif
+
+ return success;
+}
+
+template <class Handler, typename test_input> static bool test_one_entry(const test_input& ti) {
+ // decompress_representable(ti.input.pesbt, ti.input.cursor);
+ typename Handler::cap_t result;
+ memset(&result, 0, sizeof(result));
+ // The inputs already have the NULL xor mask removed -> Handler::decompress_raw()
+ Handler::decompress_raw(ti.pesbt, ti.cursor, false, &result);
+ CAPTURE(ti.pesbt, ti.cursor);
+
+ bool success = check_fields_match<Handler>(result, ti, "");
+ if (!success) {
+ fprintf(stderr, "Decompressed raw pesbt = %016" PRIx64 ", cursor = %016" PRIx64 "\n", (uint64_t)ti.pesbt,
+ (uint64_t)ti.cursor);
+ dump_cap_fields(result);
+ }
+ // Now try recompressing and compare pesbt (for valid capabilities)
+ typename Handler::length_t top_full = result.top();
+ // Also don't attempt to recompress massively out-of-bounds caps since that might not work:
+ if (top_full >= result.cr_base && top_full <= _CC_N(MAX_TOP) && result.address() <= result.length()) {
+ typename Handler::addr_t recompressed_pesbt = Handler::compress_raw(&result);
+ // TODO: Implement sail_compress_raw/sail_decode_raw for Morello
+#ifndef TEST_CC_IS_MORELLO
+ typename Handler::addr_t sail_recompressed_pesbt = Handler::sail_compress_raw(&result);
+ CHECK_AND_SAVE_SUCCESS(recompressed_pesbt == sail_recompressed_pesbt);
+#endif
+ CAPTURE(recompressed_pesbt);
+ if (ti.pesbt != recompressed_pesbt) {
+ fprintf(stderr,
+ "Note: Recompressing resulted in different pesbt = 0x%016" PRIx64 ", original = 0x%016" PRIx64
+ ", xor = 0x%016" PRIx64 "\n",
+ (uint64_t)recompressed_pesbt, (uint64_t)ti.pesbt, (uint64_t)(recompressed_pesbt ^ ti.pesbt));
+ // This is not an error since there are multiple ways of encoding the same bot/top values with different
+ // exponents
+ }
+ // But even if it didn't compress the same at least all fields decompressed from the new pesbt must be the same:
+ typename Handler::cap_t result_recompressed;
+ memset(&result_recompressed, 0, sizeof(result_recompressed));
+ // The inputs already have the NULL xor mask removed -> Handler::decompress_raw()
+ Handler::decompress_raw(recompressed_pesbt, ti.cursor, false, &result_recompressed);
+ success = success && check_fields_match<Handler>(result_recompressed, ti, "Recompressed pesbt: ");
+ // Sanity check: recompress with sail
+ memset(&result_recompressed, 0, sizeof(result_recompressed));
+ Handler::sail_decode_raw(recompressed_pesbt, ti.cursor, false, &result_recompressed);
+ success = success && check_fields_match<Handler>(result_recompressed, ti, "Sail recompressed pesbt: ");
+ if (!success) {
+ fprintf(stderr, "\nOriginal decoded:\n");
+ dump_cap_fields(result);
+ fprintf(stderr, "\nRecompressed decoded:\n");
+ dump_cap_fields(result_recompressed);
+ }
+ _cc_addr_t recompressed_pesbt_after_normalize = Handler::compress_raw(&result_recompressed);
+ CHECK_AND_SAVE_SUCCESS(recompressed_pesbt == recompressed_pesbt_after_normalize);
+#ifndef TEST_CC_IS_MORELLO
+ _cc_addr_t sail_recompressed_pesbt_after_normalize = Handler::sail_compress_raw(&result_recompressed);
+ // Should match the sail values:
+ CHECK_AND_SAVE_SUCCESS(recompressed_pesbt_after_normalize == sail_recompressed_pesbt_after_normalize);
+#endif
+ }
+ return success;
+}
+
+TEST_CASE("Check sail-generated inputs decode correctly", "[decode]") {
+ int failure_count = 0;
+ for (size_t i = 0; i < array_lengthof(inputs); i++) {
+ if (!test_one_entry<TestAPICC>(inputs[i])) {
+ fprintf(stderr, "Failed at index %zd\n", i);
+ failure_count++;
+ // break;
+ }
+ }
+ REQUIRE(failure_count == 0);
+}
diff --git a/gdb/cheri-compressed-cap/test/regen_sail_c_code.sh b/gdb/cheri-compressed-cap/test/regen_sail_c_code.sh
new file mode 100755
index 00000000000..b826eb3a57e
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/regen_sail_c_code.sh
@@ -0,0 +1,42 @@
+#!/usr/bin/env bash
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+set -xe
+SAIL_DIR=${SAIL_RISCV_DIR:-${HOME}/cheri/sail/}
+if [ ! -e "${SAIL_DIR}/sail" ]; then
+ echo "Must set SAIL_DIR"
+ exit 1
+#else
+# SAIL_DIR=$(dirname $(command -v sail))
+fi
+SAIL_RISCV_DIR=${SAIL_RISCV_DIR:-${HOME}/cheri/sail-cheri-riscv/}
+if [ ! -e "$SAIL_RISCV_DIR" ]; then
+ echo "Must set SAIL_RISCV_DIR"
+ exit 1
+fi
+
+sail_pre_srcs="sail-riscv/model/prelude.sail sail-riscv/model/prelude_mapping.sail"
+sail128_srcs="$sail_pre_srcs sail-riscv/model/riscv_xlen64.sail sail-riscv/model/riscv_flen_D.sail src/cheri_prelude.sail src/cheri_types.sail src/cheri_prelude_128.sail src/cheri_cap_common.sail"
+sail64_srcs="$sail_pre_srcs sail-riscv/model/riscv_xlen32.sail sail-riscv/model/riscv_flen_F.sail src/cheri_prelude.sail src/cheri_types.sail src/cheri_prelude_64.sail src/cheri_cap_common.sail"
+output_dir=${SCRIPT_DIR}
+keep_required_functions=(-c_preserve capToBits
+ -c_preserve capToMemBits
+ -c_preserve capBitsToCapability
+ -c_preserve memBitsToCapability
+ -c_preserve fastRepCheck
+ -c_preserve setCapBounds
+ -c_preserve getCapBounds
+ -c_preserve getCapFlags
+ -c_preserve setCapPerms
+ -c_preserve capToString
+ -c_preserve getRepresentableLength
+ -c_preserve getRepresentableAlignmentMask)
+
+cd "$SAIL_RISCV_DIR"
+# -c_no_rts
+"${SAIL_DIR}/sail" -c -c_no_main -c_prefix sailgen_ -c_specialize "${keep_required_functions[@]}" -verbose=2 -o "$output_dir/sail_compression_128" $sail128_srcs "$output_dir/compression_test.sail" -static
+"${SAIL_DIR}/sail" -c -c_no_main -c_prefix sailgen_ -c_specialize "${keep_required_functions[@]}" -verbose=2 -o "$output_dir/sail_compression_64" $sail64_srcs "$output_dir/compression_test.sail" -static
+cd "$output_dir"
+
+for i in sail.h sail.c sail_failure.c sail_failure.h; do
+ cp "${SAIL_DIR}/lib/${i}" .
+done
diff --git a/gdb/cheri-compressed-cap/test/regen_sail_c_code_morello.sh b/gdb/cheri-compressed-cap/test/regen_sail_c_code_morello.sh
new file mode 100755
index 00000000000..7cbe2b69075
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/regen_sail_c_code_morello.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+set -xe
+SAIL_DIR=${SAIL_MORELLO_DIR:-${HOME}/.opam/default/bin}
+if [ ! -e "${SAIL_DIR}/sail" ]; then
+ echo "Must set SAIL_DIR"
+ exit 1
+#else
+# SAIL_DIR=$(dirname $(command -v sail))
+fi
+SAIL_MORELLO_DIR=${SAIL_MORELLO_DIR:-${HOME}/cheri/arm-morello-dropzone/sail}
+if [ ! -e "$SAIL_MORELLO_DIR" ]; then
+ echo "Must set SAIL_MORELLO_DIR"
+ exit 1
+fi
+
+sail128_srcs="prelude.sail builtins.sail decode_start.sail v8_base.sail"
+extract_fns="CapGetBounds CapGetValue CapGetPermissions CapGetObjectType CapGetTag"
+output_dir=${SCRIPT_DIR}
+
+cd "$SAIL_MORELLO_DIR"
+printf ":rewrites c\n:slice_roots $extract_fns\n:slice\n:compile c\n:quit\n" | "${SAIL_DIR}/sail" -i -c_no_main -static -c_prefix sailgen_ -c_specialize -no_effects -memo_z3 -non_lexical_flow -no_warn -o "$output_dir/sail_compression_128m" $sail128_srcs
+cd "$output_dir"
diff --git a/gdb/cheri-compressed-cap/test/rts.c b/gdb/cheri-compressed-cap/test/rts.c
new file mode 100644
index 00000000000..20aaf1bc57b
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/rts.c
@@ -0,0 +1,21 @@
+#include "rts.h"
+#include "sail.h"
+#include <stdbool.h>
+
+void setup_rts(void) {
+ // Avoid double initialization of sail.c data
+ static int done_setup = false;
+ if (!done_setup) {
+ setup_library();
+ done_setup = true;
+ }
+}
+
+void cleanup_rts(void) {
+ // Avoid double free of sail.c data
+ static int done_cleanup = false;
+ if (!done_cleanup) {
+ cleanup_library();
+ done_cleanup = true;
+ }
+}
diff --git a/gdb/cheri-compressed-cap/test/rts.h b/gdb/cheri-compressed-cap/test/rts.h
new file mode 100644
index 00000000000..aa820d4f860
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/rts.h
@@ -0,0 +1,12 @@
+#pragma once
+
+#include <stdbool.h>
+#include <stdlib.h>
+
+/* ***** Setup and cleanup functions for RTS ***** */
+static int process_arguments(int argc, char** argv) { abort(); }
+void setup_rts(void);
+void cleanup_rts(void);
+
+// this is needed for some reason:
+static bool have_exception = false;
diff --git a/gdb/cheri-compressed-cap/test/sail.c b/gdb/cheri-compressed-cap/test/sail.c
new file mode 100644
index 00000000000..6c2f6960046
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/sail.c
@@ -0,0 +1,1731 @@
+/****************************************************************************/
+/* Sail */
+/* */
+/* Sail and the Sail architecture models here, comprising all files and */
+/* directories except the ASL-derived Sail code in the aarch64 directory, */
+/* are subject to the BSD two-clause licence below. */
+/* */
+/* The ASL derived parts of the ARMv8.3 specification in */
+/* aarch64/no_vector and aarch64/full are copyright ARM Ltd. */
+/* */
+/* Copyright (c) 2013-2021 */
+/* Kathyrn Gray */
+/* Shaked Flur */
+/* Stephen Kell */
+/* Gabriel Kerneis */
+/* Robert Norton-Wright */
+/* Christopher Pulte */
+/* Peter Sewell */
+/* Alasdair Armstrong */
+/* Brian Campbell */
+/* Thomas Bauereiss */
+/* Anthony Fox */
+/* Jon French */
+/* Dominic Mulligan */
+/* Stephen Kell */
+/* Mark Wassell */
+/* Alastair Reid (Arm Ltd) */
+/* */
+/* All rights reserved. */
+/* */
+/* This work was partially supported by EPSRC grant EP/K008528/1 <a */
+/* href="http://www.cl.cam.ac.uk/users/pes20/rems">REMS: Rigorous */
+/* Engineering for Mainstream Systems</a>, an ARM iCASE award, EPSRC IAA */
+/* KTF funding, and donations from Arm. This project has received */
+/* funding from the European Research Council (ERC) under the European */
+/* Union’s Horizon 2020 research and innovation programme (grant */
+/* agreement No 789108, ELVER). */
+/* */
+/* This software was developed by SRI International and the University of */
+/* Cambridge Computer Laboratory (Department of Computer Science and */
+/* Technology) under DARPA/AFRL contracts FA8650-18-C-7809 ("CIFV") */
+/* and FA8750-10-C-0237 ("CTSRD"). */
+/* */
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in */
+/* the documentation and/or other materials provided with the */
+/* distribution. */
+/* */
+/* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' */
+/* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */
+/* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A */
+/* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR */
+/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
+/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */
+/* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF */
+/* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND */
+/* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, */
+/* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT */
+/* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF */
+/* SUCH DAMAGE. */
+/****************************************************************************/
+
+#define _GNU_SOURCE
+#include<assert.h>
+#include<inttypes.h>
+#include<stdbool.h>
+#include<stdio.h>
+#include<stdlib.h>
+#include<string.h>
+#include<time.h>
+
+#include"sail.h"
+
+// zero bits from high index, same semantics as bzhi intrinsic
+uint64_t bzhi_u64(uint64_t bits, uint64_t len)
+{
+ return bits & (UINT64_MAX >> (64 - len));
+}
+
+/*
+ * Temporary mpzs for use in functions below. To avoid conflicts, only
+ * use in functions that do not call other functions in this file.
+ */
+static sail_int sail_lib_tmp1, sail_lib_tmp2, sail_lib_tmp3;
+static real sail_lib_tmp_real;
+
+#define FLOAT_PRECISION 255
+
+void setup_library(void)
+{
+ srand(0x0);
+ mpz_init(sail_lib_tmp1);
+ mpz_init(sail_lib_tmp2);
+ mpz_init(sail_lib_tmp3);
+ mpq_init(sail_lib_tmp_real);
+ mpf_set_default_prec(FLOAT_PRECISION);
+}
+
+void cleanup_library(void)
+{
+ mpz_clear(sail_lib_tmp1);
+ mpz_clear(sail_lib_tmp2);
+ mpz_clear(sail_lib_tmp3);
+ mpq_clear(sail_lib_tmp_real);
+}
+
+bool EQUAL(unit)(const unit a, const unit b)
+{
+ return true;
+}
+
+unit UNDEFINED(unit)(const unit u)
+{
+ return UNIT;
+}
+
+unit skip(const unit u)
+{
+ return UNIT;
+}
+
+/* ***** Sail bit type ***** */
+
+bool eq_bit(const fbits a, const fbits b)
+{
+ return a == b;
+}
+
+/* ***** Sail booleans ***** */
+
+bool not(const bool b) {
+ return !b;
+}
+
+bool EQUAL(bool)(const bool a, const bool b) {
+ return a == b;
+}
+
+bool UNDEFINED(bool)(const unit u) {
+ return false;
+}
+
+/* ***** Sail strings ***** */
+
+void CREATE(sail_string)(sail_string *str)
+{
+ char *istr = (char *) sail_malloc(1 * sizeof(char));
+ istr[0] = '\0';
+ *str = istr;
+}
+
+void RECREATE(sail_string)(sail_string *str)
+{
+ sail_free(*str);
+ char *istr = (char *) sail_malloc(1 * sizeof(char));
+ istr[0] = '\0';
+ *str = istr;
+}
+
+void COPY(sail_string)(sail_string *str1, const sail_string str2)
+{
+ size_t len = strlen(str2);
+ *str1 = realloc(*str1, len + 1);
+ *str1 = strcpy(*str1, str2);
+}
+
+void KILL(sail_string)(sail_string *str)
+{
+ sail_free(*str);
+}
+
+void dec_str(sail_string *str, const mpz_t n)
+{
+ sail_free(*str);
+ gmp_asprintf(str, "%Zd", n);
+}
+
+void hex_str(sail_string *str, const mpz_t n)
+{
+ sail_free(*str);
+ gmp_asprintf(str, "0x%Zx", n);
+}
+
+bool eq_string(const sail_string str1, const sail_string str2)
+{
+ return strcmp(str1, str2) == 0;
+}
+
+bool EQUAL(sail_string)(const sail_string str1, const sail_string str2)
+{
+ return strcmp(str1, str2) == 0;
+}
+
+void undefined_string(sail_string *str, const unit u) {}
+
+void concat_str(sail_string *stro, const sail_string str1, const sail_string str2)
+{
+ *stro = realloc(*stro, strlen(str1) + strlen(str2) + 1);
+ (*stro)[0] = '\0';
+ strcat(*stro, str1);
+ strcat(*stro, str2);
+}
+
+bool string_startswith(sail_string s, sail_string prefix)
+{
+ return strstr(s, prefix) == s;
+}
+
+void string_length(sail_int *len, sail_string s)
+{
+ mpz_set_ui(*len, strlen(s));
+}
+
+void string_drop(sail_string *dst, sail_string s, sail_int ns)
+{
+ size_t len = strlen(s);
+ mach_int n = CREATE_OF(mach_int, sail_int)(ns);
+ if (len >= n) {
+ *dst = realloc(*dst, (len - n) + 1);
+ memcpy(*dst, s + n, len - n);
+ (*dst)[len - n] = '\0';
+ } else {
+ *dst = realloc(*dst, 1);
+ **dst = '\0';
+ }
+}
+
+void string_take(sail_string *dst, sail_string s, sail_int ns)
+{
+ size_t len = strlen(s);
+ mach_int n = CREATE_OF(mach_int, sail_int)(ns);
+ mach_int to_copy;
+ if (len <= n) {
+ to_copy = len;
+ } else {
+ to_copy = n;
+ }
+ *dst = realloc(*dst, to_copy + 1);
+ memcpy(*dst, s, to_copy);
+ *dst[to_copy] = '\0';
+}
+
+/* ***** Sail integers ***** */
+
+uint64_t sail_int_get_ui(const mpz_t op)
+{
+ return mpz_get_ui(op);
+}
+
+inline
+bool EQUAL(mach_int)(const mach_int op1, const mach_int op2)
+{
+ return op1 == op2;
+}
+
+#ifndef USE_INT128
+
+inline
+void COPY(sail_int)(sail_int *rop, const sail_int op)
+{
+ mpz_set(*rop, op);
+}
+
+inline
+void CREATE(sail_int)(sail_int *rop)
+{
+ mpz_init(*rop);
+}
+
+inline
+void RECREATE(sail_int)(sail_int *rop)
+{
+ mpz_set_ui(*rop, 0);
+}
+
+inline
+void KILL(sail_int)(sail_int *rop)
+{
+ mpz_clear(*rop);
+}
+
+inline
+void CREATE_OF(sail_int, mach_int)(sail_int *rop, mach_int op)
+{
+ mpz_init_set_si(*rop, op);
+}
+
+inline
+mach_int CREATE_OF(mach_int, sail_int)(const sail_int op)
+{
+ return mpz_get_ui(op);
+}
+
+inline
+void RECREATE_OF(sail_int, mach_int)(sail_int *rop, mach_int op)
+{
+ mpz_set_si(*rop, op);
+}
+
+inline
+void CREATE_OF(sail_int, sail_string)(sail_int *rop, sail_string str)
+{
+ mpz_init_set_str(*rop, str, 10);
+}
+
+inline
+void CONVERT_OF(sail_int, sail_string)(sail_int *rop, sail_string str)
+{
+ mpz_set_str(*rop, str, 10);
+}
+
+inline
+void RECREATE_OF(sail_int, sail_string)(mpz_t *rop, sail_string str)
+{
+ mpz_set_str(*rop, str, 10);
+}
+
+inline
+mach_int CONVERT_OF(mach_int, sail_int)(const sail_int op)
+{
+ return mpz_get_si(op);
+}
+
+inline
+void CONVERT_OF(sail_int, mach_int)(sail_int *rop, const mach_int op)
+{
+ mpz_set_si(*rop, op);
+}
+
+inline
+bool eq_int(const sail_int op1, const sail_int op2)
+{
+ return !abs(mpz_cmp(op1, op2));
+}
+
+inline
+bool EQUAL(sail_int)(const sail_int op1, const sail_int op2)
+{
+ return !abs(mpz_cmp(op1, op2));
+}
+
+inline
+bool lt(const sail_int op1, const sail_int op2)
+{
+ return mpz_cmp(op1, op2) < 0;
+}
+
+inline
+bool gt(const mpz_t op1, const mpz_t op2)
+{
+ return mpz_cmp(op1, op2) > 0;
+}
+
+inline
+bool lteq(const mpz_t op1, const mpz_t op2)
+{
+ return mpz_cmp(op1, op2) <= 0;
+}
+
+inline
+bool gteq(const mpz_t op1, const mpz_t op2)
+{
+ return mpz_cmp(op1, op2) >= 0;
+}
+
+void shl_int(sail_int *rop, const sail_int op1, const sail_int op2)
+{
+ mpz_mul_2exp(*rop, op1, mpz_get_ui(op2));
+}
+
+mach_int shl_mach_int(const mach_int op1, const mach_int op2)
+{
+ return op1 << op2;
+}
+
+void shr_int(sail_int *rop, const sail_int op1, const sail_int op2)
+{
+ mpz_fdiv_q_2exp(*rop, op1, mpz_get_ui(op2));
+}
+
+mach_int shr_mach_int(const mach_int op1, const mach_int op2)
+{
+ return op1 >> op2;
+}
+
+inline
+void undefined_int(sail_int *rop, const int n)
+{
+ mpz_set_ui(*rop, (uint64_t) n);
+}
+
+void undefined_nat(sail_int *rop, const unit u)
+{
+ mpz_set_ui(*rop, 0);
+}
+
+inline
+void undefined_range(sail_int *rop, const sail_int l, const sail_int u)
+{
+ mpz_set(*rop, l);
+}
+
+inline
+void add_int(sail_int *rop, const sail_int op1, const sail_int op2)
+{
+ mpz_add(*rop, op1, op2);
+}
+
+inline
+void sub_int(sail_int *rop, const sail_int op1, const sail_int op2)
+{
+ mpz_sub(*rop, op1, op2);
+}
+
+void sub_nat(sail_int *rop, const sail_int op1, const sail_int op2)
+{
+ mpz_sub(*rop, op1, op2);
+ if (mpz_cmp_ui(*rop, 0) < 0ul) {
+ mpz_set_ui(*rop, 0ul);
+ }
+}
+
+inline
+void mult_int(sail_int *rop, const sail_int op1, const sail_int op2)
+{
+ mpz_mul(*rop, op1, op2);
+}
+
+
+inline
+void ediv_int(sail_int *rop, const sail_int op1, const sail_int op2)
+{
+ /* GMP doesn't have Euclidean division but we can emulate it using
+ flooring and ceiling division. */
+ if (mpz_sgn(op2) >= 0) {
+ mpz_fdiv_q(*rop, op1, op2);
+ } else {
+ mpz_cdiv_q(*rop, op1, op2);
+ }
+}
+
+inline
+void emod_int(sail_int *rop, const sail_int op1, const sail_int op2)
+{
+ /* The documentation isn't that explicit but I think this is
+ Euclidean mod. */
+ mpz_mod(*rop, op1, op2);
+}
+
+inline
+void tdiv_int(sail_int *rop, const sail_int op1, const sail_int op2)
+{
+ mpz_tdiv_q(*rop, op1, op2);
+}
+
+inline
+void tmod_int(sail_int *rop, const sail_int op1, const sail_int op2)
+{
+ mpz_tdiv_r(*rop, op1, op2);
+}
+
+inline
+void fdiv_int(sail_int *rop, const sail_int op1, const sail_int op2)
+{
+ mpz_fdiv_q(*rop, op1, op2);
+}
+
+inline
+void fmod_int(sail_int *rop, const sail_int op1, const sail_int op2)
+{
+ mpz_fdiv_r(*rop, op1, op2);
+}
+
+void max_int(sail_int *rop, const sail_int op1, const sail_int op2)
+{
+ if (lt(op1, op2)) {
+ mpz_set(*rop, op2);
+ } else {
+ mpz_set(*rop, op1);
+ }
+}
+
+void min_int(sail_int *rop, const sail_int op1, const sail_int op2)
+{
+ if (gt(op1, op2)) {
+ mpz_set(*rop, op2);
+ } else {
+ mpz_set(*rop, op1);
+ }
+}
+
+inline
+void neg_int(sail_int *rop, const sail_int op)
+{
+ mpz_neg(*rop, op);
+}
+
+inline
+void abs_int(sail_int *rop, const sail_int op)
+{
+ mpz_abs(*rop, op);
+}
+
+inline
+void pow_int(sail_int *rop, const sail_int op1, const sail_int op2)
+{
+ uint64_t n = mpz_get_ui(op2);
+ mpz_pow_ui(*rop, op1, n);
+}
+
+void pow2(sail_int *rop, const sail_int exp)
+{
+ /* Assume exponent is never more than 2^64... */
+ uint64_t exp_ui = mpz_get_ui(exp);
+ mpz_t base;
+ mpz_init_set_ui(base, 2ul);
+ mpz_pow_ui(*rop, base, exp_ui);
+ mpz_clear(base);
+}
+
+#endif
+
+/* ***** Sail bitvectors ***** */
+
+bool EQUAL(fbits)(const fbits op1, const fbits op2)
+{
+ return op1 == op2;
+}
+
+bool EQUAL(ref_fbits)(const fbits *op1, const fbits *op2)
+{
+ return *op1 == *op2;
+}
+
+void CREATE(lbits)(lbits *rop)
+{
+ rop->bits = sail_malloc(sizeof(mpz_t));
+ rop->len = 0;
+ mpz_init(*rop->bits);
+}
+
+void RECREATE(lbits)(lbits *rop)
+{
+ rop->len = 0;
+ mpz_set_ui(*rop->bits, 0);
+}
+
+void COPY(lbits)(lbits *rop, const lbits op)
+{
+ rop->len = op.len;
+ mpz_set(*rop->bits, *op.bits);
+}
+
+void KILL(lbits)(lbits *rop)
+{
+ mpz_clear(*rop->bits);
+ sail_free(rop->bits);
+}
+
+void CREATE_OF(lbits, fbits)(lbits *rop, const uint64_t op, const uint64_t len, const bool direction)
+{
+ rop->bits = sail_malloc(sizeof(mpz_t));
+ rop->len = len;
+ mpz_init_set_ui(*rop->bits, op);
+}
+
+fbits CREATE_OF(fbits, lbits)(const lbits op, const bool direction)
+{
+ return mpz_get_ui(*op.bits);
+}
+
+sbits CREATE_OF(sbits, lbits)(const lbits op, const bool direction)
+{
+ sbits rop;
+ rop.bits = mpz_get_ui(*op.bits);
+ rop.len = op.len;
+ return rop;
+}
+
+sbits CREATE_OF(sbits, fbits)(const fbits op, const uint64_t len, const bool direction)
+{
+ sbits rop;
+ rop.bits = op;
+ rop.len = len;
+ return rop;
+}
+
+void RECREATE_OF(lbits, fbits)(lbits *rop, const uint64_t op, const uint64_t len, const bool direction)
+{
+ rop->len = len;
+ mpz_set_ui(*rop->bits, op);
+}
+
+void CREATE_OF(lbits, sbits)(lbits *rop, const sbits op, const bool direction)
+{
+ rop->bits = sail_malloc(sizeof(mpz_t));
+ rop->len = op.len;
+ mpz_init_set_ui(*rop->bits, op.bits);
+}
+
+void RECREATE_OF(lbits, sbits)(lbits *rop, const sbits op, const bool direction)
+{
+ rop->len = op.len;
+ mpz_set_ui(*rop->bits, op.bits);
+}
+
+// Bitvector conversions
+
+inline
+fbits CONVERT_OF(fbits, lbits)(const lbits op, const bool direction)
+{
+ return mpz_get_ui(*op.bits);
+}
+
+inline
+fbits CONVERT_OF(fbits, sbits)(const sbits op, const bool direction)
+{
+ return op.bits;
+}
+
+void CONVERT_OF(lbits, fbits)(lbits *rop, const fbits op, const uint64_t len, const bool direction)
+{
+ rop->len = len;
+ // use safe_rshift to correctly handle the case when we have a 0-length vector.
+ mpz_set_ui(*rop->bits, op & safe_rshift(UINT64_MAX, 64 - len));
+}
+
+void CONVERT_OF(lbits, sbits)(lbits *rop, const sbits op, const bool direction)
+{
+ rop->len = op.len;
+ mpz_set_ui(*rop->bits, op.bits & safe_rshift(UINT64_MAX, 64 - op.len));
+}
+
+inline
+sbits CONVERT_OF(sbits, fbits)(const fbits op, const uint64_t len, const bool direction)
+{
+ sbits rop;
+ rop.len = len;
+ rop.bits = op;
+ return rop;
+}
+
+inline
+sbits CONVERT_OF(sbits, lbits)(const lbits op, const bool direction)
+{
+ sbits rop;
+ rop.len = op.len;
+ rop.bits = mpz_get_ui(*op.bits);
+ return rop;
+}
+
+void UNDEFINED(lbits)(lbits *rop, const sail_int len)
+{
+ zeros(rop, len);
+}
+
+fbits UNDEFINED(fbits)(const unit u) { return 0; }
+
+sbits undefined_sbits(void)
+{
+ sbits rop;
+ rop.bits = UINT64_C(0);
+ rop.len = UINT64_C(0);
+ return rop;
+}
+
+fbits safe_rshift(const fbits x, const fbits n)
+{
+ if (n >= 64) {
+ return 0ul;
+ } else {
+ return x >> n;
+ }
+}
+
+void normalize_lbits(lbits *rop) {
+ /* TODO optimisation: keep a set of masks of various sizes handy */
+ mpz_set_ui(sail_lib_tmp1, 1);
+ mpz_mul_2exp(sail_lib_tmp1, sail_lib_tmp1, rop->len);
+ mpz_sub_ui(sail_lib_tmp1, sail_lib_tmp1, 1);
+ mpz_and(*rop->bits, *rop->bits, sail_lib_tmp1);
+}
+
+void append_64(lbits *rop, const lbits op, const fbits chunk)
+{
+ rop->len = rop->len + 64ul;
+ mpz_mul_2exp(*rop->bits, *op.bits, 64ul);
+ mpz_add_ui(*rop->bits, *rop->bits, chunk);
+}
+
+void add_bits(lbits *rop, const lbits op1, const lbits op2)
+{
+ rop->len = op1.len;
+ mpz_add(*rop->bits, *op1.bits, *op2.bits);
+ normalize_lbits(rop);
+}
+
+void sub_bits(lbits *rop, const lbits op1, const lbits op2)
+{
+ assert(op1.len == op2.len);
+ rop->len = op1.len;
+ mpz_sub(*rop->bits, *op1.bits, *op2.bits);
+ normalize_lbits(rop);
+}
+
+void add_bits_int(lbits *rop, const lbits op1, const mpz_t op2)
+{
+ rop->len = op1.len;
+ mpz_add(*rop->bits, *op1.bits, op2);
+ normalize_lbits(rop);
+}
+
+void sub_bits_int(lbits *rop, const lbits op1, const mpz_t op2)
+{
+ rop->len = op1.len;
+ mpz_sub(*rop->bits, *op1.bits, op2);
+ normalize_lbits(rop);
+}
+
+void and_bits(lbits *rop, const lbits op1, const lbits op2)
+{
+ assert(op1.len == op2.len);
+ rop->len = op1.len;
+ mpz_and(*rop->bits, *op1.bits, *op2.bits);
+}
+
+void or_bits(lbits *rop, const lbits op1, const lbits op2)
+{
+ assert(op1.len == op2.len);
+ rop->len = op1.len;
+ mpz_ior(*rop->bits, *op1.bits, *op2.bits);
+}
+
+void xor_bits(lbits *rop, const lbits op1, const lbits op2)
+{
+ assert(op1.len == op2.len);
+ rop->len = op1.len;
+ mpz_xor(*rop->bits, *op1.bits, *op2.bits);
+}
+
+void not_bits(lbits *rop, const lbits op)
+{
+ rop->len = op.len;
+ mpz_set(*rop->bits, *op.bits);
+ for (mp_bitcnt_t i = 0; i < op.len; i++) {
+ mpz_combit(*rop->bits, i);
+ }
+}
+
+void mults_vec(lbits *rop, const lbits op1, const lbits op2)
+{
+ mpz_t op1_int, op2_int;
+ mpz_init(op1_int);
+ mpz_init(op2_int);
+ sail_signed(&op1_int, op1);
+ sail_signed(&op2_int, op2);
+ rop->len = op1.len * 2;
+ mpz_mul(*rop->bits, op1_int, op2_int);
+ normalize_lbits(rop);
+ mpz_clear(op1_int);
+ mpz_clear(op2_int);
+}
+
+void mult_vec(lbits *rop, const lbits op1, const lbits op2)
+{
+ rop->len = op1.len * 2;
+ mpz_mul(*rop->bits, *op1.bits, *op2.bits);
+ normalize_lbits(rop); /* necessary? */
+}
+
+
+void zeros(lbits *rop, const sail_int op)
+{
+ rop->len = mpz_get_ui(op);
+ mpz_set_ui(*rop->bits, 0);
+}
+
+void zero_extend(lbits *rop, const lbits op, const sail_int len)
+{
+ assert(op.len <= mpz_get_ui(len));
+ rop->len = mpz_get_ui(len);
+ mpz_set(*rop->bits, *op.bits);
+}
+
+fbits fast_zero_extend(const sbits op, const uint64_t n)
+{
+ return op.bits;
+}
+
+void sign_extend(lbits *rop, const lbits op, const sail_int len)
+{
+ assert(op.len <= mpz_get_ui(len));
+ rop->len = mpz_get_ui(len);
+ if(mpz_tstbit(*op.bits, op.len - 1)) {
+ mpz_set(*rop->bits, *op.bits);
+ for(mp_bitcnt_t i = rop->len - 1; i >= op.len; i--) {
+ mpz_setbit(*rop->bits, i);
+ }
+ } else {
+ mpz_set(*rop->bits, *op.bits);
+ }
+}
+
+fbits fast_sign_extend(const fbits op, const uint64_t n, const uint64_t m)
+{
+ uint64_t rop = op;
+ if (op & (UINT64_C(1) << (n - 1))) {
+ for (uint64_t i = m - 1; i >= n; i--) {
+ rop = rop | (UINT64_C(1) << i);
+ }
+ return rop;
+ } else {
+ return rop;
+ }
+}
+
+fbits fast_sign_extend2(const sbits op, const uint64_t m)
+{
+ uint64_t rop = op.bits;
+ if (op.bits & (UINT64_C(1) << (op.len - 1))) {
+ for (uint64_t i = m - 1; i >= op.len; i--) {
+ rop = rop | (UINT64_C(1) << i);
+ }
+ return rop;
+ } else {
+ return rop;
+ }
+}
+
+void length_lbits(sail_int *rop, const lbits op)
+{
+ mpz_set_ui(*rop, op.len);
+}
+
+void count_leading_zeros(sail_int *rop, const lbits op)
+{
+ if (mpz_cmp_ui(*op.bits, 0) == 0) {
+ mpz_set_ui(*rop, op.len);
+ } else {
+ size_t bits = mpz_sizeinbase(*op.bits, 2);
+ mpz_set_ui(*rop, op.len - bits);
+ }
+}
+
+bool eq_bits(const lbits op1, const lbits op2)
+{
+ assert(op1.len == op2.len);
+ for (mp_bitcnt_t i = 0; i < op1.len; i++) {
+ if (mpz_tstbit(*op1.bits, i) != mpz_tstbit(*op2.bits, i)) return false;
+ }
+ return true;
+}
+
+bool EQUAL(lbits)(const lbits op1, const lbits op2)
+{
+ return eq_bits(op1, op2);
+}
+
+bool EQUAL(ref_lbits)(const lbits *op1, const lbits *op2)
+{
+ return eq_bits(*op1, *op2);
+}
+
+bool neq_bits(const lbits op1, const lbits op2)
+{
+ assert(op1.len == op2.len);
+ for (mp_bitcnt_t i = 0; i < op1.len; i++) {
+ if (mpz_tstbit(*op1.bits, i) != mpz_tstbit(*op2.bits, i)) return true;
+ }
+ return false;
+}
+
+void vector_subrange_lbits(lbits *rop,
+ const lbits op,
+ const sail_int n_mpz,
+ const sail_int m_mpz)
+{
+ uint64_t n = mpz_get_ui(n_mpz);
+ uint64_t m = mpz_get_ui(m_mpz);
+
+ rop->len = n - (m - 1ul);
+ mpz_fdiv_q_2exp(*rop->bits, *op.bits, m);
+ normalize_lbits(rop);
+}
+
+void sail_truncate(lbits *rop, const lbits op, const sail_int len)
+{
+ assert(op.len >= mpz_get_ui(len));
+ rop->len = mpz_get_ui(len);
+ mpz_set(*rop->bits, *op.bits);
+ normalize_lbits(rop);
+}
+
+void sail_truncateLSB(lbits *rop, const lbits op, const sail_int len)
+{
+ uint64_t rlen = mpz_get_ui(len);
+ assert(op.len >= rlen);
+ rop->len = rlen;
+ // similar to vector_subrange_lbits above -- right shift LSBs away
+ mpz_fdiv_q_2exp(*rop->bits, *op.bits, op.len - rlen);
+ normalize_lbits(rop);
+}
+
+fbits bitvector_access(const lbits op, const sail_int n_mpz)
+{
+ uint64_t n = mpz_get_ui(n_mpz);
+ return (fbits) mpz_tstbit(*op.bits, n);
+}
+
+fbits update_fbits(const fbits op, const uint64_t n, const fbits bit)
+{
+ if ((bit & 1) == 1) {
+ return op | (bit << n);
+ } else {
+ return op & ~(bit << n);
+ }
+}
+
+void sail_unsigned(sail_int *rop, const lbits op)
+{
+ /* Normal form of bv_t is always positive so just return the bits. */
+ mpz_set(*rop, *op.bits);
+}
+
+void sail_signed(sail_int *rop, const lbits op)
+{
+ if (op.len == 0) {
+ mpz_set_ui(*rop, 0);
+ } else {
+ mp_bitcnt_t sign_bit = op.len - 1;
+ mpz_set(*rop, *op.bits);
+ if (mpz_tstbit(*op.bits, sign_bit) != 0) {
+ /* If sign bit is unset then we are done,
+ otherwise clear sign_bit and subtract 2**sign_bit */
+ mpz_set_ui(sail_lib_tmp1, 1);
+ mpz_mul_2exp(sail_lib_tmp1, sail_lib_tmp1, sign_bit); /* 2**sign_bit */
+ mpz_combit(*rop, sign_bit); /* clear sign_bit */
+ mpz_sub(*rop, *rop, sail_lib_tmp1);
+ }
+ }
+}
+
+mach_int fast_unsigned(const fbits op)
+{
+ return (mach_int) op;
+}
+
+mach_int fast_signed(const fbits op, const uint64_t n)
+{
+ if (op & (UINT64_C(1) << (n - 1))) {
+ uint64_t rop = op & ~(UINT64_C(1) << (n - 1));
+ return (mach_int) (rop - (UINT64_C(1) << (n - 1)));
+ } else {
+ return (mach_int) op;
+ }
+}
+
+void append(lbits *rop, const lbits op1, const lbits op2)
+{
+ rop->len = op1.len + op2.len;
+ mpz_mul_2exp(*rop->bits, *op1.bits, op2.len);
+ mpz_ior(*rop->bits, *rop->bits, *op2.bits);
+}
+
+sbits append_sf(const sbits op1, const fbits op2, const uint64_t len)
+{
+ sbits rop;
+ rop.bits = (op1.bits << len) | op2;
+ rop.len = op1.len + len;
+ return rop;
+}
+
+sbits append_fs(const fbits op1, const uint64_t len, const sbits op2)
+{
+ sbits rop;
+ rop.bits = (op1 << op2.len) | op2.bits;
+ rop.len = len + op2.len;
+ return rop;
+}
+
+sbits append_ss(const sbits op1, const sbits op2)
+{
+ sbits rop;
+ rop.bits = (op1.bits << op2.len) | op2.bits;
+ rop.len = op1.len + op2.len;
+ return rop;
+}
+
+void replicate_bits(lbits *rop, const lbits op1, const mpz_t op2)
+{
+ uint64_t op2_ui = mpz_get_ui(op2);
+ rop->len = op1.len * op2_ui;
+ mpz_set_ui(*rop->bits, 0);
+ for (int i = 0; i < op2_ui; i++) {
+ mpz_mul_2exp(*rop->bits, *rop->bits, op1.len);
+ mpz_ior(*rop->bits, *rop->bits, *op1.bits);
+ }
+}
+
+uint64_t fast_replicate_bits(const uint64_t shift, const uint64_t v, const int64_t times)
+{
+ uint64_t r = v;
+ for (int i = 1; i < times; ++i) {
+ r |= (r << shift);
+ }
+ return r;
+}
+
+// Takes a slice of the (two's complement) binary representation of
+// integer n, starting at bit start, and of length len. With the
+// argument in the following order:
+//
+// get_slice_int(len, n, start)
+//
+// For example:
+//
+// get_slice_int(8, 1680, 4) =
+//
+// 11 0
+// V V
+// get_slice_int(8, 0b0110_1001_0000, 4) = 0b0110_1001
+// <-------^
+// (8 bit) 4
+//
+void get_slice_int(lbits *rop, const sail_int len_mpz, const sail_int n, const sail_int start_mpz)
+{
+ uint64_t start = mpz_get_ui(start_mpz);
+ uint64_t len = mpz_get_ui(len_mpz);
+
+ mpz_set_ui(*rop->bits, 0ul);
+ rop->len = len;
+
+ for (uint64_t i = 0; i < len; i++) {
+ if (mpz_tstbit(n, i + start)) mpz_setbit(*rop->bits, i);
+ }
+}
+
+// Set slice uses the same indexing scheme as get_slice_int, but it
+// puts a bitvector slice into an integer rather than returning it.
+void set_slice_int(sail_int *rop,
+ const sail_int len_mpz,
+ const sail_int n,
+ const sail_int start_mpz,
+ const lbits slice)
+{
+ uint64_t start = mpz_get_ui(start_mpz);
+
+ mpz_set(*rop, n);
+
+ for (uint64_t i = 0; i < slice.len; i++) {
+ if (mpz_tstbit(*slice.bits, i)) {
+ mpz_setbit(*rop, i + start);
+ } else {
+ mpz_clrbit(*rop, i + start);
+ }
+ }
+}
+
+void update_lbits(lbits *rop, const lbits op, const sail_int n_mpz, const uint64_t bit)
+{
+ uint64_t n = mpz_get_ui(n_mpz);
+
+ mpz_set(*rop->bits, *op.bits);
+ rop->len = op.len;
+
+ if (bit == UINT64_C(0)) {
+ mpz_clrbit(*rop->bits, n);
+ } else {
+ mpz_setbit(*rop->bits, n);
+ }
+}
+
+void vector_update_subrange_lbits(lbits *rop,
+ const lbits op,
+ const sail_int n_mpz,
+ const sail_int m_mpz,
+ const lbits slice)
+{
+ uint64_t n = mpz_get_ui(n_mpz);
+ uint64_t m = mpz_get_ui(m_mpz);
+
+ mpz_set(*rop->bits, *op.bits);
+ rop->len = op.len;
+
+ for (uint64_t i = 0; i < n - (m - 1ul); i++) {
+ if (mpz_tstbit(*slice.bits, i)) {
+ mpz_setbit(*rop->bits, i + m);
+ } else {
+ mpz_clrbit(*rop->bits, i + m);
+ }
+ }
+}
+
+fbits fast_update_subrange(const fbits op,
+ const mach_int n,
+ const mach_int m,
+ const fbits slice)
+{
+ fbits rop = op;
+ for (mach_int i = 0; i < n - (m - UINT64_C(1)); i++) {
+ uint64_t bit = UINT64_C(1) << ((uint64_t) i);
+ if (slice & bit) {
+ rop |= (bit << m);
+ } else {
+ rop &= ~(bit << m);
+ }
+ }
+ return rop;
+}
+
+void slice(lbits *rop, const lbits op, const sail_int start_mpz, const sail_int len_mpz)
+{
+ assert(mpz_get_ui(start_mpz) + mpz_get_ui(len_mpz) <= op.len);
+ uint64_t start = mpz_get_ui(start_mpz);
+ uint64_t len = mpz_get_ui(len_mpz);
+
+ mpz_set_ui(*rop->bits, 0);
+ rop->len = len;
+
+ for (uint64_t i = 0; i < len; i++) {
+ if (mpz_tstbit(*op.bits, i + start)) mpz_setbit(*rop->bits, i);
+ }
+}
+
+sbits sslice(const fbits op, const mach_int start, const mach_int len)
+{
+ sbits rop;
+ rop.bits = bzhi_u64(op >> start, len);
+ rop.len = len;
+ return rop;
+}
+
+void set_slice(lbits *rop,
+ const sail_int len_mpz,
+ const sail_int slen_mpz,
+ const lbits op,
+ const sail_int start_mpz,
+ const lbits slice)
+{
+ uint64_t start = mpz_get_ui(start_mpz);
+
+ mpz_set(*rop->bits, *op.bits);
+ rop->len = op.len;
+
+ for (uint64_t i = 0; i < slice.len; i++) {
+ if (mpz_tstbit(*slice.bits, i)) {
+ mpz_setbit(*rop->bits, i + start);
+ } else {
+ mpz_clrbit(*rop->bits, i + start);
+ }
+ }
+}
+
+void shift_bits_left(lbits *rop, const lbits op1, const lbits op2)
+{
+ rop->len = op1.len;
+ mpz_mul_2exp(*rop->bits, *op1.bits, mpz_get_ui(*op2.bits));
+ normalize_lbits(rop);
+}
+
+void shift_bits_right(lbits *rop, const lbits op1, const lbits op2)
+{
+ rop->len = op1.len;
+ mpz_tdiv_q_2exp(*rop->bits, *op1.bits, mpz_get_ui(*op2.bits));
+}
+
+/* FIXME */
+void shift_bits_right_arith(lbits *rop, const lbits op1, const lbits op2)
+{
+ rop->len = op1.len;
+ mp_bitcnt_t shift_amt = mpz_get_ui(*op2.bits);
+ mp_bitcnt_t sign_bit = op1.len - 1;
+ mpz_fdiv_q_2exp(*rop->bits, *op1.bits, shift_amt);
+ if(mpz_tstbit(*op1.bits, sign_bit) != 0) {
+ /* */
+ for(; shift_amt > 0; shift_amt--) {
+ mpz_setbit(*rop->bits, sign_bit - shift_amt + 1);
+ }
+ }
+}
+
+void arith_shiftr(lbits *rop, const lbits op1, const sail_int op2)
+{
+ rop->len = op1.len;
+ mp_bitcnt_t shift_amt = mpz_get_ui(op2);
+ mp_bitcnt_t sign_bit = op1.len - 1;
+ mpz_fdiv_q_2exp(*rop->bits, *op1.bits, shift_amt);
+ if(mpz_tstbit(*op1.bits, sign_bit) != 0) {
+ /* */
+ for(; shift_amt > 0; shift_amt--) {
+ mpz_setbit(*rop->bits, sign_bit - shift_amt + 1);
+ }
+ }
+}
+
+void shiftl(lbits *rop, const lbits op1, const sail_int op2)
+{
+ rop->len = op1.len;
+ mpz_mul_2exp(*rop->bits, *op1.bits, mpz_get_ui(op2));
+ normalize_lbits(rop);
+}
+
+void shiftr(lbits *rop, const lbits op1, const sail_int op2)
+{
+ rop->len = op1.len;
+ mpz_tdiv_q_2exp(*rop->bits, *op1.bits, mpz_get_ui(op2));
+}
+
+void reverse_endianness(lbits *rop, const lbits op)
+{
+ rop->len = op.len;
+ if (rop->len == 64ul) {
+ uint64_t x = mpz_get_ui(*op.bits);
+ x = (x & 0xFFFFFFFF00000000) >> 32 | (x & 0x00000000FFFFFFFF) << 32;
+ x = (x & 0xFFFF0000FFFF0000) >> 16 | (x & 0x0000FFFF0000FFFF) << 16;
+ x = (x & 0xFF00FF00FF00FF00) >> 8 | (x & 0x00FF00FF00FF00FF) << 8;
+ mpz_set_ui(*rop->bits, x);
+ } else if (rop->len == 32ul) {
+ uint64_t x = mpz_get_ui(*op.bits);
+ x = (x & 0xFFFF0000FFFF0000) >> 16 | (x & 0x0000FFFF0000FFFF) << 16;
+ x = (x & 0xFF00FF00FF00FF00) >> 8 | (x & 0x00FF00FF00FF00FF) << 8;
+ mpz_set_ui(*rop->bits, x);
+ } else if (rop->len == 16ul) {
+ uint64_t x = mpz_get_ui(*op.bits);
+ x = (x & 0xFF00FF00FF00FF00) >> 8 | (x & 0x00FF00FF00FF00FF) << 8;
+ mpz_set_ui(*rop->bits, x);
+ } else if (rop->len == 8ul) {
+ mpz_set(*rop->bits, *op.bits);
+ } else {
+ /* For other numbers of bytes we reverse the bytes.
+ * XXX could use mpz_import/export for this. */
+ mpz_set_ui(sail_lib_tmp1, 0xff); // byte mask
+ mpz_set_ui(*rop->bits, 0); // reset accumulator for result
+ for(mp_bitcnt_t byte = 0; byte < op.len; byte+=8) {
+ mpz_tdiv_q_2exp(sail_lib_tmp2, *op.bits, byte); // shift byte to bottom
+ mpz_and(sail_lib_tmp2, sail_lib_tmp2, sail_lib_tmp1); // and with mask
+ mpz_mul_2exp(*rop->bits, *rop->bits, 8); // shift result left 8
+ mpz_ior(*rop->bits, *rop->bits, sail_lib_tmp2); // or byte into result
+ }
+ }
+}
+
+bool eq_sbits(const sbits op1, const sbits op2)
+{
+ return op1.bits == op2.bits;
+}
+
+bool neq_sbits(const sbits op1, const sbits op2)
+{
+ return op1.bits != op2.bits;
+}
+
+sbits not_sbits(const sbits op)
+{
+ sbits rop;
+ rop.bits = (~op.bits) & bzhi_u64(UINT64_MAX, op.len);
+ rop.len = op.len;
+ return rop;
+}
+
+sbits xor_sbits(const sbits op1, const sbits op2)
+{
+ sbits rop;
+ rop.bits = op1.bits ^ op2.bits;
+ rop.len = op1.len;
+ return rop;
+}
+
+sbits or_sbits(const sbits op1, const sbits op2)
+{
+ sbits rop;
+ rop.bits = op1.bits | op2.bits;
+ rop.len = op1.len;
+ return rop;
+}
+
+sbits and_sbits(const sbits op1, const sbits op2)
+{
+ sbits rop;
+ rop.bits = op1.bits & op2.bits;
+ rop.len = op1.len;
+ return rop;
+}
+
+sbits add_sbits(const sbits op1, const sbits op2)
+{
+ sbits rop;
+ rop.bits = (op1.bits + op2.bits) & bzhi_u64(UINT64_MAX, op1.len);
+ rop.len = op1.len;
+ return rop;
+}
+
+sbits sub_sbits(const sbits op1, const sbits op2)
+{
+ sbits rop;
+ rop.bits = (op1.bits - op2.bits) & bzhi_u64(UINT64_MAX, op1.len);
+ rop.len = op1.len;
+ return rop;
+}
+
+/* ***** Sail Reals ***** */
+
+void CREATE(real)(real *rop)
+{
+ mpq_init(*rop);
+}
+
+void RECREATE(real)(real *rop)
+{
+ mpq_set_ui(*rop, 0, 1);
+}
+
+void KILL(real)(real *rop)
+{
+ mpq_clear(*rop);
+}
+
+void COPY(real)(real *rop, const real op)
+{
+ mpq_set(*rop, op);
+}
+
+void UNDEFINED(real)(real *rop, unit u)
+{
+ mpq_set_ui(*rop, 0, 1);
+}
+
+void neg_real(real *rop, const real op)
+{
+ mpq_neg(*rop, op);
+}
+
+void mult_real(real *rop, const real op1, const real op2) {
+ mpq_mul(*rop, op1, op2);
+}
+
+void sub_real(real *rop, const real op1, const real op2)
+{
+ mpq_sub(*rop, op1, op2);
+}
+
+void add_real(real *rop, const real op1, const real op2)
+{
+ mpq_add(*rop, op1, op2);
+}
+
+void div_real(real *rop, const real op1, const real op2)
+{
+ mpq_div(*rop, op1, op2);
+}
+
+#define SQRT_PRECISION 30
+
+/*
+ * sqrt_real first checks if op has the form n/1 - in which case, if n
+ * is a perfect square (i.e. it's square root is an integer), then it
+ * will return the exact square root using mpz_sqrt. If that's not the
+ * case we use the Babylonian method to calculate the square root to
+ * SQRT_PRECISION decimal places.
+ */
+void sqrt_real(real *rop, const real op)
+{
+ /* First check if op is a perfect square and use mpz_sqrt if so */
+ if (mpz_cmp_ui(mpq_denref(op), 1) == 0 && mpz_perfect_square_p(mpq_numref(op))) {
+ mpz_sqrt(mpq_numref(*rop), mpq_numref(op));
+ mpz_set_ui(mpq_denref(*rop), 1);
+ return;
+ }
+
+ mpq_t tmp;
+ mpz_t tmp_z;
+ mpq_t p; /* previous estimate, p */
+ mpq_t n; /* next estimate, n */
+ /* convergence is the precision (in decimal places) we want to reach as a fraction 1/(10^precision) */
+ mpq_t convergence;
+
+ mpq_init(tmp);
+ mpz_init(tmp_z);
+ mpq_init(p);
+ mpq_init(n);
+ mpq_init(convergence);
+
+ /* calculate an initial guess using mpz_sqrt */
+ mpz_cdiv_q(tmp_z, mpq_numref(op), mpq_denref(op));
+ mpz_sqrt(tmp_z, tmp_z);
+ mpq_set_z(p, tmp_z);
+
+ /* initialise convergence based on SQRT_PRECISION */
+ mpz_set_ui(tmp_z, 10);
+ mpz_pow_ui(tmp_z, tmp_z, SQRT_PRECISION);
+ mpz_set_ui(mpq_numref(convergence), 1);
+ mpq_set_den(convergence, tmp_z);
+
+ while (true) {
+ // n = (p + op / p) / 2
+ mpq_div(tmp, op, p);
+ mpq_add(tmp, tmp, p);
+ mpq_div_2exp(n, tmp, 1);
+
+ /* calculate the difference between n and p */
+ mpq_sub(tmp, p, n);
+ mpq_abs(tmp, tmp);
+
+ /* if the difference is small enough, return */
+ if (mpq_cmp(tmp, convergence) < 0) {
+ mpq_set(*rop, n);
+ break;
+ }
+
+ mpq_swap(n, p);
+ }
+
+ mpq_clear(tmp);
+ mpz_clear(tmp_z);
+ mpq_clear(p);
+ mpq_clear(n);
+ mpq_clear(convergence);
+}
+
+void abs_real(real *rop, const real op)
+{
+ mpq_abs(*rop, op);
+}
+
+void round_up(sail_int *rop, const real op)
+{
+ mpz_cdiv_q(*rop, mpq_numref(op), mpq_denref(op));
+}
+
+void round_down(sail_int *rop, const real op)
+{
+ mpz_fdiv_q(*rop, mpq_numref(op), mpq_denref(op));
+}
+
+void to_real(real *rop, const sail_int op)
+{
+ mpq_set_z(*rop, op);
+ mpq_canonicalize(*rop);
+}
+
+bool EQUAL(real)(const real op1, const real op2)
+{
+ return mpq_cmp(op1, op2) == 0;
+}
+
+bool lt_real(const real op1, const real op2)
+{
+ return mpq_cmp(op1, op2) < 0;
+}
+
+bool gt_real(const real op1, const real op2)
+{
+ return mpq_cmp(op1, op2) > 0;
+}
+
+bool lteq_real(const real op1, const real op2)
+{
+ return mpq_cmp(op1, op2) <= 0;
+}
+
+bool gteq_real(const real op1, const real op2)
+{
+ return mpq_cmp(op1, op2) >= 0;
+}
+
+void real_power(real *rop, const real base, const sail_int exp)
+{
+ int64_t exp_si = mpz_get_si(exp);
+
+ mpz_set_ui(mpq_numref(*rop), 1);
+ mpz_set_ui(mpq_denref(*rop), 1);
+
+ real b;
+ mpq_init(b);
+ mpq_set(b, base);
+ int64_t pexp = llabs(exp_si);
+ while (pexp != 0) {
+ // invariant: rop * b^pexp == base^abs(exp)
+ if (pexp & 1) { // b^(e+1) = b * b^e
+ mpq_mul(*rop, *rop, b);
+ pexp -= 1;
+ } else { // b^(2e) = (b*b)^e
+ mpq_mul(b, b, b);
+ pexp >>= 1;
+ }
+ }
+ if (exp_si < 0) {
+ mpq_inv(*rop, *rop);
+ }
+ mpq_clear(b);
+}
+
+void CREATE_OF(real, sail_string)(real *rop, const sail_string op)
+{
+ int decimal;
+ int total;
+
+ mpq_init(*rop);
+ gmp_sscanf(op, "%Zd.%n%Zd%n", sail_lib_tmp1, &decimal, sail_lib_tmp2, &total);
+
+ int len = total - decimal;
+ mpz_ui_pow_ui(sail_lib_tmp3, 10, len);
+ mpz_set(mpq_numref(*rop), sail_lib_tmp2);
+ mpz_set(mpq_denref(*rop), sail_lib_tmp3);
+ mpq_canonicalize(*rop);
+ mpz_set(mpq_numref(sail_lib_tmp_real), sail_lib_tmp1);
+ mpz_set_ui(mpq_denref(sail_lib_tmp_real), 1);
+ mpq_add(*rop, *rop, sail_lib_tmp_real);
+}
+
+void CONVERT_OF(real, sail_string)(real *rop, const sail_string op)
+{
+ int decimal;
+ int total;
+
+ gmp_sscanf(op, "%Zd.%n%Zd%n", sail_lib_tmp1, &decimal, sail_lib_tmp2, &total);
+
+ int len = total - decimal;
+ mpz_ui_pow_ui(sail_lib_tmp3, 10, len);
+ mpz_set(mpq_numref(*rop), sail_lib_tmp2);
+ mpz_set(mpq_denref(*rop), sail_lib_tmp3);
+ mpq_canonicalize(*rop);
+ mpz_set(mpq_numref(sail_lib_tmp_real), sail_lib_tmp1);
+ mpz_set_ui(mpq_denref(sail_lib_tmp_real), 1);
+ mpq_add(*rop, *rop, sail_lib_tmp_real);
+}
+
+unit print_real(const sail_string str, const real op)
+{
+ gmp_printf("%s%Qd\n", str, op);
+ return UNIT;
+}
+
+unit prerr_real(const sail_string str, const real op)
+{
+ gmp_fprintf(stderr, "%s%Qd\n", str, op);
+ return UNIT;
+}
+
+void random_real(real *rop, const unit u)
+{
+ if (rand() & 1) {
+ mpz_set_si(mpq_numref(*rop), rand());
+ } else {
+ mpz_set_si(mpq_numref(*rop), -rand());
+ }
+ mpz_set_si(mpq_denref(*rop), rand());
+ mpq_canonicalize(*rop);
+}
+
+/* ***** Printing functions ***** */
+
+void string_of_int(sail_string *str, const sail_int i)
+{
+ sail_free(*str);
+ gmp_asprintf(str, "%Zd", i);
+}
+
+/* asprintf is a GNU extension, but it should exist on BSD */
+void string_of_fbits(sail_string *str, const fbits op)
+{
+ sail_free(*str);
+ int bytes = asprintf(str, "0x%" PRIx64, op);
+ if (bytes == -1) {
+ fprintf(stderr, "Could not print bits 0x%" PRIx64 "\n", op);
+ }
+}
+
+void string_of_lbits(sail_string *str, const lbits op)
+{
+ sail_free(*str);
+ if ((op.len % 4) == 0) {
+ gmp_asprintf(str, "0x%*0ZX", op.len / 4, *op.bits);
+ } else {
+ *str = (char *) sail_malloc((op.len + 3) * sizeof(char));
+ (*str)[0] = '0';
+ (*str)[1] = 'b';
+ for (int i = 1; i <= op.len; ++i) {
+ (*str)[i + 1] = mpz_tstbit(*op.bits, op.len - i) + 0x30;
+ }
+ (*str)[op.len + 2] = '\0';
+ }
+}
+
+void decimal_string_of_fbits(sail_string *str, const fbits op)
+{
+ sail_free(*str);
+ int bytes = asprintf(str, "%" PRId64, op);
+ if (bytes == -1) {
+ fprintf(stderr, "Could not print bits %" PRId64 "\n", op);
+ }
+}
+
+void decimal_string_of_lbits(sail_string *str, const lbits op)
+{
+ sail_free(*str);
+ gmp_asprintf(str, "%Z", *op.bits);
+}
+
+void fprint_bits(const sail_string pre,
+ const lbits op,
+ const sail_string post,
+ FILE *stream)
+{
+ fputs(pre, stream);
+
+ if (op.len % 4 == 0) {
+ fputs("0x", stream);
+ mpz_t buf;
+ mpz_init_set(buf, *op.bits);
+
+ char *hex = sail_malloc((op.len / 4) * sizeof(char));
+
+ for (int i = 0; i < op.len / 4; ++i) {
+ char c = (char) ((0xF & mpz_get_ui(buf)) + 0x30);
+ hex[i] = (c < 0x3A) ? c : c + 0x7;
+ mpz_fdiv_q_2exp(buf, buf, 4);
+ }
+
+ for (int i = op.len / 4; i > 0; --i) {
+ fputc(hex[i - 1], stream);
+ }
+
+ sail_free(hex);
+ mpz_clear(buf);
+ } else {
+ fputs("0b", stream);
+ for (int i = op.len; i > 0; --i) {
+ fputc(mpz_tstbit(*op.bits, i - 1) + 0x30, stream);
+ }
+ }
+
+ fputs(post, stream);
+}
+
+unit print_bits(const sail_string str, const lbits op)
+{
+ fprint_bits(str, op, "\n", stdout);
+ return UNIT;
+}
+
+unit prerr_bits(const sail_string str, const lbits op)
+{
+ fprint_bits(str, op, "\n", stderr);
+ return UNIT;
+}
+
+unit print(const sail_string str)
+{
+ printf("%s", str);
+ return UNIT;
+}
+
+unit print_endline(const sail_string str)
+{
+ printf("%s\n", str);
+ return UNIT;
+}
+
+unit prerr(const sail_string str)
+{
+ fprintf(stderr, "%s", str);
+ return UNIT;
+}
+
+unit prerr_endline(const sail_string str)
+{
+ fprintf(stderr, "%s\n", str);
+ return UNIT;
+}
+
+unit print_int(const sail_string str, const sail_int op)
+{
+ fputs(str, stdout);
+ mpz_out_str(stdout, 10, op);
+ putchar('\n');
+ return UNIT;
+}
+
+unit prerr_int(const sail_string str, const sail_int op)
+{
+ fputs(str, stderr);
+ mpz_out_str(stderr, 10, op);
+ fputs("\n", stderr);
+ return UNIT;
+}
+
+unit sail_putchar(const sail_int op)
+{
+ char c = (char) mpz_get_ui(op);
+ putchar(c);
+ fflush(stdout);
+ return UNIT;
+}
+
+void get_time_ns(sail_int *rop, const unit u)
+{
+ struct timespec t;
+ clock_gettime(CLOCK_REALTIME, &t);
+ mpz_set_si(*rop, t.tv_sec);
+ mpz_mul_ui(*rop, *rop, 1000000000);
+ mpz_add_ui(*rop, *rop, t.tv_nsec);
+}
+
+// ARM specific optimisations
+
+void arm_align(lbits *rop, const lbits x_bv, const sail_int y_mpz)
+{
+ uint64_t x = mpz_get_ui(*x_bv.bits);
+ uint64_t y = mpz_get_ui(y_mpz);
+ uint64_t z = y * (x / y);
+ mp_bitcnt_t n = x_bv.len;
+ mpz_set_ui(*rop->bits, safe_rshift(UINT64_MAX, 64l - (n - 1)) & z);
+ rop->len = n;
+}
+
+// Monomorphisation
+void make_the_value(sail_int *rop, const sail_int op)
+{
+ mpz_set(*rop, op);
+}
+
+void size_itself_int(sail_int *rop, const sail_int op)
+{
+ mpz_set(*rop, op);
+}
diff --git a/gdb/cheri-compressed-cap/test/sail.h b/gdb/cheri-compressed-cap/test/sail.h
new file mode 100644
index 00000000000..0c9b18b5988
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/sail.h
@@ -0,0 +1,445 @@
+#ifndef SAIL_H
+#define SAIL_H
+
+#include <inttypes.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdbool.h>
+#include <gmp.h>
+
+#include <time.h>
+
+static inline void *sail_malloc(size_t size)
+{
+ return malloc(size);
+}
+
+static inline void sail_free(void *ptr)
+{
+ free(ptr);
+}
+
+/*
+ * Called by the RTS to initialise and clear any library state.
+ */
+void setup_library(void);
+void cleanup_library(void);
+
+/*
+ * The Sail compiler expects functions to follow a specific naming
+ * convention for allocation, deallocation, and (deep)-copying. These
+ * macros implement this naming convention.
+ */
+#define CREATE(type) create_ ## type
+#define RECREATE(type) recreate_ ## type
+#define CREATE_OF(type1, type2) create_ ## type1 ## _of_ ## type2
+#define RECREATE_OF(type1, type2) recreate_ ## type1 ## _of_ ## type2
+#define CONVERT_OF(type1, type2) convert_ ## type1 ## _of_ ## type2
+#define COPY(type) copy_ ## type
+#define KILL(type) kill_ ## type
+#define UNDEFINED(type) undefined_ ## type
+#define EQUAL(type) eq_ ## type
+
+#define SAIL_BUILTIN_TYPE(type)\
+ void create_ ## type(type *);\
+ void recreate_ ## type(type *);\
+ void copy_ ## type(type *, const type);\
+ void kill_ ## type(type *);
+
+/* ***** Sail unit type ***** */
+
+typedef int unit;
+
+#define UNIT 0
+
+unit UNDEFINED(unit)(const unit);
+bool EQUAL(unit)(const unit, const unit);
+
+unit skip(const unit);
+
+/* ***** Sail booleans ***** */
+
+/*
+ * and_bool and or_bool are special-cased by the compiler to ensure
+ * short-circuiting evaluation.
+ */
+bool not(const bool);
+bool EQUAL(bool)(const bool, const bool);
+bool UNDEFINED(bool)(const unit);
+
+/* ***** Sail strings ***** */
+
+/*
+ * Sail strings are just C strings.
+ */
+typedef char *sail_string;
+
+SAIL_BUILTIN_TYPE(sail_string)
+
+void dec_str(sail_string *str, const mpz_t n);
+void hex_str(sail_string *str, const mpz_t n);
+
+void undefined_string(sail_string *str, const unit u);
+
+bool eq_string(const sail_string, const sail_string);
+bool EQUAL(sail_string)(const sail_string, const sail_string);
+
+void concat_str(sail_string *stro, const sail_string str1, const sail_string str2);
+bool string_startswith(sail_string s, sail_string prefix);
+
+/* ***** Sail integers ***** */
+
+typedef int64_t mach_int;
+
+bool EQUAL(mach_int)(const mach_int, const mach_int);
+
+typedef mpz_t sail_int;
+
+uint64_t sail_int_get_ui(const sail_int);
+
+#define SAIL_INT_FUNCTION(fname, rtype, ...) void fname(rtype*, __VA_ARGS__)
+
+SAIL_BUILTIN_TYPE(sail_int)
+
+void CREATE_OF(sail_int, mach_int)(sail_int *, const mach_int);
+void RECREATE_OF(sail_int, mach_int)(sail_int *, const mach_int);
+
+mach_int CREATE_OF(mach_int, sail_int)(const sail_int);
+
+void CREATE_OF(sail_int, sail_string)(sail_int *, const sail_string);
+void RECREATE_OF(sail_int, sail_string)(mpz_t *, const sail_string);
+
+void CONVERT_OF(sail_int, sail_string)(sail_int *, const sail_string);
+
+mach_int CONVERT_OF(mach_int, sail_int)(const sail_int);
+void CONVERT_OF(sail_int, mach_int)(sail_int *, const mach_int);
+
+/*
+ * Comparison operators for integers
+ */
+bool eq_int(const sail_int, const sail_int);
+bool EQUAL(sail_int)(const sail_int, const sail_int);
+
+bool lt(const sail_int, const sail_int);
+bool gt(const sail_int, const sail_int);
+bool lteq(const sail_int, const sail_int);
+bool gteq(const sail_int, const sail_int);
+
+/*
+ * Left and right shift for integers
+ */
+mach_int shl_mach_int(const mach_int, const mach_int);
+mach_int shr_mach_int(const mach_int, const mach_int);
+SAIL_INT_FUNCTION(shl_int, sail_int, const sail_int, const sail_int);
+SAIL_INT_FUNCTION(shr_int, sail_int, const sail_int, const sail_int);
+
+/*
+ * undefined_int and undefined_range can't use the UNDEFINED(TYPE)
+ * macro, because they're slightly magical. They take extra parameters
+ * to ensure that no undefined int can violate any type-guaranteed
+ * constraints.
+ */
+SAIL_INT_FUNCTION(undefined_int, sail_int, const int);
+SAIL_INT_FUNCTION(undefined_nat, sail_int, const unit);
+SAIL_INT_FUNCTION(undefined_range, sail_int, const sail_int, const sail_int);
+
+/*
+ * Arithmetic operations in integers. We include functions for both
+ * truncating towards zero, and rounding towards -infinity (floor) as
+ * fdiv/fmod and tdiv/tmod respectively.
+ */
+SAIL_INT_FUNCTION(add_int, sail_int, const sail_int, const sail_int);
+SAIL_INT_FUNCTION(sub_int, sail_int, const sail_int, const sail_int);
+SAIL_INT_FUNCTION(sub_nat, sail_int, const sail_int, const sail_int);
+SAIL_INT_FUNCTION(mult_int, sail_int, const sail_int, const sail_int);
+SAIL_INT_FUNCTION(ediv_int, sail_int, const sail_int, const sail_int);
+SAIL_INT_FUNCTION(emod_int, sail_int, const sail_int, const sail_int);
+SAIL_INT_FUNCTION(tdiv_int, sail_int, const sail_int, const sail_int);
+SAIL_INT_FUNCTION(tmod_int, sail_int, const sail_int, const sail_int);
+SAIL_INT_FUNCTION(fdiv_int, sail_int, const sail_int, const sail_int);
+SAIL_INT_FUNCTION(fmod_int, sail_int, const sail_int, const sail_int);
+
+SAIL_INT_FUNCTION(max_int, sail_int, const sail_int, const sail_int);
+SAIL_INT_FUNCTION(min_int, sail_int, const sail_int, const sail_int);
+
+SAIL_INT_FUNCTION(neg_int, sail_int, const sail_int);
+SAIL_INT_FUNCTION(abs_int, sail_int, const sail_int);
+
+SAIL_INT_FUNCTION(pow_int, sail_int, const sail_int, const sail_int);
+
+SAIL_INT_FUNCTION(pow2, sail_int, const sail_int);
+
+void make_the_value(sail_int *, const sail_int);
+void size_itself_int(sail_int *, const sail_int);
+
+/* ***** Sail bitvectors ***** */
+
+typedef uint64_t fbits;
+
+bool eq_bit(const fbits a, const fbits b);
+
+static inline bool bit_to_bool(const fbits a)
+{
+ return (bool) a;
+}
+
+bool EQUAL(fbits)(const fbits, const fbits);
+
+typedef struct {
+ uint64_t len;
+ uint64_t bits;
+} sbits;
+
+typedef struct {
+ mp_bitcnt_t len;
+ mpz_t *bits;
+} lbits;
+
+// For backwards compatability
+typedef uint64_t mach_bits;
+typedef lbits sail_bits;
+
+SAIL_BUILTIN_TYPE(lbits)
+
+void CREATE_OF(lbits, fbits)(lbits *,
+ const fbits op,
+ const uint64_t len,
+ const bool direction);
+
+void RECREATE_OF(lbits, fbits)(lbits *,
+ const fbits op,
+ const uint64_t len,
+ const bool direction);
+
+void CREATE_OF(lbits, sbits)(lbits *,
+ const sbits op,
+ const bool direction);
+
+void RECREATE_OF(lbits, sbits)(lbits *,
+ const sbits op,
+ const bool direction);
+
+sbits CREATE_OF(sbits, lbits)(const lbits op, const bool direction);
+fbits CREATE_OF(fbits, lbits)(const lbits op, const bool direction);
+sbits CREATE_OF(sbits, fbits)(const fbits op, const uint64_t len, const bool direction);
+
+/* Bitvector conversions */
+
+fbits CONVERT_OF(fbits, lbits)(const lbits, const bool);
+fbits CONVERT_OF(fbits, sbits)(const sbits, const bool);
+
+void CONVERT_OF(lbits, fbits)(lbits *, const fbits, const uint64_t, const bool);
+void CONVERT_OF(lbits, sbits)(lbits *, const sbits, const bool);
+
+sbits CONVERT_OF(sbits, fbits)(const fbits, const uint64_t, const bool);
+sbits CONVERT_OF(sbits, lbits)(const lbits, const bool);
+
+void UNDEFINED(lbits)(lbits *, const sail_int len);
+fbits UNDEFINED(fbits)(const unit);
+
+sbits undefined_sbits(void);
+
+/*
+ * Wrapper around >> operator to avoid UB when shift amount is greater
+ * than or equal to 64.
+ */
+fbits safe_rshift(const fbits, const fbits);
+
+/*
+ * Used internally to construct large bitvector literals.
+ */
+void append_64(lbits *rop, const lbits op, const fbits chunk);
+
+void add_bits(lbits *rop, const lbits op1, const lbits op2);
+void sub_bits(lbits *rop, const lbits op1, const lbits op2);
+
+void add_bits_int(lbits *rop, const lbits op1, const mpz_t op2);
+void sub_bits_int(lbits *rop, const lbits op1, const mpz_t op2);
+
+void and_bits(lbits *rop, const lbits op1, const lbits op2);
+void or_bits(lbits *rop, const lbits op1, const lbits op2);
+void xor_bits(lbits *rop, const lbits op1, const lbits op2);
+void not_bits(lbits *rop, const lbits op);
+
+void mults_vec(lbits *rop, const lbits op1, const lbits op2);
+void mult_vec(lbits *rop, const lbits op1, const lbits op2);
+
+void zeros(lbits *rop, const sail_int op);
+
+void zero_extend(lbits *rop, const lbits op, const sail_int len);
+fbits fast_zero_extend(const sbits op, const uint64_t n);
+void sign_extend(lbits *rop, const lbits op, const sail_int len);
+fbits fast_sign_extend(const fbits op, const uint64_t n, const uint64_t m);
+fbits fast_sign_extend2(const sbits op, const uint64_t m);
+
+void length_lbits(sail_int *rop, const lbits op);
+void count_leading_zeros(sail_int *rop, const lbits op);
+
+bool eq_bits(const lbits op1, const lbits op2);
+bool EQUAL(lbits)(const lbits op1, const lbits op2);
+bool neq_bits(const lbits op1, const lbits op2);
+
+void vector_subrange_lbits(lbits *rop,
+ const lbits op,
+ const sail_int n_mpz,
+ const sail_int m_mpz);
+
+void sail_truncate(lbits *rop, const lbits op, const sail_int len);
+void sail_truncateLSB(lbits *rop, const lbits op, const sail_int len);
+
+fbits bitvector_access(const lbits op, const sail_int n_mpz);
+
+fbits update_fbits(const fbits op, const uint64_t n, const fbits bit);
+
+void sail_unsigned(sail_int *rop, const lbits op);
+void sail_signed(sail_int *rop, const lbits op);
+
+mach_int fast_signed(const fbits, const uint64_t);
+mach_int fast_unsigned(const fbits);
+
+void append(lbits *rop, const lbits op1, const lbits op2);
+
+sbits append_sf(const sbits, const fbits, const uint64_t);
+sbits append_fs(const fbits, const uint64_t, const sbits);
+sbits append_ss(const sbits, const sbits);
+
+void replicate_bits(lbits *rop, const lbits op1, const sail_int op2);
+fbits fast_replicate_bits(const fbits shift, const fbits v, const mach_int times);
+
+void get_slice_int(lbits *rop, const sail_int len_mpz, const sail_int n, const sail_int start_mpz);
+
+void set_slice_int(sail_int *rop,
+ const sail_int len_mpz,
+ const sail_int n,
+ const sail_int start_mpz,
+ const lbits slice);
+
+void update_lbits(lbits *rop, const lbits op, const sail_int n_mpz, const uint64_t bit);
+
+void vector_update_subrange_lbits(lbits *rop,
+ const lbits op,
+ const sail_int n_mpz,
+ const sail_int m_mpz,
+ const lbits slice);
+
+fbits fast_update_subrange(const fbits op,
+ const mach_int n,
+ const mach_int m,
+ const fbits slice);
+
+void slice(lbits *rop, const lbits op, const sail_int start_mpz, const sail_int len_mpz);
+
+sbits sslice(const fbits op, const mach_int start, const mach_int len);
+
+void set_slice(lbits *rop,
+ const sail_int len_mpz,
+ const sail_int slen_mpz,
+ const lbits op,
+ const sail_int start_mpz,
+ const lbits slice);
+
+void shift_bits_left(lbits *rop, const lbits op1, const lbits op2);
+void shift_bits_right(lbits *rop, const lbits op1, const lbits op2);
+void shift_bits_right_arith(lbits *rop, const lbits op1, const lbits op2);
+
+void shiftl(lbits *rop, const lbits op1, const sail_int op2);
+void shiftr(lbits *rop, const lbits op1, const sail_int op2);
+void arith_shiftr(lbits *rop, const lbits op1, const sail_int op2);
+
+void reverse_endianness(lbits*, lbits);
+
+bool eq_sbits(const sbits op1, const sbits op2);
+bool neq_sbits(const sbits op1, const sbits op2);
+sbits not_sbits(const sbits op);
+sbits xor_sbits(const sbits op1, const sbits op2);
+sbits or_sbits(const sbits op1, const sbits op2);
+sbits and_sbits(const sbits op1, const sbits op2);
+sbits add_sbits(const sbits op1, const sbits op2);
+sbits sub_sbits(const sbits op1, const sbits op2);
+
+/* ***** Sail reals ***** */
+
+typedef mpq_t real;
+
+SAIL_BUILTIN_TYPE(real)
+
+void CREATE_OF(real, sail_string)(real *rop, const sail_string op);
+void CONVERT_OF(real, sail_string)(real *rop, const sail_string op);
+
+void UNDEFINED(real)(real *rop, unit u);
+
+void neg_real(real *rop, const real op);
+
+void mult_real(real *rop, const real op1, const real op2);
+void sub_real(real *rop, const real op1, const real op2);
+void add_real(real *rop, const real op1, const real op2);
+void div_real(real *rop, const real op1, const real op2);
+
+void sqrt_real(real *rop, const real op);
+void abs_real(real *rop, const real op);
+
+void round_up(sail_int *rop, const real op);
+void round_down(sail_int *rop, const real op);
+
+void to_real(real *rop, const sail_int op);
+
+bool EQUAL(real)(const real op1, const real op2);
+
+bool lt_real(const real op1, const real op2);
+bool gt_real(const real op1, const real op2);
+bool lteq_real(const real op1, const real op2);
+bool gteq_real(const real op1, const real op2);
+
+void real_power(real *rop, const real base, const sail_int exp);
+
+unit print_real(const sail_string, const real);
+unit prerr_real(const sail_string, const real);
+
+void random_real(real *rop, unit);
+
+/* ***** String utilities ***** */
+
+void string_length(sail_int *len, sail_string s);
+void string_drop(sail_string *dst, sail_string s, sail_int len);
+void string_take(sail_string *dst, sail_string s, sail_int len);
+
+
+/* ***** Printing ***** */
+
+void string_of_int(sail_string *str, const sail_int i);
+void string_of_lbits(sail_string *str, const lbits op);
+void string_of_fbits(sail_string *str, const fbits op);
+void decimal_string_of_lbits(sail_string *str, const lbits op);
+void decimal_string_of_fbits(sail_string *str, const fbits op);
+
+/*
+ * Utility function not callable from Sail!
+ */
+void fprint_bits(const sail_string pre,
+ const lbits op,
+ const sail_string post,
+ FILE *stream);
+
+unit print_bits(const sail_string str, const lbits op);
+unit prerr_bits(const sail_string str, const lbits op);
+
+unit print(const sail_string str);
+unit print_endline(const sail_string str);
+
+unit prerr(const sail_string str);
+unit prerr_endline(const sail_string str);
+
+unit print_int(const sail_string str, const sail_int op);
+unit prerr_int(const sail_string str, const sail_int op);
+
+unit sail_putchar(const sail_int op);
+
+/* ***** Misc ***** */
+
+void get_time_ns(sail_int*, const unit);
+
+/* ***** ARM optimisations ***** */
+
+void arm_align(lbits *, const lbits, const sail_int);
+
+#endif
diff --git a/gdb/cheri-compressed-cap/test/sail_compression_128.c b/gdb/cheri-compressed-cap/test/sail_compression_128.c
new file mode 100644
index 00000000000..c9fce8d4405
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/sail_compression_128.c
@@ -0,0 +1,9127 @@
+#include "sail.h"
+#include "rts.h"
+#include "elf.h"
+
+// enum write_kind
+enum zwrite_kind { zWrite_plain, zWrite_conditional, zWrite_release, zWrite_exclusive, zWrite_exclusive_release, zWrite_RISCV_release, zWrite_RISCV_strong_release, zWrite_RISCV_conditional, zWrite_RISCV_conditional_release, zWrite_RISCV_conditional_strong_release, zWrite_X86_locked };
+
+static bool eq_zwrite_kind(enum zwrite_kind op1, enum zwrite_kind op2) { return op1 == op2; }
+
+static enum zwrite_kind UNDEFINED(zwrite_kind)(unit u) { return zWrite_plain; }
+
+// enum trans_kind
+enum ztrans_kind { zTransaction_start, zTransaction_commit, zTransaction_abort };
+
+static bool eq_ztrans_kind(enum ztrans_kind op1, enum ztrans_kind op2) { return op1 == op2; }
+
+static enum ztrans_kind UNDEFINED(ztrans_kind)(unit u) { return zTransaction_start; }
+
+// struct tuple_(%string, %i)
+struct ztuple_z8z5stringzCz0z5iz9 {
+ sail_string ztup0;
+ sail_int ztup1;
+};
+
+static void COPY(ztuple_z8z5stringzCz0z5iz9)(struct ztuple_z8z5stringzCz0z5iz9 *rop, const struct ztuple_z8z5stringzCz0z5iz9 op) {
+ COPY(sail_string)(&rop->ztup0, op.ztup0);
+ COPY(sail_int)(&rop->ztup1, op.ztup1);
+}
+
+static void CREATE(ztuple_z8z5stringzCz0z5iz9)(struct ztuple_z8z5stringzCz0z5iz9 *op) {
+ CREATE(sail_string)(&op->ztup0);
+ CREATE(sail_int)(&op->ztup1);
+}
+
+static void RECREATE(ztuple_z8z5stringzCz0z5iz9)(struct ztuple_z8z5stringzCz0z5iz9 *op) {
+ RECREATE(sail_string)(&op->ztup0);
+ RECREATE(sail_int)(&op->ztup1);
+}
+
+static void KILL(ztuple_z8z5stringzCz0z5iz9)(struct ztuple_z8z5stringzCz0z5iz9 *op) {
+ KILL(sail_string)(&op->ztup0);
+ KILL(sail_int)(&op->ztup1);
+}
+
+static bool EQUAL(ztuple_z8z5stringzCz0z5iz9)(struct ztuple_z8z5stringzCz0z5iz9 op1, struct ztuple_z8z5stringzCz0z5iz9 op2) {
+ return EQUAL(sail_string)(op1.ztup0, op2.ztup0) && EQUAL(sail_int)(op1.ztup1, op2.ztup1);
+}
+
+
+// struct tuple_(%string, %i, %i)
+struct ztuple_z8z5stringzCz0z5izCz0z5iz9 {
+ sail_string ztup0;
+ sail_int ztup1;
+ sail_int ztup2;
+};
+
+static void COPY(ztuple_z8z5stringzCz0z5izCz0z5iz9)(struct ztuple_z8z5stringzCz0z5izCz0z5iz9 *rop, const struct ztuple_z8z5stringzCz0z5izCz0z5iz9 op) {
+ COPY(sail_string)(&rop->ztup0, op.ztup0);
+ COPY(sail_int)(&rop->ztup1, op.ztup1);
+ COPY(sail_int)(&rop->ztup2, op.ztup2);
+}
+
+static void CREATE(ztuple_z8z5stringzCz0z5izCz0z5iz9)(struct ztuple_z8z5stringzCz0z5izCz0z5iz9 *op) {
+ CREATE(sail_string)(&op->ztup0);
+ CREATE(sail_int)(&op->ztup1);
+ CREATE(sail_int)(&op->ztup2);
+}
+
+static void RECREATE(ztuple_z8z5stringzCz0z5izCz0z5iz9)(struct ztuple_z8z5stringzCz0z5izCz0z5iz9 *op) {
+ RECREATE(sail_string)(&op->ztup0);
+ RECREATE(sail_int)(&op->ztup1);
+ RECREATE(sail_int)(&op->ztup2);
+}
+
+static void KILL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(struct ztuple_z8z5stringzCz0z5izCz0z5iz9 *op) {
+ KILL(sail_string)(&op->ztup0);
+ KILL(sail_int)(&op->ztup1);
+ KILL(sail_int)(&op->ztup2);
+}
+
+static bool EQUAL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(struct ztuple_z8z5stringzCz0z5izCz0z5iz9 op1, struct ztuple_z8z5stringzCz0z5izCz0z5iz9 op2) {
+ return EQUAL(sail_string)(op1.ztup0, op2.ztup0) && EQUAL(sail_int)(op1.ztup1, op2.ztup1) && EQUAL(sail_int)(op1.ztup2, op2.ztup2);
+}
+
+
+// struct tuple_(%string, %string)
+struct ztuple_z8z5stringzCz0z5stringz9 {
+ sail_string ztup0;
+ sail_string ztup1;
+};
+
+static void COPY(ztuple_z8z5stringzCz0z5stringz9)(struct ztuple_z8z5stringzCz0z5stringz9 *rop, const struct ztuple_z8z5stringzCz0z5stringz9 op) {
+ COPY(sail_string)(&rop->ztup0, op.ztup0);
+ COPY(sail_string)(&rop->ztup1, op.ztup1);
+}
+
+static void CREATE(ztuple_z8z5stringzCz0z5stringz9)(struct ztuple_z8z5stringzCz0z5stringz9 *op) {
+ CREATE(sail_string)(&op->ztup0);
+ CREATE(sail_string)(&op->ztup1);
+}
+
+static void RECREATE(ztuple_z8z5stringzCz0z5stringz9)(struct ztuple_z8z5stringzCz0z5stringz9 *op) {
+ RECREATE(sail_string)(&op->ztup0);
+ RECREATE(sail_string)(&op->ztup1);
+}
+
+static void KILL(ztuple_z8z5stringzCz0z5stringz9)(struct ztuple_z8z5stringzCz0z5stringz9 *op) {
+ KILL(sail_string)(&op->ztup0);
+ KILL(sail_string)(&op->ztup1);
+}
+
+static bool EQUAL(ztuple_z8z5stringzCz0z5stringz9)(struct ztuple_z8z5stringzCz0z5stringz9 op1, struct ztuple_z8z5stringzCz0z5stringz9 op2) {
+ return EQUAL(sail_string)(op1.ztup0, op2.ztup0) && EQUAL(sail_string)(op1.ztup1, op2.ztup1);
+}
+
+// union regfp
+enum kind_zregfp { Kind_zRField, Kind_zRFull, Kind_zRSlice, Kind_zRSliceBit };
+
+struct zregfp {
+ enum kind_zregfp kind;
+ union {
+ struct { struct ztuple_z8z5stringzCz0z5stringz9 zRField; };
+ struct { sail_string zRFull; };
+ struct { struct ztuple_z8z5stringzCz0z5izCz0z5iz9 zRSlice; };
+ struct { struct ztuple_z8z5stringzCz0z5iz9 zRSliceBit; };
+ };
+};
+
+static void CREATE(zregfp)(struct zregfp *op)
+{
+ op->kind = Kind_zRField;
+ CREATE(ztuple_z8z5stringzCz0z5stringz9)(&op->zRField);
+}
+
+static void RECREATE(zregfp)(struct zregfp *op) {}
+
+static void KILL(zregfp)(struct zregfp *op)
+{
+ if (op->kind == Kind_zRField) {
+ KILL(ztuple_z8z5stringzCz0z5stringz9)(&op->zRField);
+ } else if (op->kind == Kind_zRFull) {
+ KILL(sail_string)(&op->zRFull);
+ } else if (op->kind == Kind_zRSlice) {
+ KILL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&op->zRSlice);
+ } else if (op->kind == Kind_zRSliceBit){
+ KILL(ztuple_z8z5stringzCz0z5iz9)(&op->zRSliceBit);
+ };
+}
+
+static void COPY(zregfp)(struct zregfp *rop, struct zregfp op)
+{
+ if (rop->kind == Kind_zRField) {
+ KILL(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField);
+ } else if (rop->kind == Kind_zRFull) {
+ KILL(sail_string)(&rop->zRFull);
+ } else if (rop->kind == Kind_zRSlice) {
+ KILL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice);
+ } else if (rop->kind == Kind_zRSliceBit){
+ KILL(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit);
+ };
+ rop->kind = op.kind;
+ if (op.kind == Kind_zRField) {
+
+ CREATE(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField); COPY(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField, op.zRField);
+ } else if (op.kind == Kind_zRFull) {
+ CREATE(sail_string)(&rop->zRFull); COPY(sail_string)(&rop->zRFull, op.zRFull);
+ } else if (op.kind == Kind_zRSlice) {
+
+ CREATE(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice); COPY(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice, op.zRSlice);
+ } else if (op.kind == Kind_zRSliceBit){
+
+ CREATE(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit); COPY(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit, op.zRSliceBit);
+ }
+}
+
+static bool EQUAL(zregfp)(struct zregfp op1, struct zregfp op2) {
+ if (op1.kind == Kind_zRField && op2.kind == Kind_zRField) {
+ return EQUAL(ztuple_z8z5stringzCz0z5stringz9)(op1.zRField, op2.zRField);
+ } else if (op1.kind == Kind_zRFull && op2.kind == Kind_zRFull) {
+ return EQUAL(sail_string)(op1.zRFull, op2.zRFull);
+ } else if (op1.kind == Kind_zRSlice && op2.kind == Kind_zRSlice) {
+ return EQUAL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(op1.zRSlice, op2.zRSlice);
+ } else if (op1.kind == Kind_zRSliceBit && op2.kind == Kind_zRSliceBit) {
+ return EQUAL(ztuple_z8z5stringzCz0z5iz9)(op1.zRSliceBit, op2.zRSliceBit);
+ } else return false;
+}
+
+static void sailgen_RField(struct zregfp *rop, struct ztuple_z8z5stringzCz0z5stringz9 op)
+{
+ if (rop->kind == Kind_zRField) {
+ KILL(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField);
+ } else if (rop->kind == Kind_zRFull) {
+ KILL(sail_string)(&rop->zRFull);
+ } else if (rop->kind == Kind_zRSlice) {
+ KILL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice);
+ } else if (rop->kind == Kind_zRSliceBit){
+ KILL(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit);
+ }
+ rop->kind = Kind_zRField;
+ CREATE(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField);
+ COPY(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField, op);
+
+}
+
+static void sailgen_RFull(struct zregfp *rop, sail_string op)
+{
+ if (rop->kind == Kind_zRField) {
+ KILL(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField);
+ } else if (rop->kind == Kind_zRFull) {
+ KILL(sail_string)(&rop->zRFull);
+ } else if (rop->kind == Kind_zRSlice) {
+ KILL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice);
+ } else if (rop->kind == Kind_zRSliceBit){
+ KILL(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit);
+ }
+ rop->kind = Kind_zRFull;
+ CREATE(sail_string)(&rop->zRFull);
+ COPY(sail_string)(&rop->zRFull, op);
+
+}
+
+static void sailgen_RSlice(struct zregfp *rop, struct ztuple_z8z5stringzCz0z5izCz0z5iz9 op)
+{
+ if (rop->kind == Kind_zRField) {
+ KILL(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField);
+ } else if (rop->kind == Kind_zRFull) {
+ KILL(sail_string)(&rop->zRFull);
+ } else if (rop->kind == Kind_zRSlice) {
+ KILL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice);
+ } else if (rop->kind == Kind_zRSliceBit){
+ KILL(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit);
+ }
+ rop->kind = Kind_zRSlice;
+ CREATE(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice);
+ COPY(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice, op);
+
+}
+
+static void sailgen_RSliceBit(struct zregfp *rop, struct ztuple_z8z5stringzCz0z5iz9 op)
+{
+ if (rop->kind == Kind_zRField) {
+ KILL(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField);
+ } else if (rop->kind == Kind_zRFull) {
+ KILL(sail_string)(&rop->zRFull);
+ } else if (rop->kind == Kind_zRSlice) {
+ KILL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice);
+ } else if (rop->kind == Kind_zRSliceBit){
+ KILL(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit);
+ }
+ rop->kind = Kind_zRSliceBit;
+ CREATE(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit);
+ COPY(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit, op);
+
+}
+
+// enum read_kind
+enum zread_kind { zRead_plain, zRead_reserve, zRead_acquire, zRead_exclusive, zRead_exclusive_acquire, zRead_stream, zRead_RISCV_acquire, zRead_RISCV_strong_acquire, zRead_RISCV_reserved, zRead_RISCV_reserved_acquire, zRead_RISCV_reserved_strong_acquire, zRead_X86_locked };
+
+static bool eq_zread_kind(enum zread_kind op1, enum zread_kind op2) { return op1 == op2; }
+
+static enum zread_kind UNDEFINED(zread_kind)(unit u) { return zRead_plain; }
+
+// union option
+enum kind_zoption { Kind_zNone };
+
+struct zoption {
+ enum kind_zoption kind;
+ union {struct { unit zNone; };};
+};
+
+static void CREATE(zoption)(struct zoption *op)
+{
+ op->kind = Kind_zNone;
+
+}
+
+static void RECREATE(zoption)(struct zoption *op) {}
+
+static void KILL(zoption)(struct zoption *op)
+{
+ if (op->kind == Kind_zNone){
+ /* do nothing */
+ };
+}
+
+static void COPY(zoption)(struct zoption *rop, struct zoption op)
+{
+ if (rop->kind == Kind_zNone){
+ /* do nothing */
+ };
+ rop->kind = op.kind;
+ if (op.kind == Kind_zNone){
+ rop->zNone = op.zNone;
+ }
+}
+
+static bool EQUAL(zoption)(struct zoption op1, struct zoption op2) {
+ if (op1.kind == Kind_zNone && op2.kind == Kind_zNone) {
+ return EQUAL(unit)(op1.zNone, op2.zNone);
+ } else return false;
+}
+
+static void sailgen_None(struct zoption *rop, unit op)
+{
+ if (rop->kind == Kind_zNone){
+ /* do nothing */
+ }
+ rop->kind = Kind_zNone;
+ rop->zNone = op;
+}
+
+// union niafp
+enum kind_zniafp { Kind_zNIAFP_concrete_address, Kind_zNIAFP_indirect_address, Kind_zNIAFP_successor };
+
+struct zniafp {
+ enum kind_zniafp kind;
+ union {
+ struct { uint64_t zNIAFP_concrete_address; };
+ struct { unit zNIAFP_indirect_address; };
+ struct { unit zNIAFP_successor; };
+ };
+};
+
+static void CREATE(zniafp)(struct zniafp *op)
+{
+ op->kind = Kind_zNIAFP_concrete_address;
+
+}
+
+static void RECREATE(zniafp)(struct zniafp *op) {}
+
+static void KILL(zniafp)(struct zniafp *op)
+{
+ if (op->kind == Kind_zNIAFP_concrete_address) {
+ /* do nothing */
+ } else if (op->kind == Kind_zNIAFP_indirect_address) {
+ /* do nothing */
+ } else if (op->kind == Kind_zNIAFP_successor){
+ /* do nothing */
+ };
+}
+
+static void COPY(zniafp)(struct zniafp *rop, struct zniafp op)
+{
+ if (rop->kind == Kind_zNIAFP_concrete_address) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zNIAFP_indirect_address) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zNIAFP_successor){
+ /* do nothing */
+ };
+ rop->kind = op.kind;
+ if (op.kind == Kind_zNIAFP_concrete_address) {
+ rop->zNIAFP_concrete_address = op.zNIAFP_concrete_address;
+ } else if (op.kind == Kind_zNIAFP_indirect_address) {
+ rop->zNIAFP_indirect_address = op.zNIAFP_indirect_address;
+ } else if (op.kind == Kind_zNIAFP_successor){
+ rop->zNIAFP_successor = op.zNIAFP_successor;
+ }
+}
+
+static bool EQUAL(zniafp)(struct zniafp op1, struct zniafp op2) {
+ if (op1.kind == Kind_zNIAFP_concrete_address && op2.kind == Kind_zNIAFP_concrete_address) {
+ return EQUAL(fbits)(op1.zNIAFP_concrete_address, op2.zNIAFP_concrete_address);
+ } else if (op1.kind == Kind_zNIAFP_indirect_address && op2.kind == Kind_zNIAFP_indirect_address) {
+ return EQUAL(unit)(op1.zNIAFP_indirect_address, op2.zNIAFP_indirect_address);
+ } else if (op1.kind == Kind_zNIAFP_successor && op2.kind == Kind_zNIAFP_successor) {
+ return EQUAL(unit)(op1.zNIAFP_successor, op2.zNIAFP_successor);
+ } else return false;
+}
+
+static void sailgen_NIAFP_concrete_address(struct zniafp *rop, uint64_t op)
+{
+ if (rop->kind == Kind_zNIAFP_concrete_address) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zNIAFP_indirect_address) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zNIAFP_successor){
+ /* do nothing */
+ }
+ rop->kind = Kind_zNIAFP_concrete_address;
+ rop->zNIAFP_concrete_address = op;
+}
+
+static void sailgen_NIAFP_indirect_address(struct zniafp *rop, unit op)
+{
+ if (rop->kind == Kind_zNIAFP_concrete_address) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zNIAFP_indirect_address) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zNIAFP_successor){
+ /* do nothing */
+ }
+ rop->kind = Kind_zNIAFP_indirect_address;
+ rop->zNIAFP_indirect_address = op;
+}
+
+static void sailgen_NIAFP_successor(struct zniafp *rop, unit op)
+{
+ if (rop->kind == Kind_zNIAFP_concrete_address) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zNIAFP_indirect_address) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zNIAFP_successor){
+ /* do nothing */
+ }
+ rop->kind = Kind_zNIAFP_successor;
+ rop->zNIAFP_successor = op;
+}
+
+
+
+// union diafp
+enum kind_zdiafp { Kind_zDIAFP_concrete, Kind_zDIAFP_none, Kind_zDIAFP_reg };
+
+struct zdiafp {
+ enum kind_zdiafp kind;
+ union {
+ struct { uint64_t zDIAFP_concrete; };
+ struct { unit zDIAFP_none; };
+ struct { struct zregfp zDIAFP_reg; };
+ };
+};
+
+static void CREATE(zdiafp)(struct zdiafp *op)
+{
+ op->kind = Kind_zDIAFP_concrete;
+
+}
+
+static void RECREATE(zdiafp)(struct zdiafp *op) {}
+
+static void KILL(zdiafp)(struct zdiafp *op)
+{
+ if (op->kind == Kind_zDIAFP_concrete) {
+ /* do nothing */
+ } else if (op->kind == Kind_zDIAFP_none) {
+ /* do nothing */
+ } else if (op->kind == Kind_zDIAFP_reg){
+ KILL(zregfp)(&op->zDIAFP_reg);
+ };
+}
+
+static void COPY(zdiafp)(struct zdiafp *rop, struct zdiafp op)
+{
+ if (rop->kind == Kind_zDIAFP_concrete) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zDIAFP_none) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zDIAFP_reg){
+ KILL(zregfp)(&rop->zDIAFP_reg);
+ };
+ rop->kind = op.kind;
+ if (op.kind == Kind_zDIAFP_concrete) {
+ rop->zDIAFP_concrete = op.zDIAFP_concrete;
+ } else if (op.kind == Kind_zDIAFP_none) {
+ rop->zDIAFP_none = op.zDIAFP_none;
+ } else if (op.kind == Kind_zDIAFP_reg){
+ CREATE(zregfp)(&rop->zDIAFP_reg); COPY(zregfp)(&rop->zDIAFP_reg, op.zDIAFP_reg);
+ }
+}
+
+static bool EQUAL(zdiafp)(struct zdiafp op1, struct zdiafp op2) {
+ if (op1.kind == Kind_zDIAFP_concrete && op2.kind == Kind_zDIAFP_concrete) {
+ return EQUAL(fbits)(op1.zDIAFP_concrete, op2.zDIAFP_concrete);
+ } else if (op1.kind == Kind_zDIAFP_none && op2.kind == Kind_zDIAFP_none) {
+ return EQUAL(unit)(op1.zDIAFP_none, op2.zDIAFP_none);
+ } else if (op1.kind == Kind_zDIAFP_reg && op2.kind == Kind_zDIAFP_reg) {
+ return EQUAL(zregfp)(op1.zDIAFP_reg, op2.zDIAFP_reg);
+ } else return false;
+}
+
+static void sailgen_DIAFP_concrete(struct zdiafp *rop, uint64_t op)
+{
+ if (rop->kind == Kind_zDIAFP_concrete) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zDIAFP_none) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zDIAFP_reg){
+ KILL(zregfp)(&rop->zDIAFP_reg);
+ }
+ rop->kind = Kind_zDIAFP_concrete;
+ rop->zDIAFP_concrete = op;
+}
+
+static void sailgen_DIAFP_none(struct zdiafp *rop, unit op)
+{
+ if (rop->kind == Kind_zDIAFP_concrete) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zDIAFP_none) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zDIAFP_reg){
+ KILL(zregfp)(&rop->zDIAFP_reg);
+ }
+ rop->kind = Kind_zDIAFP_none;
+ rop->zDIAFP_none = op;
+}
+
+static void sailgen_DIAFP_reg(struct zdiafp *rop, struct zregfp op)
+{
+ if (rop->kind == Kind_zDIAFP_concrete) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zDIAFP_none) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zDIAFP_reg){
+ KILL(zregfp)(&rop->zDIAFP_reg);
+ }
+ rop->kind = Kind_zDIAFP_reg;
+ CREATE(zregfp)(&rop->zDIAFP_reg);
+ COPY(zregfp)(&rop->zDIAFP_reg, op);
+
+}
+
+// enum cache_op_kind
+enum zcache_op_kind { zCache_op_D_IVAC, zCache_op_D_ISW, zCache_op_D_CSW, zCache_op_D_CISW, zCache_op_D_ZVA, zCache_op_D_CVAC, zCache_op_D_CVAU, zCache_op_D_CIVAC, zCache_op_I_IALLUIS, zCache_op_I_IALLU, zCache_op_I_IVAU };
+
+static bool eq_zcache_op_kind(enum zcache_op_kind op1, enum zcache_op_kind op2) { return op1 == op2; }
+
+static enum zcache_op_kind UNDEFINED(zcache_op_kind)(unit u) { return zCache_op_D_IVAC; }
+
+// enum a64_barrier_type
+enum za64_barrier_type { zA64_barrier_all, zA64_barrier_LD, zA64_barrier_ST };
+
+static bool eq_za64_barrier_type(enum za64_barrier_type op1, enum za64_barrier_type op2) { return op1 == op2; }
+
+static enum za64_barrier_type UNDEFINED(za64_barrier_type)(unit u) { return zA64_barrier_all; }
+
+// enum a64_barrier_domain
+enum za64_barrier_domain { zA64_FullShare, zA64_InnerShare, zA64_OuterShare, zA64_NonShare };
+
+static bool eq_za64_barrier_domain(enum za64_barrier_domain op1, enum za64_barrier_domain op2) { return op1 == op2; }
+
+static enum za64_barrier_domain UNDEFINED(za64_barrier_domain)(unit u) { return zA64_FullShare; }
+
+// struct tuple_(%enum za64_barrier_domain, %enum za64_barrier_type)
+struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 {
+ enum za64_barrier_domain ztup0;
+ enum za64_barrier_type ztup1;
+};
+
+static void COPY(ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9)(struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 *rop, const struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 op) {
+ rop->ztup0 = op.ztup0;
+ rop->ztup1 = op.ztup1;
+}
+
+static bool EQUAL(ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9)(struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 op1, struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 op2) {
+ return EQUAL(za64_barrier_domain)(op1.ztup0, op2.ztup0) && EQUAL(za64_barrier_type)(op1.ztup1, op2.ztup1);
+}
+
+// union barrier_kind
+enum kind_zbarrier_kind { Kind_zBarrier_DMB, Kind_zBarrier_DSB, Kind_zBarrier_Eieio, Kind_zBarrier_ISB, Kind_zBarrier_Isync, Kind_zBarrier_LwSync, Kind_zBarrier_MIPS_SYNC, Kind_zBarrier_RISCV_i, Kind_zBarrier_RISCV_r_r, Kind_zBarrier_RISCV_r_rw, Kind_zBarrier_RISCV_r_w, Kind_zBarrier_RISCV_rw_r, Kind_zBarrier_RISCV_rw_rw, Kind_zBarrier_RISCV_rw_w, Kind_zBarrier_RISCV_tso, Kind_zBarrier_RISCV_w_r, Kind_zBarrier_RISCV_w_rw, Kind_zBarrier_RISCV_w_w, Kind_zBarrier_Sync, Kind_zBarrier_x86_MFENCE };
+
+struct zbarrier_kind {
+ enum kind_zbarrier_kind kind;
+ union {
+ struct { struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 zBarrier_DMB; };
+ struct { struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 zBarrier_DSB; };
+ struct { unit zBarrier_Eieio; };
+ struct { unit zBarrier_ISB; };
+ struct { unit zBarrier_Isync; };
+ struct { unit zBarrier_LwSync; };
+ struct { unit zBarrier_MIPS_SYNC; };
+ struct { unit zBarrier_RISCV_i; };
+ struct { unit zBarrier_RISCV_r_r; };
+ struct { unit zBarrier_RISCV_r_rw; };
+ struct { unit zBarrier_RISCV_r_w; };
+ struct { unit zBarrier_RISCV_rw_r; };
+ struct { unit zBarrier_RISCV_rw_rw; };
+ struct { unit zBarrier_RISCV_rw_w; };
+ struct { unit zBarrier_RISCV_tso; };
+ struct { unit zBarrier_RISCV_w_r; };
+ struct { unit zBarrier_RISCV_w_rw; };
+ struct { unit zBarrier_RISCV_w_w; };
+ struct { unit zBarrier_Sync; };
+ struct { unit zBarrier_x86_MFENCE; };
+ };
+};
+
+static void CREATE(zbarrier_kind)(struct zbarrier_kind *op)
+{
+ op->kind = Kind_zBarrier_DMB;
+
+}
+
+static void RECREATE(zbarrier_kind)(struct zbarrier_kind *op) {}
+
+static void KILL(zbarrier_kind)(struct zbarrier_kind *op)
+{
+ if (op->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ };
+}
+
+static void COPY(zbarrier_kind)(struct zbarrier_kind *rop, struct zbarrier_kind op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ };
+ rop->kind = op.kind;
+ if (op.kind == Kind_zBarrier_DMB) {
+ rop->zBarrier_DMB = op.zBarrier_DMB;
+ } else if (op.kind == Kind_zBarrier_DSB) {
+ rop->zBarrier_DSB = op.zBarrier_DSB;
+ } else if (op.kind == Kind_zBarrier_Eieio) {
+ rop->zBarrier_Eieio = op.zBarrier_Eieio;
+ } else if (op.kind == Kind_zBarrier_ISB) {
+ rop->zBarrier_ISB = op.zBarrier_ISB;
+ } else if (op.kind == Kind_zBarrier_Isync) {
+ rop->zBarrier_Isync = op.zBarrier_Isync;
+ } else if (op.kind == Kind_zBarrier_LwSync) {
+ rop->zBarrier_LwSync = op.zBarrier_LwSync;
+ } else if (op.kind == Kind_zBarrier_MIPS_SYNC) {
+ rop->zBarrier_MIPS_SYNC = op.zBarrier_MIPS_SYNC;
+ } else if (op.kind == Kind_zBarrier_RISCV_i) {
+ rop->zBarrier_RISCV_i = op.zBarrier_RISCV_i;
+ } else if (op.kind == Kind_zBarrier_RISCV_r_r) {
+ rop->zBarrier_RISCV_r_r = op.zBarrier_RISCV_r_r;
+ } else if (op.kind == Kind_zBarrier_RISCV_r_rw) {
+ rop->zBarrier_RISCV_r_rw = op.zBarrier_RISCV_r_rw;
+ } else if (op.kind == Kind_zBarrier_RISCV_r_w) {
+ rop->zBarrier_RISCV_r_w = op.zBarrier_RISCV_r_w;
+ } else if (op.kind == Kind_zBarrier_RISCV_rw_r) {
+ rop->zBarrier_RISCV_rw_r = op.zBarrier_RISCV_rw_r;
+ } else if (op.kind == Kind_zBarrier_RISCV_rw_rw) {
+ rop->zBarrier_RISCV_rw_rw = op.zBarrier_RISCV_rw_rw;
+ } else if (op.kind == Kind_zBarrier_RISCV_rw_w) {
+ rop->zBarrier_RISCV_rw_w = op.zBarrier_RISCV_rw_w;
+ } else if (op.kind == Kind_zBarrier_RISCV_tso) {
+ rop->zBarrier_RISCV_tso = op.zBarrier_RISCV_tso;
+ } else if (op.kind == Kind_zBarrier_RISCV_w_r) {
+ rop->zBarrier_RISCV_w_r = op.zBarrier_RISCV_w_r;
+ } else if (op.kind == Kind_zBarrier_RISCV_w_rw) {
+ rop->zBarrier_RISCV_w_rw = op.zBarrier_RISCV_w_rw;
+ } else if (op.kind == Kind_zBarrier_RISCV_w_w) {
+ rop->zBarrier_RISCV_w_w = op.zBarrier_RISCV_w_w;
+ } else if (op.kind == Kind_zBarrier_Sync) {
+ rop->zBarrier_Sync = op.zBarrier_Sync;
+ } else if (op.kind == Kind_zBarrier_x86_MFENCE){
+ rop->zBarrier_x86_MFENCE = op.zBarrier_x86_MFENCE;
+ }
+}
+
+static bool EQUAL(zbarrier_kind)(struct zbarrier_kind op1, struct zbarrier_kind op2) {
+ if (op1.kind == Kind_zBarrier_DMB && op2.kind == Kind_zBarrier_DMB) {
+
+ return EQUAL(ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9)(op1.zBarrier_DMB, op2.zBarrier_DMB);
+ } else if (op1.kind == Kind_zBarrier_DSB && op2.kind == Kind_zBarrier_DSB) {
+
+ return EQUAL(ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9)(op1.zBarrier_DSB, op2.zBarrier_DSB);
+ } else if (op1.kind == Kind_zBarrier_Eieio && op2.kind == Kind_zBarrier_Eieio) {
+ return EQUAL(unit)(op1.zBarrier_Eieio, op2.zBarrier_Eieio);
+ } else if (op1.kind == Kind_zBarrier_ISB && op2.kind == Kind_zBarrier_ISB) {
+ return EQUAL(unit)(op1.zBarrier_ISB, op2.zBarrier_ISB);
+ } else if (op1.kind == Kind_zBarrier_Isync && op2.kind == Kind_zBarrier_Isync) {
+ return EQUAL(unit)(op1.zBarrier_Isync, op2.zBarrier_Isync);
+ } else if (op1.kind == Kind_zBarrier_LwSync && op2.kind == Kind_zBarrier_LwSync) {
+ return EQUAL(unit)(op1.zBarrier_LwSync, op2.zBarrier_LwSync);
+ } else if (op1.kind == Kind_zBarrier_MIPS_SYNC && op2.kind == Kind_zBarrier_MIPS_SYNC) {
+ return EQUAL(unit)(op1.zBarrier_MIPS_SYNC, op2.zBarrier_MIPS_SYNC);
+ } else if (op1.kind == Kind_zBarrier_RISCV_i && op2.kind == Kind_zBarrier_RISCV_i) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_i, op2.zBarrier_RISCV_i);
+ } else if (op1.kind == Kind_zBarrier_RISCV_r_r && op2.kind == Kind_zBarrier_RISCV_r_r) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_r_r, op2.zBarrier_RISCV_r_r);
+ } else if (op1.kind == Kind_zBarrier_RISCV_r_rw && op2.kind == Kind_zBarrier_RISCV_r_rw) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_r_rw, op2.zBarrier_RISCV_r_rw);
+ } else if (op1.kind == Kind_zBarrier_RISCV_r_w && op2.kind == Kind_zBarrier_RISCV_r_w) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_r_w, op2.zBarrier_RISCV_r_w);
+ } else if (op1.kind == Kind_zBarrier_RISCV_rw_r && op2.kind == Kind_zBarrier_RISCV_rw_r) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_rw_r, op2.zBarrier_RISCV_rw_r);
+ } else if (op1.kind == Kind_zBarrier_RISCV_rw_rw && op2.kind == Kind_zBarrier_RISCV_rw_rw) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_rw_rw, op2.zBarrier_RISCV_rw_rw);
+ } else if (op1.kind == Kind_zBarrier_RISCV_rw_w && op2.kind == Kind_zBarrier_RISCV_rw_w) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_rw_w, op2.zBarrier_RISCV_rw_w);
+ } else if (op1.kind == Kind_zBarrier_RISCV_tso && op2.kind == Kind_zBarrier_RISCV_tso) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_tso, op2.zBarrier_RISCV_tso);
+ } else if (op1.kind == Kind_zBarrier_RISCV_w_r && op2.kind == Kind_zBarrier_RISCV_w_r) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_w_r, op2.zBarrier_RISCV_w_r);
+ } else if (op1.kind == Kind_zBarrier_RISCV_w_rw && op2.kind == Kind_zBarrier_RISCV_w_rw) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_w_rw, op2.zBarrier_RISCV_w_rw);
+ } else if (op1.kind == Kind_zBarrier_RISCV_w_w && op2.kind == Kind_zBarrier_RISCV_w_w) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_w_w, op2.zBarrier_RISCV_w_w);
+ } else if (op1.kind == Kind_zBarrier_Sync && op2.kind == Kind_zBarrier_Sync) {
+ return EQUAL(unit)(op1.zBarrier_Sync, op2.zBarrier_Sync);
+ } else if (op1.kind == Kind_zBarrier_x86_MFENCE && op2.kind == Kind_zBarrier_x86_MFENCE) {
+ return EQUAL(unit)(op1.zBarrier_x86_MFENCE, op2.zBarrier_x86_MFENCE);
+ } else return false;
+}
+
+static void sailgen_Barrier_DMB(struct zbarrier_kind *rop, struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_DMB;
+ rop->zBarrier_DMB = op;
+}
+
+static void sailgen_Barrier_DSB(struct zbarrier_kind *rop, struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_DSB;
+ rop->zBarrier_DSB = op;
+}
+
+static void sailgen_Barrier_Eieio(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_Eieio;
+ rop->zBarrier_Eieio = op;
+}
+
+static void sailgen_Barrier_ISB(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_ISB;
+ rop->zBarrier_ISB = op;
+}
+
+static void sailgen_Barrier_Isync(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_Isync;
+ rop->zBarrier_Isync = op;
+}
+
+static void sailgen_Barrier_LwSync(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_LwSync;
+ rop->zBarrier_LwSync = op;
+}
+
+static void sailgen_Barrier_MIPS_SYNC(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_MIPS_SYNC;
+ rop->zBarrier_MIPS_SYNC = op;
+}
+
+static void sailgen_Barrier_RISCV_i(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_i;
+ rop->zBarrier_RISCV_i = op;
+}
+
+static void sailgen_Barrier_RISCV_r_r(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_r_r;
+ rop->zBarrier_RISCV_r_r = op;
+}
+
+static void sailgen_Barrier_RISCV_r_rw(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_r_rw;
+ rop->zBarrier_RISCV_r_rw = op;
+}
+
+static void sailgen_Barrier_RISCV_r_w(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_r_w;
+ rop->zBarrier_RISCV_r_w = op;
+}
+
+static void sailgen_Barrier_RISCV_rw_r(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_rw_r;
+ rop->zBarrier_RISCV_rw_r = op;
+}
+
+static void sailgen_Barrier_RISCV_rw_rw(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_rw_rw;
+ rop->zBarrier_RISCV_rw_rw = op;
+}
+
+static void sailgen_Barrier_RISCV_rw_w(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_rw_w;
+ rop->zBarrier_RISCV_rw_w = op;
+}
+
+static void sailgen_Barrier_RISCV_tso(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_tso;
+ rop->zBarrier_RISCV_tso = op;
+}
+
+static void sailgen_Barrier_RISCV_w_r(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_w_r;
+ rop->zBarrier_RISCV_w_r = op;
+}
+
+static void sailgen_Barrier_RISCV_w_rw(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_w_rw;
+ rop->zBarrier_RISCV_w_rw = op;
+}
+
+static void sailgen_Barrier_RISCV_w_w(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_w_w;
+ rop->zBarrier_RISCV_w_w = op;
+}
+
+static void sailgen_Barrier_Sync(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_Sync;
+ rop->zBarrier_Sync = op;
+}
+
+static void sailgen_Barrier_x86_MFENCE(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_x86_MFENCE;
+ rop->zBarrier_x86_MFENCE = op;
+}
+
+// struct tuple_(%enum zread_kind, %enum zwrite_kind)
+struct ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9 {
+ enum zread_kind ztup0;
+ enum zwrite_kind ztup1;
+};
+
+static void COPY(ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9)(struct ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9 *rop, const struct ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9 op) {
+ rop->ztup0 = op.ztup0;
+ rop->ztup1 = op.ztup1;
+}
+
+static bool EQUAL(ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9)(struct ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9 op1, struct ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9 op2) {
+ return EQUAL(zread_kind)(op1.ztup0, op2.ztup0) && EQUAL(zwrite_kind)(op1.ztup1, op2.ztup1);
+}
+
+
+
+// union instruction_kind
+enum kind_zinstruction_kind { Kind_zIK_barrier, Kind_zIK_branch, Kind_zIK_cache_op, Kind_zIK_mem_read, Kind_zIK_mem_rmw, Kind_zIK_mem_write, Kind_zIK_simple, Kind_zIK_trans };
+
+struct zinstruction_kind {
+ enum kind_zinstruction_kind kind;
+ union {
+ struct { struct zbarrier_kind zIK_barrier; };
+ struct { unit zIK_branch; };
+ struct { enum zcache_op_kind zIK_cache_op; };
+ struct { enum zread_kind zIK_mem_read; };
+ struct { struct ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9 zIK_mem_rmw; };
+ struct { enum zwrite_kind zIK_mem_write; };
+ struct { unit zIK_simple; };
+ struct { enum ztrans_kind zIK_trans; };
+ };
+};
+
+static void CREATE(zinstruction_kind)(struct zinstruction_kind *op)
+{
+ op->kind = Kind_zIK_barrier;
+ CREATE(zbarrier_kind)(&op->zIK_barrier);
+}
+
+static void RECREATE(zinstruction_kind)(struct zinstruction_kind *op) {}
+
+static void KILL(zinstruction_kind)(struct zinstruction_kind *op)
+{
+ if (op->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&op->zIK_barrier);
+ } else if (op->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (op->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (op->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (op->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (op->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (op->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (op->kind == Kind_zIK_trans){
+ /* do nothing */
+ };
+}
+
+static void COPY(zinstruction_kind)(struct zinstruction_kind *rop, struct zinstruction_kind op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ };
+ rop->kind = op.kind;
+ if (op.kind == Kind_zIK_barrier) {
+ CREATE(zbarrier_kind)(&rop->zIK_barrier); COPY(zbarrier_kind)(&rop->zIK_barrier, op.zIK_barrier);
+ } else if (op.kind == Kind_zIK_branch) {
+ rop->zIK_branch = op.zIK_branch;
+ } else if (op.kind == Kind_zIK_cache_op) {
+ rop->zIK_cache_op = op.zIK_cache_op;
+ } else if (op.kind == Kind_zIK_mem_read) {
+ rop->zIK_mem_read = op.zIK_mem_read;
+ } else if (op.kind == Kind_zIK_mem_rmw) {
+ rop->zIK_mem_rmw = op.zIK_mem_rmw;
+ } else if (op.kind == Kind_zIK_mem_write) {
+ rop->zIK_mem_write = op.zIK_mem_write;
+ } else if (op.kind == Kind_zIK_simple) {
+ rop->zIK_simple = op.zIK_simple;
+ } else if (op.kind == Kind_zIK_trans){
+ rop->zIK_trans = op.zIK_trans;
+ }
+}
+
+static bool EQUAL(zinstruction_kind)(struct zinstruction_kind op1, struct zinstruction_kind op2) {
+ if (op1.kind == Kind_zIK_barrier && op2.kind == Kind_zIK_barrier) {
+ return EQUAL(zbarrier_kind)(op1.zIK_barrier, op2.zIK_barrier);
+ } else if (op1.kind == Kind_zIK_branch && op2.kind == Kind_zIK_branch) {
+ return EQUAL(unit)(op1.zIK_branch, op2.zIK_branch);
+ } else if (op1.kind == Kind_zIK_cache_op && op2.kind == Kind_zIK_cache_op) {
+ return EQUAL(zcache_op_kind)(op1.zIK_cache_op, op2.zIK_cache_op);
+ } else if (op1.kind == Kind_zIK_mem_read && op2.kind == Kind_zIK_mem_read) {
+ return EQUAL(zread_kind)(op1.zIK_mem_read, op2.zIK_mem_read);
+ } else if (op1.kind == Kind_zIK_mem_rmw && op2.kind == Kind_zIK_mem_rmw) {
+ return EQUAL(ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9)(op1.zIK_mem_rmw, op2.zIK_mem_rmw);
+ } else if (op1.kind == Kind_zIK_mem_write && op2.kind == Kind_zIK_mem_write) {
+ return EQUAL(zwrite_kind)(op1.zIK_mem_write, op2.zIK_mem_write);
+ } else if (op1.kind == Kind_zIK_simple && op2.kind == Kind_zIK_simple) {
+ return EQUAL(unit)(op1.zIK_simple, op2.zIK_simple);
+ } else if (op1.kind == Kind_zIK_trans && op2.kind == Kind_zIK_trans) {
+ return EQUAL(ztrans_kind)(op1.zIK_trans, op2.zIK_trans);
+ } else return false;
+}
+
+static void sailgen_IK_barrier(struct zinstruction_kind *rop, struct zbarrier_kind op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ }
+ rop->kind = Kind_zIK_barrier;
+ CREATE(zbarrier_kind)(&rop->zIK_barrier);
+ COPY(zbarrier_kind)(&rop->zIK_barrier, op);
+
+}
+
+static void sailgen_IK_branch(struct zinstruction_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ }
+ rop->kind = Kind_zIK_branch;
+ rop->zIK_branch = op;
+}
+
+static void sailgen_IK_cache_op(struct zinstruction_kind *rop, enum zcache_op_kind op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ }
+ rop->kind = Kind_zIK_cache_op;
+ rop->zIK_cache_op = op;
+}
+
+static void sailgen_IK_mem_read(struct zinstruction_kind *rop, enum zread_kind op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ }
+ rop->kind = Kind_zIK_mem_read;
+ rop->zIK_mem_read = op;
+}
+
+static void sailgen_IK_mem_rmw(struct zinstruction_kind *rop, struct ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9 op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ }
+ rop->kind = Kind_zIK_mem_rmw;
+ rop->zIK_mem_rmw = op;
+}
+
+static void sailgen_IK_mem_write(struct zinstruction_kind *rop, enum zwrite_kind op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ }
+ rop->kind = Kind_zIK_mem_write;
+ rop->zIK_mem_write = op;
+}
+
+static void sailgen_IK_simple(struct zinstruction_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ }
+ rop->kind = Kind_zIK_simple;
+ rop->zIK_simple = op;
+}
+
+static void sailgen_IK_trans(struct zinstruction_kind *rop, enum ztrans_kind op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ }
+ rop->kind = Kind_zIK_trans;
+ rop->zIK_trans = op;
+}
+
+// struct EncCapability
+struct zEncCapability {
+ uint64_t zB;
+ uint64_t zT;
+ uint64_t zaddress;
+ uint64_t zflags;
+ fbits zinternal_E;
+ uint64_t zotype;
+ uint64_t zperms;
+ uint64_t zreserved;
+};
+
+static void COPY(zEncCapability)(struct zEncCapability *rop, const struct zEncCapability op) {
+ rop->zB = op.zB;
+ rop->zT = op.zT;
+ rop->zaddress = op.zaddress;
+ rop->zflags = op.zflags;
+ rop->zinternal_E = op.zinternal_E;
+ rop->zotype = op.zotype;
+ rop->zperms = op.zperms;
+ rop->zreserved = op.zreserved;
+}
+
+static bool EQUAL(zEncCapability)(struct zEncCapability op1, struct zEncCapability op2) {
+ return EQUAL(fbits)(op1.zB, op2.zB) && EQUAL(fbits)(op1.zT, op2.zT) && EQUAL(fbits)(op1.zaddress, op2.zaddress) && EQUAL(fbits)(op1.zflags, op2.zflags) && EQUAL(fbits)(op1.zinternal_E, op2.zinternal_E) && EQUAL(fbits)(op1.zotype, op2.zotype) && EQUAL(fbits)(op1.zperms, op2.zperms) && EQUAL(fbits)(op1.zreserved, op2.zreserved);
+}
+
+// enum ClearRegSet
+enum zClearRegSet { zGPRegs, zFPRegs };
+
+static bool eq_zClearRegSet(enum zClearRegSet op1, enum zClearRegSet op2) { return op1 == op2; }
+
+static enum zClearRegSet UNDEFINED(zClearRegSet)(unit u) { return zGPRegs; }
+
+// struct Capability
+struct zCapability {
+ uint64_t zB;
+ uint64_t zE;
+ uint64_t zT;
+ bool zaccess_system_regs;
+ uint64_t zaddress;
+ bool zflag_cap_mode;
+ bool zglobal;
+ bool zinternal_E;
+ uint64_t zotype;
+ bool zpermit_cinvoke;
+ bool zpermit_execute;
+ bool zpermit_load;
+ bool zpermit_load_cap;
+ bool zpermit_seal;
+ bool zpermit_set_CID;
+ bool zpermit_store;
+ bool zpermit_store_cap;
+ bool zpermit_store_local_cap;
+ bool zpermit_unseal;
+ uint64_t zreserved;
+ bool ztag;
+ uint64_t zuperms;
+};
+
+static void COPY(zCapability)(struct zCapability *rop, const struct zCapability op) {
+ rop->zB = op.zB;
+ rop->zE = op.zE;
+ rop->zT = op.zT;
+ rop->zaccess_system_regs = op.zaccess_system_regs;
+ rop->zaddress = op.zaddress;
+ rop->zflag_cap_mode = op.zflag_cap_mode;
+ rop->zglobal = op.zglobal;
+ rop->zinternal_E = op.zinternal_E;
+ rop->zotype = op.zotype;
+ rop->zpermit_cinvoke = op.zpermit_cinvoke;
+ rop->zpermit_execute = op.zpermit_execute;
+ rop->zpermit_load = op.zpermit_load;
+ rop->zpermit_load_cap = op.zpermit_load_cap;
+ rop->zpermit_seal = op.zpermit_seal;
+ rop->zpermit_set_CID = op.zpermit_set_CID;
+ rop->zpermit_store = op.zpermit_store;
+ rop->zpermit_store_cap = op.zpermit_store_cap;
+ rop->zpermit_store_local_cap = op.zpermit_store_local_cap;
+ rop->zpermit_unseal = op.zpermit_unseal;
+ rop->zreserved = op.zreserved;
+ rop->ztag = op.ztag;
+ rop->zuperms = op.zuperms;
+}
+
+static bool EQUAL(zCapability)(struct zCapability op1, struct zCapability op2) {
+ return EQUAL(fbits)(op1.zB, op2.zB) && EQUAL(fbits)(op1.zE, op2.zE) && EQUAL(fbits)(op1.zT, op2.zT) && EQUAL(bool)(op1.zaccess_system_regs, op2.zaccess_system_regs) && EQUAL(fbits)(op1.zaddress, op2.zaddress) && EQUAL(bool)(op1.zflag_cap_mode, op2.zflag_cap_mode) && EQUAL(bool)(op1.zglobal, op2.zglobal) && EQUAL(bool)(op1.zinternal_E, op2.zinternal_E) && EQUAL(fbits)(op1.zotype, op2.zotype) && EQUAL(bool)(op1.zpermit_cinvoke, op2.zpermit_cinvoke) && EQUAL(bool)(op1.zpermit_execute, op2.zpermit_execute) && EQUAL(bool)(op1.zpermit_load, op2.zpermit_load) && EQUAL(bool)(op1.zpermit_load_cap, op2.zpermit_load_cap) && EQUAL(bool)(op1.zpermit_seal, op2.zpermit_seal) && EQUAL(bool)(op1.zpermit_set_CID, op2.zpermit_set_CID) && EQUAL(bool)(op1.zpermit_store, op2.zpermit_store) && EQUAL(bool)(op1.zpermit_store_cap, op2.zpermit_store_cap) && EQUAL(bool)(op1.zpermit_store_local_cap, op2.zpermit_store_local_cap) && EQUAL(bool)(op1.zpermit_unseal, op2.zpermit_unseal) && EQUAL(fbits)(op1.zreserved, op2.zreserved) && EQUAL(bool)(op1.ztag, op2.ztag) && EQUAL(fbits)(op1.zuperms, op2.zuperms);
+}
+
+// enum CapEx
+enum zCapEx { zCapEx_None, zCapEx_LengthViolation, zCapEx_TagViolation, zCapEx_SealViolation, zCapEx_TypeViolation, zCapEx_CallTrap, zCapEx_ReturnTrap, zCapEx_TSSUnderFlow, zCapEx_UserDefViolation, zCapEx_InexactBounds, zCapEx_UnalignedBase, zCapEx_GlobalViolation, zCapEx_PermitExecuteViolation, zCapEx_PermitLoadViolation, zCapEx_PermitStoreViolation, zCapEx_PermitLoadCapViolation, zCapEx_PermitStoreCapViolation, zCapEx_PermitStoreLocalCapViolation, zCapEx_PermitSealViolation, zCapEx_AccessSystemRegsViolation, zCapEx_PermitCInvokeViolation, zCapEx_AccessCInvokeIDCViolation, zCapEx_PermitUnsealViolation, zCapEx_PermitSetCIDViolation };
+
+static bool eq_zCapEx(enum zCapEx op1, enum zCapEx op2) { return op1 == op2; }
+
+static enum zCapEx UNDEFINED(zCapEx)(unit u) { return zCapEx_None; }
+
+// enum CPtrCmpOp
+enum zCPtrCmpOp { zCEQ, zCNE, zCLT, zCLE, zCLTU, zCLEU, zCEXEQ, zCNEXEQ };
+
+static bool eq_zCPtrCmpOp(enum zCPtrCmpOp op1, enum zCPtrCmpOp op2) { return op1 == op2; }
+
+static enum zCPtrCmpOp UNDEFINED(zCPtrCmpOp)(unit u) { return zCEQ; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+static bool sailgen_zzz3zzzz7mzzJzzK0z3neq_int(sail_int, int64_t);
+
+static bool sailgen_zzz3zzzz7mzzJzzKzzD1z3neq_int(sail_int, int64_t);
+
+static bool sailgen_zzz3zzzz7mzzJzzK0z3neq_int(sail_int zx, int64_t zy)
+{
+ __label__ end_function_1, end_block_exception_2;
+
+ bool zcbz30;
+ bool zgaz30;
+ {
+ sail_int zgsz30;
+ CREATE(sail_int)(&zgsz30);
+ CONVERT_OF(sail_int, mach_int)(&zgsz30, zy);
+ zgaz30 = eq_int(zx, zgsz30);
+ KILL(sail_int)(&zgsz30);
+ }
+ zcbz30 = not(zgaz30);
+
+end_function_1: ;
+ return zcbz30;
+end_block_exception_2: ;
+
+ return false;
+}
+
+static bool sailgen_zzz3zzzz7mzzJzzKzzD1z3neq_int(sail_int zx, int64_t zy)
+{
+ __label__ end_function_4, end_block_exception_5;
+
+ bool zcbz31;
+ bool zgaz31;
+ {
+ sail_int zgsz31;
+ CREATE(sail_int)(&zgsz31);
+ CONVERT_OF(sail_int, mach_int)(&zgsz31, zy);
+ zgaz31 = eq_int(zx, zgsz31);
+ KILL(sail_int)(&zgsz31);
+ }
+ zcbz31 = not(zgaz31);
+
+end_function_4: ;
+ return zcbz31;
+end_block_exception_5: ;
+
+ return false;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+static bool sailgen_neq_bits(lbits zx, lbits zy)
+{
+ __label__ end_function_7, end_block_exception_8;
+
+ bool zcbz32;
+ bool zgaz32;
+ zgaz32 = eq_bits(zx, zy);
+ zcbz32 = not(zgaz32);
+
+end_function_7: ;
+ return zcbz32;
+end_block_exception_8: ;
+
+ return false;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+static uint64_t sailgen_zzzz7nzzJzzK4z3sail_ones(int64_t);
+
+static void sailgen_zzz3zzz3sail_ones(lbits *rop, sail_int);
+
+static uint64_t sailgen_zzzz7nzzJzzK4z3sail_ones(int64_t zn)
+{
+ __label__ end_function_10, end_block_exception_11;
+
+ uint64_t zcbz33;
+ uint64_t zgaz33;
+ {
+ sail_int zgsz32;
+ CREATE(sail_int)(&zgsz32);
+ CONVERT_OF(sail_int, mach_int)(&zgsz32, zn);
+ lbits zgsz33;
+ CREATE(lbits)(&zgsz33);
+ zeros(&zgsz33, zgsz32);
+ zgaz33 = CONVERT_OF(fbits, lbits)(zgsz33, true);
+ KILL(lbits)(&zgsz33);
+ KILL(sail_int)(&zgsz32);
+ }
+ {
+ lbits zgsz34;
+ CREATE(lbits)(&zgsz34);
+ CONVERT_OF(lbits, fbits)(&zgsz34, zgaz33, UINT64_C(4) , true);
+ lbits zgsz35;
+ CREATE(lbits)(&zgsz35);
+ not_bits(&zgsz35, zgsz34);
+ zcbz33 = CONVERT_OF(fbits, lbits)(zgsz35, true);
+ KILL(lbits)(&zgsz35);
+ KILL(lbits)(&zgsz34);
+ }
+
+end_function_10: ;
+ return zcbz33;
+end_block_exception_11: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static void sailgen_zzz3zzz3sail_ones(lbits *zcbz34, sail_int zn)
+{
+ __label__ end_function_13, end_block_exception_14, end_function_247;
+
+ lbits zgaz34;
+ CREATE(lbits)(&zgaz34);
+ zeros(&zgaz34, zn);
+ not_bits((*(&zcbz34)), zgaz34);
+ KILL(lbits)(&zgaz34);
+end_function_13: ;
+ goto end_function_247;
+end_block_exception_14: ;
+ goto end_function_247;
+end_function_247: ;
+}
+
+
+
+
+
+
+
+
+
+
+
+static fbits sailgen_not_bit(fbits);
+
+static fbits sailgen_not_bit(fbits zb)
+{
+ __label__ end_function_16, end_block_exception_17;
+
+ fbits zcbz35;
+ bool zgaz35;
+ zgaz35 = eq_bit(zb, UINT64_C(1));
+ if (zgaz35) { zcbz35 = UINT64_C(0); } else { zcbz35 = UINT64_C(1); }
+
+end_function_16: ;
+ return zcbz35;
+end_block_exception_17: ;
+
+ return UINT64_C(0);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+static uint64_t sailgen_zzzz7mzzJzzK64zzCzz0zz7nzzJzzK18z3EXTS(int64_t, uint64_t);
+
+static void sailgen_zzz3zzz3EXTZ(lbits *rop, sail_int, lbits);
+
+static uint64_t sailgen_zzzz7mzzJzzK15zzCzz0zz7nzzJzzK12z3EXTZ(int64_t, uint64_t);
+
+static uint64_t sailgen_zzzz7mzzJzzK64zzCzz0zz7nzzJzzK18z3EXTZ(int64_t, uint64_t);
+
+static uint64_t sailgen_zzzz7mzzJzzK64zzCzz0zz7nzzJzzK18z3EXTS(int64_t zm, uint64_t zv)
+{
+ __label__ end_function_19, end_block_exception_20;
+
+ uint64_t zcbz36;
+ {
+ lbits zgsz36;
+ CREATE(lbits)(&zgsz36);
+ CONVERT_OF(lbits, fbits)(&zgsz36, zv, UINT64_C(18) , true);
+ sail_int zgsz37;
+ CREATE(sail_int)(&zgsz37);
+ CONVERT_OF(sail_int, mach_int)(&zgsz37, zm);
+ lbits zgsz38;
+ CREATE(lbits)(&zgsz38);
+ sign_extend(&zgsz38, zgsz36, zgsz37);
+ zcbz36 = CONVERT_OF(fbits, lbits)(zgsz38, true);
+ KILL(lbits)(&zgsz38);
+ KILL(sail_int)(&zgsz37);
+ KILL(lbits)(&zgsz36);
+ }
+end_function_19: ;
+ return zcbz36;
+end_block_exception_20: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static void sailgen_zzz3zzz3EXTZ(lbits *zcbz37, sail_int zm, lbits zv)
+{
+ __label__ end_function_22, end_block_exception_23, end_function_246;
+
+ zero_extend((*(&zcbz37)), zv, zm);
+end_function_22: ;
+ goto end_function_246;
+end_block_exception_23: ;
+ goto end_function_246;
+end_function_246: ;
+}
+
+static uint64_t sailgen_zzzz7mzzJzzK15zzCzz0zz7nzzJzzK12z3EXTZ(int64_t zm, uint64_t zv)
+{
+ __label__ end_function_25, end_block_exception_26;
+
+ uint64_t zcbz38;
+ {
+ lbits zgsz39;
+ CREATE(lbits)(&zgsz39);
+ CONVERT_OF(lbits, fbits)(&zgsz39, zv, UINT64_C(12) , true);
+ sail_int zgsz310;
+ CREATE(sail_int)(&zgsz310);
+ CONVERT_OF(sail_int, mach_int)(&zgsz310, zm);
+ lbits zgsz311;
+ CREATE(lbits)(&zgsz311);
+ zero_extend(&zgsz311, zgsz39, zgsz310);
+ zcbz38 = CONVERT_OF(fbits, lbits)(zgsz311, true);
+ KILL(lbits)(&zgsz311);
+ KILL(sail_int)(&zgsz310);
+ KILL(lbits)(&zgsz39);
+ }
+end_function_25: ;
+ return zcbz38;
+end_block_exception_26: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7mzzJzzK64zzCzz0zz7nzzJzzK18z3EXTZ(int64_t zm, uint64_t zv)
+{
+ __label__ end_function_28, end_block_exception_29;
+
+ uint64_t zcbz39;
+ {
+ lbits zgsz312;
+ CREATE(lbits)(&zgsz312);
+ CONVERT_OF(lbits, fbits)(&zgsz312, zv, UINT64_C(18) , true);
+ sail_int zgsz313;
+ CREATE(sail_int)(&zgsz313);
+ CONVERT_OF(sail_int, mach_int)(&zgsz313, zm);
+ lbits zgsz314;
+ CREATE(lbits)(&zgsz314);
+ zero_extend(&zgsz314, zgsz312, zgsz313);
+ zcbz39 = CONVERT_OF(fbits, lbits)(zgsz314, true);
+ KILL(lbits)(&zgsz314);
+ KILL(sail_int)(&zgsz313);
+ KILL(lbits)(&zgsz312);
+ }
+end_function_28: ;
+ return zcbz39;
+end_block_exception_29: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7nzzJzzK12z3zzeros_implicit(int64_t);
+
+static uint64_t sailgen_zzzz7nzzJzzK64z3zzeros_implicit(int64_t);
+
+static uint64_t sailgen_zzzz7nzzJzzK14z3zzeros_implicit(int64_t);
+
+static uint64_t sailgen_zzzz7nzzJzzK2z3zzeros_implicit(int64_t);
+
+static uint64_t sailgen_zzzz7nzzJzzK4z3zzeros_implicit(int64_t);
+
+static uint64_t sailgen_zzzz7nzzJzzK6z3zzeros_implicit(int64_t);
+
+static void sailgen_zzz3zzz3zzeros_implicit(lbits *rop, sail_int);
+
+static uint64_t sailgen_zzzz7nzzJzzK3z3zzeros_implicit(int64_t);
+
+static uint64_t sailgen_zzzz7nzzJzzK11z3zzeros_implicit(int64_t);
+
+static uint64_t sailgen_zzzz7nzzJzzK12z3zzeros_implicit(int64_t zn)
+{
+ __label__ end_function_31, end_block_exception_32;
+
+ uint64_t zcbz310;
+ {
+ sail_int zgsz315;
+ CREATE(sail_int)(&zgsz315);
+ CONVERT_OF(sail_int, mach_int)(&zgsz315, zn);
+ lbits zgsz316;
+ CREATE(lbits)(&zgsz316);
+ zeros(&zgsz316, zgsz315);
+ zcbz310 = CONVERT_OF(fbits, lbits)(zgsz316, true);
+ KILL(lbits)(&zgsz316);
+ KILL(sail_int)(&zgsz315);
+ }
+end_function_31: ;
+ return zcbz310;
+end_block_exception_32: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7nzzJzzK64z3zzeros_implicit(int64_t zn)
+{
+ __label__ end_function_34, end_block_exception_35;
+
+ uint64_t zcbz311;
+ {
+ sail_int zgsz317;
+ CREATE(sail_int)(&zgsz317);
+ CONVERT_OF(sail_int, mach_int)(&zgsz317, zn);
+ lbits zgsz318;
+ CREATE(lbits)(&zgsz318);
+ zeros(&zgsz318, zgsz317);
+ zcbz311 = CONVERT_OF(fbits, lbits)(zgsz318, true);
+ KILL(lbits)(&zgsz318);
+ KILL(sail_int)(&zgsz317);
+ }
+end_function_34: ;
+ return zcbz311;
+end_block_exception_35: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7nzzJzzK14z3zzeros_implicit(int64_t zn)
+{
+ __label__ end_function_37, end_block_exception_38;
+
+ uint64_t zcbz312;
+ {
+ sail_int zgsz319;
+ CREATE(sail_int)(&zgsz319);
+ CONVERT_OF(sail_int, mach_int)(&zgsz319, zn);
+ lbits zgsz320;
+ CREATE(lbits)(&zgsz320);
+ zeros(&zgsz320, zgsz319);
+ zcbz312 = CONVERT_OF(fbits, lbits)(zgsz320, true);
+ KILL(lbits)(&zgsz320);
+ KILL(sail_int)(&zgsz319);
+ }
+end_function_37: ;
+ return zcbz312;
+end_block_exception_38: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7nzzJzzK2z3zzeros_implicit(int64_t zn)
+{
+ __label__ end_function_40, end_block_exception_41;
+
+ uint64_t zcbz313;
+ {
+ sail_int zgsz321;
+ CREATE(sail_int)(&zgsz321);
+ CONVERT_OF(sail_int, mach_int)(&zgsz321, zn);
+ lbits zgsz322;
+ CREATE(lbits)(&zgsz322);
+ zeros(&zgsz322, zgsz321);
+ zcbz313 = CONVERT_OF(fbits, lbits)(zgsz322, true);
+ KILL(lbits)(&zgsz322);
+ KILL(sail_int)(&zgsz321);
+ }
+end_function_40: ;
+ return zcbz313;
+end_block_exception_41: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7nzzJzzK4z3zzeros_implicit(int64_t zn)
+{
+ __label__ end_function_43, end_block_exception_44;
+
+ uint64_t zcbz314;
+ {
+ sail_int zgsz323;
+ CREATE(sail_int)(&zgsz323);
+ CONVERT_OF(sail_int, mach_int)(&zgsz323, zn);
+ lbits zgsz324;
+ CREATE(lbits)(&zgsz324);
+ zeros(&zgsz324, zgsz323);
+ zcbz314 = CONVERT_OF(fbits, lbits)(zgsz324, true);
+ KILL(lbits)(&zgsz324);
+ KILL(sail_int)(&zgsz323);
+ }
+end_function_43: ;
+ return zcbz314;
+end_block_exception_44: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7nzzJzzK6z3zzeros_implicit(int64_t zn)
+{
+ __label__ end_function_46, end_block_exception_47;
+
+ uint64_t zcbz315;
+ {
+ sail_int zgsz325;
+ CREATE(sail_int)(&zgsz325);
+ CONVERT_OF(sail_int, mach_int)(&zgsz325, zn);
+ lbits zgsz326;
+ CREATE(lbits)(&zgsz326);
+ zeros(&zgsz326, zgsz325);
+ zcbz315 = CONVERT_OF(fbits, lbits)(zgsz326, true);
+ KILL(lbits)(&zgsz326);
+ KILL(sail_int)(&zgsz325);
+ }
+end_function_46: ;
+ return zcbz315;
+end_block_exception_47: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static void sailgen_zzz3zzz3zzeros_implicit(lbits *zcbz316, sail_int zn)
+{
+ __label__ end_function_49, end_block_exception_50, end_function_245;
+
+ zeros((*(&zcbz316)), zn);
+end_function_49: ;
+ goto end_function_245;
+end_block_exception_50: ;
+ goto end_function_245;
+end_function_245: ;
+}
+
+static uint64_t sailgen_zzzz7nzzJzzK3z3zzeros_implicit(int64_t zn)
+{
+ __label__ end_function_52, end_block_exception_53;
+
+ uint64_t zcbz317;
+ {
+ sail_int zgsz327;
+ CREATE(sail_int)(&zgsz327);
+ CONVERT_OF(sail_int, mach_int)(&zgsz327, zn);
+ lbits zgsz328;
+ CREATE(lbits)(&zgsz328);
+ zeros(&zgsz328, zgsz327);
+ zcbz317 = CONVERT_OF(fbits, lbits)(zgsz328, true);
+ KILL(lbits)(&zgsz328);
+ KILL(sail_int)(&zgsz327);
+ }
+end_function_52: ;
+ return zcbz317;
+end_block_exception_53: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7nzzJzzK11z3zzeros_implicit(int64_t zn)
+{
+ __label__ end_function_55, end_block_exception_56;
+
+ uint64_t zcbz318;
+ {
+ sail_int zgsz329;
+ CREATE(sail_int)(&zgsz329);
+ CONVERT_OF(sail_int, mach_int)(&zgsz329, zn);
+ lbits zgsz330;
+ CREATE(lbits)(&zgsz330);
+ zeros(&zgsz330, zgsz329);
+ zcbz318 = CONVERT_OF(fbits, lbits)(zgsz330, true);
+ KILL(lbits)(&zgsz330);
+ KILL(sail_int)(&zgsz329);
+ }
+end_function_55: ;
+ return zcbz318;
+end_block_exception_56: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7nzzJzzK4z3ones(int64_t);
+
+static void sailgen_zzz3zzz3ones(lbits *rop, sail_int);
+
+static uint64_t sailgen_zzzz7nzzJzzK4z3ones(int64_t zn)
+{
+ __label__ end_function_58, end_block_exception_59;
+
+ uint64_t zcbz319;
+ zcbz319 = sailgen_zzzz7nzzJzzK4z3sail_ones(zn);
+end_function_58: ;
+ return zcbz319;
+end_block_exception_59: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static void sailgen_zzz3zzz3ones(lbits *zcbz320, sail_int zn)
+{
+ __label__ end_function_61, end_block_exception_62, end_function_244;
+
+ sailgen_zzz3zzz3sail_ones((*(&zcbz320)), zn);
+end_function_61: ;
+ goto end_function_244;
+end_block_exception_62: ;
+ goto end_function_244;
+end_function_244: ;
+}
+
+static uint64_t sailgen_bool_to_bits(bool);
+
+static uint64_t sailgen_bool_to_bits(bool zx)
+{
+ __label__ end_function_64, end_block_exception_65;
+
+ uint64_t zcbz321;
+ if (zx) { zcbz321 = UINT64_C(0b1); } else { zcbz321 = UINT64_C(0b0); }
+end_function_64: ;
+ return zcbz321;
+end_block_exception_65: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static bool sailgen_bit_to_bool(fbits);
+
+static bool sailgen_bit_to_bool(fbits zb)
+{
+ __label__ case_68, case_69, finish_match_67, end_function_70, end_block_exception_71;
+
+ bool zcbz322;
+ bool zgsz331;
+ {
+ fbits zp0z3;
+ zp0z3 = zb;
+ bool zgsz332;
+ zgsz332 = eq_bit(zp0z3, UINT64_C(1));
+ if (!(zgsz332)) {
+
+ goto case_68;
+ }
+ zgsz331 = true;
+
+ goto finish_match_67;
+ }
+case_68: ;
+ {
+ fbits zp0z3;
+ zp0z3 = zb;
+ bool zgsz333;
+ zgsz333 = eq_bit(zp0z3, UINT64_C(0));
+ if (!(zgsz333)) {
+
+ goto case_69;
+ }
+ zgsz331 = false;
+
+ goto finish_match_67;
+ }
+case_69: ;
+ sail_match_failure("bit_to_bool");
+finish_match_67: ;
+ zcbz322 = zgsz331;
+
+end_function_70: ;
+ return zcbz322;
+end_block_exception_71: ;
+
+ return false;
+}
+
+static void sailgen_to_bits(lbits *rop, sail_int, sail_int);
+
+static uint64_t sailgen_zzzz7lzzJzzK6z3to_bits(int64_t, sail_int);
+
+static void sailgen_zzzz7lzzJzzK68z3to_bits(lbits *rop, int64_t, sail_int);
+
+static void sailgen_to_bits(lbits *zcbz323, sail_int zl, sail_int zn)
+{
+ __label__ end_function_73, end_block_exception_74, end_function_243;
+
+ {
+ sail_int zgsz334;
+ CREATE(sail_int)(&zgsz334);
+ CONVERT_OF(sail_int, mach_int)(&zgsz334, INT64_C(0));
+ get_slice_int((*(&zcbz323)), zl, zn, zgsz334);
+ KILL(sail_int)(&zgsz334);
+ }
+end_function_73: ;
+ goto end_function_243;
+end_block_exception_74: ;
+ goto end_function_243;
+end_function_243: ;
+}
+
+static uint64_t sailgen_zzzz7lzzJzzK6z3to_bits(int64_t zl, sail_int zn)
+{
+ __label__ end_function_76, end_block_exception_77;
+
+ uint64_t zcbz324;
+ {
+ sail_int zgsz335;
+ CREATE(sail_int)(&zgsz335);
+ CONVERT_OF(sail_int, mach_int)(&zgsz335, zl);
+ sail_int zgsz336;
+ CREATE(sail_int)(&zgsz336);
+ CONVERT_OF(sail_int, mach_int)(&zgsz336, INT64_C(0));
+ lbits zgsz337;
+ CREATE(lbits)(&zgsz337);
+ get_slice_int(&zgsz337, zgsz335, zn, zgsz336);
+ zcbz324 = CONVERT_OF(fbits, lbits)(zgsz337, true);
+ KILL(lbits)(&zgsz337);
+ KILL(sail_int)(&zgsz336);
+ KILL(sail_int)(&zgsz335);
+ }
+end_function_76: ;
+ return zcbz324;
+end_block_exception_77: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static void sailgen_zzzz7lzzJzzK68z3to_bits(lbits *zcbz325, int64_t zl, sail_int zn)
+{
+ __label__ end_function_79, end_block_exception_80, end_function_242;
+
+ {
+ sail_int zgsz339;
+ CREATE(sail_int)(&zgsz339);
+ CONVERT_OF(sail_int, mach_int)(&zgsz339, INT64_C(0));
+ sail_int zgsz338;
+ CREATE(sail_int)(&zgsz338);
+ CONVERT_OF(sail_int, mach_int)(&zgsz338, zl);
+ get_slice_int((*(&zcbz325)), zgsz338, zn, zgsz339);
+ KILL(sail_int)(&zgsz339);
+ KILL(sail_int)(&zgsz338);
+ }
+end_function_79: ;
+ goto end_function_242;
+end_block_exception_80: ;
+ goto end_function_242;
+end_function_242: ;
+}
+
+static bool sailgen_z8operatorz0zzz3zzz3zI_uz9(lbits, lbits);
+
+static bool sailgen_z8operatorz0zzzz7nzzJzzK3z3zI_uz9(uint64_t, uint64_t);
+
+static bool sailgen_z8operatorz0zzzz7nzzJzzK14z3zI_uz9(uint64_t, uint64_t);
+
+static bool sailgen_z8operatorz0zzzz7nzzJzzK14z3zKzJ_uz9(uint64_t, uint64_t);
+
+static bool sailgen_z8operatorz0zzz3zzz3zI_uz9(lbits zx, lbits zy)
+{
+ __label__ end_function_82, end_block_exception_83;
+
+ bool zcbz326;
+ sail_int zgaz36;
+ CREATE(sail_int)(&zgaz36);
+ sail_unsigned(&zgaz36, zx);
+ sail_int zgaz37;
+ CREATE(sail_int)(&zgaz37);
+ sail_unsigned(&zgaz37, zy);
+ zcbz326 = lt(zgaz36, zgaz37);
+ KILL(sail_int)(&zgaz37);
+ KILL(sail_int)(&zgaz36);
+end_function_82: ;
+ return zcbz326;
+end_block_exception_83: ;
+
+ return false;
+}
+
+static bool sailgen_z8operatorz0zzzz7nzzJzzK3z3zI_uz9(uint64_t zx, uint64_t zy)
+{
+ __label__ end_function_85, end_block_exception_86;
+
+ bool zcbz327;
+ int64_t zgaz38;
+ zgaz38 = ((mach_int) zx);
+ int64_t zgaz39;
+ zgaz39 = ((mach_int) zy);
+ {
+ sail_int zgsz341;
+ CREATE(sail_int)(&zgsz341);
+ CONVERT_OF(sail_int, mach_int)(&zgsz341, zgaz39);
+ sail_int zgsz340;
+ CREATE(sail_int)(&zgsz340);
+ CONVERT_OF(sail_int, mach_int)(&zgsz340, zgaz38);
+ zcbz327 = lt(zgsz340, zgsz341);
+ KILL(sail_int)(&zgsz341);
+ KILL(sail_int)(&zgsz340);
+ }
+
+
+end_function_85: ;
+ return zcbz327;
+end_block_exception_86: ;
+
+ return false;
+}
+
+static bool sailgen_z8operatorz0zzzz7nzzJzzK14z3zI_uz9(uint64_t zx, uint64_t zy)
+{
+ __label__ end_function_88, end_block_exception_89;
+
+ bool zcbz328;
+ int64_t zgaz310;
+ zgaz310 = ((mach_int) zx);
+ int64_t zgaz311;
+ zgaz311 = ((mach_int) zy);
+ {
+ sail_int zgsz343;
+ CREATE(sail_int)(&zgsz343);
+ CONVERT_OF(sail_int, mach_int)(&zgsz343, zgaz311);
+ sail_int zgsz342;
+ CREATE(sail_int)(&zgsz342);
+ CONVERT_OF(sail_int, mach_int)(&zgsz342, zgaz310);
+ zcbz328 = lt(zgsz342, zgsz343);
+ KILL(sail_int)(&zgsz343);
+ KILL(sail_int)(&zgsz342);
+ }
+
+
+end_function_88: ;
+ return zcbz328;
+end_block_exception_89: ;
+
+ return false;
+}
+
+static bool sailgen_z8operatorz0zzzz7nzzJzzK14z3zKzJ_uz9(uint64_t zx, uint64_t zy)
+{
+ __label__ end_function_91, end_block_exception_92;
+
+ bool zcbz329;
+ int64_t zgaz312;
+ zgaz312 = ((mach_int) zx);
+ int64_t zgaz313;
+ zgaz313 = ((mach_int) zy);
+ {
+ sail_int zgsz345;
+ CREATE(sail_int)(&zgsz345);
+ CONVERT_OF(sail_int, mach_int)(&zgsz345, zgaz313);
+ sail_int zgsz344;
+ CREATE(sail_int)(&zgsz344);
+ CONVERT_OF(sail_int, mach_int)(&zgsz344, zgaz312);
+ zcbz329 = gteq(zgsz344, zgsz345);
+ KILL(sail_int)(&zgsz345);
+ KILL(sail_int)(&zgsz344);
+ }
+
+
+end_function_91: ;
+ return zcbz329;
+end_block_exception_92: ;
+
+ return false;
+}
+
+
+
+static void sailgen_n_leading_spaces(sail_int *rop, sail_string);
+
+static void sailgen_n_leading_spaces(sail_int *zcbz330, sail_string zs)
+{
+ __label__ case_95, case_96, finish_match_94, end_function_100, end_block_exception_101, end_function_241;
+
+ sail_int zgsz346;
+ CREATE(sail_int)(&zgsz346);
+ {
+ sail_string zp0z3;
+ CREATE(sail_string)(&zp0z3);
+ COPY(sail_string)(&zp0z3, zs);
+ bool zgsz347;
+ zgsz347 = eq_string(zp0z3, "");
+ if (!(zgsz347)) {
+ KILL(sail_string)(&zp0z3);
+ goto case_95;
+ }
+ CONVERT_OF(sail_int, mach_int)(&zgsz346, INT64_C(0));
+ KILL(sail_string)(&zp0z3);
+ goto finish_match_94;
+ }
+case_95: ;
+ {
+ __label__ case_98, case_99, finish_match_97;
+
+ sail_string zgaz314;
+ CREATE(sail_string)(&zgaz314);
+ {
+ sail_int zgsz348;
+ CREATE(sail_int)(&zgsz348);
+ CONVERT_OF(sail_int, mach_int)(&zgsz348, INT64_C(1));
+ string_take(&zgaz314, zs, zgsz348);
+ KILL(sail_int)(&zgsz348);
+ }
+ sail_int zgsz349;
+ CREATE(sail_int)(&zgsz349);
+ {
+ sail_string zp0z3;
+ CREATE(sail_string)(&zp0z3);
+ COPY(sail_string)(&zp0z3, zgaz314);
+ bool zgsz351;
+ zgsz351 = eq_string(zp0z3, " ");
+ if (!(zgsz351)) {
+ KILL(sail_string)(&zp0z3);
+ goto case_98;
+ }
+ sail_int zgaz316;
+ CREATE(sail_int)(&zgaz316);
+ {
+ sail_string zgaz315;
+ CREATE(sail_string)(&zgaz315);
+ {
+ sail_int zgsz350;
+ CREATE(sail_int)(&zgsz350);
+ CONVERT_OF(sail_int, mach_int)(&zgsz350, INT64_C(1));
+ string_drop(&zgaz315, zs, zgsz350);
+ KILL(sail_int)(&zgsz350);
+ }
+ sailgen_n_leading_spaces(&zgaz316, zgaz315);
+ KILL(sail_string)(&zgaz315);
+ }
+ {
+ sail_int zgsz352;
+ CREATE(sail_int)(&zgsz352);
+ CONVERT_OF(sail_int, mach_int)(&zgsz352, INT64_C(1));
+ add_int(&zgsz349, zgsz352, zgaz316);
+ KILL(sail_int)(&zgsz352);
+ }
+ KILL(sail_int)(&zgaz316);
+ KILL(sail_string)(&zp0z3);
+ goto finish_match_97;
+ }
+ case_98: ;
+ {
+ CONVERT_OF(sail_int, mach_int)(&zgsz349, INT64_C(0));
+ goto finish_match_97;
+ }
+ case_99: ;
+ sail_match_failure("n_leading_spaces");
+ finish_match_97: ;
+ COPY(sail_int)(&zgsz346, zgsz349);
+ KILL(sail_int)(&zgsz349);
+ KILL(sail_string)(&zgaz314);
+ goto finish_match_94;
+ }
+case_96: ;
+ sail_match_failure("n_leading_spaces");
+finish_match_94: ;
+ COPY(sail_int)((*(&zcbz330)), zgsz346);
+ KILL(sail_int)(&zgsz346);
+end_function_100: ;
+ goto end_function_241;
+end_block_exception_101: ;
+ goto end_function_241;
+end_function_241: ;
+}
+
+static void sailgen_zzzz7nzzJzzK64z3MAX(sail_int *rop, int64_t);
+
+static int64_t sailgen_zzzz7nzzJzzK18z3MAX(int64_t);
+
+static void sailgen_zzzz7nzzJzzK64z3MAX(sail_int *zcbz331, int64_t zn)
+{
+ __label__ end_function_103, end_block_exception_104, end_function_240;
+
+ sail_int zgaz317;
+ CREATE(sail_int)(&zgaz317);
+ {
+ sail_int zgsz355;
+ CREATE(sail_int)(&zgsz355);
+ CONVERT_OF(sail_int, mach_int)(&zgsz355, zn);
+ pow2(&zgaz317, zgsz355);
+ KILL(sail_int)(&zgsz355);
+ }
+ {
+ sail_int zgsz356;
+ CREATE(sail_int)(&zgsz356);
+ CONVERT_OF(sail_int, mach_int)(&zgsz356, INT64_C(1));
+ sub_int((*(&zcbz331)), zgaz317, zgsz356);
+ KILL(sail_int)(&zgsz356);
+ }
+ KILL(sail_int)(&zgaz317);
+end_function_103: ;
+ goto end_function_240;
+end_block_exception_104: ;
+ goto end_function_240;
+end_function_240: ;
+}
+
+static int64_t sailgen_zzzz7nzzJzzK18z3MAX(int64_t zn)
+{
+ __label__ end_function_106, end_block_exception_107;
+
+ int64_t zcbz332;
+ int64_t zgaz318;
+ {
+ sail_int zgsz357;
+ CREATE(sail_int)(&zgsz357);
+ CONVERT_OF(sail_int, mach_int)(&zgsz357, zn);
+ sail_int zgsz358;
+ CREATE(sail_int)(&zgsz358);
+ pow2(&zgsz358, zgsz357);
+ zgaz318 = CONVERT_OF(mach_int, sail_int)(zgsz358);
+ KILL(sail_int)(&zgsz358);
+ KILL(sail_int)(&zgsz357);
+ }
+ {
+ sail_int zgsz359;
+ CREATE(sail_int)(&zgsz359);
+ CONVERT_OF(sail_int, mach_int)(&zgsz359, zgaz318);
+ sail_int zgsz360;
+ CREATE(sail_int)(&zgsz360);
+ CONVERT_OF(sail_int, mach_int)(&zgsz360, INT64_C(1));
+ sail_int zgsz361;
+ CREATE(sail_int)(&zgsz361);
+ sub_int(&zgsz361, zgsz359, zgsz360);
+ zcbz332 = CONVERT_OF(mach_int, sail_int)(zgsz361);
+ KILL(sail_int)(&zgsz361);
+ KILL(sail_int)(&zgsz360);
+ KILL(sail_int)(&zgsz359);
+ }
+
+end_function_106: ;
+ return zcbz332;
+end_block_exception_107: ;
+
+ return INT64_C(0xdeadc0de);
+}
+
+
+
+static int64_t zreserved_otypes;
+static void create_letbind_0(void) {
+
+
+ int64_t zgsz362;
+ zgsz362 = INT64_C(4);
+ zreserved_otypes = zgsz362;
+
+let_end_108: ;
+}
+static void kill_letbind_0(void) {
+}
+
+static int64_t zotype_unsealed;
+static void create_letbind_1(void) {
+
+
+ int64_t zgsz363;
+ zgsz363 = INT64_C(-1);
+ zotype_unsealed = zgsz363;
+
+let_end_109: ;
+}
+static void kill_letbind_1(void) {
+}
+
+static int64_t zotype_sentry;
+static void create_letbind_2(void) {
+
+
+ int64_t zgsz364;
+ zgsz364 = INT64_C(-2);
+ zotype_sentry = zgsz364;
+
+let_end_110: ;
+}
+static void kill_letbind_2(void) {
+}
+
+static uint64_t zPCC_IDX;
+static void create_letbind_3(void) {
+
+
+ uint64_t zgsz365;
+ zgsz365 = UINT64_C(0b100000);
+ zPCC_IDX = zgsz365;
+
+let_end_111: ;
+}
+static void kill_letbind_3(void) {
+}
+
+static uint64_t zDDC_IDX;
+static void create_letbind_4(void) {
+
+
+ uint64_t zgsz366;
+ zgsz366 = UINT64_C(0b100001);
+ zDDC_IDX = zgsz366;
+
+let_end_112: ;
+}
+static void kill_letbind_4(void) {
+}
+
+static int64_t zcap_sizze;
+static void create_letbind_5(void) {
+
+
+ int64_t zgsz367;
+ zgsz367 = INT64_C(16);
+ zcap_sizze = zgsz367;
+
+let_end_113: ;
+}
+static void kill_letbind_5(void) {
+}
+
+static int64_t zlog2_cap_sizze;
+static void create_letbind_6(void) {
+
+
+ int64_t zgsz368;
+ zgsz368 = INT64_C(4);
+ zlog2_cap_sizze = zgsz368;
+
+let_end_114: ;
+}
+static void kill_letbind_6(void) {
+}
+
+static int64_t zcap_hperms_width;
+static void create_letbind_7(void) {
+
+
+ int64_t zgsz369;
+ zgsz369 = INT64_C(12);
+ zcap_hperms_width = zgsz369;
+
+let_end_115: ;
+}
+static void kill_letbind_7(void) {
+}
+
+static int64_t zcap_uperms_width;
+static void create_letbind_8(void) {
+
+
+ int64_t zgsz370;
+ zgsz370 = INT64_C(4);
+ zcap_uperms_width = zgsz370;
+
+let_end_116: ;
+}
+static void kill_letbind_8(void) {
+}
+
+static int64_t zcap_otype_width;
+static void create_letbind_9(void) {
+
+
+ int64_t zgsz371;
+ zgsz371 = INT64_C(18);
+ zcap_otype_width = zgsz371;
+
+let_end_117: ;
+}
+static void kill_letbind_9(void) {
+}
+
+static int64_t zcap_reserved_width;
+static void create_letbind_10(void) {
+
+
+ int64_t zgsz372;
+ zgsz372 = INT64_C(2);
+ zcap_reserved_width = zgsz372;
+
+let_end_118: ;
+}
+static void kill_letbind_10(void) {
+}
+
+static int64_t zcap_flags_width;
+static void create_letbind_11(void) {
+
+
+ int64_t zgsz373;
+ zgsz373 = INT64_C(1);
+ zcap_flags_width = zgsz373;
+
+let_end_119: ;
+}
+static void kill_letbind_11(void) {
+}
+
+static int64_t zcap_mantissa_width;
+static void create_letbind_12(void) {
+
+
+ int64_t zgsz374;
+ zgsz374 = INT64_C(14);
+ zcap_mantissa_width = zgsz374;
+
+let_end_120: ;
+}
+static void kill_letbind_12(void) {
+}
+
+static int64_t zcap_E_width;
+static void create_letbind_13(void) {
+
+
+ int64_t zgsz375;
+ zgsz375 = INT64_C(6);
+ zcap_E_width = zgsz375;
+
+let_end_121: ;
+}
+static void kill_letbind_13(void) {
+}
+
+static int64_t zcap_addr_width;
+static void create_letbind_14(void) {
+
+
+ int64_t zgsz376;
+ zgsz376 = INT64_C(64);
+ zcap_addr_width = zgsz376;
+
+let_end_122: ;
+}
+static void kill_letbind_14(void) {
+}
+
+static int64_t zcap_len_width;
+static void create_letbind_15(void) {
+
+
+ int64_t zgsz377;
+ {
+ sail_int zgsz378;
+ CREATE(sail_int)(&zgsz378);
+ CONVERT_OF(sail_int, mach_int)(&zgsz378, INT64_C(64));
+ sail_int zgsz379;
+ CREATE(sail_int)(&zgsz379);
+ CONVERT_OF(sail_int, mach_int)(&zgsz379, INT64_C(1));
+ sail_int zgsz380;
+ CREATE(sail_int)(&zgsz380);
+ add_int(&zgsz380, zgsz378, zgsz379);
+ zgsz377 = CONVERT_OF(mach_int, sail_int)(zgsz380);
+ KILL(sail_int)(&zgsz380);
+ KILL(sail_int)(&zgsz379);
+ KILL(sail_int)(&zgsz378);
+ }
+ zcap_len_width = zgsz377;
+
+let_end_123: ;
+}
+static void kill_letbind_15(void) {
+}
+
+static int64_t zcaps_per_cache_line;
+static void create_letbind_16(void) {
+
+
+ int64_t zgsz381;
+ zgsz381 = INT64_C(4);
+ zcaps_per_cache_line = zgsz381;
+
+let_end_124: ;
+}
+static void kill_letbind_16(void) {
+}
+
+static int64_t zinternal_E_take_bits;
+static void create_letbind_17(void) {
+
+
+ int64_t zgsz382;
+ zgsz382 = INT64_C(3);
+ zinternal_E_take_bits = zgsz382;
+
+let_end_125: ;
+}
+static void kill_letbind_17(void) {
+}
+
+static struct zEncCapability sailgen_capBitsToEncCapability(lbits);
+
+static struct zEncCapability sailgen_capBitsToEncCapability(lbits zc)
+{
+ __label__ end_function_127, end_block_exception_128;
+
+ struct zEncCapability zcbz333;
+ uint64_t zgaz319;
+ {
+ sail_int zgsz383;
+ CREATE(sail_int)(&zgsz383);
+ CONVERT_OF(sail_int, mach_int)(&zgsz383, INT64_C(127));
+ sail_int zgsz384;
+ CREATE(sail_int)(&zgsz384);
+ CONVERT_OF(sail_int, mach_int)(&zgsz384, INT64_C(112));
+ lbits zgsz385;
+ CREATE(lbits)(&zgsz385);
+ vector_subrange_lbits(&zgsz385, zc, zgsz383, zgsz384);
+ zgaz319 = CONVERT_OF(fbits, lbits)(zgsz385, true);
+ KILL(lbits)(&zgsz385);
+ KILL(sail_int)(&zgsz384);
+ KILL(sail_int)(&zgsz383);
+ }
+ uint64_t zgaz320;
+ {
+ sail_int zgsz386;
+ CREATE(sail_int)(&zgsz386);
+ CONVERT_OF(sail_int, mach_int)(&zgsz386, INT64_C(111));
+ sail_int zgsz387;
+ CREATE(sail_int)(&zgsz387);
+ CONVERT_OF(sail_int, mach_int)(&zgsz387, INT64_C(110));
+ lbits zgsz388;
+ CREATE(lbits)(&zgsz388);
+ vector_subrange_lbits(&zgsz388, zc, zgsz386, zgsz387);
+ zgaz320 = CONVERT_OF(fbits, lbits)(zgsz388, true);
+ KILL(lbits)(&zgsz388);
+ KILL(sail_int)(&zgsz387);
+ KILL(sail_int)(&zgsz386);
+ }
+ uint64_t zgaz321;
+ {
+ sail_int zgsz389;
+ CREATE(sail_int)(&zgsz389);
+ CONVERT_OF(sail_int, mach_int)(&zgsz389, INT64_C(109));
+ sail_int zgsz390;
+ CREATE(sail_int)(&zgsz390);
+ CONVERT_OF(sail_int, mach_int)(&zgsz390, INT64_C(109));
+ lbits zgsz391;
+ CREATE(lbits)(&zgsz391);
+ vector_subrange_lbits(&zgsz391, zc, zgsz389, zgsz390);
+ zgaz321 = CONVERT_OF(fbits, lbits)(zgsz391, true);
+ KILL(lbits)(&zgsz391);
+ KILL(sail_int)(&zgsz390);
+ KILL(sail_int)(&zgsz389);
+ }
+ uint64_t zgaz322;
+ {
+ sail_int zgsz392;
+ CREATE(sail_int)(&zgsz392);
+ CONVERT_OF(sail_int, mach_int)(&zgsz392, INT64_C(108));
+ sail_int zgsz393;
+ CREATE(sail_int)(&zgsz393);
+ CONVERT_OF(sail_int, mach_int)(&zgsz393, INT64_C(91));
+ lbits zgsz394;
+ CREATE(lbits)(&zgsz394);
+ vector_subrange_lbits(&zgsz394, zc, zgsz392, zgsz393);
+ zgaz322 = CONVERT_OF(fbits, lbits)(zgsz394, true);
+ KILL(lbits)(&zgsz394);
+ KILL(sail_int)(&zgsz393);
+ KILL(sail_int)(&zgsz392);
+ }
+ fbits zgaz323;
+ {
+ sail_int zgsz395;
+ CREATE(sail_int)(&zgsz395);
+ CONVERT_OF(sail_int, mach_int)(&zgsz395, INT64_C(90));
+ zgaz323 = bitvector_access(zc, zgsz395);
+ KILL(sail_int)(&zgsz395);
+ }
+ uint64_t zgaz324;
+ {
+ sail_int zgsz396;
+ CREATE(sail_int)(&zgsz396);
+ CONVERT_OF(sail_int, mach_int)(&zgsz396, INT64_C(89));
+ sail_int zgsz397;
+ CREATE(sail_int)(&zgsz397);
+ CONVERT_OF(sail_int, mach_int)(&zgsz397, INT64_C(78));
+ lbits zgsz398;
+ CREATE(lbits)(&zgsz398);
+ vector_subrange_lbits(&zgsz398, zc, zgsz396, zgsz397);
+ zgaz324 = CONVERT_OF(fbits, lbits)(zgsz398, true);
+ KILL(lbits)(&zgsz398);
+ KILL(sail_int)(&zgsz397);
+ KILL(sail_int)(&zgsz396);
+ }
+ uint64_t zgaz325;
+ {
+ sail_int zgsz399;
+ CREATE(sail_int)(&zgsz399);
+ CONVERT_OF(sail_int, mach_int)(&zgsz399, INT64_C(77));
+ sail_int zgsz3100;
+ CREATE(sail_int)(&zgsz3100);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3100, INT64_C(64));
+ lbits zgsz3101;
+ CREATE(lbits)(&zgsz3101);
+ vector_subrange_lbits(&zgsz3101, zc, zgsz399, zgsz3100);
+ zgaz325 = CONVERT_OF(fbits, lbits)(zgsz3101, true);
+ KILL(lbits)(&zgsz3101);
+ KILL(sail_int)(&zgsz3100);
+ KILL(sail_int)(&zgsz399);
+ }
+ uint64_t zgaz326;
+ {
+ sail_int zgsz3102;
+ CREATE(sail_int)(&zgsz3102);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3102, INT64_C(63));
+ sail_int zgsz3103;
+ CREATE(sail_int)(&zgsz3103);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3103, INT64_C(0));
+ lbits zgsz3104;
+ CREATE(lbits)(&zgsz3104);
+ vector_subrange_lbits(&zgsz3104, zc, zgsz3102, zgsz3103);
+ zgaz326 = CONVERT_OF(fbits, lbits)(zgsz3104, true);
+ KILL(lbits)(&zgsz3104);
+ KILL(sail_int)(&zgsz3103);
+ KILL(sail_int)(&zgsz3102);
+ }
+ struct zEncCapability zgsz3105;
+ zgsz3105.zB = zgaz325;
+ zgsz3105.zT = zgaz324;
+ zgsz3105.zaddress = zgaz326;
+ zgsz3105.zflags = zgaz321;
+ zgsz3105.zinternal_E = zgaz323;
+ zgsz3105.zotype = zgaz322;
+ zgsz3105.zperms = zgaz319;
+ zgsz3105.zreserved = zgaz320;
+ zcbz333 = zgsz3105;
+
+
+
+
+
+
+
+
+
+end_function_127: ;
+ return zcbz333;
+end_block_exception_128: ;
+ struct zEncCapability zcbz360 = { .zreserved = UINT64_C(0xdeadc0de), .zperms = UINT64_C(0xdeadc0de), .zotype = UINT64_C(0xdeadc0de), .zinternal_E = UINT64_C(0), .zflags = UINT64_C(0xdeadc0de), .zaddress = UINT64_C(0xdeadc0de), .zT = UINT64_C(0xdeadc0de), .zB = UINT64_C(0xdeadc0de) };
+ return zcbz360;
+}
+
+static void sailgen_encCapToBits(lbits *rop, struct zEncCapability);
+
+static void sailgen_encCapToBits(lbits *zcbz334, struct zEncCapability zcap)
+{
+ __label__ end_function_130, end_block_exception_131, end_function_239;
+
+ uint64_t zgaz340;
+ zgaz340 = zcap.zperms;
+ lbits zgaz341;
+ CREATE(lbits)(&zgaz341);
+ {
+ uint64_t zgaz338;
+ zgaz338 = zcap.zreserved;
+ lbits zgaz339;
+ CREATE(lbits)(&zgaz339);
+ {
+ uint64_t zgaz336;
+ zgaz336 = zcap.zflags;
+ lbits zgaz337;
+ CREATE(lbits)(&zgaz337);
+ {
+ uint64_t zgaz334;
+ zgaz334 = zcap.zotype;
+ lbits zgaz335;
+ CREATE(lbits)(&zgaz335);
+ {
+ uint64_t zgaz332;
+ {
+ fbits zgaz327;
+ zgaz327 = zcap.zinternal_E;
+ uint64_t zgsz3106;
+ zgsz3106 = UINT64_C(0b0);
+ zgsz3106 = update_fbits(zgsz3106, INT64_C(0), zgaz327);
+ zgaz332 = zgsz3106;
+
+ }
+ lbits zgaz333;
+ CREATE(lbits)(&zgaz333);
+ {
+ uint64_t zgaz330;
+ zgaz330 = zcap.zT;
+ lbits zgaz331;
+ CREATE(lbits)(&zgaz331);
+ {
+ uint64_t zgaz328;
+ zgaz328 = zcap.zB;
+ uint64_t zgaz329;
+ zgaz329 = zcap.zaddress;
+ {
+ lbits zgsz3108;
+ CREATE(lbits)(&zgsz3108);
+ CONVERT_OF(lbits, fbits)(&zgsz3108, zgaz329, UINT64_C(64) , true);
+ lbits zgsz3107;
+ CREATE(lbits)(&zgsz3107);
+ CONVERT_OF(lbits, fbits)(&zgsz3107, zgaz328, UINT64_C(14) , true);
+ append(&zgaz331, zgsz3107, zgsz3108);
+ KILL(lbits)(&zgsz3108);
+ KILL(lbits)(&zgsz3107);
+ }
+
+
+ }
+ {
+ lbits zgsz3109;
+ CREATE(lbits)(&zgsz3109);
+ CONVERT_OF(lbits, fbits)(&zgsz3109, zgaz330, UINT64_C(12) , true);
+ append(&zgaz333, zgsz3109, zgaz331);
+ KILL(lbits)(&zgsz3109);
+ }
+ KILL(lbits)(&zgaz331);
+
+ }
+ {
+ lbits zgsz3110;
+ CREATE(lbits)(&zgsz3110);
+ CONVERT_OF(lbits, fbits)(&zgsz3110, zgaz332, UINT64_C(1) , true);
+ append(&zgaz335, zgsz3110, zgaz333);
+ KILL(lbits)(&zgsz3110);
+ }
+ KILL(lbits)(&zgaz333);
+
+ }
+ {
+ lbits zgsz3111;
+ CREATE(lbits)(&zgsz3111);
+ CONVERT_OF(lbits, fbits)(&zgsz3111, zgaz334, UINT64_C(18) , true);
+ append(&zgaz337, zgsz3111, zgaz335);
+ KILL(lbits)(&zgsz3111);
+ }
+ KILL(lbits)(&zgaz335);
+
+ }
+ {
+ lbits zgsz3112;
+ CREATE(lbits)(&zgsz3112);
+ CONVERT_OF(lbits, fbits)(&zgsz3112, zgaz336, UINT64_C(1) , true);
+ append(&zgaz339, zgsz3112, zgaz337);
+ KILL(lbits)(&zgsz3112);
+ }
+ KILL(lbits)(&zgaz337);
+
+ }
+ {
+ lbits zgsz3113;
+ CREATE(lbits)(&zgsz3113);
+ CONVERT_OF(lbits, fbits)(&zgsz3113, zgaz338, UINT64_C(2) , true);
+ append(&zgaz341, zgsz3113, zgaz339);
+ KILL(lbits)(&zgsz3113);
+ }
+ KILL(lbits)(&zgaz339);
+
+ }
+ {
+ lbits zgsz3114;
+ CREATE(lbits)(&zgsz3114);
+ CONVERT_OF(lbits, fbits)(&zgsz3114, zgaz340, UINT64_C(16) , true);
+ append((*(&zcbz334)), zgsz3114, zgaz341);
+ KILL(lbits)(&zgsz3114);
+ }
+ KILL(lbits)(&zgaz341);
+
+end_function_130: ;
+ goto end_function_239;
+end_block_exception_131: ;
+ goto end_function_239;
+end_function_239: ;
+}
+
+static sail_int zcap_max_addr;
+static void create_letbind_18(void) { CREATE(sail_int)(&zcap_max_addr);
+
+
+ sail_int zgsz3115;
+ CREATE(sail_int)(&zgsz3115);
+ sailgen_zzzz7nzzJzzK64z3MAX(&zgsz3115, zcap_addr_width);
+ COPY(sail_int)(&zcap_max_addr, zgsz3115);
+ KILL(sail_int)(&zgsz3115);
+let_end_132: ;
+}
+static void kill_letbind_18(void) { KILL(sail_int)(&zcap_max_addr);
+}
+
+static int64_t zcap_max_otype;
+static void create_letbind_19(void) {
+
+
+ int64_t zgsz3116;
+ int64_t zgaz342;
+ zgaz342 = sailgen_zzzz7nzzJzzK18z3MAX(zcap_otype_width);
+ {
+ sail_int zgsz3117;
+ CREATE(sail_int)(&zgsz3117);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3117, zgaz342);
+ sail_int zgsz3118;
+ CREATE(sail_int)(&zgsz3118);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3118, zreserved_otypes);
+ sail_int zgsz3119;
+ CREATE(sail_int)(&zgsz3119);
+ sub_int(&zgsz3119, zgsz3117, zgsz3118);
+ zgsz3116 = CONVERT_OF(mach_int, sail_int)(zgsz3119);
+ KILL(sail_int)(&zgsz3119);
+ KILL(sail_int)(&zgsz3118);
+ KILL(sail_int)(&zgsz3117);
+ }
+
+ zcap_max_otype = zgsz3116;
+
+let_end_133: ;
+}
+static void kill_letbind_19(void) {
+}
+
+static int64_t zcap_uperms_shift;
+static void create_letbind_20(void) {
+
+
+ int64_t zgsz3120;
+ zgsz3120 = INT64_C(15);
+ zcap_uperms_shift = zgsz3120;
+
+let_end_134: ;
+}
+static void kill_letbind_20(void) {
+}
+
+static int64_t zcap_perms_width;
+static void create_letbind_21(void) {
+
+
+ int64_t zgsz3121;
+ {
+ sail_int zgsz3122;
+ CREATE(sail_int)(&zgsz3122);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3122, INT64_C(15));
+ sail_int zgsz3123;
+ CREATE(sail_int)(&zgsz3123);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3123, INT64_C(4));
+ sail_int zgsz3124;
+ CREATE(sail_int)(&zgsz3124);
+ add_int(&zgsz3124, zgsz3122, zgsz3123);
+ zgsz3121 = CONVERT_OF(mach_int, sail_int)(zgsz3124);
+ KILL(sail_int)(&zgsz3124);
+ KILL(sail_int)(&zgsz3123);
+ KILL(sail_int)(&zgsz3122);
+ }
+ zcap_perms_width = zgsz3121;
+
+let_end_135: ;
+}
+static void kill_letbind_21(void) {
+}
+
+static int64_t zcap_max_E;
+static void create_letbind_22(void) {
+
+
+ int64_t zgsz3128;
+ int64_t zgaz343;
+ {
+ sail_int zgsz3125;
+ CREATE(sail_int)(&zgsz3125);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3125, zcap_len_width);
+ sail_int zgsz3126;
+ CREATE(sail_int)(&zgsz3126);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3126, zcap_mantissa_width);
+ sail_int zgsz3127;
+ CREATE(sail_int)(&zgsz3127);
+ sub_int(&zgsz3127, zgsz3125, zgsz3126);
+ zgaz343 = CONVERT_OF(mach_int, sail_int)(zgsz3127);
+ KILL(sail_int)(&zgsz3127);
+ KILL(sail_int)(&zgsz3126);
+ KILL(sail_int)(&zgsz3125);
+ }
+ {
+ sail_int zgsz3129;
+ CREATE(sail_int)(&zgsz3129);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3129, zgaz343);
+ sail_int zgsz3130;
+ CREATE(sail_int)(&zgsz3130);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3130, INT64_C(1));
+ sail_int zgsz3131;
+ CREATE(sail_int)(&zgsz3131);
+ add_int(&zgsz3131, zgsz3129, zgsz3130);
+ zgsz3128 = CONVERT_OF(mach_int, sail_int)(zgsz3131);
+ KILL(sail_int)(&zgsz3131);
+ KILL(sail_int)(&zgsz3130);
+ KILL(sail_int)(&zgsz3129);
+ }
+
+ zcap_max_E = zgsz3128;
+
+let_end_136: ;
+}
+static void kill_letbind_22(void) {
+}
+
+static uint64_t zcap_reset_E;
+static void create_letbind_23(void) {
+
+
+ uint64_t zgsz3132;
+ {
+ sail_int zgsz3133;
+ CREATE(sail_int)(&zgsz3133);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3133, zcap_E_width);
+ sail_int zgsz3134;
+ CREATE(sail_int)(&zgsz3134);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3134, zcap_max_E);
+ lbits zgsz3135;
+ CREATE(lbits)(&zgsz3135);
+ sailgen_to_bits(&zgsz3135, zgsz3133, zgsz3134);
+ zgsz3132 = CONVERT_OF(fbits, lbits)(zgsz3135, true);
+ KILL(lbits)(&zgsz3135);
+ KILL(sail_int)(&zgsz3134);
+ KILL(sail_int)(&zgsz3133);
+ }
+ zcap_reset_E = zgsz3132;
+
+let_end_137: ;
+}
+static void kill_letbind_23(void) {
+}
+
+static uint64_t zcap_reset_T;
+static void create_letbind_24(void) {
+
+
+ uint64_t zgsz3139;
+ uint64_t zgaz345;
+ {
+ int64_t zgaz344;
+ {
+ sail_int zgsz3136;
+ CREATE(sail_int)(&zgsz3136);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3136, zcap_mantissa_width);
+ sail_int zgsz3137;
+ CREATE(sail_int)(&zgsz3137);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3137, INT64_C(2));
+ sail_int zgsz3138;
+ CREATE(sail_int)(&zgsz3138);
+ sub_int(&zgsz3138, zgsz3136, zgsz3137);
+ zgaz344 = CONVERT_OF(mach_int, sail_int)(zgsz3138);
+ KILL(sail_int)(&zgsz3138);
+ KILL(sail_int)(&zgsz3137);
+ KILL(sail_int)(&zgsz3136);
+ }
+ zgaz345 = sailgen_zzzz7nzzJzzK12z3zzeros_implicit(zgaz344);
+
+ }
+ {
+ lbits zgsz3140;
+ CREATE(lbits)(&zgsz3140);
+ CONVERT_OF(lbits, fbits)(&zgsz3140, UINT64_C(0b01), UINT64_C(2) , true);
+ lbits zgsz3141;
+ CREATE(lbits)(&zgsz3141);
+ CONVERT_OF(lbits, fbits)(&zgsz3141, zgaz345, UINT64_C(12) , true);
+ lbits zgsz3142;
+ CREATE(lbits)(&zgsz3142);
+ append(&zgsz3142, zgsz3140, zgsz3141);
+ zgsz3139 = CONVERT_OF(fbits, lbits)(zgsz3142, true);
+ KILL(lbits)(&zgsz3142);
+ KILL(lbits)(&zgsz3141);
+ KILL(lbits)(&zgsz3140);
+ }
+
+ zcap_reset_T = zgsz3139;
+
+let_end_138: ;
+}
+static void kill_letbind_24(void) {
+}
+
+static struct zCapability sailgen_undefined_Capability(unit);
+
+static struct zCapability sailgen_undefined_Capability(unit zgsz3143)
+{
+ __label__ end_function_140, end_block_exception_141;
+
+ struct zCapability zcbz335;
+ bool zgaz346;
+ zgaz346 = undefined_bool(UNIT);
+ uint64_t zgaz347;
+ {
+ sail_int zgsz3144;
+ CREATE(sail_int)(&zgsz3144);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3144, INT64_C(4));
+ lbits zgsz3145;
+ CREATE(lbits)(&zgsz3145);
+ UNDEFINED(lbits)(&zgsz3145, zgsz3144);
+ zgaz347 = CONVERT_OF(fbits, lbits)(zgsz3145, true);
+ KILL(lbits)(&zgsz3145);
+ KILL(sail_int)(&zgsz3144);
+ }
+ bool zgaz348;
+ zgaz348 = undefined_bool(UNIT);
+ bool zgaz349;
+ zgaz349 = undefined_bool(UNIT);
+ bool zgaz350;
+ zgaz350 = undefined_bool(UNIT);
+ bool zgaz351;
+ zgaz351 = undefined_bool(UNIT);
+ bool zgaz352;
+ zgaz352 = undefined_bool(UNIT);
+ bool zgaz353;
+ zgaz353 = undefined_bool(UNIT);
+ bool zgaz354;
+ zgaz354 = undefined_bool(UNIT);
+ bool zgaz355;
+ zgaz355 = undefined_bool(UNIT);
+ bool zgaz356;
+ zgaz356 = undefined_bool(UNIT);
+ bool zgaz357;
+ zgaz357 = undefined_bool(UNIT);
+ bool zgaz358;
+ zgaz358 = undefined_bool(UNIT);
+ bool zgaz359;
+ zgaz359 = undefined_bool(UNIT);
+ uint64_t zgaz360;
+ {
+ sail_int zgsz3146;
+ CREATE(sail_int)(&zgsz3146);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3146, INT64_C(2));
+ lbits zgsz3147;
+ CREATE(lbits)(&zgsz3147);
+ UNDEFINED(lbits)(&zgsz3147, zgsz3146);
+ zgaz360 = CONVERT_OF(fbits, lbits)(zgsz3147, true);
+ KILL(lbits)(&zgsz3147);
+ KILL(sail_int)(&zgsz3146);
+ }
+ bool zgaz361;
+ zgaz361 = undefined_bool(UNIT);
+ bool zgaz362;
+ zgaz362 = undefined_bool(UNIT);
+ uint64_t zgaz363;
+ {
+ sail_int zgsz3148;
+ CREATE(sail_int)(&zgsz3148);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3148, INT64_C(6));
+ lbits zgsz3149;
+ CREATE(lbits)(&zgsz3149);
+ UNDEFINED(lbits)(&zgsz3149, zgsz3148);
+ zgaz363 = CONVERT_OF(fbits, lbits)(zgsz3149, true);
+ KILL(lbits)(&zgsz3149);
+ KILL(sail_int)(&zgsz3148);
+ }
+ uint64_t zgaz364;
+ {
+ sail_int zgsz3150;
+ CREATE(sail_int)(&zgsz3150);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3150, INT64_C(14));
+ lbits zgsz3151;
+ CREATE(lbits)(&zgsz3151);
+ UNDEFINED(lbits)(&zgsz3151, zgsz3150);
+ zgaz364 = CONVERT_OF(fbits, lbits)(zgsz3151, true);
+ KILL(lbits)(&zgsz3151);
+ KILL(sail_int)(&zgsz3150);
+ }
+ uint64_t zgaz365;
+ {
+ sail_int zgsz3152;
+ CREATE(sail_int)(&zgsz3152);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3152, INT64_C(14));
+ lbits zgsz3153;
+ CREATE(lbits)(&zgsz3153);
+ UNDEFINED(lbits)(&zgsz3153, zgsz3152);
+ zgaz365 = CONVERT_OF(fbits, lbits)(zgsz3153, true);
+ KILL(lbits)(&zgsz3153);
+ KILL(sail_int)(&zgsz3152);
+ }
+ uint64_t zgaz366;
+ {
+ sail_int zgsz3154;
+ CREATE(sail_int)(&zgsz3154);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3154, INT64_C(18));
+ lbits zgsz3155;
+ CREATE(lbits)(&zgsz3155);
+ UNDEFINED(lbits)(&zgsz3155, zgsz3154);
+ zgaz366 = CONVERT_OF(fbits, lbits)(zgsz3155, true);
+ KILL(lbits)(&zgsz3155);
+ KILL(sail_int)(&zgsz3154);
+ }
+ uint64_t zgaz367;
+ {
+ sail_int zgsz3156;
+ CREATE(sail_int)(&zgsz3156);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3156, INT64_C(64));
+ lbits zgsz3157;
+ CREATE(lbits)(&zgsz3157);
+ UNDEFINED(lbits)(&zgsz3157, zgsz3156);
+ zgaz367 = CONVERT_OF(fbits, lbits)(zgsz3157, true);
+ KILL(lbits)(&zgsz3157);
+ KILL(sail_int)(&zgsz3156);
+ }
+ struct zCapability zgsz3158;
+ zgsz3158.zB = zgaz364;
+ zgsz3158.zE = zgaz363;
+ zgsz3158.zT = zgaz365;
+ zgsz3158.zaccess_system_regs = zgaz349;
+ zgsz3158.zaddress = zgaz367;
+ zgsz3158.zflag_cap_mode = zgaz361;
+ zgsz3158.zglobal = zgaz359;
+ zgsz3158.zinternal_E = zgaz362;
+ zgsz3158.zotype = zgaz366;
+ zgsz3158.zpermit_cinvoke = zgaz351;
+ zgsz3158.zpermit_execute = zgaz358;
+ zgsz3158.zpermit_load = zgaz357;
+ zgsz3158.zpermit_load_cap = zgaz355;
+ zgsz3158.zpermit_seal = zgaz352;
+ zgsz3158.zpermit_set_CID = zgaz348;
+ zgsz3158.zpermit_store = zgaz356;
+ zgsz3158.zpermit_store_cap = zgaz354;
+ zgsz3158.zpermit_store_local_cap = zgaz353;
+ zgsz3158.zpermit_unseal = zgaz350;
+ zgsz3158.zreserved = zgaz360;
+ zgsz3158.ztag = zgaz346;
+ zgsz3158.zuperms = zgaz347;
+ zcbz335 = zgsz3158;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+end_function_140: ;
+ return zcbz335;
+end_block_exception_141: ;
+ struct zCapability zcbz361 = { .zuperms = UINT64_C(0xdeadc0de), .ztag = false, .zreserved = UINT64_C(0xdeadc0de), .zpermit_unseal = false, .zpermit_store_local_cap = false, .zpermit_store_cap = false, .zpermit_store = false, .zpermit_set_CID = false, .zpermit_seal = false, .zpermit_load_cap = false, .zpermit_load = false, .zpermit_execute = false, .zpermit_cinvoke = false, .zotype = UINT64_C(0xdeadc0de), .zinternal_E = false, .zglobal = false, .zflag_cap_mode = false, .zaddress = UINT64_C(0xdeadc0de), .zaccess_system_regs = false, .zT = UINT64_C(0xdeadc0de), .zE = UINT64_C(0xdeadc0de), .zB = UINT64_C(0xdeadc0de) };
+ return zcbz361;
+}
+
+static struct zCapability znull_cap;
+static void create_letbind_25(void) {
+
+
+ struct zCapability zgsz3163;
+ uint64_t zgaz368;
+ zgaz368 = sailgen_zzzz7nzzJzzK4z3zzeros_implicit(INT64_C(4));
+ uint64_t zgaz369;
+ zgaz369 = sailgen_zzzz7nzzJzzK2z3zzeros_implicit(INT64_C(2));
+ uint64_t zgaz370;
+ zgaz370 = sailgen_zzzz7nzzJzzK14z3zzeros_implicit(INT64_C(14));
+ uint64_t zgaz371;
+ {
+ sail_int zgsz3159;
+ CREATE(sail_int)(&zgsz3159);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3159, zcap_otype_width);
+ sail_int zgsz3160;
+ CREATE(sail_int)(&zgsz3160);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3160, zotype_unsealed);
+ lbits zgsz3161;
+ CREATE(lbits)(&zgsz3161);
+ sailgen_to_bits(&zgsz3161, zgsz3159, zgsz3160);
+ zgaz371 = CONVERT_OF(fbits, lbits)(zgsz3161, true);
+ KILL(lbits)(&zgsz3161);
+ KILL(sail_int)(&zgsz3160);
+ KILL(sail_int)(&zgsz3159);
+ }
+ uint64_t zgaz372;
+ zgaz372 = sailgen_zzzz7nzzJzzK64z3zzeros_implicit(INT64_C(64));
+ struct zCapability zgsz3162;
+ zgsz3162.zB = zgaz370;
+ zgsz3162.zE = zcap_reset_E;
+ zgsz3162.zT = zcap_reset_T;
+ zgsz3162.zaccess_system_regs = false;
+ zgsz3162.zaddress = zgaz372;
+ zgsz3162.zflag_cap_mode = false;
+ zgsz3162.zglobal = false;
+ zgsz3162.zinternal_E = true;
+ zgsz3162.zotype = zgaz371;
+ zgsz3162.zpermit_cinvoke = false;
+ zgsz3162.zpermit_execute = false;
+ zgsz3162.zpermit_load = false;
+ zgsz3162.zpermit_load_cap = false;
+ zgsz3162.zpermit_seal = false;
+ zgsz3162.zpermit_set_CID = false;
+ zgsz3162.zpermit_store = false;
+ zgsz3162.zpermit_store_cap = false;
+ zgsz3162.zpermit_store_local_cap = false;
+ zgsz3162.zpermit_unseal = false;
+ zgsz3162.zreserved = zgaz369;
+ zgsz3162.ztag = false;
+ zgsz3162.zuperms = zgaz368;
+ zgsz3163 = zgsz3162;
+
+
+
+
+
+
+ znull_cap = zgsz3163;
+
+let_end_142: ;
+}
+static void kill_letbind_25(void) {
+}
+
+static struct zCapability zdefault_cap;
+static void create_letbind_26(void) {
+
+
+ struct zCapability zgsz3168;
+ uint64_t zgaz373;
+ zgaz373 = sailgen_zzzz7nzzJzzK4z3ones(INT64_C(4));
+ uint64_t zgaz374;
+ zgaz374 = sailgen_zzzz7nzzJzzK2z3zzeros_implicit(INT64_C(2));
+ uint64_t zgaz375;
+ zgaz375 = sailgen_zzzz7nzzJzzK14z3zzeros_implicit(INT64_C(14));
+ uint64_t zgaz376;
+ {
+ sail_int zgsz3164;
+ CREATE(sail_int)(&zgsz3164);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3164, zcap_otype_width);
+ sail_int zgsz3165;
+ CREATE(sail_int)(&zgsz3165);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3165, zotype_unsealed);
+ lbits zgsz3166;
+ CREATE(lbits)(&zgsz3166);
+ sailgen_to_bits(&zgsz3166, zgsz3164, zgsz3165);
+ zgaz376 = CONVERT_OF(fbits, lbits)(zgsz3166, true);
+ KILL(lbits)(&zgsz3166);
+ KILL(sail_int)(&zgsz3165);
+ KILL(sail_int)(&zgsz3164);
+ }
+ uint64_t zgaz377;
+ zgaz377 = sailgen_zzzz7nzzJzzK64z3zzeros_implicit(INT64_C(64));
+ struct zCapability zgsz3167;
+ zgsz3167.zB = zgaz375;
+ zgsz3167.zE = zcap_reset_E;
+ zgsz3167.zT = zcap_reset_T;
+ zgsz3167.zaccess_system_regs = true;
+ zgsz3167.zaddress = zgaz377;
+ zgsz3167.zflag_cap_mode = false;
+ zgsz3167.zglobal = true;
+ zgsz3167.zinternal_E = true;
+ zgsz3167.zotype = zgaz376;
+ zgsz3167.zpermit_cinvoke = true;
+ zgsz3167.zpermit_execute = true;
+ zgsz3167.zpermit_load = true;
+ zgsz3167.zpermit_load_cap = true;
+ zgsz3167.zpermit_seal = true;
+ zgsz3167.zpermit_set_CID = true;
+ zgsz3167.zpermit_store = true;
+ zgsz3167.zpermit_store_cap = true;
+ zgsz3167.zpermit_store_local_cap = true;
+ zgsz3167.zpermit_unseal = true;
+ zgsz3167.zreserved = zgaz374;
+ zgsz3167.ztag = true;
+ zgsz3167.zuperms = zgaz373;
+ zgsz3168 = zgsz3167;
+
+
+
+
+
+
+ zdefault_cap = zgsz3168;
+
+let_end_143: ;
+}
+static void kill_letbind_26(void) {
+}
+
+static uint64_t sailgen_getCapHardPerms(struct zCapability);
+
+static uint64_t sailgen_getCapHardPerms(struct zCapability zcap)
+{
+ __label__ end_function_145, end_block_exception_146;
+
+ uint64_t zcbz336;
+ uint64_t zgaz3110;
+ {
+ bool zgaz378;
+ zgaz378 = zcap.zpermit_set_CID;
+ zgaz3110 = sailgen_bool_to_bits(zgaz378);
+
+ }
+ uint64_t zgaz3111;
+ {
+ uint64_t zgaz3108;
+ {
+ bool zgaz379;
+ zgaz379 = zcap.zaccess_system_regs;
+ zgaz3108 = sailgen_bool_to_bits(zgaz379);
+
+ }
+ uint64_t zgaz3109;
+ {
+ uint64_t zgaz3106;
+ {
+ bool zgaz380;
+ zgaz380 = zcap.zpermit_unseal;
+ zgaz3106 = sailgen_bool_to_bits(zgaz380);
+
+ }
+ uint64_t zgaz3107;
+ {
+ uint64_t zgaz3104;
+ {
+ bool zgaz381;
+ zgaz381 = zcap.zpermit_cinvoke;
+ zgaz3104 = sailgen_bool_to_bits(zgaz381);
+
+ }
+ uint64_t zgaz3105;
+ {
+ uint64_t zgaz3102;
+ {
+ bool zgaz382;
+ zgaz382 = zcap.zpermit_seal;
+ zgaz3102 = sailgen_bool_to_bits(zgaz382);
+
+ }
+ uint64_t zgaz3103;
+ {
+ uint64_t zgaz3100;
+ {
+ bool zgaz383;
+ zgaz383 = zcap.zpermit_store_local_cap;
+ zgaz3100 = sailgen_bool_to_bits(zgaz383);
+
+ }
+ uint64_t zgaz3101;
+ {
+ uint64_t zgaz398;
+ {
+ bool zgaz384;
+ zgaz384 = zcap.zpermit_store_cap;
+ zgaz398 = sailgen_bool_to_bits(zgaz384);
+
+ }
+ uint64_t zgaz399;
+ {
+ uint64_t zgaz396;
+ {
+ bool zgaz385;
+ zgaz385 = zcap.zpermit_load_cap;
+ zgaz396 = sailgen_bool_to_bits(zgaz385);
+
+ }
+ uint64_t zgaz397;
+ {
+ uint64_t zgaz394;
+ {
+ bool zgaz386;
+ zgaz386 = zcap.zpermit_store;
+ zgaz394 = sailgen_bool_to_bits(zgaz386);
+
+ }
+ uint64_t zgaz395;
+ {
+ uint64_t zgaz392;
+ {
+ bool zgaz387;
+ zgaz387 = zcap.zpermit_load;
+ zgaz392 = sailgen_bool_to_bits(zgaz387);
+
+ }
+ uint64_t zgaz393;
+ {
+ uint64_t zgaz390;
+ {
+ bool zgaz388;
+ zgaz388 = zcap.zpermit_execute;
+ zgaz390 = sailgen_bool_to_bits(zgaz388);
+
+ }
+ uint64_t zgaz391;
+ {
+ bool zgaz389;
+ zgaz389 = zcap.zglobal;
+ zgaz391 = sailgen_bool_to_bits(zgaz389);
+
+ }
+ {
+ lbits zgsz3169;
+ CREATE(lbits)(&zgsz3169);
+ CONVERT_OF(lbits, fbits)(&zgsz3169, zgaz390, UINT64_C(1) , true);
+ lbits zgsz3170;
+ CREATE(lbits)(&zgsz3170);
+ CONVERT_OF(lbits, fbits)(&zgsz3170, zgaz391, UINT64_C(1) , true);
+ lbits zgsz3171;
+ CREATE(lbits)(&zgsz3171);
+ append(&zgsz3171, zgsz3169, zgsz3170);
+ zgaz393 = CONVERT_OF(fbits, lbits)(zgsz3171, true);
+ KILL(lbits)(&zgsz3171);
+ KILL(lbits)(&zgsz3170);
+ KILL(lbits)(&zgsz3169);
+ }
+
+
+ }
+ {
+ lbits zgsz3172;
+ CREATE(lbits)(&zgsz3172);
+ CONVERT_OF(lbits, fbits)(&zgsz3172, zgaz392, UINT64_C(1) , true);
+ lbits zgsz3173;
+ CREATE(lbits)(&zgsz3173);
+ CONVERT_OF(lbits, fbits)(&zgsz3173, zgaz393, UINT64_C(2) , true);
+ lbits zgsz3174;
+ CREATE(lbits)(&zgsz3174);
+ append(&zgsz3174, zgsz3172, zgsz3173);
+ zgaz395 = CONVERT_OF(fbits, lbits)(zgsz3174, true);
+ KILL(lbits)(&zgsz3174);
+ KILL(lbits)(&zgsz3173);
+ KILL(lbits)(&zgsz3172);
+ }
+
+
+ }
+ {
+ lbits zgsz3175;
+ CREATE(lbits)(&zgsz3175);
+ CONVERT_OF(lbits, fbits)(&zgsz3175, zgaz394, UINT64_C(1) , true);
+ lbits zgsz3176;
+ CREATE(lbits)(&zgsz3176);
+ CONVERT_OF(lbits, fbits)(&zgsz3176, zgaz395, UINT64_C(3) , true);
+ lbits zgsz3177;
+ CREATE(lbits)(&zgsz3177);
+ append(&zgsz3177, zgsz3175, zgsz3176);
+ zgaz397 = CONVERT_OF(fbits, lbits)(zgsz3177, true);
+ KILL(lbits)(&zgsz3177);
+ KILL(lbits)(&zgsz3176);
+ KILL(lbits)(&zgsz3175);
+ }
+
+
+ }
+ {
+ lbits zgsz3178;
+ CREATE(lbits)(&zgsz3178);
+ CONVERT_OF(lbits, fbits)(&zgsz3178, zgaz396, UINT64_C(1) , true);
+ lbits zgsz3179;
+ CREATE(lbits)(&zgsz3179);
+ CONVERT_OF(lbits, fbits)(&zgsz3179, zgaz397, UINT64_C(4) , true);
+ lbits zgsz3180;
+ CREATE(lbits)(&zgsz3180);
+ append(&zgsz3180, zgsz3178, zgsz3179);
+ zgaz399 = CONVERT_OF(fbits, lbits)(zgsz3180, true);
+ KILL(lbits)(&zgsz3180);
+ KILL(lbits)(&zgsz3179);
+ KILL(lbits)(&zgsz3178);
+ }
+
+
+ }
+ {
+ lbits zgsz3181;
+ CREATE(lbits)(&zgsz3181);
+ CONVERT_OF(lbits, fbits)(&zgsz3181, zgaz398, UINT64_C(1) , true);
+ lbits zgsz3182;
+ CREATE(lbits)(&zgsz3182);
+ CONVERT_OF(lbits, fbits)(&zgsz3182, zgaz399, UINT64_C(5) , true);
+ lbits zgsz3183;
+ CREATE(lbits)(&zgsz3183);
+ append(&zgsz3183, zgsz3181, zgsz3182);
+ zgaz3101 = CONVERT_OF(fbits, lbits)(zgsz3183, true);
+ KILL(lbits)(&zgsz3183);
+ KILL(lbits)(&zgsz3182);
+ KILL(lbits)(&zgsz3181);
+ }
+
+
+ }
+ {
+ lbits zgsz3184;
+ CREATE(lbits)(&zgsz3184);
+ CONVERT_OF(lbits, fbits)(&zgsz3184, zgaz3100, UINT64_C(1) , true);
+ lbits zgsz3185;
+ CREATE(lbits)(&zgsz3185);
+ CONVERT_OF(lbits, fbits)(&zgsz3185, zgaz3101, UINT64_C(6) , true);
+ lbits zgsz3186;
+ CREATE(lbits)(&zgsz3186);
+ append(&zgsz3186, zgsz3184, zgsz3185);
+ zgaz3103 = CONVERT_OF(fbits, lbits)(zgsz3186, true);
+ KILL(lbits)(&zgsz3186);
+ KILL(lbits)(&zgsz3185);
+ KILL(lbits)(&zgsz3184);
+ }
+
+
+ }
+ {
+ lbits zgsz3187;
+ CREATE(lbits)(&zgsz3187);
+ CONVERT_OF(lbits, fbits)(&zgsz3187, zgaz3102, UINT64_C(1) , true);
+ lbits zgsz3188;
+ CREATE(lbits)(&zgsz3188);
+ CONVERT_OF(lbits, fbits)(&zgsz3188, zgaz3103, UINT64_C(7) , true);
+ lbits zgsz3189;
+ CREATE(lbits)(&zgsz3189);
+ append(&zgsz3189, zgsz3187, zgsz3188);
+ zgaz3105 = CONVERT_OF(fbits, lbits)(zgsz3189, true);
+ KILL(lbits)(&zgsz3189);
+ KILL(lbits)(&zgsz3188);
+ KILL(lbits)(&zgsz3187);
+ }
+
+
+ }
+ {
+ lbits zgsz3190;
+ CREATE(lbits)(&zgsz3190);
+ CONVERT_OF(lbits, fbits)(&zgsz3190, zgaz3104, UINT64_C(1) , true);
+ lbits zgsz3191;
+ CREATE(lbits)(&zgsz3191);
+ CONVERT_OF(lbits, fbits)(&zgsz3191, zgaz3105, UINT64_C(8) , true);
+ lbits zgsz3192;
+ CREATE(lbits)(&zgsz3192);
+ append(&zgsz3192, zgsz3190, zgsz3191);
+ zgaz3107 = CONVERT_OF(fbits, lbits)(zgsz3192, true);
+ KILL(lbits)(&zgsz3192);
+ KILL(lbits)(&zgsz3191);
+ KILL(lbits)(&zgsz3190);
+ }
+
+
+ }
+ {
+ lbits zgsz3193;
+ CREATE(lbits)(&zgsz3193);
+ CONVERT_OF(lbits, fbits)(&zgsz3193, zgaz3106, UINT64_C(1) , true);
+ lbits zgsz3194;
+ CREATE(lbits)(&zgsz3194);
+ CONVERT_OF(lbits, fbits)(&zgsz3194, zgaz3107, UINT64_C(9) , true);
+ lbits zgsz3195;
+ CREATE(lbits)(&zgsz3195);
+ append(&zgsz3195, zgsz3193, zgsz3194);
+ zgaz3109 = CONVERT_OF(fbits, lbits)(zgsz3195, true);
+ KILL(lbits)(&zgsz3195);
+ KILL(lbits)(&zgsz3194);
+ KILL(lbits)(&zgsz3193);
+ }
+
+
+ }
+ {
+ lbits zgsz3196;
+ CREATE(lbits)(&zgsz3196);
+ CONVERT_OF(lbits, fbits)(&zgsz3196, zgaz3108, UINT64_C(1) , true);
+ lbits zgsz3197;
+ CREATE(lbits)(&zgsz3197);
+ CONVERT_OF(lbits, fbits)(&zgsz3197, zgaz3109, UINT64_C(10) , true);
+ lbits zgsz3198;
+ CREATE(lbits)(&zgsz3198);
+ append(&zgsz3198, zgsz3196, zgsz3197);
+ zgaz3111 = CONVERT_OF(fbits, lbits)(zgsz3198, true);
+ KILL(lbits)(&zgsz3198);
+ KILL(lbits)(&zgsz3197);
+ KILL(lbits)(&zgsz3196);
+ }
+
+
+ }
+ {
+ lbits zgsz3199;
+ CREATE(lbits)(&zgsz3199);
+ CONVERT_OF(lbits, fbits)(&zgsz3199, zgaz3110, UINT64_C(1) , true);
+ lbits zgsz3200;
+ CREATE(lbits)(&zgsz3200);
+ CONVERT_OF(lbits, fbits)(&zgsz3200, zgaz3111, UINT64_C(11) , true);
+ lbits zgsz3201;
+ CREATE(lbits)(&zgsz3201);
+ append(&zgsz3201, zgsz3199, zgsz3200);
+ zcbz336 = CONVERT_OF(fbits, lbits)(zgsz3201, true);
+ KILL(lbits)(&zgsz3201);
+ KILL(lbits)(&zgsz3200);
+ KILL(lbits)(&zgsz3199);
+ }
+
+
+end_function_145: ;
+ return zcbz336;
+end_block_exception_146: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static struct zCapability sailgen_encCapabilityToCapability(bool, struct zEncCapability);
+
+static struct zCapability sailgen_encCapabilityToCapability(bool zt, struct zEncCapability zc)
+{
+ __label__ cleanup_149, end_cleanup_150, end_function_148, end_block_exception_151;
+
+ struct zCapability zcbz337;
+ bool zinternal_E;
+ {
+ fbits zgaz3183;
+ zgaz3183 = zc.zinternal_E;
+ zinternal_E = sailgen_bit_to_bool(zgaz3183);
+
+ }
+ uint64_t zE;
+ zE = sailgen_zzzz7nzzJzzK6z3zzeros_implicit(INT64_C(6));
+ uint64_t zBs;
+ zBs = sailgen_zzzz7nzzJzzK14z3zzeros_implicit(INT64_C(14));
+ uint64_t zT;
+ {
+ int64_t zgaz3182;
+ {
+ sail_int zgsz3202;
+ CREATE(sail_int)(&zgsz3202);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3202, INT64_C(14));
+ sail_int zgsz3203;
+ CREATE(sail_int)(&zgsz3203);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3203, INT64_C(2));
+ sail_int zgsz3204;
+ CREATE(sail_int)(&zgsz3204);
+ sub_int(&zgsz3204, zgsz3202, zgsz3203);
+ zgaz3182 = CONVERT_OF(mach_int, sail_int)(zgsz3204);
+ KILL(sail_int)(&zgsz3204);
+ KILL(sail_int)(&zgsz3203);
+ KILL(sail_int)(&zgsz3202);
+ }
+ {
+ sail_int zgsz3205;
+ CREATE(sail_int)(&zgsz3205);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3205, zgaz3182);
+ lbits zgsz3206;
+ CREATE(lbits)(&zgsz3206);
+ sailgen_zzz3zzz3zzeros_implicit(&zgsz3206, zgsz3205);
+ zT = CONVERT_OF(fbits, lbits)(zgsz3206, true);
+ KILL(lbits)(&zgsz3206);
+ KILL(sail_int)(&zgsz3205);
+ }
+
+ }
+ uint64_t zlenMSBs;
+ zlenMSBs = sailgen_zzzz7nzzJzzK2z3zzeros_implicit(INT64_C(2));
+ {
+ unit zgsz3207;
+ if (zinternal_E) {
+ {
+ uint64_t zgaz3116;
+ {
+ uint64_t zgaz3112;
+ zgaz3112 = zc.zT;
+ int64_t zgaz3113;
+ {
+ sail_int zgsz3210;
+ CREATE(sail_int)(&zgsz3210);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3210, zinternal_E_take_bits);
+ sail_int zgsz3211;
+ CREATE(sail_int)(&zgsz3211);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3211, INT64_C(1));
+ sail_int zgsz3212;
+ CREATE(sail_int)(&zgsz3212);
+ sub_int(&zgsz3212, zgsz3210, zgsz3211);
+ zgaz3113 = CONVERT_OF(mach_int, sail_int)(zgsz3212);
+ KILL(sail_int)(&zgsz3212);
+ KILL(sail_int)(&zgsz3211);
+ KILL(sail_int)(&zgsz3210);
+ }
+ {
+ lbits zgsz3213;
+ CREATE(lbits)(&zgsz3213);
+ CONVERT_OF(lbits, fbits)(&zgsz3213, zgaz3112, UINT64_C(12) , true);
+ sail_int zgsz3214;
+ CREATE(sail_int)(&zgsz3214);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3214, zgaz3113);
+ sail_int zgsz3215;
+ CREATE(sail_int)(&zgsz3215);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3215, INT64_C(0));
+ lbits zgsz3216;
+ CREATE(lbits)(&zgsz3216);
+ vector_subrange_lbits(&zgsz3216, zgsz3213, zgsz3214, zgsz3215);
+ zgaz3116 = CONVERT_OF(fbits, lbits)(zgsz3216, true);
+ KILL(lbits)(&zgsz3216);
+ KILL(sail_int)(&zgsz3215);
+ KILL(sail_int)(&zgsz3214);
+ KILL(lbits)(&zgsz3213);
+ }
+
+
+ }
+ uint64_t zgaz3117;
+ {
+ uint64_t zgaz3114;
+ zgaz3114 = zc.zB;
+ int64_t zgaz3115;
+ {
+ sail_int zgsz3217;
+ CREATE(sail_int)(&zgsz3217);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3217, zinternal_E_take_bits);
+ sail_int zgsz3218;
+ CREATE(sail_int)(&zgsz3218);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3218, INT64_C(1));
+ sail_int zgsz3219;
+ CREATE(sail_int)(&zgsz3219);
+ sub_int(&zgsz3219, zgsz3217, zgsz3218);
+ zgaz3115 = CONVERT_OF(mach_int, sail_int)(zgsz3219);
+ KILL(sail_int)(&zgsz3219);
+ KILL(sail_int)(&zgsz3218);
+ KILL(sail_int)(&zgsz3217);
+ }
+ {
+ lbits zgsz3220;
+ CREATE(lbits)(&zgsz3220);
+ CONVERT_OF(lbits, fbits)(&zgsz3220, zgaz3114, UINT64_C(14) , true);
+ sail_int zgsz3221;
+ CREATE(sail_int)(&zgsz3221);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3221, zgaz3115);
+ sail_int zgsz3222;
+ CREATE(sail_int)(&zgsz3222);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3222, INT64_C(0));
+ lbits zgsz3223;
+ CREATE(lbits)(&zgsz3223);
+ vector_subrange_lbits(&zgsz3223, zgsz3220, zgsz3221, zgsz3222);
+ zgaz3117 = CONVERT_OF(fbits, lbits)(zgsz3223, true);
+ KILL(lbits)(&zgsz3223);
+ KILL(sail_int)(&zgsz3222);
+ KILL(sail_int)(&zgsz3221);
+ KILL(lbits)(&zgsz3220);
+ }
+
+
+ }
+ {
+ lbits zgsz3224;
+ CREATE(lbits)(&zgsz3224);
+ CONVERT_OF(lbits, fbits)(&zgsz3224, zgaz3116, UINT64_C(3) , true);
+ lbits zgsz3225;
+ CREATE(lbits)(&zgsz3225);
+ CONVERT_OF(lbits, fbits)(&zgsz3225, zgaz3117, UINT64_C(3) , true);
+ lbits zgsz3226;
+ CREATE(lbits)(&zgsz3226);
+ append(&zgsz3226, zgsz3224, zgsz3225);
+ zE = CONVERT_OF(fbits, lbits)(zgsz3226, true);
+ KILL(lbits)(&zgsz3226);
+ KILL(lbits)(&zgsz3225);
+ KILL(lbits)(&zgsz3224);
+ }
+ unit zgsz3239;
+ zgsz3239 = UNIT;
+
+
+ }
+ {
+ zlenMSBs = UINT64_C(0b01);
+ unit zgsz3238;
+ zgsz3238 = UNIT;
+ }
+ {
+ uint64_t zgaz3120;
+ {
+ uint64_t zgaz3118;
+ zgaz3118 = zc.zT;
+ int64_t zgaz3119;
+ {
+ sail_int zgsz3227;
+ CREATE(sail_int)(&zgsz3227);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3227, zcap_mantissa_width);
+ sail_int zgsz3228;
+ CREATE(sail_int)(&zgsz3228);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3228, INT64_C(3));
+ sail_int zgsz3229;
+ CREATE(sail_int)(&zgsz3229);
+ sub_int(&zgsz3229, zgsz3227, zgsz3228);
+ zgaz3119 = CONVERT_OF(mach_int, sail_int)(zgsz3229);
+ KILL(sail_int)(&zgsz3229);
+ KILL(sail_int)(&zgsz3228);
+ KILL(sail_int)(&zgsz3227);
+ }
+ {
+ lbits zgsz3230;
+ CREATE(lbits)(&zgsz3230);
+ CONVERT_OF(lbits, fbits)(&zgsz3230, zgaz3118, UINT64_C(12) , true);
+ sail_int zgsz3231;
+ CREATE(sail_int)(&zgsz3231);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3231, zgaz3119);
+ sail_int zgsz3232;
+ CREATE(sail_int)(&zgsz3232);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3232, INT64_C(3));
+ lbits zgsz3233;
+ CREATE(lbits)(&zgsz3233);
+ vector_subrange_lbits(&zgsz3233, zgsz3230, zgsz3231, zgsz3232);
+ zgaz3120 = CONVERT_OF(fbits, lbits)(zgsz3233, true);
+ KILL(lbits)(&zgsz3233);
+ KILL(sail_int)(&zgsz3232);
+ KILL(sail_int)(&zgsz3231);
+ KILL(lbits)(&zgsz3230);
+ }
+
+
+ }
+ uint64_t zgaz3121;
+ zgaz3121 = sailgen_zzzz7nzzJzzK3z3zzeros_implicit(zinternal_E_take_bits);
+ {
+ lbits zgsz3234;
+ CREATE(lbits)(&zgsz3234);
+ CONVERT_OF(lbits, fbits)(&zgsz3234, zgaz3120, UINT64_C(9) , true);
+ lbits zgsz3235;
+ CREATE(lbits)(&zgsz3235);
+ CONVERT_OF(lbits, fbits)(&zgsz3235, zgaz3121, UINT64_C(3) , true);
+ lbits zgsz3236;
+ CREATE(lbits)(&zgsz3236);
+ append(&zgsz3236, zgsz3234, zgsz3235);
+ zT = CONVERT_OF(fbits, lbits)(zgsz3236, true);
+ KILL(lbits)(&zgsz3236);
+ KILL(lbits)(&zgsz3235);
+ KILL(lbits)(&zgsz3234);
+ }
+ unit zgsz3237;
+ zgsz3237 = UNIT;
+
+
+ }
+ uint64_t zgaz3124;
+ {
+ uint64_t zgaz3122;
+ zgaz3122 = zc.zB;
+ int64_t zgaz3123;
+ {
+ sail_int zgsz3240;
+ CREATE(sail_int)(&zgsz3240);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3240, zcap_mantissa_width);
+ sail_int zgsz3241;
+ CREATE(sail_int)(&zgsz3241);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3241, INT64_C(1));
+ sail_int zgsz3242;
+ CREATE(sail_int)(&zgsz3242);
+ sub_int(&zgsz3242, zgsz3240, zgsz3241);
+ zgaz3123 = CONVERT_OF(mach_int, sail_int)(zgsz3242);
+ KILL(sail_int)(&zgsz3242);
+ KILL(sail_int)(&zgsz3241);
+ KILL(sail_int)(&zgsz3240);
+ }
+ {
+ lbits zgsz3243;
+ CREATE(lbits)(&zgsz3243);
+ CONVERT_OF(lbits, fbits)(&zgsz3243, zgaz3122, UINT64_C(14) , true);
+ sail_int zgsz3244;
+ CREATE(sail_int)(&zgsz3244);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3244, zgaz3123);
+ sail_int zgsz3245;
+ CREATE(sail_int)(&zgsz3245);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3245, INT64_C(3));
+ lbits zgsz3246;
+ CREATE(lbits)(&zgsz3246);
+ vector_subrange_lbits(&zgsz3246, zgsz3243, zgsz3244, zgsz3245);
+ zgaz3124 = CONVERT_OF(fbits, lbits)(zgsz3246, true);
+ KILL(lbits)(&zgsz3246);
+ KILL(sail_int)(&zgsz3245);
+ KILL(sail_int)(&zgsz3244);
+ KILL(lbits)(&zgsz3243);
+ }
+
+
+ }
+ uint64_t zgaz3125;
+ zgaz3125 = sailgen_zzzz7nzzJzzK3z3zzeros_implicit(zinternal_E_take_bits);
+ {
+ lbits zgsz3247;
+ CREATE(lbits)(&zgsz3247);
+ CONVERT_OF(lbits, fbits)(&zgsz3247, zgaz3124, UINT64_C(11) , true);
+ lbits zgsz3248;
+ CREATE(lbits)(&zgsz3248);
+ CONVERT_OF(lbits, fbits)(&zgsz3248, zgaz3125, UINT64_C(3) , true);
+ lbits zgsz3249;
+ CREATE(lbits)(&zgsz3249);
+ append(&zgsz3249, zgsz3247, zgsz3248);
+ zBs = CONVERT_OF(fbits, lbits)(zgsz3249, true);
+ KILL(lbits)(&zgsz3249);
+ KILL(lbits)(&zgsz3248);
+ KILL(lbits)(&zgsz3247);
+ }
+ zgsz3207 = UNIT;
+
+
+ } else {
+ {
+ zlenMSBs = UINT64_C(0b00);
+ unit zgsz3209;
+ zgsz3209 = UNIT;
+ }
+ {
+ zT = zc.zT;
+ unit zgsz3208;
+ zgsz3208 = UNIT;
+ }
+ zBs = zc.zB;
+ zgsz3207 = UNIT;
+ }
+ }
+ uint64_t zcarry_out;
+ {
+ bool zgaz3181;
+ {
+ uint64_t zgaz3180;
+ {
+ int64_t zgaz3179;
+ {
+ sail_int zgsz3250;
+ CREATE(sail_int)(&zgsz3250);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3250, zcap_mantissa_width);
+ sail_int zgsz3251;
+ CREATE(sail_int)(&zgsz3251);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3251, INT64_C(3));
+ sail_int zgsz3252;
+ CREATE(sail_int)(&zgsz3252);
+ sub_int(&zgsz3252, zgsz3250, zgsz3251);
+ zgaz3179 = CONVERT_OF(mach_int, sail_int)(zgsz3252);
+ KILL(sail_int)(&zgsz3252);
+ KILL(sail_int)(&zgsz3251);
+ KILL(sail_int)(&zgsz3250);
+ }
+ {
+ lbits zgsz3253;
+ CREATE(lbits)(&zgsz3253);
+ CONVERT_OF(lbits, fbits)(&zgsz3253, zBs, UINT64_C(14) , true);
+ sail_int zgsz3254;
+ CREATE(sail_int)(&zgsz3254);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3254, zgaz3179);
+ sail_int zgsz3255;
+ CREATE(sail_int)(&zgsz3255);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3255, INT64_C(0));
+ lbits zgsz3256;
+ CREATE(lbits)(&zgsz3256);
+ vector_subrange_lbits(&zgsz3256, zgsz3253, zgsz3254, zgsz3255);
+ zgaz3180 = CONVERT_OF(fbits, lbits)(zgsz3256, true);
+ KILL(lbits)(&zgsz3256);
+ KILL(sail_int)(&zgsz3255);
+ KILL(sail_int)(&zgsz3254);
+ KILL(lbits)(&zgsz3253);
+ }
+
+ }
+ {
+ lbits zgsz3258;
+ CREATE(lbits)(&zgsz3258);
+ CONVERT_OF(lbits, fbits)(&zgsz3258, zgaz3180, UINT64_C(12) , true);
+ lbits zgsz3257;
+ CREATE(lbits)(&zgsz3257);
+ CONVERT_OF(lbits, fbits)(&zgsz3257, zT, UINT64_C(12) , true);
+ zgaz3181 = sailgen_z8operatorz0zzz3zzz3zI_uz9(zgsz3257, zgsz3258);
+ KILL(lbits)(&zgsz3258);
+ KILL(lbits)(&zgsz3257);
+ }
+
+ }
+ if (zgaz3181) { zcarry_out = UINT64_C(0b01); } else { zcarry_out = UINT64_C(0b00); }
+
+ }
+ uint64_t zTtop2;
+ {
+ uint64_t zgaz3178;
+ {
+ uint64_t zgaz3177;
+ {
+ int64_t zgaz3175;
+ {
+ sail_int zgsz3259;
+ CREATE(sail_int)(&zgsz3259);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3259, zcap_mantissa_width);
+ sail_int zgsz3260;
+ CREATE(sail_int)(&zgsz3260);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3260, INT64_C(1));
+ sail_int zgsz3261;
+ CREATE(sail_int)(&zgsz3261);
+ sub_int(&zgsz3261, zgsz3259, zgsz3260);
+ zgaz3175 = CONVERT_OF(mach_int, sail_int)(zgsz3261);
+ KILL(sail_int)(&zgsz3261);
+ KILL(sail_int)(&zgsz3260);
+ KILL(sail_int)(&zgsz3259);
+ }
+ int64_t zgaz3176;
+ {
+ sail_int zgsz3262;
+ CREATE(sail_int)(&zgsz3262);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3262, zcap_mantissa_width);
+ sail_int zgsz3263;
+ CREATE(sail_int)(&zgsz3263);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3263, INT64_C(2));
+ sail_int zgsz3264;
+ CREATE(sail_int)(&zgsz3264);
+ sub_int(&zgsz3264, zgsz3262, zgsz3263);
+ zgaz3176 = CONVERT_OF(mach_int, sail_int)(zgsz3264);
+ KILL(sail_int)(&zgsz3264);
+ KILL(sail_int)(&zgsz3263);
+ KILL(sail_int)(&zgsz3262);
+ }
+ {
+ lbits zgsz3265;
+ CREATE(lbits)(&zgsz3265);
+ CONVERT_OF(lbits, fbits)(&zgsz3265, zBs, UINT64_C(14) , true);
+ sail_int zgsz3266;
+ CREATE(sail_int)(&zgsz3266);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3266, zgaz3175);
+ sail_int zgsz3267;
+ CREATE(sail_int)(&zgsz3267);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3267, zgaz3176);
+ lbits zgsz3268;
+ CREATE(lbits)(&zgsz3268);
+ vector_subrange_lbits(&zgsz3268, zgsz3265, zgsz3266, zgsz3267);
+ zgaz3177 = CONVERT_OF(fbits, lbits)(zgsz3268, true);
+ KILL(lbits)(&zgsz3268);
+ KILL(sail_int)(&zgsz3267);
+ KILL(sail_int)(&zgsz3266);
+ KILL(lbits)(&zgsz3265);
+ }
+
+
+ }
+ {
+ lbits zgsz3269;
+ CREATE(lbits)(&zgsz3269);
+ CONVERT_OF(lbits, fbits)(&zgsz3269, zgaz3177, UINT64_C(2) , true);
+ lbits zgsz3270;
+ CREATE(lbits)(&zgsz3270);
+ CONVERT_OF(lbits, fbits)(&zgsz3270, zlenMSBs, UINT64_C(2) , true);
+ lbits zgsz3271;
+ CREATE(lbits)(&zgsz3271);
+ add_bits(&zgsz3271, zgsz3269, zgsz3270);
+ zgaz3178 = CONVERT_OF(fbits, lbits)(zgsz3271, true);
+ KILL(lbits)(&zgsz3271);
+ KILL(lbits)(&zgsz3270);
+ KILL(lbits)(&zgsz3269);
+ }
+
+ }
+ {
+ lbits zgsz3272;
+ CREATE(lbits)(&zgsz3272);
+ CONVERT_OF(lbits, fbits)(&zgsz3272, zgaz3178, UINT64_C(2) , true);
+ lbits zgsz3273;
+ CREATE(lbits)(&zgsz3273);
+ CONVERT_OF(lbits, fbits)(&zgsz3273, zcarry_out, UINT64_C(2) , true);
+ lbits zgsz3274;
+ CREATE(lbits)(&zgsz3274);
+ add_bits(&zgsz3274, zgsz3272, zgsz3273);
+ zTtop2 = CONVERT_OF(fbits, lbits)(zgsz3274, true);
+ KILL(lbits)(&zgsz3274);
+ KILL(lbits)(&zgsz3273);
+ KILL(lbits)(&zgsz3272);
+ }
+
+ }
+ struct zCapability zgaz3174;
+ {
+ uint64_t zgaz3130;
+ {
+ bool zgaz3126;
+ {
+ sail_int zgsz3276;
+ CREATE(sail_int)(&zgsz3276);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3276, INT64_C(0));
+ sail_int zgsz3275;
+ CREATE(sail_int)(&zgsz3275);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3275, zcap_uperms_width);
+ zgaz3126 = gt(zgsz3275, zgsz3276);
+ KILL(sail_int)(&zgsz3276);
+ KILL(sail_int)(&zgsz3275);
+ }
+ uint64_t zgaz3128;
+ zgaz3128 = zc.zperms;
+ int64_t zgaz3129;
+ {
+ int64_t zgaz3127;
+ {
+ sail_int zgsz3277;
+ CREATE(sail_int)(&zgsz3277);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3277, zcap_hperms_width);
+ sail_int zgsz3278;
+ CREATE(sail_int)(&zgsz3278);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3278, zcap_uperms_width);
+ sail_int zgsz3279;
+ CREATE(sail_int)(&zgsz3279);
+ add_int(&zgsz3279, zgsz3277, zgsz3278);
+ zgaz3127 = CONVERT_OF(mach_int, sail_int)(zgsz3279);
+ KILL(sail_int)(&zgsz3279);
+ KILL(sail_int)(&zgsz3278);
+ KILL(sail_int)(&zgsz3277);
+ }
+ {
+ sail_int zgsz3280;
+ CREATE(sail_int)(&zgsz3280);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3280, zgaz3127);
+ sail_int zgsz3281;
+ CREATE(sail_int)(&zgsz3281);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3281, INT64_C(1));
+ sail_int zgsz3282;
+ CREATE(sail_int)(&zgsz3282);
+ sub_int(&zgsz3282, zgsz3280, zgsz3281);
+ zgaz3129 = CONVERT_OF(mach_int, sail_int)(zgsz3282);
+ KILL(sail_int)(&zgsz3282);
+ KILL(sail_int)(&zgsz3281);
+ KILL(sail_int)(&zgsz3280);
+ }
+
+ }
+ {
+ lbits zgsz3283;
+ CREATE(lbits)(&zgsz3283);
+ CONVERT_OF(lbits, fbits)(&zgsz3283, zgaz3128, UINT64_C(16) , true);
+ sail_int zgsz3284;
+ CREATE(sail_int)(&zgsz3284);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3284, zgaz3129);
+ sail_int zgsz3285;
+ CREATE(sail_int)(&zgsz3285);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3285, zcap_hperms_width);
+ lbits zgsz3286;
+ CREATE(lbits)(&zgsz3286);
+ vector_subrange_lbits(&zgsz3286, zgsz3283, zgsz3284, zgsz3285);
+ zgaz3130 = CONVERT_OF(fbits, lbits)(zgsz3286, true);
+ KILL(lbits)(&zgsz3286);
+ KILL(sail_int)(&zgsz3285);
+ KILL(sail_int)(&zgsz3284);
+ KILL(lbits)(&zgsz3283);
+ }
+
+
+
+ }
+ bool zgaz3133;
+ {
+ fbits zgaz3132;
+ {
+ uint64_t zgaz3131;
+ zgaz3131 = zc.zperms;
+ {
+ sail_int zgsz3288;
+ CREATE(sail_int)(&zgsz3288);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3288, INT64_C(11));
+ lbits zgsz3287;
+ CREATE(lbits)(&zgsz3287);
+ CONVERT_OF(lbits, fbits)(&zgsz3287, zgaz3131, UINT64_C(16) , true);
+ zgaz3132 = bitvector_access(zgsz3287, zgsz3288);
+ KILL(sail_int)(&zgsz3288);
+ KILL(lbits)(&zgsz3287);
+ }
+
+ }
+ zgaz3133 = sailgen_bit_to_bool(zgaz3132);
+
+ }
+ bool zgaz3136;
+ {
+ fbits zgaz3135;
+ {
+ uint64_t zgaz3134;
+ zgaz3134 = zc.zperms;
+ {
+ sail_int zgsz3290;
+ CREATE(sail_int)(&zgsz3290);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3290, INT64_C(10));
+ lbits zgsz3289;
+ CREATE(lbits)(&zgsz3289);
+ CONVERT_OF(lbits, fbits)(&zgsz3289, zgaz3134, UINT64_C(16) , true);
+ zgaz3135 = bitvector_access(zgsz3289, zgsz3290);
+ KILL(sail_int)(&zgsz3290);
+ KILL(lbits)(&zgsz3289);
+ }
+
+ }
+ zgaz3136 = sailgen_bit_to_bool(zgaz3135);
+
+ }
+ bool zgaz3139;
+ {
+ fbits zgaz3138;
+ {
+ uint64_t zgaz3137;
+ zgaz3137 = zc.zperms;
+ {
+ sail_int zgsz3292;
+ CREATE(sail_int)(&zgsz3292);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3292, INT64_C(9));
+ lbits zgsz3291;
+ CREATE(lbits)(&zgsz3291);
+ CONVERT_OF(lbits, fbits)(&zgsz3291, zgaz3137, UINT64_C(16) , true);
+ zgaz3138 = bitvector_access(zgsz3291, zgsz3292);
+ KILL(sail_int)(&zgsz3292);
+ KILL(lbits)(&zgsz3291);
+ }
+
+ }
+ zgaz3139 = sailgen_bit_to_bool(zgaz3138);
+
+ }
+ bool zgaz3142;
+ {
+ fbits zgaz3141;
+ {
+ uint64_t zgaz3140;
+ zgaz3140 = zc.zperms;
+ {
+ sail_int zgsz3294;
+ CREATE(sail_int)(&zgsz3294);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3294, INT64_C(8));
+ lbits zgsz3293;
+ CREATE(lbits)(&zgsz3293);
+ CONVERT_OF(lbits, fbits)(&zgsz3293, zgaz3140, UINT64_C(16) , true);
+ zgaz3141 = bitvector_access(zgsz3293, zgsz3294);
+ KILL(sail_int)(&zgsz3294);
+ KILL(lbits)(&zgsz3293);
+ }
+
+ }
+ zgaz3142 = sailgen_bit_to_bool(zgaz3141);
+
+ }
+ bool zgaz3145;
+ {
+ fbits zgaz3144;
+ {
+ uint64_t zgaz3143;
+ zgaz3143 = zc.zperms;
+ {
+ sail_int zgsz3296;
+ CREATE(sail_int)(&zgsz3296);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3296, INT64_C(7));
+ lbits zgsz3295;
+ CREATE(lbits)(&zgsz3295);
+ CONVERT_OF(lbits, fbits)(&zgsz3295, zgaz3143, UINT64_C(16) , true);
+ zgaz3144 = bitvector_access(zgsz3295, zgsz3296);
+ KILL(sail_int)(&zgsz3296);
+ KILL(lbits)(&zgsz3295);
+ }
+
+ }
+ zgaz3145 = sailgen_bit_to_bool(zgaz3144);
+
+ }
+ bool zgaz3148;
+ {
+ fbits zgaz3147;
+ {
+ uint64_t zgaz3146;
+ zgaz3146 = zc.zperms;
+ {
+ sail_int zgsz3298;
+ CREATE(sail_int)(&zgsz3298);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3298, INT64_C(6));
+ lbits zgsz3297;
+ CREATE(lbits)(&zgsz3297);
+ CONVERT_OF(lbits, fbits)(&zgsz3297, zgaz3146, UINT64_C(16) , true);
+ zgaz3147 = bitvector_access(zgsz3297, zgsz3298);
+ KILL(sail_int)(&zgsz3298);
+ KILL(lbits)(&zgsz3297);
+ }
+
+ }
+ zgaz3148 = sailgen_bit_to_bool(zgaz3147);
+
+ }
+ bool zgaz3151;
+ {
+ fbits zgaz3150;
+ {
+ uint64_t zgaz3149;
+ zgaz3149 = zc.zperms;
+ {
+ sail_int zgsz3300;
+ CREATE(sail_int)(&zgsz3300);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3300, INT64_C(5));
+ lbits zgsz3299;
+ CREATE(lbits)(&zgsz3299);
+ CONVERT_OF(lbits, fbits)(&zgsz3299, zgaz3149, UINT64_C(16) , true);
+ zgaz3150 = bitvector_access(zgsz3299, zgsz3300);
+ KILL(sail_int)(&zgsz3300);
+ KILL(lbits)(&zgsz3299);
+ }
+
+ }
+ zgaz3151 = sailgen_bit_to_bool(zgaz3150);
+
+ }
+ bool zgaz3154;
+ {
+ fbits zgaz3153;
+ {
+ uint64_t zgaz3152;
+ zgaz3152 = zc.zperms;
+ {
+ sail_int zgsz3302;
+ CREATE(sail_int)(&zgsz3302);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3302, INT64_C(4));
+ lbits zgsz3301;
+ CREATE(lbits)(&zgsz3301);
+ CONVERT_OF(lbits, fbits)(&zgsz3301, zgaz3152, UINT64_C(16) , true);
+ zgaz3153 = bitvector_access(zgsz3301, zgsz3302);
+ KILL(sail_int)(&zgsz3302);
+ KILL(lbits)(&zgsz3301);
+ }
+
+ }
+ zgaz3154 = sailgen_bit_to_bool(zgaz3153);
+
+ }
+ bool zgaz3157;
+ {
+ fbits zgaz3156;
+ {
+ uint64_t zgaz3155;
+ zgaz3155 = zc.zperms;
+ {
+ sail_int zgsz3304;
+ CREATE(sail_int)(&zgsz3304);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3304, INT64_C(3));
+ lbits zgsz3303;
+ CREATE(lbits)(&zgsz3303);
+ CONVERT_OF(lbits, fbits)(&zgsz3303, zgaz3155, UINT64_C(16) , true);
+ zgaz3156 = bitvector_access(zgsz3303, zgsz3304);
+ KILL(sail_int)(&zgsz3304);
+ KILL(lbits)(&zgsz3303);
+ }
+
+ }
+ zgaz3157 = sailgen_bit_to_bool(zgaz3156);
+
+ }
+ bool zgaz3160;
+ {
+ fbits zgaz3159;
+ {
+ uint64_t zgaz3158;
+ zgaz3158 = zc.zperms;
+ {
+ sail_int zgsz3306;
+ CREATE(sail_int)(&zgsz3306);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3306, INT64_C(2));
+ lbits zgsz3305;
+ CREATE(lbits)(&zgsz3305);
+ CONVERT_OF(lbits, fbits)(&zgsz3305, zgaz3158, UINT64_C(16) , true);
+ zgaz3159 = bitvector_access(zgsz3305, zgsz3306);
+ KILL(sail_int)(&zgsz3306);
+ KILL(lbits)(&zgsz3305);
+ }
+
+ }
+ zgaz3160 = sailgen_bit_to_bool(zgaz3159);
+
+ }
+ bool zgaz3163;
+ {
+ fbits zgaz3162;
+ {
+ uint64_t zgaz3161;
+ zgaz3161 = zc.zperms;
+ {
+ sail_int zgsz3308;
+ CREATE(sail_int)(&zgsz3308);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3308, INT64_C(1));
+ lbits zgsz3307;
+ CREATE(lbits)(&zgsz3307);
+ CONVERT_OF(lbits, fbits)(&zgsz3307, zgaz3161, UINT64_C(16) , true);
+ zgaz3162 = bitvector_access(zgsz3307, zgsz3308);
+ KILL(sail_int)(&zgsz3308);
+ KILL(lbits)(&zgsz3307);
+ }
+
+ }
+ zgaz3163 = sailgen_bit_to_bool(zgaz3162);
+
+ }
+ bool zgaz3166;
+ {
+ fbits zgaz3165;
+ {
+ uint64_t zgaz3164;
+ zgaz3164 = zc.zperms;
+ {
+ sail_int zgsz3310;
+ CREATE(sail_int)(&zgsz3310);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3310, INT64_C(0));
+ lbits zgsz3309;
+ CREATE(lbits)(&zgsz3309);
+ CONVERT_OF(lbits, fbits)(&zgsz3309, zgaz3164, UINT64_C(16) , true);
+ zgaz3165 = bitvector_access(zgsz3309, zgsz3310);
+ KILL(sail_int)(&zgsz3310);
+ KILL(lbits)(&zgsz3309);
+ }
+
+ }
+ zgaz3166 = sailgen_bit_to_bool(zgaz3165);
+
+ }
+ uint64_t zgaz3167;
+ zgaz3167 = zc.zreserved;
+ bool zgaz3170;
+ {
+ fbits zgaz3169;
+ {
+ uint64_t zgaz3168;
+ zgaz3168 = zc.zflags;
+ {
+ sail_int zgsz3312;
+ CREATE(sail_int)(&zgsz3312);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3312, INT64_C(0));
+ lbits zgsz3311;
+ CREATE(lbits)(&zgsz3311);
+ CONVERT_OF(lbits, fbits)(&zgsz3311, zgaz3168, UINT64_C(1) , true);
+ zgaz3169 = bitvector_access(zgsz3311, zgsz3312);
+ KILL(sail_int)(&zgsz3312);
+ KILL(lbits)(&zgsz3311);
+ }
+
+ }
+ zgaz3170 = sailgen_bit_to_bool(zgaz3169);
+
+ }
+ uint64_t zgaz3171;
+ {
+ lbits zgsz3313;
+ CREATE(lbits)(&zgsz3313);
+ CONVERT_OF(lbits, fbits)(&zgsz3313, zTtop2, UINT64_C(2) , true);
+ lbits zgsz3314;
+ CREATE(lbits)(&zgsz3314);
+ CONVERT_OF(lbits, fbits)(&zgsz3314, zT, UINT64_C(12) , true);
+ lbits zgsz3315;
+ CREATE(lbits)(&zgsz3315);
+ append(&zgsz3315, zgsz3313, zgsz3314);
+ zgaz3171 = CONVERT_OF(fbits, lbits)(zgsz3315, true);
+ KILL(lbits)(&zgsz3315);
+ KILL(lbits)(&zgsz3314);
+ KILL(lbits)(&zgsz3313);
+ }
+ uint64_t zgaz3172;
+ zgaz3172 = zc.zotype;
+ uint64_t zgaz3173;
+ zgaz3173 = zc.zaddress;
+ struct zCapability zgsz3316;
+ zgsz3316.zB = zBs;
+ zgsz3316.zE = zE;
+ zgsz3316.zT = zgaz3171;
+ zgsz3316.zaccess_system_regs = zgaz3136;
+ zgsz3316.zaddress = zgaz3173;
+ zgsz3316.zflag_cap_mode = zgaz3170;
+ zgsz3316.zglobal = zgaz3166;
+ zgsz3316.zinternal_E = zinternal_E;
+ zgsz3316.zotype = zgaz3172;
+ zgsz3316.zpermit_cinvoke = zgaz3142;
+ zgsz3316.zpermit_execute = zgaz3163;
+ zgsz3316.zpermit_load = zgaz3160;
+ zgsz3316.zpermit_load_cap = zgaz3154;
+ zgsz3316.zpermit_seal = zgaz3145;
+ zgsz3316.zpermit_set_CID = zgaz3133;
+ zgsz3316.zpermit_store = zgaz3157;
+ zgsz3316.zpermit_store_cap = zgaz3151;
+ zgsz3316.zpermit_store_local_cap = zgaz3148;
+ zgsz3316.zpermit_unseal = zgaz3139;
+ zgsz3316.zreserved = zgaz3167;
+ zgsz3316.ztag = zt;
+ zgsz3316.zuperms = zgaz3130;
+ zgaz3174 = zgsz3316;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+ zcbz337 = zgaz3174;
+ goto cleanup_149;
+ /* unreachable after return */
+
+
+
+
+
+
+
+
+ goto end_cleanup_150;
+cleanup_149: ;
+
+
+
+
+
+
+
+
+ goto end_function_148;
+end_cleanup_150: ;
+end_function_148: ;
+ return zcbz337;
+end_block_exception_151: ;
+ struct zCapability zcbz362 = { .zuperms = UINT64_C(0xdeadc0de), .ztag = false, .zreserved = UINT64_C(0xdeadc0de), .zpermit_unseal = false, .zpermit_store_local_cap = false, .zpermit_store_cap = false, .zpermit_store = false, .zpermit_set_CID = false, .zpermit_seal = false, .zpermit_load_cap = false, .zpermit_load = false, .zpermit_execute = false, .zpermit_cinvoke = false, .zotype = UINT64_C(0xdeadc0de), .zinternal_E = false, .zglobal = false, .zflag_cap_mode = false, .zaddress = UINT64_C(0xdeadc0de), .zaccess_system_regs = false, .zT = UINT64_C(0xdeadc0de), .zE = UINT64_C(0xdeadc0de), .zB = UINT64_C(0xdeadc0de) };
+ return zcbz362;
+}
+
+static struct zCapability sailgen_capBitsToCapability(bool, lbits);
+
+static struct zCapability sailgen_capBitsToCapability(bool zt, lbits zc)
+{
+ __label__ end_function_153, end_block_exception_154;
+
+ struct zCapability zcbz338;
+ struct zEncCapability zgaz3184;
+ zgaz3184 = sailgen_capBitsToEncCapability(zc);
+ zcbz338 = sailgen_encCapabilityToCapability(zt, zgaz3184);
+
+end_function_153: ;
+ return zcbz338;
+end_block_exception_154: ;
+ struct zCapability zcbz363 = { .zuperms = UINT64_C(0xdeadc0de), .ztag = false, .zreserved = UINT64_C(0xdeadc0de), .zpermit_unseal = false, .zpermit_store_local_cap = false, .zpermit_store_cap = false, .zpermit_store = false, .zpermit_set_CID = false, .zpermit_seal = false, .zpermit_load_cap = false, .zpermit_load = false, .zpermit_execute = false, .zpermit_cinvoke = false, .zotype = UINT64_C(0xdeadc0de), .zinternal_E = false, .zglobal = false, .zflag_cap_mode = false, .zaddress = UINT64_C(0xdeadc0de), .zaccess_system_regs = false, .zT = UINT64_C(0xdeadc0de), .zE = UINT64_C(0xdeadc0de), .zB = UINT64_C(0xdeadc0de) };
+ return zcbz363;
+}
+
+static struct zEncCapability sailgen_capToEncCap(struct zCapability);
+
+static struct zEncCapability sailgen_capToEncCap(struct zCapability zcap)
+{
+ __label__ cleanup_157, end_cleanup_158, end_function_156, end_block_exception_159;
+
+ struct zEncCapability zcbz339;
+ uint64_t zt_hi;
+ {
+ uint64_t zgaz3211;
+ zgaz3211 = zcap.zT;
+ int64_t zgaz3212;
+ {
+ sail_int zgsz3317;
+ CREATE(sail_int)(&zgsz3317);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3317, zcap_mantissa_width);
+ sail_int zgsz3318;
+ CREATE(sail_int)(&zgsz3318);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3318, INT64_C(3));
+ sail_int zgsz3319;
+ CREATE(sail_int)(&zgsz3319);
+ sub_int(&zgsz3319, zgsz3317, zgsz3318);
+ zgaz3212 = CONVERT_OF(mach_int, sail_int)(zgsz3319);
+ KILL(sail_int)(&zgsz3319);
+ KILL(sail_int)(&zgsz3318);
+ KILL(sail_int)(&zgsz3317);
+ }
+ {
+ lbits zgsz3320;
+ CREATE(lbits)(&zgsz3320);
+ CONVERT_OF(lbits, fbits)(&zgsz3320, zgaz3211, UINT64_C(14) , true);
+ sail_int zgsz3321;
+ CREATE(sail_int)(&zgsz3321);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3321, zgaz3212);
+ sail_int zgsz3322;
+ CREATE(sail_int)(&zgsz3322);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3322, zinternal_E_take_bits);
+ lbits zgsz3323;
+ CREATE(lbits)(&zgsz3323);
+ vector_subrange_lbits(&zgsz3323, zgsz3320, zgsz3321, zgsz3322);
+ zt_hi = CONVERT_OF(fbits, lbits)(zgsz3323, true);
+ KILL(lbits)(&zgsz3323);
+ KILL(sail_int)(&zgsz3322);
+ KILL(sail_int)(&zgsz3321);
+ KILL(lbits)(&zgsz3320);
+ }
+
+
+ }
+ uint64_t zt_lo;
+ {
+ uint64_t zgaz3209;
+ zgaz3209 = zcap.zT;
+ int64_t zgaz3210;
+ {
+ sail_int zgsz3324;
+ CREATE(sail_int)(&zgsz3324);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3324, zinternal_E_take_bits);
+ sail_int zgsz3325;
+ CREATE(sail_int)(&zgsz3325);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3325, INT64_C(1));
+ sail_int zgsz3326;
+ CREATE(sail_int)(&zgsz3326);
+ sub_int(&zgsz3326, zgsz3324, zgsz3325);
+ zgaz3210 = CONVERT_OF(mach_int, sail_int)(zgsz3326);
+ KILL(sail_int)(&zgsz3326);
+ KILL(sail_int)(&zgsz3325);
+ KILL(sail_int)(&zgsz3324);
+ }
+ {
+ lbits zgsz3327;
+ CREATE(lbits)(&zgsz3327);
+ CONVERT_OF(lbits, fbits)(&zgsz3327, zgaz3209, UINT64_C(14) , true);
+ sail_int zgsz3328;
+ CREATE(sail_int)(&zgsz3328);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3328, zgaz3210);
+ sail_int zgsz3329;
+ CREATE(sail_int)(&zgsz3329);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3329, INT64_C(0));
+ lbits zgsz3330;
+ CREATE(lbits)(&zgsz3330);
+ vector_subrange_lbits(&zgsz3330, zgsz3327, zgsz3328, zgsz3329);
+ zt_lo = CONVERT_OF(fbits, lbits)(zgsz3330, true);
+ KILL(lbits)(&zgsz3330);
+ KILL(sail_int)(&zgsz3329);
+ KILL(sail_int)(&zgsz3328);
+ KILL(lbits)(&zgsz3327);
+ }
+
+
+ }
+ uint64_t zb_hi;
+ {
+ uint64_t zgaz3207;
+ zgaz3207 = zcap.zB;
+ int64_t zgaz3208;
+ {
+ sail_int zgsz3331;
+ CREATE(sail_int)(&zgsz3331);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3331, zcap_mantissa_width);
+ sail_int zgsz3332;
+ CREATE(sail_int)(&zgsz3332);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3332, INT64_C(1));
+ sail_int zgsz3333;
+ CREATE(sail_int)(&zgsz3333);
+ sub_int(&zgsz3333, zgsz3331, zgsz3332);
+ zgaz3208 = CONVERT_OF(mach_int, sail_int)(zgsz3333);
+ KILL(sail_int)(&zgsz3333);
+ KILL(sail_int)(&zgsz3332);
+ KILL(sail_int)(&zgsz3331);
+ }
+ {
+ lbits zgsz3334;
+ CREATE(lbits)(&zgsz3334);
+ CONVERT_OF(lbits, fbits)(&zgsz3334, zgaz3207, UINT64_C(14) , true);
+ sail_int zgsz3335;
+ CREATE(sail_int)(&zgsz3335);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3335, zgaz3208);
+ sail_int zgsz3336;
+ CREATE(sail_int)(&zgsz3336);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3336, zinternal_E_take_bits);
+ lbits zgsz3337;
+ CREATE(lbits)(&zgsz3337);
+ vector_subrange_lbits(&zgsz3337, zgsz3334, zgsz3335, zgsz3336);
+ zb_hi = CONVERT_OF(fbits, lbits)(zgsz3337, true);
+ KILL(lbits)(&zgsz3337);
+ KILL(sail_int)(&zgsz3336);
+ KILL(sail_int)(&zgsz3335);
+ KILL(lbits)(&zgsz3334);
+ }
+
+
+ }
+ uint64_t zb_lo;
+ {
+ uint64_t zgaz3205;
+ zgaz3205 = zcap.zB;
+ int64_t zgaz3206;
+ {
+ sail_int zgsz3338;
+ CREATE(sail_int)(&zgsz3338);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3338, zinternal_E_take_bits);
+ sail_int zgsz3339;
+ CREATE(sail_int)(&zgsz3339);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3339, INT64_C(1));
+ sail_int zgsz3340;
+ CREATE(sail_int)(&zgsz3340);
+ sub_int(&zgsz3340, zgsz3338, zgsz3339);
+ zgaz3206 = CONVERT_OF(mach_int, sail_int)(zgsz3340);
+ KILL(sail_int)(&zgsz3340);
+ KILL(sail_int)(&zgsz3339);
+ KILL(sail_int)(&zgsz3338);
+ }
+ {
+ lbits zgsz3341;
+ CREATE(lbits)(&zgsz3341);
+ CONVERT_OF(lbits, fbits)(&zgsz3341, zgaz3205, UINT64_C(14) , true);
+ sail_int zgsz3342;
+ CREATE(sail_int)(&zgsz3342);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3342, zgaz3206);
+ sail_int zgsz3343;
+ CREATE(sail_int)(&zgsz3343);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3343, INT64_C(0));
+ lbits zgsz3344;
+ CREATE(lbits)(&zgsz3344);
+ vector_subrange_lbits(&zgsz3344, zgsz3341, zgsz3342, zgsz3343);
+ zb_lo = CONVERT_OF(fbits, lbits)(zgsz3344, true);
+ KILL(lbits)(&zgsz3344);
+ KILL(sail_int)(&zgsz3343);
+ KILL(sail_int)(&zgsz3342);
+ KILL(lbits)(&zgsz3341);
+ }
+
+
+ }
+ {
+ bool zgaz3185;
+ zgaz3185 = zcap.zinternal_E;
+ unit zgsz3345;
+ if (zgaz3185) {
+ {
+ uint64_t zgaz3187;
+ zgaz3187 = zcap.zE;
+ int64_t zgaz3188;
+ {
+ int64_t zgaz3186;
+ {
+ sail_int zgsz3346;
+ CREATE(sail_int)(&zgsz3346);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3346, INT64_C(2));
+ sail_int zgsz3347;
+ CREATE(sail_int)(&zgsz3347);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3347, zinternal_E_take_bits);
+ sail_int zgsz3348;
+ CREATE(sail_int)(&zgsz3348);
+ mult_int(&zgsz3348, zgsz3346, zgsz3347);
+ zgaz3186 = CONVERT_OF(mach_int, sail_int)(zgsz3348);
+ KILL(sail_int)(&zgsz3348);
+ KILL(sail_int)(&zgsz3347);
+ KILL(sail_int)(&zgsz3346);
+ }
+ {
+ sail_int zgsz3349;
+ CREATE(sail_int)(&zgsz3349);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3349, zgaz3186);
+ sail_int zgsz3350;
+ CREATE(sail_int)(&zgsz3350);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3350, INT64_C(1));
+ sail_int zgsz3351;
+ CREATE(sail_int)(&zgsz3351);
+ sub_int(&zgsz3351, zgsz3349, zgsz3350);
+ zgaz3188 = CONVERT_OF(mach_int, sail_int)(zgsz3351);
+ KILL(sail_int)(&zgsz3351);
+ KILL(sail_int)(&zgsz3350);
+ KILL(sail_int)(&zgsz3349);
+ }
+
+ }
+ {
+ lbits zgsz3352;
+ CREATE(lbits)(&zgsz3352);
+ CONVERT_OF(lbits, fbits)(&zgsz3352, zgaz3187, UINT64_C(6) , true);
+ sail_int zgsz3353;
+ CREATE(sail_int)(&zgsz3353);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3353, zgaz3188);
+ sail_int zgsz3354;
+ CREATE(sail_int)(&zgsz3354);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3354, zinternal_E_take_bits);
+ lbits zgsz3355;
+ CREATE(lbits)(&zgsz3355);
+ vector_subrange_lbits(&zgsz3355, zgsz3352, zgsz3353, zgsz3354);
+ zt_lo = CONVERT_OF(fbits, lbits)(zgsz3355, true);
+ KILL(lbits)(&zgsz3355);
+ KILL(sail_int)(&zgsz3354);
+ KILL(sail_int)(&zgsz3353);
+ KILL(lbits)(&zgsz3352);
+ }
+ unit zgsz3356;
+ zgsz3356 = UNIT;
+
+
+ }
+ uint64_t zgaz3189;
+ zgaz3189 = zcap.zE;
+ int64_t zgaz3190;
+ {
+ sail_int zgsz3357;
+ CREATE(sail_int)(&zgsz3357);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3357, zinternal_E_take_bits);
+ sail_int zgsz3358;
+ CREATE(sail_int)(&zgsz3358);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3358, INT64_C(1));
+ sail_int zgsz3359;
+ CREATE(sail_int)(&zgsz3359);
+ sub_int(&zgsz3359, zgsz3357, zgsz3358);
+ zgaz3190 = CONVERT_OF(mach_int, sail_int)(zgsz3359);
+ KILL(sail_int)(&zgsz3359);
+ KILL(sail_int)(&zgsz3358);
+ KILL(sail_int)(&zgsz3357);
+ }
+ {
+ lbits zgsz3360;
+ CREATE(lbits)(&zgsz3360);
+ CONVERT_OF(lbits, fbits)(&zgsz3360, zgaz3189, UINT64_C(6) , true);
+ sail_int zgsz3361;
+ CREATE(sail_int)(&zgsz3361);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3361, zgaz3190);
+ sail_int zgsz3362;
+ CREATE(sail_int)(&zgsz3362);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3362, INT64_C(0));
+ lbits zgsz3363;
+ CREATE(lbits)(&zgsz3363);
+ vector_subrange_lbits(&zgsz3363, zgsz3360, zgsz3361, zgsz3362);
+ zb_lo = CONVERT_OF(fbits, lbits)(zgsz3363, true);
+ KILL(lbits)(&zgsz3363);
+ KILL(sail_int)(&zgsz3362);
+ KILL(sail_int)(&zgsz3361);
+ KILL(lbits)(&zgsz3360);
+ }
+ zgsz3345 = UNIT;
+
+
+ } else { zgsz3345 = UNIT; }
+
+ }
+ struct zEncCapability zgaz3204;
+ {
+ uint64_t zgaz3193;
+ {
+ uint64_t zgaz3191;
+ zgaz3191 = zcap.zuperms;
+ uint64_t zgaz3192;
+ zgaz3192 = sailgen_getCapHardPerms(zcap);
+ {
+ lbits zgsz3364;
+ CREATE(lbits)(&zgsz3364);
+ CONVERT_OF(lbits, fbits)(&zgsz3364, zgaz3191, UINT64_C(4) , true);
+ lbits zgsz3365;
+ CREATE(lbits)(&zgsz3365);
+ CONVERT_OF(lbits, fbits)(&zgsz3365, zgaz3192, UINT64_C(12) , true);
+ lbits zgsz3366;
+ CREATE(lbits)(&zgsz3366);
+ append(&zgsz3366, zgsz3364, zgsz3365);
+ zgaz3193 = CONVERT_OF(fbits, lbits)(zgsz3366, true);
+ KILL(lbits)(&zgsz3366);
+ KILL(lbits)(&zgsz3365);
+ KILL(lbits)(&zgsz3364);
+ }
+
+
+ }
+ uint64_t zgaz3194;
+ zgaz3194 = zcap.zreserved;
+ uint64_t zgaz3196;
+ {
+ bool zgaz3195;
+ zgaz3195 = zcap.zflag_cap_mode;
+ zgaz3196 = sailgen_bool_to_bits(zgaz3195);
+
+ }
+ uint64_t zgaz3197;
+ zgaz3197 = zcap.zotype;
+ fbits zgaz3200;
+ {
+ uint64_t zgaz3199;
+ {
+ bool zgaz3198;
+ zgaz3198 = zcap.zinternal_E;
+ zgaz3199 = sailgen_bool_to_bits(zgaz3198);
+
+ }
+ {
+ sail_int zgsz3368;
+ CREATE(sail_int)(&zgsz3368);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3368, INT64_C(0));
+ lbits zgsz3367;
+ CREATE(lbits)(&zgsz3367);
+ CONVERT_OF(lbits, fbits)(&zgsz3367, zgaz3199, UINT64_C(1) , true);
+ zgaz3200 = bitvector_access(zgsz3367, zgsz3368);
+ KILL(sail_int)(&zgsz3368);
+ KILL(lbits)(&zgsz3367);
+ }
+
+ }
+ uint64_t zgaz3201;
+ {
+ lbits zgsz3369;
+ CREATE(lbits)(&zgsz3369);
+ CONVERT_OF(lbits, fbits)(&zgsz3369, zt_hi, UINT64_C(9) , true);
+ lbits zgsz3370;
+ CREATE(lbits)(&zgsz3370);
+ CONVERT_OF(lbits, fbits)(&zgsz3370, zt_lo, UINT64_C(3) , true);
+ lbits zgsz3371;
+ CREATE(lbits)(&zgsz3371);
+ append(&zgsz3371, zgsz3369, zgsz3370);
+ zgaz3201 = CONVERT_OF(fbits, lbits)(zgsz3371, true);
+ KILL(lbits)(&zgsz3371);
+ KILL(lbits)(&zgsz3370);
+ KILL(lbits)(&zgsz3369);
+ }
+ uint64_t zgaz3202;
+ {
+ lbits zgsz3372;
+ CREATE(lbits)(&zgsz3372);
+ CONVERT_OF(lbits, fbits)(&zgsz3372, zb_hi, UINT64_C(11) , true);
+ lbits zgsz3373;
+ CREATE(lbits)(&zgsz3373);
+ CONVERT_OF(lbits, fbits)(&zgsz3373, zb_lo, UINT64_C(3) , true);
+ lbits zgsz3374;
+ CREATE(lbits)(&zgsz3374);
+ append(&zgsz3374, zgsz3372, zgsz3373);
+ zgaz3202 = CONVERT_OF(fbits, lbits)(zgsz3374, true);
+ KILL(lbits)(&zgsz3374);
+ KILL(lbits)(&zgsz3373);
+ KILL(lbits)(&zgsz3372);
+ }
+ uint64_t zgaz3203;
+ zgaz3203 = zcap.zaddress;
+ struct zEncCapability zgsz3375;
+ zgsz3375.zB = zgaz3202;
+ zgsz3375.zT = zgaz3201;
+ zgsz3375.zaddress = zgaz3203;
+ zgsz3375.zflags = zgaz3196;
+ zgsz3375.zinternal_E = zgaz3200;
+ zgsz3375.zotype = zgaz3197;
+ zgsz3375.zperms = zgaz3193;
+ zgsz3375.zreserved = zgaz3194;
+ zgaz3204 = zgsz3375;
+
+
+
+
+
+
+
+
+
+ }
+ zcbz339 = zgaz3204;
+ goto cleanup_157;
+ /* unreachable after return */
+
+
+
+
+
+ goto end_cleanup_158;
+cleanup_157: ;
+
+
+
+
+
+ goto end_function_156;
+end_cleanup_158: ;
+end_function_156: ;
+ return zcbz339;
+end_block_exception_159: ;
+ struct zEncCapability zcbz364 = { .zreserved = UINT64_C(0xdeadc0de), .zperms = UINT64_C(0xdeadc0de), .zotype = UINT64_C(0xdeadc0de), .zinternal_E = UINT64_C(0), .zflags = UINT64_C(0xdeadc0de), .zaddress = UINT64_C(0xdeadc0de), .zT = UINT64_C(0xdeadc0de), .zB = UINT64_C(0xdeadc0de) };
+ return zcbz364;
+}
+
+static void sailgen_capToBits(lbits *rop, struct zCapability);
+
+static void sailgen_capToBits(lbits *zcbz340, struct zCapability zcap)
+{
+ __label__ end_function_161, end_block_exception_162, end_function_238;
+
+ struct zEncCapability zgaz3213;
+ zgaz3213 = sailgen_capToEncCap(zcap);
+ sailgen_encCapToBits((*(&zcbz340)), zgaz3213);
+
+end_function_161: ;
+ goto end_function_238;
+end_block_exception_162: ;
+ goto end_function_238;
+end_function_238: ;
+}
+
+static lbits znull_cap_bits;
+static void create_letbind_27(void) { CREATE(lbits)(&znull_cap_bits);
+
+
+ lbits zgsz3376;
+ CREATE(lbits)(&zgsz3376);
+ sailgen_capToBits(&zgsz3376, znull_cap);
+ COPY(lbits)(&znull_cap_bits, zgsz3376);
+ KILL(lbits)(&zgsz3376);
+let_end_163: ;
+}
+static void kill_letbind_27(void) { KILL(lbits)(&znull_cap_bits);
+}
+
+static void sailgen_capToMemBits(lbits *rop, struct zCapability);
+
+static void sailgen_capToMemBits(lbits *zcbz341, struct zCapability zcap)
+{
+ __label__ end_function_165, end_block_exception_166, end_function_237;
+
+ lbits zgaz3214;
+ CREATE(lbits)(&zgaz3214);
+ sailgen_capToBits(&zgaz3214, zcap);
+ xor_bits((*(&zcbz341)), zgaz3214, znull_cap_bits);
+ KILL(lbits)(&zgaz3214);
+end_function_165: ;
+ goto end_function_237;
+end_block_exception_166: ;
+ goto end_function_237;
+end_function_237: ;
+}
+
+static struct zCapability sailgen_memBitsToCapability(bool, lbits);
+
+static struct zCapability sailgen_memBitsToCapability(bool ztag, lbits zb)
+{
+ __label__ end_function_168, end_block_exception_169;
+
+ struct zCapability zcbz342;
+ lbits zgaz3215;
+ CREATE(lbits)(&zgaz3215);
+ xor_bits(&zgaz3215, zb, znull_cap_bits);
+ zcbz342 = sailgen_capBitsToCapability(ztag, zgaz3215);
+ KILL(lbits)(&zgaz3215);
+end_function_168: ;
+ return zcbz342;
+end_block_exception_169: ;
+ struct zCapability zcbz365 = { .zuperms = UINT64_C(0xdeadc0de), .ztag = false, .zreserved = UINT64_C(0xdeadc0de), .zpermit_unseal = false, .zpermit_store_local_cap = false, .zpermit_store_cap = false, .zpermit_store = false, .zpermit_set_CID = false, .zpermit_seal = false, .zpermit_load_cap = false, .zpermit_load = false, .zpermit_execute = false, .zpermit_cinvoke = false, .zotype = UINT64_C(0xdeadc0de), .zinternal_E = false, .zglobal = false, .zflag_cap_mode = false, .zaddress = UINT64_C(0xdeadc0de), .zaccess_system_regs = false, .zT = UINT64_C(0xdeadc0de), .zE = UINT64_C(0xdeadc0de), .zB = UINT64_C(0xdeadc0de) };
+ return zcbz365;
+}
+
+// struct tuple_(%bv64, %bv)
+struct ztuple_z8z5bv64zCz0z5bvz9 {
+ uint64_t ztup0;
+ lbits ztup1;
+};
+
+static void COPY(ztuple_z8z5bv64zCz0z5bvz9)(struct ztuple_z8z5bv64zCz0z5bvz9 *rop, const struct ztuple_z8z5bv64zCz0z5bvz9 op) {
+ rop->ztup0 = op.ztup0;
+ COPY(lbits)(&rop->ztup1, op.ztup1);
+}
+
+static void CREATE(ztuple_z8z5bv64zCz0z5bvz9)(struct ztuple_z8z5bv64zCz0z5bvz9 *op) {CREATE(lbits)(&op->ztup1);}
+
+static void RECREATE(ztuple_z8z5bv64zCz0z5bvz9)(struct ztuple_z8z5bv64zCz0z5bvz9 *op) {RECREATE(lbits)(&op->ztup1);}
+
+static void KILL(ztuple_z8z5bv64zCz0z5bvz9)(struct ztuple_z8z5bv64zCz0z5bvz9 *op) {KILL(lbits)(&op->ztup1);}
+
+static bool EQUAL(ztuple_z8z5bv64zCz0z5bvz9)(struct ztuple_z8z5bv64zCz0z5bvz9 op1, struct ztuple_z8z5bv64zCz0z5bvz9 op2) {
+ return EQUAL(fbits)(op1.ztup0, op2.ztup0) && EQUAL(lbits)(op1.ztup1, op2.ztup1);
+}
+
+static void sailgen_getCapBoundsBits(struct ztuple_z8z5bv64zCz0z5bvz9 *rop, struct zCapability);
+
+static void sailgen_getCapBoundsBits(struct ztuple_z8z5bv64zCz0z5bvz9 *zcbz343, struct zCapability zc)
+{
+ __label__ end_function_171, end_block_exception_172, end_function_236;
+
+ int64_t zE;
+ {
+ int64_t zgaz3249;
+ {
+ uint64_t zgaz3248;
+ zgaz3248 = zc.zE;
+ zgaz3249 = ((mach_int) zgaz3248);
+
+ }
+ {
+ sail_int zgsz3377;
+ CREATE(sail_int)(&zgsz3377);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3377, zcap_max_E);
+ sail_int zgsz3378;
+ CREATE(sail_int)(&zgsz3378);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3378, zgaz3249);
+ sail_int zgsz3379;
+ CREATE(sail_int)(&zgsz3379);
+ min_int(&zgsz3379, zgsz3377, zgsz3378);
+ zE = CONVERT_OF(mach_int, sail_int)(zgsz3379);
+ KILL(sail_int)(&zgsz3379);
+ KILL(sail_int)(&zgsz3378);
+ KILL(sail_int)(&zgsz3377);
+ }
+
+ }
+ uint64_t za;
+ za = zc.zaddress;
+ uint64_t za3;
+ {
+ uint64_t zgaz3247;
+ {
+ int64_t zgaz3246;
+ {
+ int64_t zgaz3245;
+ {
+ sail_int zgsz3380;
+ CREATE(sail_int)(&zgsz3380);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3380, zE);
+ sail_int zgsz3381;
+ CREATE(sail_int)(&zgsz3381);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3381, zcap_mantissa_width);
+ sail_int zgsz3382;
+ CREATE(sail_int)(&zgsz3382);
+ add_int(&zgsz3382, zgsz3380, zgsz3381);
+ zgaz3245 = CONVERT_OF(mach_int, sail_int)(zgsz3382);
+ KILL(sail_int)(&zgsz3382);
+ KILL(sail_int)(&zgsz3381);
+ KILL(sail_int)(&zgsz3380);
+ }
+ {
+ sail_int zgsz3383;
+ CREATE(sail_int)(&zgsz3383);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3383, zgaz3245);
+ sail_int zgsz3384;
+ CREATE(sail_int)(&zgsz3384);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3384, INT64_C(3));
+ sail_int zgsz3385;
+ CREATE(sail_int)(&zgsz3385);
+ sub_int(&zgsz3385, zgsz3383, zgsz3384);
+ zgaz3246 = CONVERT_OF(mach_int, sail_int)(zgsz3385);
+ KILL(sail_int)(&zgsz3385);
+ KILL(sail_int)(&zgsz3384);
+ KILL(sail_int)(&zgsz3383);
+ }
+
+ }
+ {
+ lbits zgsz3386;
+ CREATE(lbits)(&zgsz3386);
+ CONVERT_OF(lbits, fbits)(&zgsz3386, za, UINT64_C(64) , true);
+ sail_int zgsz3387;
+ CREATE(sail_int)(&zgsz3387);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3387, zgaz3246);
+ lbits zgsz3388;
+ CREATE(lbits)(&zgsz3388);
+ shiftr(&zgsz3388, zgsz3386, zgsz3387);
+ zgaz3247 = CONVERT_OF(fbits, lbits)(zgsz3388, true);
+ KILL(lbits)(&zgsz3388);
+ KILL(sail_int)(&zgsz3387);
+ KILL(lbits)(&zgsz3386);
+ }
+
+ }
+ {
+ lbits zgsz3389;
+ CREATE(lbits)(&zgsz3389);
+ CONVERT_OF(lbits, fbits)(&zgsz3389, zgaz3247, UINT64_C(64) , true);
+ sail_int zgsz3390;
+ CREATE(sail_int)(&zgsz3390);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3390, INT64_C(3));
+ lbits zgsz3391;
+ CREATE(lbits)(&zgsz3391);
+ sail_truncate(&zgsz3391, zgsz3389, zgsz3390);
+ za3 = CONVERT_OF(fbits, lbits)(zgsz3391, true);
+ KILL(lbits)(&zgsz3391);
+ KILL(sail_int)(&zgsz3390);
+ KILL(lbits)(&zgsz3389);
+ }
+
+ }
+ uint64_t zB3;
+ {
+ uint64_t zgaz3244;
+ zgaz3244 = zc.zB;
+ {
+ lbits zgsz3392;
+ CREATE(lbits)(&zgsz3392);
+ CONVERT_OF(lbits, fbits)(&zgsz3392, zgaz3244, UINT64_C(14) , true);
+ sail_int zgsz3393;
+ CREATE(sail_int)(&zgsz3393);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3393, INT64_C(3));
+ lbits zgsz3394;
+ CREATE(lbits)(&zgsz3394);
+ sail_truncateLSB(&zgsz3394, zgsz3392, zgsz3393);
+ zB3 = CONVERT_OF(fbits, lbits)(zgsz3394, true);
+ KILL(lbits)(&zgsz3394);
+ KILL(sail_int)(&zgsz3393);
+ KILL(lbits)(&zgsz3392);
+ }
+
+ }
+ uint64_t zT3;
+ {
+ uint64_t zgaz3243;
+ zgaz3243 = zc.zT;
+ {
+ lbits zgsz3395;
+ CREATE(lbits)(&zgsz3395);
+ CONVERT_OF(lbits, fbits)(&zgsz3395, zgaz3243, UINT64_C(14) , true);
+ sail_int zgsz3396;
+ CREATE(sail_int)(&zgsz3396);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3396, INT64_C(3));
+ lbits zgsz3397;
+ CREATE(lbits)(&zgsz3397);
+ sail_truncateLSB(&zgsz3397, zgsz3395, zgsz3396);
+ zT3 = CONVERT_OF(fbits, lbits)(zgsz3397, true);
+ KILL(lbits)(&zgsz3397);
+ KILL(sail_int)(&zgsz3396);
+ KILL(lbits)(&zgsz3395);
+ }
+
+ }
+ uint64_t zR3;
+ {
+ lbits zgsz3398;
+ CREATE(lbits)(&zgsz3398);
+ CONVERT_OF(lbits, fbits)(&zgsz3398, zB3, UINT64_C(3) , true);
+ lbits zgsz3399;
+ CREATE(lbits)(&zgsz3399);
+ CONVERT_OF(lbits, fbits)(&zgsz3399, UINT64_C(0b001), UINT64_C(3) , true);
+ lbits zgsz3400;
+ CREATE(lbits)(&zgsz3400);
+ sub_bits(&zgsz3400, zgsz3398, zgsz3399);
+ zR3 = CONVERT_OF(fbits, lbits)(zgsz3400, true);
+ KILL(lbits)(&zgsz3400);
+ KILL(lbits)(&zgsz3399);
+ KILL(lbits)(&zgsz3398);
+ }
+ int64_t zaHi;
+ {
+ bool zgaz3242;
+ zgaz3242 = sailgen_z8operatorz0zzzz7nzzJzzK3z3zI_uz9(za3, zR3);
+ if (zgaz3242) { zaHi = INT64_C(1); } else { zaHi = INT64_C(0); }
+
+ }
+ int64_t zbHi;
+ {
+ bool zgaz3241;
+ zgaz3241 = sailgen_z8operatorz0zzzz7nzzJzzK3z3zI_uz9(zB3, zR3);
+ if (zgaz3241) { zbHi = INT64_C(1); } else { zbHi = INT64_C(0); }
+
+ }
+ int64_t ztHi;
+ {
+ bool zgaz3240;
+ zgaz3240 = sailgen_z8operatorz0zzzz7nzzJzzK3z3zI_uz9(zT3, zR3);
+ if (zgaz3240) { ztHi = INT64_C(1); } else { ztHi = INT64_C(0); }
+
+ }
+ int64_t zcorrection_base;
+ {
+ sail_int zgsz3401;
+ CREATE(sail_int)(&zgsz3401);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3401, zbHi);
+ sail_int zgsz3402;
+ CREATE(sail_int)(&zgsz3402);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3402, zaHi);
+ sail_int zgsz3403;
+ CREATE(sail_int)(&zgsz3403);
+ sub_int(&zgsz3403, zgsz3401, zgsz3402);
+ zcorrection_base = CONVERT_OF(mach_int, sail_int)(zgsz3403);
+ KILL(sail_int)(&zgsz3403);
+ KILL(sail_int)(&zgsz3402);
+ KILL(sail_int)(&zgsz3401);
+ }
+ int64_t zcorrection_top;
+ {
+ sail_int zgsz3404;
+ CREATE(sail_int)(&zgsz3404);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3404, ztHi);
+ sail_int zgsz3405;
+ CREATE(sail_int)(&zgsz3405);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3405, zaHi);
+ sail_int zgsz3406;
+ CREATE(sail_int)(&zgsz3406);
+ sub_int(&zgsz3406, zgsz3404, zgsz3405);
+ zcorrection_top = CONVERT_OF(mach_int, sail_int)(zgsz3406);
+ KILL(sail_int)(&zgsz3406);
+ KILL(sail_int)(&zgsz3405);
+ KILL(sail_int)(&zgsz3404);
+ }
+ uint64_t za_top;
+ {
+ int64_t zgaz3239;
+ {
+ sail_int zgsz3407;
+ CREATE(sail_int)(&zgsz3407);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3407, zE);
+ sail_int zgsz3408;
+ CREATE(sail_int)(&zgsz3408);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3408, zcap_mantissa_width);
+ sail_int zgsz3409;
+ CREATE(sail_int)(&zgsz3409);
+ add_int(&zgsz3409, zgsz3407, zgsz3408);
+ zgaz3239 = CONVERT_OF(mach_int, sail_int)(zgsz3409);
+ KILL(sail_int)(&zgsz3409);
+ KILL(sail_int)(&zgsz3408);
+ KILL(sail_int)(&zgsz3407);
+ }
+ {
+ lbits zgsz3410;
+ CREATE(lbits)(&zgsz3410);
+ CONVERT_OF(lbits, fbits)(&zgsz3410, za, UINT64_C(64) , true);
+ sail_int zgsz3411;
+ CREATE(sail_int)(&zgsz3411);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3411, zgaz3239);
+ lbits zgsz3412;
+ CREATE(lbits)(&zgsz3412);
+ shiftr(&zgsz3412, zgsz3410, zgsz3411);
+ za_top = CONVERT_OF(fbits, lbits)(zgsz3412, true);
+ KILL(lbits)(&zgsz3412);
+ KILL(sail_int)(&zgsz3411);
+ KILL(lbits)(&zgsz3410);
+ }
+
+ }
+ lbits zbase;
+ CREATE(lbits)(&zbase);
+ {
+ lbits zgaz3238;
+ CREATE(lbits)(&zgaz3238);
+ {
+ uint64_t zgaz3236;
+ {
+ lbits zgsz3413;
+ CREATE(lbits)(&zgsz3413);
+ CONVERT_OF(lbits, fbits)(&zgsz3413, za_top, UINT64_C(64) , true);
+ sail_int zgsz3414;
+ CREATE(sail_int)(&zgsz3414);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3414, zcorrection_base);
+ lbits zgsz3415;
+ CREATE(lbits)(&zgsz3415);
+ add_bits_int(&zgsz3415, zgsz3413, zgsz3414);
+ zgaz3236 = CONVERT_OF(fbits, lbits)(zgsz3415, true);
+ KILL(lbits)(&zgsz3415);
+ KILL(sail_int)(&zgsz3414);
+ KILL(lbits)(&zgsz3413);
+ }
+ lbits zgaz3237;
+ CREATE(lbits)(&zgaz3237);
+ {
+ uint64_t zgaz3234;
+ zgaz3234 = zc.zB;
+ sbits zgaz3235;
+ {
+ sail_int zgsz3416;
+ CREATE(sail_int)(&zgsz3416);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3416, zE);
+ lbits zgsz3417;
+ CREATE(lbits)(&zgsz3417);
+ sailgen_zzz3zzz3zzeros_implicit(&zgsz3417, zgsz3416);
+ zgaz3235 = CONVERT_OF(sbits, lbits)(zgsz3417, true);
+ KILL(lbits)(&zgsz3417);
+ KILL(sail_int)(&zgsz3416);
+ }
+ {
+ lbits zgsz3419;
+ CREATE(lbits)(&zgsz3419);
+ CONVERT_OF(lbits, sbits)(&zgsz3419, zgaz3235, true);
+ lbits zgsz3418;
+ CREATE(lbits)(&zgsz3418);
+ CONVERT_OF(lbits, fbits)(&zgsz3418, zgaz3234, UINT64_C(14) , true);
+ append(&zgaz3237, zgsz3418, zgsz3419);
+ KILL(lbits)(&zgsz3419);
+ KILL(lbits)(&zgsz3418);
+ }
+
+
+ }
+ {
+ lbits zgsz3420;
+ CREATE(lbits)(&zgsz3420);
+ CONVERT_OF(lbits, fbits)(&zgsz3420, zgaz3236, UINT64_C(64) , true);
+ append(&zgaz3238, zgsz3420, zgaz3237);
+ KILL(lbits)(&zgsz3420);
+ }
+ KILL(lbits)(&zgaz3237);
+
+ }
+ {
+ sail_int zgsz3421;
+ CREATE(sail_int)(&zgsz3421);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3421, zcap_len_width);
+ sail_truncate(&zbase, zgaz3238, zgsz3421);
+ KILL(sail_int)(&zgsz3421);
+ }
+ KILL(lbits)(&zgaz3238);
+ }
+ lbits ztop;
+ CREATE(lbits)(&ztop);
+ {
+ lbits zgaz3233;
+ CREATE(lbits)(&zgaz3233);
+ {
+ uint64_t zgaz3231;
+ {
+ lbits zgsz3422;
+ CREATE(lbits)(&zgsz3422);
+ CONVERT_OF(lbits, fbits)(&zgsz3422, za_top, UINT64_C(64) , true);
+ sail_int zgsz3423;
+ CREATE(sail_int)(&zgsz3423);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3423, zcorrection_top);
+ lbits zgsz3424;
+ CREATE(lbits)(&zgsz3424);
+ add_bits_int(&zgsz3424, zgsz3422, zgsz3423);
+ zgaz3231 = CONVERT_OF(fbits, lbits)(zgsz3424, true);
+ KILL(lbits)(&zgsz3424);
+ KILL(sail_int)(&zgsz3423);
+ KILL(lbits)(&zgsz3422);
+ }
+ lbits zgaz3232;
+ CREATE(lbits)(&zgaz3232);
+ {
+ uint64_t zgaz3229;
+ zgaz3229 = zc.zT;
+ sbits zgaz3230;
+ {
+ sail_int zgsz3425;
+ CREATE(sail_int)(&zgsz3425);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3425, zE);
+ lbits zgsz3426;
+ CREATE(lbits)(&zgsz3426);
+ sailgen_zzz3zzz3zzeros_implicit(&zgsz3426, zgsz3425);
+ zgaz3230 = CONVERT_OF(sbits, lbits)(zgsz3426, true);
+ KILL(lbits)(&zgsz3426);
+ KILL(sail_int)(&zgsz3425);
+ }
+ {
+ lbits zgsz3428;
+ CREATE(lbits)(&zgsz3428);
+ CONVERT_OF(lbits, sbits)(&zgsz3428, zgaz3230, true);
+ lbits zgsz3427;
+ CREATE(lbits)(&zgsz3427);
+ CONVERT_OF(lbits, fbits)(&zgsz3427, zgaz3229, UINT64_C(14) , true);
+ append(&zgaz3232, zgsz3427, zgsz3428);
+ KILL(lbits)(&zgsz3428);
+ KILL(lbits)(&zgsz3427);
+ }
+
+
+ }
+ {
+ lbits zgsz3429;
+ CREATE(lbits)(&zgsz3429);
+ CONVERT_OF(lbits, fbits)(&zgsz3429, zgaz3231, UINT64_C(64) , true);
+ append(&zgaz3233, zgsz3429, zgaz3232);
+ KILL(lbits)(&zgsz3429);
+ }
+ KILL(lbits)(&zgaz3232);
+
+ }
+ {
+ sail_int zgsz3430;
+ CREATE(sail_int)(&zgsz3430);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3430, zcap_len_width);
+ sail_truncate(&ztop, zgaz3233, zgsz3430);
+ KILL(sail_int)(&zgsz3430);
+ }
+ KILL(lbits)(&zgaz3233);
+ }
+ uint64_t zbase2;
+ {
+ uint64_t zgaz3228;
+ {
+ fbits zgaz3227;
+ {
+ int64_t zgaz3226;
+ {
+ sail_int zgsz3431;
+ CREATE(sail_int)(&zgsz3431);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3431, zcap_addr_width);
+ sail_int zgsz3432;
+ CREATE(sail_int)(&zgsz3432);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3432, INT64_C(1));
+ sail_int zgsz3433;
+ CREATE(sail_int)(&zgsz3433);
+ sub_int(&zgsz3433, zgsz3431, zgsz3432);
+ zgaz3226 = CONVERT_OF(mach_int, sail_int)(zgsz3433);
+ KILL(sail_int)(&zgsz3433);
+ KILL(sail_int)(&zgsz3432);
+ KILL(sail_int)(&zgsz3431);
+ }
+ {
+ sail_int zgsz3434;
+ CREATE(sail_int)(&zgsz3434);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3434, zgaz3226);
+ zgaz3227 = bitvector_access(zbase, zgsz3434);
+ KILL(sail_int)(&zgsz3434);
+ }
+
+ }
+ uint64_t zgsz3435;
+ zgsz3435 = UINT64_C(0b0);
+ zgsz3435 = update_fbits(zgsz3435, INT64_C(0), zgaz3227);
+ zgaz3228 = zgsz3435;
+
+ }
+ {
+ lbits zgsz3436;
+ CREATE(lbits)(&zgsz3436);
+ CONVERT_OF(lbits, fbits)(&zgsz3436, UINT64_C(0b0), UINT64_C(1) , true);
+ lbits zgsz3437;
+ CREATE(lbits)(&zgsz3437);
+ CONVERT_OF(lbits, fbits)(&zgsz3437, zgaz3228, UINT64_C(1) , true);
+ lbits zgsz3438;
+ CREATE(lbits)(&zgsz3438);
+ append(&zgsz3438, zgsz3436, zgsz3437);
+ zbase2 = CONVERT_OF(fbits, lbits)(zgsz3438, true);
+ KILL(lbits)(&zgsz3438);
+ KILL(lbits)(&zgsz3437);
+ KILL(lbits)(&zgsz3436);
+ }
+
+ }
+ uint64_t ztop2;
+ {
+ int64_t zgaz3225;
+ {
+ sail_int zgsz3439;
+ CREATE(sail_int)(&zgsz3439);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3439, zcap_addr_width);
+ sail_int zgsz3440;
+ CREATE(sail_int)(&zgsz3440);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3440, INT64_C(1));
+ sail_int zgsz3441;
+ CREATE(sail_int)(&zgsz3441);
+ sub_int(&zgsz3441, zgsz3439, zgsz3440);
+ zgaz3225 = CONVERT_OF(mach_int, sail_int)(zgsz3441);
+ KILL(sail_int)(&zgsz3441);
+ KILL(sail_int)(&zgsz3440);
+ KILL(sail_int)(&zgsz3439);
+ }
+ {
+ sail_int zgsz3442;
+ CREATE(sail_int)(&zgsz3442);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3442, zcap_addr_width);
+ sail_int zgsz3443;
+ CREATE(sail_int)(&zgsz3443);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3443, zgaz3225);
+ lbits zgsz3444;
+ CREATE(lbits)(&zgsz3444);
+ vector_subrange_lbits(&zgsz3444, ztop, zgsz3442, zgsz3443);
+ ztop2 = CONVERT_OF(fbits, lbits)(zgsz3444, true);
+ KILL(lbits)(&zgsz3444);
+ KILL(sail_int)(&zgsz3443);
+ KILL(sail_int)(&zgsz3442);
+ }
+
+ }
+ {
+ bool zgaz3220;
+ {
+ bool zgaz3219;
+ {
+ int64_t zgaz3216;
+ {
+ sail_int zgsz3445;
+ CREATE(sail_int)(&zgsz3445);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3445, zcap_max_E);
+ sail_int zgsz3446;
+ CREATE(sail_int)(&zgsz3446);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3446, INT64_C(1));
+ sail_int zgsz3447;
+ CREATE(sail_int)(&zgsz3447);
+ sub_int(&zgsz3447, zgsz3445, zgsz3446);
+ zgaz3216 = CONVERT_OF(mach_int, sail_int)(zgsz3447);
+ KILL(sail_int)(&zgsz3447);
+ KILL(sail_int)(&zgsz3446);
+ KILL(sail_int)(&zgsz3445);
+ }
+ {
+ sail_int zgsz3449;
+ CREATE(sail_int)(&zgsz3449);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3449, zgaz3216);
+ sail_int zgsz3448;
+ CREATE(sail_int)(&zgsz3448);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3448, zE);
+ zgaz3219 = lt(zgsz3448, zgsz3449);
+ KILL(sail_int)(&zgsz3449);
+ KILL(sail_int)(&zgsz3448);
+ }
+
+ }
+ bool zgsz3453;
+ if (zgaz3219) {
+ int64_t zgaz3218;
+ {
+ uint64_t zgaz3217;
+ {
+ lbits zgsz3450;
+ CREATE(lbits)(&zgsz3450);
+ CONVERT_OF(lbits, fbits)(&zgsz3450, ztop2, UINT64_C(2) , true);
+ lbits zgsz3451;
+ CREATE(lbits)(&zgsz3451);
+ CONVERT_OF(lbits, fbits)(&zgsz3451, zbase2, UINT64_C(2) , true);
+ lbits zgsz3452;
+ CREATE(lbits)(&zgsz3452);
+ sub_bits(&zgsz3452, zgsz3450, zgsz3451);
+ zgaz3217 = CONVERT_OF(fbits, lbits)(zgsz3452, true);
+ KILL(lbits)(&zgsz3452);
+ KILL(lbits)(&zgsz3451);
+ KILL(lbits)(&zgsz3450);
+ }
+ zgaz3218 = ((mach_int) zgaz3217);
+
+ }
+ {
+ sail_int zgsz3455;
+ CREATE(sail_int)(&zgsz3455);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3455, INT64_C(1));
+ sail_int zgsz3454;
+ CREATE(sail_int)(&zgsz3454);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3454, zgaz3218);
+ zgsz3453 = gt(zgsz3454, zgsz3455);
+ KILL(sail_int)(&zgsz3455);
+ KILL(sail_int)(&zgsz3454);
+ }
+
+ } else { zgsz3453 = false; }
+ zgaz3220 = zgsz3453;
+
+ }
+ unit zgsz3456;
+ if (zgaz3220) {
+ fbits zgaz3222;
+ {
+ fbits zgaz3221;
+ {
+ sail_int zgsz3457;
+ CREATE(sail_int)(&zgsz3457);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3457, zcap_addr_width);
+ zgaz3221 = bitvector_access(ztop, zgsz3457);
+ KILL(sail_int)(&zgsz3457);
+ }
+ zgaz3222 = sailgen_not_bit(zgaz3221);
+
+ }
+ {
+ sail_int zgsz3458;
+ CREATE(sail_int)(&zgsz3458);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3458, zcap_addr_width);
+ update_lbits(&ztop, ztop, zgsz3458, zgaz3222);
+ KILL(sail_int)(&zgsz3458);
+ }
+ zgsz3456 = UNIT;
+
+ } else { zgsz3456 = UNIT; }
+
+ }
+ uint64_t zgaz3224;
+ {
+ int64_t zgaz3223;
+ {
+ sail_int zgsz3459;
+ CREATE(sail_int)(&zgsz3459);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3459, zcap_addr_width);
+ sail_int zgsz3460;
+ CREATE(sail_int)(&zgsz3460);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3460, INT64_C(1));
+ sail_int zgsz3461;
+ CREATE(sail_int)(&zgsz3461);
+ sub_int(&zgsz3461, zgsz3459, zgsz3460);
+ zgaz3223 = CONVERT_OF(mach_int, sail_int)(zgsz3461);
+ KILL(sail_int)(&zgsz3461);
+ KILL(sail_int)(&zgsz3460);
+ KILL(sail_int)(&zgsz3459);
+ }
+ {
+ sail_int zgsz3462;
+ CREATE(sail_int)(&zgsz3462);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3462, zgaz3223);
+ sail_int zgsz3463;
+ CREATE(sail_int)(&zgsz3463);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3463, INT64_C(0));
+ lbits zgsz3464;
+ CREATE(lbits)(&zgsz3464);
+ vector_subrange_lbits(&zgsz3464, zbase, zgsz3462, zgsz3463);
+ zgaz3224 = CONVERT_OF(fbits, lbits)(zgsz3464, true);
+ KILL(lbits)(&zgsz3464);
+ KILL(sail_int)(&zgsz3463);
+ KILL(sail_int)(&zgsz3462);
+ }
+
+ }
+ struct ztuple_z8z5bv64zCz0z5bvz9 zgsz3465;
+ CREATE(ztuple_z8z5bv64zCz0z5bvz9)(&zgsz3465);
+ zgsz3465.ztup0 = zgaz3224;
+ COPY(lbits)(&((&zgsz3465)->ztup1), ztop);
+ COPY(ztuple_z8z5bv64zCz0z5bvz9)((*(&zcbz343)), zgsz3465);
+ KILL(ztuple_z8z5bv64zCz0z5bvz9)(&zgsz3465);
+
+
+
+ KILL(lbits)(&ztop);
+ KILL(lbits)(&zbase);
+
+
+
+
+
+
+
+
+
+
+
+
+end_function_171: ;
+ goto end_function_236;
+end_block_exception_172: ;
+ goto end_function_236;
+end_function_236: ;
+}
+
+// struct tuple_(%i, %i)
+struct ztuple_z8z5izCz0z5iz9 {
+ sail_int ztup0;
+ sail_int ztup1;
+};
+
+static void COPY(ztuple_z8z5izCz0z5iz9)(struct ztuple_z8z5izCz0z5iz9 *rop, const struct ztuple_z8z5izCz0z5iz9 op) {
+ COPY(sail_int)(&rop->ztup0, op.ztup0);
+ COPY(sail_int)(&rop->ztup1, op.ztup1);
+}
+
+static void CREATE(ztuple_z8z5izCz0z5iz9)(struct ztuple_z8z5izCz0z5iz9 *op) {
+ CREATE(sail_int)(&op->ztup0);
+ CREATE(sail_int)(&op->ztup1);
+}
+
+static void RECREATE(ztuple_z8z5izCz0z5iz9)(struct ztuple_z8z5izCz0z5iz9 *op) {
+ RECREATE(sail_int)(&op->ztup0);
+ RECREATE(sail_int)(&op->ztup1);
+}
+
+static void KILL(ztuple_z8z5izCz0z5iz9)(struct ztuple_z8z5izCz0z5iz9 *op) {
+ KILL(sail_int)(&op->ztup0);
+ KILL(sail_int)(&op->ztup1);
+}
+
+static bool EQUAL(ztuple_z8z5izCz0z5iz9)(struct ztuple_z8z5izCz0z5iz9 op1, struct ztuple_z8z5izCz0z5iz9 op2) {
+ return EQUAL(sail_int)(op1.ztup0, op2.ztup0) && EQUAL(sail_int)(op1.ztup1, op2.ztup1);
+}
+
+static void sailgen_getCapBounds(struct ztuple_z8z5izCz0z5iz9 *rop, struct zCapability);
+
+
+static void sailgen_getCapBounds(struct ztuple_z8z5izCz0z5iz9 *zcbz344, struct zCapability zcap)
+{
+ __label__ case_175, finish_match_174, end_function_176, end_block_exception_177, end_function_235;
+
+ struct ztuple_z8z5bv64zCz0z5bvz9 zgaz3250;
+ CREATE(ztuple_z8z5bv64zCz0z5bvz9)(&zgaz3250);
+ sailgen_getCapBoundsBits(&zgaz3250, zcap);
+ struct ztuple_z8z5izCz0z5iz9 zgsz3466;
+ CREATE(ztuple_z8z5izCz0z5iz9)(&zgsz3466);
+ {
+ uint64_t zbase;
+ zbase = zgaz3250.ztup0;
+ lbits ztop;
+ CREATE(lbits)(&ztop);
+ COPY(lbits)(&ztop, zgaz3250.ztup1);
+ sail_int zgaz3251;
+ CREATE(sail_int)(&zgaz3251);
+ {
+ lbits zgsz3467;
+ CREATE(lbits)(&zgsz3467);
+ CONVERT_OF(lbits, fbits)(&zgsz3467, zbase, UINT64_C(64) , true);
+ sail_unsigned(&zgaz3251, zgsz3467);
+ KILL(lbits)(&zgsz3467);
+ }
+ sail_int zgaz3252;
+ CREATE(sail_int)(&zgaz3252);
+ sail_unsigned(&zgaz3252, ztop);
+ struct ztuple_z8z5izCz0z5iz9 zgsz3468;
+ CREATE(ztuple_z8z5izCz0z5iz9)(&zgsz3468);
+ COPY(sail_int)(&((&zgsz3468)->ztup0), zgaz3251);
+ COPY(sail_int)(&((&zgsz3468)->ztup1), zgaz3252);
+ COPY(ztuple_z8z5izCz0z5iz9)(&zgsz3466, zgsz3468);
+ KILL(ztuple_z8z5izCz0z5iz9)(&zgsz3468);
+ KILL(sail_int)(&zgaz3252);
+ KILL(sail_int)(&zgaz3251);
+ KILL(lbits)(&ztop);
+
+ goto finish_match_174;
+ }
+case_175: ;
+ sail_match_failure("getCapBounds");
+finish_match_174: ;
+ COPY(ztuple_z8z5izCz0z5iz9)((*(&zcbz344)), zgsz3466);
+ KILL(ztuple_z8z5izCz0z5iz9)(&zgsz3466);
+ KILL(ztuple_z8z5bv64zCz0z5bvz9)(&zgaz3250);
+end_function_176: ;
+ goto end_function_235;
+end_block_exception_177: ;
+ goto end_function_235;
+end_function_235: ;
+}
+
+// struct tuple_(%bool, %struct zCapability)
+struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 {
+ bool ztup0;
+ struct zCapability ztup1;
+};
+
+static void COPY(ztuple_z8z5boolzCz0z5structz0zzCapabilityz9)(struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 *rop, const struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 op) {
+ rop->ztup0 = op.ztup0;
+ rop->ztup1 = op.ztup1;
+}
+
+static bool EQUAL(ztuple_z8z5boolzCz0z5structz0zzCapabilityz9)(struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 op1, struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 op2) {
+ return EQUAL(bool)(op1.ztup0, op2.ztup0) && EQUAL(zCapability)(op1.ztup1, op2.ztup1);
+}
+
+static struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 sailgen_setCapBounds(struct zCapability, uint64_t, lbits);
+
+static struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 sailgen_setCapBounds(struct zCapability zcap, uint64_t zbase, lbits ztop)
+{
+ __label__ end_function_179, end_block_exception_180;
+
+ struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 zcbz345;
+ lbits zext_base;
+ CREATE(lbits)(&zext_base);
+ {
+ lbits zgsz3471;
+ CREATE(lbits)(&zgsz3471);
+ CONVERT_OF(lbits, fbits)(&zgsz3471, zbase, UINT64_C(64) , true);
+ lbits zgsz3470;
+ CREATE(lbits)(&zgsz3470);
+ CONVERT_OF(lbits, fbits)(&zgsz3470, UINT64_C(0b0), UINT64_C(1) , true);
+ append(&zext_base, zgsz3470, zgsz3471);
+ KILL(lbits)(&zgsz3471);
+ KILL(lbits)(&zgsz3470);
+ }
+ lbits zlength;
+ CREATE(lbits)(&zlength);
+ sub_bits(&zlength, ztop, zext_base);
+ int64_t ze;
+ {
+ int64_t zgaz3286;
+ {
+ uint64_t zgaz3285;
+ {
+ int64_t zgaz3284;
+ {
+ sail_int zgsz3472;
+ CREATE(sail_int)(&zgsz3472);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3472, zcap_mantissa_width);
+ sail_int zgsz3473;
+ CREATE(sail_int)(&zgsz3473);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3473, INT64_C(1));
+ sail_int zgsz3474;
+ CREATE(sail_int)(&zgsz3474);
+ sub_int(&zgsz3474, zgsz3472, zgsz3473);
+ zgaz3284 = CONVERT_OF(mach_int, sail_int)(zgsz3474);
+ KILL(sail_int)(&zgsz3474);
+ KILL(sail_int)(&zgsz3473);
+ KILL(sail_int)(&zgsz3472);
+ }
+ {
+ sail_int zgsz3475;
+ CREATE(sail_int)(&zgsz3475);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3475, zcap_addr_width);
+ sail_int zgsz3476;
+ CREATE(sail_int)(&zgsz3476);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3476, zgaz3284);
+ lbits zgsz3477;
+ CREATE(lbits)(&zgsz3477);
+ vector_subrange_lbits(&zgsz3477, zlength, zgsz3475, zgsz3476);
+ zgaz3285 = CONVERT_OF(fbits, lbits)(zgsz3477, true);
+ KILL(lbits)(&zgsz3477);
+ KILL(sail_int)(&zgsz3476);
+ KILL(sail_int)(&zgsz3475);
+ }
+
+ }
+ {
+ lbits zgsz3478;
+ CREATE(lbits)(&zgsz3478);
+ CONVERT_OF(lbits, fbits)(&zgsz3478, zgaz3285, UINT64_C(52) , true);
+ sail_int zgsz3479;
+ CREATE(sail_int)(&zgsz3479);
+ count_leading_zeros(&zgsz3479, zgsz3478);
+ zgaz3286 = CONVERT_OF(mach_int, sail_int)(zgsz3479);
+ KILL(sail_int)(&zgsz3479);
+ KILL(lbits)(&zgsz3478);
+ }
+
+ }
+ {
+ sail_int zgsz3480;
+ CREATE(sail_int)(&zgsz3480);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3480, zcap_max_E);
+ sail_int zgsz3481;
+ CREATE(sail_int)(&zgsz3481);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3481, zgaz3286);
+ sail_int zgsz3482;
+ CREATE(sail_int)(&zgsz3482);
+ sub_int(&zgsz3482, zgsz3480, zgsz3481);
+ ze = CONVERT_OF(mach_int, sail_int)(zgsz3482);
+ KILL(sail_int)(&zgsz3482);
+ KILL(sail_int)(&zgsz3481);
+ KILL(sail_int)(&zgsz3480);
+ }
+
+ }
+ bool zie;
+ {
+ bool zgaz3283;
+ {
+ sail_int zgsz3483;
+ CREATE(sail_int)(&zgsz3483);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3483, ze);
+ zgaz3283 = sailgen_zzz3zzzz7mzzJzzK0z3neq_int(zgsz3483, INT64_C(0));
+ KILL(sail_int)(&zgsz3483);
+ }
+ bool zgsz3488;
+ if (zgaz3283) { zgsz3488 = true; } else {
+ fbits zgaz3282;
+ {
+ int64_t zgaz3281;
+ {
+ sail_int zgsz3484;
+ CREATE(sail_int)(&zgsz3484);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3484, zcap_mantissa_width);
+ sail_int zgsz3485;
+ CREATE(sail_int)(&zgsz3485);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3485, INT64_C(2));
+ sail_int zgsz3486;
+ CREATE(sail_int)(&zgsz3486);
+ sub_int(&zgsz3486, zgsz3484, zgsz3485);
+ zgaz3281 = CONVERT_OF(mach_int, sail_int)(zgsz3486);
+ KILL(sail_int)(&zgsz3486);
+ KILL(sail_int)(&zgsz3485);
+ KILL(sail_int)(&zgsz3484);
+ }
+ {
+ sail_int zgsz3487;
+ CREATE(sail_int)(&zgsz3487);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3487, zgaz3281);
+ zgaz3282 = bitvector_access(zlength, zgsz3487);
+ KILL(sail_int)(&zgsz3487);
+ }
+
+ }
+ zgsz3488 = eq_bit(zgaz3282, UINT64_C(1));
+
+ }
+ zie = zgsz3488;
+
+ }
+ uint64_t zBbits;
+ {
+ lbits zgsz3489;
+ CREATE(lbits)(&zgsz3489);
+ CONVERT_OF(lbits, fbits)(&zgsz3489, zbase, UINT64_C(64) , true);
+ sail_int zgsz3490;
+ CREATE(sail_int)(&zgsz3490);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3490, zcap_mantissa_width);
+ lbits zgsz3491;
+ CREATE(lbits)(&zgsz3491);
+ sail_truncate(&zgsz3491, zgsz3489, zgsz3490);
+ zBbits = CONVERT_OF(fbits, lbits)(zgsz3491, true);
+ KILL(lbits)(&zgsz3491);
+ KILL(sail_int)(&zgsz3490);
+ KILL(lbits)(&zgsz3489);
+ }
+ uint64_t zTbits;
+ {
+ sail_int zgsz3492;
+ CREATE(sail_int)(&zgsz3492);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3492, zcap_mantissa_width);
+ lbits zgsz3493;
+ CREATE(lbits)(&zgsz3493);
+ sail_truncate(&zgsz3493, ztop, zgsz3492);
+ zTbits = CONVERT_OF(fbits, lbits)(zgsz3493, true);
+ KILL(lbits)(&zgsz3493);
+ KILL(sail_int)(&zgsz3492);
+ }
+ bool zlostSignificantTop;
+ zlostSignificantTop = false;
+ bool zlostSignificantBase;
+ zlostSignificantBase = false;
+ bool zincE;
+ zincE = false;
+ {
+ unit zgsz3494;
+ if (zie) {
+ uint64_t zB_ie;
+ {
+ uint64_t zgaz3276;
+ {
+ int64_t zgaz3275;
+ {
+ sail_int zgsz3495;
+ CREATE(sail_int)(&zgsz3495);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3495, ze);
+ sail_int zgsz3496;
+ CREATE(sail_int)(&zgsz3496);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3496, INT64_C(3));
+ sail_int zgsz3497;
+ CREATE(sail_int)(&zgsz3497);
+ add_int(&zgsz3497, zgsz3495, zgsz3496);
+ zgaz3275 = CONVERT_OF(mach_int, sail_int)(zgsz3497);
+ KILL(sail_int)(&zgsz3497);
+ KILL(sail_int)(&zgsz3496);
+ KILL(sail_int)(&zgsz3495);
+ }
+ {
+ lbits zgsz3498;
+ CREATE(lbits)(&zgsz3498);
+ CONVERT_OF(lbits, fbits)(&zgsz3498, zbase, UINT64_C(64) , true);
+ sail_int zgsz3499;
+ CREATE(sail_int)(&zgsz3499);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3499, zgaz3275);
+ lbits zgsz3500;
+ CREATE(lbits)(&zgsz3500);
+ shiftr(&zgsz3500, zgsz3498, zgsz3499);
+ zgaz3276 = CONVERT_OF(fbits, lbits)(zgsz3500, true);
+ KILL(lbits)(&zgsz3500);
+ KILL(sail_int)(&zgsz3499);
+ KILL(lbits)(&zgsz3498);
+ }
+
+ }
+ int64_t zgaz3277;
+ {
+ sail_int zgsz3501;
+ CREATE(sail_int)(&zgsz3501);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3501, zcap_mantissa_width);
+ sail_int zgsz3502;
+ CREATE(sail_int)(&zgsz3502);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3502, INT64_C(3));
+ sail_int zgsz3503;
+ CREATE(sail_int)(&zgsz3503);
+ sub_int(&zgsz3503, zgsz3501, zgsz3502);
+ zgaz3277 = CONVERT_OF(mach_int, sail_int)(zgsz3503);
+ KILL(sail_int)(&zgsz3503);
+ KILL(sail_int)(&zgsz3502);
+ KILL(sail_int)(&zgsz3501);
+ }
+ {
+ lbits zgsz3504;
+ CREATE(lbits)(&zgsz3504);
+ CONVERT_OF(lbits, fbits)(&zgsz3504, zgaz3276, UINT64_C(64) , true);
+ sail_int zgsz3505;
+ CREATE(sail_int)(&zgsz3505);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3505, zgaz3277);
+ lbits zgsz3506;
+ CREATE(lbits)(&zgsz3506);
+ sail_truncate(&zgsz3506, zgsz3504, zgsz3505);
+ zB_ie = CONVERT_OF(fbits, lbits)(zgsz3506, true);
+ KILL(lbits)(&zgsz3506);
+ KILL(sail_int)(&zgsz3505);
+ KILL(lbits)(&zgsz3504);
+ }
+
+
+ }
+ uint64_t zT_ie;
+ {
+ lbits zgaz3273;
+ CREATE(lbits)(&zgaz3273);
+ {
+ int64_t zgaz3272;
+ {
+ sail_int zgsz3507;
+ CREATE(sail_int)(&zgsz3507);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3507, ze);
+ sail_int zgsz3508;
+ CREATE(sail_int)(&zgsz3508);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3508, INT64_C(3));
+ sail_int zgsz3509;
+ CREATE(sail_int)(&zgsz3509);
+ add_int(&zgsz3509, zgsz3507, zgsz3508);
+ zgaz3272 = CONVERT_OF(mach_int, sail_int)(zgsz3509);
+ KILL(sail_int)(&zgsz3509);
+ KILL(sail_int)(&zgsz3508);
+ KILL(sail_int)(&zgsz3507);
+ }
+ {
+ sail_int zgsz3510;
+ CREATE(sail_int)(&zgsz3510);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3510, zgaz3272);
+ shiftr(&zgaz3273, ztop, zgsz3510);
+ KILL(sail_int)(&zgsz3510);
+ }
+
+ }
+ int64_t zgaz3274;
+ {
+ sail_int zgsz3511;
+ CREATE(sail_int)(&zgsz3511);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3511, zcap_mantissa_width);
+ sail_int zgsz3512;
+ CREATE(sail_int)(&zgsz3512);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3512, INT64_C(3));
+ sail_int zgsz3513;
+ CREATE(sail_int)(&zgsz3513);
+ sub_int(&zgsz3513, zgsz3511, zgsz3512);
+ zgaz3274 = CONVERT_OF(mach_int, sail_int)(zgsz3513);
+ KILL(sail_int)(&zgsz3513);
+ KILL(sail_int)(&zgsz3512);
+ KILL(sail_int)(&zgsz3511);
+ }
+ {
+ sail_int zgsz3514;
+ CREATE(sail_int)(&zgsz3514);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3514, zgaz3274);
+ lbits zgsz3515;
+ CREATE(lbits)(&zgsz3515);
+ sail_truncate(&zgsz3515, zgaz3273, zgsz3514);
+ zT_ie = CONVERT_OF(fbits, lbits)(zgsz3515, true);
+ KILL(lbits)(&zgsz3515);
+ KILL(sail_int)(&zgsz3514);
+ }
+
+ KILL(lbits)(&zgaz3273);
+ }
+ lbits zmaskLo;
+ CREATE(lbits)(&zmaskLo);
+ {
+ int64_t zgaz3270;
+ {
+ sail_int zgsz3516;
+ CREATE(sail_int)(&zgsz3516);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3516, INT64_C(64));
+ sail_int zgsz3517;
+ CREATE(sail_int)(&zgsz3517);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3517, INT64_C(1));
+ sail_int zgsz3518;
+ CREATE(sail_int)(&zgsz3518);
+ add_int(&zgsz3518, zgsz3516, zgsz3517);
+ zgaz3270 = CONVERT_OF(mach_int, sail_int)(zgsz3518);
+ KILL(sail_int)(&zgsz3518);
+ KILL(sail_int)(&zgsz3517);
+ KILL(sail_int)(&zgsz3516);
+ }
+ sbits zgaz3271;
+ {
+ int64_t zgaz3269;
+ {
+ sail_int zgsz3519;
+ CREATE(sail_int)(&zgsz3519);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3519, ze);
+ sail_int zgsz3520;
+ CREATE(sail_int)(&zgsz3520);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3520, INT64_C(3));
+ sail_int zgsz3521;
+ CREATE(sail_int)(&zgsz3521);
+ add_int(&zgsz3521, zgsz3519, zgsz3520);
+ zgaz3269 = CONVERT_OF(mach_int, sail_int)(zgsz3521);
+ KILL(sail_int)(&zgsz3521);
+ KILL(sail_int)(&zgsz3520);
+ KILL(sail_int)(&zgsz3519);
+ }
+ {
+ sail_int zgsz3522;
+ CREATE(sail_int)(&zgsz3522);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3522, zgaz3269);
+ lbits zgsz3523;
+ CREATE(lbits)(&zgsz3523);
+ sailgen_zzz3zzz3ones(&zgsz3523, zgsz3522);
+ zgaz3271 = CONVERT_OF(sbits, lbits)(zgsz3523, true);
+ KILL(lbits)(&zgsz3523);
+ KILL(sail_int)(&zgsz3522);
+ }
+
+ }
+ {
+ lbits zgsz3525;
+ CREATE(lbits)(&zgsz3525);
+ CONVERT_OF(lbits, sbits)(&zgsz3525, zgaz3271, true);
+ sail_int zgsz3524;
+ CREATE(sail_int)(&zgsz3524);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3524, zgaz3270);
+ sailgen_zzz3zzz3EXTZ(&zmaskLo, zgsz3524, zgsz3525);
+ KILL(lbits)(&zgsz3525);
+ KILL(sail_int)(&zgsz3524);
+ }
+
+
+ }
+ {
+ sail_int zgaz3254;
+ CREATE(sail_int)(&zgaz3254);
+ {
+ lbits zgaz3253;
+ CREATE(lbits)(&zgaz3253);
+ and_bits(&zgaz3253, zext_base, zmaskLo);
+ sail_unsigned(&zgaz3254, zgaz3253);
+ KILL(lbits)(&zgaz3253);
+ }
+ zlostSignificantBase = sailgen_zzz3zzzz7mzzJzzK0z3neq_int(zgaz3254, INT64_C(0));
+ unit zgsz3531;
+ zgsz3531 = UNIT;
+ KILL(sail_int)(&zgaz3254);
+ }
+ {
+ sail_int zgaz3256;
+ CREATE(sail_int)(&zgaz3256);
+ {
+ lbits zgaz3255;
+ CREATE(lbits)(&zgaz3255);
+ and_bits(&zgaz3255, ztop, zmaskLo);
+ sail_unsigned(&zgaz3256, zgaz3255);
+ KILL(lbits)(&zgaz3255);
+ }
+ zlostSignificantTop = sailgen_zzz3zzzz7mzzJzzK0z3neq_int(zgaz3256, INT64_C(0));
+ unit zgsz3530;
+ zgsz3530 = UNIT;
+ KILL(sail_int)(&zgaz3256);
+ }
+ {
+ unit zgsz3526;
+ if (zlostSignificantTop) {
+ {
+ lbits zgsz3527;
+ CREATE(lbits)(&zgsz3527);
+ CONVERT_OF(lbits, fbits)(&zgsz3527, zT_ie, UINT64_C(11) , true);
+ sail_int zgsz3528;
+ CREATE(sail_int)(&zgsz3528);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3528, INT64_C(1));
+ lbits zgsz3529;
+ CREATE(lbits)(&zgsz3529);
+ add_bits_int(&zgsz3529, zgsz3527, zgsz3528);
+ zT_ie = CONVERT_OF(fbits, lbits)(zgsz3529, true);
+ KILL(lbits)(&zgsz3529);
+ KILL(sail_int)(&zgsz3528);
+ KILL(lbits)(&zgsz3527);
+ }
+ zgsz3526 = UNIT;
+ } else { zgsz3526 = UNIT; }
+ }
+ uint64_t zlen_ie;
+ {
+ lbits zgsz3532;
+ CREATE(lbits)(&zgsz3532);
+ CONVERT_OF(lbits, fbits)(&zgsz3532, zT_ie, UINT64_C(11) , true);
+ lbits zgsz3533;
+ CREATE(lbits)(&zgsz3533);
+ CONVERT_OF(lbits, fbits)(&zgsz3533, zB_ie, UINT64_C(11) , true);
+ lbits zgsz3534;
+ CREATE(lbits)(&zgsz3534);
+ sub_bits(&zgsz3534, zgsz3532, zgsz3533);
+ zlen_ie = CONVERT_OF(fbits, lbits)(zgsz3534, true);
+ KILL(lbits)(&zgsz3534);
+ KILL(lbits)(&zgsz3533);
+ KILL(lbits)(&zgsz3532);
+ }
+ {
+ bool zgaz3259;
+ {
+ fbits zgaz3258;
+ {
+ int64_t zgaz3257;
+ {
+ sail_int zgsz3535;
+ CREATE(sail_int)(&zgsz3535);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3535, zcap_mantissa_width);
+ sail_int zgsz3536;
+ CREATE(sail_int)(&zgsz3536);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3536, INT64_C(4));
+ sail_int zgsz3537;
+ CREATE(sail_int)(&zgsz3537);
+ sub_int(&zgsz3537, zgsz3535, zgsz3536);
+ zgaz3257 = CONVERT_OF(mach_int, sail_int)(zgsz3537);
+ KILL(sail_int)(&zgsz3537);
+ KILL(sail_int)(&zgsz3536);
+ KILL(sail_int)(&zgsz3535);
+ }
+ {
+ sail_int zgsz3539;
+ CREATE(sail_int)(&zgsz3539);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3539, zgaz3257);
+ lbits zgsz3538;
+ CREATE(lbits)(&zgsz3538);
+ CONVERT_OF(lbits, fbits)(&zgsz3538, zlen_ie, UINT64_C(11) , true);
+ zgaz3258 = bitvector_access(zgsz3538, zgsz3539);
+ KILL(sail_int)(&zgsz3539);
+ KILL(lbits)(&zgsz3538);
+ }
+
+ }
+ zgaz3259 = eq_bit(zgaz3258, UINT64_C(1));
+
+ }
+ unit zgsz3544;
+ if (zgaz3259) {
+ {
+ zincE = true;
+ unit zgsz3566;
+ zgsz3566 = UNIT;
+ }
+ {
+ bool zgsz3547;
+ if (zlostSignificantBase) { zgsz3547 = true; } else {
+ fbits zgaz3260;
+ {
+ sail_int zgsz3546;
+ CREATE(sail_int)(&zgsz3546);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3546, INT64_C(0));
+ lbits zgsz3545;
+ CREATE(lbits)(&zgsz3545);
+ CONVERT_OF(lbits, fbits)(&zgsz3545, zB_ie, UINT64_C(11) , true);
+ zgaz3260 = bitvector_access(zgsz3545, zgsz3546);
+ KILL(sail_int)(&zgsz3546);
+ KILL(lbits)(&zgsz3545);
+ }
+ zgsz3547 = eq_bit(zgaz3260, UINT64_C(1));
+
+ }
+ zlostSignificantBase = zgsz3547;
+ unit zgsz3565;
+ zgsz3565 = UNIT;
+ }
+ {
+ bool zgsz3550;
+ if (zlostSignificantTop) { zgsz3550 = true; } else {
+ fbits zgaz3261;
+ {
+ sail_int zgsz3549;
+ CREATE(sail_int)(&zgsz3549);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3549, INT64_C(0));
+ lbits zgsz3548;
+ CREATE(lbits)(&zgsz3548);
+ CONVERT_OF(lbits, fbits)(&zgsz3548, zT_ie, UINT64_C(11) , true);
+ zgaz3261 = bitvector_access(zgsz3548, zgsz3549);
+ KILL(sail_int)(&zgsz3549);
+ KILL(lbits)(&zgsz3548);
+ }
+ zgsz3550 = eq_bit(zgaz3261, UINT64_C(1));
+
+ }
+ zlostSignificantTop = zgsz3550;
+ unit zgsz3564;
+ zgsz3564 = UNIT;
+ }
+ {
+ uint64_t zgaz3263;
+ {
+ int64_t zgaz3262;
+ {
+ sail_int zgsz3551;
+ CREATE(sail_int)(&zgsz3551);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3551, ze);
+ sail_int zgsz3552;
+ CREATE(sail_int)(&zgsz3552);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3552, INT64_C(4));
+ sail_int zgsz3553;
+ CREATE(sail_int)(&zgsz3553);
+ add_int(&zgsz3553, zgsz3551, zgsz3552);
+ zgaz3262 = CONVERT_OF(mach_int, sail_int)(zgsz3553);
+ KILL(sail_int)(&zgsz3553);
+ KILL(sail_int)(&zgsz3552);
+ KILL(sail_int)(&zgsz3551);
+ }
+ {
+ lbits zgsz3554;
+ CREATE(lbits)(&zgsz3554);
+ CONVERT_OF(lbits, fbits)(&zgsz3554, zbase, UINT64_C(64) , true);
+ sail_int zgsz3555;
+ CREATE(sail_int)(&zgsz3555);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3555, zgaz3262);
+ lbits zgsz3556;
+ CREATE(lbits)(&zgsz3556);
+ shiftr(&zgsz3556, zgsz3554, zgsz3555);
+ zgaz3263 = CONVERT_OF(fbits, lbits)(zgsz3556, true);
+ KILL(lbits)(&zgsz3556);
+ KILL(sail_int)(&zgsz3555);
+ KILL(lbits)(&zgsz3554);
+ }
+
+ }
+ int64_t zgaz3264;
+ {
+ sail_int zgsz3557;
+ CREATE(sail_int)(&zgsz3557);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3557, zcap_mantissa_width);
+ sail_int zgsz3558;
+ CREATE(sail_int)(&zgsz3558);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3558, INT64_C(3));
+ sail_int zgsz3559;
+ CREATE(sail_int)(&zgsz3559);
+ sub_int(&zgsz3559, zgsz3557, zgsz3558);
+ zgaz3264 = CONVERT_OF(mach_int, sail_int)(zgsz3559);
+ KILL(sail_int)(&zgsz3559);
+ KILL(sail_int)(&zgsz3558);
+ KILL(sail_int)(&zgsz3557);
+ }
+ {
+ lbits zgsz3560;
+ CREATE(lbits)(&zgsz3560);
+ CONVERT_OF(lbits, fbits)(&zgsz3560, zgaz3263, UINT64_C(64) , true);
+ sail_int zgsz3561;
+ CREATE(sail_int)(&zgsz3561);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3561, zgaz3264);
+ lbits zgsz3562;
+ CREATE(lbits)(&zgsz3562);
+ sail_truncate(&zgsz3562, zgsz3560, zgsz3561);
+ zB_ie = CONVERT_OF(fbits, lbits)(zgsz3562, true);
+ KILL(lbits)(&zgsz3562);
+ KILL(sail_int)(&zgsz3561);
+ KILL(lbits)(&zgsz3560);
+ }
+ unit zgsz3563;
+ zgsz3563 = UNIT;
+
+
+ }
+ int64_t zincT;
+ if (zlostSignificantTop) { zincT = INT64_C(1); } else { zincT = INT64_C(0); }
+ uint64_t zgaz3268;
+ {
+ lbits zgaz3266;
+ CREATE(lbits)(&zgaz3266);
+ {
+ int64_t zgaz3265;
+ {
+ sail_int zgsz3567;
+ CREATE(sail_int)(&zgsz3567);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3567, ze);
+ sail_int zgsz3568;
+ CREATE(sail_int)(&zgsz3568);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3568, INT64_C(4));
+ sail_int zgsz3569;
+ CREATE(sail_int)(&zgsz3569);
+ add_int(&zgsz3569, zgsz3567, zgsz3568);
+ zgaz3265 = CONVERT_OF(mach_int, sail_int)(zgsz3569);
+ KILL(sail_int)(&zgsz3569);
+ KILL(sail_int)(&zgsz3568);
+ KILL(sail_int)(&zgsz3567);
+ }
+ {
+ sail_int zgsz3570;
+ CREATE(sail_int)(&zgsz3570);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3570, zgaz3265);
+ shiftr(&zgaz3266, ztop, zgsz3570);
+ KILL(sail_int)(&zgsz3570);
+ }
+
+ }
+ int64_t zgaz3267;
+ {
+ sail_int zgsz3571;
+ CREATE(sail_int)(&zgsz3571);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3571, zcap_mantissa_width);
+ sail_int zgsz3572;
+ CREATE(sail_int)(&zgsz3572);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3572, INT64_C(3));
+ sail_int zgsz3573;
+ CREATE(sail_int)(&zgsz3573);
+ sub_int(&zgsz3573, zgsz3571, zgsz3572);
+ zgaz3267 = CONVERT_OF(mach_int, sail_int)(zgsz3573);
+ KILL(sail_int)(&zgsz3573);
+ KILL(sail_int)(&zgsz3572);
+ KILL(sail_int)(&zgsz3571);
+ }
+ {
+ sail_int zgsz3574;
+ CREATE(sail_int)(&zgsz3574);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3574, zgaz3267);
+ lbits zgsz3575;
+ CREATE(lbits)(&zgsz3575);
+ sail_truncate(&zgsz3575, zgaz3266, zgsz3574);
+ zgaz3268 = CONVERT_OF(fbits, lbits)(zgsz3575, true);
+ KILL(lbits)(&zgsz3575);
+ KILL(sail_int)(&zgsz3574);
+ }
+
+ KILL(lbits)(&zgaz3266);
+ }
+ {
+ lbits zgsz3576;
+ CREATE(lbits)(&zgsz3576);
+ CONVERT_OF(lbits, fbits)(&zgsz3576, zgaz3268, UINT64_C(11) , true);
+ sail_int zgsz3577;
+ CREATE(sail_int)(&zgsz3577);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3577, zincT);
+ lbits zgsz3578;
+ CREATE(lbits)(&zgsz3578);
+ add_bits_int(&zgsz3578, zgsz3576, zgsz3577);
+ zT_ie = CONVERT_OF(fbits, lbits)(zgsz3578, true);
+ KILL(lbits)(&zgsz3578);
+ KILL(sail_int)(&zgsz3577);
+ KILL(lbits)(&zgsz3576);
+ }
+ zgsz3544 = UNIT;
+
+
+ } else { zgsz3544 = UNIT; }
+
+ }
+ {
+ {
+ lbits zgsz3540;
+ CREATE(lbits)(&zgsz3540);
+ CONVERT_OF(lbits, fbits)(&zgsz3540, zB_ie, UINT64_C(11) , true);
+ lbits zgsz3541;
+ CREATE(lbits)(&zgsz3541);
+ CONVERT_OF(lbits, fbits)(&zgsz3541, UINT64_C(0b000), UINT64_C(3) , true);
+ lbits zgsz3542;
+ CREATE(lbits)(&zgsz3542);
+ append(&zgsz3542, zgsz3540, zgsz3541);
+ zBbits = CONVERT_OF(fbits, lbits)(zgsz3542, true);
+ KILL(lbits)(&zgsz3542);
+ KILL(lbits)(&zgsz3541);
+ KILL(lbits)(&zgsz3540);
+ }
+ unit zgsz3543;
+ zgsz3543 = UNIT;
+ }
+ {
+ lbits zgsz3579;
+ CREATE(lbits)(&zgsz3579);
+ CONVERT_OF(lbits, fbits)(&zgsz3579, zT_ie, UINT64_C(11) , true);
+ lbits zgsz3580;
+ CREATE(lbits)(&zgsz3580);
+ CONVERT_OF(lbits, fbits)(&zgsz3580, UINT64_C(0b000), UINT64_C(3) , true);
+ lbits zgsz3581;
+ CREATE(lbits)(&zgsz3581);
+ append(&zgsz3581, zgsz3579, zgsz3580);
+ zTbits = CONVERT_OF(fbits, lbits)(zgsz3581, true);
+ KILL(lbits)(&zgsz3581);
+ KILL(lbits)(&zgsz3580);
+ KILL(lbits)(&zgsz3579);
+ }
+ zgsz3494 = UNIT;
+
+ KILL(lbits)(&zmaskLo);
+
+
+ } else { zgsz3494 = UNIT; }
+ }
+ struct zCapability znewCap;
+ {
+ uint64_t zgaz3280;
+ {
+ int64_t zgaz3279;
+ if (zincE) {
+ {
+ sail_int zgsz3582;
+ CREATE(sail_int)(&zgsz3582);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3582, ze);
+ sail_int zgsz3583;
+ CREATE(sail_int)(&zgsz3583);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3583, INT64_C(1));
+ sail_int zgsz3584;
+ CREATE(sail_int)(&zgsz3584);
+ add_int(&zgsz3584, zgsz3582, zgsz3583);
+ zgaz3279 = CONVERT_OF(mach_int, sail_int)(zgsz3584);
+ KILL(sail_int)(&zgsz3584);
+ KILL(sail_int)(&zgsz3583);
+ KILL(sail_int)(&zgsz3582);
+ }
+ } else { zgaz3279 = ze; }
+ {
+ sail_int zgsz3585;
+ CREATE(sail_int)(&zgsz3585);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3585, zgaz3279);
+ zgaz3280 = sailgen_zzzz7lzzJzzK6z3to_bits(INT64_C(6), zgsz3585);
+ KILL(sail_int)(&zgsz3585);
+ }
+
+ }
+ struct zCapability zgsz3586;
+ zgsz3586 = zcap;
+ zgsz3586.zB = zBbits;
+ zgsz3586.zE = zgaz3280;
+ zgsz3586.zT = zTbits;
+ zgsz3586.zaddress = zbase;
+ zgsz3586.zinternal_E = zie;
+ znewCap = zgsz3586;
+
+
+ }
+ bool zexact;
+ {
+ bool zgaz3278;
+ {
+ bool zgsz3587;
+ if (zlostSignificantBase) { zgsz3587 = true; } else { zgsz3587 = zlostSignificantTop; }
+ zgaz3278 = zgsz3587;
+ }
+ zexact = not(zgaz3278);
+
+ }
+ struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 zgsz3588;
+ zgsz3588.ztup0 = zexact;
+ zgsz3588.ztup1 = znewCap;
+ zcbz345 = zgsz3588;
+
+
+
+
+
+
+
+
+
+
+ KILL(lbits)(&zlength);
+ KILL(lbits)(&zext_base);
+end_function_179: ;
+ return zcbz345;
+end_block_exception_180: ;
+ struct zCapability zcbz367 = { .zuperms = UINT64_C(0xdeadc0de), .ztag = false, .zreserved = UINT64_C(0xdeadc0de), .zpermit_unseal = false, .zpermit_store_local_cap = false, .zpermit_store_cap = false, .zpermit_store = false, .zpermit_set_CID = false, .zpermit_seal = false, .zpermit_load_cap = false, .zpermit_load = false, .zpermit_execute = false, .zpermit_cinvoke = false, .zotype = UINT64_C(0xdeadc0de), .zinternal_E = false, .zglobal = false, .zflag_cap_mode = false, .zaddress = UINT64_C(0xdeadc0de), .zaccess_system_regs = false, .zT = UINT64_C(0xdeadc0de), .zE = UINT64_C(0xdeadc0de), .zB = UINT64_C(0xdeadc0de) };
+ struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 zcbz366 = { .ztup1 = zcbz367, .ztup0 = false };
+ return zcbz366;
+}
+
+static uint64_t sailgen_getCapPerms(struct zCapability);
+
+static uint64_t sailgen_getCapPerms(struct zCapability zcap)
+{
+ __label__ end_function_182, end_block_exception_183;
+
+ uint64_t zcbz346;
+ uint64_t zperms;
+ {
+ uint64_t zgaz3288;
+ zgaz3288 = sailgen_getCapHardPerms(zcap);
+ zperms = sailgen_zzzz7mzzJzzK15zzCzz0zz7nzzJzzK12z3EXTZ(INT64_C(15), zgaz3288);
+
+ }
+ uint64_t zgaz3287;
+ zgaz3287 = zcap.zuperms;
+ {
+ lbits zgsz3589;
+ CREATE(lbits)(&zgsz3589);
+ CONVERT_OF(lbits, fbits)(&zgsz3589, zgaz3287, UINT64_C(4) , true);
+ lbits zgsz3590;
+ CREATE(lbits)(&zgsz3590);
+ CONVERT_OF(lbits, fbits)(&zgsz3590, zperms, UINT64_C(15) , true);
+ lbits zgsz3591;
+ CREATE(lbits)(&zgsz3591);
+ append(&zgsz3591, zgsz3589, zgsz3590);
+ zcbz346 = CONVERT_OF(fbits, lbits)(zgsz3591, true);
+ KILL(lbits)(&zgsz3591);
+ KILL(lbits)(&zgsz3590);
+ KILL(lbits)(&zgsz3589);
+ }
+
+
+end_function_182: ;
+ return zcbz346;
+end_block_exception_183: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static struct zCapability sailgen_setCapPerms(struct zCapability, uint64_t);
+
+static struct zCapability sailgen_setCapPerms(struct zCapability zcap, uint64_t zperms)
+{
+ __label__ end_function_185, end_block_exception_186;
+
+ struct zCapability zcbz347;
+ uint64_t zgaz3290;
+ {
+ uint64_t zgaz3289;
+ {
+ lbits zgsz3592;
+ CREATE(lbits)(&zgsz3592);
+ CONVERT_OF(lbits, fbits)(&zgsz3592, zperms, UINT64_C(19) , true);
+ sail_int zgsz3593;
+ CREATE(sail_int)(&zgsz3593);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3593, zcap_uperms_shift);
+ lbits zgsz3594;
+ CREATE(lbits)(&zgsz3594);
+ shiftr(&zgsz3594, zgsz3592, zgsz3593);
+ zgaz3289 = CONVERT_OF(fbits, lbits)(zgsz3594, true);
+ KILL(lbits)(&zgsz3594);
+ KILL(sail_int)(&zgsz3593);
+ KILL(lbits)(&zgsz3592);
+ }
+ {
+ lbits zgsz3595;
+ CREATE(lbits)(&zgsz3595);
+ CONVERT_OF(lbits, fbits)(&zgsz3595, zgaz3289, UINT64_C(19) , true);
+ sail_int zgsz3596;
+ CREATE(sail_int)(&zgsz3596);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3596, zcap_uperms_width);
+ lbits zgsz3597;
+ CREATE(lbits)(&zgsz3597);
+ sail_truncate(&zgsz3597, zgsz3595, zgsz3596);
+ zgaz3290 = CONVERT_OF(fbits, lbits)(zgsz3597, true);
+ KILL(lbits)(&zgsz3597);
+ KILL(sail_int)(&zgsz3596);
+ KILL(lbits)(&zgsz3595);
+ }
+
+ }
+ bool zgaz3292;
+ {
+ fbits zgaz3291;
+ {
+ sail_int zgsz3599;
+ CREATE(sail_int)(&zgsz3599);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3599, INT64_C(11));
+ lbits zgsz3598;
+ CREATE(lbits)(&zgsz3598);
+ CONVERT_OF(lbits, fbits)(&zgsz3598, zperms, UINT64_C(19) , true);
+ zgaz3291 = bitvector_access(zgsz3598, zgsz3599);
+ KILL(sail_int)(&zgsz3599);
+ KILL(lbits)(&zgsz3598);
+ }
+ zgaz3292 = sailgen_bit_to_bool(zgaz3291);
+
+ }
+ bool zgaz3294;
+ {
+ fbits zgaz3293;
+ {
+ sail_int zgsz3601;
+ CREATE(sail_int)(&zgsz3601);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3601, INT64_C(10));
+ lbits zgsz3600;
+ CREATE(lbits)(&zgsz3600);
+ CONVERT_OF(lbits, fbits)(&zgsz3600, zperms, UINT64_C(19) , true);
+ zgaz3293 = bitvector_access(zgsz3600, zgsz3601);
+ KILL(sail_int)(&zgsz3601);
+ KILL(lbits)(&zgsz3600);
+ }
+ zgaz3294 = sailgen_bit_to_bool(zgaz3293);
+
+ }
+ bool zgaz3296;
+ {
+ fbits zgaz3295;
+ {
+ sail_int zgsz3603;
+ CREATE(sail_int)(&zgsz3603);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3603, INT64_C(9));
+ lbits zgsz3602;
+ CREATE(lbits)(&zgsz3602);
+ CONVERT_OF(lbits, fbits)(&zgsz3602, zperms, UINT64_C(19) , true);
+ zgaz3295 = bitvector_access(zgsz3602, zgsz3603);
+ KILL(sail_int)(&zgsz3603);
+ KILL(lbits)(&zgsz3602);
+ }
+ zgaz3296 = sailgen_bit_to_bool(zgaz3295);
+
+ }
+ bool zgaz3298;
+ {
+ fbits zgaz3297;
+ {
+ sail_int zgsz3605;
+ CREATE(sail_int)(&zgsz3605);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3605, INT64_C(8));
+ lbits zgsz3604;
+ CREATE(lbits)(&zgsz3604);
+ CONVERT_OF(lbits, fbits)(&zgsz3604, zperms, UINT64_C(19) , true);
+ zgaz3297 = bitvector_access(zgsz3604, zgsz3605);
+ KILL(sail_int)(&zgsz3605);
+ KILL(lbits)(&zgsz3604);
+ }
+ zgaz3298 = sailgen_bit_to_bool(zgaz3297);
+
+ }
+ bool zgaz3300;
+ {
+ fbits zgaz3299;
+ {
+ sail_int zgsz3607;
+ CREATE(sail_int)(&zgsz3607);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3607, INT64_C(7));
+ lbits zgsz3606;
+ CREATE(lbits)(&zgsz3606);
+ CONVERT_OF(lbits, fbits)(&zgsz3606, zperms, UINT64_C(19) , true);
+ zgaz3299 = bitvector_access(zgsz3606, zgsz3607);
+ KILL(sail_int)(&zgsz3607);
+ KILL(lbits)(&zgsz3606);
+ }
+ zgaz3300 = sailgen_bit_to_bool(zgaz3299);
+
+ }
+ bool zgaz3302;
+ {
+ fbits zgaz3301;
+ {
+ sail_int zgsz3609;
+ CREATE(sail_int)(&zgsz3609);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3609, INT64_C(6));
+ lbits zgsz3608;
+ CREATE(lbits)(&zgsz3608);
+ CONVERT_OF(lbits, fbits)(&zgsz3608, zperms, UINT64_C(19) , true);
+ zgaz3301 = bitvector_access(zgsz3608, zgsz3609);
+ KILL(sail_int)(&zgsz3609);
+ KILL(lbits)(&zgsz3608);
+ }
+ zgaz3302 = sailgen_bit_to_bool(zgaz3301);
+
+ }
+ bool zgaz3304;
+ {
+ fbits zgaz3303;
+ {
+ sail_int zgsz3611;
+ CREATE(sail_int)(&zgsz3611);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3611, INT64_C(5));
+ lbits zgsz3610;
+ CREATE(lbits)(&zgsz3610);
+ CONVERT_OF(lbits, fbits)(&zgsz3610, zperms, UINT64_C(19) , true);
+ zgaz3303 = bitvector_access(zgsz3610, zgsz3611);
+ KILL(sail_int)(&zgsz3611);
+ KILL(lbits)(&zgsz3610);
+ }
+ zgaz3304 = sailgen_bit_to_bool(zgaz3303);
+
+ }
+ bool zgaz3306;
+ {
+ fbits zgaz3305;
+ {
+ sail_int zgsz3613;
+ CREATE(sail_int)(&zgsz3613);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3613, INT64_C(4));
+ lbits zgsz3612;
+ CREATE(lbits)(&zgsz3612);
+ CONVERT_OF(lbits, fbits)(&zgsz3612, zperms, UINT64_C(19) , true);
+ zgaz3305 = bitvector_access(zgsz3612, zgsz3613);
+ KILL(sail_int)(&zgsz3613);
+ KILL(lbits)(&zgsz3612);
+ }
+ zgaz3306 = sailgen_bit_to_bool(zgaz3305);
+
+ }
+ bool zgaz3308;
+ {
+ fbits zgaz3307;
+ {
+ sail_int zgsz3615;
+ CREATE(sail_int)(&zgsz3615);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3615, INT64_C(3));
+ lbits zgsz3614;
+ CREATE(lbits)(&zgsz3614);
+ CONVERT_OF(lbits, fbits)(&zgsz3614, zperms, UINT64_C(19) , true);
+ zgaz3307 = bitvector_access(zgsz3614, zgsz3615);
+ KILL(sail_int)(&zgsz3615);
+ KILL(lbits)(&zgsz3614);
+ }
+ zgaz3308 = sailgen_bit_to_bool(zgaz3307);
+
+ }
+ bool zgaz3310;
+ {
+ fbits zgaz3309;
+ {
+ sail_int zgsz3617;
+ CREATE(sail_int)(&zgsz3617);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3617, INT64_C(2));
+ lbits zgsz3616;
+ CREATE(lbits)(&zgsz3616);
+ CONVERT_OF(lbits, fbits)(&zgsz3616, zperms, UINT64_C(19) , true);
+ zgaz3309 = bitvector_access(zgsz3616, zgsz3617);
+ KILL(sail_int)(&zgsz3617);
+ KILL(lbits)(&zgsz3616);
+ }
+ zgaz3310 = sailgen_bit_to_bool(zgaz3309);
+
+ }
+ bool zgaz3312;
+ {
+ fbits zgaz3311;
+ {
+ sail_int zgsz3619;
+ CREATE(sail_int)(&zgsz3619);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3619, INT64_C(1));
+ lbits zgsz3618;
+ CREATE(lbits)(&zgsz3618);
+ CONVERT_OF(lbits, fbits)(&zgsz3618, zperms, UINT64_C(19) , true);
+ zgaz3311 = bitvector_access(zgsz3618, zgsz3619);
+ KILL(sail_int)(&zgsz3619);
+ KILL(lbits)(&zgsz3618);
+ }
+ zgaz3312 = sailgen_bit_to_bool(zgaz3311);
+
+ }
+ bool zgaz3314;
+ {
+ fbits zgaz3313;
+ {
+ sail_int zgsz3621;
+ CREATE(sail_int)(&zgsz3621);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3621, INT64_C(0));
+ lbits zgsz3620;
+ CREATE(lbits)(&zgsz3620);
+ CONVERT_OF(lbits, fbits)(&zgsz3620, zperms, UINT64_C(19) , true);
+ zgaz3313 = bitvector_access(zgsz3620, zgsz3621);
+ KILL(sail_int)(&zgsz3621);
+ KILL(lbits)(&zgsz3620);
+ }
+ zgaz3314 = sailgen_bit_to_bool(zgaz3313);
+
+ }
+ struct zCapability zgsz3622;
+ zgsz3622 = zcap;
+ zgsz3622.zaccess_system_regs = zgaz3294;
+ zgsz3622.zglobal = zgaz3314;
+ zgsz3622.zpermit_cinvoke = zgaz3298;
+ zgsz3622.zpermit_execute = zgaz3312;
+ zgsz3622.zpermit_load = zgaz3310;
+ zgsz3622.zpermit_load_cap = zgaz3306;
+ zgsz3622.zpermit_seal = zgaz3300;
+ zgsz3622.zpermit_set_CID = zgaz3292;
+ zgsz3622.zpermit_store = zgaz3308;
+ zgsz3622.zpermit_store_cap = zgaz3304;
+ zgsz3622.zpermit_store_local_cap = zgaz3302;
+ zgsz3622.zpermit_unseal = zgaz3296;
+ zgsz3622.zuperms = zgaz3290;
+ zcbz347 = zgsz3622;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+end_function_185: ;
+ return zcbz347;
+end_block_exception_186: ;
+ struct zCapability zcbz368 = { .zuperms = UINT64_C(0xdeadc0de), .ztag = false, .zreserved = UINT64_C(0xdeadc0de), .zpermit_unseal = false, .zpermit_store_local_cap = false, .zpermit_store_cap = false, .zpermit_store = false, .zpermit_set_CID = false, .zpermit_seal = false, .zpermit_load_cap = false, .zpermit_load = false, .zpermit_execute = false, .zpermit_cinvoke = false, .zotype = UINT64_C(0xdeadc0de), .zinternal_E = false, .zglobal = false, .zflag_cap_mode = false, .zaddress = UINT64_C(0xdeadc0de), .zaccess_system_regs = false, .zT = UINT64_C(0xdeadc0de), .zE = UINT64_C(0xdeadc0de), .zB = UINT64_C(0xdeadc0de) };
+ return zcbz368;
+}
+
+static uint64_t sailgen_getCapFlags(struct zCapability);
+
+static uint64_t sailgen_getCapFlags(struct zCapability zcap)
+{
+ __label__ end_function_188, end_block_exception_189;
+
+ uint64_t zcbz348;
+ bool zgaz3315;
+ zgaz3315 = zcap.zflag_cap_mode;
+ zcbz348 = sailgen_bool_to_bits(zgaz3315);
+
+end_function_188: ;
+ return zcbz348;
+end_block_exception_189: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static bool sailgen_isCapSealed(struct zCapability);
+
+static bool sailgen_isCapSealed(struct zCapability zcap)
+{
+ __label__ end_function_191, end_block_exception_192;
+
+ bool zcbz349;
+ int64_t zgaz3317;
+ {
+ uint64_t zgaz3316;
+ zgaz3316 = zcap.zotype;
+ zgaz3317 = fast_signed(zgaz3316, 18);
+
+ }
+ {
+ sail_int zgsz3623;
+ CREATE(sail_int)(&zgsz3623);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3623, zgaz3317);
+ zcbz349 = sailgen_zzz3zzzz7mzzJzzKzzD1z3neq_int(zgsz3623, zotype_unsealed);
+ KILL(sail_int)(&zgsz3623);
+ }
+
+end_function_191: ;
+ return zcbz349;
+end_block_exception_192: ;
+
+ return false;
+}
+
+static bool sailgen_hasReservedOType(struct zCapability);
+
+static bool sailgen_hasReservedOType(struct zCapability zcap)
+{
+ __label__ end_function_194, end_block_exception_195;
+
+ bool zcbz350;
+ int64_t zgaz3319;
+ {
+ uint64_t zgaz3318;
+ zgaz3318 = zcap.zotype;
+ zgaz3319 = ((mach_int) zgaz3318);
+
+ }
+ {
+ sail_int zgsz3625;
+ CREATE(sail_int)(&zgsz3625);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3625, zcap_max_otype);
+ sail_int zgsz3624;
+ CREATE(sail_int)(&zgsz3624);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3624, zgaz3319);
+ zcbz350 = gt(zgsz3624, zgsz3625);
+ KILL(sail_int)(&zgsz3625);
+ KILL(sail_int)(&zgsz3624);
+ }
+
+end_function_194: ;
+ return zcbz350;
+end_block_exception_195: ;
+
+ return false;
+}
+
+static uint64_t sailgen_getCapBaseBits(struct zCapability);
+
+static uint64_t sailgen_getCapBaseBits(struct zCapability zc)
+{
+ __label__ case_198, finish_match_197, end_function_199, end_block_exception_200;
+
+ uint64_t zcbz351;
+ struct ztuple_z8z5bv64zCz0z5bvz9 zgaz3320;
+ CREATE(ztuple_z8z5bv64zCz0z5bvz9)(&zgaz3320);
+ sailgen_getCapBoundsBits(&zgaz3320, zc);
+ uint64_t zgsz3626;
+ {
+ uint64_t zbase;
+ zbase = zgaz3320.ztup0;
+ zgsz3626 = zbase;
+
+ goto finish_match_197;
+ }
+case_198: ;
+ sail_match_failure("getCapBaseBits");
+finish_match_197: ;
+ zcbz351 = zgsz3626;
+
+ KILL(ztuple_z8z5bv64zCz0z5bvz9)(&zgaz3320);
+end_function_199: ;
+ return zcbz351;
+end_block_exception_200: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_getCapOffsetBits(struct zCapability);
+
+static uint64_t sailgen_getCapOffsetBits(struct zCapability zc)
+{
+ __label__ end_function_202, end_block_exception_203;
+
+ uint64_t zcbz352;
+ uint64_t zbase;
+ zbase = sailgen_getCapBaseBits(zc);
+ uint64_t zgaz3321;
+ zgaz3321 = zc.zaddress;
+ {
+ lbits zgsz3628;
+ CREATE(lbits)(&zgsz3628);
+ CONVERT_OF(lbits, fbits)(&zgsz3628, zgaz3321, UINT64_C(64) , true);
+ lbits zgsz3629;
+ CREATE(lbits)(&zgsz3629);
+ CONVERT_OF(lbits, fbits)(&zgsz3629, zbase, UINT64_C(64) , true);
+ lbits zgsz3630;
+ CREATE(lbits)(&zgsz3630);
+ sub_bits(&zgsz3630, zgsz3628, zgsz3629);
+ zcbz352 = CONVERT_OF(fbits, lbits)(zgsz3630, true);
+ KILL(lbits)(&zgsz3630);
+ KILL(lbits)(&zgsz3629);
+ KILL(lbits)(&zgsz3628);
+ }
+
+
+end_function_202: ;
+ return zcbz352;
+end_block_exception_203: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static void sailgen_getCapLength(sail_int *rop, struct zCapability);
+
+static void sailgen_getCapLength(sail_int *zcbz353, struct zCapability zc)
+{
+ __label__ case_206, finish_match_205, end_function_207, end_block_exception_208, end_function_234;
+
+ struct ztuple_z8z5izCz0z5iz9 zgaz3322;
+ CREATE(ztuple_z8z5izCz0z5iz9)(&zgaz3322);
+ sailgen_getCapBounds(&zgaz3322, zc);
+ sail_int zgsz3631;
+ CREATE(sail_int)(&zgsz3631);
+ {
+ sail_int zbase;
+ CREATE(sail_int)(&zbase);
+ COPY(sail_int)(&zbase, zgaz3322.ztup0);
+ sail_int ztop;
+ CREATE(sail_int)(&ztop);
+ COPY(sail_int)(&ztop, zgaz3322.ztup1);
+ {
+ bool zgaz3325;
+ {
+ bool zgaz3324;
+ {
+ bool zgaz3323;
+ zgaz3323 = zc.ztag;
+ zgaz3324 = not(zgaz3323);
+
+ }
+ bool zgsz3632;
+ if (zgaz3324) { zgsz3632 = true; } else { zgsz3632 = gteq(ztop, zbase); }
+ zgaz3325 = zgsz3632;
+
+ }
+ unit zgsz3633;
+ zgsz3633 = sail_assert(zgaz3325, "src/cheri_cap_common.sail 425:40 - 425:41");
+
+ }
+ sail_int zgaz3326;
+ CREATE(sail_int)(&zgaz3326);
+ sub_int(&zgaz3326, ztop, zbase);
+ sail_int zgaz3327;
+ CREATE(sail_int)(&zgaz3327);
+ {
+ sail_int zgsz3634;
+ CREATE(sail_int)(&zgsz3634);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3634, zcap_len_width);
+ pow2(&zgaz3327, zgsz3634);
+ KILL(sail_int)(&zgsz3634);
+ }
+ emod_int(&zgsz3631, zgaz3326, zgaz3327);
+ KILL(sail_int)(&zgaz3327);
+ KILL(sail_int)(&zgaz3326);
+ KILL(sail_int)(&ztop);
+ KILL(sail_int)(&zbase);
+ goto finish_match_205;
+ }
+case_206: ;
+ sail_match_failure("getCapLength");
+finish_match_205: ;
+ COPY(sail_int)((*(&zcbz353)), zgsz3631);
+ KILL(sail_int)(&zgsz3631);
+ KILL(ztuple_z8z5izCz0z5iz9)(&zgaz3322);
+end_function_207: ;
+ goto end_function_234;
+end_block_exception_208: ;
+ goto end_function_234;
+end_function_234: ;
+}
+
+static bool sailgen_fastRepCheck(struct zCapability, uint64_t);
+
+static bool sailgen_fastRepCheck(struct zCapability zc, uint64_t zi)
+{
+ __label__ end_function_210, end_block_exception_211;
+
+ bool zcbz354;
+ int64_t zE;
+ {
+ uint64_t zgaz3341;
+ zgaz3341 = zc.zE;
+ zE = ((mach_int) zgaz3341);
+
+ }
+ bool zgaz3329;
+ {
+ int64_t zgaz3328;
+ {
+ sail_int zgsz3636;
+ CREATE(sail_int)(&zgsz3636);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3636, zcap_max_E);
+ sail_int zgsz3637;
+ CREATE(sail_int)(&zgsz3637);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3637, INT64_C(2));
+ sail_int zgsz3638;
+ CREATE(sail_int)(&zgsz3638);
+ sub_int(&zgsz3638, zgsz3636, zgsz3637);
+ zgaz3328 = CONVERT_OF(mach_int, sail_int)(zgsz3638);
+ KILL(sail_int)(&zgsz3638);
+ KILL(sail_int)(&zgsz3637);
+ KILL(sail_int)(&zgsz3636);
+ }
+ {
+ sail_int zgsz3640;
+ CREATE(sail_int)(&zgsz3640);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3640, zgaz3328);
+ sail_int zgsz3639;
+ CREATE(sail_int)(&zgsz3639);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3639, zE);
+ zgaz3329 = gteq(zgsz3639, zgsz3640);
+ KILL(sail_int)(&zgsz3640);
+ KILL(sail_int)(&zgsz3639);
+ }
+
+ }
+ if (zgaz3329) { zcbz354 = true; } else {
+ int64_t zi_top;
+ {
+ uint64_t zgaz3340;
+ {
+ int64_t zgaz3339;
+ {
+ sail_int zgsz3641;
+ CREATE(sail_int)(&zgsz3641);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3641, zE);
+ sail_int zgsz3642;
+ CREATE(sail_int)(&zgsz3642);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3642, zcap_mantissa_width);
+ sail_int zgsz3643;
+ CREATE(sail_int)(&zgsz3643);
+ add_int(&zgsz3643, zgsz3641, zgsz3642);
+ zgaz3339 = CONVERT_OF(mach_int, sail_int)(zgsz3643);
+ KILL(sail_int)(&zgsz3643);
+ KILL(sail_int)(&zgsz3642);
+ KILL(sail_int)(&zgsz3641);
+ }
+ {
+ lbits zgsz3644;
+ CREATE(lbits)(&zgsz3644);
+ CONVERT_OF(lbits, fbits)(&zgsz3644, zi, UINT64_C(64) , true);
+ sail_int zgsz3645;
+ CREATE(sail_int)(&zgsz3645);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3645, zgaz3339);
+ lbits zgsz3646;
+ CREATE(lbits)(&zgsz3646);
+ arith_shiftr(&zgsz3646, zgsz3644, zgsz3645);
+ zgaz3340 = CONVERT_OF(fbits, lbits)(zgsz3646, true);
+ KILL(lbits)(&zgsz3646);
+ KILL(sail_int)(&zgsz3645);
+ KILL(lbits)(&zgsz3644);
+ }
+
+ }
+ zi_top = fast_signed(zgaz3340, 64);
+
+ }
+ uint64_t zi_mid;
+ {
+ uint64_t zgaz3338;
+ {
+ lbits zgsz3647;
+ CREATE(lbits)(&zgsz3647);
+ CONVERT_OF(lbits, fbits)(&zgsz3647, zi, UINT64_C(64) , true);
+ sail_int zgsz3648;
+ CREATE(sail_int)(&zgsz3648);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3648, zE);
+ lbits zgsz3649;
+ CREATE(lbits)(&zgsz3649);
+ shiftr(&zgsz3649, zgsz3647, zgsz3648);
+ zgaz3338 = CONVERT_OF(fbits, lbits)(zgsz3649, true);
+ KILL(lbits)(&zgsz3649);
+ KILL(sail_int)(&zgsz3648);
+ KILL(lbits)(&zgsz3647);
+ }
+ {
+ lbits zgsz3650;
+ CREATE(lbits)(&zgsz3650);
+ CONVERT_OF(lbits, fbits)(&zgsz3650, zgaz3338, UINT64_C(64) , true);
+ sail_int zgsz3651;
+ CREATE(sail_int)(&zgsz3651);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3651, zcap_mantissa_width);
+ lbits zgsz3652;
+ CREATE(lbits)(&zgsz3652);
+ sail_truncate(&zgsz3652, zgsz3650, zgsz3651);
+ zi_mid = CONVERT_OF(fbits, lbits)(zgsz3652, true);
+ KILL(lbits)(&zgsz3652);
+ KILL(sail_int)(&zgsz3651);
+ KILL(lbits)(&zgsz3650);
+ }
+
+ }
+ uint64_t za_mid;
+ {
+ uint64_t zgaz3337;
+ {
+ uint64_t zgaz3336;
+ zgaz3336 = zc.zaddress;
+ {
+ lbits zgsz3653;
+ CREATE(lbits)(&zgsz3653);
+ CONVERT_OF(lbits, fbits)(&zgsz3653, zgaz3336, UINT64_C(64) , true);
+ sail_int zgsz3654;
+ CREATE(sail_int)(&zgsz3654);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3654, zE);
+ lbits zgsz3655;
+ CREATE(lbits)(&zgsz3655);
+ shiftr(&zgsz3655, zgsz3653, zgsz3654);
+ zgaz3337 = CONVERT_OF(fbits, lbits)(zgsz3655, true);
+ KILL(lbits)(&zgsz3655);
+ KILL(sail_int)(&zgsz3654);
+ KILL(lbits)(&zgsz3653);
+ }
+
+ }
+ {
+ lbits zgsz3656;
+ CREATE(lbits)(&zgsz3656);
+ CONVERT_OF(lbits, fbits)(&zgsz3656, zgaz3337, UINT64_C(64) , true);
+ sail_int zgsz3657;
+ CREATE(sail_int)(&zgsz3657);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3657, zcap_mantissa_width);
+ lbits zgsz3658;
+ CREATE(lbits)(&zgsz3658);
+ sail_truncate(&zgsz3658, zgsz3656, zgsz3657);
+ za_mid = CONVERT_OF(fbits, lbits)(zgsz3658, true);
+ KILL(lbits)(&zgsz3658);
+ KILL(sail_int)(&zgsz3657);
+ KILL(lbits)(&zgsz3656);
+ }
+
+ }
+ uint64_t zB3;
+ {
+ uint64_t zgaz3335;
+ zgaz3335 = zc.zB;
+ {
+ lbits zgsz3659;
+ CREATE(lbits)(&zgsz3659);
+ CONVERT_OF(lbits, fbits)(&zgsz3659, zgaz3335, UINT64_C(14) , true);
+ sail_int zgsz3660;
+ CREATE(sail_int)(&zgsz3660);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3660, INT64_C(3));
+ lbits zgsz3661;
+ CREATE(lbits)(&zgsz3661);
+ sail_truncateLSB(&zgsz3661, zgsz3659, zgsz3660);
+ zB3 = CONVERT_OF(fbits, lbits)(zgsz3661, true);
+ KILL(lbits)(&zgsz3661);
+ KILL(sail_int)(&zgsz3660);
+ KILL(lbits)(&zgsz3659);
+ }
+
+ }
+ uint64_t zR3;
+ {
+ lbits zgsz3662;
+ CREATE(lbits)(&zgsz3662);
+ CONVERT_OF(lbits, fbits)(&zgsz3662, zB3, UINT64_C(3) , true);
+ lbits zgsz3663;
+ CREATE(lbits)(&zgsz3663);
+ CONVERT_OF(lbits, fbits)(&zgsz3663, UINT64_C(0b001), UINT64_C(3) , true);
+ lbits zgsz3664;
+ CREATE(lbits)(&zgsz3664);
+ sub_bits(&zgsz3664, zgsz3662, zgsz3663);
+ zR3 = CONVERT_OF(fbits, lbits)(zgsz3664, true);
+ KILL(lbits)(&zgsz3664);
+ KILL(lbits)(&zgsz3663);
+ KILL(lbits)(&zgsz3662);
+ }
+ uint64_t zR;
+ {
+ uint64_t zgaz3334;
+ {
+ int64_t zgaz3333;
+ {
+ sail_int zgsz3665;
+ CREATE(sail_int)(&zgsz3665);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3665, zcap_mantissa_width);
+ sail_int zgsz3666;
+ CREATE(sail_int)(&zgsz3666);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3666, INT64_C(3));
+ sail_int zgsz3667;
+ CREATE(sail_int)(&zgsz3667);
+ sub_int(&zgsz3667, zgsz3665, zgsz3666);
+ zgaz3333 = CONVERT_OF(mach_int, sail_int)(zgsz3667);
+ KILL(sail_int)(&zgsz3667);
+ KILL(sail_int)(&zgsz3666);
+ KILL(sail_int)(&zgsz3665);
+ }
+ zgaz3334 = sailgen_zzzz7nzzJzzK11z3zzeros_implicit(zgaz3333);
+
+ }
+ {
+ lbits zgsz3668;
+ CREATE(lbits)(&zgsz3668);
+ CONVERT_OF(lbits, fbits)(&zgsz3668, zR3, UINT64_C(3) , true);
+ lbits zgsz3669;
+ CREATE(lbits)(&zgsz3669);
+ CONVERT_OF(lbits, fbits)(&zgsz3669, zgaz3334, UINT64_C(11) , true);
+ lbits zgsz3670;
+ CREATE(lbits)(&zgsz3670);
+ append(&zgsz3670, zgsz3668, zgsz3669);
+ zR = CONVERT_OF(fbits, lbits)(zgsz3670, true);
+ KILL(lbits)(&zgsz3670);
+ KILL(lbits)(&zgsz3669);
+ KILL(lbits)(&zgsz3668);
+ }
+
+ }
+ uint64_t zdiff;
+ {
+ lbits zgsz3671;
+ CREATE(lbits)(&zgsz3671);
+ CONVERT_OF(lbits, fbits)(&zgsz3671, zR, UINT64_C(14) , true);
+ lbits zgsz3672;
+ CREATE(lbits)(&zgsz3672);
+ CONVERT_OF(lbits, fbits)(&zgsz3672, za_mid, UINT64_C(14) , true);
+ lbits zgsz3673;
+ CREATE(lbits)(&zgsz3673);
+ sub_bits(&zgsz3673, zgsz3671, zgsz3672);
+ zdiff = CONVERT_OF(fbits, lbits)(zgsz3673, true);
+ KILL(lbits)(&zgsz3673);
+ KILL(lbits)(&zgsz3672);
+ KILL(lbits)(&zgsz3671);
+ }
+ uint64_t zdiff1;
+ {
+ lbits zgsz3674;
+ CREATE(lbits)(&zgsz3674);
+ CONVERT_OF(lbits, fbits)(&zgsz3674, zdiff, UINT64_C(14) , true);
+ sail_int zgsz3675;
+ CREATE(sail_int)(&zgsz3675);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3675, INT64_C(1));
+ lbits zgsz3676;
+ CREATE(lbits)(&zgsz3676);
+ sub_bits_int(&zgsz3676, zgsz3674, zgsz3675);
+ zdiff1 = CONVERT_OF(fbits, lbits)(zgsz3676, true);
+ KILL(lbits)(&zgsz3676);
+ KILL(sail_int)(&zgsz3675);
+ KILL(lbits)(&zgsz3674);
+ }
+ bool zgaz3330;
+ {
+ sail_int zgsz3678;
+ CREATE(sail_int)(&zgsz3678);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3678, INT64_C(0));
+ sail_int zgsz3677;
+ CREATE(sail_int)(&zgsz3677);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3677, zi_top);
+ zgaz3330 = eq_int(zgsz3677, zgsz3678);
+ KILL(sail_int)(&zgsz3678);
+ KILL(sail_int)(&zgsz3677);
+ }
+ if (zgaz3330) { zcbz354 = sailgen_z8operatorz0zzzz7nzzJzzK14z3zI_uz9(zi_mid, zdiff1); } else {
+ bool zgaz3331;
+ {
+ sail_int zgsz3680;
+ CREATE(sail_int)(&zgsz3680);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3680, INT64_C(-1));
+ sail_int zgsz3679;
+ CREATE(sail_int)(&zgsz3679);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3679, zi_top);
+ zgaz3331 = eq_int(zgsz3679, zgsz3680);
+ KILL(sail_int)(&zgsz3680);
+ KILL(sail_int)(&zgsz3679);
+ }
+ if (zgaz3331) {
+ bool zgaz3332;
+ zgaz3332 = sailgen_z8operatorz0zzzz7nzzJzzK14z3zKzJ_uz9(zi_mid, zdiff);
+ bool zgsz3681;
+ if (zgaz3332) {
+ {
+ lbits zgsz3683;
+ CREATE(lbits)(&zgsz3683);
+ CONVERT_OF(lbits, fbits)(&zgsz3683, za_mid, UINT64_C(14) , true);
+ lbits zgsz3682;
+ CREATE(lbits)(&zgsz3682);
+ CONVERT_OF(lbits, fbits)(&zgsz3682, zR, UINT64_C(14) , true);
+ zgsz3681 = neq_bits(zgsz3682, zgsz3683);
+ KILL(lbits)(&zgsz3683);
+ KILL(lbits)(&zgsz3682);
+ }
+ } else { zgsz3681 = false; }
+ zcbz354 = zgsz3681;
+
+ } else { zcbz354 = false; }
+
+ }
+
+
+
+
+
+
+
+
+
+ }
+
+
+end_function_210: ;
+ return zcbz354;
+end_block_exception_211: ;
+
+ return false;
+}
+
+static void sailgen_capToString(sail_string *rop, struct zCapability);
+
+static void sailgen_capToString(sail_string *zcbz355, struct zCapability zcap)
+{
+ __label__ end_function_213, end_block_exception_214, end_function_233;
+
+ sail_int zlen;
+ CREATE(sail_int)(&zlen);
+ sailgen_getCapLength(&zlen, zcap);
+ if (have_exception) {
+ KILL(sail_int)(&zlen);
+ goto end_block_exception_214;
+ }
+ sail_string zlen_str;
+ CREATE(sail_string)(&zlen_str);
+ {
+ lbits zgaz3370;
+ CREATE(lbits)(&zgaz3370);
+ {
+ int64_t zgaz3369;
+ {
+ sail_int zgsz3684;
+ CREATE(sail_int)(&zgsz3684);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3684, zcap_len_width);
+ sail_int zgsz3685;
+ CREATE(sail_int)(&zgsz3685);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3685, INT64_C(3));
+ sail_int zgsz3686;
+ CREATE(sail_int)(&zgsz3686);
+ add_int(&zgsz3686, zgsz3684, zgsz3685);
+ zgaz3369 = CONVERT_OF(mach_int, sail_int)(zgsz3686);
+ KILL(sail_int)(&zgsz3686);
+ KILL(sail_int)(&zgsz3685);
+ KILL(sail_int)(&zgsz3684);
+ }
+ sailgen_zzzz7lzzJzzK68z3to_bits(&zgaz3370, zgaz3369, zlen);
+
+ }
+ string_of_lbits(&zlen_str, zgaz3370);
+ KILL(lbits)(&zgaz3370);
+ }
+ uint64_t zotype64;
+ {
+ bool zgaz3366;
+ zgaz3366 = sailgen_hasReservedOType(zcap);
+ if (zgaz3366) {
+ uint64_t zgaz3367;
+ zgaz3367 = zcap.zotype;
+ zotype64 = sailgen_zzzz7mzzJzzK64zzCzz0zz7nzzJzzK18z3EXTS(INT64_C(64), zgaz3367);
+
+ } else {
+ uint64_t zgaz3368;
+ zgaz3368 = zcap.zotype;
+ zotype64 = sailgen_zzzz7mzzJzzK64zzCzz0zz7nzzJzzK18z3EXTZ(INT64_C(64), zgaz3368);
+
+ }
+
+ }
+ sail_string zgaz3365;
+ CREATE(sail_string)(&zgaz3365);
+ {
+ sail_string zgaz3363;
+ CREATE(sail_string)(&zgaz3363);
+ {
+ bool zgaz3342;
+ zgaz3342 = zcap.ztag;
+ if (zgaz3342) { COPY(sail_string)(&zgaz3363, "1"); } else { COPY(sail_string)(&zgaz3363, "0"); }
+
+ }
+ sail_string zgaz3364;
+ CREATE(sail_string)(&zgaz3364);
+ {
+ sail_string zgaz3362;
+ CREATE(sail_string)(&zgaz3362);
+ {
+ sail_string zgaz3360;
+ CREATE(sail_string)(&zgaz3360);
+ {
+ bool zgaz3343;
+ zgaz3343 = sailgen_isCapSealed(zcap);
+ if (zgaz3343) { COPY(sail_string)(&zgaz3360, "1"); } else { COPY(sail_string)(&zgaz3360, "0"); }
+
+ }
+ sail_string zgaz3361;
+ CREATE(sail_string)(&zgaz3361);
+ {
+ sail_string zgaz3359;
+ CREATE(sail_string)(&zgaz3359);
+ {
+ sail_string zgaz3357;
+ CREATE(sail_string)(&zgaz3357);
+ {
+ uint64_t zgaz3345;
+ {
+ uint64_t zgaz3344;
+ zgaz3344 = sailgen_getCapPerms(zcap);
+ {
+ lbits zgsz3687;
+ CREATE(lbits)(&zgsz3687);
+ CONVERT_OF(lbits, fbits)(&zgsz3687, UINT64_C(0b0), UINT64_C(1) , true);
+ lbits zgsz3688;
+ CREATE(lbits)(&zgsz3688);
+ CONVERT_OF(lbits, fbits)(&zgsz3688, zgaz3344, UINT64_C(19) , true);
+ lbits zgsz3689;
+ CREATE(lbits)(&zgsz3689);
+ append(&zgsz3689, zgsz3687, zgsz3688);
+ zgaz3345 = CONVERT_OF(fbits, lbits)(zgsz3689, true);
+ KILL(lbits)(&zgsz3689);
+ KILL(lbits)(&zgsz3688);
+ KILL(lbits)(&zgsz3687);
+ }
+
+ }
+ {
+ lbits zgsz3690;
+ CREATE(lbits)(&zgsz3690);
+ CONVERT_OF(lbits, fbits)(&zgsz3690, zgaz3345, UINT64_C(20) , true);
+ string_of_lbits(&zgaz3357, zgsz3690);
+ KILL(lbits)(&zgsz3690);
+ }
+
+ }
+ sail_string zgaz3358;
+ CREATE(sail_string)(&zgaz3358);
+ {
+ sail_string zgaz3356;
+ CREATE(sail_string)(&zgaz3356);
+ {
+ sail_string zgaz3354;
+ CREATE(sail_string)(&zgaz3354);
+ {
+ lbits zgsz3691;
+ CREATE(lbits)(&zgsz3691);
+ CONVERT_OF(lbits, fbits)(&zgsz3691, zotype64, UINT64_C(64) , true);
+ string_of_lbits(&zgaz3354, zgsz3691);
+ KILL(lbits)(&zgsz3691);
+ }
+ sail_string zgaz3355;
+ CREATE(sail_string)(&zgaz3355);
+ {
+ sail_string zgaz3353;
+ CREATE(sail_string)(&zgaz3353);
+ {
+ sail_string zgaz3351;
+ CREATE(sail_string)(&zgaz3351);
+ {
+ uint64_t zgaz3346;
+ zgaz3346 = sailgen_getCapOffsetBits(zcap);
+ {
+ lbits zgsz3692;
+ CREATE(lbits)(&zgsz3692);
+ CONVERT_OF(lbits, fbits)(&zgsz3692, zgaz3346, UINT64_C(64) , true);
+ string_of_lbits(&zgaz3351, zgsz3692);
+ KILL(lbits)(&zgsz3692);
+ }
+
+ }
+ sail_string zgaz3352;
+ CREATE(sail_string)(&zgaz3352);
+ {
+ sail_string zgaz3350;
+ CREATE(sail_string)(&zgaz3350);
+ {
+ sail_string zgaz3348;
+ CREATE(sail_string)(&zgaz3348);
+ {
+ uint64_t zgaz3347;
+ zgaz3347 = sailgen_getCapBaseBits(zcap);
+ {
+ lbits zgsz3693;
+ CREATE(lbits)(&zgsz3693);
+ CONVERT_OF(lbits, fbits)(&zgsz3693, zgaz3347, UINT64_C(64) , true);
+ string_of_lbits(&zgaz3348, zgsz3693);
+ KILL(lbits)(&zgsz3693);
+ }
+
+ }
+ sail_string zgaz3349;
+ CREATE(sail_string)(&zgaz3349);
+ concat_str(&zgaz3349, " length:", zlen_str);
+ concat_str(&zgaz3350, zgaz3348, zgaz3349);
+ KILL(sail_string)(&zgaz3349);
+ KILL(sail_string)(&zgaz3348);
+ }
+ concat_str(&zgaz3352, " base:", zgaz3350);
+ KILL(sail_string)(&zgaz3350);
+ }
+ concat_str(&zgaz3353, zgaz3351, zgaz3352);
+ KILL(sail_string)(&zgaz3352);
+ KILL(sail_string)(&zgaz3351);
+ }
+ concat_str(&zgaz3355, " offset:", zgaz3353);
+ KILL(sail_string)(&zgaz3353);
+ }
+ concat_str(&zgaz3356, zgaz3354, zgaz3355);
+ KILL(sail_string)(&zgaz3355);
+ KILL(sail_string)(&zgaz3354);
+ }
+ concat_str(&zgaz3358, " type:", zgaz3356);
+ KILL(sail_string)(&zgaz3356);
+ }
+ concat_str(&zgaz3359, zgaz3357, zgaz3358);
+ KILL(sail_string)(&zgaz3358);
+ KILL(sail_string)(&zgaz3357);
+ }
+ concat_str(&zgaz3361, " perms:", zgaz3359);
+ KILL(sail_string)(&zgaz3359);
+ }
+ concat_str(&zgaz3362, zgaz3360, zgaz3361);
+ KILL(sail_string)(&zgaz3361);
+ KILL(sail_string)(&zgaz3360);
+ }
+ concat_str(&zgaz3364, " s:", zgaz3362);
+ KILL(sail_string)(&zgaz3362);
+ }
+ concat_str(&zgaz3365, zgaz3363, zgaz3364);
+ KILL(sail_string)(&zgaz3364);
+ KILL(sail_string)(&zgaz3363);
+ }
+ concat_str((*(&zcbz355)), " t:", zgaz3365);
+ KILL(sail_string)(&zgaz3365);
+
+ KILL(sail_string)(&zlen_str);
+ KILL(sail_int)(&zlen);
+end_function_213: ;
+ goto end_function_233;
+end_block_exception_214: ;
+ goto end_function_233;
+end_function_233: ;
+}
+
+static uint64_t sailgen_getRepresentableAlignmentMask(uint64_t);
+
+static uint64_t sailgen_getRepresentableAlignmentMask(uint64_t zlen)
+{
+ __label__ case_217, finish_match_216, end_function_218, end_block_exception_219;
+
+ uint64_t zcbz356;
+ struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 zgaz3373;
+ {
+ uint64_t zgaz3371;
+ {
+ sail_int zgsz3694;
+ CREATE(sail_int)(&zgsz3694);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3694, INT64_C(64));
+ sail_int zgsz3695;
+ CREATE(sail_int)(&zgsz3695);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3695, INT64_C(0));
+ lbits zgsz3696;
+ CREATE(lbits)(&zgsz3696);
+ sailgen_to_bits(&zgsz3696, zgsz3694, zgsz3695);
+ zgaz3371 = CONVERT_OF(fbits, lbits)(zgsz3696, true);
+ KILL(lbits)(&zgsz3696);
+ KILL(sail_int)(&zgsz3695);
+ KILL(sail_int)(&zgsz3694);
+ }
+ lbits zgaz3372;
+ CREATE(lbits)(&zgaz3372);
+ {
+ lbits zgsz3698;
+ CREATE(lbits)(&zgsz3698);
+ CONVERT_OF(lbits, fbits)(&zgsz3698, zlen, UINT64_C(64) , true);
+ lbits zgsz3697;
+ CREATE(lbits)(&zgsz3697);
+ CONVERT_OF(lbits, fbits)(&zgsz3697, UINT64_C(0b0), UINT64_C(1) , true);
+ append(&zgaz3372, zgsz3697, zgsz3698);
+ KILL(lbits)(&zgsz3698);
+ KILL(lbits)(&zgsz3697);
+ }
+ zgaz3373 = sailgen_setCapBounds(zdefault_cap, zgaz3371, zgaz3372);
+ KILL(lbits)(&zgaz3372);
+
+ }
+ uint64_t zgsz3699;
+ {
+ bool zexact;
+ zexact = zgaz3373.ztup0;
+ struct zCapability zc;
+ zc = zgaz3373.ztup1;
+ int64_t ze;
+ {
+ int64_t zgaz3379;
+ {
+ uint64_t zgaz3378;
+ zgaz3378 = zc.zE;
+ zgaz3379 = ((mach_int) zgaz3378);
+
+ }
+ {
+ sail_int zgsz3700;
+ CREATE(sail_int)(&zgsz3700);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3700, zgaz3379);
+ sail_int zgsz3701;
+ CREATE(sail_int)(&zgsz3701);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3701, zcap_max_E);
+ sail_int zgsz3702;
+ CREATE(sail_int)(&zgsz3702);
+ min_int(&zgsz3702, zgsz3700, zgsz3701);
+ ze = CONVERT_OF(mach_int, sail_int)(zgsz3702);
+ KILL(sail_int)(&zgsz3702);
+ KILL(sail_int)(&zgsz3701);
+ KILL(sail_int)(&zgsz3700);
+ }
+
+ }
+ int64_t zez7;
+ {
+ bool zgaz3377;
+ zgaz3377 = zc.zinternal_E;
+ if (zgaz3377) {
+ {
+ sail_int zgsz3703;
+ CREATE(sail_int)(&zgsz3703);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3703, ze);
+ sail_int zgsz3704;
+ CREATE(sail_int)(&zgsz3704);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3704, zinternal_E_take_bits);
+ sail_int zgsz3705;
+ CREATE(sail_int)(&zgsz3705);
+ add_int(&zgsz3705, zgsz3703, zgsz3704);
+ zez7 = CONVERT_OF(mach_int, sail_int)(zgsz3705);
+ KILL(sail_int)(&zgsz3705);
+ KILL(sail_int)(&zgsz3704);
+ KILL(sail_int)(&zgsz3703);
+ }
+ } else { zez7 = INT64_C(0); }
+
+ }
+ sbits zgaz3375;
+ {
+ int64_t zgaz3374;
+ {
+ sail_int zgsz3706;
+ CREATE(sail_int)(&zgsz3706);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3706, INT64_C(64));
+ sail_int zgsz3707;
+ CREATE(sail_int)(&zgsz3707);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3707, zez7);
+ sail_int zgsz3708;
+ CREATE(sail_int)(&zgsz3708);
+ sub_int(&zgsz3708, zgsz3706, zgsz3707);
+ zgaz3374 = CONVERT_OF(mach_int, sail_int)(zgsz3708);
+ KILL(sail_int)(&zgsz3708);
+ KILL(sail_int)(&zgsz3707);
+ KILL(sail_int)(&zgsz3706);
+ }
+ {
+ sail_int zgsz3709;
+ CREATE(sail_int)(&zgsz3709);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3709, zgaz3374);
+ lbits zgsz3710;
+ CREATE(lbits)(&zgsz3710);
+ sailgen_zzz3zzz3ones(&zgsz3710, zgsz3709);
+ zgaz3375 = CONVERT_OF(sbits, lbits)(zgsz3710, true);
+ KILL(lbits)(&zgsz3710);
+ KILL(sail_int)(&zgsz3709);
+ }
+
+ }
+ sbits zgaz3376;
+ {
+ sail_int zgsz3711;
+ CREATE(sail_int)(&zgsz3711);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3711, zez7);
+ lbits zgsz3712;
+ CREATE(lbits)(&zgsz3712);
+ sailgen_zzz3zzz3zzeros_implicit(&zgsz3712, zgsz3711);
+ zgaz3376 = CONVERT_OF(sbits, lbits)(zgsz3712, true);
+ KILL(lbits)(&zgsz3712);
+ KILL(sail_int)(&zgsz3711);
+ }
+ {
+ lbits zgsz3714;
+ CREATE(lbits)(&zgsz3714);
+ CONVERT_OF(lbits, sbits)(&zgsz3714, zgaz3375, true);
+ lbits zgsz3715;
+ CREATE(lbits)(&zgsz3715);
+ CONVERT_OF(lbits, sbits)(&zgsz3715, zgaz3376, true);
+ lbits zgsz3716;
+ CREATE(lbits)(&zgsz3716);
+ append(&zgsz3716, zgsz3714, zgsz3715);
+ zgsz3699 = CONVERT_OF(fbits, lbits)(zgsz3716, true);
+ KILL(lbits)(&zgsz3716);
+ KILL(lbits)(&zgsz3715);
+ KILL(lbits)(&zgsz3714);
+ }
+
+
+
+
+
+
+ goto finish_match_216;
+ }
+case_217: ;
+ sail_match_failure("getRepresentableAlignmentMask");
+finish_match_216: ;
+ zcbz356 = zgsz3699;
+
+
+end_function_218: ;
+ return zcbz356;
+end_block_exception_219: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_getRepresentableLength(uint64_t);
+
+static uint64_t sailgen_getRepresentableLength(uint64_t zlen)
+{
+ __label__ end_function_221, end_block_exception_222;
+
+ uint64_t zcbz357;
+ uint64_t zm;
+ zm = sailgen_getRepresentableAlignmentMask(zlen);
+ uint64_t zgaz3381;
+ {
+ uint64_t zgaz3380;
+ {
+ lbits zgsz3717;
+ CREATE(lbits)(&zgsz3717);
+ CONVERT_OF(lbits, fbits)(&zgsz3717, zm, UINT64_C(64) , true);
+ lbits zgsz3718;
+ CREATE(lbits)(&zgsz3718);
+ not_bits(&zgsz3718, zgsz3717);
+ zgaz3380 = CONVERT_OF(fbits, lbits)(zgsz3718, true);
+ KILL(lbits)(&zgsz3718);
+ KILL(lbits)(&zgsz3717);
+ }
+ {
+ lbits zgsz3719;
+ CREATE(lbits)(&zgsz3719);
+ CONVERT_OF(lbits, fbits)(&zgsz3719, zlen, UINT64_C(64) , true);
+ lbits zgsz3720;
+ CREATE(lbits)(&zgsz3720);
+ CONVERT_OF(lbits, fbits)(&zgsz3720, zgaz3380, UINT64_C(64) , true);
+ lbits zgsz3721;
+ CREATE(lbits)(&zgsz3721);
+ add_bits(&zgsz3721, zgsz3719, zgsz3720);
+ zgaz3381 = CONVERT_OF(fbits, lbits)(zgsz3721, true);
+ KILL(lbits)(&zgsz3721);
+ KILL(lbits)(&zgsz3720);
+ KILL(lbits)(&zgsz3719);
+ }
+
+ }
+ {
+ lbits zgsz3722;
+ CREATE(lbits)(&zgsz3722);
+ CONVERT_OF(lbits, fbits)(&zgsz3722, zgaz3381, UINT64_C(64) , true);
+ lbits zgsz3723;
+ CREATE(lbits)(&zgsz3723);
+ CONVERT_OF(lbits, fbits)(&zgsz3723, zm, UINT64_C(64) , true);
+ lbits zgsz3724;
+ CREATE(lbits)(&zgsz3724);
+ and_bits(&zgsz3724, zgsz3722, zgsz3723);
+ zcbz357 = CONVERT_OF(fbits, lbits)(zgsz3724, true);
+ KILL(lbits)(&zgsz3724);
+ KILL(lbits)(&zgsz3723);
+ KILL(lbits)(&zgsz3722);
+ }
+
+
+end_function_221: ;
+ return zcbz357;
+end_block_exception_222: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+// register TestCap
+static struct zCapability zTestCap;
+
+// register TestAddr
+static uint64_t zTestAddr;
+
+// register TestLen
+static lbits zTestLen;
+
+static unit sailgen_main(unit);
+
+
+static unit sailgen_main(unit zgsz3725)
+{
+ __label__ end_function_228, end_block_exception_229;
+
+ unit zcbz358;
+ {
+ zTestCap = znull_cap;
+ unit zgsz3726;
+ zgsz3726 = UNIT;
+ }
+ lbits zbits1;
+ CREATE(lbits)(&zbits1);
+ sailgen_capToBits(&zbits1, zTestCap);
+ lbits zbits2;
+ CREATE(lbits)(&zbits2);
+ sailgen_capToMemBits(&zbits2, zTestCap);
+ struct zCapability zcap1;
+ {
+ bool zgaz3387;
+ zgaz3387 = zTestCap.ztag;
+ zcap1 = sailgen_capBitsToCapability(zgaz3387, zbits1);
+
+ }
+ struct zCapability zcap2;
+ {
+ bool zgaz3386;
+ zgaz3386 = zTestCap.ztag;
+ zcap2 = sailgen_memBitsToCapability(zgaz3386, zbits2);
+
+ }
+ bool zrep;
+ zrep = sailgen_fastRepCheck(zTestCap, zTestAddr);
+ {
+ __label__ case_225, finish_match_224;
+
+ struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 zgaz3382;
+ zgaz3382 = sailgen_setCapBounds(zTestCap, zTestAddr, zTestLen);
+ unit zgsz3727;
+ {
+ bool ztup__0;
+ ztup__0 = zgaz3382.ztup0;
+ struct zCapability ztup__1;
+ ztup__1 = zgaz3382.ztup1;
+ bool zexact;
+ zexact = ztup__0;
+ struct zCapability zcap;
+ zcap = ztup__1;
+ zgsz3727 = UNIT;
+
+
+
+
+ goto finish_match_224;
+ }
+ case_225: ;
+ sail_match_failure("main");
+ finish_match_224: ;
+ unit zgsz3732;
+ zgsz3732 = zgsz3727;
+
+
+ }
+ {
+ __label__ case_227, finish_match_226;
+
+ struct ztuple_z8z5izCz0z5iz9 zgaz3383;
+ CREATE(ztuple_z8z5izCz0z5iz9)(&zgaz3383);
+ sailgen_getCapBounds(&zgaz3383, zTestCap);
+ unit zgsz3729;
+ {
+ sail_int ztup__0;
+ CREATE(sail_int)(&ztup__0);
+ COPY(sail_int)(&ztup__0, zgaz3383.ztup0);
+ sail_int ztup__1;
+ CREATE(sail_int)(&ztup__1);
+ COPY(sail_int)(&ztup__1, zgaz3383.ztup1);
+ sail_int zbase;
+ CREATE(sail_int)(&zbase);
+ COPY(sail_int)(&zbase, ztup__0);
+ sail_int ztop;
+ CREATE(sail_int)(&ztop);
+ COPY(sail_int)(&ztop, ztup__1);
+ zgsz3729 = UNIT;
+ KILL(sail_int)(&ztop);
+ KILL(sail_int)(&zbase);
+ KILL(sail_int)(&ztup__1);
+ KILL(sail_int)(&ztup__0);
+ goto finish_match_226;
+ }
+ case_227: ;
+ sail_match_failure("main");
+ finish_match_226: ;
+ unit zgsz3731;
+ zgsz3731 = zgsz3729;
+
+ KILL(ztuple_z8z5izCz0z5iz9)(&zgaz3383);
+ }
+ uint64_t zflags;
+ zflags = sailgen_getCapFlags(zTestCap);
+ struct zCapability znew_cap;
+ {
+ uint64_t zgaz3385;
+ {
+ int64_t zgaz3384;
+ {
+ sail_int zgsz3733;
+ CREATE(sail_int)(&zgsz3733);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3733, INT64_C(15));
+ sail_int zgsz3734;
+ CREATE(sail_int)(&zgsz3734);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3734, INT64_C(4));
+ sail_int zgsz3735;
+ CREATE(sail_int)(&zgsz3735);
+ add_int(&zgsz3735, zgsz3733, zgsz3734);
+ zgaz3384 = CONVERT_OF(mach_int, sail_int)(zgsz3735);
+ KILL(sail_int)(&zgsz3735);
+ KILL(sail_int)(&zgsz3734);
+ KILL(sail_int)(&zgsz3733);
+ }
+ {
+ sail_int zgsz3736;
+ CREATE(sail_int)(&zgsz3736);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3736, zgaz3384);
+ lbits zgsz3737;
+ CREATE(lbits)(&zgsz3737);
+ sailgen_zzz3zzz3ones(&zgsz3737, zgsz3736);
+ zgaz3385 = CONVERT_OF(fbits, lbits)(zgsz3737, true);
+ KILL(lbits)(&zgsz3737);
+ KILL(sail_int)(&zgsz3736);
+ }
+
+ }
+ znew_cap = sailgen_setCapPerms(zTestCap, zgaz3385);
+
+ }
+ sail_string zcap_str;
+ CREATE(sail_string)(&zcap_str);
+ sailgen_capToString(&zcap_str, zTestCap);
+ if (have_exception) {
+ KILL(lbits)(&zbits1);
+ KILL(lbits)(&zbits2);
+
+
+
+
+
+ KILL(sail_string)(&zcap_str);
+ goto end_block_exception_229;
+ }
+ uint64_t zlen;
+ zlen = sailgen_getRepresentableLength(zTestAddr);
+ uint64_t zmask;
+ zmask = sailgen_getRepresentableAlignmentMask(zTestAddr);
+ zcbz358 = UNIT;
+
+
+ KILL(sail_string)(&zcap_str);
+
+
+
+
+
+ KILL(lbits)(&zbits2);
+ KILL(lbits)(&zbits1);
+end_function_228: ;
+ return zcbz358;
+end_block_exception_229: ;
+
+ return UNIT;
+}
+
+static unit sailgen_initializze_registers(unit);
+
+static unit sailgen_initializze_registers(unit zgsz3738)
+{
+ __label__ end_function_231, end_block_exception_232;
+
+ unit zcbz359;
+ {
+ zTestCap = sailgen_undefined_Capability(UNIT);
+ unit zgsz3742;
+ zgsz3742 = UNIT;
+ }
+ {
+ {
+ sail_int zgsz3739;
+ CREATE(sail_int)(&zgsz3739);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3739, INT64_C(64));
+ lbits zgsz3740;
+ CREATE(lbits)(&zgsz3740);
+ UNDEFINED(lbits)(&zgsz3740, zgsz3739);
+ zTestAddr = CONVERT_OF(fbits, lbits)(zgsz3740, true);
+ KILL(lbits)(&zgsz3740);
+ KILL(sail_int)(&zgsz3739);
+ }
+ unit zgsz3741;
+ zgsz3741 = UNIT;
+ }
+ int64_t zgaz3388;
+ {
+ sail_int zgsz3743;
+ CREATE(sail_int)(&zgsz3743);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3743, INT64_C(64));
+ sail_int zgsz3744;
+ CREATE(sail_int)(&zgsz3744);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3744, INT64_C(1));
+ sail_int zgsz3745;
+ CREATE(sail_int)(&zgsz3745);
+ add_int(&zgsz3745, zgsz3743, zgsz3744);
+ zgaz3388 = CONVERT_OF(mach_int, sail_int)(zgsz3745);
+ KILL(sail_int)(&zgsz3745);
+ KILL(sail_int)(&zgsz3744);
+ KILL(sail_int)(&zgsz3743);
+ }
+ {
+ sail_int zgsz3746;
+ CREATE(sail_int)(&zgsz3746);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3746, zgaz3388);
+ UNDEFINED(lbits)(&zTestLen, zgsz3746);
+ KILL(sail_int)(&zgsz3746);
+ }
+ zcbz359 = UNIT;
+
+end_function_231: ;
+ return zcbz359;
+end_block_exception_232: ;
+
+ return UNIT;
+}
+
+static void model_init(void)
+{
+ setup_rts();
+ CREATE(lbits)(&zTestLen);
+ sailgen_initializze_registers(UNIT);
+ create_letbind_0();
+ create_letbind_1();
+ create_letbind_2();
+ create_letbind_3();
+ create_letbind_4();
+ create_letbind_5();
+ create_letbind_6();
+ create_letbind_7();
+ create_letbind_8();
+ create_letbind_9();
+ create_letbind_10();
+ create_letbind_11();
+ create_letbind_12();
+ create_letbind_13();
+ create_letbind_14();
+ create_letbind_15();
+ create_letbind_16();
+ create_letbind_17();
+ create_letbind_18();
+ create_letbind_19();
+ create_letbind_20();
+ create_letbind_21();
+ create_letbind_22();
+ create_letbind_23();
+ create_letbind_24();
+ create_letbind_25();
+ create_letbind_26();
+ create_letbind_27();
+}
+
+static void model_fini(void)
+{
+ kill_letbind_27();
+ kill_letbind_26();
+ kill_letbind_25();
+ kill_letbind_24();
+ kill_letbind_23();
+ kill_letbind_22();
+ kill_letbind_21();
+ kill_letbind_20();
+ kill_letbind_19();
+ kill_letbind_18();
+ kill_letbind_17();
+ kill_letbind_16();
+ kill_letbind_15();
+ kill_letbind_14();
+ kill_letbind_13();
+ kill_letbind_12();
+ kill_letbind_11();
+ kill_letbind_10();
+ kill_letbind_9();
+ kill_letbind_8();
+ kill_letbind_7();
+ kill_letbind_6();
+ kill_letbind_5();
+ kill_letbind_4();
+ kill_letbind_3();
+ kill_letbind_2();
+ kill_letbind_1();
+ kill_letbind_0();
+ KILL(lbits)(&zTestLen);
+ cleanup_rts();
+}
+
+static int model_main(int argc, char *argv[])
+{
+ model_init();
+ if (process_arguments(argc, argv)) exit(EXIT_FAILURE);
+ sailgen_main(UNIT);
+ model_fini();
+ return EXIT_SUCCESS;
+}
+
+
diff --git a/gdb/cheri-compressed-cap/test/sail_compression_128m.c b/gdb/cheri-compressed-cap/test/sail_compression_128m.c
new file mode 100644
index 00000000000..2906bef001e
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/sail_compression_128m.c
@@ -0,0 +1,2922 @@
+#include "elf.h"
+#include "rts.h"
+#include "sail.h"
+
+static void sailgen_zzz3zzz3__id(sail_int* rop, sail_int);
+
+static void sailgen_zzz3zzz3__id(sail_int* zcbz30, sail_int zx) {
+ __label__ end_function_1, end_block_exception_2, end_function_131;
+
+ COPY(sail_int)((*(&zcbz30)), zx);
+end_function_1:;
+ goto end_function_131;
+end_block_exception_2:;
+ goto end_function_131;
+end_function_131:;
+}
+
+static void sailgen_zzz3zzz3Zeros(lbits* rop, sail_int);
+
+static void sailgen_zzz3zzz3Zeros(lbits* zcbz31, sail_int zn) {
+ __label__ end_function_4, end_block_exception_5, end_function_130;
+
+ zeros((*(&zcbz31)), zn);
+end_function_4:;
+ goto end_function_130;
+end_block_exception_5:;
+ goto end_function_130;
+end_function_130:;
+}
+
+static fbits sailgen_Bit(uint64_t);
+
+static fbits sailgen_Bit(uint64_t zb) {
+ __label__ end_function_7, end_block_exception_8;
+
+ fbits zcbz32;
+ {
+ sail_int zgsz31;
+ CREATE(sail_int)(&zgsz31);
+ CONVERT_OF(sail_int, mach_int)(&zgsz31, INT64_C(0));
+ lbits zgsz30;
+ CREATE(lbits)(&zgsz30);
+ CONVERT_OF(lbits, fbits)(&zgsz30, zb, UINT64_C(1), true);
+ zcbz32 = bitvector_access(zgsz30, zgsz31);
+ KILL(sail_int)(&zgsz31);
+ KILL(lbits)(&zgsz30);
+ }
+end_function_7:;
+ return zcbz32;
+end_block_exception_8:;
+
+ return UINT64_C(0);
+}
+
+static void sailgen_Slice_int(lbits* rop, sail_int, sail_int, sail_int);
+
+static void sailgen_Slice_int(lbits* zcbz33, sail_int zi, sail_int zl, sail_int zn) {
+ __label__ end_function_10, end_block_exception_11, end_function_129;
+
+ get_slice_int((*(&zcbz33)), zn, zi, zl);
+end_function_10:;
+ goto end_function_129;
+end_block_exception_11:;
+ goto end_function_129;
+end_function_129:;
+}
+
+static int64_t zCAP_FLAGS_LO_BIT;
+static void create_letbind_0(void) {
+
+ int64_t zgsz32;
+ zgsz32 = INT64_C(56);
+ zCAP_FLAGS_LO_BIT = zgsz32;
+
+let_end_12:;
+}
+static void kill_letbind_0(void) {}
+
+static int64_t zCAP_VALUE_HI_BIT;
+static void create_letbind_1(void) {
+
+ int64_t zgsz33;
+ zgsz33 = INT64_C(63);
+ zCAP_VALUE_HI_BIT = zgsz33;
+
+let_end_13:;
+}
+static void kill_letbind_1(void) {}
+
+static int64_t zCAP_VALUE_LO_BIT;
+static void create_letbind_2(void) {
+
+ int64_t zgsz34;
+ zgsz34 = INT64_C(0);
+ zCAP_VALUE_LO_BIT = zgsz34;
+
+let_end_14:;
+}
+static void kill_letbind_2(void) {}
+
+static int64_t zCAP_VALUE_NUM_BITS;
+static void create_letbind_3(void) {
+
+ int64_t zgsz38;
+ int64_t zgaz30;
+ {
+ sail_int zgsz35;
+ CREATE(sail_int)(&zgsz35);
+ CONVERT_OF(sail_int, mach_int)(&zgsz35, zCAP_VALUE_HI_BIT);
+ sail_int zgsz36;
+ CREATE(sail_int)(&zgsz36);
+ CONVERT_OF(sail_int, mach_int)(&zgsz36, zCAP_VALUE_LO_BIT);
+ sail_int zgsz37;
+ CREATE(sail_int)(&zgsz37);
+ sub_int(&zgsz37, zgsz35, zgsz36);
+ zgaz30 = CONVERT_OF(mach_int, sail_int)(zgsz37);
+ KILL(sail_int)(&zgsz37);
+ KILL(sail_int)(&zgsz36);
+ KILL(sail_int)(&zgsz35);
+ }
+ {
+ sail_int zgsz39;
+ CREATE(sail_int)(&zgsz39);
+ CONVERT_OF(sail_int, mach_int)(&zgsz39, zgaz30);
+ sail_int zgsz310;
+ CREATE(sail_int)(&zgsz310);
+ CONVERT_OF(sail_int, mach_int)(&zgsz310, INT64_C(1));
+ sail_int zgsz311;
+ CREATE(sail_int)(&zgsz311);
+ add_int(&zgsz311, zgsz39, zgsz310);
+ zgsz38 = CONVERT_OF(mach_int, sail_int)(zgsz311);
+ KILL(sail_int)(&zgsz311);
+ KILL(sail_int)(&zgsz310);
+ KILL(sail_int)(&zgsz39);
+ }
+
+ zCAP_VALUE_NUM_BITS = zgsz38;
+
+let_end_15:;
+}
+static void kill_letbind_3(void) {}
+
+static int64_t zCAP_BASE_HI_BIT;
+static void create_letbind_4(void) {
+
+ int64_t zgsz312;
+ zgsz312 = INT64_C(79);
+ zCAP_BASE_HI_BIT = zgsz312;
+
+let_end_16:;
+}
+static void kill_letbind_4(void) {}
+
+static int64_t zCAP_BASE_LO_BIT;
+static void create_letbind_5(void) {
+
+ int64_t zgsz313;
+ zgsz313 = INT64_C(64);
+ zCAP_BASE_LO_BIT = zgsz313;
+
+let_end_17:;
+}
+static void kill_letbind_5(void) {}
+
+static int64_t zCAP_MW;
+static void create_letbind_6(void) {
+
+ int64_t zgsz317;
+ int64_t zgaz31;
+ {
+ sail_int zgsz314;
+ CREATE(sail_int)(&zgsz314);
+ CONVERT_OF(sail_int, mach_int)(&zgsz314, zCAP_BASE_HI_BIT);
+ sail_int zgsz315;
+ CREATE(sail_int)(&zgsz315);
+ CONVERT_OF(sail_int, mach_int)(&zgsz315, zCAP_BASE_LO_BIT);
+ sail_int zgsz316;
+ CREATE(sail_int)(&zgsz316);
+ sub_int(&zgsz316, zgsz314, zgsz315);
+ zgaz31 = CONVERT_OF(mach_int, sail_int)(zgsz316);
+ KILL(sail_int)(&zgsz316);
+ KILL(sail_int)(&zgsz315);
+ KILL(sail_int)(&zgsz314);
+ }
+ {
+ sail_int zgsz318;
+ CREATE(sail_int)(&zgsz318);
+ CONVERT_OF(sail_int, mach_int)(&zgsz318, zgaz31);
+ sail_int zgsz319;
+ CREATE(sail_int)(&zgsz319);
+ CONVERT_OF(sail_int, mach_int)(&zgsz319, INT64_C(1));
+ sail_int zgsz320;
+ CREATE(sail_int)(&zgsz320);
+ add_int(&zgsz320, zgsz318, zgsz319);
+ zgsz317 = CONVERT_OF(mach_int, sail_int)(zgsz320);
+ KILL(sail_int)(&zgsz320);
+ KILL(sail_int)(&zgsz319);
+ KILL(sail_int)(&zgsz318);
+ }
+
+ zCAP_MW = zgsz317;
+
+let_end_18:;
+}
+static void kill_letbind_6(void) {}
+
+static int64_t zCAP_BASE_EXP_HI_BIT;
+static void create_letbind_7(void) {
+
+ int64_t zgsz321;
+ zgsz321 = INT64_C(66);
+ zCAP_BASE_EXP_HI_BIT = zgsz321;
+
+let_end_19:;
+}
+static void kill_letbind_7(void) {}
+
+static int64_t zCAP_LIMIT_EXP_HI_BIT;
+static void create_letbind_8(void) {
+
+ int64_t zgsz322;
+ zgsz322 = INT64_C(82);
+ zCAP_LIMIT_EXP_HI_BIT = zgsz322;
+
+let_end_20:;
+}
+static void kill_letbind_8(void) {}
+
+static int64_t zCAP_LIMIT_LO_BIT;
+static void create_letbind_9(void) {
+
+ int64_t zgsz323;
+ zgsz323 = INT64_C(80);
+ zCAP_LIMIT_LO_BIT = zgsz323;
+
+let_end_21:;
+}
+static void kill_letbind_9(void) {}
+
+static int64_t zCAP_IE_BIT;
+static void create_letbind_10(void) {
+
+ int64_t zgsz324;
+ zgsz324 = INT64_C(94);
+ zCAP_IE_BIT = zgsz324;
+
+let_end_22:;
+}
+static void kill_letbind_10(void) {}
+
+static bool sailgen_CapIsInternalExponent(lbits);
+
+static bool sailgen_CapIsInternalExponent(lbits zc) {
+ __label__ cleanup_25, end_cleanup_26, end_function_24, end_block_exception_27;
+
+ bool zcbz34;
+ bool zgaz34;
+ {
+ uint64_t zgaz33;
+ {
+ fbits zgaz32;
+ {
+ sail_int zgsz325;
+ CREATE(sail_int)(&zgsz325);
+ CONVERT_OF(sail_int, mach_int)(&zgsz325, zCAP_IE_BIT);
+ zgaz32 = bitvector_access(zc, zgsz325);
+ KILL(sail_int)(&zgsz325);
+ }
+ uint64_t zgsz326;
+ zgsz326 = UINT64_C(0b0);
+ zgsz326 = update_fbits(zgsz326, INT64_C(0), zgaz32);
+ zgaz33 = zgsz326;
+ }
+ {
+ lbits zgsz328;
+ CREATE(lbits)(&zgsz328);
+ CONVERT_OF(lbits, fbits)(&zgsz328, UINT64_C(0b0), UINT64_C(1), true);
+ lbits zgsz327;
+ CREATE(lbits)(&zgsz327);
+ CONVERT_OF(lbits, fbits)(&zgsz327, zgaz33, UINT64_C(1), true);
+ zgaz34 = eq_bits(zgsz327, zgsz328);
+ KILL(lbits)(&zgsz328);
+ KILL(lbits)(&zgsz327);
+ }
+ }
+ zcbz34 = zgaz34;
+ goto cleanup_25;
+ /* unreachable after return */
+
+ goto end_cleanup_26;
+cleanup_25:;
+
+ goto end_function_24;
+end_cleanup_26:;
+end_function_24:;
+ return zcbz34;
+end_block_exception_27:;
+
+ return false;
+}
+
+static int64_t sailgen_CapGetExponent(lbits);
+
+static int64_t sailgen_CapGetExponent(lbits zc) {
+ __label__ end_function_29, end_block_exception_34;
+
+ int64_t zcbz35;
+ bool zgaz35;
+ zgaz35 = sailgen_CapIsInternalExponent(zc);
+ if (zgaz35) {
+ __label__ cleanup_32, end_cleanup_33;
+
+ uint64_t znexp;
+ {
+ uint64_t zgaz38;
+ {
+ sail_int zgsz329;
+ CREATE(sail_int)(&zgsz329);
+ CONVERT_OF(sail_int, mach_int)(&zgsz329, zCAP_LIMIT_EXP_HI_BIT);
+ sail_int zgsz330;
+ CREATE(sail_int)(&zgsz330);
+ CONVERT_OF(sail_int, mach_int)(&zgsz330, zCAP_LIMIT_LO_BIT);
+ lbits zgsz331;
+ CREATE(lbits)(&zgsz331);
+ vector_subrange_lbits(&zgsz331, zc, zgsz329, zgsz330);
+ zgaz38 = CONVERT_OF(fbits, lbits)(zgsz331, true);
+ KILL(lbits)(&zgsz331);
+ KILL(sail_int)(&zgsz330);
+ KILL(sail_int)(&zgsz329);
+ }
+ uint64_t zgaz39;
+ {
+ sail_int zgsz332;
+ CREATE(sail_int)(&zgsz332);
+ CONVERT_OF(sail_int, mach_int)(&zgsz332, zCAP_BASE_EXP_HI_BIT);
+ sail_int zgsz333;
+ CREATE(sail_int)(&zgsz333);
+ CONVERT_OF(sail_int, mach_int)(&zgsz333, zCAP_BASE_LO_BIT);
+ lbits zgsz334;
+ CREATE(lbits)(&zgsz334);
+ vector_subrange_lbits(&zgsz334, zc, zgsz332, zgsz333);
+ zgaz39 = CONVERT_OF(fbits, lbits)(zgsz334, true);
+ KILL(lbits)(&zgsz334);
+ KILL(sail_int)(&zgsz333);
+ KILL(sail_int)(&zgsz332);
+ }
+ {
+ lbits zgsz335;
+ CREATE(lbits)(&zgsz335);
+ CONVERT_OF(lbits, fbits)(&zgsz335, zgaz38, UINT64_C(3), true);
+ lbits zgsz336;
+ CREATE(lbits)(&zgsz336);
+ CONVERT_OF(lbits, fbits)(&zgsz336, zgaz39, UINT64_C(3), true);
+ lbits zgsz337;
+ CREATE(lbits)(&zgsz337);
+ append(&zgsz337, zgsz335, zgsz336);
+ znexp = CONVERT_OF(fbits, lbits)(zgsz337, true);
+ KILL(lbits)(&zgsz337);
+ KILL(lbits)(&zgsz336);
+ KILL(lbits)(&zgsz335);
+ }
+ }
+ int64_t zgaz37;
+ {
+ uint64_t zgaz36;
+ {
+ lbits zgsz338;
+ CREATE(lbits)(&zgsz338);
+ CONVERT_OF(lbits, fbits)(&zgsz338, znexp, UINT64_C(6), true);
+ lbits zgsz339;
+ CREATE(lbits)(&zgsz339);
+ not_bits(&zgsz339, zgsz338);
+ zgaz36 = CONVERT_OF(fbits, lbits)(zgsz339, true);
+ KILL(lbits)(&zgsz339);
+ KILL(lbits)(&zgsz338);
+ }
+ zgaz37 = ((mach_int)zgaz36);
+ }
+ zcbz35 = zgaz37;
+ goto cleanup_32;
+ /* unreachable after return */
+
+ goto end_cleanup_33;
+ cleanup_32:;
+
+ goto end_function_29;
+ end_cleanup_33:;
+ } else {
+ __label__ cleanup_30, end_cleanup_31;
+
+ zcbz35 = INT64_C(0);
+ goto cleanup_30;
+ /* unreachable after return */
+ goto end_cleanup_31;
+ cleanup_30:;
+
+ goto end_function_29;
+ end_cleanup_31:;
+ }
+
+end_function_29:;
+ return zcbz35;
+end_block_exception_34:;
+
+ return INT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_CapGetValue(lbits);
+
+static uint64_t sailgen_CapGetValue(lbits zc) {
+ __label__ cleanup_37, end_cleanup_38, end_function_36, end_block_exception_39;
+
+ uint64_t zcbz36;
+ uint64_t zgaz310;
+ {
+ sail_int zgsz340;
+ CREATE(sail_int)(&zgsz340);
+ CONVERT_OF(sail_int, mach_int)(&zgsz340, zCAP_VALUE_HI_BIT);
+ sail_int zgsz341;
+ CREATE(sail_int)(&zgsz341);
+ CONVERT_OF(sail_int, mach_int)(&zgsz341, zCAP_VALUE_LO_BIT);
+ lbits zgsz342;
+ CREATE(lbits)(&zgsz342);
+ vector_subrange_lbits(&zgsz342, zc, zgsz340, zgsz341);
+ zgaz310 = CONVERT_OF(fbits, lbits)(zgsz342, true);
+ KILL(lbits)(&zgsz342);
+ KILL(sail_int)(&zgsz341);
+ KILL(sail_int)(&zgsz340);
+ }
+ zcbz36 = zgaz310;
+ goto cleanup_37;
+ /* unreachable after return */
+
+ goto end_cleanup_38;
+cleanup_37:;
+
+ goto end_function_36;
+end_cleanup_38:;
+end_function_36:;
+ return zcbz36;
+end_block_exception_39:;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static int64_t zCAP_BOUND_NUM_BITS;
+static void create_letbind_11(void) {
+
+ int64_t zgsz343;
+ {
+ sail_int zgsz344;
+ CREATE(sail_int)(&zgsz344);
+ CONVERT_OF(sail_int, mach_int)(&zgsz344, zCAP_VALUE_NUM_BITS);
+ sail_int zgsz345;
+ CREATE(sail_int)(&zgsz345);
+ CONVERT_OF(sail_int, mach_int)(&zgsz345, INT64_C(1));
+ sail_int zgsz346;
+ CREATE(sail_int)(&zgsz346);
+ add_int(&zgsz346, zgsz344, zgsz345);
+ zgsz343 = CONVERT_OF(mach_int, sail_int)(zgsz346);
+ KILL(sail_int)(&zgsz346);
+ KILL(sail_int)(&zgsz345);
+ KILL(sail_int)(&zgsz344);
+ }
+ zCAP_BOUND_NUM_BITS = zgsz343;
+
+let_end_40:;
+}
+static void kill_letbind_11(void) {}
+
+static lbits zCAP_BOUND_MAX;
+static void create_letbind_12(void) {
+ CREATE(lbits)(&zCAP_BOUND_MAX);
+
+ lbits zgsz349;
+ CREATE(lbits)(&zgsz349);
+ sail_int zgaz311;
+ CREATE(sail_int)(&zgaz311);
+ {
+ sail_int zgsz348;
+ CREATE(sail_int)(&zgsz348);
+ CONVERT_OF(sail_int, mach_int)(&zgsz348, zCAP_VALUE_NUM_BITS);
+ sail_int zgsz347;
+ CREATE(sail_int)(&zgsz347);
+ CONVERT_OF(sail_int, mach_int)(&zgsz347, INT64_C(1));
+ shl_int(&zgaz311, zgsz347, zgsz348);
+ KILL(sail_int)(&zgsz348);
+ KILL(sail_int)(&zgsz347);
+ }
+ {
+ sail_int zgsz351;
+ CREATE(sail_int)(&zgsz351);
+ CONVERT_OF(sail_int, mach_int)(&zgsz351, zCAP_BOUND_NUM_BITS);
+ sail_int zgsz350;
+ CREATE(sail_int)(&zgsz350);
+ CONVERT_OF(sail_int, mach_int)(&zgsz350, INT64_C(0));
+ sailgen_Slice_int(&zgsz349, zgaz311, zgsz350, zgsz351);
+ KILL(sail_int)(&zgsz351);
+ KILL(sail_int)(&zgsz350);
+ }
+ KILL(sail_int)(&zgaz311);
+ COPY(lbits)(&zCAP_BOUND_MAX, zgsz349);
+ KILL(lbits)(&zgsz349);
+let_end_41:;
+}
+static void kill_letbind_12(void) { KILL(lbits)(&zCAP_BOUND_MAX); }
+
+static lbits zCAP_BOUND_MIN;
+static void create_letbind_13(void) {
+ CREATE(lbits)(&zCAP_BOUND_MIN);
+
+ lbits zgsz352;
+ CREATE(lbits)(&zgsz352);
+ int64_t zgaz312;
+ zgaz312 = ((mach_int)UINT64_C(0x0));
+ {
+ sail_int zgsz355;
+ CREATE(sail_int)(&zgsz355);
+ CONVERT_OF(sail_int, mach_int)(&zgsz355, zCAP_BOUND_NUM_BITS);
+ sail_int zgsz354;
+ CREATE(sail_int)(&zgsz354);
+ CONVERT_OF(sail_int, mach_int)(&zgsz354, INT64_C(0));
+ sail_int zgsz353;
+ CREATE(sail_int)(&zgsz353);
+ CONVERT_OF(sail_int, mach_int)(&zgsz353, zgaz312);
+ sailgen_Slice_int(&zgsz352, zgsz353, zgsz354, zgsz355);
+ KILL(sail_int)(&zgsz355);
+ KILL(sail_int)(&zgsz354);
+ KILL(sail_int)(&zgsz353);
+ }
+
+ COPY(lbits)(&zCAP_BOUND_MIN, zgsz352);
+ KILL(lbits)(&zgsz352);
+let_end_42:;
+}
+static void kill_letbind_13(void) { KILL(lbits)(&zCAP_BOUND_MIN); }
+
+static int64_t zCAP_MAX_ENCODEABLE_EXPONENT;
+static void create_letbind_14(void) {
+
+ int64_t zgsz356;
+ zgsz356 = INT64_C(63);
+ zCAP_MAX_ENCODEABLE_EXPONENT = zgsz356;
+
+let_end_43:;
+}
+static void kill_letbind_14(void) {}
+
+static int64_t zCAP_MAX_EXPONENT;
+static void create_letbind_15(void) {
+
+ int64_t zgsz360;
+ int64_t zgaz313;
+ {
+ sail_int zgsz357;
+ CREATE(sail_int)(&zgsz357);
+ CONVERT_OF(sail_int, mach_int)(&zgsz357, zCAP_VALUE_NUM_BITS);
+ sail_int zgsz358;
+ CREATE(sail_int)(&zgsz358);
+ CONVERT_OF(sail_int, mach_int)(&zgsz358, zCAP_MW);
+ sail_int zgsz359;
+ CREATE(sail_int)(&zgsz359);
+ sub_int(&zgsz359, zgsz357, zgsz358);
+ zgaz313 = CONVERT_OF(mach_int, sail_int)(zgsz359);
+ KILL(sail_int)(&zgsz359);
+ KILL(sail_int)(&zgsz358);
+ KILL(sail_int)(&zgsz357);
+ }
+ {
+ sail_int zgsz361;
+ CREATE(sail_int)(&zgsz361);
+ CONVERT_OF(sail_int, mach_int)(&zgsz361, zgaz313);
+ sail_int zgsz362;
+ CREATE(sail_int)(&zgsz362);
+ CONVERT_OF(sail_int, mach_int)(&zgsz362, INT64_C(2));
+ sail_int zgsz363;
+ CREATE(sail_int)(&zgsz363);
+ add_int(&zgsz363, zgsz361, zgsz362);
+ zgsz360 = CONVERT_OF(mach_int, sail_int)(zgsz363);
+ KILL(sail_int)(&zgsz363);
+ KILL(sail_int)(&zgsz362);
+ KILL(sail_int)(&zgsz361);
+ }
+
+ zCAP_MAX_EXPONENT = zgsz360;
+
+let_end_44:;
+}
+static void kill_letbind_15(void) {}
+
+static uint64_t sailgen_CapBoundsAddress(uint64_t);
+
+static uint64_t sailgen_CapBoundsAddress(uint64_t zaddress) {
+ __label__ cleanup_47, end_cleanup_48, end_function_46, end_block_exception_49;
+
+ uint64_t zcbz37;
+ uint64_t zgaz316;
+ {
+ uint64_t zgaz315;
+ {
+ int64_t zgaz314;
+ {
+ sail_int zgsz364;
+ CREATE(sail_int)(&zgsz364);
+ CONVERT_OF(sail_int, mach_int)(&zgsz364, zCAP_FLAGS_LO_BIT);
+ sail_int zgsz365;
+ CREATE(sail_int)(&zgsz365);
+ CONVERT_OF(sail_int, mach_int)(&zgsz365, INT64_C(1));
+ sail_int zgsz366;
+ CREATE(sail_int)(&zgsz366);
+ sub_int(&zgsz366, zgsz364, zgsz365);
+ zgaz314 = CONVERT_OF(mach_int, sail_int)(zgsz366);
+ KILL(sail_int)(&zgsz366);
+ KILL(sail_int)(&zgsz365);
+ KILL(sail_int)(&zgsz364);
+ }
+ {
+ lbits zgsz367;
+ CREATE(lbits)(&zgsz367);
+ CONVERT_OF(lbits, fbits)(&zgsz367, zaddress, UINT64_C(64), true);
+ sail_int zgsz368;
+ CREATE(sail_int)(&zgsz368);
+ CONVERT_OF(sail_int, mach_int)(&zgsz368, zgaz314);
+ sail_int zgsz369;
+ CREATE(sail_int)(&zgsz369);
+ CONVERT_OF(sail_int, mach_int)(&zgsz369, INT64_C(0));
+ lbits zgsz370;
+ CREATE(lbits)(&zgsz370);
+ vector_subrange_lbits(&zgsz370, zgsz367, zgsz368, zgsz369);
+ zgaz315 = CONVERT_OF(fbits, lbits)(zgsz370, true);
+ KILL(lbits)(&zgsz370);
+ KILL(sail_int)(&zgsz369);
+ KILL(sail_int)(&zgsz368);
+ KILL(lbits)(&zgsz367);
+ }
+ }
+ {
+ lbits zgsz371;
+ CREATE(lbits)(&zgsz371);
+ CONVERT_OF(lbits, fbits)(&zgsz371, zgaz315, UINT64_C(56), true);
+ sail_int zgsz372;
+ CREATE(sail_int)(&zgsz372);
+ CONVERT_OF(sail_int, mach_int)(&zgsz372, zCAP_VALUE_NUM_BITS);
+ lbits zgsz373;
+ CREATE(lbits)(&zgsz373);
+ sign_extend(&zgsz373, zgsz371, zgsz372);
+ zgaz316 = CONVERT_OF(fbits, lbits)(zgsz373, true);
+ KILL(lbits)(&zgsz373);
+ KILL(sail_int)(&zgsz372);
+ KILL(lbits)(&zgsz371);
+ }
+ }
+ zcbz37 = zgaz316;
+ goto cleanup_47;
+ /* unreachable after return */
+
+ goto end_cleanup_48;
+cleanup_47:;
+
+ goto end_function_46;
+end_cleanup_48:;
+end_function_46:;
+ return zcbz37;
+end_block_exception_49:;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static int64_t zCAP_BASE_MANTISSA_LO_BIT;
+static void create_letbind_16(void) {
+
+ int64_t zgsz374;
+ zgsz374 = INT64_C(67);
+ zCAP_BASE_MANTISSA_LO_BIT = zgsz374;
+
+let_end_50:;
+}
+static void kill_letbind_16(void) {}
+
+static uint64_t sailgen_CapGetBottom(lbits);
+
+static uint64_t sailgen_CapGetBottom(lbits zc) {
+ __label__ end_function_52, end_block_exception_57;
+
+ uint64_t zcbz38;
+ bool zgaz317;
+ zgaz317 = sailgen_CapIsInternalExponent(zc);
+ if (zgaz317) {
+ __label__ cleanup_55, end_cleanup_56;
+
+ uint64_t zgaz319;
+ {
+ uint64_t zgaz318;
+ {
+ sail_int zgsz378;
+ CREATE(sail_int)(&zgsz378);
+ CONVERT_OF(sail_int, mach_int)(&zgsz378, zCAP_BASE_HI_BIT);
+ sail_int zgsz379;
+ CREATE(sail_int)(&zgsz379);
+ CONVERT_OF(sail_int, mach_int)(&zgsz379, zCAP_BASE_MANTISSA_LO_BIT);
+ lbits zgsz380;
+ CREATE(lbits)(&zgsz380);
+ vector_subrange_lbits(&zgsz380, zc, zgsz378, zgsz379);
+ zgaz318 = CONVERT_OF(fbits, lbits)(zgsz380, true);
+ KILL(lbits)(&zgsz380);
+ KILL(sail_int)(&zgsz379);
+ KILL(sail_int)(&zgsz378);
+ }
+ {
+ lbits zgsz381;
+ CREATE(lbits)(&zgsz381);
+ CONVERT_OF(lbits, fbits)(&zgsz381, zgaz318, UINT64_C(13), true);
+ lbits zgsz382;
+ CREATE(lbits)(&zgsz382);
+ CONVERT_OF(lbits, fbits)(&zgsz382, UINT64_C(0b000), UINT64_C(3), true);
+ lbits zgsz383;
+ CREATE(lbits)(&zgsz383);
+ append(&zgsz383, zgsz381, zgsz382);
+ zgaz319 = CONVERT_OF(fbits, lbits)(zgsz383, true);
+ KILL(lbits)(&zgsz383);
+ KILL(lbits)(&zgsz382);
+ KILL(lbits)(&zgsz381);
+ }
+ }
+ zcbz38 = zgaz319;
+ goto cleanup_55;
+ /* unreachable after return */
+
+ goto end_cleanup_56;
+ cleanup_55:;
+
+ goto end_function_52;
+ end_cleanup_56:;
+ } else {
+ __label__ cleanup_53, end_cleanup_54;
+
+ uint64_t zgaz320;
+ {
+ sail_int zgsz375;
+ CREATE(sail_int)(&zgsz375);
+ CONVERT_OF(sail_int, mach_int)(&zgsz375, zCAP_BASE_HI_BIT);
+ sail_int zgsz376;
+ CREATE(sail_int)(&zgsz376);
+ CONVERT_OF(sail_int, mach_int)(&zgsz376, zCAP_BASE_LO_BIT);
+ lbits zgsz377;
+ CREATE(lbits)(&zgsz377);
+ vector_subrange_lbits(&zgsz377, zc, zgsz375, zgsz376);
+ zgaz320 = CONVERT_OF(fbits, lbits)(zgsz377, true);
+ KILL(lbits)(&zgsz377);
+ KILL(sail_int)(&zgsz376);
+ KILL(sail_int)(&zgsz375);
+ }
+ zcbz38 = zgaz320;
+ goto cleanup_53;
+ /* unreachable after return */
+
+ goto end_cleanup_54;
+ cleanup_53:;
+
+ goto end_function_52;
+ end_cleanup_54:;
+ }
+
+end_function_52:;
+ return zcbz38;
+end_block_exception_57:;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static int64_t zCAP_LIMIT_HI_BIT;
+static void create_letbind_17(void) {
+
+ int64_t zgsz384;
+ zgsz384 = INT64_C(93);
+ zCAP_LIMIT_HI_BIT = zgsz384;
+
+let_end_58:;
+}
+static void kill_letbind_17(void) {}
+
+static int64_t zCAP_LIMIT_MANTISSA_LO_BIT;
+static void create_letbind_18(void) {
+
+ int64_t zgsz385;
+ zgsz385 = INT64_C(83);
+ zCAP_LIMIT_MANTISSA_LO_BIT = zgsz385;
+
+let_end_59:;
+}
+static void kill_letbind_18(void) {}
+
+static bool sailgen_zzz3zzz3CapUnsignedLessThan(lbits, lbits);
+
+static bool sailgen_zzzz7NzzJzzK3z3CapUnsignedLessThan(uint64_t, uint64_t);
+
+static bool sailgen_zzz3zzz3CapUnsignedLessThan(lbits za, lbits zb) {
+ __label__ cleanup_62, end_cleanup_63, end_function_61, end_block_exception_64;
+
+ bool zcbz39;
+ bool zgaz323;
+ {
+ sail_int zgaz321;
+ CREATE(sail_int)(&zgaz321);
+ sail_unsigned(&zgaz321, za);
+ sail_int zgaz322;
+ CREATE(sail_int)(&zgaz322);
+ sail_unsigned(&zgaz322, zb);
+ zgaz323 = lt(zgaz321, zgaz322);
+ KILL(sail_int)(&zgaz322);
+ KILL(sail_int)(&zgaz321);
+ }
+ zcbz39 = zgaz323;
+ goto cleanup_62;
+ /* unreachable after return */
+
+ goto end_cleanup_63;
+cleanup_62:;
+
+ goto end_function_61;
+end_cleanup_63:;
+end_function_61:;
+ return zcbz39;
+end_block_exception_64:;
+
+ return false;
+}
+
+static bool sailgen_zzzz7NzzJzzK3z3CapUnsignedLessThan(uint64_t za, uint64_t zb) {
+ __label__ cleanup_67, end_cleanup_68, end_function_66, end_block_exception_69;
+
+ bool zcbz310;
+ bool zgaz326;
+ {
+ int64_t zgaz324;
+ zgaz324 = ((mach_int)za);
+ int64_t zgaz325;
+ zgaz325 = ((mach_int)zb);
+ {
+ sail_int zgsz387;
+ CREATE(sail_int)(&zgsz387);
+ CONVERT_OF(sail_int, mach_int)(&zgsz387, zgaz325);
+ sail_int zgsz386;
+ CREATE(sail_int)(&zgsz386);
+ CONVERT_OF(sail_int, mach_int)(&zgsz386, zgaz324);
+ zgaz326 = lt(zgsz386, zgsz387);
+ KILL(sail_int)(&zgsz387);
+ KILL(sail_int)(&zgsz386);
+ }
+ }
+ zcbz310 = zgaz326;
+ goto cleanup_67;
+ /* unreachable after return */
+
+ goto end_cleanup_68;
+cleanup_67:;
+
+ goto end_function_66;
+end_cleanup_68:;
+end_function_66:;
+ return zcbz310;
+end_block_exception_69:;
+
+ return false;
+}
+
+static uint64_t sailgen_CapGetTop(lbits);
+
+static uint64_t sailgen_CapGetTop(lbits zc) {
+ __label__ cleanup_72, end_cleanup_73, end_function_71, end_block_exception_74;
+
+ uint64_t zcbz311;
+ uint64_t zlmsb;
+ zlmsb = UINT64_C(0b00);
+ uint64_t zlcarry;
+ zlcarry = UINT64_C(0b00);
+ uint64_t zb;
+ zb = sailgen_CapGetBottom(zc);
+ uint64_t zt;
+ {
+ int64_t zgaz344;
+ {
+ int64_t zgaz343;
+ {
+ sail_int zgsz388;
+ CREATE(sail_int)(&zgsz388);
+ CONVERT_OF(sail_int, mach_int)(&zgsz388, INT64_C(79));
+ sail_int zgsz389;
+ CREATE(sail_int)(&zgsz389);
+ CONVERT_OF(sail_int, mach_int)(&zgsz389, INT64_C(64));
+ sail_int zgsz390;
+ CREATE(sail_int)(&zgsz390);
+ sub_int(&zgsz390, zgsz388, zgsz389);
+ zgaz343 = CONVERT_OF(mach_int, sail_int)(zgsz390);
+ KILL(sail_int)(&zgsz390);
+ KILL(sail_int)(&zgsz389);
+ KILL(sail_int)(&zgsz388);
+ }
+ {
+ sail_int zgsz391;
+ CREATE(sail_int)(&zgsz391);
+ CONVERT_OF(sail_int, mach_int)(&zgsz391, zgaz343);
+ sail_int zgsz392;
+ CREATE(sail_int)(&zgsz392);
+ CONVERT_OF(sail_int, mach_int)(&zgsz392, INT64_C(1));
+ sail_int zgsz393;
+ CREATE(sail_int)(&zgsz393);
+ add_int(&zgsz393, zgsz391, zgsz392);
+ zgaz344 = CONVERT_OF(mach_int, sail_int)(zgsz393);
+ KILL(sail_int)(&zgsz393);
+ KILL(sail_int)(&zgsz392);
+ KILL(sail_int)(&zgsz391);
+ }
+ }
+ {
+ sail_int zgsz394;
+ CREATE(sail_int)(&zgsz394);
+ CONVERT_OF(sail_int, mach_int)(&zgsz394, zgaz344);
+ lbits zgsz395;
+ CREATE(lbits)(&zgsz395);
+ UNDEFINED(lbits)(&zgsz395, zgsz394);
+ zt = CONVERT_OF(fbits, lbits)(zgsz395, true);
+ KILL(lbits)(&zgsz395);
+ KILL(sail_int)(&zgsz394);
+ }
+ }
+ {
+ bool zgaz327;
+ zgaz327 = sailgen_CapIsInternalExponent(zc);
+ unit zgsz3141;
+ if (zgaz327) {
+ {
+ zlmsb = UINT64_C(0b01);
+ unit zgsz3148;
+ zgsz3148 = UNIT;
+ }
+ uint64_t zgaz329;
+ {
+ uint64_t zgaz328;
+ {
+ sail_int zgsz3149;
+ CREATE(sail_int)(&zgsz3149);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3149, zCAP_LIMIT_HI_BIT);
+ sail_int zgsz3150;
+ CREATE(sail_int)(&zgsz3150);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3150, zCAP_LIMIT_MANTISSA_LO_BIT);
+ lbits zgsz3151;
+ CREATE(lbits)(&zgsz3151);
+ vector_subrange_lbits(&zgsz3151, zc, zgsz3149, zgsz3150);
+ zgaz328 = CONVERT_OF(fbits, lbits)(zgsz3151, true);
+ KILL(lbits)(&zgsz3151);
+ KILL(sail_int)(&zgsz3150);
+ KILL(sail_int)(&zgsz3149);
+ }
+ {
+ lbits zgsz3152;
+ CREATE(lbits)(&zgsz3152);
+ CONVERT_OF(lbits, fbits)(&zgsz3152, UINT64_C(0b00), UINT64_C(2), true);
+ lbits zgsz3153;
+ CREATE(lbits)(&zgsz3153);
+ CONVERT_OF(lbits, fbits)(&zgsz3153, zgaz328, UINT64_C(11), true);
+ lbits zgsz3154;
+ CREATE(lbits)(&zgsz3154);
+ append(&zgsz3154, zgsz3152, zgsz3153);
+ zgaz329 = CONVERT_OF(fbits, lbits)(zgsz3154, true);
+ KILL(lbits)(&zgsz3154);
+ KILL(lbits)(&zgsz3153);
+ KILL(lbits)(&zgsz3152);
+ }
+ }
+ {
+ lbits zgsz3155;
+ CREATE(lbits)(&zgsz3155);
+ CONVERT_OF(lbits, fbits)(&zgsz3155, zgaz329, UINT64_C(13), true);
+ lbits zgsz3156;
+ CREATE(lbits)(&zgsz3156);
+ CONVERT_OF(lbits, fbits)(&zgsz3156, UINT64_C(0b000), UINT64_C(3), true);
+ lbits zgsz3157;
+ CREATE(lbits)(&zgsz3157);
+ append(&zgsz3157, zgsz3155, zgsz3156);
+ zt = CONVERT_OF(fbits, lbits)(zgsz3157, true);
+ KILL(lbits)(&zgsz3157);
+ KILL(lbits)(&zgsz3156);
+ KILL(lbits)(&zgsz3155);
+ }
+ zgsz3141 = UNIT;
+
+ } else {
+ uint64_t zgaz330;
+ {
+ sail_int zgsz3142;
+ CREATE(sail_int)(&zgsz3142);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3142, zCAP_LIMIT_HI_BIT);
+ sail_int zgsz3143;
+ CREATE(sail_int)(&zgsz3143);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3143, zCAP_LIMIT_LO_BIT);
+ lbits zgsz3144;
+ CREATE(lbits)(&zgsz3144);
+ vector_subrange_lbits(&zgsz3144, zc, zgsz3142, zgsz3143);
+ zgaz330 = CONVERT_OF(fbits, lbits)(zgsz3144, true);
+ KILL(lbits)(&zgsz3144);
+ KILL(sail_int)(&zgsz3143);
+ KILL(sail_int)(&zgsz3142);
+ }
+ {
+ lbits zgsz3145;
+ CREATE(lbits)(&zgsz3145);
+ CONVERT_OF(lbits, fbits)(&zgsz3145, UINT64_C(0b00), UINT64_C(2), true);
+ lbits zgsz3146;
+ CREATE(lbits)(&zgsz3146);
+ CONVERT_OF(lbits, fbits)(&zgsz3146, zgaz330, UINT64_C(14), true);
+ lbits zgsz3147;
+ CREATE(lbits)(&zgsz3147);
+ append(&zgsz3147, zgsz3145, zgsz3146);
+ zt = CONVERT_OF(fbits, lbits)(zgsz3147, true);
+ KILL(lbits)(&zgsz3147);
+ KILL(lbits)(&zgsz3146);
+ KILL(lbits)(&zgsz3145);
+ }
+ zgsz3141 = UNIT;
+ }
+ }
+ {
+ bool zgaz335;
+ {
+ uint64_t zgaz333;
+ {
+ int64_t zgaz331;
+ {
+ sail_int zgsz396;
+ CREATE(sail_int)(&zgsz396);
+ CONVERT_OF(sail_int, mach_int)(&zgsz396, zCAP_MW);
+ sail_int zgsz397;
+ CREATE(sail_int)(&zgsz397);
+ CONVERT_OF(sail_int, mach_int)(&zgsz397, INT64_C(3));
+ sail_int zgsz398;
+ CREATE(sail_int)(&zgsz398);
+ sub_int(&zgsz398, zgsz396, zgsz397);
+ zgaz331 = CONVERT_OF(mach_int, sail_int)(zgsz398);
+ KILL(sail_int)(&zgsz398);
+ KILL(sail_int)(&zgsz397);
+ KILL(sail_int)(&zgsz396);
+ }
+ {
+ lbits zgsz399;
+ CREATE(lbits)(&zgsz399);
+ CONVERT_OF(lbits, fbits)(&zgsz399, zt, UINT64_C(16), true);
+ sail_int zgsz3100;
+ CREATE(sail_int)(&zgsz3100);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3100, zgaz331);
+ sail_int zgsz3101;
+ CREATE(sail_int)(&zgsz3101);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3101, INT64_C(0));
+ lbits zgsz3102;
+ CREATE(lbits)(&zgsz3102);
+ vector_subrange_lbits(&zgsz3102, zgsz399, zgsz3100, zgsz3101);
+ zgaz333 = CONVERT_OF(fbits, lbits)(zgsz3102, true);
+ KILL(lbits)(&zgsz3102);
+ KILL(sail_int)(&zgsz3101);
+ KILL(sail_int)(&zgsz3100);
+ KILL(lbits)(&zgsz399);
+ }
+ }
+ uint64_t zgaz334;
+ {
+ int64_t zgaz332;
+ {
+ sail_int zgsz3103;
+ CREATE(sail_int)(&zgsz3103);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3103, zCAP_MW);
+ sail_int zgsz3104;
+ CREATE(sail_int)(&zgsz3104);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3104, INT64_C(3));
+ sail_int zgsz3105;
+ CREATE(sail_int)(&zgsz3105);
+ sub_int(&zgsz3105, zgsz3103, zgsz3104);
+ zgaz332 = CONVERT_OF(mach_int, sail_int)(zgsz3105);
+ KILL(sail_int)(&zgsz3105);
+ KILL(sail_int)(&zgsz3104);
+ KILL(sail_int)(&zgsz3103);
+ }
+ {
+ lbits zgsz3106;
+ CREATE(lbits)(&zgsz3106);
+ CONVERT_OF(lbits, fbits)(&zgsz3106, zb, UINT64_C(16), true);
+ sail_int zgsz3107;
+ CREATE(sail_int)(&zgsz3107);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3107, zgaz332);
+ sail_int zgsz3108;
+ CREATE(sail_int)(&zgsz3108);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3108, INT64_C(0));
+ lbits zgsz3109;
+ CREATE(lbits)(&zgsz3109);
+ vector_subrange_lbits(&zgsz3109, zgsz3106, zgsz3107, zgsz3108);
+ zgaz334 = CONVERT_OF(fbits, lbits)(zgsz3109, true);
+ KILL(lbits)(&zgsz3109);
+ KILL(sail_int)(&zgsz3108);
+ KILL(sail_int)(&zgsz3107);
+ KILL(lbits)(&zgsz3106);
+ }
+ }
+ {
+ lbits zgsz3111;
+ CREATE(lbits)(&zgsz3111);
+ CONVERT_OF(lbits, fbits)(&zgsz3111, zgaz334, UINT64_C(14), true);
+ lbits zgsz3110;
+ CREATE(lbits)(&zgsz3110);
+ CONVERT_OF(lbits, fbits)(&zgsz3110, zgaz333, UINT64_C(14), true);
+ zgaz335 = sailgen_zzz3zzz3CapUnsignedLessThan(zgsz3110, zgsz3111);
+ KILL(lbits)(&zgsz3111);
+ KILL(lbits)(&zgsz3110);
+ }
+ }
+ unit zgsz3140;
+ if (zgaz335) {
+ zlcarry = UINT64_C(0b01);
+ zgsz3140 = UNIT;
+ } else {
+ zgsz3140 = UNIT;
+ }
+ }
+ {
+ int64_t zgaz340;
+ {
+ sail_int zgsz3112;
+ CREATE(sail_int)(&zgsz3112);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3112, zCAP_MW);
+ sail_int zgsz3113;
+ CREATE(sail_int)(&zgsz3113);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3113, INT64_C(1));
+ sail_int zgsz3114;
+ CREATE(sail_int)(&zgsz3114);
+ sub_int(&zgsz3114, zgsz3112, zgsz3113);
+ zgaz340 = CONVERT_OF(mach_int, sail_int)(zgsz3114);
+ KILL(sail_int)(&zgsz3114);
+ KILL(sail_int)(&zgsz3113);
+ KILL(sail_int)(&zgsz3112);
+ }
+ int64_t zgaz341;
+ {
+ sail_int zgsz3115;
+ CREATE(sail_int)(&zgsz3115);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3115, zCAP_MW);
+ sail_int zgsz3116;
+ CREATE(sail_int)(&zgsz3116);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3116, INT64_C(2));
+ sail_int zgsz3117;
+ CREATE(sail_int)(&zgsz3117);
+ sub_int(&zgsz3117, zgsz3115, zgsz3116);
+ zgaz341 = CONVERT_OF(mach_int, sail_int)(zgsz3117);
+ KILL(sail_int)(&zgsz3117);
+ KILL(sail_int)(&zgsz3116);
+ KILL(sail_int)(&zgsz3115);
+ }
+ uint64_t zgaz342;
+ {
+ uint64_t zgaz339;
+ {
+ uint64_t zgaz338;
+ {
+ int64_t zgaz336;
+ {
+ sail_int zgsz3118;
+ CREATE(sail_int)(&zgsz3118);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3118, zCAP_MW);
+ sail_int zgsz3119;
+ CREATE(sail_int)(&zgsz3119);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3119, INT64_C(1));
+ sail_int zgsz3120;
+ CREATE(sail_int)(&zgsz3120);
+ sub_int(&zgsz3120, zgsz3118, zgsz3119);
+ zgaz336 = CONVERT_OF(mach_int, sail_int)(zgsz3120);
+ KILL(sail_int)(&zgsz3120);
+ KILL(sail_int)(&zgsz3119);
+ KILL(sail_int)(&zgsz3118);
+ }
+ int64_t zgaz337;
+ {
+ sail_int zgsz3121;
+ CREATE(sail_int)(&zgsz3121);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3121, zCAP_MW);
+ sail_int zgsz3122;
+ CREATE(sail_int)(&zgsz3122);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3122, INT64_C(2));
+ sail_int zgsz3123;
+ CREATE(sail_int)(&zgsz3123);
+ sub_int(&zgsz3123, zgsz3121, zgsz3122);
+ zgaz337 = CONVERT_OF(mach_int, sail_int)(zgsz3123);
+ KILL(sail_int)(&zgsz3123);
+ KILL(sail_int)(&zgsz3122);
+ KILL(sail_int)(&zgsz3121);
+ }
+ {
+ lbits zgsz3124;
+ CREATE(lbits)(&zgsz3124);
+ CONVERT_OF(lbits, fbits)(&zgsz3124, zb, UINT64_C(16), true);
+ sail_int zgsz3125;
+ CREATE(sail_int)(&zgsz3125);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3125, zgaz336);
+ sail_int zgsz3126;
+ CREATE(sail_int)(&zgsz3126);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3126, zgaz337);
+ lbits zgsz3127;
+ CREATE(lbits)(&zgsz3127);
+ vector_subrange_lbits(&zgsz3127, zgsz3124, zgsz3125, zgsz3126);
+ zgaz338 = CONVERT_OF(fbits, lbits)(zgsz3127, true);
+ KILL(lbits)(&zgsz3127);
+ KILL(sail_int)(&zgsz3126);
+ KILL(sail_int)(&zgsz3125);
+ KILL(lbits)(&zgsz3124);
+ }
+ }
+ {
+ lbits zgsz3128;
+ CREATE(lbits)(&zgsz3128);
+ CONVERT_OF(lbits, fbits)(&zgsz3128, zgaz338, UINT64_C(2), true);
+ lbits zgsz3129;
+ CREATE(lbits)(&zgsz3129);
+ CONVERT_OF(lbits, fbits)(&zgsz3129, zlmsb, UINT64_C(2), true);
+ lbits zgsz3130;
+ CREATE(lbits)(&zgsz3130);
+ add_bits(&zgsz3130, zgsz3128, zgsz3129);
+ zgaz339 = CONVERT_OF(fbits, lbits)(zgsz3130, true);
+ KILL(lbits)(&zgsz3130);
+ KILL(lbits)(&zgsz3129);
+ KILL(lbits)(&zgsz3128);
+ }
+ }
+ {
+ lbits zgsz3131;
+ CREATE(lbits)(&zgsz3131);
+ CONVERT_OF(lbits, fbits)(&zgsz3131, zgaz339, UINT64_C(2), true);
+ lbits zgsz3132;
+ CREATE(lbits)(&zgsz3132);
+ CONVERT_OF(lbits, fbits)(&zgsz3132, zlcarry, UINT64_C(2), true);
+ lbits zgsz3133;
+ CREATE(lbits)(&zgsz3133);
+ add_bits(&zgsz3133, zgsz3131, zgsz3132);
+ zgaz342 = CONVERT_OF(fbits, lbits)(zgsz3133, true);
+ KILL(lbits)(&zgsz3133);
+ KILL(lbits)(&zgsz3132);
+ KILL(lbits)(&zgsz3131);
+ }
+ }
+ {
+ lbits zgsz3134;
+ CREATE(lbits)(&zgsz3134);
+ CONVERT_OF(lbits, fbits)(&zgsz3134, zt, UINT64_C(16), true);
+ sail_int zgsz3135;
+ CREATE(sail_int)(&zgsz3135);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3135, zgaz340);
+ sail_int zgsz3136;
+ CREATE(sail_int)(&zgsz3136);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3136, zgaz341);
+ lbits zgsz3137;
+ CREATE(lbits)(&zgsz3137);
+ CONVERT_OF(lbits, fbits)(&zgsz3137, zgaz342, UINT64_C(2), true);
+ lbits zgsz3138;
+ CREATE(lbits)(&zgsz3138);
+ vector_update_subrange_lbits(&zgsz3138, zgsz3134, zgsz3135, zgsz3136, zgsz3137);
+ zt = CONVERT_OF(fbits, lbits)(zgsz3138, true);
+ KILL(lbits)(&zgsz3138);
+ KILL(lbits)(&zgsz3137);
+ KILL(sail_int)(&zgsz3136);
+ KILL(sail_int)(&zgsz3135);
+ KILL(lbits)(&zgsz3134);
+ }
+ unit zgsz3139;
+ zgsz3139 = UNIT;
+ }
+ zcbz311 = zt;
+ goto cleanup_72;
+ /* unreachable after return */
+
+ goto end_cleanup_73;
+cleanup_72:;
+
+ goto end_function_71;
+end_cleanup_73:;
+end_function_71:;
+ return zcbz311;
+end_block_exception_74:;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static bool sailgen_CapIsExponentOutOfRange(lbits);
+
+static bool sailgen_CapIsExponentOutOfRange(lbits zc) {
+ __label__ case_77, finish_match_76, end_function_78, end_block_exception_81;
+
+ bool zcbz312;
+ int64_t zgaz345;
+ zgaz345 = sailgen_CapGetExponent(zc);
+ bool zgsz3158;
+ {
+ __label__ cleanup_79, end_cleanup_80;
+
+ int64_t zexp;
+ zexp = zgaz345;
+ bool zgaz347;
+ {
+ bool zgaz346;
+ {
+ sail_int zgsz3160;
+ CREATE(sail_int)(&zgsz3160);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3160, zCAP_MAX_EXPONENT);
+ sail_int zgsz3159;
+ CREATE(sail_int)(&zgsz3159);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3159, zexp);
+ zgaz346 = gt(zgsz3159, zgsz3160);
+ KILL(sail_int)(&zgsz3160);
+ KILL(sail_int)(&zgsz3159);
+ }
+ bool zgsz3161;
+ if (zgaz346) {
+ {
+ sail_int zgsz3163;
+ CREATE(sail_int)(&zgsz3163);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3163, zCAP_MAX_ENCODEABLE_EXPONENT);
+ sail_int zgsz3162;
+ CREATE(sail_int)(&zgsz3162);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3162, zexp);
+ zgsz3161 = lt(zgsz3162, zgsz3163);
+ KILL(sail_int)(&zgsz3163);
+ KILL(sail_int)(&zgsz3162);
+ }
+ } else {
+ zgsz3161 = false;
+ }
+ zgaz347 = zgsz3161;
+ }
+ zcbz312 = zgaz347;
+ goto cleanup_79;
+ /* unreachable after return */
+
+ goto finish_match_76;
+ goto end_cleanup_80;
+ cleanup_79:;
+
+ goto end_function_78;
+ end_cleanup_80:;
+ }
+case_77:;
+ sail_match_failure("CapIsExponentOutOfRange");
+finish_match_76:;
+ zcbz312 = zgsz3158;
+
+end_function_78:;
+ return zcbz312;
+end_block_exception_81:;
+
+ return false;
+}
+
+static bool sailgen_zzzz7NzzJzzK2z3CapUnsignedGreaterThan(uint64_t, uint64_t);
+
+static bool sailgen_zzzz7NzzJzzK2z3CapUnsignedGreaterThan(uint64_t za, uint64_t zb) {
+ __label__ cleanup_84, end_cleanup_85, end_function_83, end_block_exception_86;
+
+ bool zcbz313;
+ bool zgaz350;
+ {
+ int64_t zgaz348;
+ zgaz348 = ((mach_int)za);
+ int64_t zgaz349;
+ zgaz349 = ((mach_int)zb);
+ {
+ sail_int zgsz3166;
+ CREATE(sail_int)(&zgsz3166);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3166, zgaz349);
+ sail_int zgsz3165;
+ CREATE(sail_int)(&zgsz3165);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3165, zgaz348);
+ zgaz350 = gt(zgsz3165, zgsz3166);
+ KILL(sail_int)(&zgsz3166);
+ KILL(sail_int)(&zgsz3165);
+ }
+ }
+ zcbz313 = zgaz350;
+ goto cleanup_84;
+ /* unreachable after return */
+
+ goto end_cleanup_85;
+cleanup_84:;
+
+ goto end_function_83;
+end_cleanup_85:;
+end_function_83:;
+ return zcbz313;
+end_block_exception_86:;
+
+ return false;
+}
+
+// struct tuple_(%bv, %bv, %bool)
+struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9 {
+ lbits ztup0;
+ lbits ztup1;
+ bool ztup2;
+};
+
+static void COPY(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9* rop,
+ const struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9 op) {
+ COPY(lbits)(&rop->ztup0, op.ztup0);
+ COPY(lbits)(&rop->ztup1, op.ztup1);
+ rop->ztup2 = op.ztup2;
+}
+
+static void CREATE(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9* op) {
+ CREATE(lbits)(&op->ztup0);
+ CREATE(lbits)(&op->ztup1);
+}
+
+static void RECREATE(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9* op) {
+ RECREATE(lbits)(&op->ztup0);
+ RECREATE(lbits)(&op->ztup1);
+}
+
+static void KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9* op) {
+ KILL(lbits)(&op->ztup0);
+ KILL(lbits)(&op->ztup1);
+}
+
+static bool EQUAL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9 op1,
+ struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9 op2) {
+ return EQUAL(lbits)(op1.ztup0, op2.ztup0) && EQUAL(lbits)(op1.ztup1, op2.ztup1) &&
+ EQUAL(bool)(op1.ztup2, op2.ztup2);
+}
+
+static void sailgen_CapGetBounds(struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9* rop, lbits);
+
+static void sailgen_CapGetBounds(struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9* zcbz314, lbits zc) {
+ __label__ case_89, finish_match_88, end_function_100, end_block_exception_107, end_function_128;
+
+ int64_t zgaz351;
+ zgaz351 = sailgen_CapGetExponent(zc);
+ struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9 zgsz3167;
+ CREATE(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3167);
+ {
+ __label__ case_91, finish_match_90;
+
+ int64_t zexp;
+ zexp = zgaz351;
+ {
+ bool zgaz352;
+ {
+ sail_int zgsz3169;
+ CREATE(sail_int)(&zgsz3169);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3169, zCAP_MAX_ENCODEABLE_EXPONENT);
+ sail_int zgsz3168;
+ CREATE(sail_int)(&zgsz3168);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3168, zexp);
+ zgaz352 = eq_int(zgsz3168, zgsz3169);
+ KILL(sail_int)(&zgsz3169);
+ KILL(sail_int)(&zgsz3168);
+ }
+ unit zgsz3176;
+ if (zgaz352) {
+ __label__ cleanup_105, end_cleanup_106;
+
+ struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9 zgsz3177;
+ CREATE(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3177);
+ COPY(lbits)(&((&zgsz3177)->ztup0), zCAP_BOUND_MIN);
+ COPY(lbits)(&((&zgsz3177)->ztup1), zCAP_BOUND_MAX);
+ zgsz3177.ztup2 = true;
+ COPY(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)((*(&zcbz314)), zgsz3177);
+ goto cleanup_105;
+ /* unreachable after return */
+ goto end_cleanup_106;
+ cleanup_105:;
+
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3167);
+
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3177);
+ goto end_function_100;
+ end_cleanup_106:;
+ } else {
+ zgsz3176 = UNIT;
+ }
+ }
+ {
+ bool zgaz354;
+ {
+ bool zgaz353;
+ {
+ sail_int zgsz3171;
+ CREATE(sail_int)(&zgsz3171);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3171, zCAP_MAX_ENCODEABLE_EXPONENT);
+ sail_int zgsz3170;
+ CREATE(sail_int)(&zgsz3170);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3170, zexp);
+ zgaz353 = eq_int(zgsz3170, zgsz3171);
+ KILL(sail_int)(&zgsz3171);
+ KILL(sail_int)(&zgsz3170);
+ }
+ zgaz354 = not(zgaz353);
+ }
+ unit zgsz3175;
+ zgsz3175 = sail_assert(zgaz354, "v8_base.sail 1714:4 - 1716:5");
+ }
+ {
+ bool zgaz355;
+ zgaz355 = sailgen_CapIsExponentOutOfRange(zc);
+ unit zgsz3173;
+ if (zgaz355) {
+ __label__ cleanup_103, end_cleanup_104;
+
+ struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9 zgsz3174;
+ CREATE(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3174);
+ COPY(lbits)(&((&zgsz3174)->ztup0), zCAP_BOUND_MIN);
+ COPY(lbits)(&((&zgsz3174)->ztup1), zCAP_BOUND_MAX);
+ zgsz3174.ztup2 = false;
+ COPY(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)((*(&zcbz314)), zgsz3174);
+ goto cleanup_103;
+ /* unreachable after return */
+ goto end_cleanup_104;
+ cleanup_103:;
+
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3167);
+
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3174);
+ goto end_function_100;
+ end_cleanup_104:;
+ } else {
+ zgsz3173 = UNIT;
+ }
+ }
+ {
+ bool zgaz357;
+ {
+ bool zgaz356;
+ zgaz356 = sailgen_CapIsExponentOutOfRange(zc);
+ zgaz357 = not(zgaz356);
+ }
+ unit zgsz3172;
+ zgsz3172 = sail_assert(zgaz357, "v8_base.sail 1717:4 - 1719:5");
+ }
+ lbits zbase;
+ CREATE(lbits)(&zbase);
+ {
+ sail_int zgsz3178;
+ CREATE(sail_int)(&zgsz3178);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3178, INT64_C(66));
+ UNDEFINED(lbits)(&zbase, zgsz3178);
+ KILL(sail_int)(&zgsz3178);
+ }
+ lbits zlimit;
+ CREATE(lbits)(&zlimit);
+ {
+ sail_int zgsz3179;
+ CREATE(sail_int)(&zgsz3179);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3179, INT64_C(66));
+ UNDEFINED(lbits)(&zlimit, zgsz3179);
+ KILL(sail_int)(&zgsz3179);
+ }
+ uint64_t zbottom;
+ zbottom = sailgen_CapGetBottom(zc);
+ uint64_t ztop;
+ ztop = sailgen_CapGetTop(zc);
+ {
+ sbits zgaz358;
+ {
+ sail_int zgsz3180;
+ CREATE(sail_int)(&zgsz3180);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3180, zexp);
+ lbits zgsz3181;
+ CREATE(lbits)(&zgsz3181);
+ sailgen_zzz3zzz3Zeros(&zgsz3181, zgsz3180);
+ zgaz358 = CONVERT_OF(sbits, lbits)(zgsz3181, true);
+ KILL(lbits)(&zgsz3181);
+ KILL(sail_int)(&zgsz3180);
+ }
+ {
+ lbits zgsz3185;
+ CREATE(lbits)(&zgsz3185);
+ CONVERT_OF(lbits, sbits)(&zgsz3185, zgaz358, true);
+ sail_int zgsz3184;
+ CREATE(sail_int)(&zgsz3184);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3184, INT64_C(0));
+ sail_int zgsz3183;
+ CREATE(sail_int)(&zgsz3183);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3183, zexp);
+ sail_int zgsz3182;
+ CREATE(sail_int)(&zgsz3182);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3182, INT64_C(66));
+ set_slice(&zbase, zgsz3182, zgsz3183, zbase, zgsz3184, zgsz3185);
+ KILL(lbits)(&zgsz3185);
+ KILL(sail_int)(&zgsz3184);
+ KILL(sail_int)(&zgsz3183);
+ KILL(sail_int)(&zgsz3182);
+ }
+ unit zgsz3229;
+ zgsz3229 = UNIT;
+ }
+ {
+ sbits zgaz359;
+ {
+ sail_int zgsz3186;
+ CREATE(sail_int)(&zgsz3186);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3186, zexp);
+ lbits zgsz3187;
+ CREATE(lbits)(&zgsz3187);
+ sailgen_zzz3zzz3Zeros(&zgsz3187, zgsz3186);
+ zgaz359 = CONVERT_OF(sbits, lbits)(zgsz3187, true);
+ KILL(lbits)(&zgsz3187);
+ KILL(sail_int)(&zgsz3186);
+ }
+ {
+ lbits zgsz3191;
+ CREATE(lbits)(&zgsz3191);
+ CONVERT_OF(lbits, sbits)(&zgsz3191, zgaz359, true);
+ sail_int zgsz3190;
+ CREATE(sail_int)(&zgsz3190);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3190, INT64_C(0));
+ sail_int zgsz3189;
+ CREATE(sail_int)(&zgsz3189);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3189, zexp);
+ sail_int zgsz3188;
+ CREATE(sail_int)(&zgsz3188);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3188, INT64_C(66));
+ set_slice(&zlimit, zgsz3188, zgsz3189, zlimit, zgsz3190, zgsz3191);
+ KILL(lbits)(&zgsz3191);
+ KILL(sail_int)(&zgsz3190);
+ KILL(sail_int)(&zgsz3189);
+ KILL(sail_int)(&zgsz3188);
+ }
+ unit zgsz3228;
+ zgsz3228 = UNIT;
+ }
+ {
+ bool zgaz365;
+ {
+ bool zgaz364;
+ {
+ int64_t zgaz360;
+ {
+ sail_int zgsz3192;
+ CREATE(sail_int)(&zgsz3192);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3192, zexp);
+ sail_int zgsz3193;
+ CREATE(sail_int)(&zgsz3193);
+ sailgen_zzz3zzz3__id(&zgsz3193, zgsz3192);
+ zgaz360 = CONVERT_OF(mach_int, sail_int)(zgsz3193);
+ KILL(sail_int)(&zgsz3193);
+ KILL(sail_int)(&zgsz3192);
+ }
+ {
+ sail_int zgsz3195;
+ CREATE(sail_int)(&zgsz3195);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3195, zgaz360);
+ sail_int zgsz3194;
+ CREATE(sail_int)(&zgsz3194);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3194, INT64_C(0));
+ zgaz364 = lteq(zgsz3194, zgsz3195);
+ KILL(sail_int)(&zgsz3195);
+ KILL(sail_int)(&zgsz3194);
+ }
+ }
+ bool zgsz3204;
+ if (zgaz364) {
+ int64_t zgaz363;
+ {
+ int64_t zgaz362;
+ {
+ int64_t zgaz361;
+ {
+ sail_int zgsz3196;
+ CREATE(sail_int)(&zgsz3196);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3196, zexp);
+ sail_int zgsz3197;
+ CREATE(sail_int)(&zgsz3197);
+ sailgen_zzz3zzz3__id(&zgsz3197, zgsz3196);
+ zgaz361 = CONVERT_OF(mach_int, sail_int)(zgsz3197);
+ KILL(sail_int)(&zgsz3197);
+ KILL(sail_int)(&zgsz3196);
+ }
+ {
+ sail_int zgsz3198;
+ CREATE(sail_int)(&zgsz3198);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3198, zgaz361);
+ sail_int zgsz3199;
+ CREATE(sail_int)(&zgsz3199);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3199, INT64_C(16));
+ sail_int zgsz3200;
+ CREATE(sail_int)(&zgsz3200);
+ add_int(&zgsz3200, zgsz3198, zgsz3199);
+ zgaz362 = CONVERT_OF(mach_int, sail_int)(zgsz3200);
+ KILL(sail_int)(&zgsz3200);
+ KILL(sail_int)(&zgsz3199);
+ KILL(sail_int)(&zgsz3198);
+ }
+ }
+ {
+ sail_int zgsz3201;
+ CREATE(sail_int)(&zgsz3201);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3201, zgaz362);
+ sail_int zgsz3202;
+ CREATE(sail_int)(&zgsz3202);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3202, INT64_C(1));
+ sail_int zgsz3203;
+ CREATE(sail_int)(&zgsz3203);
+ sub_int(&zgsz3203, zgsz3201, zgsz3202);
+ zgaz363 = CONVERT_OF(mach_int, sail_int)(zgsz3203);
+ KILL(sail_int)(&zgsz3203);
+ KILL(sail_int)(&zgsz3202);
+ KILL(sail_int)(&zgsz3201);
+ }
+ }
+ {
+ sail_int zgsz3206;
+ CREATE(sail_int)(&zgsz3206);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3206, INT64_C(66));
+ sail_int zgsz3205;
+ CREATE(sail_int)(&zgsz3205);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3205, zgaz363);
+ zgsz3204 = lt(zgsz3205, zgsz3206);
+ KILL(sail_int)(&zgsz3206);
+ KILL(sail_int)(&zgsz3205);
+ }
+
+ } else {
+ zgsz3204 = false;
+ }
+ zgaz365 = zgsz3204;
+ }
+ unit zgsz3227;
+ zgsz3227 = sail_assert(zgaz365, "v8_base.sail 1726:57 - 1726:58");
+ }
+ {
+ int64_t zgaz367;
+ {
+ int64_t zgaz366;
+ {
+ sail_int zgsz3207;
+ CREATE(sail_int)(&zgsz3207);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3207, zexp);
+ sail_int zgsz3208;
+ CREATE(sail_int)(&zgsz3208);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3208, zCAP_MW);
+ sail_int zgsz3209;
+ CREATE(sail_int)(&zgsz3209);
+ add_int(&zgsz3209, zgsz3207, zgsz3208);
+ zgaz366 = CONVERT_OF(mach_int, sail_int)(zgsz3209);
+ KILL(sail_int)(&zgsz3209);
+ KILL(sail_int)(&zgsz3208);
+ KILL(sail_int)(&zgsz3207);
+ }
+ {
+ sail_int zgsz3210;
+ CREATE(sail_int)(&zgsz3210);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3210, zgaz366);
+ sail_int zgsz3211;
+ CREATE(sail_int)(&zgsz3211);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3211, INT64_C(1));
+ sail_int zgsz3212;
+ CREATE(sail_int)(&zgsz3212);
+ sub_int(&zgsz3212, zgsz3210, zgsz3211);
+ zgaz367 = CONVERT_OF(mach_int, sail_int)(zgsz3212);
+ KILL(sail_int)(&zgsz3212);
+ KILL(sail_int)(&zgsz3211);
+ KILL(sail_int)(&zgsz3210);
+ }
+ }
+ {
+ lbits zgsz3215;
+ CREATE(lbits)(&zgsz3215);
+ CONVERT_OF(lbits, fbits)(&zgsz3215, zbottom, UINT64_C(16), true);
+ sail_int zgsz3214;
+ CREATE(sail_int)(&zgsz3214);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3214, zexp);
+ sail_int zgsz3213;
+ CREATE(sail_int)(&zgsz3213);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3213, zgaz367);
+ vector_update_subrange_lbits(&zbase, zbase, zgsz3213, zgsz3214, zgsz3215);
+ KILL(lbits)(&zgsz3215);
+ KILL(sail_int)(&zgsz3214);
+ KILL(sail_int)(&zgsz3213);
+ }
+ unit zgsz3226;
+ zgsz3226 = UNIT;
+ }
+ {
+ int64_t zgaz369;
+ {
+ int64_t zgaz368;
+ {
+ sail_int zgsz3216;
+ CREATE(sail_int)(&zgsz3216);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3216, zexp);
+ sail_int zgsz3217;
+ CREATE(sail_int)(&zgsz3217);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3217, zCAP_MW);
+ sail_int zgsz3218;
+ CREATE(sail_int)(&zgsz3218);
+ add_int(&zgsz3218, zgsz3216, zgsz3217);
+ zgaz368 = CONVERT_OF(mach_int, sail_int)(zgsz3218);
+ KILL(sail_int)(&zgsz3218);
+ KILL(sail_int)(&zgsz3217);
+ KILL(sail_int)(&zgsz3216);
+ }
+ {
+ sail_int zgsz3219;
+ CREATE(sail_int)(&zgsz3219);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3219, zgaz368);
+ sail_int zgsz3220;
+ CREATE(sail_int)(&zgsz3220);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3220, INT64_C(1));
+ sail_int zgsz3221;
+ CREATE(sail_int)(&zgsz3221);
+ sub_int(&zgsz3221, zgsz3219, zgsz3220);
+ zgaz369 = CONVERT_OF(mach_int, sail_int)(zgsz3221);
+ KILL(sail_int)(&zgsz3221);
+ KILL(sail_int)(&zgsz3220);
+ KILL(sail_int)(&zgsz3219);
+ }
+ }
+ {
+ lbits zgsz3224;
+ CREATE(lbits)(&zgsz3224);
+ CONVERT_OF(lbits, fbits)(&zgsz3224, ztop, UINT64_C(16), true);
+ sail_int zgsz3223;
+ CREATE(sail_int)(&zgsz3223);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3223, zexp);
+ sail_int zgsz3222;
+ CREATE(sail_int)(&zgsz3222);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3222, zgaz369);
+ vector_update_subrange_lbits(&zlimit, zlimit, zgsz3222, zgsz3223, zgsz3224);
+ KILL(lbits)(&zgsz3224);
+ KILL(sail_int)(&zgsz3223);
+ KILL(sail_int)(&zgsz3222);
+ }
+ unit zgsz3225;
+ zgsz3225 = UNIT;
+ }
+ lbits za;
+ CREATE(lbits)(&za);
+ {
+ uint64_t zgaz3106;
+ {
+ uint64_t zgaz3105;
+ zgaz3105 = sailgen_CapGetValue(zc);
+ zgaz3106 = sailgen_CapBoundsAddress(zgaz3105);
+ }
+ {
+ lbits zgsz3231;
+ CREATE(lbits)(&zgsz3231);
+ CONVERT_OF(lbits, fbits)(&zgsz3231, zgaz3106, UINT64_C(64), true);
+ lbits zgsz3230;
+ CREATE(lbits)(&zgsz3230);
+ CONVERT_OF(lbits, fbits)(&zgsz3230, UINT64_C(0b00), UINT64_C(2), true);
+ append(&za, zgsz3230, zgsz3231);
+ KILL(lbits)(&zgsz3231);
+ KILL(lbits)(&zgsz3230);
+ }
+ }
+ uint64_t zA3;
+ {
+ int64_t zgaz3103;
+ {
+ int64_t zgaz3101;
+ {
+ sail_int zgsz3232;
+ CREATE(sail_int)(&zgsz3232);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3232, zexp);
+ sail_int zgsz3233;
+ CREATE(sail_int)(&zgsz3233);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3233, zCAP_MW);
+ sail_int zgsz3234;
+ CREATE(sail_int)(&zgsz3234);
+ add_int(&zgsz3234, zgsz3232, zgsz3233);
+ zgaz3101 = CONVERT_OF(mach_int, sail_int)(zgsz3234);
+ KILL(sail_int)(&zgsz3234);
+ KILL(sail_int)(&zgsz3233);
+ KILL(sail_int)(&zgsz3232);
+ }
+ {
+ sail_int zgsz3235;
+ CREATE(sail_int)(&zgsz3235);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3235, zgaz3101);
+ sail_int zgsz3236;
+ CREATE(sail_int)(&zgsz3236);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3236, INT64_C(1));
+ sail_int zgsz3237;
+ CREATE(sail_int)(&zgsz3237);
+ sub_int(&zgsz3237, zgsz3235, zgsz3236);
+ zgaz3103 = CONVERT_OF(mach_int, sail_int)(zgsz3237);
+ KILL(sail_int)(&zgsz3237);
+ KILL(sail_int)(&zgsz3236);
+ KILL(sail_int)(&zgsz3235);
+ }
+ }
+ int64_t zgaz3104;
+ {
+ int64_t zgaz3102;
+ {
+ sail_int zgsz3238;
+ CREATE(sail_int)(&zgsz3238);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3238, zexp);
+ sail_int zgsz3239;
+ CREATE(sail_int)(&zgsz3239);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3239, zCAP_MW);
+ sail_int zgsz3240;
+ CREATE(sail_int)(&zgsz3240);
+ add_int(&zgsz3240, zgsz3238, zgsz3239);
+ zgaz3102 = CONVERT_OF(mach_int, sail_int)(zgsz3240);
+ KILL(sail_int)(&zgsz3240);
+ KILL(sail_int)(&zgsz3239);
+ KILL(sail_int)(&zgsz3238);
+ }
+ {
+ sail_int zgsz3241;
+ CREATE(sail_int)(&zgsz3241);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3241, zgaz3102);
+ sail_int zgsz3242;
+ CREATE(sail_int)(&zgsz3242);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3242, INT64_C(3));
+ sail_int zgsz3243;
+ CREATE(sail_int)(&zgsz3243);
+ sub_int(&zgsz3243, zgsz3241, zgsz3242);
+ zgaz3104 = CONVERT_OF(mach_int, sail_int)(zgsz3243);
+ KILL(sail_int)(&zgsz3243);
+ KILL(sail_int)(&zgsz3242);
+ KILL(sail_int)(&zgsz3241);
+ }
+ }
+ {
+ sail_int zgsz3244;
+ CREATE(sail_int)(&zgsz3244);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3244, zgaz3103);
+ sail_int zgsz3245;
+ CREATE(sail_int)(&zgsz3245);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3245, zgaz3104);
+ lbits zgsz3246;
+ CREATE(lbits)(&zgsz3246);
+ vector_subrange_lbits(&zgsz3246, za, zgsz3244, zgsz3245);
+ zA3 = CONVERT_OF(fbits, lbits)(zgsz3246, true);
+ KILL(lbits)(&zgsz3246);
+ KILL(sail_int)(&zgsz3245);
+ KILL(sail_int)(&zgsz3244);
+ }
+ }
+ uint64_t zB3;
+ {
+ int64_t zgaz399;
+ {
+ sail_int zgsz3247;
+ CREATE(sail_int)(&zgsz3247);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3247, zCAP_MW);
+ sail_int zgsz3248;
+ CREATE(sail_int)(&zgsz3248);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3248, INT64_C(1));
+ sail_int zgsz3249;
+ CREATE(sail_int)(&zgsz3249);
+ sub_int(&zgsz3249, zgsz3247, zgsz3248);
+ zgaz399 = CONVERT_OF(mach_int, sail_int)(zgsz3249);
+ KILL(sail_int)(&zgsz3249);
+ KILL(sail_int)(&zgsz3248);
+ KILL(sail_int)(&zgsz3247);
+ }
+ int64_t zgaz3100;
+ {
+ sail_int zgsz3250;
+ CREATE(sail_int)(&zgsz3250);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3250, zCAP_MW);
+ sail_int zgsz3251;
+ CREATE(sail_int)(&zgsz3251);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3251, INT64_C(3));
+ sail_int zgsz3252;
+ CREATE(sail_int)(&zgsz3252);
+ sub_int(&zgsz3252, zgsz3250, zgsz3251);
+ zgaz3100 = CONVERT_OF(mach_int, sail_int)(zgsz3252);
+ KILL(sail_int)(&zgsz3252);
+ KILL(sail_int)(&zgsz3251);
+ KILL(sail_int)(&zgsz3250);
+ }
+ {
+ lbits zgsz3253;
+ CREATE(lbits)(&zgsz3253);
+ CONVERT_OF(lbits, fbits)(&zgsz3253, zbottom, UINT64_C(16), true);
+ sail_int zgsz3254;
+ CREATE(sail_int)(&zgsz3254);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3254, zgaz399);
+ sail_int zgsz3255;
+ CREATE(sail_int)(&zgsz3255);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3255, zgaz3100);
+ lbits zgsz3256;
+ CREATE(lbits)(&zgsz3256);
+ vector_subrange_lbits(&zgsz3256, zgsz3253, zgsz3254, zgsz3255);
+ zB3 = CONVERT_OF(fbits, lbits)(zgsz3256, true);
+ KILL(lbits)(&zgsz3256);
+ KILL(sail_int)(&zgsz3255);
+ KILL(sail_int)(&zgsz3254);
+ KILL(lbits)(&zgsz3253);
+ }
+ }
+ uint64_t zT3;
+ {
+ int64_t zgaz397;
+ {
+ sail_int zgsz3257;
+ CREATE(sail_int)(&zgsz3257);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3257, zCAP_MW);
+ sail_int zgsz3258;
+ CREATE(sail_int)(&zgsz3258);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3258, INT64_C(1));
+ sail_int zgsz3259;
+ CREATE(sail_int)(&zgsz3259);
+ sub_int(&zgsz3259, zgsz3257, zgsz3258);
+ zgaz397 = CONVERT_OF(mach_int, sail_int)(zgsz3259);
+ KILL(sail_int)(&zgsz3259);
+ KILL(sail_int)(&zgsz3258);
+ KILL(sail_int)(&zgsz3257);
+ }
+ int64_t zgaz398;
+ {
+ sail_int zgsz3260;
+ CREATE(sail_int)(&zgsz3260);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3260, zCAP_MW);
+ sail_int zgsz3261;
+ CREATE(sail_int)(&zgsz3261);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3261, INT64_C(3));
+ sail_int zgsz3262;
+ CREATE(sail_int)(&zgsz3262);
+ sub_int(&zgsz3262, zgsz3260, zgsz3261);
+ zgaz398 = CONVERT_OF(mach_int, sail_int)(zgsz3262);
+ KILL(sail_int)(&zgsz3262);
+ KILL(sail_int)(&zgsz3261);
+ KILL(sail_int)(&zgsz3260);
+ }
+ {
+ lbits zgsz3263;
+ CREATE(lbits)(&zgsz3263);
+ CONVERT_OF(lbits, fbits)(&zgsz3263, ztop, UINT64_C(16), true);
+ sail_int zgsz3264;
+ CREATE(sail_int)(&zgsz3264);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3264, zgaz397);
+ sail_int zgsz3265;
+ CREATE(sail_int)(&zgsz3265);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3265, zgaz398);
+ lbits zgsz3266;
+ CREATE(lbits)(&zgsz3266);
+ vector_subrange_lbits(&zgsz3266, zgsz3263, zgsz3264, zgsz3265);
+ zT3 = CONVERT_OF(fbits, lbits)(zgsz3266, true);
+ KILL(lbits)(&zgsz3266);
+ KILL(sail_int)(&zgsz3265);
+ KILL(sail_int)(&zgsz3264);
+ KILL(lbits)(&zgsz3263);
+ }
+ }
+ uint64_t zR3;
+ {
+ lbits zgsz3267;
+ CREATE(lbits)(&zgsz3267);
+ CONVERT_OF(lbits, fbits)(&zgsz3267, zB3, UINT64_C(3), true);
+ lbits zgsz3268;
+ CREATE(lbits)(&zgsz3268);
+ CONVERT_OF(lbits, fbits)(&zgsz3268, UINT64_C(0b001), UINT64_C(3), true);
+ lbits zgsz3269;
+ CREATE(lbits)(&zgsz3269);
+ sub_bits(&zgsz3269, zgsz3267, zgsz3268);
+ zR3 = CONVERT_OF(fbits, lbits)(zgsz3269, true);
+ KILL(lbits)(&zgsz3269);
+ KILL(lbits)(&zgsz3268);
+ KILL(lbits)(&zgsz3267);
+ }
+ int64_t zaHi;
+ zaHi = INT64_C(0);
+ {
+ bool zgaz370;
+ zgaz370 = sailgen_zzzz7NzzJzzK3z3CapUnsignedLessThan(zA3, zR3);
+ unit zgsz3270;
+ if (zgaz370) {
+ zaHi = INT64_C(1);
+ zgsz3270 = UNIT;
+ } else {
+ zaHi = INT64_C(0);
+ zgsz3270 = UNIT;
+ }
+ }
+ struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9 zgsz3271;
+ CREATE(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3271);
+ {
+ __label__ case_93, finish_match_92;
+
+ int64_t zaHishadowz30;
+ zaHishadowz30 = zaHi;
+ int64_t zbHi;
+ zbHi = INT64_C(0);
+ {
+ bool zgaz371;
+ zgaz371 = sailgen_zzzz7NzzJzzK3z3CapUnsignedLessThan(zB3, zR3);
+ unit zgsz3272;
+ if (zgaz371) {
+ zbHi = INT64_C(1);
+ zgsz3272 = UNIT;
+ } else {
+ zbHi = INT64_C(0);
+ zgsz3272 = UNIT;
+ }
+ }
+ struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9 zgsz3273;
+ CREATE(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3273);
+ {
+ __label__ case_95, finish_match_94;
+
+ int64_t zbHishadowz31;
+ zbHishadowz31 = zbHi;
+ int64_t ztHi;
+ ztHi = INT64_C(0);
+ {
+ bool zgaz372;
+ zgaz372 = sailgen_zzzz7NzzJzzK3z3CapUnsignedLessThan(zT3, zR3);
+ unit zgsz3274;
+ if (zgaz372) {
+ ztHi = INT64_C(1);
+ zgsz3274 = UNIT;
+ } else {
+ ztHi = INT64_C(0);
+ zgsz3274 = UNIT;
+ }
+ }
+ struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9 zgsz3275;
+ CREATE(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3275);
+ {
+ __label__ case_97, finish_match_96;
+
+ int64_t ztHishadowz32;
+ ztHishadowz32 = ztHi;
+ int64_t zgaz373;
+ {
+ sail_int zgsz3276;
+ CREATE(sail_int)(&zgsz3276);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3276, zbHishadowz31);
+ sail_int zgsz3277;
+ CREATE(sail_int)(&zgsz3277);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3277, zaHishadowz30);
+ sail_int zgsz3278;
+ CREATE(sail_int)(&zgsz3278);
+ sub_int(&zgsz3278, zgsz3276, zgsz3277);
+ zgaz373 = CONVERT_OF(mach_int, sail_int)(zgsz3278);
+ KILL(sail_int)(&zgsz3278);
+ KILL(sail_int)(&zgsz3277);
+ KILL(sail_int)(&zgsz3276);
+ }
+ struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9 zgsz3279;
+ CREATE(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3279);
+ {
+ __label__ case_99, finish_match_98;
+
+ int64_t zcorrection_base;
+ zcorrection_base = zgaz373;
+ int64_t zgaz374;
+ {
+ sail_int zgsz3280;
+ CREATE(sail_int)(&zgsz3280);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3280, ztHishadowz32);
+ sail_int zgsz3281;
+ CREATE(sail_int)(&zgsz3281);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3281, zaHishadowz30);
+ sail_int zgsz3282;
+ CREATE(sail_int)(&zgsz3282);
+ sub_int(&zgsz3282, zgsz3280, zgsz3281);
+ zgaz374 = CONVERT_OF(mach_int, sail_int)(zgsz3282);
+ KILL(sail_int)(&zgsz3282);
+ KILL(sail_int)(&zgsz3281);
+ KILL(sail_int)(&zgsz3280);
+ }
+ struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9 zgsz3283;
+ CREATE(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3283);
+ {
+ __label__ cleanup_101, end_cleanup_102;
+
+ int64_t zcorrection_limit;
+ zcorrection_limit = zgaz374;
+ {
+ bool zgaz377;
+ {
+ int64_t zgaz375;
+ {
+ sail_int zgsz3284;
+ CREATE(sail_int)(&zgsz3284);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3284, zexp);
+ sail_int zgsz3285;
+ CREATE(sail_int)(&zgsz3285);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3285, zCAP_MW);
+ sail_int zgsz3286;
+ CREATE(sail_int)(&zgsz3286);
+ add_int(&zgsz3286, zgsz3284, zgsz3285);
+ zgaz375 = CONVERT_OF(mach_int, sail_int)(zgsz3286);
+ KILL(sail_int)(&zgsz3286);
+ KILL(sail_int)(&zgsz3285);
+ KILL(sail_int)(&zgsz3284);
+ }
+ int64_t zgaz376;
+ {
+ sail_int zgsz3287;
+ CREATE(sail_int)(&zgsz3287);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3287, zCAP_MAX_EXPONENT);
+ sail_int zgsz3288;
+ CREATE(sail_int)(&zgsz3288);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3288, zCAP_MW);
+ sail_int zgsz3289;
+ CREATE(sail_int)(&zgsz3289);
+ add_int(&zgsz3289, zgsz3287, zgsz3288);
+ zgaz376 = CONVERT_OF(mach_int, sail_int)(zgsz3289);
+ KILL(sail_int)(&zgsz3289);
+ KILL(sail_int)(&zgsz3288);
+ KILL(sail_int)(&zgsz3287);
+ }
+ {
+ sail_int zgsz3291;
+ CREATE(sail_int)(&zgsz3291);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3291, zgaz376);
+ sail_int zgsz3290;
+ CREATE(sail_int)(&zgsz3290);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3290, zgaz375);
+ zgaz377 = lt(zgsz3290, zgsz3291);
+ KILL(sail_int)(&zgsz3291);
+ KILL(sail_int)(&zgsz3290);
+ }
+ }
+ unit zgsz3292;
+ if (zgaz377) {
+ sbits zatop;
+ {
+ int64_t zgaz382;
+ {
+ sail_int zgsz3293;
+ CREATE(sail_int)(&zgsz3293);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3293, zexp);
+ sail_int zgsz3294;
+ CREATE(sail_int)(&zgsz3294);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3294, zCAP_MW);
+ sail_int zgsz3295;
+ CREATE(sail_int)(&zgsz3295);
+ add_int(&zgsz3295, zgsz3293, zgsz3294);
+ zgaz382 = CONVERT_OF(mach_int, sail_int)(zgsz3295);
+ KILL(sail_int)(&zgsz3295);
+ KILL(sail_int)(&zgsz3294);
+ KILL(sail_int)(&zgsz3293);
+ }
+ {
+ sail_int zgsz3296;
+ CREATE(sail_int)(&zgsz3296);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3296, INT64_C(65));
+ sail_int zgsz3297;
+ CREATE(sail_int)(&zgsz3297);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3297, zgaz382);
+ lbits zgsz3298;
+ CREATE(lbits)(&zgsz3298);
+ vector_subrange_lbits(&zgsz3298, za, zgsz3296, zgsz3297);
+ zatop = CONVERT_OF(sbits, lbits)(zgsz3298, true);
+ KILL(lbits)(&zgsz3298);
+ KILL(sail_int)(&zgsz3297);
+ KILL(sail_int)(&zgsz3296);
+ }
+ }
+ {
+ int64_t zgaz378;
+ {
+ sail_int zgsz3299;
+ CREATE(sail_int)(&zgsz3299);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3299, zexp);
+ sail_int zgsz3300;
+ CREATE(sail_int)(&zgsz3300);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3300, zCAP_MW);
+ sail_int zgsz3301;
+ CREATE(sail_int)(&zgsz3301);
+ add_int(&zgsz3301, zgsz3299, zgsz3300);
+ zgaz378 = CONVERT_OF(mach_int, sail_int)(zgsz3301);
+ KILL(sail_int)(&zgsz3301);
+ KILL(sail_int)(&zgsz3300);
+ KILL(sail_int)(&zgsz3299);
+ }
+ sbits zgaz379;
+ {
+ lbits zgsz3302;
+ CREATE(lbits)(&zgsz3302);
+ CONVERT_OF(lbits, sbits)(&zgsz3302, zatop, true);
+ sail_int zgsz3303;
+ CREATE(sail_int)(&zgsz3303);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3303, zcorrection_base);
+ lbits zgsz3304;
+ CREATE(lbits)(&zgsz3304);
+ add_bits_int(&zgsz3304, zgsz3302, zgsz3303);
+ zgaz379 = CONVERT_OF(sbits, lbits)(zgsz3304, true);
+ KILL(lbits)(&zgsz3304);
+ KILL(sail_int)(&zgsz3303);
+ KILL(lbits)(&zgsz3302);
+ }
+ {
+ lbits zgsz3307;
+ CREATE(lbits)(&zgsz3307);
+ CONVERT_OF(lbits, sbits)(&zgsz3307, zgaz379, true);
+ sail_int zgsz3306;
+ CREATE(sail_int)(&zgsz3306);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3306, zgaz378);
+ sail_int zgsz3305;
+ CREATE(sail_int)(&zgsz3305);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3305, INT64_C(65));
+ vector_update_subrange_lbits(&zbase, zbase, zgsz3305, zgsz3306, zgsz3307);
+ KILL(lbits)(&zgsz3307);
+ KILL(sail_int)(&zgsz3306);
+ KILL(sail_int)(&zgsz3305);
+ }
+ unit zgsz3308;
+ zgsz3308 = UNIT;
+ }
+ int64_t zgaz380;
+ {
+ sail_int zgsz3309;
+ CREATE(sail_int)(&zgsz3309);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3309, zexp);
+ sail_int zgsz3310;
+ CREATE(sail_int)(&zgsz3310);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3310, zCAP_MW);
+ sail_int zgsz3311;
+ CREATE(sail_int)(&zgsz3311);
+ add_int(&zgsz3311, zgsz3309, zgsz3310);
+ zgaz380 = CONVERT_OF(mach_int, sail_int)(zgsz3311);
+ KILL(sail_int)(&zgsz3311);
+ KILL(sail_int)(&zgsz3310);
+ KILL(sail_int)(&zgsz3309);
+ }
+ sbits zgaz381;
+ {
+ lbits zgsz3312;
+ CREATE(lbits)(&zgsz3312);
+ CONVERT_OF(lbits, sbits)(&zgsz3312, zatop, true);
+ sail_int zgsz3313;
+ CREATE(sail_int)(&zgsz3313);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3313, zcorrection_limit);
+ lbits zgsz3314;
+ CREATE(lbits)(&zgsz3314);
+ add_bits_int(&zgsz3314, zgsz3312, zgsz3313);
+ zgaz381 = CONVERT_OF(sbits, lbits)(zgsz3314, true);
+ KILL(lbits)(&zgsz3314);
+ KILL(sail_int)(&zgsz3313);
+ KILL(lbits)(&zgsz3312);
+ }
+ {
+ lbits zgsz3317;
+ CREATE(lbits)(&zgsz3317);
+ CONVERT_OF(lbits, sbits)(&zgsz3317, zgaz381, true);
+ sail_int zgsz3316;
+ CREATE(sail_int)(&zgsz3316);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3316, zgaz380);
+ sail_int zgsz3315;
+ CREATE(sail_int)(&zgsz3315);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3315, INT64_C(65));
+ vector_update_subrange_lbits(&zlimit, zlimit, zgsz3315, zgsz3316, zgsz3317);
+ KILL(lbits)(&zgsz3317);
+ KILL(sail_int)(&zgsz3316);
+ KILL(sail_int)(&zgsz3315);
+ }
+ zgsz3292 = UNIT;
+
+ } else {
+ zgsz3292 = UNIT;
+ }
+ }
+ uint64_t zl2;
+ {
+ sail_int zgsz3318;
+ CREATE(sail_int)(&zgsz3318);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3318, INT64_C(64));
+ sail_int zgsz3319;
+ CREATE(sail_int)(&zgsz3319);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3319, INT64_C(63));
+ lbits zgsz3320;
+ CREATE(lbits)(&zgsz3320);
+ vector_subrange_lbits(&zgsz3320, zlimit, zgsz3318, zgsz3319);
+ zl2 = CONVERT_OF(fbits, lbits)(zgsz3320, true);
+ KILL(lbits)(&zgsz3320);
+ KILL(sail_int)(&zgsz3319);
+ KILL(sail_int)(&zgsz3318);
+ }
+ uint64_t zb2;
+ {
+ uint64_t zgaz396;
+ {
+ fbits zgaz395;
+ {
+ sail_int zgsz3321;
+ CREATE(sail_int)(&zgsz3321);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3321, INT64_C(63));
+ zgaz395 = bitvector_access(zbase, zgsz3321);
+ KILL(sail_int)(&zgsz3321);
+ }
+ uint64_t zgsz3322;
+ zgsz3322 = UINT64_C(0b0);
+ zgsz3322 = update_fbits(zgsz3322, INT64_C(0), zgaz395);
+ zgaz396 = zgsz3322;
+ }
+ {
+ lbits zgsz3323;
+ CREATE(lbits)(&zgsz3323);
+ CONVERT_OF(lbits, fbits)(&zgsz3323, UINT64_C(0b0), UINT64_C(1), true);
+ lbits zgsz3324;
+ CREATE(lbits)(&zgsz3324);
+ CONVERT_OF(lbits, fbits)(&zgsz3324, zgaz396, UINT64_C(1), true);
+ lbits zgsz3325;
+ CREATE(lbits)(&zgsz3325);
+ append(&zgsz3325, zgsz3323, zgsz3324);
+ zb2 = CONVERT_OF(fbits, lbits)(zgsz3325, true);
+ KILL(lbits)(&zgsz3325);
+ KILL(lbits)(&zgsz3324);
+ KILL(lbits)(&zgsz3323);
+ }
+ }
+ {
+ bool zgaz386;
+ {
+ bool zgaz385;
+ {
+ int64_t zgaz383;
+ {
+ sail_int zgsz3326;
+ CREATE(sail_int)(&zgsz3326);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3326, zCAP_MAX_EXPONENT);
+ sail_int zgsz3327;
+ CREATE(sail_int)(&zgsz3327);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3327, INT64_C(1));
+ sail_int zgsz3328;
+ CREATE(sail_int)(&zgsz3328);
+ sub_int(&zgsz3328, zgsz3326, zgsz3327);
+ zgaz383 = CONVERT_OF(mach_int, sail_int)(zgsz3328);
+ KILL(sail_int)(&zgsz3328);
+ KILL(sail_int)(&zgsz3327);
+ KILL(sail_int)(&zgsz3326);
+ }
+ {
+ sail_int zgsz3330;
+ CREATE(sail_int)(&zgsz3330);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3330, zgaz383);
+ sail_int zgsz3329;
+ CREATE(sail_int)(&zgsz3329);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3329, zexp);
+ zgaz385 = lt(zgsz3329, zgsz3330);
+ KILL(sail_int)(&zgsz3330);
+ KILL(sail_int)(&zgsz3329);
+ }
+ }
+ bool zgsz3334;
+ if (zgaz385) {
+ uint64_t zgaz384;
+ {
+ lbits zgsz3331;
+ CREATE(lbits)(&zgsz3331);
+ CONVERT_OF(lbits, fbits)(&zgsz3331, zl2, UINT64_C(2), true);
+ lbits zgsz3332;
+ CREATE(lbits)(&zgsz3332);
+ CONVERT_OF(lbits, fbits)(&zgsz3332, zb2, UINT64_C(2), true);
+ lbits zgsz3333;
+ CREATE(lbits)(&zgsz3333);
+ sub_bits(&zgsz3333, zgsz3331, zgsz3332);
+ zgaz384 = CONVERT_OF(fbits, lbits)(zgsz3333, true);
+ KILL(lbits)(&zgsz3333);
+ KILL(lbits)(&zgsz3332);
+ KILL(lbits)(&zgsz3331);
+ }
+ zgsz3334 =
+ sailgen_zzzz7NzzJzzK2z3CapUnsignedGreaterThan(zgaz384, UINT64_C(0b01));
+
+ } else {
+ zgsz3334 = false;
+ }
+ zgaz386 = zgsz3334;
+ }
+ unit zgsz3335;
+ if (zgaz386) {
+ fbits zgaz390;
+ {
+ uint64_t zgaz389;
+ {
+ uint64_t zgaz388;
+ {
+ fbits zgaz387;
+ {
+ sail_int zgsz3336;
+ CREATE(sail_int)(&zgsz3336);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3336, INT64_C(64));
+ zgaz387 = bitvector_access(zlimit, zgsz3336);
+ KILL(sail_int)(&zgsz3336);
+ }
+ uint64_t zgsz3337;
+ zgsz3337 = UINT64_C(0b0);
+ zgsz3337 = update_fbits(zgsz3337, INT64_C(0), zgaz387);
+ zgaz388 = zgsz3337;
+ }
+ {
+ lbits zgsz3338;
+ CREATE(lbits)(&zgsz3338);
+ CONVERT_OF(lbits, fbits)(&zgsz3338, zgaz388, UINT64_C(1), true);
+ lbits zgsz3339;
+ CREATE(lbits)(&zgsz3339);
+ not_bits(&zgsz3339, zgsz3338);
+ zgaz389 = CONVERT_OF(fbits, lbits)(zgsz3339, true);
+ KILL(lbits)(&zgsz3339);
+ KILL(lbits)(&zgsz3338);
+ }
+ }
+ zgaz390 = sailgen_Bit(zgaz389);
+ }
+ {
+ sail_int zgsz3340;
+ CREATE(sail_int)(&zgsz3340);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3340, INT64_C(64));
+ update_lbits(&zlimit, zlimit, zgsz3340, zgaz390);
+ KILL(sail_int)(&zgsz3340);
+ }
+ zgsz3335 = UNIT;
+
+ } else {
+ zgsz3335 = UNIT;
+ }
+ }
+ struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9 zgaz394;
+ CREATE(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgaz394);
+ {
+ lbits zgaz392;
+ CREATE(lbits)(&zgaz392);
+ {
+ uint64_t zgaz391;
+ {
+ sail_int zgsz3341;
+ CREATE(sail_int)(&zgsz3341);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3341, INT64_C(63));
+ sail_int zgsz3342;
+ CREATE(sail_int)(&zgsz3342);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3342, INT64_C(0));
+ lbits zgsz3343;
+ CREATE(lbits)(&zgsz3343);
+ vector_subrange_lbits(&zgsz3343, zbase, zgsz3341, zgsz3342);
+ zgaz391 = CONVERT_OF(fbits, lbits)(zgsz3343, true);
+ KILL(lbits)(&zgsz3343);
+ KILL(sail_int)(&zgsz3342);
+ KILL(sail_int)(&zgsz3341);
+ }
+ {
+ lbits zgsz3345;
+ CREATE(lbits)(&zgsz3345);
+ CONVERT_OF(lbits, fbits)(&zgsz3345, zgaz391, UINT64_C(64), true);
+ lbits zgsz3344;
+ CREATE(lbits)(&zgsz3344);
+ CONVERT_OF(lbits, fbits)(&zgsz3344, UINT64_C(0b0), UINT64_C(1), true);
+ append(&zgaz392, zgsz3344, zgsz3345);
+ KILL(lbits)(&zgsz3345);
+ KILL(lbits)(&zgsz3344);
+ }
+ }
+ lbits zgaz393;
+ CREATE(lbits)(&zgaz393);
+ {
+ sail_int zgsz3347;
+ CREATE(sail_int)(&zgsz3347);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3347, INT64_C(0));
+ sail_int zgsz3346;
+ CREATE(sail_int)(&zgsz3346);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3346, INT64_C(64));
+ vector_subrange_lbits(&zgaz393, zlimit, zgsz3346, zgsz3347);
+ KILL(sail_int)(&zgsz3347);
+ KILL(sail_int)(&zgsz3346);
+ }
+ struct ztuple_z8z5bvzCz0z5bvzCz0z5boolz9 zgsz3348;
+ CREATE(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3348);
+ COPY(lbits)(&((&zgsz3348)->ztup0), zgaz392);
+ COPY(lbits)(&((&zgsz3348)->ztup1), zgaz393);
+ zgsz3348.ztup2 = true;
+ COPY(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgaz394, zgsz3348);
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3348);
+ KILL(lbits)(&zgaz393);
+ KILL(lbits)(&zgaz392);
+ }
+ COPY(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)((*(&zcbz314)), zgaz394);
+ goto cleanup_101;
+ /* unreachable after return */
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgaz394);
+
+ goto finish_match_98;
+ goto end_cleanup_102;
+ cleanup_101:;
+
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3167);
+
+ KILL(lbits)(&zbase);
+ KILL(lbits)(&zlimit);
+
+ KILL(lbits)(&za);
+
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3271);
+
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3273);
+
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3275);
+
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3279);
+
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3283);
+
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgaz394);
+ goto end_function_100;
+ end_cleanup_102:;
+ }
+ case_99:;
+ sail_match_failure("CapGetBounds");
+ finish_match_98:;
+ COPY(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3279, zgsz3283);
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3283);
+
+ goto finish_match_96;
+ }
+ case_97:;
+ sail_match_failure("CapGetBounds");
+ finish_match_96:;
+ COPY(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3275, zgsz3279);
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3279);
+
+ goto finish_match_94;
+ }
+ case_95:;
+ sail_match_failure("CapGetBounds");
+ finish_match_94:;
+ COPY(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3273, zgsz3275);
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3275);
+
+ goto finish_match_92;
+ }
+ case_93:;
+ sail_match_failure("CapGetBounds");
+ finish_match_92:;
+ COPY(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3271, zgsz3273);
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3273);
+
+ goto finish_match_90;
+ }
+ case_91:;
+ sail_match_failure("CapGetBounds");
+ finish_match_90:;
+ COPY(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3167, zgsz3271);
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3271);
+
+ KILL(lbits)(&za);
+
+ KILL(lbits)(&zlimit);
+ KILL(lbits)(&zbase);
+
+ goto finish_match_88;
+ }
+case_89:;
+ sail_match_failure("CapGetBounds");
+finish_match_88:;
+ COPY(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)((*(&zcbz314)), zgsz3167);
+ KILL(ztuple_z8z5bvzCz0z5bvzCz0z5boolz9)(&zgsz3167);
+
+end_function_100:;
+ goto end_function_128;
+end_block_exception_107:;
+ goto end_function_128;
+end_function_128:;
+}
+
+static int64_t zCAP_TAG_BIT;
+static void create_letbind_19(void) {
+
+ int64_t zgsz3355;
+ zgsz3355 = INT64_C(128);
+ zCAP_TAG_BIT = zgsz3355;
+
+let_end_108:;
+}
+static void kill_letbind_19(void) {}
+
+static int64_t zCAP_OTYPE_HI_BIT;
+static void create_letbind_20(void) {
+
+ int64_t zgsz3356;
+ zgsz3356 = INT64_C(109);
+ zCAP_OTYPE_HI_BIT = zgsz3356;
+
+let_end_109:;
+}
+static void kill_letbind_20(void) {}
+
+static int64_t zCAP_OTYPE_LO_BIT;
+static void create_letbind_21(void) {
+
+ int64_t zgsz3357;
+ zgsz3357 = INT64_C(95);
+ zCAP_OTYPE_LO_BIT = zgsz3357;
+
+let_end_110:;
+}
+static void kill_letbind_21(void) {}
+
+static uint64_t sailgen_CapGetObjectType(lbits);
+
+static uint64_t sailgen_CapGetObjectType(lbits zc) {
+ __label__ cleanup_113, end_cleanup_114, end_function_112, end_block_exception_115;
+
+ uint64_t zcbz315;
+ uint64_t zgaz3108;
+ {
+ uint64_t zgaz3107;
+ {
+ sail_int zgsz3358;
+ CREATE(sail_int)(&zgsz3358);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3358, zCAP_OTYPE_HI_BIT);
+ sail_int zgsz3359;
+ CREATE(sail_int)(&zgsz3359);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3359, zCAP_OTYPE_LO_BIT);
+ lbits zgsz3360;
+ CREATE(lbits)(&zgsz3360);
+ vector_subrange_lbits(&zgsz3360, zc, zgsz3358, zgsz3359);
+ zgaz3107 = CONVERT_OF(fbits, lbits)(zgsz3360, true);
+ KILL(lbits)(&zgsz3360);
+ KILL(sail_int)(&zgsz3359);
+ KILL(sail_int)(&zgsz3358);
+ }
+ {
+ lbits zgsz3361;
+ CREATE(lbits)(&zgsz3361);
+ CONVERT_OF(lbits, fbits)(&zgsz3361, zgaz3107, UINT64_C(15), true);
+ sail_int zgsz3362;
+ CREATE(sail_int)(&zgsz3362);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3362, zCAP_VALUE_NUM_BITS);
+ lbits zgsz3363;
+ CREATE(lbits)(&zgsz3363);
+ zero_extend(&zgsz3363, zgsz3361, zgsz3362);
+ zgaz3108 = CONVERT_OF(fbits, lbits)(zgsz3363, true);
+ KILL(lbits)(&zgsz3363);
+ KILL(sail_int)(&zgsz3362);
+ KILL(lbits)(&zgsz3361);
+ }
+ }
+ zcbz315 = zgaz3108;
+ goto cleanup_113;
+ /* unreachable after return */
+
+ goto end_cleanup_114;
+cleanup_113:;
+
+ goto end_function_112;
+end_cleanup_114:;
+end_function_112:;
+ return zcbz315;
+end_block_exception_115:;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static int64_t zCAP_PERMS_HI_BIT;
+static void create_letbind_22(void) {
+
+ int64_t zgsz3364;
+ zgsz3364 = INT64_C(127);
+ zCAP_PERMS_HI_BIT = zgsz3364;
+
+let_end_116:;
+}
+static void kill_letbind_22(void) {}
+
+static int64_t zCAP_PERMS_LO_BIT;
+static void create_letbind_23(void) {
+
+ int64_t zgsz3365;
+ zgsz3365 = INT64_C(110);
+ zCAP_PERMS_LO_BIT = zgsz3365;
+
+let_end_117:;
+}
+static void kill_letbind_23(void) {}
+
+static uint64_t sailgen_CapGetPermissions(lbits);
+
+static uint64_t sailgen_CapGetPermissions(lbits zc) {
+ __label__ cleanup_120, end_cleanup_121, end_function_119, end_block_exception_122;
+
+ uint64_t zcbz316;
+ uint64_t zgaz3109;
+ {
+ sail_int zgsz3366;
+ CREATE(sail_int)(&zgsz3366);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3366, zCAP_PERMS_HI_BIT);
+ sail_int zgsz3367;
+ CREATE(sail_int)(&zgsz3367);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3367, zCAP_PERMS_LO_BIT);
+ lbits zgsz3368;
+ CREATE(lbits)(&zgsz3368);
+ vector_subrange_lbits(&zgsz3368, zc, zgsz3366, zgsz3367);
+ zgaz3109 = CONVERT_OF(fbits, lbits)(zgsz3368, true);
+ KILL(lbits)(&zgsz3368);
+ KILL(sail_int)(&zgsz3367);
+ KILL(sail_int)(&zgsz3366);
+ }
+ zcbz316 = zgaz3109;
+ goto cleanup_120;
+ /* unreachable after return */
+
+ goto end_cleanup_121;
+cleanup_120:;
+
+ goto end_function_119;
+end_cleanup_121:;
+end_function_119:;
+ return zcbz316;
+end_block_exception_122:;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_CapGetTag(lbits);
+
+static uint64_t sailgen_CapGetTag(lbits zc) {
+ __label__ cleanup_125, end_cleanup_126, end_function_124, end_block_exception_127;
+
+ uint64_t zcbz317;
+ uint64_t zgaz3112;
+ {
+ uint64_t zgaz3111;
+ {
+ fbits zgaz3110;
+ {
+ sail_int zgsz3369;
+ CREATE(sail_int)(&zgsz3369);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3369, zCAP_TAG_BIT);
+ zgaz3110 = bitvector_access(zc, zgsz3369);
+ KILL(sail_int)(&zgsz3369);
+ }
+ uint64_t zgsz3370;
+ zgsz3370 = UINT64_C(0b0);
+ zgsz3370 = update_fbits(zgsz3370, INT64_C(0), zgaz3110);
+ zgaz3111 = zgsz3370;
+ }
+ {
+ lbits zgsz3371;
+ CREATE(lbits)(&zgsz3371);
+ CONVERT_OF(lbits, fbits)(&zgsz3371, zgaz3111, UINT64_C(1), true);
+ sail_int zgsz3372;
+ CREATE(sail_int)(&zgsz3372);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3372, INT64_C(64));
+ lbits zgsz3373;
+ CREATE(lbits)(&zgsz3373);
+ zero_extend(&zgsz3373, zgsz3371, zgsz3372);
+ zgaz3112 = CONVERT_OF(fbits, lbits)(zgsz3373, true);
+ KILL(lbits)(&zgsz3373);
+ KILL(sail_int)(&zgsz3372);
+ KILL(lbits)(&zgsz3371);
+ }
+ }
+ zcbz317 = zgaz3112;
+ goto cleanup_125;
+ /* unreachable after return */
+
+ goto end_cleanup_126;
+cleanup_125:;
+
+ goto end_function_124;
+end_cleanup_126:;
+end_function_124:;
+ return zcbz317;
+end_block_exception_127:;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static void model_init(void) {
+ setup_rts();
+ create_letbind_0();
+ create_letbind_1();
+ create_letbind_2();
+ create_letbind_3();
+ create_letbind_4();
+ create_letbind_5();
+ create_letbind_6();
+ create_letbind_7();
+ create_letbind_8();
+ create_letbind_9();
+ create_letbind_10();
+ create_letbind_11();
+ create_letbind_12();
+ create_letbind_13();
+ create_letbind_14();
+ create_letbind_15();
+ create_letbind_16();
+ create_letbind_17();
+ create_letbind_18();
+ create_letbind_19();
+ create_letbind_20();
+ create_letbind_21();
+ create_letbind_22();
+ create_letbind_23();
+}
+
+static void model_fini(void) {
+ kill_letbind_23();
+ kill_letbind_22();
+ kill_letbind_21();
+ kill_letbind_20();
+ kill_letbind_19();
+ kill_letbind_18();
+ kill_letbind_17();
+ kill_letbind_16();
+ kill_letbind_15();
+ kill_letbind_14();
+ kill_letbind_13();
+ kill_letbind_12();
+ kill_letbind_11();
+ kill_letbind_10();
+ kill_letbind_9();
+ kill_letbind_8();
+ kill_letbind_7();
+ kill_letbind_6();
+ kill_letbind_5();
+ kill_letbind_4();
+ kill_letbind_3();
+ kill_letbind_2();
+ kill_letbind_1();
+ kill_letbind_0();
+ cleanup_rts();
+}
diff --git a/gdb/cheri-compressed-cap/test/sail_compression_64.c b/gdb/cheri-compressed-cap/test/sail_compression_64.c
new file mode 100644
index 00000000000..026657243a9
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/sail_compression_64.c
@@ -0,0 +1,9293 @@
+#include "sail.h"
+#include "rts.h"
+#include "elf.h"
+
+// enum write_kind
+enum zwrite_kind { zWrite_plain, zWrite_conditional, zWrite_release, zWrite_exclusive, zWrite_exclusive_release, zWrite_RISCV_release, zWrite_RISCV_strong_release, zWrite_RISCV_conditional, zWrite_RISCV_conditional_release, zWrite_RISCV_conditional_strong_release, zWrite_X86_locked };
+
+static bool eq_zwrite_kind(enum zwrite_kind op1, enum zwrite_kind op2) { return op1 == op2; }
+
+static enum zwrite_kind UNDEFINED(zwrite_kind)(unit u) { return zWrite_plain; }
+
+// enum trans_kind
+enum ztrans_kind { zTransaction_start, zTransaction_commit, zTransaction_abort };
+
+static bool eq_ztrans_kind(enum ztrans_kind op1, enum ztrans_kind op2) { return op1 == op2; }
+
+static enum ztrans_kind UNDEFINED(ztrans_kind)(unit u) { return zTransaction_start; }
+
+// struct tuple_(%string, %i)
+struct ztuple_z8z5stringzCz0z5iz9 {
+ sail_string ztup0;
+ sail_int ztup1;
+};
+
+static void COPY(ztuple_z8z5stringzCz0z5iz9)(struct ztuple_z8z5stringzCz0z5iz9 *rop, const struct ztuple_z8z5stringzCz0z5iz9 op) {
+ COPY(sail_string)(&rop->ztup0, op.ztup0);
+ COPY(sail_int)(&rop->ztup1, op.ztup1);
+}
+
+static void CREATE(ztuple_z8z5stringzCz0z5iz9)(struct ztuple_z8z5stringzCz0z5iz9 *op) {
+ CREATE(sail_string)(&op->ztup0);
+ CREATE(sail_int)(&op->ztup1);
+}
+
+static void RECREATE(ztuple_z8z5stringzCz0z5iz9)(struct ztuple_z8z5stringzCz0z5iz9 *op) {
+ RECREATE(sail_string)(&op->ztup0);
+ RECREATE(sail_int)(&op->ztup1);
+}
+
+static void KILL(ztuple_z8z5stringzCz0z5iz9)(struct ztuple_z8z5stringzCz0z5iz9 *op) {
+ KILL(sail_string)(&op->ztup0);
+ KILL(sail_int)(&op->ztup1);
+}
+
+static bool EQUAL(ztuple_z8z5stringzCz0z5iz9)(struct ztuple_z8z5stringzCz0z5iz9 op1, struct ztuple_z8z5stringzCz0z5iz9 op2) {
+ return EQUAL(sail_string)(op1.ztup0, op2.ztup0) && EQUAL(sail_int)(op1.ztup1, op2.ztup1);
+}
+
+
+// struct tuple_(%string, %i, %i)
+struct ztuple_z8z5stringzCz0z5izCz0z5iz9 {
+ sail_string ztup0;
+ sail_int ztup1;
+ sail_int ztup2;
+};
+
+static void COPY(ztuple_z8z5stringzCz0z5izCz0z5iz9)(struct ztuple_z8z5stringzCz0z5izCz0z5iz9 *rop, const struct ztuple_z8z5stringzCz0z5izCz0z5iz9 op) {
+ COPY(sail_string)(&rop->ztup0, op.ztup0);
+ COPY(sail_int)(&rop->ztup1, op.ztup1);
+ COPY(sail_int)(&rop->ztup2, op.ztup2);
+}
+
+static void CREATE(ztuple_z8z5stringzCz0z5izCz0z5iz9)(struct ztuple_z8z5stringzCz0z5izCz0z5iz9 *op) {
+ CREATE(sail_string)(&op->ztup0);
+ CREATE(sail_int)(&op->ztup1);
+ CREATE(sail_int)(&op->ztup2);
+}
+
+static void RECREATE(ztuple_z8z5stringzCz0z5izCz0z5iz9)(struct ztuple_z8z5stringzCz0z5izCz0z5iz9 *op) {
+ RECREATE(sail_string)(&op->ztup0);
+ RECREATE(sail_int)(&op->ztup1);
+ RECREATE(sail_int)(&op->ztup2);
+}
+
+static void KILL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(struct ztuple_z8z5stringzCz0z5izCz0z5iz9 *op) {
+ KILL(sail_string)(&op->ztup0);
+ KILL(sail_int)(&op->ztup1);
+ KILL(sail_int)(&op->ztup2);
+}
+
+static bool EQUAL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(struct ztuple_z8z5stringzCz0z5izCz0z5iz9 op1, struct ztuple_z8z5stringzCz0z5izCz0z5iz9 op2) {
+ return EQUAL(sail_string)(op1.ztup0, op2.ztup0) && EQUAL(sail_int)(op1.ztup1, op2.ztup1) && EQUAL(sail_int)(op1.ztup2, op2.ztup2);
+}
+
+
+// struct tuple_(%string, %string)
+struct ztuple_z8z5stringzCz0z5stringz9 {
+ sail_string ztup0;
+ sail_string ztup1;
+};
+
+static void COPY(ztuple_z8z5stringzCz0z5stringz9)(struct ztuple_z8z5stringzCz0z5stringz9 *rop, const struct ztuple_z8z5stringzCz0z5stringz9 op) {
+ COPY(sail_string)(&rop->ztup0, op.ztup0);
+ COPY(sail_string)(&rop->ztup1, op.ztup1);
+}
+
+static void CREATE(ztuple_z8z5stringzCz0z5stringz9)(struct ztuple_z8z5stringzCz0z5stringz9 *op) {
+ CREATE(sail_string)(&op->ztup0);
+ CREATE(sail_string)(&op->ztup1);
+}
+
+static void RECREATE(ztuple_z8z5stringzCz0z5stringz9)(struct ztuple_z8z5stringzCz0z5stringz9 *op) {
+ RECREATE(sail_string)(&op->ztup0);
+ RECREATE(sail_string)(&op->ztup1);
+}
+
+static void KILL(ztuple_z8z5stringzCz0z5stringz9)(struct ztuple_z8z5stringzCz0z5stringz9 *op) {
+ KILL(sail_string)(&op->ztup0);
+ KILL(sail_string)(&op->ztup1);
+}
+
+static bool EQUAL(ztuple_z8z5stringzCz0z5stringz9)(struct ztuple_z8z5stringzCz0z5stringz9 op1, struct ztuple_z8z5stringzCz0z5stringz9 op2) {
+ return EQUAL(sail_string)(op1.ztup0, op2.ztup0) && EQUAL(sail_string)(op1.ztup1, op2.ztup1);
+}
+
+// union regfp
+enum kind_zregfp { Kind_zRField, Kind_zRFull, Kind_zRSlice, Kind_zRSliceBit };
+
+struct zregfp {
+ enum kind_zregfp kind;
+ union {
+ struct { struct ztuple_z8z5stringzCz0z5stringz9 zRField; };
+ struct { sail_string zRFull; };
+ struct { struct ztuple_z8z5stringzCz0z5izCz0z5iz9 zRSlice; };
+ struct { struct ztuple_z8z5stringzCz0z5iz9 zRSliceBit; };
+ };
+};
+
+static void CREATE(zregfp)(struct zregfp *op)
+{
+ op->kind = Kind_zRField;
+ CREATE(ztuple_z8z5stringzCz0z5stringz9)(&op->zRField);
+}
+
+static void RECREATE(zregfp)(struct zregfp *op) {}
+
+static void KILL(zregfp)(struct zregfp *op)
+{
+ if (op->kind == Kind_zRField) {
+ KILL(ztuple_z8z5stringzCz0z5stringz9)(&op->zRField);
+ } else if (op->kind == Kind_zRFull) {
+ KILL(sail_string)(&op->zRFull);
+ } else if (op->kind == Kind_zRSlice) {
+ KILL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&op->zRSlice);
+ } else if (op->kind == Kind_zRSliceBit){
+ KILL(ztuple_z8z5stringzCz0z5iz9)(&op->zRSliceBit);
+ };
+}
+
+static void COPY(zregfp)(struct zregfp *rop, struct zregfp op)
+{
+ if (rop->kind == Kind_zRField) {
+ KILL(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField);
+ } else if (rop->kind == Kind_zRFull) {
+ KILL(sail_string)(&rop->zRFull);
+ } else if (rop->kind == Kind_zRSlice) {
+ KILL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice);
+ } else if (rop->kind == Kind_zRSliceBit){
+ KILL(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit);
+ };
+ rop->kind = op.kind;
+ if (op.kind == Kind_zRField) {
+
+ CREATE(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField); COPY(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField, op.zRField);
+ } else if (op.kind == Kind_zRFull) {
+ CREATE(sail_string)(&rop->zRFull); COPY(sail_string)(&rop->zRFull, op.zRFull);
+ } else if (op.kind == Kind_zRSlice) {
+
+ CREATE(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice); COPY(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice, op.zRSlice);
+ } else if (op.kind == Kind_zRSliceBit){
+
+ CREATE(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit); COPY(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit, op.zRSliceBit);
+ }
+}
+
+static bool EQUAL(zregfp)(struct zregfp op1, struct zregfp op2) {
+ if (op1.kind == Kind_zRField && op2.kind == Kind_zRField) {
+ return EQUAL(ztuple_z8z5stringzCz0z5stringz9)(op1.zRField, op2.zRField);
+ } else if (op1.kind == Kind_zRFull && op2.kind == Kind_zRFull) {
+ return EQUAL(sail_string)(op1.zRFull, op2.zRFull);
+ } else if (op1.kind == Kind_zRSlice && op2.kind == Kind_zRSlice) {
+ return EQUAL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(op1.zRSlice, op2.zRSlice);
+ } else if (op1.kind == Kind_zRSliceBit && op2.kind == Kind_zRSliceBit) {
+ return EQUAL(ztuple_z8z5stringzCz0z5iz9)(op1.zRSliceBit, op2.zRSliceBit);
+ } else return false;
+}
+
+static void sailgen_RField(struct zregfp *rop, struct ztuple_z8z5stringzCz0z5stringz9 op)
+{
+ if (rop->kind == Kind_zRField) {
+ KILL(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField);
+ } else if (rop->kind == Kind_zRFull) {
+ KILL(sail_string)(&rop->zRFull);
+ } else if (rop->kind == Kind_zRSlice) {
+ KILL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice);
+ } else if (rop->kind == Kind_zRSliceBit){
+ KILL(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit);
+ }
+ rop->kind = Kind_zRField;
+ CREATE(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField);
+ COPY(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField, op);
+
+}
+
+static void sailgen_RFull(struct zregfp *rop, sail_string op)
+{
+ if (rop->kind == Kind_zRField) {
+ KILL(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField);
+ } else if (rop->kind == Kind_zRFull) {
+ KILL(sail_string)(&rop->zRFull);
+ } else if (rop->kind == Kind_zRSlice) {
+ KILL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice);
+ } else if (rop->kind == Kind_zRSliceBit){
+ KILL(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit);
+ }
+ rop->kind = Kind_zRFull;
+ CREATE(sail_string)(&rop->zRFull);
+ COPY(sail_string)(&rop->zRFull, op);
+
+}
+
+static void sailgen_RSlice(struct zregfp *rop, struct ztuple_z8z5stringzCz0z5izCz0z5iz9 op)
+{
+ if (rop->kind == Kind_zRField) {
+ KILL(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField);
+ } else if (rop->kind == Kind_zRFull) {
+ KILL(sail_string)(&rop->zRFull);
+ } else if (rop->kind == Kind_zRSlice) {
+ KILL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice);
+ } else if (rop->kind == Kind_zRSliceBit){
+ KILL(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit);
+ }
+ rop->kind = Kind_zRSlice;
+ CREATE(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice);
+ COPY(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice, op);
+
+}
+
+static void sailgen_RSliceBit(struct zregfp *rop, struct ztuple_z8z5stringzCz0z5iz9 op)
+{
+ if (rop->kind == Kind_zRField) {
+ KILL(ztuple_z8z5stringzCz0z5stringz9)(&rop->zRField);
+ } else if (rop->kind == Kind_zRFull) {
+ KILL(sail_string)(&rop->zRFull);
+ } else if (rop->kind == Kind_zRSlice) {
+ KILL(ztuple_z8z5stringzCz0z5izCz0z5iz9)(&rop->zRSlice);
+ } else if (rop->kind == Kind_zRSliceBit){
+ KILL(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit);
+ }
+ rop->kind = Kind_zRSliceBit;
+ CREATE(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit);
+ COPY(ztuple_z8z5stringzCz0z5iz9)(&rop->zRSliceBit, op);
+
+}
+
+// enum read_kind
+enum zread_kind { zRead_plain, zRead_reserve, zRead_acquire, zRead_exclusive, zRead_exclusive_acquire, zRead_stream, zRead_RISCV_acquire, zRead_RISCV_strong_acquire, zRead_RISCV_reserved, zRead_RISCV_reserved_acquire, zRead_RISCV_reserved_strong_acquire, zRead_X86_locked };
+
+static bool eq_zread_kind(enum zread_kind op1, enum zread_kind op2) { return op1 == op2; }
+
+static enum zread_kind UNDEFINED(zread_kind)(unit u) { return zRead_plain; }
+
+// union option
+enum kind_zoption { Kind_zNone };
+
+struct zoption {
+ enum kind_zoption kind;
+ union {struct { unit zNone; };};
+};
+
+static void CREATE(zoption)(struct zoption *op)
+{
+ op->kind = Kind_zNone;
+
+}
+
+static void RECREATE(zoption)(struct zoption *op) {}
+
+static void KILL(zoption)(struct zoption *op)
+{
+ if (op->kind == Kind_zNone){
+ /* do nothing */
+ };
+}
+
+static void COPY(zoption)(struct zoption *rop, struct zoption op)
+{
+ if (rop->kind == Kind_zNone){
+ /* do nothing */
+ };
+ rop->kind = op.kind;
+ if (op.kind == Kind_zNone){
+ rop->zNone = op.zNone;
+ }
+}
+
+static bool EQUAL(zoption)(struct zoption op1, struct zoption op2) {
+ if (op1.kind == Kind_zNone && op2.kind == Kind_zNone) {
+ return EQUAL(unit)(op1.zNone, op2.zNone);
+ } else return false;
+}
+
+static void sailgen_None(struct zoption *rop, unit op)
+{
+ if (rop->kind == Kind_zNone){
+ /* do nothing */
+ }
+ rop->kind = Kind_zNone;
+ rop->zNone = op;
+}
+
+// union niafp
+enum kind_zniafp { Kind_zNIAFP_concrete_address, Kind_zNIAFP_indirect_address, Kind_zNIAFP_successor };
+
+struct zniafp {
+ enum kind_zniafp kind;
+ union {
+ struct { uint64_t zNIAFP_concrete_address; };
+ struct { unit zNIAFP_indirect_address; };
+ struct { unit zNIAFP_successor; };
+ };
+};
+
+static void CREATE(zniafp)(struct zniafp *op)
+{
+ op->kind = Kind_zNIAFP_concrete_address;
+
+}
+
+static void RECREATE(zniafp)(struct zniafp *op) {}
+
+static void KILL(zniafp)(struct zniafp *op)
+{
+ if (op->kind == Kind_zNIAFP_concrete_address) {
+ /* do nothing */
+ } else if (op->kind == Kind_zNIAFP_indirect_address) {
+ /* do nothing */
+ } else if (op->kind == Kind_zNIAFP_successor){
+ /* do nothing */
+ };
+}
+
+static void COPY(zniafp)(struct zniafp *rop, struct zniafp op)
+{
+ if (rop->kind == Kind_zNIAFP_concrete_address) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zNIAFP_indirect_address) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zNIAFP_successor){
+ /* do nothing */
+ };
+ rop->kind = op.kind;
+ if (op.kind == Kind_zNIAFP_concrete_address) {
+ rop->zNIAFP_concrete_address = op.zNIAFP_concrete_address;
+ } else if (op.kind == Kind_zNIAFP_indirect_address) {
+ rop->zNIAFP_indirect_address = op.zNIAFP_indirect_address;
+ } else if (op.kind == Kind_zNIAFP_successor){
+ rop->zNIAFP_successor = op.zNIAFP_successor;
+ }
+}
+
+static bool EQUAL(zniafp)(struct zniafp op1, struct zniafp op2) {
+ if (op1.kind == Kind_zNIAFP_concrete_address && op2.kind == Kind_zNIAFP_concrete_address) {
+ return EQUAL(fbits)(op1.zNIAFP_concrete_address, op2.zNIAFP_concrete_address);
+ } else if (op1.kind == Kind_zNIAFP_indirect_address && op2.kind == Kind_zNIAFP_indirect_address) {
+ return EQUAL(unit)(op1.zNIAFP_indirect_address, op2.zNIAFP_indirect_address);
+ } else if (op1.kind == Kind_zNIAFP_successor && op2.kind == Kind_zNIAFP_successor) {
+ return EQUAL(unit)(op1.zNIAFP_successor, op2.zNIAFP_successor);
+ } else return false;
+}
+
+static void sailgen_NIAFP_concrete_address(struct zniafp *rop, uint64_t op)
+{
+ if (rop->kind == Kind_zNIAFP_concrete_address) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zNIAFP_indirect_address) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zNIAFP_successor){
+ /* do nothing */
+ }
+ rop->kind = Kind_zNIAFP_concrete_address;
+ rop->zNIAFP_concrete_address = op;
+}
+
+static void sailgen_NIAFP_indirect_address(struct zniafp *rop, unit op)
+{
+ if (rop->kind == Kind_zNIAFP_concrete_address) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zNIAFP_indirect_address) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zNIAFP_successor){
+ /* do nothing */
+ }
+ rop->kind = Kind_zNIAFP_indirect_address;
+ rop->zNIAFP_indirect_address = op;
+}
+
+static void sailgen_NIAFP_successor(struct zniafp *rop, unit op)
+{
+ if (rop->kind == Kind_zNIAFP_concrete_address) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zNIAFP_indirect_address) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zNIAFP_successor){
+ /* do nothing */
+ }
+ rop->kind = Kind_zNIAFP_successor;
+ rop->zNIAFP_successor = op;
+}
+
+
+
+// union diafp
+enum kind_zdiafp { Kind_zDIAFP_concrete, Kind_zDIAFP_none, Kind_zDIAFP_reg };
+
+struct zdiafp {
+ enum kind_zdiafp kind;
+ union {
+ struct { uint64_t zDIAFP_concrete; };
+ struct { unit zDIAFP_none; };
+ struct { struct zregfp zDIAFP_reg; };
+ };
+};
+
+static void CREATE(zdiafp)(struct zdiafp *op)
+{
+ op->kind = Kind_zDIAFP_concrete;
+
+}
+
+static void RECREATE(zdiafp)(struct zdiafp *op) {}
+
+static void KILL(zdiafp)(struct zdiafp *op)
+{
+ if (op->kind == Kind_zDIAFP_concrete) {
+ /* do nothing */
+ } else if (op->kind == Kind_zDIAFP_none) {
+ /* do nothing */
+ } else if (op->kind == Kind_zDIAFP_reg){
+ KILL(zregfp)(&op->zDIAFP_reg);
+ };
+}
+
+static void COPY(zdiafp)(struct zdiafp *rop, struct zdiafp op)
+{
+ if (rop->kind == Kind_zDIAFP_concrete) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zDIAFP_none) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zDIAFP_reg){
+ KILL(zregfp)(&rop->zDIAFP_reg);
+ };
+ rop->kind = op.kind;
+ if (op.kind == Kind_zDIAFP_concrete) {
+ rop->zDIAFP_concrete = op.zDIAFP_concrete;
+ } else if (op.kind == Kind_zDIAFP_none) {
+ rop->zDIAFP_none = op.zDIAFP_none;
+ } else if (op.kind == Kind_zDIAFP_reg){
+ CREATE(zregfp)(&rop->zDIAFP_reg); COPY(zregfp)(&rop->zDIAFP_reg, op.zDIAFP_reg);
+ }
+}
+
+static bool EQUAL(zdiafp)(struct zdiafp op1, struct zdiafp op2) {
+ if (op1.kind == Kind_zDIAFP_concrete && op2.kind == Kind_zDIAFP_concrete) {
+ return EQUAL(fbits)(op1.zDIAFP_concrete, op2.zDIAFP_concrete);
+ } else if (op1.kind == Kind_zDIAFP_none && op2.kind == Kind_zDIAFP_none) {
+ return EQUAL(unit)(op1.zDIAFP_none, op2.zDIAFP_none);
+ } else if (op1.kind == Kind_zDIAFP_reg && op2.kind == Kind_zDIAFP_reg) {
+ return EQUAL(zregfp)(op1.zDIAFP_reg, op2.zDIAFP_reg);
+ } else return false;
+}
+
+static void sailgen_DIAFP_concrete(struct zdiafp *rop, uint64_t op)
+{
+ if (rop->kind == Kind_zDIAFP_concrete) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zDIAFP_none) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zDIAFP_reg){
+ KILL(zregfp)(&rop->zDIAFP_reg);
+ }
+ rop->kind = Kind_zDIAFP_concrete;
+ rop->zDIAFP_concrete = op;
+}
+
+static void sailgen_DIAFP_none(struct zdiafp *rop, unit op)
+{
+ if (rop->kind == Kind_zDIAFP_concrete) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zDIAFP_none) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zDIAFP_reg){
+ KILL(zregfp)(&rop->zDIAFP_reg);
+ }
+ rop->kind = Kind_zDIAFP_none;
+ rop->zDIAFP_none = op;
+}
+
+static void sailgen_DIAFP_reg(struct zdiafp *rop, struct zregfp op)
+{
+ if (rop->kind == Kind_zDIAFP_concrete) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zDIAFP_none) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zDIAFP_reg){
+ KILL(zregfp)(&rop->zDIAFP_reg);
+ }
+ rop->kind = Kind_zDIAFP_reg;
+ CREATE(zregfp)(&rop->zDIAFP_reg);
+ COPY(zregfp)(&rop->zDIAFP_reg, op);
+
+}
+
+// enum cache_op_kind
+enum zcache_op_kind { zCache_op_D_IVAC, zCache_op_D_ISW, zCache_op_D_CSW, zCache_op_D_CISW, zCache_op_D_ZVA, zCache_op_D_CVAC, zCache_op_D_CVAU, zCache_op_D_CIVAC, zCache_op_I_IALLUIS, zCache_op_I_IALLU, zCache_op_I_IVAU };
+
+static bool eq_zcache_op_kind(enum zcache_op_kind op1, enum zcache_op_kind op2) { return op1 == op2; }
+
+static enum zcache_op_kind UNDEFINED(zcache_op_kind)(unit u) { return zCache_op_D_IVAC; }
+
+// enum a64_barrier_type
+enum za64_barrier_type { zA64_barrier_all, zA64_barrier_LD, zA64_barrier_ST };
+
+static bool eq_za64_barrier_type(enum za64_barrier_type op1, enum za64_barrier_type op2) { return op1 == op2; }
+
+static enum za64_barrier_type UNDEFINED(za64_barrier_type)(unit u) { return zA64_barrier_all; }
+
+// enum a64_barrier_domain
+enum za64_barrier_domain { zA64_FullShare, zA64_InnerShare, zA64_OuterShare, zA64_NonShare };
+
+static bool eq_za64_barrier_domain(enum za64_barrier_domain op1, enum za64_barrier_domain op2) { return op1 == op2; }
+
+static enum za64_barrier_domain UNDEFINED(za64_barrier_domain)(unit u) { return zA64_FullShare; }
+
+// struct tuple_(%enum za64_barrier_domain, %enum za64_barrier_type)
+struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 {
+ enum za64_barrier_domain ztup0;
+ enum za64_barrier_type ztup1;
+};
+
+static void COPY(ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9)(struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 *rop, const struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 op) {
+ rop->ztup0 = op.ztup0;
+ rop->ztup1 = op.ztup1;
+}
+
+static bool EQUAL(ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9)(struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 op1, struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 op2) {
+ return EQUAL(za64_barrier_domain)(op1.ztup0, op2.ztup0) && EQUAL(za64_barrier_type)(op1.ztup1, op2.ztup1);
+}
+
+// union barrier_kind
+enum kind_zbarrier_kind { Kind_zBarrier_DMB, Kind_zBarrier_DSB, Kind_zBarrier_Eieio, Kind_zBarrier_ISB, Kind_zBarrier_Isync, Kind_zBarrier_LwSync, Kind_zBarrier_MIPS_SYNC, Kind_zBarrier_RISCV_i, Kind_zBarrier_RISCV_r_r, Kind_zBarrier_RISCV_r_rw, Kind_zBarrier_RISCV_r_w, Kind_zBarrier_RISCV_rw_r, Kind_zBarrier_RISCV_rw_rw, Kind_zBarrier_RISCV_rw_w, Kind_zBarrier_RISCV_tso, Kind_zBarrier_RISCV_w_r, Kind_zBarrier_RISCV_w_rw, Kind_zBarrier_RISCV_w_w, Kind_zBarrier_Sync, Kind_zBarrier_x86_MFENCE };
+
+struct zbarrier_kind {
+ enum kind_zbarrier_kind kind;
+ union {
+ struct { struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 zBarrier_DMB; };
+ struct { struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 zBarrier_DSB; };
+ struct { unit zBarrier_Eieio; };
+ struct { unit zBarrier_ISB; };
+ struct { unit zBarrier_Isync; };
+ struct { unit zBarrier_LwSync; };
+ struct { unit zBarrier_MIPS_SYNC; };
+ struct { unit zBarrier_RISCV_i; };
+ struct { unit zBarrier_RISCV_r_r; };
+ struct { unit zBarrier_RISCV_r_rw; };
+ struct { unit zBarrier_RISCV_r_w; };
+ struct { unit zBarrier_RISCV_rw_r; };
+ struct { unit zBarrier_RISCV_rw_rw; };
+ struct { unit zBarrier_RISCV_rw_w; };
+ struct { unit zBarrier_RISCV_tso; };
+ struct { unit zBarrier_RISCV_w_r; };
+ struct { unit zBarrier_RISCV_w_rw; };
+ struct { unit zBarrier_RISCV_w_w; };
+ struct { unit zBarrier_Sync; };
+ struct { unit zBarrier_x86_MFENCE; };
+ };
+};
+
+static void CREATE(zbarrier_kind)(struct zbarrier_kind *op)
+{
+ op->kind = Kind_zBarrier_DMB;
+
+}
+
+static void RECREATE(zbarrier_kind)(struct zbarrier_kind *op) {}
+
+static void KILL(zbarrier_kind)(struct zbarrier_kind *op)
+{
+ if (op->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (op->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ };
+}
+
+static void COPY(zbarrier_kind)(struct zbarrier_kind *rop, struct zbarrier_kind op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ };
+ rop->kind = op.kind;
+ if (op.kind == Kind_zBarrier_DMB) {
+ rop->zBarrier_DMB = op.zBarrier_DMB;
+ } else if (op.kind == Kind_zBarrier_DSB) {
+ rop->zBarrier_DSB = op.zBarrier_DSB;
+ } else if (op.kind == Kind_zBarrier_Eieio) {
+ rop->zBarrier_Eieio = op.zBarrier_Eieio;
+ } else if (op.kind == Kind_zBarrier_ISB) {
+ rop->zBarrier_ISB = op.zBarrier_ISB;
+ } else if (op.kind == Kind_zBarrier_Isync) {
+ rop->zBarrier_Isync = op.zBarrier_Isync;
+ } else if (op.kind == Kind_zBarrier_LwSync) {
+ rop->zBarrier_LwSync = op.zBarrier_LwSync;
+ } else if (op.kind == Kind_zBarrier_MIPS_SYNC) {
+ rop->zBarrier_MIPS_SYNC = op.zBarrier_MIPS_SYNC;
+ } else if (op.kind == Kind_zBarrier_RISCV_i) {
+ rop->zBarrier_RISCV_i = op.zBarrier_RISCV_i;
+ } else if (op.kind == Kind_zBarrier_RISCV_r_r) {
+ rop->zBarrier_RISCV_r_r = op.zBarrier_RISCV_r_r;
+ } else if (op.kind == Kind_zBarrier_RISCV_r_rw) {
+ rop->zBarrier_RISCV_r_rw = op.zBarrier_RISCV_r_rw;
+ } else if (op.kind == Kind_zBarrier_RISCV_r_w) {
+ rop->zBarrier_RISCV_r_w = op.zBarrier_RISCV_r_w;
+ } else if (op.kind == Kind_zBarrier_RISCV_rw_r) {
+ rop->zBarrier_RISCV_rw_r = op.zBarrier_RISCV_rw_r;
+ } else if (op.kind == Kind_zBarrier_RISCV_rw_rw) {
+ rop->zBarrier_RISCV_rw_rw = op.zBarrier_RISCV_rw_rw;
+ } else if (op.kind == Kind_zBarrier_RISCV_rw_w) {
+ rop->zBarrier_RISCV_rw_w = op.zBarrier_RISCV_rw_w;
+ } else if (op.kind == Kind_zBarrier_RISCV_tso) {
+ rop->zBarrier_RISCV_tso = op.zBarrier_RISCV_tso;
+ } else if (op.kind == Kind_zBarrier_RISCV_w_r) {
+ rop->zBarrier_RISCV_w_r = op.zBarrier_RISCV_w_r;
+ } else if (op.kind == Kind_zBarrier_RISCV_w_rw) {
+ rop->zBarrier_RISCV_w_rw = op.zBarrier_RISCV_w_rw;
+ } else if (op.kind == Kind_zBarrier_RISCV_w_w) {
+ rop->zBarrier_RISCV_w_w = op.zBarrier_RISCV_w_w;
+ } else if (op.kind == Kind_zBarrier_Sync) {
+ rop->zBarrier_Sync = op.zBarrier_Sync;
+ } else if (op.kind == Kind_zBarrier_x86_MFENCE){
+ rop->zBarrier_x86_MFENCE = op.zBarrier_x86_MFENCE;
+ }
+}
+
+static bool EQUAL(zbarrier_kind)(struct zbarrier_kind op1, struct zbarrier_kind op2) {
+ if (op1.kind == Kind_zBarrier_DMB && op2.kind == Kind_zBarrier_DMB) {
+
+ return EQUAL(ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9)(op1.zBarrier_DMB, op2.zBarrier_DMB);
+ } else if (op1.kind == Kind_zBarrier_DSB && op2.kind == Kind_zBarrier_DSB) {
+
+ return EQUAL(ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9)(op1.zBarrier_DSB, op2.zBarrier_DSB);
+ } else if (op1.kind == Kind_zBarrier_Eieio && op2.kind == Kind_zBarrier_Eieio) {
+ return EQUAL(unit)(op1.zBarrier_Eieio, op2.zBarrier_Eieio);
+ } else if (op1.kind == Kind_zBarrier_ISB && op2.kind == Kind_zBarrier_ISB) {
+ return EQUAL(unit)(op1.zBarrier_ISB, op2.zBarrier_ISB);
+ } else if (op1.kind == Kind_zBarrier_Isync && op2.kind == Kind_zBarrier_Isync) {
+ return EQUAL(unit)(op1.zBarrier_Isync, op2.zBarrier_Isync);
+ } else if (op1.kind == Kind_zBarrier_LwSync && op2.kind == Kind_zBarrier_LwSync) {
+ return EQUAL(unit)(op1.zBarrier_LwSync, op2.zBarrier_LwSync);
+ } else if (op1.kind == Kind_zBarrier_MIPS_SYNC && op2.kind == Kind_zBarrier_MIPS_SYNC) {
+ return EQUAL(unit)(op1.zBarrier_MIPS_SYNC, op2.zBarrier_MIPS_SYNC);
+ } else if (op1.kind == Kind_zBarrier_RISCV_i && op2.kind == Kind_zBarrier_RISCV_i) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_i, op2.zBarrier_RISCV_i);
+ } else if (op1.kind == Kind_zBarrier_RISCV_r_r && op2.kind == Kind_zBarrier_RISCV_r_r) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_r_r, op2.zBarrier_RISCV_r_r);
+ } else if (op1.kind == Kind_zBarrier_RISCV_r_rw && op2.kind == Kind_zBarrier_RISCV_r_rw) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_r_rw, op2.zBarrier_RISCV_r_rw);
+ } else if (op1.kind == Kind_zBarrier_RISCV_r_w && op2.kind == Kind_zBarrier_RISCV_r_w) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_r_w, op2.zBarrier_RISCV_r_w);
+ } else if (op1.kind == Kind_zBarrier_RISCV_rw_r && op2.kind == Kind_zBarrier_RISCV_rw_r) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_rw_r, op2.zBarrier_RISCV_rw_r);
+ } else if (op1.kind == Kind_zBarrier_RISCV_rw_rw && op2.kind == Kind_zBarrier_RISCV_rw_rw) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_rw_rw, op2.zBarrier_RISCV_rw_rw);
+ } else if (op1.kind == Kind_zBarrier_RISCV_rw_w && op2.kind == Kind_zBarrier_RISCV_rw_w) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_rw_w, op2.zBarrier_RISCV_rw_w);
+ } else if (op1.kind == Kind_zBarrier_RISCV_tso && op2.kind == Kind_zBarrier_RISCV_tso) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_tso, op2.zBarrier_RISCV_tso);
+ } else if (op1.kind == Kind_zBarrier_RISCV_w_r && op2.kind == Kind_zBarrier_RISCV_w_r) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_w_r, op2.zBarrier_RISCV_w_r);
+ } else if (op1.kind == Kind_zBarrier_RISCV_w_rw && op2.kind == Kind_zBarrier_RISCV_w_rw) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_w_rw, op2.zBarrier_RISCV_w_rw);
+ } else if (op1.kind == Kind_zBarrier_RISCV_w_w && op2.kind == Kind_zBarrier_RISCV_w_w) {
+ return EQUAL(unit)(op1.zBarrier_RISCV_w_w, op2.zBarrier_RISCV_w_w);
+ } else if (op1.kind == Kind_zBarrier_Sync && op2.kind == Kind_zBarrier_Sync) {
+ return EQUAL(unit)(op1.zBarrier_Sync, op2.zBarrier_Sync);
+ } else if (op1.kind == Kind_zBarrier_x86_MFENCE && op2.kind == Kind_zBarrier_x86_MFENCE) {
+ return EQUAL(unit)(op1.zBarrier_x86_MFENCE, op2.zBarrier_x86_MFENCE);
+ } else return false;
+}
+
+static void sailgen_Barrier_DMB(struct zbarrier_kind *rop, struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_DMB;
+ rop->zBarrier_DMB = op;
+}
+
+static void sailgen_Barrier_DSB(struct zbarrier_kind *rop, struct ztuple_z8z5enumz0zza64_barrier_domainzCz0z5enumz0zza64_barrier_typez9 op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_DSB;
+ rop->zBarrier_DSB = op;
+}
+
+static void sailgen_Barrier_Eieio(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_Eieio;
+ rop->zBarrier_Eieio = op;
+}
+
+static void sailgen_Barrier_ISB(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_ISB;
+ rop->zBarrier_ISB = op;
+}
+
+static void sailgen_Barrier_Isync(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_Isync;
+ rop->zBarrier_Isync = op;
+}
+
+static void sailgen_Barrier_LwSync(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_LwSync;
+ rop->zBarrier_LwSync = op;
+}
+
+static void sailgen_Barrier_MIPS_SYNC(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_MIPS_SYNC;
+ rop->zBarrier_MIPS_SYNC = op;
+}
+
+static void sailgen_Barrier_RISCV_i(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_i;
+ rop->zBarrier_RISCV_i = op;
+}
+
+static void sailgen_Barrier_RISCV_r_r(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_r_r;
+ rop->zBarrier_RISCV_r_r = op;
+}
+
+static void sailgen_Barrier_RISCV_r_rw(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_r_rw;
+ rop->zBarrier_RISCV_r_rw = op;
+}
+
+static void sailgen_Barrier_RISCV_r_w(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_r_w;
+ rop->zBarrier_RISCV_r_w = op;
+}
+
+static void sailgen_Barrier_RISCV_rw_r(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_rw_r;
+ rop->zBarrier_RISCV_rw_r = op;
+}
+
+static void sailgen_Barrier_RISCV_rw_rw(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_rw_rw;
+ rop->zBarrier_RISCV_rw_rw = op;
+}
+
+static void sailgen_Barrier_RISCV_rw_w(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_rw_w;
+ rop->zBarrier_RISCV_rw_w = op;
+}
+
+static void sailgen_Barrier_RISCV_tso(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_tso;
+ rop->zBarrier_RISCV_tso = op;
+}
+
+static void sailgen_Barrier_RISCV_w_r(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_w_r;
+ rop->zBarrier_RISCV_w_r = op;
+}
+
+static void sailgen_Barrier_RISCV_w_rw(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_w_rw;
+ rop->zBarrier_RISCV_w_rw = op;
+}
+
+static void sailgen_Barrier_RISCV_w_w(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_RISCV_w_w;
+ rop->zBarrier_RISCV_w_w = op;
+}
+
+static void sailgen_Barrier_Sync(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_Sync;
+ rop->zBarrier_Sync = op;
+}
+
+static void sailgen_Barrier_x86_MFENCE(struct zbarrier_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zBarrier_DMB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_DSB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Eieio) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_ISB) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Isync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_LwSync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_MIPS_SYNC) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_i) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_r_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_rw_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_tso) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_r) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_rw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_RISCV_w_w) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_Sync) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zBarrier_x86_MFENCE){
+ /* do nothing */
+ }
+ rop->kind = Kind_zBarrier_x86_MFENCE;
+ rop->zBarrier_x86_MFENCE = op;
+}
+
+// struct tuple_(%enum zread_kind, %enum zwrite_kind)
+struct ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9 {
+ enum zread_kind ztup0;
+ enum zwrite_kind ztup1;
+};
+
+static void COPY(ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9)(struct ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9 *rop, const struct ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9 op) {
+ rop->ztup0 = op.ztup0;
+ rop->ztup1 = op.ztup1;
+}
+
+static bool EQUAL(ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9)(struct ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9 op1, struct ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9 op2) {
+ return EQUAL(zread_kind)(op1.ztup0, op2.ztup0) && EQUAL(zwrite_kind)(op1.ztup1, op2.ztup1);
+}
+
+
+
+// union instruction_kind
+enum kind_zinstruction_kind { Kind_zIK_barrier, Kind_zIK_branch, Kind_zIK_cache_op, Kind_zIK_mem_read, Kind_zIK_mem_rmw, Kind_zIK_mem_write, Kind_zIK_simple, Kind_zIK_trans };
+
+struct zinstruction_kind {
+ enum kind_zinstruction_kind kind;
+ union {
+ struct { struct zbarrier_kind zIK_barrier; };
+ struct { unit zIK_branch; };
+ struct { enum zcache_op_kind zIK_cache_op; };
+ struct { enum zread_kind zIK_mem_read; };
+ struct { struct ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9 zIK_mem_rmw; };
+ struct { enum zwrite_kind zIK_mem_write; };
+ struct { unit zIK_simple; };
+ struct { enum ztrans_kind zIK_trans; };
+ };
+};
+
+static void CREATE(zinstruction_kind)(struct zinstruction_kind *op)
+{
+ op->kind = Kind_zIK_barrier;
+ CREATE(zbarrier_kind)(&op->zIK_barrier);
+}
+
+static void RECREATE(zinstruction_kind)(struct zinstruction_kind *op) {}
+
+static void KILL(zinstruction_kind)(struct zinstruction_kind *op)
+{
+ if (op->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&op->zIK_barrier);
+ } else if (op->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (op->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (op->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (op->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (op->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (op->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (op->kind == Kind_zIK_trans){
+ /* do nothing */
+ };
+}
+
+static void COPY(zinstruction_kind)(struct zinstruction_kind *rop, struct zinstruction_kind op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ };
+ rop->kind = op.kind;
+ if (op.kind == Kind_zIK_barrier) {
+ CREATE(zbarrier_kind)(&rop->zIK_barrier); COPY(zbarrier_kind)(&rop->zIK_barrier, op.zIK_barrier);
+ } else if (op.kind == Kind_zIK_branch) {
+ rop->zIK_branch = op.zIK_branch;
+ } else if (op.kind == Kind_zIK_cache_op) {
+ rop->zIK_cache_op = op.zIK_cache_op;
+ } else if (op.kind == Kind_zIK_mem_read) {
+ rop->zIK_mem_read = op.zIK_mem_read;
+ } else if (op.kind == Kind_zIK_mem_rmw) {
+ rop->zIK_mem_rmw = op.zIK_mem_rmw;
+ } else if (op.kind == Kind_zIK_mem_write) {
+ rop->zIK_mem_write = op.zIK_mem_write;
+ } else if (op.kind == Kind_zIK_simple) {
+ rop->zIK_simple = op.zIK_simple;
+ } else if (op.kind == Kind_zIK_trans){
+ rop->zIK_trans = op.zIK_trans;
+ }
+}
+
+static bool EQUAL(zinstruction_kind)(struct zinstruction_kind op1, struct zinstruction_kind op2) {
+ if (op1.kind == Kind_zIK_barrier && op2.kind == Kind_zIK_barrier) {
+ return EQUAL(zbarrier_kind)(op1.zIK_barrier, op2.zIK_barrier);
+ } else if (op1.kind == Kind_zIK_branch && op2.kind == Kind_zIK_branch) {
+ return EQUAL(unit)(op1.zIK_branch, op2.zIK_branch);
+ } else if (op1.kind == Kind_zIK_cache_op && op2.kind == Kind_zIK_cache_op) {
+ return EQUAL(zcache_op_kind)(op1.zIK_cache_op, op2.zIK_cache_op);
+ } else if (op1.kind == Kind_zIK_mem_read && op2.kind == Kind_zIK_mem_read) {
+ return EQUAL(zread_kind)(op1.zIK_mem_read, op2.zIK_mem_read);
+ } else if (op1.kind == Kind_zIK_mem_rmw && op2.kind == Kind_zIK_mem_rmw) {
+ return EQUAL(ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9)(op1.zIK_mem_rmw, op2.zIK_mem_rmw);
+ } else if (op1.kind == Kind_zIK_mem_write && op2.kind == Kind_zIK_mem_write) {
+ return EQUAL(zwrite_kind)(op1.zIK_mem_write, op2.zIK_mem_write);
+ } else if (op1.kind == Kind_zIK_simple && op2.kind == Kind_zIK_simple) {
+ return EQUAL(unit)(op1.zIK_simple, op2.zIK_simple);
+ } else if (op1.kind == Kind_zIK_trans && op2.kind == Kind_zIK_trans) {
+ return EQUAL(ztrans_kind)(op1.zIK_trans, op2.zIK_trans);
+ } else return false;
+}
+
+static void sailgen_IK_barrier(struct zinstruction_kind *rop, struct zbarrier_kind op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ }
+ rop->kind = Kind_zIK_barrier;
+ CREATE(zbarrier_kind)(&rop->zIK_barrier);
+ COPY(zbarrier_kind)(&rop->zIK_barrier, op);
+
+}
+
+static void sailgen_IK_branch(struct zinstruction_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ }
+ rop->kind = Kind_zIK_branch;
+ rop->zIK_branch = op;
+}
+
+static void sailgen_IK_cache_op(struct zinstruction_kind *rop, enum zcache_op_kind op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ }
+ rop->kind = Kind_zIK_cache_op;
+ rop->zIK_cache_op = op;
+}
+
+static void sailgen_IK_mem_read(struct zinstruction_kind *rop, enum zread_kind op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ }
+ rop->kind = Kind_zIK_mem_read;
+ rop->zIK_mem_read = op;
+}
+
+static void sailgen_IK_mem_rmw(struct zinstruction_kind *rop, struct ztuple_z8z5enumz0zzread_kindzCz0z5enumz0zzwrite_kindz9 op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ }
+ rop->kind = Kind_zIK_mem_rmw;
+ rop->zIK_mem_rmw = op;
+}
+
+static void sailgen_IK_mem_write(struct zinstruction_kind *rop, enum zwrite_kind op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ }
+ rop->kind = Kind_zIK_mem_write;
+ rop->zIK_mem_write = op;
+}
+
+static void sailgen_IK_simple(struct zinstruction_kind *rop, unit op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ }
+ rop->kind = Kind_zIK_simple;
+ rop->zIK_simple = op;
+}
+
+static void sailgen_IK_trans(struct zinstruction_kind *rop, enum ztrans_kind op)
+{
+ if (rop->kind == Kind_zIK_barrier) {
+ KILL(zbarrier_kind)(&rop->zIK_barrier);
+ } else if (rop->kind == Kind_zIK_branch) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_cache_op) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_read) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_rmw) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_mem_write) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_simple) {
+ /* do nothing */
+ } else if (rop->kind == Kind_zIK_trans){
+ /* do nothing */
+ }
+ rop->kind = Kind_zIK_trans;
+ rop->zIK_trans = op;
+}
+
+// struct EncCapability
+struct zEncCapability {
+ uint64_t zB;
+ uint64_t zT;
+ uint64_t zaddress;
+ uint64_t zflags;
+ fbits zinternal_E;
+ uint64_t zotype;
+ uint64_t zperms;
+ uint64_t zreserved;
+};
+
+static void COPY(zEncCapability)(struct zEncCapability *rop, const struct zEncCapability op) {
+ rop->zB = op.zB;
+ rop->zT = op.zT;
+ rop->zaddress = op.zaddress;
+ rop->zflags = op.zflags;
+ rop->zinternal_E = op.zinternal_E;
+ rop->zotype = op.zotype;
+ rop->zperms = op.zperms;
+ rop->zreserved = op.zreserved;
+}
+
+static bool EQUAL(zEncCapability)(struct zEncCapability op1, struct zEncCapability op2) {
+ return EQUAL(fbits)(op1.zB, op2.zB) && EQUAL(fbits)(op1.zT, op2.zT) && EQUAL(fbits)(op1.zaddress, op2.zaddress) && EQUAL(fbits)(op1.zflags, op2.zflags) && EQUAL(fbits)(op1.zinternal_E, op2.zinternal_E) && EQUAL(fbits)(op1.zotype, op2.zotype) && EQUAL(fbits)(op1.zperms, op2.zperms) && EQUAL(fbits)(op1.zreserved, op2.zreserved);
+}
+
+// enum ClearRegSet
+enum zClearRegSet { zGPRegs, zFPRegs };
+
+static bool eq_zClearRegSet(enum zClearRegSet op1, enum zClearRegSet op2) { return op1 == op2; }
+
+static enum zClearRegSet UNDEFINED(zClearRegSet)(unit u) { return zGPRegs; }
+
+// struct Capability
+struct zCapability {
+ uint64_t zB;
+ uint64_t zE;
+ uint64_t zT;
+ bool zaccess_system_regs;
+ uint64_t zaddress;
+ bool zflag_cap_mode;
+ bool zglobal;
+ bool zinternal_E;
+ uint64_t zotype;
+ bool zpermit_cinvoke;
+ bool zpermit_execute;
+ bool zpermit_load;
+ bool zpermit_load_cap;
+ bool zpermit_seal;
+ bool zpermit_set_CID;
+ bool zpermit_store;
+ bool zpermit_store_cap;
+ bool zpermit_store_local_cap;
+ bool zpermit_unseal;
+ uint64_t zreserved;
+ bool ztag;
+ uint64_t zuperms;
+};
+
+static void COPY(zCapability)(struct zCapability *rop, const struct zCapability op) {
+ rop->zB = op.zB;
+ rop->zE = op.zE;
+ rop->zT = op.zT;
+ rop->zaccess_system_regs = op.zaccess_system_regs;
+ rop->zaddress = op.zaddress;
+ rop->zflag_cap_mode = op.zflag_cap_mode;
+ rop->zglobal = op.zglobal;
+ rop->zinternal_E = op.zinternal_E;
+ rop->zotype = op.zotype;
+ rop->zpermit_cinvoke = op.zpermit_cinvoke;
+ rop->zpermit_execute = op.zpermit_execute;
+ rop->zpermit_load = op.zpermit_load;
+ rop->zpermit_load_cap = op.zpermit_load_cap;
+ rop->zpermit_seal = op.zpermit_seal;
+ rop->zpermit_set_CID = op.zpermit_set_CID;
+ rop->zpermit_store = op.zpermit_store;
+ rop->zpermit_store_cap = op.zpermit_store_cap;
+ rop->zpermit_store_local_cap = op.zpermit_store_local_cap;
+ rop->zpermit_unseal = op.zpermit_unseal;
+ rop->zreserved = op.zreserved;
+ rop->ztag = op.ztag;
+ rop->zuperms = op.zuperms;
+}
+
+static bool EQUAL(zCapability)(struct zCapability op1, struct zCapability op2) {
+ return EQUAL(fbits)(op1.zB, op2.zB) && EQUAL(fbits)(op1.zE, op2.zE) && EQUAL(fbits)(op1.zT, op2.zT) && EQUAL(bool)(op1.zaccess_system_regs, op2.zaccess_system_regs) && EQUAL(fbits)(op1.zaddress, op2.zaddress) && EQUAL(bool)(op1.zflag_cap_mode, op2.zflag_cap_mode) && EQUAL(bool)(op1.zglobal, op2.zglobal) && EQUAL(bool)(op1.zinternal_E, op2.zinternal_E) && EQUAL(fbits)(op1.zotype, op2.zotype) && EQUAL(bool)(op1.zpermit_cinvoke, op2.zpermit_cinvoke) && EQUAL(bool)(op1.zpermit_execute, op2.zpermit_execute) && EQUAL(bool)(op1.zpermit_load, op2.zpermit_load) && EQUAL(bool)(op1.zpermit_load_cap, op2.zpermit_load_cap) && EQUAL(bool)(op1.zpermit_seal, op2.zpermit_seal) && EQUAL(bool)(op1.zpermit_set_CID, op2.zpermit_set_CID) && EQUAL(bool)(op1.zpermit_store, op2.zpermit_store) && EQUAL(bool)(op1.zpermit_store_cap, op2.zpermit_store_cap) && EQUAL(bool)(op1.zpermit_store_local_cap, op2.zpermit_store_local_cap) && EQUAL(bool)(op1.zpermit_unseal, op2.zpermit_unseal) && EQUAL(fbits)(op1.zreserved, op2.zreserved) && EQUAL(bool)(op1.ztag, op2.ztag) && EQUAL(fbits)(op1.zuperms, op2.zuperms);
+}
+
+// enum CapEx
+enum zCapEx { zCapEx_None, zCapEx_LengthViolation, zCapEx_TagViolation, zCapEx_SealViolation, zCapEx_TypeViolation, zCapEx_CallTrap, zCapEx_ReturnTrap, zCapEx_TSSUnderFlow, zCapEx_UserDefViolation, zCapEx_InexactBounds, zCapEx_UnalignedBase, zCapEx_GlobalViolation, zCapEx_PermitExecuteViolation, zCapEx_PermitLoadViolation, zCapEx_PermitStoreViolation, zCapEx_PermitLoadCapViolation, zCapEx_PermitStoreCapViolation, zCapEx_PermitStoreLocalCapViolation, zCapEx_PermitSealViolation, zCapEx_AccessSystemRegsViolation, zCapEx_PermitCInvokeViolation, zCapEx_AccessCInvokeIDCViolation, zCapEx_PermitUnsealViolation, zCapEx_PermitSetCIDViolation };
+
+static bool eq_zCapEx(enum zCapEx op1, enum zCapEx op2) { return op1 == op2; }
+
+static enum zCapEx UNDEFINED(zCapEx)(unit u) { return zCapEx_None; }
+
+// enum CPtrCmpOp
+enum zCPtrCmpOp { zCEQ, zCNE, zCLT, zCLE, zCLTU, zCLEU, zCEXEQ, zCNEXEQ };
+
+static bool eq_zCPtrCmpOp(enum zCPtrCmpOp op1, enum zCPtrCmpOp op2) { return op1 == op2; }
+
+static enum zCPtrCmpOp UNDEFINED(zCPtrCmpOp)(unit u) { return zCEQ; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+static bool sailgen_zzz3zzzz7mzzJzzK0z3neq_int(sail_int, int64_t);
+
+static bool sailgen_zzz3zzzz7mzzJzzKzzD1z3neq_int(sail_int, int64_t);
+
+static bool sailgen_zzz3zzzz7mzzJzzK0z3neq_int(sail_int zx, int64_t zy)
+{
+ __label__ end_function_1, end_block_exception_2;
+
+ bool zcbz30;
+ bool zgaz30;
+ {
+ sail_int zgsz30;
+ CREATE(sail_int)(&zgsz30);
+ CONVERT_OF(sail_int, mach_int)(&zgsz30, zy);
+ zgaz30 = eq_int(zx, zgsz30);
+ KILL(sail_int)(&zgsz30);
+ }
+ zcbz30 = not(zgaz30);
+
+end_function_1: ;
+ return zcbz30;
+end_block_exception_2: ;
+
+ return false;
+}
+
+static bool sailgen_zzz3zzzz7mzzJzzKzzD1z3neq_int(sail_int zx, int64_t zy)
+{
+ __label__ end_function_4, end_block_exception_5;
+
+ bool zcbz31;
+ bool zgaz31;
+ {
+ sail_int zgsz31;
+ CREATE(sail_int)(&zgsz31);
+ CONVERT_OF(sail_int, mach_int)(&zgsz31, zy);
+ zgaz31 = eq_int(zx, zgsz31);
+ KILL(sail_int)(&zgsz31);
+ }
+ zcbz31 = not(zgaz31);
+
+end_function_4: ;
+ return zcbz31;
+end_block_exception_5: ;
+
+ return false;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+static bool sailgen_neq_bits(lbits zx, lbits zy)
+{
+ __label__ end_function_7, end_block_exception_8;
+
+ bool zcbz32;
+ bool zgaz32;
+ zgaz32 = eq_bits(zx, zy);
+ zcbz32 = not(zgaz32);
+
+end_function_7: ;
+ return zcbz32;
+end_block_exception_8: ;
+
+ return false;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+static uint64_t sailgen_zzzz7nzzJzzK0z3sail_ones(int64_t);
+
+static void sailgen_zzz3zzz3sail_ones(lbits *rop, sail_int);
+
+static uint64_t sailgen_zzzz7nzzJzzK0z3sail_ones(int64_t zn)
+{
+ __label__ end_function_10, end_block_exception_11;
+
+ uint64_t zcbz33;
+ uint64_t zgaz33;
+ {
+ sail_int zgsz32;
+ CREATE(sail_int)(&zgsz32);
+ CONVERT_OF(sail_int, mach_int)(&zgsz32, zn);
+ lbits zgsz33;
+ CREATE(lbits)(&zgsz33);
+ zeros(&zgsz33, zgsz32);
+ zgaz33 = CONVERT_OF(fbits, lbits)(zgsz33, true);
+ KILL(lbits)(&zgsz33);
+ KILL(sail_int)(&zgsz32);
+ }
+ {
+ lbits zgsz34;
+ CREATE(lbits)(&zgsz34);
+ CONVERT_OF(lbits, fbits)(&zgsz34, zgaz33, UINT64_C(0) , true);
+ lbits zgsz35;
+ CREATE(lbits)(&zgsz35);
+ not_bits(&zgsz35, zgsz34);
+ zcbz33 = CONVERT_OF(fbits, lbits)(zgsz35, true);
+ KILL(lbits)(&zgsz35);
+ KILL(lbits)(&zgsz34);
+ }
+
+end_function_10: ;
+ return zcbz33;
+end_block_exception_11: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static void sailgen_zzz3zzz3sail_ones(lbits *zcbz34, sail_int zn)
+{
+ __label__ end_function_13, end_block_exception_14, end_function_236;
+
+ lbits zgaz34;
+ CREATE(lbits)(&zgaz34);
+ zeros(&zgaz34, zn);
+ not_bits((*(&zcbz34)), zgaz34);
+ KILL(lbits)(&zgaz34);
+end_function_13: ;
+ goto end_function_236;
+end_block_exception_14: ;
+ goto end_function_236;
+end_function_236: ;
+}
+
+
+
+
+
+
+
+
+
+
+
+static fbits sailgen_not_bit(fbits);
+
+static fbits sailgen_not_bit(fbits zb)
+{
+ __label__ end_function_16, end_block_exception_17;
+
+ fbits zcbz35;
+ bool zgaz35;
+ zgaz35 = eq_bit(zb, UINT64_C(1));
+ if (zgaz35) { zcbz35 = UINT64_C(0); } else { zcbz35 = UINT64_C(1); }
+
+end_function_16: ;
+ return zcbz35;
+end_block_exception_17: ;
+
+ return UINT64_C(0);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+static uint64_t sailgen_zzzz7mzzJzzK32zzCzz0zz7nzzJzzK4z3EXTS(int64_t, uint64_t);
+
+static void sailgen_zzz3zzz3EXTZ(lbits *rop, sail_int, lbits);
+
+static uint64_t sailgen_zzzz7mzzJzzK15zzCzz0zz7nzzJzzK12z3EXTZ(int64_t, uint64_t);
+
+static uint64_t sailgen_zzzz7mzzJzzK32zzCzz0zz7nzzJzzK4z3EXTZ(int64_t, uint64_t);
+
+static uint64_t sailgen_zzzz7mzzJzzK32zzCzz0zz7nzzJzzK4z3EXTS(int64_t zm, uint64_t zv)
+{
+ __label__ end_function_19, end_block_exception_20;
+
+ uint64_t zcbz36;
+ {
+ lbits zgsz36;
+ CREATE(lbits)(&zgsz36);
+ CONVERT_OF(lbits, fbits)(&zgsz36, zv, UINT64_C(4) , true);
+ sail_int zgsz37;
+ CREATE(sail_int)(&zgsz37);
+ CONVERT_OF(sail_int, mach_int)(&zgsz37, zm);
+ lbits zgsz38;
+ CREATE(lbits)(&zgsz38);
+ sign_extend(&zgsz38, zgsz36, zgsz37);
+ zcbz36 = CONVERT_OF(fbits, lbits)(zgsz38, true);
+ KILL(lbits)(&zgsz38);
+ KILL(sail_int)(&zgsz37);
+ KILL(lbits)(&zgsz36);
+ }
+end_function_19: ;
+ return zcbz36;
+end_block_exception_20: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static void sailgen_zzz3zzz3EXTZ(lbits *zcbz37, sail_int zm, lbits zv)
+{
+ __label__ end_function_22, end_block_exception_23, end_function_235;
+
+ zero_extend((*(&zcbz37)), zv, zm);
+end_function_22: ;
+ goto end_function_235;
+end_block_exception_23: ;
+ goto end_function_235;
+end_function_235: ;
+}
+
+static uint64_t sailgen_zzzz7mzzJzzK15zzCzz0zz7nzzJzzK12z3EXTZ(int64_t zm, uint64_t zv)
+{
+ __label__ end_function_25, end_block_exception_26;
+
+ uint64_t zcbz38;
+ {
+ lbits zgsz39;
+ CREATE(lbits)(&zgsz39);
+ CONVERT_OF(lbits, fbits)(&zgsz39, zv, UINT64_C(12) , true);
+ sail_int zgsz310;
+ CREATE(sail_int)(&zgsz310);
+ CONVERT_OF(sail_int, mach_int)(&zgsz310, zm);
+ lbits zgsz311;
+ CREATE(lbits)(&zgsz311);
+ zero_extend(&zgsz311, zgsz39, zgsz310);
+ zcbz38 = CONVERT_OF(fbits, lbits)(zgsz311, true);
+ KILL(lbits)(&zgsz311);
+ KILL(sail_int)(&zgsz310);
+ KILL(lbits)(&zgsz39);
+ }
+end_function_25: ;
+ return zcbz38;
+end_block_exception_26: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7mzzJzzK32zzCzz0zz7nzzJzzK4z3EXTZ(int64_t zm, uint64_t zv)
+{
+ __label__ end_function_28, end_block_exception_29;
+
+ uint64_t zcbz39;
+ {
+ lbits zgsz312;
+ CREATE(lbits)(&zgsz312);
+ CONVERT_OF(lbits, fbits)(&zgsz312, zv, UINT64_C(4) , true);
+ sail_int zgsz313;
+ CREATE(sail_int)(&zgsz313);
+ CONVERT_OF(sail_int, mach_int)(&zgsz313, zm);
+ lbits zgsz314;
+ CREATE(lbits)(&zgsz314);
+ zero_extend(&zgsz314, zgsz312, zgsz313);
+ zcbz39 = CONVERT_OF(fbits, lbits)(zgsz314, true);
+ KILL(lbits)(&zgsz314);
+ KILL(sail_int)(&zgsz313);
+ KILL(lbits)(&zgsz312);
+ }
+end_function_28: ;
+ return zcbz39;
+end_block_exception_29: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7nzzJzzK6z3zzeros_implicit(int64_t);
+
+static uint64_t sailgen_zzzz7nzzJzzK32z3zzeros_implicit(int64_t);
+
+static uint64_t sailgen_zzzz7nzzJzzK8z3zzeros_implicit(int64_t);
+
+static uint64_t sailgen_zzzz7nzzJzzK0z3zzeros_implicit(int64_t);
+
+static void sailgen_zzz3zzz3zzeros_implicit(lbits *rop, sail_int);
+
+static uint64_t sailgen_zzzz7nzzJzzK2z3zzeros_implicit(int64_t);
+
+static uint64_t sailgen_zzzz7nzzJzzK3z3zzeros_implicit(int64_t);
+
+static uint64_t sailgen_zzzz7nzzJzzK5z3zzeros_implicit(int64_t);
+
+static uint64_t sailgen_zzzz7nzzJzzK6z3zzeros_implicit(int64_t zn)
+{
+ __label__ end_function_31, end_block_exception_32;
+
+ uint64_t zcbz310;
+ {
+ sail_int zgsz315;
+ CREATE(sail_int)(&zgsz315);
+ CONVERT_OF(sail_int, mach_int)(&zgsz315, zn);
+ lbits zgsz316;
+ CREATE(lbits)(&zgsz316);
+ zeros(&zgsz316, zgsz315);
+ zcbz310 = CONVERT_OF(fbits, lbits)(zgsz316, true);
+ KILL(lbits)(&zgsz316);
+ KILL(sail_int)(&zgsz315);
+ }
+end_function_31: ;
+ return zcbz310;
+end_block_exception_32: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7nzzJzzK32z3zzeros_implicit(int64_t zn)
+{
+ __label__ end_function_34, end_block_exception_35;
+
+ uint64_t zcbz311;
+ {
+ sail_int zgsz317;
+ CREATE(sail_int)(&zgsz317);
+ CONVERT_OF(sail_int, mach_int)(&zgsz317, zn);
+ lbits zgsz318;
+ CREATE(lbits)(&zgsz318);
+ zeros(&zgsz318, zgsz317);
+ zcbz311 = CONVERT_OF(fbits, lbits)(zgsz318, true);
+ KILL(lbits)(&zgsz318);
+ KILL(sail_int)(&zgsz317);
+ }
+end_function_34: ;
+ return zcbz311;
+end_block_exception_35: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7nzzJzzK8z3zzeros_implicit(int64_t zn)
+{
+ __label__ end_function_37, end_block_exception_38;
+
+ uint64_t zcbz312;
+ {
+ sail_int zgsz319;
+ CREATE(sail_int)(&zgsz319);
+ CONVERT_OF(sail_int, mach_int)(&zgsz319, zn);
+ lbits zgsz320;
+ CREATE(lbits)(&zgsz320);
+ zeros(&zgsz320, zgsz319);
+ zcbz312 = CONVERT_OF(fbits, lbits)(zgsz320, true);
+ KILL(lbits)(&zgsz320);
+ KILL(sail_int)(&zgsz319);
+ }
+end_function_37: ;
+ return zcbz312;
+end_block_exception_38: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7nzzJzzK0z3zzeros_implicit(int64_t zn)
+{
+ __label__ end_function_40, end_block_exception_41;
+
+ uint64_t zcbz313;
+ {
+ sail_int zgsz321;
+ CREATE(sail_int)(&zgsz321);
+ CONVERT_OF(sail_int, mach_int)(&zgsz321, zn);
+ lbits zgsz322;
+ CREATE(lbits)(&zgsz322);
+ zeros(&zgsz322, zgsz321);
+ zcbz313 = CONVERT_OF(fbits, lbits)(zgsz322, true);
+ KILL(lbits)(&zgsz322);
+ KILL(sail_int)(&zgsz321);
+ }
+end_function_40: ;
+ return zcbz313;
+end_block_exception_41: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static void sailgen_zzz3zzz3zzeros_implicit(lbits *zcbz314, sail_int zn)
+{
+ __label__ end_function_43, end_block_exception_44, end_function_234;
+
+ zeros((*(&zcbz314)), zn);
+end_function_43: ;
+ goto end_function_234;
+end_block_exception_44: ;
+ goto end_function_234;
+end_function_234: ;
+}
+
+static uint64_t sailgen_zzzz7nzzJzzK2z3zzeros_implicit(int64_t zn)
+{
+ __label__ end_function_46, end_block_exception_47;
+
+ uint64_t zcbz315;
+ {
+ sail_int zgsz323;
+ CREATE(sail_int)(&zgsz323);
+ CONVERT_OF(sail_int, mach_int)(&zgsz323, zn);
+ lbits zgsz324;
+ CREATE(lbits)(&zgsz324);
+ zeros(&zgsz324, zgsz323);
+ zcbz315 = CONVERT_OF(fbits, lbits)(zgsz324, true);
+ KILL(lbits)(&zgsz324);
+ KILL(sail_int)(&zgsz323);
+ }
+end_function_46: ;
+ return zcbz315;
+end_block_exception_47: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7nzzJzzK3z3zzeros_implicit(int64_t zn)
+{
+ __label__ end_function_49, end_block_exception_50;
+
+ uint64_t zcbz316;
+ {
+ sail_int zgsz325;
+ CREATE(sail_int)(&zgsz325);
+ CONVERT_OF(sail_int, mach_int)(&zgsz325, zn);
+ lbits zgsz326;
+ CREATE(lbits)(&zgsz326);
+ zeros(&zgsz326, zgsz325);
+ zcbz316 = CONVERT_OF(fbits, lbits)(zgsz326, true);
+ KILL(lbits)(&zgsz326);
+ KILL(sail_int)(&zgsz325);
+ }
+end_function_49: ;
+ return zcbz316;
+end_block_exception_50: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7nzzJzzK5z3zzeros_implicit(int64_t zn)
+{
+ __label__ end_function_52, end_block_exception_53;
+
+ uint64_t zcbz317;
+ {
+ sail_int zgsz327;
+ CREATE(sail_int)(&zgsz327);
+ CONVERT_OF(sail_int, mach_int)(&zgsz327, zn);
+ lbits zgsz328;
+ CREATE(lbits)(&zgsz328);
+ zeros(&zgsz328, zgsz327);
+ zcbz317 = CONVERT_OF(fbits, lbits)(zgsz328, true);
+ KILL(lbits)(&zgsz328);
+ KILL(sail_int)(&zgsz327);
+ }
+end_function_52: ;
+ return zcbz317;
+end_block_exception_53: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7nzzJzzK0z3ones(int64_t);
+
+static void sailgen_zzz3zzz3ones(lbits *rop, sail_int);
+
+static uint64_t sailgen_zzzz7nzzJzzK0z3ones(int64_t zn)
+{
+ __label__ end_function_55, end_block_exception_56;
+
+ uint64_t zcbz318;
+ zcbz318 = sailgen_zzzz7nzzJzzK0z3sail_ones(zn);
+end_function_55: ;
+ return zcbz318;
+end_block_exception_56: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static void sailgen_zzz3zzz3ones(lbits *zcbz319, sail_int zn)
+{
+ __label__ end_function_58, end_block_exception_59, end_function_233;
+
+ sailgen_zzz3zzz3sail_ones((*(&zcbz319)), zn);
+end_function_58: ;
+ goto end_function_233;
+end_block_exception_59: ;
+ goto end_function_233;
+end_function_233: ;
+}
+
+static uint64_t sailgen_bool_to_bits(bool);
+
+static uint64_t sailgen_bool_to_bits(bool zx)
+{
+ __label__ end_function_61, end_block_exception_62;
+
+ uint64_t zcbz320;
+ if (zx) { zcbz320 = UINT64_C(0b1); } else { zcbz320 = UINT64_C(0b0); }
+end_function_61: ;
+ return zcbz320;
+end_block_exception_62: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static bool sailgen_bit_to_bool(fbits);
+
+static bool sailgen_bit_to_bool(fbits zb)
+{
+ __label__ case_65, case_66, finish_match_64, end_function_67, end_block_exception_68;
+
+ bool zcbz321;
+ bool zgsz329;
+ {
+ fbits zp0z3;
+ zp0z3 = zb;
+ bool zgsz330;
+ zgsz330 = eq_bit(zp0z3, UINT64_C(1));
+ if (!(zgsz330)) {
+
+ goto case_65;
+ }
+ zgsz329 = true;
+
+ goto finish_match_64;
+ }
+case_65: ;
+ {
+ fbits zp0z3;
+ zp0z3 = zb;
+ bool zgsz331;
+ zgsz331 = eq_bit(zp0z3, UINT64_C(0));
+ if (!(zgsz331)) {
+
+ goto case_66;
+ }
+ zgsz329 = false;
+
+ goto finish_match_64;
+ }
+case_66: ;
+ sail_match_failure("bit_to_bool");
+finish_match_64: ;
+ zcbz321 = zgsz329;
+
+end_function_67: ;
+ return zcbz321;
+end_block_exception_68: ;
+
+ return false;
+}
+
+static void sailgen_to_bits(lbits *rop, sail_int, sail_int);
+
+static uint64_t sailgen_zzzz7lzzJzzK6z3to_bits(int64_t, sail_int);
+
+static uint64_t sailgen_zzzz7lzzJzzK36z3to_bits(int64_t, sail_int);
+
+static void sailgen_to_bits(lbits *zcbz322, sail_int zl, sail_int zn)
+{
+ __label__ end_function_70, end_block_exception_71, end_function_232;
+
+ {
+ sail_int zgsz332;
+ CREATE(sail_int)(&zgsz332);
+ CONVERT_OF(sail_int, mach_int)(&zgsz332, INT64_C(0));
+ get_slice_int((*(&zcbz322)), zl, zn, zgsz332);
+ KILL(sail_int)(&zgsz332);
+ }
+end_function_70: ;
+ goto end_function_232;
+end_block_exception_71: ;
+ goto end_function_232;
+end_function_232: ;
+}
+
+static uint64_t sailgen_zzzz7lzzJzzK6z3to_bits(int64_t zl, sail_int zn)
+{
+ __label__ end_function_73, end_block_exception_74;
+
+ uint64_t zcbz323;
+ {
+ sail_int zgsz333;
+ CREATE(sail_int)(&zgsz333);
+ CONVERT_OF(sail_int, mach_int)(&zgsz333, zl);
+ sail_int zgsz334;
+ CREATE(sail_int)(&zgsz334);
+ CONVERT_OF(sail_int, mach_int)(&zgsz334, INT64_C(0));
+ lbits zgsz335;
+ CREATE(lbits)(&zgsz335);
+ get_slice_int(&zgsz335, zgsz333, zn, zgsz334);
+ zcbz323 = CONVERT_OF(fbits, lbits)(zgsz335, true);
+ KILL(lbits)(&zgsz335);
+ KILL(sail_int)(&zgsz334);
+ KILL(sail_int)(&zgsz333);
+ }
+end_function_73: ;
+ return zcbz323;
+end_block_exception_74: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_zzzz7lzzJzzK36z3to_bits(int64_t zl, sail_int zn)
+{
+ __label__ end_function_76, end_block_exception_77;
+
+ uint64_t zcbz324;
+ {
+ sail_int zgsz336;
+ CREATE(sail_int)(&zgsz336);
+ CONVERT_OF(sail_int, mach_int)(&zgsz336, zl);
+ sail_int zgsz337;
+ CREATE(sail_int)(&zgsz337);
+ CONVERT_OF(sail_int, mach_int)(&zgsz337, INT64_C(0));
+ lbits zgsz338;
+ CREATE(lbits)(&zgsz338);
+ get_slice_int(&zgsz338, zgsz336, zn, zgsz337);
+ zcbz324 = CONVERT_OF(fbits, lbits)(zgsz338, true);
+ KILL(lbits)(&zgsz338);
+ KILL(sail_int)(&zgsz337);
+ KILL(sail_int)(&zgsz336);
+ }
+end_function_76: ;
+ return zcbz324;
+end_block_exception_77: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static bool sailgen_z8operatorz0zzz3zzz3zI_uz9(lbits, lbits);
+
+static bool sailgen_z8operatorz0zzzz7nzzJzzK3z3zI_uz9(uint64_t, uint64_t);
+
+static bool sailgen_z8operatorz0zzzz7nzzJzzK8z3zI_uz9(uint64_t, uint64_t);
+
+static bool sailgen_z8operatorz0zzzz7nzzJzzK8z3zKzJ_uz9(uint64_t, uint64_t);
+
+static bool sailgen_z8operatorz0zzz3zzz3zI_uz9(lbits zx, lbits zy)
+{
+ __label__ end_function_79, end_block_exception_80;
+
+ bool zcbz325;
+ sail_int zgaz36;
+ CREATE(sail_int)(&zgaz36);
+ sail_unsigned(&zgaz36, zx);
+ sail_int zgaz37;
+ CREATE(sail_int)(&zgaz37);
+ sail_unsigned(&zgaz37, zy);
+ zcbz325 = lt(zgaz36, zgaz37);
+ KILL(sail_int)(&zgaz37);
+ KILL(sail_int)(&zgaz36);
+end_function_79: ;
+ return zcbz325;
+end_block_exception_80: ;
+
+ return false;
+}
+
+static bool sailgen_z8operatorz0zzzz7nzzJzzK3z3zI_uz9(uint64_t zx, uint64_t zy)
+{
+ __label__ end_function_82, end_block_exception_83;
+
+ bool zcbz326;
+ int64_t zgaz38;
+ zgaz38 = ((mach_int) zx);
+ int64_t zgaz39;
+ zgaz39 = ((mach_int) zy);
+ {
+ sail_int zgsz340;
+ CREATE(sail_int)(&zgsz340);
+ CONVERT_OF(sail_int, mach_int)(&zgsz340, zgaz39);
+ sail_int zgsz339;
+ CREATE(sail_int)(&zgsz339);
+ CONVERT_OF(sail_int, mach_int)(&zgsz339, zgaz38);
+ zcbz326 = lt(zgsz339, zgsz340);
+ KILL(sail_int)(&zgsz340);
+ KILL(sail_int)(&zgsz339);
+ }
+
+
+end_function_82: ;
+ return zcbz326;
+end_block_exception_83: ;
+
+ return false;
+}
+
+static bool sailgen_z8operatorz0zzzz7nzzJzzK8z3zI_uz9(uint64_t zx, uint64_t zy)
+{
+ __label__ end_function_85, end_block_exception_86;
+
+ bool zcbz327;
+ int64_t zgaz310;
+ zgaz310 = ((mach_int) zx);
+ int64_t zgaz311;
+ zgaz311 = ((mach_int) zy);
+ {
+ sail_int zgsz342;
+ CREATE(sail_int)(&zgsz342);
+ CONVERT_OF(sail_int, mach_int)(&zgsz342, zgaz311);
+ sail_int zgsz341;
+ CREATE(sail_int)(&zgsz341);
+ CONVERT_OF(sail_int, mach_int)(&zgsz341, zgaz310);
+ zcbz327 = lt(zgsz341, zgsz342);
+ KILL(sail_int)(&zgsz342);
+ KILL(sail_int)(&zgsz341);
+ }
+
+
+end_function_85: ;
+ return zcbz327;
+end_block_exception_86: ;
+
+ return false;
+}
+
+static bool sailgen_z8operatorz0zzzz7nzzJzzK8z3zKzJ_uz9(uint64_t zx, uint64_t zy)
+{
+ __label__ end_function_88, end_block_exception_89;
+
+ bool zcbz328;
+ int64_t zgaz312;
+ zgaz312 = ((mach_int) zx);
+ int64_t zgaz313;
+ zgaz313 = ((mach_int) zy);
+ {
+ sail_int zgsz344;
+ CREATE(sail_int)(&zgsz344);
+ CONVERT_OF(sail_int, mach_int)(&zgsz344, zgaz313);
+ sail_int zgsz343;
+ CREATE(sail_int)(&zgsz343);
+ CONVERT_OF(sail_int, mach_int)(&zgsz343, zgaz312);
+ zcbz328 = gteq(zgsz343, zgsz344);
+ KILL(sail_int)(&zgsz344);
+ KILL(sail_int)(&zgsz343);
+ }
+
+
+end_function_88: ;
+ return zcbz328;
+end_block_exception_89: ;
+
+ return false;
+}
+
+
+
+static void sailgen_n_leading_spaces(sail_int *rop, sail_string);
+
+static void sailgen_n_leading_spaces(sail_int *zcbz329, sail_string zs)
+{
+ __label__ case_92, case_93, finish_match_91, end_function_97, end_block_exception_98, end_function_231;
+
+ sail_int zgsz345;
+ CREATE(sail_int)(&zgsz345);
+ {
+ sail_string zp0z3;
+ CREATE(sail_string)(&zp0z3);
+ COPY(sail_string)(&zp0z3, zs);
+ bool zgsz346;
+ zgsz346 = eq_string(zp0z3, "");
+ if (!(zgsz346)) {
+ KILL(sail_string)(&zp0z3);
+ goto case_92;
+ }
+ CONVERT_OF(sail_int, mach_int)(&zgsz345, INT64_C(0));
+ KILL(sail_string)(&zp0z3);
+ goto finish_match_91;
+ }
+case_92: ;
+ {
+ __label__ case_95, case_96, finish_match_94;
+
+ sail_string zgaz314;
+ CREATE(sail_string)(&zgaz314);
+ {
+ sail_int zgsz347;
+ CREATE(sail_int)(&zgsz347);
+ CONVERT_OF(sail_int, mach_int)(&zgsz347, INT64_C(1));
+ string_take(&zgaz314, zs, zgsz347);
+ KILL(sail_int)(&zgsz347);
+ }
+ sail_int zgsz348;
+ CREATE(sail_int)(&zgsz348);
+ {
+ sail_string zp0z3;
+ CREATE(sail_string)(&zp0z3);
+ COPY(sail_string)(&zp0z3, zgaz314);
+ bool zgsz350;
+ zgsz350 = eq_string(zp0z3, " ");
+ if (!(zgsz350)) {
+ KILL(sail_string)(&zp0z3);
+ goto case_95;
+ }
+ sail_int zgaz316;
+ CREATE(sail_int)(&zgaz316);
+ {
+ sail_string zgaz315;
+ CREATE(sail_string)(&zgaz315);
+ {
+ sail_int zgsz349;
+ CREATE(sail_int)(&zgsz349);
+ CONVERT_OF(sail_int, mach_int)(&zgsz349, INT64_C(1));
+ string_drop(&zgaz315, zs, zgsz349);
+ KILL(sail_int)(&zgsz349);
+ }
+ sailgen_n_leading_spaces(&zgaz316, zgaz315);
+ KILL(sail_string)(&zgaz315);
+ }
+ {
+ sail_int zgsz351;
+ CREATE(sail_int)(&zgsz351);
+ CONVERT_OF(sail_int, mach_int)(&zgsz351, INT64_C(1));
+ add_int(&zgsz348, zgsz351, zgaz316);
+ KILL(sail_int)(&zgsz351);
+ }
+ KILL(sail_int)(&zgaz316);
+ KILL(sail_string)(&zp0z3);
+ goto finish_match_94;
+ }
+ case_95: ;
+ {
+ CONVERT_OF(sail_int, mach_int)(&zgsz348, INT64_C(0));
+ goto finish_match_94;
+ }
+ case_96: ;
+ sail_match_failure("n_leading_spaces");
+ finish_match_94: ;
+ COPY(sail_int)(&zgsz345, zgsz348);
+ KILL(sail_int)(&zgsz348);
+ KILL(sail_string)(&zgaz314);
+ goto finish_match_91;
+ }
+case_93: ;
+ sail_match_failure("n_leading_spaces");
+finish_match_91: ;
+ COPY(sail_int)((*(&zcbz329)), zgsz345);
+ KILL(sail_int)(&zgsz345);
+end_function_97: ;
+ goto end_function_231;
+end_block_exception_98: ;
+ goto end_function_231;
+end_function_231: ;
+}
+
+static int64_t sailgen_zzzz7nzzJzzK32z3MAX(int64_t);
+
+static int64_t sailgen_zzzz7nzzJzzK4z3MAX(int64_t);
+
+static int64_t sailgen_zzzz7nzzJzzK32z3MAX(int64_t zn)
+{
+ __label__ end_function_100, end_block_exception_101;
+
+ int64_t zcbz330;
+ int64_t zgaz317;
+ {
+ sail_int zgsz354;
+ CREATE(sail_int)(&zgsz354);
+ CONVERT_OF(sail_int, mach_int)(&zgsz354, zn);
+ sail_int zgsz355;
+ CREATE(sail_int)(&zgsz355);
+ pow2(&zgsz355, zgsz354);
+ zgaz317 = CONVERT_OF(mach_int, sail_int)(zgsz355);
+ KILL(sail_int)(&zgsz355);
+ KILL(sail_int)(&zgsz354);
+ }
+ {
+ sail_int zgsz356;
+ CREATE(sail_int)(&zgsz356);
+ CONVERT_OF(sail_int, mach_int)(&zgsz356, zgaz317);
+ sail_int zgsz357;
+ CREATE(sail_int)(&zgsz357);
+ CONVERT_OF(sail_int, mach_int)(&zgsz357, INT64_C(1));
+ sail_int zgsz358;
+ CREATE(sail_int)(&zgsz358);
+ sub_int(&zgsz358, zgsz356, zgsz357);
+ zcbz330 = CONVERT_OF(mach_int, sail_int)(zgsz358);
+ KILL(sail_int)(&zgsz358);
+ KILL(sail_int)(&zgsz357);
+ KILL(sail_int)(&zgsz356);
+ }
+
+end_function_100: ;
+ return zcbz330;
+end_block_exception_101: ;
+
+ return INT64_C(0xdeadc0de);
+}
+
+static int64_t sailgen_zzzz7nzzJzzK4z3MAX(int64_t zn)
+{
+ __label__ end_function_103, end_block_exception_104;
+
+ int64_t zcbz331;
+ int64_t zgaz318;
+ {
+ sail_int zgsz359;
+ CREATE(sail_int)(&zgsz359);
+ CONVERT_OF(sail_int, mach_int)(&zgsz359, zn);
+ sail_int zgsz360;
+ CREATE(sail_int)(&zgsz360);
+ pow2(&zgsz360, zgsz359);
+ zgaz318 = CONVERT_OF(mach_int, sail_int)(zgsz360);
+ KILL(sail_int)(&zgsz360);
+ KILL(sail_int)(&zgsz359);
+ }
+ {
+ sail_int zgsz361;
+ CREATE(sail_int)(&zgsz361);
+ CONVERT_OF(sail_int, mach_int)(&zgsz361, zgaz318);
+ sail_int zgsz362;
+ CREATE(sail_int)(&zgsz362);
+ CONVERT_OF(sail_int, mach_int)(&zgsz362, INT64_C(1));
+ sail_int zgsz363;
+ CREATE(sail_int)(&zgsz363);
+ sub_int(&zgsz363, zgsz361, zgsz362);
+ zcbz331 = CONVERT_OF(mach_int, sail_int)(zgsz363);
+ KILL(sail_int)(&zgsz363);
+ KILL(sail_int)(&zgsz362);
+ KILL(sail_int)(&zgsz361);
+ }
+
+end_function_103: ;
+ return zcbz331;
+end_block_exception_104: ;
+
+ return INT64_C(0xdeadc0de);
+}
+
+
+
+static int64_t zreserved_otypes;
+static void create_letbind_0(void) {
+
+
+ int64_t zgsz364;
+ zgsz364 = INT64_C(4);
+ zreserved_otypes = zgsz364;
+
+let_end_105: ;
+}
+static void kill_letbind_0(void) {
+}
+
+static int64_t zotype_unsealed;
+static void create_letbind_1(void) {
+
+
+ int64_t zgsz365;
+ zgsz365 = INT64_C(-1);
+ zotype_unsealed = zgsz365;
+
+let_end_106: ;
+}
+static void kill_letbind_1(void) {
+}
+
+static int64_t zotype_sentry;
+static void create_letbind_2(void) {
+
+
+ int64_t zgsz366;
+ zgsz366 = INT64_C(-2);
+ zotype_sentry = zgsz366;
+
+let_end_107: ;
+}
+static void kill_letbind_2(void) {
+}
+
+static uint64_t zPCC_IDX;
+static void create_letbind_3(void) {
+
+
+ uint64_t zgsz367;
+ zgsz367 = UINT64_C(0b100000);
+ zPCC_IDX = zgsz367;
+
+let_end_108: ;
+}
+static void kill_letbind_3(void) {
+}
+
+static uint64_t zDDC_IDX;
+static void create_letbind_4(void) {
+
+
+ uint64_t zgsz368;
+ zgsz368 = UINT64_C(0b100001);
+ zDDC_IDX = zgsz368;
+
+let_end_109: ;
+}
+static void kill_letbind_4(void) {
+}
+
+static int64_t zcap_sizze;
+static void create_letbind_5(void) {
+
+
+ int64_t zgsz369;
+ zgsz369 = INT64_C(8);
+ zcap_sizze = zgsz369;
+
+let_end_110: ;
+}
+static void kill_letbind_5(void) {
+}
+
+static int64_t zlog2_cap_sizze;
+static void create_letbind_6(void) {
+
+
+ int64_t zgsz370;
+ zgsz370 = INT64_C(3);
+ zlog2_cap_sizze = zgsz370;
+
+let_end_111: ;
+}
+static void kill_letbind_6(void) {
+}
+
+static int64_t zcap_hperms_width;
+static void create_letbind_7(void) {
+
+
+ int64_t zgsz371;
+ zgsz371 = INT64_C(12);
+ zcap_hperms_width = zgsz371;
+
+let_end_112: ;
+}
+static void kill_letbind_7(void) {
+}
+
+static int64_t zcap_uperms_width;
+static void create_letbind_8(void) {
+
+
+ int64_t zgsz372;
+ zgsz372 = INT64_C(0);
+ zcap_uperms_width = zgsz372;
+
+let_end_113: ;
+}
+static void kill_letbind_8(void) {
+}
+
+static int64_t zcap_otype_width;
+static void create_letbind_9(void) {
+
+
+ int64_t zgsz373;
+ zgsz373 = INT64_C(4);
+ zcap_otype_width = zgsz373;
+
+let_end_114: ;
+}
+static void kill_letbind_9(void) {
+}
+
+static int64_t zcap_reserved_width;
+static void create_letbind_10(void) {
+
+
+ int64_t zgsz374;
+ zgsz374 = INT64_C(0);
+ zcap_reserved_width = zgsz374;
+
+let_end_115: ;
+}
+static void kill_letbind_10(void) {
+}
+
+static int64_t zcap_flags_width;
+static void create_letbind_11(void) {
+
+
+ int64_t zgsz375;
+ zgsz375 = INT64_C(1);
+ zcap_flags_width = zgsz375;
+
+let_end_116: ;
+}
+static void kill_letbind_11(void) {
+}
+
+static int64_t zcap_mantissa_width;
+static void create_letbind_12(void) {
+
+
+ int64_t zgsz376;
+ zgsz376 = INT64_C(8);
+ zcap_mantissa_width = zgsz376;
+
+let_end_117: ;
+}
+static void kill_letbind_12(void) {
+}
+
+static int64_t zcap_E_width;
+static void create_letbind_13(void) {
+
+
+ int64_t zgsz377;
+ zgsz377 = INT64_C(6);
+ zcap_E_width = zgsz377;
+
+let_end_118: ;
+}
+static void kill_letbind_13(void) {
+}
+
+static int64_t zcap_addr_width;
+static void create_letbind_14(void) {
+
+
+ int64_t zgsz378;
+ zgsz378 = INT64_C(32);
+ zcap_addr_width = zgsz378;
+
+let_end_119: ;
+}
+static void kill_letbind_14(void) {
+}
+
+static int64_t zcap_len_width;
+static void create_letbind_15(void) {
+
+
+ int64_t zgsz379;
+ {
+ sail_int zgsz380;
+ CREATE(sail_int)(&zgsz380);
+ CONVERT_OF(sail_int, mach_int)(&zgsz380, INT64_C(32));
+ sail_int zgsz381;
+ CREATE(sail_int)(&zgsz381);
+ CONVERT_OF(sail_int, mach_int)(&zgsz381, INT64_C(1));
+ sail_int zgsz382;
+ CREATE(sail_int)(&zgsz382);
+ add_int(&zgsz382, zgsz380, zgsz381);
+ zgsz379 = CONVERT_OF(mach_int, sail_int)(zgsz382);
+ KILL(sail_int)(&zgsz382);
+ KILL(sail_int)(&zgsz381);
+ KILL(sail_int)(&zgsz380);
+ }
+ zcap_len_width = zgsz379;
+
+let_end_120: ;
+}
+static void kill_letbind_15(void) {
+}
+
+static int64_t zcaps_per_cache_line;
+static void create_letbind_16(void) {
+
+
+ int64_t zgsz383;
+ zgsz383 = INT64_C(8);
+ zcaps_per_cache_line = zgsz383;
+
+let_end_121: ;
+}
+static void kill_letbind_16(void) {
+}
+
+static int64_t zinternal_E_take_bits;
+static void create_letbind_17(void) {
+
+
+ int64_t zgsz384;
+ zgsz384 = INT64_C(3);
+ zinternal_E_take_bits = zgsz384;
+
+let_end_122: ;
+}
+static void kill_letbind_17(void) {
+}
+
+static struct zEncCapability sailgen_capBitsToEncCapability(uint64_t);
+
+static struct zEncCapability sailgen_capBitsToEncCapability(uint64_t zc)
+{
+ __label__ end_function_124, end_block_exception_125;
+
+ struct zEncCapability zcbz332;
+ uint64_t zgaz319;
+ {
+ lbits zgsz385;
+ CREATE(lbits)(&zgsz385);
+ CONVERT_OF(lbits, fbits)(&zgsz385, zc, UINT64_C(64) , true);
+ sail_int zgsz386;
+ CREATE(sail_int)(&zgsz386);
+ CONVERT_OF(sail_int, mach_int)(&zgsz386, INT64_C(63));
+ sail_int zgsz387;
+ CREATE(sail_int)(&zgsz387);
+ CONVERT_OF(sail_int, mach_int)(&zgsz387, INT64_C(52));
+ lbits zgsz388;
+ CREATE(lbits)(&zgsz388);
+ vector_subrange_lbits(&zgsz388, zgsz385, zgsz386, zgsz387);
+ zgaz319 = CONVERT_OF(fbits, lbits)(zgsz388, true);
+ KILL(lbits)(&zgsz388);
+ KILL(sail_int)(&zgsz387);
+ KILL(sail_int)(&zgsz386);
+ KILL(lbits)(&zgsz385);
+ }
+ uint64_t zgaz320;
+ {
+ lbits zgsz389;
+ CREATE(lbits)(&zgsz389);
+ CONVERT_OF(lbits, fbits)(&zgsz389, zc, UINT64_C(64) , true);
+ sail_int zgsz390;
+ CREATE(sail_int)(&zgsz390);
+ CONVERT_OF(sail_int, mach_int)(&zgsz390, INT64_C(51));
+ sail_int zgsz391;
+ CREATE(sail_int)(&zgsz391);
+ CONVERT_OF(sail_int, mach_int)(&zgsz391, INT64_C(51));
+ lbits zgsz392;
+ CREATE(lbits)(&zgsz392);
+ vector_subrange_lbits(&zgsz392, zgsz389, zgsz390, zgsz391);
+ zgaz320 = CONVERT_OF(fbits, lbits)(zgsz392, true);
+ KILL(lbits)(&zgsz392);
+ KILL(sail_int)(&zgsz391);
+ KILL(sail_int)(&zgsz390);
+ KILL(lbits)(&zgsz389);
+ }
+ uint64_t zgaz321;
+ {
+ lbits zgsz393;
+ CREATE(lbits)(&zgsz393);
+ CONVERT_OF(lbits, fbits)(&zgsz393, zc, UINT64_C(64) , true);
+ sail_int zgsz394;
+ CREATE(sail_int)(&zgsz394);
+ CONVERT_OF(sail_int, mach_int)(&zgsz394, INT64_C(50));
+ sail_int zgsz395;
+ CREATE(sail_int)(&zgsz395);
+ CONVERT_OF(sail_int, mach_int)(&zgsz395, INT64_C(47));
+ lbits zgsz396;
+ CREATE(lbits)(&zgsz396);
+ vector_subrange_lbits(&zgsz396, zgsz393, zgsz394, zgsz395);
+ zgaz321 = CONVERT_OF(fbits, lbits)(zgsz396, true);
+ KILL(lbits)(&zgsz396);
+ KILL(sail_int)(&zgsz395);
+ KILL(sail_int)(&zgsz394);
+ KILL(lbits)(&zgsz393);
+ }
+ fbits zgaz322;
+ {
+ sail_int zgsz398;
+ CREATE(sail_int)(&zgsz398);
+ CONVERT_OF(sail_int, mach_int)(&zgsz398, INT64_C(46));
+ lbits zgsz397;
+ CREATE(lbits)(&zgsz397);
+ CONVERT_OF(lbits, fbits)(&zgsz397, zc, UINT64_C(64) , true);
+ zgaz322 = bitvector_access(zgsz397, zgsz398);
+ KILL(sail_int)(&zgsz398);
+ KILL(lbits)(&zgsz397);
+ }
+ uint64_t zgaz323;
+ {
+ lbits zgsz399;
+ CREATE(lbits)(&zgsz399);
+ CONVERT_OF(lbits, fbits)(&zgsz399, zc, UINT64_C(64) , true);
+ sail_int zgsz3100;
+ CREATE(sail_int)(&zgsz3100);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3100, INT64_C(45));
+ sail_int zgsz3101;
+ CREATE(sail_int)(&zgsz3101);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3101, INT64_C(40));
+ lbits zgsz3102;
+ CREATE(lbits)(&zgsz3102);
+ vector_subrange_lbits(&zgsz3102, zgsz399, zgsz3100, zgsz3101);
+ zgaz323 = CONVERT_OF(fbits, lbits)(zgsz3102, true);
+ KILL(lbits)(&zgsz3102);
+ KILL(sail_int)(&zgsz3101);
+ KILL(sail_int)(&zgsz3100);
+ KILL(lbits)(&zgsz399);
+ }
+ uint64_t zgaz324;
+ {
+ lbits zgsz3103;
+ CREATE(lbits)(&zgsz3103);
+ CONVERT_OF(lbits, fbits)(&zgsz3103, zc, UINT64_C(64) , true);
+ sail_int zgsz3104;
+ CREATE(sail_int)(&zgsz3104);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3104, INT64_C(39));
+ sail_int zgsz3105;
+ CREATE(sail_int)(&zgsz3105);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3105, INT64_C(32));
+ lbits zgsz3106;
+ CREATE(lbits)(&zgsz3106);
+ vector_subrange_lbits(&zgsz3106, zgsz3103, zgsz3104, zgsz3105);
+ zgaz324 = CONVERT_OF(fbits, lbits)(zgsz3106, true);
+ KILL(lbits)(&zgsz3106);
+ KILL(sail_int)(&zgsz3105);
+ KILL(sail_int)(&zgsz3104);
+ KILL(lbits)(&zgsz3103);
+ }
+ uint64_t zgaz325;
+ {
+ lbits zgsz3107;
+ CREATE(lbits)(&zgsz3107);
+ CONVERT_OF(lbits, fbits)(&zgsz3107, zc, UINT64_C(64) , true);
+ sail_int zgsz3108;
+ CREATE(sail_int)(&zgsz3108);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3108, INT64_C(31));
+ sail_int zgsz3109;
+ CREATE(sail_int)(&zgsz3109);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3109, INT64_C(0));
+ lbits zgsz3110;
+ CREATE(lbits)(&zgsz3110);
+ vector_subrange_lbits(&zgsz3110, zgsz3107, zgsz3108, zgsz3109);
+ zgaz325 = CONVERT_OF(fbits, lbits)(zgsz3110, true);
+ KILL(lbits)(&zgsz3110);
+ KILL(sail_int)(&zgsz3109);
+ KILL(sail_int)(&zgsz3108);
+ KILL(lbits)(&zgsz3107);
+ }
+ struct zEncCapability zgsz3111;
+ zgsz3111.zB = zgaz324;
+ zgsz3111.zT = zgaz323;
+ zgsz3111.zaddress = zgaz325;
+ zgsz3111.zflags = zgaz320;
+ zgsz3111.zinternal_E = zgaz322;
+ zgsz3111.zotype = zgaz321;
+ zgsz3111.zperms = zgaz319;
+ zgsz3111.zreserved = UINT64_C(0);
+ zcbz332 = zgsz3111;
+
+
+
+
+
+
+
+
+end_function_124: ;
+ return zcbz332;
+end_block_exception_125: ;
+ struct zEncCapability zcbz359 = { .zreserved = UINT64_C(0xdeadc0de), .zperms = UINT64_C(0xdeadc0de), .zotype = UINT64_C(0xdeadc0de), .zinternal_E = UINT64_C(0), .zflags = UINT64_C(0xdeadc0de), .zaddress = UINT64_C(0xdeadc0de), .zT = UINT64_C(0xdeadc0de), .zB = UINT64_C(0xdeadc0de) };
+ return zcbz359;
+}
+
+static uint64_t sailgen_encCapToBits(struct zEncCapability);
+
+static uint64_t sailgen_encCapToBits(struct zEncCapability zcap)
+{
+ __label__ end_function_127, end_block_exception_128;
+
+ uint64_t zcbz333;
+ uint64_t zgaz339;
+ zgaz339 = zcap.zperms;
+ uint64_t zgaz340;
+ {
+ uint64_t zgaz337;
+ zgaz337 = zcap.zreserved;
+ uint64_t zgaz338;
+ {
+ uint64_t zgaz335;
+ zgaz335 = zcap.zflags;
+ uint64_t zgaz336;
+ {
+ uint64_t zgaz333;
+ zgaz333 = zcap.zotype;
+ uint64_t zgaz334;
+ {
+ uint64_t zgaz331;
+ {
+ fbits zgaz326;
+ zgaz326 = zcap.zinternal_E;
+ uint64_t zgsz3112;
+ zgsz3112 = UINT64_C(0b0);
+ zgsz3112 = update_fbits(zgsz3112, INT64_C(0), zgaz326);
+ zgaz331 = zgsz3112;
+
+ }
+ uint64_t zgaz332;
+ {
+ uint64_t zgaz329;
+ zgaz329 = zcap.zT;
+ uint64_t zgaz330;
+ {
+ uint64_t zgaz327;
+ zgaz327 = zcap.zB;
+ uint64_t zgaz328;
+ zgaz328 = zcap.zaddress;
+ {
+ lbits zgsz3113;
+ CREATE(lbits)(&zgsz3113);
+ CONVERT_OF(lbits, fbits)(&zgsz3113, zgaz327, UINT64_C(8) , true);
+ lbits zgsz3114;
+ CREATE(lbits)(&zgsz3114);
+ CONVERT_OF(lbits, fbits)(&zgsz3114, zgaz328, UINT64_C(32) , true);
+ lbits zgsz3115;
+ CREATE(lbits)(&zgsz3115);
+ append(&zgsz3115, zgsz3113, zgsz3114);
+ zgaz330 = CONVERT_OF(fbits, lbits)(zgsz3115, true);
+ KILL(lbits)(&zgsz3115);
+ KILL(lbits)(&zgsz3114);
+ KILL(lbits)(&zgsz3113);
+ }
+
+
+ }
+ {
+ lbits zgsz3116;
+ CREATE(lbits)(&zgsz3116);
+ CONVERT_OF(lbits, fbits)(&zgsz3116, zgaz329, UINT64_C(6) , true);
+ lbits zgsz3117;
+ CREATE(lbits)(&zgsz3117);
+ CONVERT_OF(lbits, fbits)(&zgsz3117, zgaz330, UINT64_C(40) , true);
+ lbits zgsz3118;
+ CREATE(lbits)(&zgsz3118);
+ append(&zgsz3118, zgsz3116, zgsz3117);
+ zgaz332 = CONVERT_OF(fbits, lbits)(zgsz3118, true);
+ KILL(lbits)(&zgsz3118);
+ KILL(lbits)(&zgsz3117);
+ KILL(lbits)(&zgsz3116);
+ }
+
+
+ }
+ {
+ lbits zgsz3119;
+ CREATE(lbits)(&zgsz3119);
+ CONVERT_OF(lbits, fbits)(&zgsz3119, zgaz331, UINT64_C(1) , true);
+ lbits zgsz3120;
+ CREATE(lbits)(&zgsz3120);
+ CONVERT_OF(lbits, fbits)(&zgsz3120, zgaz332, UINT64_C(46) , true);
+ lbits zgsz3121;
+ CREATE(lbits)(&zgsz3121);
+ append(&zgsz3121, zgsz3119, zgsz3120);
+ zgaz334 = CONVERT_OF(fbits, lbits)(zgsz3121, true);
+ KILL(lbits)(&zgsz3121);
+ KILL(lbits)(&zgsz3120);
+ KILL(lbits)(&zgsz3119);
+ }
+
+
+ }
+ {
+ lbits zgsz3122;
+ CREATE(lbits)(&zgsz3122);
+ CONVERT_OF(lbits, fbits)(&zgsz3122, zgaz333, UINT64_C(4) , true);
+ lbits zgsz3123;
+ CREATE(lbits)(&zgsz3123);
+ CONVERT_OF(lbits, fbits)(&zgsz3123, zgaz334, UINT64_C(47) , true);
+ lbits zgsz3124;
+ CREATE(lbits)(&zgsz3124);
+ append(&zgsz3124, zgsz3122, zgsz3123);
+ zgaz336 = CONVERT_OF(fbits, lbits)(zgsz3124, true);
+ KILL(lbits)(&zgsz3124);
+ KILL(lbits)(&zgsz3123);
+ KILL(lbits)(&zgsz3122);
+ }
+
+
+ }
+ {
+ lbits zgsz3125;
+ CREATE(lbits)(&zgsz3125);
+ CONVERT_OF(lbits, fbits)(&zgsz3125, zgaz335, UINT64_C(1) , true);
+ lbits zgsz3126;
+ CREATE(lbits)(&zgsz3126);
+ CONVERT_OF(lbits, fbits)(&zgsz3126, zgaz336, UINT64_C(51) , true);
+ lbits zgsz3127;
+ CREATE(lbits)(&zgsz3127);
+ append(&zgsz3127, zgsz3125, zgsz3126);
+ zgaz338 = CONVERT_OF(fbits, lbits)(zgsz3127, true);
+ KILL(lbits)(&zgsz3127);
+ KILL(lbits)(&zgsz3126);
+ KILL(lbits)(&zgsz3125);
+ }
+
+
+ }
+ {
+ lbits zgsz3128;
+ CREATE(lbits)(&zgsz3128);
+ CONVERT_OF(lbits, fbits)(&zgsz3128, zgaz337, UINT64_C(0) , true);
+ lbits zgsz3129;
+ CREATE(lbits)(&zgsz3129);
+ CONVERT_OF(lbits, fbits)(&zgsz3129, zgaz338, UINT64_C(52) , true);
+ lbits zgsz3130;
+ CREATE(lbits)(&zgsz3130);
+ append(&zgsz3130, zgsz3128, zgsz3129);
+ zgaz340 = CONVERT_OF(fbits, lbits)(zgsz3130, true);
+ KILL(lbits)(&zgsz3130);
+ KILL(lbits)(&zgsz3129);
+ KILL(lbits)(&zgsz3128);
+ }
+
+
+ }
+ {
+ lbits zgsz3131;
+ CREATE(lbits)(&zgsz3131);
+ CONVERT_OF(lbits, fbits)(&zgsz3131, zgaz339, UINT64_C(12) , true);
+ lbits zgsz3132;
+ CREATE(lbits)(&zgsz3132);
+ CONVERT_OF(lbits, fbits)(&zgsz3132, zgaz340, UINT64_C(52) , true);
+ lbits zgsz3133;
+ CREATE(lbits)(&zgsz3133);
+ append(&zgsz3133, zgsz3131, zgsz3132);
+ zcbz333 = CONVERT_OF(fbits, lbits)(zgsz3133, true);
+ KILL(lbits)(&zgsz3133);
+ KILL(lbits)(&zgsz3132);
+ KILL(lbits)(&zgsz3131);
+ }
+
+
+end_function_127: ;
+ return zcbz333;
+end_block_exception_128: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static int64_t zcap_max_addr;
+static void create_letbind_18(void) {
+
+
+ int64_t zgsz3134;
+ zgsz3134 = sailgen_zzzz7nzzJzzK32z3MAX(zcap_addr_width);
+ zcap_max_addr = zgsz3134;
+
+let_end_129: ;
+}
+static void kill_letbind_18(void) {
+}
+
+static int64_t zcap_max_otype;
+static void create_letbind_19(void) {
+
+
+ int64_t zgsz3135;
+ int64_t zgaz341;
+ zgaz341 = sailgen_zzzz7nzzJzzK4z3MAX(zcap_otype_width);
+ {
+ sail_int zgsz3136;
+ CREATE(sail_int)(&zgsz3136);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3136, zgaz341);
+ sail_int zgsz3137;
+ CREATE(sail_int)(&zgsz3137);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3137, zreserved_otypes);
+ sail_int zgsz3138;
+ CREATE(sail_int)(&zgsz3138);
+ sub_int(&zgsz3138, zgsz3136, zgsz3137);
+ zgsz3135 = CONVERT_OF(mach_int, sail_int)(zgsz3138);
+ KILL(sail_int)(&zgsz3138);
+ KILL(sail_int)(&zgsz3137);
+ KILL(sail_int)(&zgsz3136);
+ }
+
+ zcap_max_otype = zgsz3135;
+
+let_end_130: ;
+}
+static void kill_letbind_19(void) {
+}
+
+static int64_t zcap_uperms_shift;
+static void create_letbind_20(void) {
+
+
+ int64_t zgsz3139;
+ zgsz3139 = INT64_C(15);
+ zcap_uperms_shift = zgsz3139;
+
+let_end_131: ;
+}
+static void kill_letbind_20(void) {
+}
+
+static int64_t zcap_perms_width;
+static void create_letbind_21(void) {
+
+
+ int64_t zgsz3140;
+ {
+ sail_int zgsz3141;
+ CREATE(sail_int)(&zgsz3141);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3141, INT64_C(15));
+ sail_int zgsz3142;
+ CREATE(sail_int)(&zgsz3142);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3142, INT64_C(0));
+ sail_int zgsz3143;
+ CREATE(sail_int)(&zgsz3143);
+ add_int(&zgsz3143, zgsz3141, zgsz3142);
+ zgsz3140 = CONVERT_OF(mach_int, sail_int)(zgsz3143);
+ KILL(sail_int)(&zgsz3143);
+ KILL(sail_int)(&zgsz3142);
+ KILL(sail_int)(&zgsz3141);
+ }
+ zcap_perms_width = zgsz3140;
+
+let_end_132: ;
+}
+static void kill_letbind_21(void) {
+}
+
+static int64_t zcap_max_E;
+static void create_letbind_22(void) {
+
+
+ int64_t zgsz3147;
+ int64_t zgaz342;
+ {
+ sail_int zgsz3144;
+ CREATE(sail_int)(&zgsz3144);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3144, zcap_len_width);
+ sail_int zgsz3145;
+ CREATE(sail_int)(&zgsz3145);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3145, zcap_mantissa_width);
+ sail_int zgsz3146;
+ CREATE(sail_int)(&zgsz3146);
+ sub_int(&zgsz3146, zgsz3144, zgsz3145);
+ zgaz342 = CONVERT_OF(mach_int, sail_int)(zgsz3146);
+ KILL(sail_int)(&zgsz3146);
+ KILL(sail_int)(&zgsz3145);
+ KILL(sail_int)(&zgsz3144);
+ }
+ {
+ sail_int zgsz3148;
+ CREATE(sail_int)(&zgsz3148);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3148, zgaz342);
+ sail_int zgsz3149;
+ CREATE(sail_int)(&zgsz3149);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3149, INT64_C(1));
+ sail_int zgsz3150;
+ CREATE(sail_int)(&zgsz3150);
+ add_int(&zgsz3150, zgsz3148, zgsz3149);
+ zgsz3147 = CONVERT_OF(mach_int, sail_int)(zgsz3150);
+ KILL(sail_int)(&zgsz3150);
+ KILL(sail_int)(&zgsz3149);
+ KILL(sail_int)(&zgsz3148);
+ }
+
+ zcap_max_E = zgsz3147;
+
+let_end_133: ;
+}
+static void kill_letbind_22(void) {
+}
+
+static uint64_t zcap_reset_E;
+static void create_letbind_23(void) {
+
+
+ uint64_t zgsz3151;
+ {
+ sail_int zgsz3152;
+ CREATE(sail_int)(&zgsz3152);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3152, zcap_E_width);
+ sail_int zgsz3153;
+ CREATE(sail_int)(&zgsz3153);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3153, zcap_max_E);
+ lbits zgsz3154;
+ CREATE(lbits)(&zgsz3154);
+ sailgen_to_bits(&zgsz3154, zgsz3152, zgsz3153);
+ zgsz3151 = CONVERT_OF(fbits, lbits)(zgsz3154, true);
+ KILL(lbits)(&zgsz3154);
+ KILL(sail_int)(&zgsz3153);
+ KILL(sail_int)(&zgsz3152);
+ }
+ zcap_reset_E = zgsz3151;
+
+let_end_134: ;
+}
+static void kill_letbind_23(void) {
+}
+
+static uint64_t zcap_reset_T;
+static void create_letbind_24(void) {
+
+
+ uint64_t zgsz3158;
+ uint64_t zgaz344;
+ {
+ int64_t zgaz343;
+ {
+ sail_int zgsz3155;
+ CREATE(sail_int)(&zgsz3155);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3155, zcap_mantissa_width);
+ sail_int zgsz3156;
+ CREATE(sail_int)(&zgsz3156);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3156, INT64_C(2));
+ sail_int zgsz3157;
+ CREATE(sail_int)(&zgsz3157);
+ sub_int(&zgsz3157, zgsz3155, zgsz3156);
+ zgaz343 = CONVERT_OF(mach_int, sail_int)(zgsz3157);
+ KILL(sail_int)(&zgsz3157);
+ KILL(sail_int)(&zgsz3156);
+ KILL(sail_int)(&zgsz3155);
+ }
+ zgaz344 = sailgen_zzzz7nzzJzzK6z3zzeros_implicit(zgaz343);
+
+ }
+ {
+ lbits zgsz3159;
+ CREATE(lbits)(&zgsz3159);
+ CONVERT_OF(lbits, fbits)(&zgsz3159, UINT64_C(0b01), UINT64_C(2) , true);
+ lbits zgsz3160;
+ CREATE(lbits)(&zgsz3160);
+ CONVERT_OF(lbits, fbits)(&zgsz3160, zgaz344, UINT64_C(6) , true);
+ lbits zgsz3161;
+ CREATE(lbits)(&zgsz3161);
+ append(&zgsz3161, zgsz3159, zgsz3160);
+ zgsz3158 = CONVERT_OF(fbits, lbits)(zgsz3161, true);
+ KILL(lbits)(&zgsz3161);
+ KILL(lbits)(&zgsz3160);
+ KILL(lbits)(&zgsz3159);
+ }
+
+ zcap_reset_T = zgsz3158;
+
+let_end_135: ;
+}
+static void kill_letbind_24(void) {
+}
+
+static struct zCapability sailgen_undefined_Capability(unit);
+
+static struct zCapability sailgen_undefined_Capability(unit zgsz3162)
+{
+ __label__ end_function_137, end_block_exception_138;
+
+ struct zCapability zcbz334;
+ bool zgaz345;
+ zgaz345 = undefined_bool(UNIT);
+ uint64_t zgaz346;
+ {
+ sail_int zgsz3163;
+ CREATE(sail_int)(&zgsz3163);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3163, INT64_C(0));
+ lbits zgsz3164;
+ CREATE(lbits)(&zgsz3164);
+ UNDEFINED(lbits)(&zgsz3164, zgsz3163);
+ zgaz346 = CONVERT_OF(fbits, lbits)(zgsz3164, true);
+ KILL(lbits)(&zgsz3164);
+ KILL(sail_int)(&zgsz3163);
+ }
+ bool zgaz347;
+ zgaz347 = undefined_bool(UNIT);
+ bool zgaz348;
+ zgaz348 = undefined_bool(UNIT);
+ bool zgaz349;
+ zgaz349 = undefined_bool(UNIT);
+ bool zgaz350;
+ zgaz350 = undefined_bool(UNIT);
+ bool zgaz351;
+ zgaz351 = undefined_bool(UNIT);
+ bool zgaz352;
+ zgaz352 = undefined_bool(UNIT);
+ bool zgaz353;
+ zgaz353 = undefined_bool(UNIT);
+ bool zgaz354;
+ zgaz354 = undefined_bool(UNIT);
+ bool zgaz355;
+ zgaz355 = undefined_bool(UNIT);
+ bool zgaz356;
+ zgaz356 = undefined_bool(UNIT);
+ bool zgaz357;
+ zgaz357 = undefined_bool(UNIT);
+ bool zgaz358;
+ zgaz358 = undefined_bool(UNIT);
+ uint64_t zgaz359;
+ {
+ sail_int zgsz3165;
+ CREATE(sail_int)(&zgsz3165);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3165, INT64_C(0));
+ lbits zgsz3166;
+ CREATE(lbits)(&zgsz3166);
+ UNDEFINED(lbits)(&zgsz3166, zgsz3165);
+ zgaz359 = CONVERT_OF(fbits, lbits)(zgsz3166, true);
+ KILL(lbits)(&zgsz3166);
+ KILL(sail_int)(&zgsz3165);
+ }
+ bool zgaz360;
+ zgaz360 = undefined_bool(UNIT);
+ bool zgaz361;
+ zgaz361 = undefined_bool(UNIT);
+ uint64_t zgaz362;
+ {
+ sail_int zgsz3167;
+ CREATE(sail_int)(&zgsz3167);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3167, INT64_C(6));
+ lbits zgsz3168;
+ CREATE(lbits)(&zgsz3168);
+ UNDEFINED(lbits)(&zgsz3168, zgsz3167);
+ zgaz362 = CONVERT_OF(fbits, lbits)(zgsz3168, true);
+ KILL(lbits)(&zgsz3168);
+ KILL(sail_int)(&zgsz3167);
+ }
+ uint64_t zgaz363;
+ {
+ sail_int zgsz3169;
+ CREATE(sail_int)(&zgsz3169);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3169, INT64_C(8));
+ lbits zgsz3170;
+ CREATE(lbits)(&zgsz3170);
+ UNDEFINED(lbits)(&zgsz3170, zgsz3169);
+ zgaz363 = CONVERT_OF(fbits, lbits)(zgsz3170, true);
+ KILL(lbits)(&zgsz3170);
+ KILL(sail_int)(&zgsz3169);
+ }
+ uint64_t zgaz364;
+ {
+ sail_int zgsz3171;
+ CREATE(sail_int)(&zgsz3171);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3171, INT64_C(8));
+ lbits zgsz3172;
+ CREATE(lbits)(&zgsz3172);
+ UNDEFINED(lbits)(&zgsz3172, zgsz3171);
+ zgaz364 = CONVERT_OF(fbits, lbits)(zgsz3172, true);
+ KILL(lbits)(&zgsz3172);
+ KILL(sail_int)(&zgsz3171);
+ }
+ uint64_t zgaz365;
+ {
+ sail_int zgsz3173;
+ CREATE(sail_int)(&zgsz3173);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3173, INT64_C(4));
+ lbits zgsz3174;
+ CREATE(lbits)(&zgsz3174);
+ UNDEFINED(lbits)(&zgsz3174, zgsz3173);
+ zgaz365 = CONVERT_OF(fbits, lbits)(zgsz3174, true);
+ KILL(lbits)(&zgsz3174);
+ KILL(sail_int)(&zgsz3173);
+ }
+ uint64_t zgaz366;
+ {
+ sail_int zgsz3175;
+ CREATE(sail_int)(&zgsz3175);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3175, INT64_C(32));
+ lbits zgsz3176;
+ CREATE(lbits)(&zgsz3176);
+ UNDEFINED(lbits)(&zgsz3176, zgsz3175);
+ zgaz366 = CONVERT_OF(fbits, lbits)(zgsz3176, true);
+ KILL(lbits)(&zgsz3176);
+ KILL(sail_int)(&zgsz3175);
+ }
+ struct zCapability zgsz3177;
+ zgsz3177.zB = zgaz363;
+ zgsz3177.zE = zgaz362;
+ zgsz3177.zT = zgaz364;
+ zgsz3177.zaccess_system_regs = zgaz348;
+ zgsz3177.zaddress = zgaz366;
+ zgsz3177.zflag_cap_mode = zgaz360;
+ zgsz3177.zglobal = zgaz358;
+ zgsz3177.zinternal_E = zgaz361;
+ zgsz3177.zotype = zgaz365;
+ zgsz3177.zpermit_cinvoke = zgaz350;
+ zgsz3177.zpermit_execute = zgaz357;
+ zgsz3177.zpermit_load = zgaz356;
+ zgsz3177.zpermit_load_cap = zgaz354;
+ zgsz3177.zpermit_seal = zgaz351;
+ zgsz3177.zpermit_set_CID = zgaz347;
+ zgsz3177.zpermit_store = zgaz355;
+ zgsz3177.zpermit_store_cap = zgaz353;
+ zgsz3177.zpermit_store_local_cap = zgaz352;
+ zgsz3177.zpermit_unseal = zgaz349;
+ zgsz3177.zreserved = zgaz359;
+ zgsz3177.ztag = zgaz345;
+ zgsz3177.zuperms = zgaz346;
+ zcbz334 = zgsz3177;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+end_function_137: ;
+ return zcbz334;
+end_block_exception_138: ;
+ struct zCapability zcbz360 = { .zuperms = UINT64_C(0xdeadc0de), .ztag = false, .zreserved = UINT64_C(0xdeadc0de), .zpermit_unseal = false, .zpermit_store_local_cap = false, .zpermit_store_cap = false, .zpermit_store = false, .zpermit_set_CID = false, .zpermit_seal = false, .zpermit_load_cap = false, .zpermit_load = false, .zpermit_execute = false, .zpermit_cinvoke = false, .zotype = UINT64_C(0xdeadc0de), .zinternal_E = false, .zglobal = false, .zflag_cap_mode = false, .zaddress = UINT64_C(0xdeadc0de), .zaccess_system_regs = false, .zT = UINT64_C(0xdeadc0de), .zE = UINT64_C(0xdeadc0de), .zB = UINT64_C(0xdeadc0de) };
+ return zcbz360;
+}
+
+static struct zCapability znull_cap;
+static void create_letbind_25(void) {
+
+
+ struct zCapability zgsz3182;
+ uint64_t zgaz367;
+ zgaz367 = sailgen_zzzz7nzzJzzK0z3zzeros_implicit(INT64_C(0));
+ uint64_t zgaz368;
+ zgaz368 = sailgen_zzzz7nzzJzzK0z3zzeros_implicit(INT64_C(0));
+ uint64_t zgaz369;
+ zgaz369 = sailgen_zzzz7nzzJzzK8z3zzeros_implicit(INT64_C(8));
+ uint64_t zgaz370;
+ {
+ sail_int zgsz3178;
+ CREATE(sail_int)(&zgsz3178);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3178, zcap_otype_width);
+ sail_int zgsz3179;
+ CREATE(sail_int)(&zgsz3179);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3179, zotype_unsealed);
+ lbits zgsz3180;
+ CREATE(lbits)(&zgsz3180);
+ sailgen_to_bits(&zgsz3180, zgsz3178, zgsz3179);
+ zgaz370 = CONVERT_OF(fbits, lbits)(zgsz3180, true);
+ KILL(lbits)(&zgsz3180);
+ KILL(sail_int)(&zgsz3179);
+ KILL(sail_int)(&zgsz3178);
+ }
+ uint64_t zgaz371;
+ zgaz371 = sailgen_zzzz7nzzJzzK32z3zzeros_implicit(INT64_C(32));
+ struct zCapability zgsz3181;
+ zgsz3181.zB = zgaz369;
+ zgsz3181.zE = zcap_reset_E;
+ zgsz3181.zT = zcap_reset_T;
+ zgsz3181.zaccess_system_regs = false;
+ zgsz3181.zaddress = zgaz371;
+ zgsz3181.zflag_cap_mode = false;
+ zgsz3181.zglobal = false;
+ zgsz3181.zinternal_E = true;
+ zgsz3181.zotype = zgaz370;
+ zgsz3181.zpermit_cinvoke = false;
+ zgsz3181.zpermit_execute = false;
+ zgsz3181.zpermit_load = false;
+ zgsz3181.zpermit_load_cap = false;
+ zgsz3181.zpermit_seal = false;
+ zgsz3181.zpermit_set_CID = false;
+ zgsz3181.zpermit_store = false;
+ zgsz3181.zpermit_store_cap = false;
+ zgsz3181.zpermit_store_local_cap = false;
+ zgsz3181.zpermit_unseal = false;
+ zgsz3181.zreserved = zgaz368;
+ zgsz3181.ztag = false;
+ zgsz3181.zuperms = zgaz367;
+ zgsz3182 = zgsz3181;
+
+
+
+
+
+
+ znull_cap = zgsz3182;
+
+let_end_139: ;
+}
+static void kill_letbind_25(void) {
+}
+
+static struct zCapability zdefault_cap;
+static void create_letbind_26(void) {
+
+
+ struct zCapability zgsz3187;
+ uint64_t zgaz372;
+ zgaz372 = sailgen_zzzz7nzzJzzK0z3ones(INT64_C(0));
+ uint64_t zgaz373;
+ zgaz373 = sailgen_zzzz7nzzJzzK0z3zzeros_implicit(INT64_C(0));
+ uint64_t zgaz374;
+ zgaz374 = sailgen_zzzz7nzzJzzK8z3zzeros_implicit(INT64_C(8));
+ uint64_t zgaz375;
+ {
+ sail_int zgsz3183;
+ CREATE(sail_int)(&zgsz3183);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3183, zcap_otype_width);
+ sail_int zgsz3184;
+ CREATE(sail_int)(&zgsz3184);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3184, zotype_unsealed);
+ lbits zgsz3185;
+ CREATE(lbits)(&zgsz3185);
+ sailgen_to_bits(&zgsz3185, zgsz3183, zgsz3184);
+ zgaz375 = CONVERT_OF(fbits, lbits)(zgsz3185, true);
+ KILL(lbits)(&zgsz3185);
+ KILL(sail_int)(&zgsz3184);
+ KILL(sail_int)(&zgsz3183);
+ }
+ uint64_t zgaz376;
+ zgaz376 = sailgen_zzzz7nzzJzzK32z3zzeros_implicit(INT64_C(32));
+ struct zCapability zgsz3186;
+ zgsz3186.zB = zgaz374;
+ zgsz3186.zE = zcap_reset_E;
+ zgsz3186.zT = zcap_reset_T;
+ zgsz3186.zaccess_system_regs = true;
+ zgsz3186.zaddress = zgaz376;
+ zgsz3186.zflag_cap_mode = false;
+ zgsz3186.zglobal = true;
+ zgsz3186.zinternal_E = true;
+ zgsz3186.zotype = zgaz375;
+ zgsz3186.zpermit_cinvoke = true;
+ zgsz3186.zpermit_execute = true;
+ zgsz3186.zpermit_load = true;
+ zgsz3186.zpermit_load_cap = true;
+ zgsz3186.zpermit_seal = true;
+ zgsz3186.zpermit_set_CID = true;
+ zgsz3186.zpermit_store = true;
+ zgsz3186.zpermit_store_cap = true;
+ zgsz3186.zpermit_store_local_cap = true;
+ zgsz3186.zpermit_unseal = true;
+ zgsz3186.zreserved = zgaz373;
+ zgsz3186.ztag = true;
+ zgsz3186.zuperms = zgaz372;
+ zgsz3187 = zgsz3186;
+
+
+
+
+
+
+ zdefault_cap = zgsz3187;
+
+let_end_140: ;
+}
+static void kill_letbind_26(void) {
+}
+
+static uint64_t sailgen_getCapHardPerms(struct zCapability);
+
+static uint64_t sailgen_getCapHardPerms(struct zCapability zcap)
+{
+ __label__ end_function_142, end_block_exception_143;
+
+ uint64_t zcbz335;
+ uint64_t zgaz3109;
+ {
+ bool zgaz377;
+ zgaz377 = zcap.zpermit_set_CID;
+ zgaz3109 = sailgen_bool_to_bits(zgaz377);
+
+ }
+ uint64_t zgaz3110;
+ {
+ uint64_t zgaz3107;
+ {
+ bool zgaz378;
+ zgaz378 = zcap.zaccess_system_regs;
+ zgaz3107 = sailgen_bool_to_bits(zgaz378);
+
+ }
+ uint64_t zgaz3108;
+ {
+ uint64_t zgaz3105;
+ {
+ bool zgaz379;
+ zgaz379 = zcap.zpermit_unseal;
+ zgaz3105 = sailgen_bool_to_bits(zgaz379);
+
+ }
+ uint64_t zgaz3106;
+ {
+ uint64_t zgaz3103;
+ {
+ bool zgaz380;
+ zgaz380 = zcap.zpermit_cinvoke;
+ zgaz3103 = sailgen_bool_to_bits(zgaz380);
+
+ }
+ uint64_t zgaz3104;
+ {
+ uint64_t zgaz3101;
+ {
+ bool zgaz381;
+ zgaz381 = zcap.zpermit_seal;
+ zgaz3101 = sailgen_bool_to_bits(zgaz381);
+
+ }
+ uint64_t zgaz3102;
+ {
+ uint64_t zgaz399;
+ {
+ bool zgaz382;
+ zgaz382 = zcap.zpermit_store_local_cap;
+ zgaz399 = sailgen_bool_to_bits(zgaz382);
+
+ }
+ uint64_t zgaz3100;
+ {
+ uint64_t zgaz397;
+ {
+ bool zgaz383;
+ zgaz383 = zcap.zpermit_store_cap;
+ zgaz397 = sailgen_bool_to_bits(zgaz383);
+
+ }
+ uint64_t zgaz398;
+ {
+ uint64_t zgaz395;
+ {
+ bool zgaz384;
+ zgaz384 = zcap.zpermit_load_cap;
+ zgaz395 = sailgen_bool_to_bits(zgaz384);
+
+ }
+ uint64_t zgaz396;
+ {
+ uint64_t zgaz393;
+ {
+ bool zgaz385;
+ zgaz385 = zcap.zpermit_store;
+ zgaz393 = sailgen_bool_to_bits(zgaz385);
+
+ }
+ uint64_t zgaz394;
+ {
+ uint64_t zgaz391;
+ {
+ bool zgaz386;
+ zgaz386 = zcap.zpermit_load;
+ zgaz391 = sailgen_bool_to_bits(zgaz386);
+
+ }
+ uint64_t zgaz392;
+ {
+ uint64_t zgaz389;
+ {
+ bool zgaz387;
+ zgaz387 = zcap.zpermit_execute;
+ zgaz389 = sailgen_bool_to_bits(zgaz387);
+
+ }
+ uint64_t zgaz390;
+ {
+ bool zgaz388;
+ zgaz388 = zcap.zglobal;
+ zgaz390 = sailgen_bool_to_bits(zgaz388);
+
+ }
+ {
+ lbits zgsz3188;
+ CREATE(lbits)(&zgsz3188);
+ CONVERT_OF(lbits, fbits)(&zgsz3188, zgaz389, UINT64_C(1) , true);
+ lbits zgsz3189;
+ CREATE(lbits)(&zgsz3189);
+ CONVERT_OF(lbits, fbits)(&zgsz3189, zgaz390, UINT64_C(1) , true);
+ lbits zgsz3190;
+ CREATE(lbits)(&zgsz3190);
+ append(&zgsz3190, zgsz3188, zgsz3189);
+ zgaz392 = CONVERT_OF(fbits, lbits)(zgsz3190, true);
+ KILL(lbits)(&zgsz3190);
+ KILL(lbits)(&zgsz3189);
+ KILL(lbits)(&zgsz3188);
+ }
+
+
+ }
+ {
+ lbits zgsz3191;
+ CREATE(lbits)(&zgsz3191);
+ CONVERT_OF(lbits, fbits)(&zgsz3191, zgaz391, UINT64_C(1) , true);
+ lbits zgsz3192;
+ CREATE(lbits)(&zgsz3192);
+ CONVERT_OF(lbits, fbits)(&zgsz3192, zgaz392, UINT64_C(2) , true);
+ lbits zgsz3193;
+ CREATE(lbits)(&zgsz3193);
+ append(&zgsz3193, zgsz3191, zgsz3192);
+ zgaz394 = CONVERT_OF(fbits, lbits)(zgsz3193, true);
+ KILL(lbits)(&zgsz3193);
+ KILL(lbits)(&zgsz3192);
+ KILL(lbits)(&zgsz3191);
+ }
+
+
+ }
+ {
+ lbits zgsz3194;
+ CREATE(lbits)(&zgsz3194);
+ CONVERT_OF(lbits, fbits)(&zgsz3194, zgaz393, UINT64_C(1) , true);
+ lbits zgsz3195;
+ CREATE(lbits)(&zgsz3195);
+ CONVERT_OF(lbits, fbits)(&zgsz3195, zgaz394, UINT64_C(3) , true);
+ lbits zgsz3196;
+ CREATE(lbits)(&zgsz3196);
+ append(&zgsz3196, zgsz3194, zgsz3195);
+ zgaz396 = CONVERT_OF(fbits, lbits)(zgsz3196, true);
+ KILL(lbits)(&zgsz3196);
+ KILL(lbits)(&zgsz3195);
+ KILL(lbits)(&zgsz3194);
+ }
+
+
+ }
+ {
+ lbits zgsz3197;
+ CREATE(lbits)(&zgsz3197);
+ CONVERT_OF(lbits, fbits)(&zgsz3197, zgaz395, UINT64_C(1) , true);
+ lbits zgsz3198;
+ CREATE(lbits)(&zgsz3198);
+ CONVERT_OF(lbits, fbits)(&zgsz3198, zgaz396, UINT64_C(4) , true);
+ lbits zgsz3199;
+ CREATE(lbits)(&zgsz3199);
+ append(&zgsz3199, zgsz3197, zgsz3198);
+ zgaz398 = CONVERT_OF(fbits, lbits)(zgsz3199, true);
+ KILL(lbits)(&zgsz3199);
+ KILL(lbits)(&zgsz3198);
+ KILL(lbits)(&zgsz3197);
+ }
+
+
+ }
+ {
+ lbits zgsz3200;
+ CREATE(lbits)(&zgsz3200);
+ CONVERT_OF(lbits, fbits)(&zgsz3200, zgaz397, UINT64_C(1) , true);
+ lbits zgsz3201;
+ CREATE(lbits)(&zgsz3201);
+ CONVERT_OF(lbits, fbits)(&zgsz3201, zgaz398, UINT64_C(5) , true);
+ lbits zgsz3202;
+ CREATE(lbits)(&zgsz3202);
+ append(&zgsz3202, zgsz3200, zgsz3201);
+ zgaz3100 = CONVERT_OF(fbits, lbits)(zgsz3202, true);
+ KILL(lbits)(&zgsz3202);
+ KILL(lbits)(&zgsz3201);
+ KILL(lbits)(&zgsz3200);
+ }
+
+
+ }
+ {
+ lbits zgsz3203;
+ CREATE(lbits)(&zgsz3203);
+ CONVERT_OF(lbits, fbits)(&zgsz3203, zgaz399, UINT64_C(1) , true);
+ lbits zgsz3204;
+ CREATE(lbits)(&zgsz3204);
+ CONVERT_OF(lbits, fbits)(&zgsz3204, zgaz3100, UINT64_C(6) , true);
+ lbits zgsz3205;
+ CREATE(lbits)(&zgsz3205);
+ append(&zgsz3205, zgsz3203, zgsz3204);
+ zgaz3102 = CONVERT_OF(fbits, lbits)(zgsz3205, true);
+ KILL(lbits)(&zgsz3205);
+ KILL(lbits)(&zgsz3204);
+ KILL(lbits)(&zgsz3203);
+ }
+
+
+ }
+ {
+ lbits zgsz3206;
+ CREATE(lbits)(&zgsz3206);
+ CONVERT_OF(lbits, fbits)(&zgsz3206, zgaz3101, UINT64_C(1) , true);
+ lbits zgsz3207;
+ CREATE(lbits)(&zgsz3207);
+ CONVERT_OF(lbits, fbits)(&zgsz3207, zgaz3102, UINT64_C(7) , true);
+ lbits zgsz3208;
+ CREATE(lbits)(&zgsz3208);
+ append(&zgsz3208, zgsz3206, zgsz3207);
+ zgaz3104 = CONVERT_OF(fbits, lbits)(zgsz3208, true);
+ KILL(lbits)(&zgsz3208);
+ KILL(lbits)(&zgsz3207);
+ KILL(lbits)(&zgsz3206);
+ }
+
+
+ }
+ {
+ lbits zgsz3209;
+ CREATE(lbits)(&zgsz3209);
+ CONVERT_OF(lbits, fbits)(&zgsz3209, zgaz3103, UINT64_C(1) , true);
+ lbits zgsz3210;
+ CREATE(lbits)(&zgsz3210);
+ CONVERT_OF(lbits, fbits)(&zgsz3210, zgaz3104, UINT64_C(8) , true);
+ lbits zgsz3211;
+ CREATE(lbits)(&zgsz3211);
+ append(&zgsz3211, zgsz3209, zgsz3210);
+ zgaz3106 = CONVERT_OF(fbits, lbits)(zgsz3211, true);
+ KILL(lbits)(&zgsz3211);
+ KILL(lbits)(&zgsz3210);
+ KILL(lbits)(&zgsz3209);
+ }
+
+
+ }
+ {
+ lbits zgsz3212;
+ CREATE(lbits)(&zgsz3212);
+ CONVERT_OF(lbits, fbits)(&zgsz3212, zgaz3105, UINT64_C(1) , true);
+ lbits zgsz3213;
+ CREATE(lbits)(&zgsz3213);
+ CONVERT_OF(lbits, fbits)(&zgsz3213, zgaz3106, UINT64_C(9) , true);
+ lbits zgsz3214;
+ CREATE(lbits)(&zgsz3214);
+ append(&zgsz3214, zgsz3212, zgsz3213);
+ zgaz3108 = CONVERT_OF(fbits, lbits)(zgsz3214, true);
+ KILL(lbits)(&zgsz3214);
+ KILL(lbits)(&zgsz3213);
+ KILL(lbits)(&zgsz3212);
+ }
+
+
+ }
+ {
+ lbits zgsz3215;
+ CREATE(lbits)(&zgsz3215);
+ CONVERT_OF(lbits, fbits)(&zgsz3215, zgaz3107, UINT64_C(1) , true);
+ lbits zgsz3216;
+ CREATE(lbits)(&zgsz3216);
+ CONVERT_OF(lbits, fbits)(&zgsz3216, zgaz3108, UINT64_C(10) , true);
+ lbits zgsz3217;
+ CREATE(lbits)(&zgsz3217);
+ append(&zgsz3217, zgsz3215, zgsz3216);
+ zgaz3110 = CONVERT_OF(fbits, lbits)(zgsz3217, true);
+ KILL(lbits)(&zgsz3217);
+ KILL(lbits)(&zgsz3216);
+ KILL(lbits)(&zgsz3215);
+ }
+
+
+ }
+ {
+ lbits zgsz3218;
+ CREATE(lbits)(&zgsz3218);
+ CONVERT_OF(lbits, fbits)(&zgsz3218, zgaz3109, UINT64_C(1) , true);
+ lbits zgsz3219;
+ CREATE(lbits)(&zgsz3219);
+ CONVERT_OF(lbits, fbits)(&zgsz3219, zgaz3110, UINT64_C(11) , true);
+ lbits zgsz3220;
+ CREATE(lbits)(&zgsz3220);
+ append(&zgsz3220, zgsz3218, zgsz3219);
+ zcbz335 = CONVERT_OF(fbits, lbits)(zgsz3220, true);
+ KILL(lbits)(&zgsz3220);
+ KILL(lbits)(&zgsz3219);
+ KILL(lbits)(&zgsz3218);
+ }
+
+
+end_function_142: ;
+ return zcbz335;
+end_block_exception_143: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static struct zCapability sailgen_encCapabilityToCapability(bool, struct zEncCapability);
+
+static struct zCapability sailgen_encCapabilityToCapability(bool zt, struct zEncCapability zc)
+{
+ __label__ cleanup_146, end_cleanup_147, end_function_145, end_block_exception_148;
+
+ struct zCapability zcbz336;
+ bool zinternal_E;
+ {
+ fbits zgaz3182;
+ zgaz3182 = zc.zinternal_E;
+ zinternal_E = sailgen_bit_to_bool(zgaz3182);
+
+ }
+ uint64_t zE;
+ zE = sailgen_zzzz7nzzJzzK6z3zzeros_implicit(INT64_C(6));
+ uint64_t zBs;
+ zBs = sailgen_zzzz7nzzJzzK8z3zzeros_implicit(INT64_C(8));
+ uint64_t zT;
+ {
+ int64_t zgaz3181;
+ {
+ sail_int zgsz3221;
+ CREATE(sail_int)(&zgsz3221);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3221, INT64_C(8));
+ sail_int zgsz3222;
+ CREATE(sail_int)(&zgsz3222);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3222, INT64_C(2));
+ sail_int zgsz3223;
+ CREATE(sail_int)(&zgsz3223);
+ sub_int(&zgsz3223, zgsz3221, zgsz3222);
+ zgaz3181 = CONVERT_OF(mach_int, sail_int)(zgsz3223);
+ KILL(sail_int)(&zgsz3223);
+ KILL(sail_int)(&zgsz3222);
+ KILL(sail_int)(&zgsz3221);
+ }
+ {
+ sail_int zgsz3224;
+ CREATE(sail_int)(&zgsz3224);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3224, zgaz3181);
+ lbits zgsz3225;
+ CREATE(lbits)(&zgsz3225);
+ sailgen_zzz3zzz3zzeros_implicit(&zgsz3225, zgsz3224);
+ zT = CONVERT_OF(fbits, lbits)(zgsz3225, true);
+ KILL(lbits)(&zgsz3225);
+ KILL(sail_int)(&zgsz3224);
+ }
+
+ }
+ uint64_t zlenMSBs;
+ zlenMSBs = sailgen_zzzz7nzzJzzK2z3zzeros_implicit(INT64_C(2));
+ {
+ unit zgsz3226;
+ if (zinternal_E) {
+ {
+ uint64_t zgaz3115;
+ {
+ uint64_t zgaz3111;
+ zgaz3111 = zc.zT;
+ int64_t zgaz3112;
+ {
+ sail_int zgsz3229;
+ CREATE(sail_int)(&zgsz3229);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3229, zinternal_E_take_bits);
+ sail_int zgsz3230;
+ CREATE(sail_int)(&zgsz3230);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3230, INT64_C(1));
+ sail_int zgsz3231;
+ CREATE(sail_int)(&zgsz3231);
+ sub_int(&zgsz3231, zgsz3229, zgsz3230);
+ zgaz3112 = CONVERT_OF(mach_int, sail_int)(zgsz3231);
+ KILL(sail_int)(&zgsz3231);
+ KILL(sail_int)(&zgsz3230);
+ KILL(sail_int)(&zgsz3229);
+ }
+ {
+ lbits zgsz3232;
+ CREATE(lbits)(&zgsz3232);
+ CONVERT_OF(lbits, fbits)(&zgsz3232, zgaz3111, UINT64_C(6) , true);
+ sail_int zgsz3233;
+ CREATE(sail_int)(&zgsz3233);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3233, zgaz3112);
+ sail_int zgsz3234;
+ CREATE(sail_int)(&zgsz3234);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3234, INT64_C(0));
+ lbits zgsz3235;
+ CREATE(lbits)(&zgsz3235);
+ vector_subrange_lbits(&zgsz3235, zgsz3232, zgsz3233, zgsz3234);
+ zgaz3115 = CONVERT_OF(fbits, lbits)(zgsz3235, true);
+ KILL(lbits)(&zgsz3235);
+ KILL(sail_int)(&zgsz3234);
+ KILL(sail_int)(&zgsz3233);
+ KILL(lbits)(&zgsz3232);
+ }
+
+
+ }
+ uint64_t zgaz3116;
+ {
+ uint64_t zgaz3113;
+ zgaz3113 = zc.zB;
+ int64_t zgaz3114;
+ {
+ sail_int zgsz3236;
+ CREATE(sail_int)(&zgsz3236);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3236, zinternal_E_take_bits);
+ sail_int zgsz3237;
+ CREATE(sail_int)(&zgsz3237);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3237, INT64_C(1));
+ sail_int zgsz3238;
+ CREATE(sail_int)(&zgsz3238);
+ sub_int(&zgsz3238, zgsz3236, zgsz3237);
+ zgaz3114 = CONVERT_OF(mach_int, sail_int)(zgsz3238);
+ KILL(sail_int)(&zgsz3238);
+ KILL(sail_int)(&zgsz3237);
+ KILL(sail_int)(&zgsz3236);
+ }
+ {
+ lbits zgsz3239;
+ CREATE(lbits)(&zgsz3239);
+ CONVERT_OF(lbits, fbits)(&zgsz3239, zgaz3113, UINT64_C(8) , true);
+ sail_int zgsz3240;
+ CREATE(sail_int)(&zgsz3240);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3240, zgaz3114);
+ sail_int zgsz3241;
+ CREATE(sail_int)(&zgsz3241);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3241, INT64_C(0));
+ lbits zgsz3242;
+ CREATE(lbits)(&zgsz3242);
+ vector_subrange_lbits(&zgsz3242, zgsz3239, zgsz3240, zgsz3241);
+ zgaz3116 = CONVERT_OF(fbits, lbits)(zgsz3242, true);
+ KILL(lbits)(&zgsz3242);
+ KILL(sail_int)(&zgsz3241);
+ KILL(sail_int)(&zgsz3240);
+ KILL(lbits)(&zgsz3239);
+ }
+
+
+ }
+ {
+ lbits zgsz3243;
+ CREATE(lbits)(&zgsz3243);
+ CONVERT_OF(lbits, fbits)(&zgsz3243, zgaz3115, UINT64_C(3) , true);
+ lbits zgsz3244;
+ CREATE(lbits)(&zgsz3244);
+ CONVERT_OF(lbits, fbits)(&zgsz3244, zgaz3116, UINT64_C(3) , true);
+ lbits zgsz3245;
+ CREATE(lbits)(&zgsz3245);
+ append(&zgsz3245, zgsz3243, zgsz3244);
+ zE = CONVERT_OF(fbits, lbits)(zgsz3245, true);
+ KILL(lbits)(&zgsz3245);
+ KILL(lbits)(&zgsz3244);
+ KILL(lbits)(&zgsz3243);
+ }
+ unit zgsz3258;
+ zgsz3258 = UNIT;
+
+
+ }
+ {
+ zlenMSBs = UINT64_C(0b01);
+ unit zgsz3257;
+ zgsz3257 = UNIT;
+ }
+ {
+ uint64_t zgaz3119;
+ {
+ uint64_t zgaz3117;
+ zgaz3117 = zc.zT;
+ int64_t zgaz3118;
+ {
+ sail_int zgsz3246;
+ CREATE(sail_int)(&zgsz3246);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3246, zcap_mantissa_width);
+ sail_int zgsz3247;
+ CREATE(sail_int)(&zgsz3247);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3247, INT64_C(3));
+ sail_int zgsz3248;
+ CREATE(sail_int)(&zgsz3248);
+ sub_int(&zgsz3248, zgsz3246, zgsz3247);
+ zgaz3118 = CONVERT_OF(mach_int, sail_int)(zgsz3248);
+ KILL(sail_int)(&zgsz3248);
+ KILL(sail_int)(&zgsz3247);
+ KILL(sail_int)(&zgsz3246);
+ }
+ {
+ lbits zgsz3249;
+ CREATE(lbits)(&zgsz3249);
+ CONVERT_OF(lbits, fbits)(&zgsz3249, zgaz3117, UINT64_C(6) , true);
+ sail_int zgsz3250;
+ CREATE(sail_int)(&zgsz3250);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3250, zgaz3118);
+ sail_int zgsz3251;
+ CREATE(sail_int)(&zgsz3251);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3251, INT64_C(3));
+ lbits zgsz3252;
+ CREATE(lbits)(&zgsz3252);
+ vector_subrange_lbits(&zgsz3252, zgsz3249, zgsz3250, zgsz3251);
+ zgaz3119 = CONVERT_OF(fbits, lbits)(zgsz3252, true);
+ KILL(lbits)(&zgsz3252);
+ KILL(sail_int)(&zgsz3251);
+ KILL(sail_int)(&zgsz3250);
+ KILL(lbits)(&zgsz3249);
+ }
+
+
+ }
+ uint64_t zgaz3120;
+ zgaz3120 = sailgen_zzzz7nzzJzzK3z3zzeros_implicit(zinternal_E_take_bits);
+ {
+ lbits zgsz3253;
+ CREATE(lbits)(&zgsz3253);
+ CONVERT_OF(lbits, fbits)(&zgsz3253, zgaz3119, UINT64_C(3) , true);
+ lbits zgsz3254;
+ CREATE(lbits)(&zgsz3254);
+ CONVERT_OF(lbits, fbits)(&zgsz3254, zgaz3120, UINT64_C(3) , true);
+ lbits zgsz3255;
+ CREATE(lbits)(&zgsz3255);
+ append(&zgsz3255, zgsz3253, zgsz3254);
+ zT = CONVERT_OF(fbits, lbits)(zgsz3255, true);
+ KILL(lbits)(&zgsz3255);
+ KILL(lbits)(&zgsz3254);
+ KILL(lbits)(&zgsz3253);
+ }
+ unit zgsz3256;
+ zgsz3256 = UNIT;
+
+
+ }
+ uint64_t zgaz3123;
+ {
+ uint64_t zgaz3121;
+ zgaz3121 = zc.zB;
+ int64_t zgaz3122;
+ {
+ sail_int zgsz3259;
+ CREATE(sail_int)(&zgsz3259);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3259, zcap_mantissa_width);
+ sail_int zgsz3260;
+ CREATE(sail_int)(&zgsz3260);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3260, INT64_C(1));
+ sail_int zgsz3261;
+ CREATE(sail_int)(&zgsz3261);
+ sub_int(&zgsz3261, zgsz3259, zgsz3260);
+ zgaz3122 = CONVERT_OF(mach_int, sail_int)(zgsz3261);
+ KILL(sail_int)(&zgsz3261);
+ KILL(sail_int)(&zgsz3260);
+ KILL(sail_int)(&zgsz3259);
+ }
+ {
+ lbits zgsz3262;
+ CREATE(lbits)(&zgsz3262);
+ CONVERT_OF(lbits, fbits)(&zgsz3262, zgaz3121, UINT64_C(8) , true);
+ sail_int zgsz3263;
+ CREATE(sail_int)(&zgsz3263);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3263, zgaz3122);
+ sail_int zgsz3264;
+ CREATE(sail_int)(&zgsz3264);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3264, INT64_C(3));
+ lbits zgsz3265;
+ CREATE(lbits)(&zgsz3265);
+ vector_subrange_lbits(&zgsz3265, zgsz3262, zgsz3263, zgsz3264);
+ zgaz3123 = CONVERT_OF(fbits, lbits)(zgsz3265, true);
+ KILL(lbits)(&zgsz3265);
+ KILL(sail_int)(&zgsz3264);
+ KILL(sail_int)(&zgsz3263);
+ KILL(lbits)(&zgsz3262);
+ }
+
+
+ }
+ uint64_t zgaz3124;
+ zgaz3124 = sailgen_zzzz7nzzJzzK3z3zzeros_implicit(zinternal_E_take_bits);
+ {
+ lbits zgsz3266;
+ CREATE(lbits)(&zgsz3266);
+ CONVERT_OF(lbits, fbits)(&zgsz3266, zgaz3123, UINT64_C(5) , true);
+ lbits zgsz3267;
+ CREATE(lbits)(&zgsz3267);
+ CONVERT_OF(lbits, fbits)(&zgsz3267, zgaz3124, UINT64_C(3) , true);
+ lbits zgsz3268;
+ CREATE(lbits)(&zgsz3268);
+ append(&zgsz3268, zgsz3266, zgsz3267);
+ zBs = CONVERT_OF(fbits, lbits)(zgsz3268, true);
+ KILL(lbits)(&zgsz3268);
+ KILL(lbits)(&zgsz3267);
+ KILL(lbits)(&zgsz3266);
+ }
+ zgsz3226 = UNIT;
+
+
+ } else {
+ {
+ zlenMSBs = UINT64_C(0b00);
+ unit zgsz3228;
+ zgsz3228 = UNIT;
+ }
+ {
+ zT = zc.zT;
+ unit zgsz3227;
+ zgsz3227 = UNIT;
+ }
+ zBs = zc.zB;
+ zgsz3226 = UNIT;
+ }
+ }
+ uint64_t zcarry_out;
+ {
+ bool zgaz3180;
+ {
+ uint64_t zgaz3179;
+ {
+ int64_t zgaz3178;
+ {
+ sail_int zgsz3269;
+ CREATE(sail_int)(&zgsz3269);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3269, zcap_mantissa_width);
+ sail_int zgsz3270;
+ CREATE(sail_int)(&zgsz3270);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3270, INT64_C(3));
+ sail_int zgsz3271;
+ CREATE(sail_int)(&zgsz3271);
+ sub_int(&zgsz3271, zgsz3269, zgsz3270);
+ zgaz3178 = CONVERT_OF(mach_int, sail_int)(zgsz3271);
+ KILL(sail_int)(&zgsz3271);
+ KILL(sail_int)(&zgsz3270);
+ KILL(sail_int)(&zgsz3269);
+ }
+ {
+ lbits zgsz3272;
+ CREATE(lbits)(&zgsz3272);
+ CONVERT_OF(lbits, fbits)(&zgsz3272, zBs, UINT64_C(8) , true);
+ sail_int zgsz3273;
+ CREATE(sail_int)(&zgsz3273);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3273, zgaz3178);
+ sail_int zgsz3274;
+ CREATE(sail_int)(&zgsz3274);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3274, INT64_C(0));
+ lbits zgsz3275;
+ CREATE(lbits)(&zgsz3275);
+ vector_subrange_lbits(&zgsz3275, zgsz3272, zgsz3273, zgsz3274);
+ zgaz3179 = CONVERT_OF(fbits, lbits)(zgsz3275, true);
+ KILL(lbits)(&zgsz3275);
+ KILL(sail_int)(&zgsz3274);
+ KILL(sail_int)(&zgsz3273);
+ KILL(lbits)(&zgsz3272);
+ }
+
+ }
+ {
+ lbits zgsz3277;
+ CREATE(lbits)(&zgsz3277);
+ CONVERT_OF(lbits, fbits)(&zgsz3277, zgaz3179, UINT64_C(6) , true);
+ lbits zgsz3276;
+ CREATE(lbits)(&zgsz3276);
+ CONVERT_OF(lbits, fbits)(&zgsz3276, zT, UINT64_C(6) , true);
+ zgaz3180 = sailgen_z8operatorz0zzz3zzz3zI_uz9(zgsz3276, zgsz3277);
+ KILL(lbits)(&zgsz3277);
+ KILL(lbits)(&zgsz3276);
+ }
+
+ }
+ if (zgaz3180) { zcarry_out = UINT64_C(0b01); } else { zcarry_out = UINT64_C(0b00); }
+
+ }
+ uint64_t zTtop2;
+ {
+ uint64_t zgaz3177;
+ {
+ uint64_t zgaz3176;
+ {
+ int64_t zgaz3174;
+ {
+ sail_int zgsz3278;
+ CREATE(sail_int)(&zgsz3278);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3278, zcap_mantissa_width);
+ sail_int zgsz3279;
+ CREATE(sail_int)(&zgsz3279);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3279, INT64_C(1));
+ sail_int zgsz3280;
+ CREATE(sail_int)(&zgsz3280);
+ sub_int(&zgsz3280, zgsz3278, zgsz3279);
+ zgaz3174 = CONVERT_OF(mach_int, sail_int)(zgsz3280);
+ KILL(sail_int)(&zgsz3280);
+ KILL(sail_int)(&zgsz3279);
+ KILL(sail_int)(&zgsz3278);
+ }
+ int64_t zgaz3175;
+ {
+ sail_int zgsz3281;
+ CREATE(sail_int)(&zgsz3281);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3281, zcap_mantissa_width);
+ sail_int zgsz3282;
+ CREATE(sail_int)(&zgsz3282);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3282, INT64_C(2));
+ sail_int zgsz3283;
+ CREATE(sail_int)(&zgsz3283);
+ sub_int(&zgsz3283, zgsz3281, zgsz3282);
+ zgaz3175 = CONVERT_OF(mach_int, sail_int)(zgsz3283);
+ KILL(sail_int)(&zgsz3283);
+ KILL(sail_int)(&zgsz3282);
+ KILL(sail_int)(&zgsz3281);
+ }
+ {
+ lbits zgsz3284;
+ CREATE(lbits)(&zgsz3284);
+ CONVERT_OF(lbits, fbits)(&zgsz3284, zBs, UINT64_C(8) , true);
+ sail_int zgsz3285;
+ CREATE(sail_int)(&zgsz3285);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3285, zgaz3174);
+ sail_int zgsz3286;
+ CREATE(sail_int)(&zgsz3286);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3286, zgaz3175);
+ lbits zgsz3287;
+ CREATE(lbits)(&zgsz3287);
+ vector_subrange_lbits(&zgsz3287, zgsz3284, zgsz3285, zgsz3286);
+ zgaz3176 = CONVERT_OF(fbits, lbits)(zgsz3287, true);
+ KILL(lbits)(&zgsz3287);
+ KILL(sail_int)(&zgsz3286);
+ KILL(sail_int)(&zgsz3285);
+ KILL(lbits)(&zgsz3284);
+ }
+
+
+ }
+ {
+ lbits zgsz3288;
+ CREATE(lbits)(&zgsz3288);
+ CONVERT_OF(lbits, fbits)(&zgsz3288, zgaz3176, UINT64_C(2) , true);
+ lbits zgsz3289;
+ CREATE(lbits)(&zgsz3289);
+ CONVERT_OF(lbits, fbits)(&zgsz3289, zlenMSBs, UINT64_C(2) , true);
+ lbits zgsz3290;
+ CREATE(lbits)(&zgsz3290);
+ add_bits(&zgsz3290, zgsz3288, zgsz3289);
+ zgaz3177 = CONVERT_OF(fbits, lbits)(zgsz3290, true);
+ KILL(lbits)(&zgsz3290);
+ KILL(lbits)(&zgsz3289);
+ KILL(lbits)(&zgsz3288);
+ }
+
+ }
+ {
+ lbits zgsz3291;
+ CREATE(lbits)(&zgsz3291);
+ CONVERT_OF(lbits, fbits)(&zgsz3291, zgaz3177, UINT64_C(2) , true);
+ lbits zgsz3292;
+ CREATE(lbits)(&zgsz3292);
+ CONVERT_OF(lbits, fbits)(&zgsz3292, zcarry_out, UINT64_C(2) , true);
+ lbits zgsz3293;
+ CREATE(lbits)(&zgsz3293);
+ add_bits(&zgsz3293, zgsz3291, zgsz3292);
+ zTtop2 = CONVERT_OF(fbits, lbits)(zgsz3293, true);
+ KILL(lbits)(&zgsz3293);
+ KILL(lbits)(&zgsz3292);
+ KILL(lbits)(&zgsz3291);
+ }
+
+ }
+ struct zCapability zgaz3173;
+ {
+ uint64_t zgaz3129;
+ {
+ bool zgaz3125;
+ {
+ sail_int zgsz3295;
+ CREATE(sail_int)(&zgsz3295);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3295, INT64_C(0));
+ sail_int zgsz3294;
+ CREATE(sail_int)(&zgsz3294);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3294, zcap_uperms_width);
+ zgaz3125 = gt(zgsz3294, zgsz3295);
+ KILL(sail_int)(&zgsz3295);
+ KILL(sail_int)(&zgsz3294);
+ }
+ zgaz3129 = UINT64_C(0);
+
+ }
+ bool zgaz3132;
+ {
+ fbits zgaz3131;
+ {
+ uint64_t zgaz3130;
+ zgaz3130 = zc.zperms;
+ {
+ sail_int zgsz3297;
+ CREATE(sail_int)(&zgsz3297);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3297, INT64_C(11));
+ lbits zgsz3296;
+ CREATE(lbits)(&zgsz3296);
+ CONVERT_OF(lbits, fbits)(&zgsz3296, zgaz3130, UINT64_C(12) , true);
+ zgaz3131 = bitvector_access(zgsz3296, zgsz3297);
+ KILL(sail_int)(&zgsz3297);
+ KILL(lbits)(&zgsz3296);
+ }
+
+ }
+ zgaz3132 = sailgen_bit_to_bool(zgaz3131);
+
+ }
+ bool zgaz3135;
+ {
+ fbits zgaz3134;
+ {
+ uint64_t zgaz3133;
+ zgaz3133 = zc.zperms;
+ {
+ sail_int zgsz3299;
+ CREATE(sail_int)(&zgsz3299);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3299, INT64_C(10));
+ lbits zgsz3298;
+ CREATE(lbits)(&zgsz3298);
+ CONVERT_OF(lbits, fbits)(&zgsz3298, zgaz3133, UINT64_C(12) , true);
+ zgaz3134 = bitvector_access(zgsz3298, zgsz3299);
+ KILL(sail_int)(&zgsz3299);
+ KILL(lbits)(&zgsz3298);
+ }
+
+ }
+ zgaz3135 = sailgen_bit_to_bool(zgaz3134);
+
+ }
+ bool zgaz3138;
+ {
+ fbits zgaz3137;
+ {
+ uint64_t zgaz3136;
+ zgaz3136 = zc.zperms;
+ {
+ sail_int zgsz3301;
+ CREATE(sail_int)(&zgsz3301);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3301, INT64_C(9));
+ lbits zgsz3300;
+ CREATE(lbits)(&zgsz3300);
+ CONVERT_OF(lbits, fbits)(&zgsz3300, zgaz3136, UINT64_C(12) , true);
+ zgaz3137 = bitvector_access(zgsz3300, zgsz3301);
+ KILL(sail_int)(&zgsz3301);
+ KILL(lbits)(&zgsz3300);
+ }
+
+ }
+ zgaz3138 = sailgen_bit_to_bool(zgaz3137);
+
+ }
+ bool zgaz3141;
+ {
+ fbits zgaz3140;
+ {
+ uint64_t zgaz3139;
+ zgaz3139 = zc.zperms;
+ {
+ sail_int zgsz3303;
+ CREATE(sail_int)(&zgsz3303);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3303, INT64_C(8));
+ lbits zgsz3302;
+ CREATE(lbits)(&zgsz3302);
+ CONVERT_OF(lbits, fbits)(&zgsz3302, zgaz3139, UINT64_C(12) , true);
+ zgaz3140 = bitvector_access(zgsz3302, zgsz3303);
+ KILL(sail_int)(&zgsz3303);
+ KILL(lbits)(&zgsz3302);
+ }
+
+ }
+ zgaz3141 = sailgen_bit_to_bool(zgaz3140);
+
+ }
+ bool zgaz3144;
+ {
+ fbits zgaz3143;
+ {
+ uint64_t zgaz3142;
+ zgaz3142 = zc.zperms;
+ {
+ sail_int zgsz3305;
+ CREATE(sail_int)(&zgsz3305);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3305, INT64_C(7));
+ lbits zgsz3304;
+ CREATE(lbits)(&zgsz3304);
+ CONVERT_OF(lbits, fbits)(&zgsz3304, zgaz3142, UINT64_C(12) , true);
+ zgaz3143 = bitvector_access(zgsz3304, zgsz3305);
+ KILL(sail_int)(&zgsz3305);
+ KILL(lbits)(&zgsz3304);
+ }
+
+ }
+ zgaz3144 = sailgen_bit_to_bool(zgaz3143);
+
+ }
+ bool zgaz3147;
+ {
+ fbits zgaz3146;
+ {
+ uint64_t zgaz3145;
+ zgaz3145 = zc.zperms;
+ {
+ sail_int zgsz3307;
+ CREATE(sail_int)(&zgsz3307);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3307, INT64_C(6));
+ lbits zgsz3306;
+ CREATE(lbits)(&zgsz3306);
+ CONVERT_OF(lbits, fbits)(&zgsz3306, zgaz3145, UINT64_C(12) , true);
+ zgaz3146 = bitvector_access(zgsz3306, zgsz3307);
+ KILL(sail_int)(&zgsz3307);
+ KILL(lbits)(&zgsz3306);
+ }
+
+ }
+ zgaz3147 = sailgen_bit_to_bool(zgaz3146);
+
+ }
+ bool zgaz3150;
+ {
+ fbits zgaz3149;
+ {
+ uint64_t zgaz3148;
+ zgaz3148 = zc.zperms;
+ {
+ sail_int zgsz3309;
+ CREATE(sail_int)(&zgsz3309);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3309, INT64_C(5));
+ lbits zgsz3308;
+ CREATE(lbits)(&zgsz3308);
+ CONVERT_OF(lbits, fbits)(&zgsz3308, zgaz3148, UINT64_C(12) , true);
+ zgaz3149 = bitvector_access(zgsz3308, zgsz3309);
+ KILL(sail_int)(&zgsz3309);
+ KILL(lbits)(&zgsz3308);
+ }
+
+ }
+ zgaz3150 = sailgen_bit_to_bool(zgaz3149);
+
+ }
+ bool zgaz3153;
+ {
+ fbits zgaz3152;
+ {
+ uint64_t zgaz3151;
+ zgaz3151 = zc.zperms;
+ {
+ sail_int zgsz3311;
+ CREATE(sail_int)(&zgsz3311);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3311, INT64_C(4));
+ lbits zgsz3310;
+ CREATE(lbits)(&zgsz3310);
+ CONVERT_OF(lbits, fbits)(&zgsz3310, zgaz3151, UINT64_C(12) , true);
+ zgaz3152 = bitvector_access(zgsz3310, zgsz3311);
+ KILL(sail_int)(&zgsz3311);
+ KILL(lbits)(&zgsz3310);
+ }
+
+ }
+ zgaz3153 = sailgen_bit_to_bool(zgaz3152);
+
+ }
+ bool zgaz3156;
+ {
+ fbits zgaz3155;
+ {
+ uint64_t zgaz3154;
+ zgaz3154 = zc.zperms;
+ {
+ sail_int zgsz3313;
+ CREATE(sail_int)(&zgsz3313);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3313, INT64_C(3));
+ lbits zgsz3312;
+ CREATE(lbits)(&zgsz3312);
+ CONVERT_OF(lbits, fbits)(&zgsz3312, zgaz3154, UINT64_C(12) , true);
+ zgaz3155 = bitvector_access(zgsz3312, zgsz3313);
+ KILL(sail_int)(&zgsz3313);
+ KILL(lbits)(&zgsz3312);
+ }
+
+ }
+ zgaz3156 = sailgen_bit_to_bool(zgaz3155);
+
+ }
+ bool zgaz3159;
+ {
+ fbits zgaz3158;
+ {
+ uint64_t zgaz3157;
+ zgaz3157 = zc.zperms;
+ {
+ sail_int zgsz3315;
+ CREATE(sail_int)(&zgsz3315);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3315, INT64_C(2));
+ lbits zgsz3314;
+ CREATE(lbits)(&zgsz3314);
+ CONVERT_OF(lbits, fbits)(&zgsz3314, zgaz3157, UINT64_C(12) , true);
+ zgaz3158 = bitvector_access(zgsz3314, zgsz3315);
+ KILL(sail_int)(&zgsz3315);
+ KILL(lbits)(&zgsz3314);
+ }
+
+ }
+ zgaz3159 = sailgen_bit_to_bool(zgaz3158);
+
+ }
+ bool zgaz3162;
+ {
+ fbits zgaz3161;
+ {
+ uint64_t zgaz3160;
+ zgaz3160 = zc.zperms;
+ {
+ sail_int zgsz3317;
+ CREATE(sail_int)(&zgsz3317);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3317, INT64_C(1));
+ lbits zgsz3316;
+ CREATE(lbits)(&zgsz3316);
+ CONVERT_OF(lbits, fbits)(&zgsz3316, zgaz3160, UINT64_C(12) , true);
+ zgaz3161 = bitvector_access(zgsz3316, zgsz3317);
+ KILL(sail_int)(&zgsz3317);
+ KILL(lbits)(&zgsz3316);
+ }
+
+ }
+ zgaz3162 = sailgen_bit_to_bool(zgaz3161);
+
+ }
+ bool zgaz3165;
+ {
+ fbits zgaz3164;
+ {
+ uint64_t zgaz3163;
+ zgaz3163 = zc.zperms;
+ {
+ sail_int zgsz3319;
+ CREATE(sail_int)(&zgsz3319);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3319, INT64_C(0));
+ lbits zgsz3318;
+ CREATE(lbits)(&zgsz3318);
+ CONVERT_OF(lbits, fbits)(&zgsz3318, zgaz3163, UINT64_C(12) , true);
+ zgaz3164 = bitvector_access(zgsz3318, zgsz3319);
+ KILL(sail_int)(&zgsz3319);
+ KILL(lbits)(&zgsz3318);
+ }
+
+ }
+ zgaz3165 = sailgen_bit_to_bool(zgaz3164);
+
+ }
+ uint64_t zgaz3166;
+ zgaz3166 = zc.zreserved;
+ bool zgaz3169;
+ {
+ fbits zgaz3168;
+ {
+ uint64_t zgaz3167;
+ zgaz3167 = zc.zflags;
+ {
+ sail_int zgsz3321;
+ CREATE(sail_int)(&zgsz3321);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3321, INT64_C(0));
+ lbits zgsz3320;
+ CREATE(lbits)(&zgsz3320);
+ CONVERT_OF(lbits, fbits)(&zgsz3320, zgaz3167, UINT64_C(1) , true);
+ zgaz3168 = bitvector_access(zgsz3320, zgsz3321);
+ KILL(sail_int)(&zgsz3321);
+ KILL(lbits)(&zgsz3320);
+ }
+
+ }
+ zgaz3169 = sailgen_bit_to_bool(zgaz3168);
+
+ }
+ uint64_t zgaz3170;
+ {
+ lbits zgsz3322;
+ CREATE(lbits)(&zgsz3322);
+ CONVERT_OF(lbits, fbits)(&zgsz3322, zTtop2, UINT64_C(2) , true);
+ lbits zgsz3323;
+ CREATE(lbits)(&zgsz3323);
+ CONVERT_OF(lbits, fbits)(&zgsz3323, zT, UINT64_C(6) , true);
+ lbits zgsz3324;
+ CREATE(lbits)(&zgsz3324);
+ append(&zgsz3324, zgsz3322, zgsz3323);
+ zgaz3170 = CONVERT_OF(fbits, lbits)(zgsz3324, true);
+ KILL(lbits)(&zgsz3324);
+ KILL(lbits)(&zgsz3323);
+ KILL(lbits)(&zgsz3322);
+ }
+ uint64_t zgaz3171;
+ zgaz3171 = zc.zotype;
+ uint64_t zgaz3172;
+ zgaz3172 = zc.zaddress;
+ struct zCapability zgsz3325;
+ zgsz3325.zB = zBs;
+ zgsz3325.zE = zE;
+ zgsz3325.zT = zgaz3170;
+ zgsz3325.zaccess_system_regs = zgaz3135;
+ zgsz3325.zaddress = zgaz3172;
+ zgsz3325.zflag_cap_mode = zgaz3169;
+ zgsz3325.zglobal = zgaz3165;
+ zgsz3325.zinternal_E = zinternal_E;
+ zgsz3325.zotype = zgaz3171;
+ zgsz3325.zpermit_cinvoke = zgaz3141;
+ zgsz3325.zpermit_execute = zgaz3162;
+ zgsz3325.zpermit_load = zgaz3159;
+ zgsz3325.zpermit_load_cap = zgaz3153;
+ zgsz3325.zpermit_seal = zgaz3144;
+ zgsz3325.zpermit_set_CID = zgaz3132;
+ zgsz3325.zpermit_store = zgaz3156;
+ zgsz3325.zpermit_store_cap = zgaz3150;
+ zgsz3325.zpermit_store_local_cap = zgaz3147;
+ zgsz3325.zpermit_unseal = zgaz3138;
+ zgsz3325.zreserved = zgaz3166;
+ zgsz3325.ztag = zt;
+ zgsz3325.zuperms = zgaz3129;
+ zgaz3173 = zgsz3325;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+ zcbz336 = zgaz3173;
+ goto cleanup_146;
+ /* unreachable after return */
+
+
+
+
+
+
+
+
+ goto end_cleanup_147;
+cleanup_146: ;
+
+
+
+
+
+
+
+
+ goto end_function_145;
+end_cleanup_147: ;
+end_function_145: ;
+ return zcbz336;
+end_block_exception_148: ;
+ struct zCapability zcbz361 = { .zuperms = UINT64_C(0xdeadc0de), .ztag = false, .zreserved = UINT64_C(0xdeadc0de), .zpermit_unseal = false, .zpermit_store_local_cap = false, .zpermit_store_cap = false, .zpermit_store = false, .zpermit_set_CID = false, .zpermit_seal = false, .zpermit_load_cap = false, .zpermit_load = false, .zpermit_execute = false, .zpermit_cinvoke = false, .zotype = UINT64_C(0xdeadc0de), .zinternal_E = false, .zglobal = false, .zflag_cap_mode = false, .zaddress = UINT64_C(0xdeadc0de), .zaccess_system_regs = false, .zT = UINT64_C(0xdeadc0de), .zE = UINT64_C(0xdeadc0de), .zB = UINT64_C(0xdeadc0de) };
+ return zcbz361;
+}
+
+static struct zCapability sailgen_capBitsToCapability(bool, uint64_t);
+
+static struct zCapability sailgen_capBitsToCapability(bool zt, uint64_t zc)
+{
+ __label__ end_function_150, end_block_exception_151;
+
+ struct zCapability zcbz337;
+ struct zEncCapability zgaz3183;
+ zgaz3183 = sailgen_capBitsToEncCapability(zc);
+ zcbz337 = sailgen_encCapabilityToCapability(zt, zgaz3183);
+
+end_function_150: ;
+ return zcbz337;
+end_block_exception_151: ;
+ struct zCapability zcbz362 = { .zuperms = UINT64_C(0xdeadc0de), .ztag = false, .zreserved = UINT64_C(0xdeadc0de), .zpermit_unseal = false, .zpermit_store_local_cap = false, .zpermit_store_cap = false, .zpermit_store = false, .zpermit_set_CID = false, .zpermit_seal = false, .zpermit_load_cap = false, .zpermit_load = false, .zpermit_execute = false, .zpermit_cinvoke = false, .zotype = UINT64_C(0xdeadc0de), .zinternal_E = false, .zglobal = false, .zflag_cap_mode = false, .zaddress = UINT64_C(0xdeadc0de), .zaccess_system_regs = false, .zT = UINT64_C(0xdeadc0de), .zE = UINT64_C(0xdeadc0de), .zB = UINT64_C(0xdeadc0de) };
+ return zcbz362;
+}
+
+static struct zEncCapability sailgen_capToEncCap(struct zCapability);
+
+static struct zEncCapability sailgen_capToEncCap(struct zCapability zcap)
+{
+ __label__ cleanup_154, end_cleanup_155, end_function_153, end_block_exception_156;
+
+ struct zEncCapability zcbz338;
+ uint64_t zt_hi;
+ {
+ uint64_t zgaz3210;
+ zgaz3210 = zcap.zT;
+ int64_t zgaz3211;
+ {
+ sail_int zgsz3326;
+ CREATE(sail_int)(&zgsz3326);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3326, zcap_mantissa_width);
+ sail_int zgsz3327;
+ CREATE(sail_int)(&zgsz3327);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3327, INT64_C(3));
+ sail_int zgsz3328;
+ CREATE(sail_int)(&zgsz3328);
+ sub_int(&zgsz3328, zgsz3326, zgsz3327);
+ zgaz3211 = CONVERT_OF(mach_int, sail_int)(zgsz3328);
+ KILL(sail_int)(&zgsz3328);
+ KILL(sail_int)(&zgsz3327);
+ KILL(sail_int)(&zgsz3326);
+ }
+ {
+ lbits zgsz3329;
+ CREATE(lbits)(&zgsz3329);
+ CONVERT_OF(lbits, fbits)(&zgsz3329, zgaz3210, UINT64_C(8) , true);
+ sail_int zgsz3330;
+ CREATE(sail_int)(&zgsz3330);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3330, zgaz3211);
+ sail_int zgsz3331;
+ CREATE(sail_int)(&zgsz3331);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3331, zinternal_E_take_bits);
+ lbits zgsz3332;
+ CREATE(lbits)(&zgsz3332);
+ vector_subrange_lbits(&zgsz3332, zgsz3329, zgsz3330, zgsz3331);
+ zt_hi = CONVERT_OF(fbits, lbits)(zgsz3332, true);
+ KILL(lbits)(&zgsz3332);
+ KILL(sail_int)(&zgsz3331);
+ KILL(sail_int)(&zgsz3330);
+ KILL(lbits)(&zgsz3329);
+ }
+
+
+ }
+ uint64_t zt_lo;
+ {
+ uint64_t zgaz3208;
+ zgaz3208 = zcap.zT;
+ int64_t zgaz3209;
+ {
+ sail_int zgsz3333;
+ CREATE(sail_int)(&zgsz3333);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3333, zinternal_E_take_bits);
+ sail_int zgsz3334;
+ CREATE(sail_int)(&zgsz3334);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3334, INT64_C(1));
+ sail_int zgsz3335;
+ CREATE(sail_int)(&zgsz3335);
+ sub_int(&zgsz3335, zgsz3333, zgsz3334);
+ zgaz3209 = CONVERT_OF(mach_int, sail_int)(zgsz3335);
+ KILL(sail_int)(&zgsz3335);
+ KILL(sail_int)(&zgsz3334);
+ KILL(sail_int)(&zgsz3333);
+ }
+ {
+ lbits zgsz3336;
+ CREATE(lbits)(&zgsz3336);
+ CONVERT_OF(lbits, fbits)(&zgsz3336, zgaz3208, UINT64_C(8) , true);
+ sail_int zgsz3337;
+ CREATE(sail_int)(&zgsz3337);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3337, zgaz3209);
+ sail_int zgsz3338;
+ CREATE(sail_int)(&zgsz3338);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3338, INT64_C(0));
+ lbits zgsz3339;
+ CREATE(lbits)(&zgsz3339);
+ vector_subrange_lbits(&zgsz3339, zgsz3336, zgsz3337, zgsz3338);
+ zt_lo = CONVERT_OF(fbits, lbits)(zgsz3339, true);
+ KILL(lbits)(&zgsz3339);
+ KILL(sail_int)(&zgsz3338);
+ KILL(sail_int)(&zgsz3337);
+ KILL(lbits)(&zgsz3336);
+ }
+
+
+ }
+ uint64_t zb_hi;
+ {
+ uint64_t zgaz3206;
+ zgaz3206 = zcap.zB;
+ int64_t zgaz3207;
+ {
+ sail_int zgsz3340;
+ CREATE(sail_int)(&zgsz3340);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3340, zcap_mantissa_width);
+ sail_int zgsz3341;
+ CREATE(sail_int)(&zgsz3341);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3341, INT64_C(1));
+ sail_int zgsz3342;
+ CREATE(sail_int)(&zgsz3342);
+ sub_int(&zgsz3342, zgsz3340, zgsz3341);
+ zgaz3207 = CONVERT_OF(mach_int, sail_int)(zgsz3342);
+ KILL(sail_int)(&zgsz3342);
+ KILL(sail_int)(&zgsz3341);
+ KILL(sail_int)(&zgsz3340);
+ }
+ {
+ lbits zgsz3343;
+ CREATE(lbits)(&zgsz3343);
+ CONVERT_OF(lbits, fbits)(&zgsz3343, zgaz3206, UINT64_C(8) , true);
+ sail_int zgsz3344;
+ CREATE(sail_int)(&zgsz3344);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3344, zgaz3207);
+ sail_int zgsz3345;
+ CREATE(sail_int)(&zgsz3345);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3345, zinternal_E_take_bits);
+ lbits zgsz3346;
+ CREATE(lbits)(&zgsz3346);
+ vector_subrange_lbits(&zgsz3346, zgsz3343, zgsz3344, zgsz3345);
+ zb_hi = CONVERT_OF(fbits, lbits)(zgsz3346, true);
+ KILL(lbits)(&zgsz3346);
+ KILL(sail_int)(&zgsz3345);
+ KILL(sail_int)(&zgsz3344);
+ KILL(lbits)(&zgsz3343);
+ }
+
+
+ }
+ uint64_t zb_lo;
+ {
+ uint64_t zgaz3204;
+ zgaz3204 = zcap.zB;
+ int64_t zgaz3205;
+ {
+ sail_int zgsz3347;
+ CREATE(sail_int)(&zgsz3347);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3347, zinternal_E_take_bits);
+ sail_int zgsz3348;
+ CREATE(sail_int)(&zgsz3348);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3348, INT64_C(1));
+ sail_int zgsz3349;
+ CREATE(sail_int)(&zgsz3349);
+ sub_int(&zgsz3349, zgsz3347, zgsz3348);
+ zgaz3205 = CONVERT_OF(mach_int, sail_int)(zgsz3349);
+ KILL(sail_int)(&zgsz3349);
+ KILL(sail_int)(&zgsz3348);
+ KILL(sail_int)(&zgsz3347);
+ }
+ {
+ lbits zgsz3350;
+ CREATE(lbits)(&zgsz3350);
+ CONVERT_OF(lbits, fbits)(&zgsz3350, zgaz3204, UINT64_C(8) , true);
+ sail_int zgsz3351;
+ CREATE(sail_int)(&zgsz3351);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3351, zgaz3205);
+ sail_int zgsz3352;
+ CREATE(sail_int)(&zgsz3352);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3352, INT64_C(0));
+ lbits zgsz3353;
+ CREATE(lbits)(&zgsz3353);
+ vector_subrange_lbits(&zgsz3353, zgsz3350, zgsz3351, zgsz3352);
+ zb_lo = CONVERT_OF(fbits, lbits)(zgsz3353, true);
+ KILL(lbits)(&zgsz3353);
+ KILL(sail_int)(&zgsz3352);
+ KILL(sail_int)(&zgsz3351);
+ KILL(lbits)(&zgsz3350);
+ }
+
+
+ }
+ {
+ bool zgaz3184;
+ zgaz3184 = zcap.zinternal_E;
+ unit zgsz3354;
+ if (zgaz3184) {
+ {
+ uint64_t zgaz3186;
+ zgaz3186 = zcap.zE;
+ int64_t zgaz3187;
+ {
+ int64_t zgaz3185;
+ {
+ sail_int zgsz3355;
+ CREATE(sail_int)(&zgsz3355);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3355, INT64_C(2));
+ sail_int zgsz3356;
+ CREATE(sail_int)(&zgsz3356);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3356, zinternal_E_take_bits);
+ sail_int zgsz3357;
+ CREATE(sail_int)(&zgsz3357);
+ mult_int(&zgsz3357, zgsz3355, zgsz3356);
+ zgaz3185 = CONVERT_OF(mach_int, sail_int)(zgsz3357);
+ KILL(sail_int)(&zgsz3357);
+ KILL(sail_int)(&zgsz3356);
+ KILL(sail_int)(&zgsz3355);
+ }
+ {
+ sail_int zgsz3358;
+ CREATE(sail_int)(&zgsz3358);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3358, zgaz3185);
+ sail_int zgsz3359;
+ CREATE(sail_int)(&zgsz3359);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3359, INT64_C(1));
+ sail_int zgsz3360;
+ CREATE(sail_int)(&zgsz3360);
+ sub_int(&zgsz3360, zgsz3358, zgsz3359);
+ zgaz3187 = CONVERT_OF(mach_int, sail_int)(zgsz3360);
+ KILL(sail_int)(&zgsz3360);
+ KILL(sail_int)(&zgsz3359);
+ KILL(sail_int)(&zgsz3358);
+ }
+
+ }
+ {
+ lbits zgsz3361;
+ CREATE(lbits)(&zgsz3361);
+ CONVERT_OF(lbits, fbits)(&zgsz3361, zgaz3186, UINT64_C(6) , true);
+ sail_int zgsz3362;
+ CREATE(sail_int)(&zgsz3362);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3362, zgaz3187);
+ sail_int zgsz3363;
+ CREATE(sail_int)(&zgsz3363);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3363, zinternal_E_take_bits);
+ lbits zgsz3364;
+ CREATE(lbits)(&zgsz3364);
+ vector_subrange_lbits(&zgsz3364, zgsz3361, zgsz3362, zgsz3363);
+ zt_lo = CONVERT_OF(fbits, lbits)(zgsz3364, true);
+ KILL(lbits)(&zgsz3364);
+ KILL(sail_int)(&zgsz3363);
+ KILL(sail_int)(&zgsz3362);
+ KILL(lbits)(&zgsz3361);
+ }
+ unit zgsz3365;
+ zgsz3365 = UNIT;
+
+
+ }
+ uint64_t zgaz3188;
+ zgaz3188 = zcap.zE;
+ int64_t zgaz3189;
+ {
+ sail_int zgsz3366;
+ CREATE(sail_int)(&zgsz3366);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3366, zinternal_E_take_bits);
+ sail_int zgsz3367;
+ CREATE(sail_int)(&zgsz3367);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3367, INT64_C(1));
+ sail_int zgsz3368;
+ CREATE(sail_int)(&zgsz3368);
+ sub_int(&zgsz3368, zgsz3366, zgsz3367);
+ zgaz3189 = CONVERT_OF(mach_int, sail_int)(zgsz3368);
+ KILL(sail_int)(&zgsz3368);
+ KILL(sail_int)(&zgsz3367);
+ KILL(sail_int)(&zgsz3366);
+ }
+ {
+ lbits zgsz3369;
+ CREATE(lbits)(&zgsz3369);
+ CONVERT_OF(lbits, fbits)(&zgsz3369, zgaz3188, UINT64_C(6) , true);
+ sail_int zgsz3370;
+ CREATE(sail_int)(&zgsz3370);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3370, zgaz3189);
+ sail_int zgsz3371;
+ CREATE(sail_int)(&zgsz3371);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3371, INT64_C(0));
+ lbits zgsz3372;
+ CREATE(lbits)(&zgsz3372);
+ vector_subrange_lbits(&zgsz3372, zgsz3369, zgsz3370, zgsz3371);
+ zb_lo = CONVERT_OF(fbits, lbits)(zgsz3372, true);
+ KILL(lbits)(&zgsz3372);
+ KILL(sail_int)(&zgsz3371);
+ KILL(sail_int)(&zgsz3370);
+ KILL(lbits)(&zgsz3369);
+ }
+ zgsz3354 = UNIT;
+
+
+ } else { zgsz3354 = UNIT; }
+
+ }
+ struct zEncCapability zgaz3203;
+ {
+ uint64_t zgaz3192;
+ {
+ uint64_t zgaz3190;
+ zgaz3190 = zcap.zuperms;
+ uint64_t zgaz3191;
+ zgaz3191 = sailgen_getCapHardPerms(zcap);
+ {
+ lbits zgsz3373;
+ CREATE(lbits)(&zgsz3373);
+ CONVERT_OF(lbits, fbits)(&zgsz3373, zgaz3190, UINT64_C(0) , true);
+ lbits zgsz3374;
+ CREATE(lbits)(&zgsz3374);
+ CONVERT_OF(lbits, fbits)(&zgsz3374, zgaz3191, UINT64_C(12) , true);
+ lbits zgsz3375;
+ CREATE(lbits)(&zgsz3375);
+ append(&zgsz3375, zgsz3373, zgsz3374);
+ zgaz3192 = CONVERT_OF(fbits, lbits)(zgsz3375, true);
+ KILL(lbits)(&zgsz3375);
+ KILL(lbits)(&zgsz3374);
+ KILL(lbits)(&zgsz3373);
+ }
+
+
+ }
+ uint64_t zgaz3193;
+ zgaz3193 = zcap.zreserved;
+ uint64_t zgaz3195;
+ {
+ bool zgaz3194;
+ zgaz3194 = zcap.zflag_cap_mode;
+ zgaz3195 = sailgen_bool_to_bits(zgaz3194);
+
+ }
+ uint64_t zgaz3196;
+ zgaz3196 = zcap.zotype;
+ fbits zgaz3199;
+ {
+ uint64_t zgaz3198;
+ {
+ bool zgaz3197;
+ zgaz3197 = zcap.zinternal_E;
+ zgaz3198 = sailgen_bool_to_bits(zgaz3197);
+
+ }
+ {
+ sail_int zgsz3377;
+ CREATE(sail_int)(&zgsz3377);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3377, INT64_C(0));
+ lbits zgsz3376;
+ CREATE(lbits)(&zgsz3376);
+ CONVERT_OF(lbits, fbits)(&zgsz3376, zgaz3198, UINT64_C(1) , true);
+ zgaz3199 = bitvector_access(zgsz3376, zgsz3377);
+ KILL(sail_int)(&zgsz3377);
+ KILL(lbits)(&zgsz3376);
+ }
+
+ }
+ uint64_t zgaz3200;
+ {
+ lbits zgsz3378;
+ CREATE(lbits)(&zgsz3378);
+ CONVERT_OF(lbits, fbits)(&zgsz3378, zt_hi, UINT64_C(3) , true);
+ lbits zgsz3379;
+ CREATE(lbits)(&zgsz3379);
+ CONVERT_OF(lbits, fbits)(&zgsz3379, zt_lo, UINT64_C(3) , true);
+ lbits zgsz3380;
+ CREATE(lbits)(&zgsz3380);
+ append(&zgsz3380, zgsz3378, zgsz3379);
+ zgaz3200 = CONVERT_OF(fbits, lbits)(zgsz3380, true);
+ KILL(lbits)(&zgsz3380);
+ KILL(lbits)(&zgsz3379);
+ KILL(lbits)(&zgsz3378);
+ }
+ uint64_t zgaz3201;
+ {
+ lbits zgsz3381;
+ CREATE(lbits)(&zgsz3381);
+ CONVERT_OF(lbits, fbits)(&zgsz3381, zb_hi, UINT64_C(5) , true);
+ lbits zgsz3382;
+ CREATE(lbits)(&zgsz3382);
+ CONVERT_OF(lbits, fbits)(&zgsz3382, zb_lo, UINT64_C(3) , true);
+ lbits zgsz3383;
+ CREATE(lbits)(&zgsz3383);
+ append(&zgsz3383, zgsz3381, zgsz3382);
+ zgaz3201 = CONVERT_OF(fbits, lbits)(zgsz3383, true);
+ KILL(lbits)(&zgsz3383);
+ KILL(lbits)(&zgsz3382);
+ KILL(lbits)(&zgsz3381);
+ }
+ uint64_t zgaz3202;
+ zgaz3202 = zcap.zaddress;
+ struct zEncCapability zgsz3384;
+ zgsz3384.zB = zgaz3201;
+ zgsz3384.zT = zgaz3200;
+ zgsz3384.zaddress = zgaz3202;
+ zgsz3384.zflags = zgaz3195;
+ zgsz3384.zinternal_E = zgaz3199;
+ zgsz3384.zotype = zgaz3196;
+ zgsz3384.zperms = zgaz3192;
+ zgsz3384.zreserved = zgaz3193;
+ zgaz3203 = zgsz3384;
+
+
+
+
+
+
+
+
+
+ }
+ zcbz338 = zgaz3203;
+ goto cleanup_154;
+ /* unreachable after return */
+
+
+
+
+
+ goto end_cleanup_155;
+cleanup_154: ;
+
+
+
+
+
+ goto end_function_153;
+end_cleanup_155: ;
+end_function_153: ;
+ return zcbz338;
+end_block_exception_156: ;
+ struct zEncCapability zcbz363 = { .zreserved = UINT64_C(0xdeadc0de), .zperms = UINT64_C(0xdeadc0de), .zotype = UINT64_C(0xdeadc0de), .zinternal_E = UINT64_C(0), .zflags = UINT64_C(0xdeadc0de), .zaddress = UINT64_C(0xdeadc0de), .zT = UINT64_C(0xdeadc0de), .zB = UINT64_C(0xdeadc0de) };
+ return zcbz363;
+}
+
+static uint64_t sailgen_capToBits(struct zCapability);
+
+static uint64_t sailgen_capToBits(struct zCapability zcap)
+{
+ __label__ end_function_158, end_block_exception_159;
+
+ uint64_t zcbz339;
+ struct zEncCapability zgaz3212;
+ zgaz3212 = sailgen_capToEncCap(zcap);
+ zcbz339 = sailgen_encCapToBits(zgaz3212);
+
+end_function_158: ;
+ return zcbz339;
+end_block_exception_159: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t znull_cap_bits;
+static void create_letbind_27(void) {
+
+
+ uint64_t zgsz3385;
+ zgsz3385 = sailgen_capToBits(znull_cap);
+ znull_cap_bits = zgsz3385;
+
+let_end_160: ;
+}
+static void kill_letbind_27(void) {
+}
+
+static uint64_t sailgen_capToMemBits(struct zCapability);
+
+static uint64_t sailgen_capToMemBits(struct zCapability zcap)
+{
+ __label__ end_function_162, end_block_exception_163;
+
+ uint64_t zcbz340;
+ uint64_t zgaz3213;
+ zgaz3213 = sailgen_capToBits(zcap);
+ {
+ lbits zgsz3386;
+ CREATE(lbits)(&zgsz3386);
+ CONVERT_OF(lbits, fbits)(&zgsz3386, zgaz3213, UINT64_C(64) , true);
+ lbits zgsz3387;
+ CREATE(lbits)(&zgsz3387);
+ CONVERT_OF(lbits, fbits)(&zgsz3387, znull_cap_bits, UINT64_C(64) , true);
+ lbits zgsz3388;
+ CREATE(lbits)(&zgsz3388);
+ xor_bits(&zgsz3388, zgsz3386, zgsz3387);
+ zcbz340 = CONVERT_OF(fbits, lbits)(zgsz3388, true);
+ KILL(lbits)(&zgsz3388);
+ KILL(lbits)(&zgsz3387);
+ KILL(lbits)(&zgsz3386);
+ }
+
+end_function_162: ;
+ return zcbz340;
+end_block_exception_163: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static struct zCapability sailgen_memBitsToCapability(bool, uint64_t);
+
+static struct zCapability sailgen_memBitsToCapability(bool ztag, uint64_t zb)
+{
+ __label__ end_function_165, end_block_exception_166;
+
+ struct zCapability zcbz341;
+ uint64_t zgaz3214;
+ {
+ lbits zgsz3389;
+ CREATE(lbits)(&zgsz3389);
+ CONVERT_OF(lbits, fbits)(&zgsz3389, zb, UINT64_C(64) , true);
+ lbits zgsz3390;
+ CREATE(lbits)(&zgsz3390);
+ CONVERT_OF(lbits, fbits)(&zgsz3390, znull_cap_bits, UINT64_C(64) , true);
+ lbits zgsz3391;
+ CREATE(lbits)(&zgsz3391);
+ xor_bits(&zgsz3391, zgsz3389, zgsz3390);
+ zgaz3214 = CONVERT_OF(fbits, lbits)(zgsz3391, true);
+ KILL(lbits)(&zgsz3391);
+ KILL(lbits)(&zgsz3390);
+ KILL(lbits)(&zgsz3389);
+ }
+ zcbz341 = sailgen_capBitsToCapability(ztag, zgaz3214);
+
+end_function_165: ;
+ return zcbz341;
+end_block_exception_166: ;
+ struct zCapability zcbz364 = { .zuperms = UINT64_C(0xdeadc0de), .ztag = false, .zreserved = UINT64_C(0xdeadc0de), .zpermit_unseal = false, .zpermit_store_local_cap = false, .zpermit_store_cap = false, .zpermit_store = false, .zpermit_set_CID = false, .zpermit_seal = false, .zpermit_load_cap = false, .zpermit_load = false, .zpermit_execute = false, .zpermit_cinvoke = false, .zotype = UINT64_C(0xdeadc0de), .zinternal_E = false, .zglobal = false, .zflag_cap_mode = false, .zaddress = UINT64_C(0xdeadc0de), .zaccess_system_regs = false, .zT = UINT64_C(0xdeadc0de), .zE = UINT64_C(0xdeadc0de), .zB = UINT64_C(0xdeadc0de) };
+ return zcbz364;
+}
+
+// struct tuple_(%bv32, %bv33)
+struct ztuple_z8z5bv32zCz0z5bv33z9 {
+ uint64_t ztup0;
+ uint64_t ztup1;
+};
+
+static void COPY(ztuple_z8z5bv32zCz0z5bv33z9)(struct ztuple_z8z5bv32zCz0z5bv33z9 *rop, const struct ztuple_z8z5bv32zCz0z5bv33z9 op) {
+ rop->ztup0 = op.ztup0;
+ rop->ztup1 = op.ztup1;
+}
+
+static bool EQUAL(ztuple_z8z5bv32zCz0z5bv33z9)(struct ztuple_z8z5bv32zCz0z5bv33z9 op1, struct ztuple_z8z5bv32zCz0z5bv33z9 op2) {
+ return EQUAL(fbits)(op1.ztup0, op2.ztup0) && EQUAL(fbits)(op1.ztup1, op2.ztup1);
+}
+
+static struct ztuple_z8z5bv32zCz0z5bv33z9 sailgen_getCapBoundsBits(struct zCapability);
+
+static struct ztuple_z8z5bv32zCz0z5bv33z9 sailgen_getCapBoundsBits(struct zCapability zc)
+{
+ __label__ end_function_168, end_block_exception_169;
+
+ struct ztuple_z8z5bv32zCz0z5bv33z9 zcbz342;
+ int64_t zE;
+ {
+ int64_t zgaz3248;
+ {
+ uint64_t zgaz3247;
+ zgaz3247 = zc.zE;
+ zgaz3248 = ((mach_int) zgaz3247);
+
+ }
+ {
+ sail_int zgsz3392;
+ CREATE(sail_int)(&zgsz3392);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3392, zcap_max_E);
+ sail_int zgsz3393;
+ CREATE(sail_int)(&zgsz3393);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3393, zgaz3248);
+ sail_int zgsz3394;
+ CREATE(sail_int)(&zgsz3394);
+ min_int(&zgsz3394, zgsz3392, zgsz3393);
+ zE = CONVERT_OF(mach_int, sail_int)(zgsz3394);
+ KILL(sail_int)(&zgsz3394);
+ KILL(sail_int)(&zgsz3393);
+ KILL(sail_int)(&zgsz3392);
+ }
+
+ }
+ uint64_t za;
+ za = zc.zaddress;
+ uint64_t za3;
+ {
+ uint64_t zgaz3246;
+ {
+ int64_t zgaz3245;
+ {
+ int64_t zgaz3244;
+ {
+ sail_int zgsz3395;
+ CREATE(sail_int)(&zgsz3395);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3395, zE);
+ sail_int zgsz3396;
+ CREATE(sail_int)(&zgsz3396);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3396, zcap_mantissa_width);
+ sail_int zgsz3397;
+ CREATE(sail_int)(&zgsz3397);
+ add_int(&zgsz3397, zgsz3395, zgsz3396);
+ zgaz3244 = CONVERT_OF(mach_int, sail_int)(zgsz3397);
+ KILL(sail_int)(&zgsz3397);
+ KILL(sail_int)(&zgsz3396);
+ KILL(sail_int)(&zgsz3395);
+ }
+ {
+ sail_int zgsz3398;
+ CREATE(sail_int)(&zgsz3398);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3398, zgaz3244);
+ sail_int zgsz3399;
+ CREATE(sail_int)(&zgsz3399);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3399, INT64_C(3));
+ sail_int zgsz3400;
+ CREATE(sail_int)(&zgsz3400);
+ sub_int(&zgsz3400, zgsz3398, zgsz3399);
+ zgaz3245 = CONVERT_OF(mach_int, sail_int)(zgsz3400);
+ KILL(sail_int)(&zgsz3400);
+ KILL(sail_int)(&zgsz3399);
+ KILL(sail_int)(&zgsz3398);
+ }
+
+ }
+ {
+ lbits zgsz3401;
+ CREATE(lbits)(&zgsz3401);
+ CONVERT_OF(lbits, fbits)(&zgsz3401, za, UINT64_C(32) , true);
+ sail_int zgsz3402;
+ CREATE(sail_int)(&zgsz3402);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3402, zgaz3245);
+ lbits zgsz3403;
+ CREATE(lbits)(&zgsz3403);
+ shiftr(&zgsz3403, zgsz3401, zgsz3402);
+ zgaz3246 = CONVERT_OF(fbits, lbits)(zgsz3403, true);
+ KILL(lbits)(&zgsz3403);
+ KILL(sail_int)(&zgsz3402);
+ KILL(lbits)(&zgsz3401);
+ }
+
+ }
+ {
+ lbits zgsz3404;
+ CREATE(lbits)(&zgsz3404);
+ CONVERT_OF(lbits, fbits)(&zgsz3404, zgaz3246, UINT64_C(32) , true);
+ sail_int zgsz3405;
+ CREATE(sail_int)(&zgsz3405);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3405, INT64_C(3));
+ lbits zgsz3406;
+ CREATE(lbits)(&zgsz3406);
+ sail_truncate(&zgsz3406, zgsz3404, zgsz3405);
+ za3 = CONVERT_OF(fbits, lbits)(zgsz3406, true);
+ KILL(lbits)(&zgsz3406);
+ KILL(sail_int)(&zgsz3405);
+ KILL(lbits)(&zgsz3404);
+ }
+
+ }
+ uint64_t zB3;
+ {
+ uint64_t zgaz3243;
+ zgaz3243 = zc.zB;
+ {
+ lbits zgsz3407;
+ CREATE(lbits)(&zgsz3407);
+ CONVERT_OF(lbits, fbits)(&zgsz3407, zgaz3243, UINT64_C(8) , true);
+ sail_int zgsz3408;
+ CREATE(sail_int)(&zgsz3408);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3408, INT64_C(3));
+ lbits zgsz3409;
+ CREATE(lbits)(&zgsz3409);
+ sail_truncateLSB(&zgsz3409, zgsz3407, zgsz3408);
+ zB3 = CONVERT_OF(fbits, lbits)(zgsz3409, true);
+ KILL(lbits)(&zgsz3409);
+ KILL(sail_int)(&zgsz3408);
+ KILL(lbits)(&zgsz3407);
+ }
+
+ }
+ uint64_t zT3;
+ {
+ uint64_t zgaz3242;
+ zgaz3242 = zc.zT;
+ {
+ lbits zgsz3410;
+ CREATE(lbits)(&zgsz3410);
+ CONVERT_OF(lbits, fbits)(&zgsz3410, zgaz3242, UINT64_C(8) , true);
+ sail_int zgsz3411;
+ CREATE(sail_int)(&zgsz3411);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3411, INT64_C(3));
+ lbits zgsz3412;
+ CREATE(lbits)(&zgsz3412);
+ sail_truncateLSB(&zgsz3412, zgsz3410, zgsz3411);
+ zT3 = CONVERT_OF(fbits, lbits)(zgsz3412, true);
+ KILL(lbits)(&zgsz3412);
+ KILL(sail_int)(&zgsz3411);
+ KILL(lbits)(&zgsz3410);
+ }
+
+ }
+ uint64_t zR3;
+ {
+ lbits zgsz3413;
+ CREATE(lbits)(&zgsz3413);
+ CONVERT_OF(lbits, fbits)(&zgsz3413, zB3, UINT64_C(3) , true);
+ lbits zgsz3414;
+ CREATE(lbits)(&zgsz3414);
+ CONVERT_OF(lbits, fbits)(&zgsz3414, UINT64_C(0b001), UINT64_C(3) , true);
+ lbits zgsz3415;
+ CREATE(lbits)(&zgsz3415);
+ sub_bits(&zgsz3415, zgsz3413, zgsz3414);
+ zR3 = CONVERT_OF(fbits, lbits)(zgsz3415, true);
+ KILL(lbits)(&zgsz3415);
+ KILL(lbits)(&zgsz3414);
+ KILL(lbits)(&zgsz3413);
+ }
+ int64_t zaHi;
+ {
+ bool zgaz3241;
+ zgaz3241 = sailgen_z8operatorz0zzzz7nzzJzzK3z3zI_uz9(za3, zR3);
+ if (zgaz3241) { zaHi = INT64_C(1); } else { zaHi = INT64_C(0); }
+
+ }
+ int64_t zbHi;
+ {
+ bool zgaz3240;
+ zgaz3240 = sailgen_z8operatorz0zzzz7nzzJzzK3z3zI_uz9(zB3, zR3);
+ if (zgaz3240) { zbHi = INT64_C(1); } else { zbHi = INT64_C(0); }
+
+ }
+ int64_t ztHi;
+ {
+ bool zgaz3239;
+ zgaz3239 = sailgen_z8operatorz0zzzz7nzzJzzK3z3zI_uz9(zT3, zR3);
+ if (zgaz3239) { ztHi = INT64_C(1); } else { ztHi = INT64_C(0); }
+
+ }
+ int64_t zcorrection_base;
+ {
+ sail_int zgsz3416;
+ CREATE(sail_int)(&zgsz3416);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3416, zbHi);
+ sail_int zgsz3417;
+ CREATE(sail_int)(&zgsz3417);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3417, zaHi);
+ sail_int zgsz3418;
+ CREATE(sail_int)(&zgsz3418);
+ sub_int(&zgsz3418, zgsz3416, zgsz3417);
+ zcorrection_base = CONVERT_OF(mach_int, sail_int)(zgsz3418);
+ KILL(sail_int)(&zgsz3418);
+ KILL(sail_int)(&zgsz3417);
+ KILL(sail_int)(&zgsz3416);
+ }
+ int64_t zcorrection_top;
+ {
+ sail_int zgsz3419;
+ CREATE(sail_int)(&zgsz3419);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3419, ztHi);
+ sail_int zgsz3420;
+ CREATE(sail_int)(&zgsz3420);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3420, zaHi);
+ sail_int zgsz3421;
+ CREATE(sail_int)(&zgsz3421);
+ sub_int(&zgsz3421, zgsz3419, zgsz3420);
+ zcorrection_top = CONVERT_OF(mach_int, sail_int)(zgsz3421);
+ KILL(sail_int)(&zgsz3421);
+ KILL(sail_int)(&zgsz3420);
+ KILL(sail_int)(&zgsz3419);
+ }
+ uint64_t za_top;
+ {
+ int64_t zgaz3238;
+ {
+ sail_int zgsz3422;
+ CREATE(sail_int)(&zgsz3422);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3422, zE);
+ sail_int zgsz3423;
+ CREATE(sail_int)(&zgsz3423);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3423, zcap_mantissa_width);
+ sail_int zgsz3424;
+ CREATE(sail_int)(&zgsz3424);
+ add_int(&zgsz3424, zgsz3422, zgsz3423);
+ zgaz3238 = CONVERT_OF(mach_int, sail_int)(zgsz3424);
+ KILL(sail_int)(&zgsz3424);
+ KILL(sail_int)(&zgsz3423);
+ KILL(sail_int)(&zgsz3422);
+ }
+ {
+ lbits zgsz3425;
+ CREATE(lbits)(&zgsz3425);
+ CONVERT_OF(lbits, fbits)(&zgsz3425, za, UINT64_C(32) , true);
+ sail_int zgsz3426;
+ CREATE(sail_int)(&zgsz3426);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3426, zgaz3238);
+ lbits zgsz3427;
+ CREATE(lbits)(&zgsz3427);
+ shiftr(&zgsz3427, zgsz3425, zgsz3426);
+ za_top = CONVERT_OF(fbits, lbits)(zgsz3427, true);
+ KILL(lbits)(&zgsz3427);
+ KILL(sail_int)(&zgsz3426);
+ KILL(lbits)(&zgsz3425);
+ }
+
+ }
+ uint64_t zbase;
+ {
+ lbits zgaz3237;
+ CREATE(lbits)(&zgaz3237);
+ {
+ uint64_t zgaz3235;
+ {
+ lbits zgsz3428;
+ CREATE(lbits)(&zgsz3428);
+ CONVERT_OF(lbits, fbits)(&zgsz3428, za_top, UINT64_C(32) , true);
+ sail_int zgsz3429;
+ CREATE(sail_int)(&zgsz3429);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3429, zcorrection_base);
+ lbits zgsz3430;
+ CREATE(lbits)(&zgsz3430);
+ add_bits_int(&zgsz3430, zgsz3428, zgsz3429);
+ zgaz3235 = CONVERT_OF(fbits, lbits)(zgsz3430, true);
+ KILL(lbits)(&zgsz3430);
+ KILL(sail_int)(&zgsz3429);
+ KILL(lbits)(&zgsz3428);
+ }
+ sbits zgaz3236;
+ {
+ uint64_t zgaz3233;
+ zgaz3233 = zc.zB;
+ sbits zgaz3234;
+ {
+ sail_int zgsz3431;
+ CREATE(sail_int)(&zgsz3431);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3431, zE);
+ lbits zgsz3432;
+ CREATE(lbits)(&zgsz3432);
+ sailgen_zzz3zzz3zzeros_implicit(&zgsz3432, zgsz3431);
+ zgaz3234 = CONVERT_OF(sbits, lbits)(zgsz3432, true);
+ KILL(lbits)(&zgsz3432);
+ KILL(sail_int)(&zgsz3431);
+ }
+ {
+ lbits zgsz3433;
+ CREATE(lbits)(&zgsz3433);
+ CONVERT_OF(lbits, fbits)(&zgsz3433, zgaz3233, UINT64_C(8) , true);
+ lbits zgsz3434;
+ CREATE(lbits)(&zgsz3434);
+ CONVERT_OF(lbits, sbits)(&zgsz3434, zgaz3234, true);
+ lbits zgsz3435;
+ CREATE(lbits)(&zgsz3435);
+ append(&zgsz3435, zgsz3433, zgsz3434);
+ zgaz3236 = CONVERT_OF(sbits, lbits)(zgsz3435, true);
+ KILL(lbits)(&zgsz3435);
+ KILL(lbits)(&zgsz3434);
+ KILL(lbits)(&zgsz3433);
+ }
+
+
+ }
+ {
+ lbits zgsz3437;
+ CREATE(lbits)(&zgsz3437);
+ CONVERT_OF(lbits, sbits)(&zgsz3437, zgaz3236, true);
+ lbits zgsz3436;
+ CREATE(lbits)(&zgsz3436);
+ CONVERT_OF(lbits, fbits)(&zgsz3436, zgaz3235, UINT64_C(32) , true);
+ append(&zgaz3237, zgsz3436, zgsz3437);
+ KILL(lbits)(&zgsz3437);
+ KILL(lbits)(&zgsz3436);
+ }
+
+
+ }
+ {
+ sail_int zgsz3438;
+ CREATE(sail_int)(&zgsz3438);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3438, zcap_len_width);
+ lbits zgsz3439;
+ CREATE(lbits)(&zgsz3439);
+ sail_truncate(&zgsz3439, zgaz3237, zgsz3438);
+ zbase = CONVERT_OF(fbits, lbits)(zgsz3439, true);
+ KILL(lbits)(&zgsz3439);
+ KILL(sail_int)(&zgsz3438);
+ }
+ KILL(lbits)(&zgaz3237);
+ }
+ uint64_t ztop;
+ {
+ lbits zgaz3232;
+ CREATE(lbits)(&zgaz3232);
+ {
+ uint64_t zgaz3230;
+ {
+ lbits zgsz3440;
+ CREATE(lbits)(&zgsz3440);
+ CONVERT_OF(lbits, fbits)(&zgsz3440, za_top, UINT64_C(32) , true);
+ sail_int zgsz3441;
+ CREATE(sail_int)(&zgsz3441);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3441, zcorrection_top);
+ lbits zgsz3442;
+ CREATE(lbits)(&zgsz3442);
+ add_bits_int(&zgsz3442, zgsz3440, zgsz3441);
+ zgaz3230 = CONVERT_OF(fbits, lbits)(zgsz3442, true);
+ KILL(lbits)(&zgsz3442);
+ KILL(sail_int)(&zgsz3441);
+ KILL(lbits)(&zgsz3440);
+ }
+ sbits zgaz3231;
+ {
+ uint64_t zgaz3228;
+ zgaz3228 = zc.zT;
+ sbits zgaz3229;
+ {
+ sail_int zgsz3443;
+ CREATE(sail_int)(&zgsz3443);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3443, zE);
+ lbits zgsz3444;
+ CREATE(lbits)(&zgsz3444);
+ sailgen_zzz3zzz3zzeros_implicit(&zgsz3444, zgsz3443);
+ zgaz3229 = CONVERT_OF(sbits, lbits)(zgsz3444, true);
+ KILL(lbits)(&zgsz3444);
+ KILL(sail_int)(&zgsz3443);
+ }
+ {
+ lbits zgsz3445;
+ CREATE(lbits)(&zgsz3445);
+ CONVERT_OF(lbits, fbits)(&zgsz3445, zgaz3228, UINT64_C(8) , true);
+ lbits zgsz3446;
+ CREATE(lbits)(&zgsz3446);
+ CONVERT_OF(lbits, sbits)(&zgsz3446, zgaz3229, true);
+ lbits zgsz3447;
+ CREATE(lbits)(&zgsz3447);
+ append(&zgsz3447, zgsz3445, zgsz3446);
+ zgaz3231 = CONVERT_OF(sbits, lbits)(zgsz3447, true);
+ KILL(lbits)(&zgsz3447);
+ KILL(lbits)(&zgsz3446);
+ KILL(lbits)(&zgsz3445);
+ }
+
+
+ }
+ {
+ lbits zgsz3449;
+ CREATE(lbits)(&zgsz3449);
+ CONVERT_OF(lbits, sbits)(&zgsz3449, zgaz3231, true);
+ lbits zgsz3448;
+ CREATE(lbits)(&zgsz3448);
+ CONVERT_OF(lbits, fbits)(&zgsz3448, zgaz3230, UINT64_C(32) , true);
+ append(&zgaz3232, zgsz3448, zgsz3449);
+ KILL(lbits)(&zgsz3449);
+ KILL(lbits)(&zgsz3448);
+ }
+
+
+ }
+ {
+ sail_int zgsz3450;
+ CREATE(sail_int)(&zgsz3450);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3450, zcap_len_width);
+ lbits zgsz3451;
+ CREATE(lbits)(&zgsz3451);
+ sail_truncate(&zgsz3451, zgaz3232, zgsz3450);
+ ztop = CONVERT_OF(fbits, lbits)(zgsz3451, true);
+ KILL(lbits)(&zgsz3451);
+ KILL(sail_int)(&zgsz3450);
+ }
+ KILL(lbits)(&zgaz3232);
+ }
+ uint64_t zbase2;
+ {
+ uint64_t zgaz3227;
+ {
+ fbits zgaz3226;
+ {
+ int64_t zgaz3225;
+ {
+ sail_int zgsz3452;
+ CREATE(sail_int)(&zgsz3452);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3452, zcap_addr_width);
+ sail_int zgsz3453;
+ CREATE(sail_int)(&zgsz3453);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3453, INT64_C(1));
+ sail_int zgsz3454;
+ CREATE(sail_int)(&zgsz3454);
+ sub_int(&zgsz3454, zgsz3452, zgsz3453);
+ zgaz3225 = CONVERT_OF(mach_int, sail_int)(zgsz3454);
+ KILL(sail_int)(&zgsz3454);
+ KILL(sail_int)(&zgsz3453);
+ KILL(sail_int)(&zgsz3452);
+ }
+ {
+ sail_int zgsz3456;
+ CREATE(sail_int)(&zgsz3456);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3456, zgaz3225);
+ lbits zgsz3455;
+ CREATE(lbits)(&zgsz3455);
+ CONVERT_OF(lbits, fbits)(&zgsz3455, zbase, UINT64_C(33) , true);
+ zgaz3226 = bitvector_access(zgsz3455, zgsz3456);
+ KILL(sail_int)(&zgsz3456);
+ KILL(lbits)(&zgsz3455);
+ }
+
+ }
+ uint64_t zgsz3457;
+ zgsz3457 = UINT64_C(0b0);
+ zgsz3457 = update_fbits(zgsz3457, INT64_C(0), zgaz3226);
+ zgaz3227 = zgsz3457;
+
+ }
+ {
+ lbits zgsz3458;
+ CREATE(lbits)(&zgsz3458);
+ CONVERT_OF(lbits, fbits)(&zgsz3458, UINT64_C(0b0), UINT64_C(1) , true);
+ lbits zgsz3459;
+ CREATE(lbits)(&zgsz3459);
+ CONVERT_OF(lbits, fbits)(&zgsz3459, zgaz3227, UINT64_C(1) , true);
+ lbits zgsz3460;
+ CREATE(lbits)(&zgsz3460);
+ append(&zgsz3460, zgsz3458, zgsz3459);
+ zbase2 = CONVERT_OF(fbits, lbits)(zgsz3460, true);
+ KILL(lbits)(&zgsz3460);
+ KILL(lbits)(&zgsz3459);
+ KILL(lbits)(&zgsz3458);
+ }
+
+ }
+ uint64_t ztop2;
+ {
+ int64_t zgaz3224;
+ {
+ sail_int zgsz3461;
+ CREATE(sail_int)(&zgsz3461);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3461, zcap_addr_width);
+ sail_int zgsz3462;
+ CREATE(sail_int)(&zgsz3462);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3462, INT64_C(1));
+ sail_int zgsz3463;
+ CREATE(sail_int)(&zgsz3463);
+ sub_int(&zgsz3463, zgsz3461, zgsz3462);
+ zgaz3224 = CONVERT_OF(mach_int, sail_int)(zgsz3463);
+ KILL(sail_int)(&zgsz3463);
+ KILL(sail_int)(&zgsz3462);
+ KILL(sail_int)(&zgsz3461);
+ }
+ {
+ lbits zgsz3464;
+ CREATE(lbits)(&zgsz3464);
+ CONVERT_OF(lbits, fbits)(&zgsz3464, ztop, UINT64_C(33) , true);
+ sail_int zgsz3465;
+ CREATE(sail_int)(&zgsz3465);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3465, zcap_addr_width);
+ sail_int zgsz3466;
+ CREATE(sail_int)(&zgsz3466);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3466, zgaz3224);
+ lbits zgsz3467;
+ CREATE(lbits)(&zgsz3467);
+ vector_subrange_lbits(&zgsz3467, zgsz3464, zgsz3465, zgsz3466);
+ ztop2 = CONVERT_OF(fbits, lbits)(zgsz3467, true);
+ KILL(lbits)(&zgsz3467);
+ KILL(sail_int)(&zgsz3466);
+ KILL(sail_int)(&zgsz3465);
+ KILL(lbits)(&zgsz3464);
+ }
+
+ }
+ {
+ bool zgaz3219;
+ {
+ bool zgaz3218;
+ {
+ int64_t zgaz3215;
+ {
+ sail_int zgsz3468;
+ CREATE(sail_int)(&zgsz3468);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3468, zcap_max_E);
+ sail_int zgsz3469;
+ CREATE(sail_int)(&zgsz3469);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3469, INT64_C(1));
+ sail_int zgsz3470;
+ CREATE(sail_int)(&zgsz3470);
+ sub_int(&zgsz3470, zgsz3468, zgsz3469);
+ zgaz3215 = CONVERT_OF(mach_int, sail_int)(zgsz3470);
+ KILL(sail_int)(&zgsz3470);
+ KILL(sail_int)(&zgsz3469);
+ KILL(sail_int)(&zgsz3468);
+ }
+ {
+ sail_int zgsz3472;
+ CREATE(sail_int)(&zgsz3472);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3472, zgaz3215);
+ sail_int zgsz3471;
+ CREATE(sail_int)(&zgsz3471);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3471, zE);
+ zgaz3218 = lt(zgsz3471, zgsz3472);
+ KILL(sail_int)(&zgsz3472);
+ KILL(sail_int)(&zgsz3471);
+ }
+
+ }
+ bool zgsz3476;
+ if (zgaz3218) {
+ int64_t zgaz3217;
+ {
+ uint64_t zgaz3216;
+ {
+ lbits zgsz3473;
+ CREATE(lbits)(&zgsz3473);
+ CONVERT_OF(lbits, fbits)(&zgsz3473, ztop2, UINT64_C(2) , true);
+ lbits zgsz3474;
+ CREATE(lbits)(&zgsz3474);
+ CONVERT_OF(lbits, fbits)(&zgsz3474, zbase2, UINT64_C(2) , true);
+ lbits zgsz3475;
+ CREATE(lbits)(&zgsz3475);
+ sub_bits(&zgsz3475, zgsz3473, zgsz3474);
+ zgaz3216 = CONVERT_OF(fbits, lbits)(zgsz3475, true);
+ KILL(lbits)(&zgsz3475);
+ KILL(lbits)(&zgsz3474);
+ KILL(lbits)(&zgsz3473);
+ }
+ zgaz3217 = ((mach_int) zgaz3216);
+
+ }
+ {
+ sail_int zgsz3478;
+ CREATE(sail_int)(&zgsz3478);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3478, INT64_C(1));
+ sail_int zgsz3477;
+ CREATE(sail_int)(&zgsz3477);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3477, zgaz3217);
+ zgsz3476 = gt(zgsz3477, zgsz3478);
+ KILL(sail_int)(&zgsz3478);
+ KILL(sail_int)(&zgsz3477);
+ }
+
+ } else { zgsz3476 = false; }
+ zgaz3219 = zgsz3476;
+
+ }
+ unit zgsz3479;
+ if (zgaz3219) {
+ fbits zgaz3221;
+ {
+ fbits zgaz3220;
+ {
+ sail_int zgsz3481;
+ CREATE(sail_int)(&zgsz3481);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3481, zcap_addr_width);
+ lbits zgsz3480;
+ CREATE(lbits)(&zgsz3480);
+ CONVERT_OF(lbits, fbits)(&zgsz3480, ztop, UINT64_C(33) , true);
+ zgaz3220 = bitvector_access(zgsz3480, zgsz3481);
+ KILL(sail_int)(&zgsz3481);
+ KILL(lbits)(&zgsz3480);
+ }
+ zgaz3221 = sailgen_not_bit(zgaz3220);
+
+ }
+ {
+ lbits zgsz3482;
+ CREATE(lbits)(&zgsz3482);
+ CONVERT_OF(lbits, fbits)(&zgsz3482, ztop, UINT64_C(33) , true);
+ sail_int zgsz3483;
+ CREATE(sail_int)(&zgsz3483);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3483, zcap_addr_width);
+ lbits zgsz3484;
+ CREATE(lbits)(&zgsz3484);
+ update_lbits(&zgsz3484, zgsz3482, zgsz3483, zgaz3221);
+ ztop = CONVERT_OF(fbits, lbits)(zgsz3484, true);
+ KILL(lbits)(&zgsz3484);
+ KILL(sail_int)(&zgsz3483);
+ KILL(lbits)(&zgsz3482);
+ }
+ zgsz3479 = UNIT;
+
+ } else { zgsz3479 = UNIT; }
+
+ }
+ uint64_t zgaz3223;
+ {
+ int64_t zgaz3222;
+ {
+ sail_int zgsz3485;
+ CREATE(sail_int)(&zgsz3485);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3485, zcap_addr_width);
+ sail_int zgsz3486;
+ CREATE(sail_int)(&zgsz3486);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3486, INT64_C(1));
+ sail_int zgsz3487;
+ CREATE(sail_int)(&zgsz3487);
+ sub_int(&zgsz3487, zgsz3485, zgsz3486);
+ zgaz3222 = CONVERT_OF(mach_int, sail_int)(zgsz3487);
+ KILL(sail_int)(&zgsz3487);
+ KILL(sail_int)(&zgsz3486);
+ KILL(sail_int)(&zgsz3485);
+ }
+ {
+ lbits zgsz3488;
+ CREATE(lbits)(&zgsz3488);
+ CONVERT_OF(lbits, fbits)(&zgsz3488, zbase, UINT64_C(33) , true);
+ sail_int zgsz3489;
+ CREATE(sail_int)(&zgsz3489);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3489, zgaz3222);
+ sail_int zgsz3490;
+ CREATE(sail_int)(&zgsz3490);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3490, INT64_C(0));
+ lbits zgsz3491;
+ CREATE(lbits)(&zgsz3491);
+ vector_subrange_lbits(&zgsz3491, zgsz3488, zgsz3489, zgsz3490);
+ zgaz3223 = CONVERT_OF(fbits, lbits)(zgsz3491, true);
+ KILL(lbits)(&zgsz3491);
+ KILL(sail_int)(&zgsz3490);
+ KILL(sail_int)(&zgsz3489);
+ KILL(lbits)(&zgsz3488);
+ }
+
+ }
+ struct ztuple_z8z5bv32zCz0z5bv33z9 zgsz3492;
+ zgsz3492.ztup0 = zgaz3223;
+ zgsz3492.ztup1 = ztop;
+ zcbz342 = zgsz3492;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+end_function_168: ;
+ return zcbz342;
+end_block_exception_169: ;
+ struct ztuple_z8z5bv32zCz0z5bv33z9 zcbz365 = { .ztup1 = UINT64_C(0xdeadc0de), .ztup0 = UINT64_C(0xdeadc0de) };
+ return zcbz365;
+}
+
+// struct tuple_(%i64, %i64)
+struct ztuple_z8z5i64zCz0z5i64z9 {
+ int64_t ztup0;
+ int64_t ztup1;
+};
+
+static void COPY(ztuple_z8z5i64zCz0z5i64z9)(struct ztuple_z8z5i64zCz0z5i64z9 *rop, const struct ztuple_z8z5i64zCz0z5i64z9 op) {
+ rop->ztup0 = op.ztup0;
+ rop->ztup1 = op.ztup1;
+}
+
+static bool EQUAL(ztuple_z8z5i64zCz0z5i64z9)(struct ztuple_z8z5i64zCz0z5i64z9 op1, struct ztuple_z8z5i64zCz0z5i64z9 op2) {
+ return EQUAL(mach_int)(op1.ztup0, op2.ztup0) && EQUAL(mach_int)(op1.ztup1, op2.ztup1);
+}
+
+static struct ztuple_z8z5i64zCz0z5i64z9 sailgen_getCapBounds(struct zCapability);
+
+
+static struct ztuple_z8z5i64zCz0z5i64z9 sailgen_getCapBounds(struct zCapability zcap)
+{
+ __label__ case_172, finish_match_171, end_function_173, end_block_exception_174;
+
+ struct ztuple_z8z5i64zCz0z5i64z9 zcbz343;
+ struct ztuple_z8z5bv32zCz0z5bv33z9 zgaz3249;
+ zgaz3249 = sailgen_getCapBoundsBits(zcap);
+ struct ztuple_z8z5i64zCz0z5i64z9 zgsz3493;
+ {
+ uint64_t zbase;
+ zbase = zgaz3249.ztup0;
+ uint64_t ztop;
+ ztop = zgaz3249.ztup1;
+ int64_t zgaz3250;
+ zgaz3250 = ((mach_int) zbase);
+ int64_t zgaz3251;
+ zgaz3251 = ((mach_int) ztop);
+ struct ztuple_z8z5i64zCz0z5i64z9 zgsz3494;
+ zgsz3494.ztup0 = zgaz3250;
+ zgsz3494.ztup1 = zgaz3251;
+ zgsz3493 = zgsz3494;
+
+
+
+
+
+ goto finish_match_171;
+ }
+case_172: ;
+ sail_match_failure("getCapBounds");
+finish_match_171: ;
+ zcbz343 = zgsz3493;
+
+
+end_function_173: ;
+ return zcbz343;
+end_block_exception_174: ;
+ struct ztuple_z8z5i64zCz0z5i64z9 zcbz366 = { .ztup1 = INT64_C(0xdeadc0de), .ztup0 = INT64_C(0xdeadc0de) };
+ return zcbz366;
+}
+
+// struct tuple_(%bool, %struct zCapability)
+struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 {
+ bool ztup0;
+ struct zCapability ztup1;
+};
+
+static void COPY(ztuple_z8z5boolzCz0z5structz0zzCapabilityz9)(struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 *rop, const struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 op) {
+ rop->ztup0 = op.ztup0;
+ rop->ztup1 = op.ztup1;
+}
+
+static bool EQUAL(ztuple_z8z5boolzCz0z5structz0zzCapabilityz9)(struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 op1, struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 op2) {
+ return EQUAL(bool)(op1.ztup0, op2.ztup0) && EQUAL(zCapability)(op1.ztup1, op2.ztup1);
+}
+
+static struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 sailgen_setCapBounds(struct zCapability, uint64_t, uint64_t);
+
+static struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 sailgen_setCapBounds(struct zCapability zcap, uint64_t zbase, uint64_t ztop)
+{
+ __label__ end_function_176, end_block_exception_177;
+
+ struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 zcbz344;
+ uint64_t zext_base;
+ {
+ lbits zgsz3496;
+ CREATE(lbits)(&zgsz3496);
+ CONVERT_OF(lbits, fbits)(&zgsz3496, UINT64_C(0b0), UINT64_C(1) , true);
+ lbits zgsz3497;
+ CREATE(lbits)(&zgsz3497);
+ CONVERT_OF(lbits, fbits)(&zgsz3497, zbase, UINT64_C(32) , true);
+ lbits zgsz3498;
+ CREATE(lbits)(&zgsz3498);
+ append(&zgsz3498, zgsz3496, zgsz3497);
+ zext_base = CONVERT_OF(fbits, lbits)(zgsz3498, true);
+ KILL(lbits)(&zgsz3498);
+ KILL(lbits)(&zgsz3497);
+ KILL(lbits)(&zgsz3496);
+ }
+ uint64_t zlength;
+ {
+ lbits zgsz3499;
+ CREATE(lbits)(&zgsz3499);
+ CONVERT_OF(lbits, fbits)(&zgsz3499, ztop, UINT64_C(33) , true);
+ lbits zgsz3500;
+ CREATE(lbits)(&zgsz3500);
+ CONVERT_OF(lbits, fbits)(&zgsz3500, zext_base, UINT64_C(33) , true);
+ lbits zgsz3501;
+ CREATE(lbits)(&zgsz3501);
+ sub_bits(&zgsz3501, zgsz3499, zgsz3500);
+ zlength = CONVERT_OF(fbits, lbits)(zgsz3501, true);
+ KILL(lbits)(&zgsz3501);
+ KILL(lbits)(&zgsz3500);
+ KILL(lbits)(&zgsz3499);
+ }
+ int64_t ze;
+ {
+ int64_t zgaz3285;
+ {
+ uint64_t zgaz3284;
+ {
+ int64_t zgaz3283;
+ {
+ sail_int zgsz3502;
+ CREATE(sail_int)(&zgsz3502);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3502, zcap_mantissa_width);
+ sail_int zgsz3503;
+ CREATE(sail_int)(&zgsz3503);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3503, INT64_C(1));
+ sail_int zgsz3504;
+ CREATE(sail_int)(&zgsz3504);
+ sub_int(&zgsz3504, zgsz3502, zgsz3503);
+ zgaz3283 = CONVERT_OF(mach_int, sail_int)(zgsz3504);
+ KILL(sail_int)(&zgsz3504);
+ KILL(sail_int)(&zgsz3503);
+ KILL(sail_int)(&zgsz3502);
+ }
+ {
+ lbits zgsz3505;
+ CREATE(lbits)(&zgsz3505);
+ CONVERT_OF(lbits, fbits)(&zgsz3505, zlength, UINT64_C(33) , true);
+ sail_int zgsz3506;
+ CREATE(sail_int)(&zgsz3506);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3506, zcap_addr_width);
+ sail_int zgsz3507;
+ CREATE(sail_int)(&zgsz3507);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3507, zgaz3283);
+ lbits zgsz3508;
+ CREATE(lbits)(&zgsz3508);
+ vector_subrange_lbits(&zgsz3508, zgsz3505, zgsz3506, zgsz3507);
+ zgaz3284 = CONVERT_OF(fbits, lbits)(zgsz3508, true);
+ KILL(lbits)(&zgsz3508);
+ KILL(sail_int)(&zgsz3507);
+ KILL(sail_int)(&zgsz3506);
+ KILL(lbits)(&zgsz3505);
+ }
+
+ }
+ {
+ lbits zgsz3509;
+ CREATE(lbits)(&zgsz3509);
+ CONVERT_OF(lbits, fbits)(&zgsz3509, zgaz3284, UINT64_C(26) , true);
+ sail_int zgsz3510;
+ CREATE(sail_int)(&zgsz3510);
+ count_leading_zeros(&zgsz3510, zgsz3509);
+ zgaz3285 = CONVERT_OF(mach_int, sail_int)(zgsz3510);
+ KILL(sail_int)(&zgsz3510);
+ KILL(lbits)(&zgsz3509);
+ }
+
+ }
+ {
+ sail_int zgsz3511;
+ CREATE(sail_int)(&zgsz3511);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3511, zcap_max_E);
+ sail_int zgsz3512;
+ CREATE(sail_int)(&zgsz3512);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3512, zgaz3285);
+ sail_int zgsz3513;
+ CREATE(sail_int)(&zgsz3513);
+ sub_int(&zgsz3513, zgsz3511, zgsz3512);
+ ze = CONVERT_OF(mach_int, sail_int)(zgsz3513);
+ KILL(sail_int)(&zgsz3513);
+ KILL(sail_int)(&zgsz3512);
+ KILL(sail_int)(&zgsz3511);
+ }
+
+ }
+ bool zie;
+ {
+ bool zgaz3282;
+ {
+ sail_int zgsz3514;
+ CREATE(sail_int)(&zgsz3514);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3514, ze);
+ zgaz3282 = sailgen_zzz3zzzz7mzzJzzK0z3neq_int(zgsz3514, INT64_C(0));
+ KILL(sail_int)(&zgsz3514);
+ }
+ bool zgsz3520;
+ if (zgaz3282) { zgsz3520 = true; } else {
+ fbits zgaz3281;
+ {
+ int64_t zgaz3280;
+ {
+ sail_int zgsz3515;
+ CREATE(sail_int)(&zgsz3515);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3515, zcap_mantissa_width);
+ sail_int zgsz3516;
+ CREATE(sail_int)(&zgsz3516);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3516, INT64_C(2));
+ sail_int zgsz3517;
+ CREATE(sail_int)(&zgsz3517);
+ sub_int(&zgsz3517, zgsz3515, zgsz3516);
+ zgaz3280 = CONVERT_OF(mach_int, sail_int)(zgsz3517);
+ KILL(sail_int)(&zgsz3517);
+ KILL(sail_int)(&zgsz3516);
+ KILL(sail_int)(&zgsz3515);
+ }
+ {
+ sail_int zgsz3519;
+ CREATE(sail_int)(&zgsz3519);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3519, zgaz3280);
+ lbits zgsz3518;
+ CREATE(lbits)(&zgsz3518);
+ CONVERT_OF(lbits, fbits)(&zgsz3518, zlength, UINT64_C(33) , true);
+ zgaz3281 = bitvector_access(zgsz3518, zgsz3519);
+ KILL(sail_int)(&zgsz3519);
+ KILL(lbits)(&zgsz3518);
+ }
+
+ }
+ zgsz3520 = eq_bit(zgaz3281, UINT64_C(1));
+
+ }
+ zie = zgsz3520;
+
+ }
+ uint64_t zBbits;
+ {
+ lbits zgsz3521;
+ CREATE(lbits)(&zgsz3521);
+ CONVERT_OF(lbits, fbits)(&zgsz3521, zbase, UINT64_C(32) , true);
+ sail_int zgsz3522;
+ CREATE(sail_int)(&zgsz3522);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3522, zcap_mantissa_width);
+ lbits zgsz3523;
+ CREATE(lbits)(&zgsz3523);
+ sail_truncate(&zgsz3523, zgsz3521, zgsz3522);
+ zBbits = CONVERT_OF(fbits, lbits)(zgsz3523, true);
+ KILL(lbits)(&zgsz3523);
+ KILL(sail_int)(&zgsz3522);
+ KILL(lbits)(&zgsz3521);
+ }
+ uint64_t zTbits;
+ {
+ lbits zgsz3524;
+ CREATE(lbits)(&zgsz3524);
+ CONVERT_OF(lbits, fbits)(&zgsz3524, ztop, UINT64_C(33) , true);
+ sail_int zgsz3525;
+ CREATE(sail_int)(&zgsz3525);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3525, zcap_mantissa_width);
+ lbits zgsz3526;
+ CREATE(lbits)(&zgsz3526);
+ sail_truncate(&zgsz3526, zgsz3524, zgsz3525);
+ zTbits = CONVERT_OF(fbits, lbits)(zgsz3526, true);
+ KILL(lbits)(&zgsz3526);
+ KILL(sail_int)(&zgsz3525);
+ KILL(lbits)(&zgsz3524);
+ }
+ bool zlostSignificantTop;
+ zlostSignificantTop = false;
+ bool zlostSignificantBase;
+ zlostSignificantBase = false;
+ bool zincE;
+ zincE = false;
+ {
+ unit zgsz3527;
+ if (zie) {
+ uint64_t zB_ie;
+ {
+ uint64_t zgaz3275;
+ {
+ int64_t zgaz3274;
+ {
+ sail_int zgsz3528;
+ CREATE(sail_int)(&zgsz3528);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3528, ze);
+ sail_int zgsz3529;
+ CREATE(sail_int)(&zgsz3529);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3529, INT64_C(3));
+ sail_int zgsz3530;
+ CREATE(sail_int)(&zgsz3530);
+ add_int(&zgsz3530, zgsz3528, zgsz3529);
+ zgaz3274 = CONVERT_OF(mach_int, sail_int)(zgsz3530);
+ KILL(sail_int)(&zgsz3530);
+ KILL(sail_int)(&zgsz3529);
+ KILL(sail_int)(&zgsz3528);
+ }
+ {
+ lbits zgsz3531;
+ CREATE(lbits)(&zgsz3531);
+ CONVERT_OF(lbits, fbits)(&zgsz3531, zbase, UINT64_C(32) , true);
+ sail_int zgsz3532;
+ CREATE(sail_int)(&zgsz3532);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3532, zgaz3274);
+ lbits zgsz3533;
+ CREATE(lbits)(&zgsz3533);
+ shiftr(&zgsz3533, zgsz3531, zgsz3532);
+ zgaz3275 = CONVERT_OF(fbits, lbits)(zgsz3533, true);
+ KILL(lbits)(&zgsz3533);
+ KILL(sail_int)(&zgsz3532);
+ KILL(lbits)(&zgsz3531);
+ }
+
+ }
+ int64_t zgaz3276;
+ {
+ sail_int zgsz3534;
+ CREATE(sail_int)(&zgsz3534);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3534, zcap_mantissa_width);
+ sail_int zgsz3535;
+ CREATE(sail_int)(&zgsz3535);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3535, INT64_C(3));
+ sail_int zgsz3536;
+ CREATE(sail_int)(&zgsz3536);
+ sub_int(&zgsz3536, zgsz3534, zgsz3535);
+ zgaz3276 = CONVERT_OF(mach_int, sail_int)(zgsz3536);
+ KILL(sail_int)(&zgsz3536);
+ KILL(sail_int)(&zgsz3535);
+ KILL(sail_int)(&zgsz3534);
+ }
+ {
+ lbits zgsz3537;
+ CREATE(lbits)(&zgsz3537);
+ CONVERT_OF(lbits, fbits)(&zgsz3537, zgaz3275, UINT64_C(32) , true);
+ sail_int zgsz3538;
+ CREATE(sail_int)(&zgsz3538);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3538, zgaz3276);
+ lbits zgsz3539;
+ CREATE(lbits)(&zgsz3539);
+ sail_truncate(&zgsz3539, zgsz3537, zgsz3538);
+ zB_ie = CONVERT_OF(fbits, lbits)(zgsz3539, true);
+ KILL(lbits)(&zgsz3539);
+ KILL(sail_int)(&zgsz3538);
+ KILL(lbits)(&zgsz3537);
+ }
+
+
+ }
+ uint64_t zT_ie;
+ {
+ uint64_t zgaz3272;
+ {
+ int64_t zgaz3271;
+ {
+ sail_int zgsz3540;
+ CREATE(sail_int)(&zgsz3540);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3540, ze);
+ sail_int zgsz3541;
+ CREATE(sail_int)(&zgsz3541);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3541, INT64_C(3));
+ sail_int zgsz3542;
+ CREATE(sail_int)(&zgsz3542);
+ add_int(&zgsz3542, zgsz3540, zgsz3541);
+ zgaz3271 = CONVERT_OF(mach_int, sail_int)(zgsz3542);
+ KILL(sail_int)(&zgsz3542);
+ KILL(sail_int)(&zgsz3541);
+ KILL(sail_int)(&zgsz3540);
+ }
+ {
+ lbits zgsz3543;
+ CREATE(lbits)(&zgsz3543);
+ CONVERT_OF(lbits, fbits)(&zgsz3543, ztop, UINT64_C(33) , true);
+ sail_int zgsz3544;
+ CREATE(sail_int)(&zgsz3544);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3544, zgaz3271);
+ lbits zgsz3545;
+ CREATE(lbits)(&zgsz3545);
+ shiftr(&zgsz3545, zgsz3543, zgsz3544);
+ zgaz3272 = CONVERT_OF(fbits, lbits)(zgsz3545, true);
+ KILL(lbits)(&zgsz3545);
+ KILL(sail_int)(&zgsz3544);
+ KILL(lbits)(&zgsz3543);
+ }
+
+ }
+ int64_t zgaz3273;
+ {
+ sail_int zgsz3546;
+ CREATE(sail_int)(&zgsz3546);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3546, zcap_mantissa_width);
+ sail_int zgsz3547;
+ CREATE(sail_int)(&zgsz3547);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3547, INT64_C(3));
+ sail_int zgsz3548;
+ CREATE(sail_int)(&zgsz3548);
+ sub_int(&zgsz3548, zgsz3546, zgsz3547);
+ zgaz3273 = CONVERT_OF(mach_int, sail_int)(zgsz3548);
+ KILL(sail_int)(&zgsz3548);
+ KILL(sail_int)(&zgsz3547);
+ KILL(sail_int)(&zgsz3546);
+ }
+ {
+ lbits zgsz3549;
+ CREATE(lbits)(&zgsz3549);
+ CONVERT_OF(lbits, fbits)(&zgsz3549, zgaz3272, UINT64_C(33) , true);
+ sail_int zgsz3550;
+ CREATE(sail_int)(&zgsz3550);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3550, zgaz3273);
+ lbits zgsz3551;
+ CREATE(lbits)(&zgsz3551);
+ sail_truncate(&zgsz3551, zgsz3549, zgsz3550);
+ zT_ie = CONVERT_OF(fbits, lbits)(zgsz3551, true);
+ KILL(lbits)(&zgsz3551);
+ KILL(sail_int)(&zgsz3550);
+ KILL(lbits)(&zgsz3549);
+ }
+
+
+ }
+ uint64_t zmaskLo;
+ {
+ int64_t zgaz3269;
+ {
+ sail_int zgsz3552;
+ CREATE(sail_int)(&zgsz3552);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3552, INT64_C(32));
+ sail_int zgsz3553;
+ CREATE(sail_int)(&zgsz3553);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3553, INT64_C(1));
+ sail_int zgsz3554;
+ CREATE(sail_int)(&zgsz3554);
+ add_int(&zgsz3554, zgsz3552, zgsz3553);
+ zgaz3269 = CONVERT_OF(mach_int, sail_int)(zgsz3554);
+ KILL(sail_int)(&zgsz3554);
+ KILL(sail_int)(&zgsz3553);
+ KILL(sail_int)(&zgsz3552);
+ }
+ sbits zgaz3270;
+ {
+ int64_t zgaz3268;
+ {
+ sail_int zgsz3555;
+ CREATE(sail_int)(&zgsz3555);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3555, ze);
+ sail_int zgsz3556;
+ CREATE(sail_int)(&zgsz3556);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3556, INT64_C(3));
+ sail_int zgsz3557;
+ CREATE(sail_int)(&zgsz3557);
+ add_int(&zgsz3557, zgsz3555, zgsz3556);
+ zgaz3268 = CONVERT_OF(mach_int, sail_int)(zgsz3557);
+ KILL(sail_int)(&zgsz3557);
+ KILL(sail_int)(&zgsz3556);
+ KILL(sail_int)(&zgsz3555);
+ }
+ {
+ sail_int zgsz3558;
+ CREATE(sail_int)(&zgsz3558);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3558, zgaz3268);
+ lbits zgsz3559;
+ CREATE(lbits)(&zgsz3559);
+ sailgen_zzz3zzz3ones(&zgsz3559, zgsz3558);
+ zgaz3270 = CONVERT_OF(sbits, lbits)(zgsz3559, true);
+ KILL(lbits)(&zgsz3559);
+ KILL(sail_int)(&zgsz3558);
+ }
+
+ }
+ {
+ sail_int zgsz3560;
+ CREATE(sail_int)(&zgsz3560);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3560, zgaz3269);
+ lbits zgsz3561;
+ CREATE(lbits)(&zgsz3561);
+ CONVERT_OF(lbits, sbits)(&zgsz3561, zgaz3270, true);
+ lbits zgsz3562;
+ CREATE(lbits)(&zgsz3562);
+ sailgen_zzz3zzz3EXTZ(&zgsz3562, zgsz3560, zgsz3561);
+ zmaskLo = CONVERT_OF(fbits, lbits)(zgsz3562, true);
+ KILL(lbits)(&zgsz3562);
+ KILL(lbits)(&zgsz3561);
+ KILL(sail_int)(&zgsz3560);
+ }
+
+
+ }
+ {
+ int64_t zgaz3253;
+ {
+ uint64_t zgaz3252;
+ {
+ lbits zgsz3563;
+ CREATE(lbits)(&zgsz3563);
+ CONVERT_OF(lbits, fbits)(&zgsz3563, zext_base, UINT64_C(33) , true);
+ lbits zgsz3564;
+ CREATE(lbits)(&zgsz3564);
+ CONVERT_OF(lbits, fbits)(&zgsz3564, zmaskLo, UINT64_C(33) , true);
+ lbits zgsz3565;
+ CREATE(lbits)(&zgsz3565);
+ and_bits(&zgsz3565, zgsz3563, zgsz3564);
+ zgaz3252 = CONVERT_OF(fbits, lbits)(zgsz3565, true);
+ KILL(lbits)(&zgsz3565);
+ KILL(lbits)(&zgsz3564);
+ KILL(lbits)(&zgsz3563);
+ }
+ zgaz3253 = ((mach_int) zgaz3252);
+
+ }
+ {
+ sail_int zgsz3566;
+ CREATE(sail_int)(&zgsz3566);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3566, zgaz3253);
+ zlostSignificantBase = sailgen_zzz3zzzz7mzzJzzK0z3neq_int(zgsz3566, INT64_C(0));
+ KILL(sail_int)(&zgsz3566);
+ }
+ unit zgsz3576;
+ zgsz3576 = UNIT;
+
+ }
+ {
+ int64_t zgaz3255;
+ {
+ uint64_t zgaz3254;
+ {
+ lbits zgsz3567;
+ CREATE(lbits)(&zgsz3567);
+ CONVERT_OF(lbits, fbits)(&zgsz3567, ztop, UINT64_C(33) , true);
+ lbits zgsz3568;
+ CREATE(lbits)(&zgsz3568);
+ CONVERT_OF(lbits, fbits)(&zgsz3568, zmaskLo, UINT64_C(33) , true);
+ lbits zgsz3569;
+ CREATE(lbits)(&zgsz3569);
+ and_bits(&zgsz3569, zgsz3567, zgsz3568);
+ zgaz3254 = CONVERT_OF(fbits, lbits)(zgsz3569, true);
+ KILL(lbits)(&zgsz3569);
+ KILL(lbits)(&zgsz3568);
+ KILL(lbits)(&zgsz3567);
+ }
+ zgaz3255 = ((mach_int) zgaz3254);
+
+ }
+ {
+ sail_int zgsz3570;
+ CREATE(sail_int)(&zgsz3570);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3570, zgaz3255);
+ zlostSignificantTop = sailgen_zzz3zzzz7mzzJzzK0z3neq_int(zgsz3570, INT64_C(0));
+ KILL(sail_int)(&zgsz3570);
+ }
+ unit zgsz3575;
+ zgsz3575 = UNIT;
+
+ }
+ {
+ unit zgsz3571;
+ if (zlostSignificantTop) {
+ {
+ lbits zgsz3572;
+ CREATE(lbits)(&zgsz3572);
+ CONVERT_OF(lbits, fbits)(&zgsz3572, zT_ie, UINT64_C(5) , true);
+ sail_int zgsz3573;
+ CREATE(sail_int)(&zgsz3573);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3573, INT64_C(1));
+ lbits zgsz3574;
+ CREATE(lbits)(&zgsz3574);
+ add_bits_int(&zgsz3574, zgsz3572, zgsz3573);
+ zT_ie = CONVERT_OF(fbits, lbits)(zgsz3574, true);
+ KILL(lbits)(&zgsz3574);
+ KILL(sail_int)(&zgsz3573);
+ KILL(lbits)(&zgsz3572);
+ }
+ zgsz3571 = UNIT;
+ } else { zgsz3571 = UNIT; }
+ }
+ uint64_t zlen_ie;
+ {
+ lbits zgsz3577;
+ CREATE(lbits)(&zgsz3577);
+ CONVERT_OF(lbits, fbits)(&zgsz3577, zT_ie, UINT64_C(5) , true);
+ lbits zgsz3578;
+ CREATE(lbits)(&zgsz3578);
+ CONVERT_OF(lbits, fbits)(&zgsz3578, zB_ie, UINT64_C(5) , true);
+ lbits zgsz3579;
+ CREATE(lbits)(&zgsz3579);
+ sub_bits(&zgsz3579, zgsz3577, zgsz3578);
+ zlen_ie = CONVERT_OF(fbits, lbits)(zgsz3579, true);
+ KILL(lbits)(&zgsz3579);
+ KILL(lbits)(&zgsz3578);
+ KILL(lbits)(&zgsz3577);
+ }
+ {
+ bool zgaz3258;
+ {
+ fbits zgaz3257;
+ {
+ int64_t zgaz3256;
+ {
+ sail_int zgsz3580;
+ CREATE(sail_int)(&zgsz3580);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3580, zcap_mantissa_width);
+ sail_int zgsz3581;
+ CREATE(sail_int)(&zgsz3581);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3581, INT64_C(4));
+ sail_int zgsz3582;
+ CREATE(sail_int)(&zgsz3582);
+ sub_int(&zgsz3582, zgsz3580, zgsz3581);
+ zgaz3256 = CONVERT_OF(mach_int, sail_int)(zgsz3582);
+ KILL(sail_int)(&zgsz3582);
+ KILL(sail_int)(&zgsz3581);
+ KILL(sail_int)(&zgsz3580);
+ }
+ {
+ sail_int zgsz3584;
+ CREATE(sail_int)(&zgsz3584);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3584, zgaz3256);
+ lbits zgsz3583;
+ CREATE(lbits)(&zgsz3583);
+ CONVERT_OF(lbits, fbits)(&zgsz3583, zlen_ie, UINT64_C(5) , true);
+ zgaz3257 = bitvector_access(zgsz3583, zgsz3584);
+ KILL(sail_int)(&zgsz3584);
+ KILL(lbits)(&zgsz3583);
+ }
+
+ }
+ zgaz3258 = eq_bit(zgaz3257, UINT64_C(1));
+
+ }
+ unit zgsz3589;
+ if (zgaz3258) {
+ {
+ zincE = true;
+ unit zgsz3611;
+ zgsz3611 = UNIT;
+ }
+ {
+ bool zgsz3592;
+ if (zlostSignificantBase) { zgsz3592 = true; } else {
+ fbits zgaz3259;
+ {
+ sail_int zgsz3591;
+ CREATE(sail_int)(&zgsz3591);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3591, INT64_C(0));
+ lbits zgsz3590;
+ CREATE(lbits)(&zgsz3590);
+ CONVERT_OF(lbits, fbits)(&zgsz3590, zB_ie, UINT64_C(5) , true);
+ zgaz3259 = bitvector_access(zgsz3590, zgsz3591);
+ KILL(sail_int)(&zgsz3591);
+ KILL(lbits)(&zgsz3590);
+ }
+ zgsz3592 = eq_bit(zgaz3259, UINT64_C(1));
+
+ }
+ zlostSignificantBase = zgsz3592;
+ unit zgsz3610;
+ zgsz3610 = UNIT;
+ }
+ {
+ bool zgsz3595;
+ if (zlostSignificantTop) { zgsz3595 = true; } else {
+ fbits zgaz3260;
+ {
+ sail_int zgsz3594;
+ CREATE(sail_int)(&zgsz3594);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3594, INT64_C(0));
+ lbits zgsz3593;
+ CREATE(lbits)(&zgsz3593);
+ CONVERT_OF(lbits, fbits)(&zgsz3593, zT_ie, UINT64_C(5) , true);
+ zgaz3260 = bitvector_access(zgsz3593, zgsz3594);
+ KILL(sail_int)(&zgsz3594);
+ KILL(lbits)(&zgsz3593);
+ }
+ zgsz3595 = eq_bit(zgaz3260, UINT64_C(1));
+
+ }
+ zlostSignificantTop = zgsz3595;
+ unit zgsz3609;
+ zgsz3609 = UNIT;
+ }
+ {
+ uint64_t zgaz3262;
+ {
+ int64_t zgaz3261;
+ {
+ sail_int zgsz3596;
+ CREATE(sail_int)(&zgsz3596);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3596, ze);
+ sail_int zgsz3597;
+ CREATE(sail_int)(&zgsz3597);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3597, INT64_C(4));
+ sail_int zgsz3598;
+ CREATE(sail_int)(&zgsz3598);
+ add_int(&zgsz3598, zgsz3596, zgsz3597);
+ zgaz3261 = CONVERT_OF(mach_int, sail_int)(zgsz3598);
+ KILL(sail_int)(&zgsz3598);
+ KILL(sail_int)(&zgsz3597);
+ KILL(sail_int)(&zgsz3596);
+ }
+ {
+ lbits zgsz3599;
+ CREATE(lbits)(&zgsz3599);
+ CONVERT_OF(lbits, fbits)(&zgsz3599, zbase, UINT64_C(32) , true);
+ sail_int zgsz3600;
+ CREATE(sail_int)(&zgsz3600);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3600, zgaz3261);
+ lbits zgsz3601;
+ CREATE(lbits)(&zgsz3601);
+ shiftr(&zgsz3601, zgsz3599, zgsz3600);
+ zgaz3262 = CONVERT_OF(fbits, lbits)(zgsz3601, true);
+ KILL(lbits)(&zgsz3601);
+ KILL(sail_int)(&zgsz3600);
+ KILL(lbits)(&zgsz3599);
+ }
+
+ }
+ int64_t zgaz3263;
+ {
+ sail_int zgsz3602;
+ CREATE(sail_int)(&zgsz3602);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3602, zcap_mantissa_width);
+ sail_int zgsz3603;
+ CREATE(sail_int)(&zgsz3603);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3603, INT64_C(3));
+ sail_int zgsz3604;
+ CREATE(sail_int)(&zgsz3604);
+ sub_int(&zgsz3604, zgsz3602, zgsz3603);
+ zgaz3263 = CONVERT_OF(mach_int, sail_int)(zgsz3604);
+ KILL(sail_int)(&zgsz3604);
+ KILL(sail_int)(&zgsz3603);
+ KILL(sail_int)(&zgsz3602);
+ }
+ {
+ lbits zgsz3605;
+ CREATE(lbits)(&zgsz3605);
+ CONVERT_OF(lbits, fbits)(&zgsz3605, zgaz3262, UINT64_C(32) , true);
+ sail_int zgsz3606;
+ CREATE(sail_int)(&zgsz3606);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3606, zgaz3263);
+ lbits zgsz3607;
+ CREATE(lbits)(&zgsz3607);
+ sail_truncate(&zgsz3607, zgsz3605, zgsz3606);
+ zB_ie = CONVERT_OF(fbits, lbits)(zgsz3607, true);
+ KILL(lbits)(&zgsz3607);
+ KILL(sail_int)(&zgsz3606);
+ KILL(lbits)(&zgsz3605);
+ }
+ unit zgsz3608;
+ zgsz3608 = UNIT;
+
+
+ }
+ int64_t zincT;
+ if (zlostSignificantTop) { zincT = INT64_C(1); } else { zincT = INT64_C(0); }
+ uint64_t zgaz3267;
+ {
+ uint64_t zgaz3265;
+ {
+ int64_t zgaz3264;
+ {
+ sail_int zgsz3612;
+ CREATE(sail_int)(&zgsz3612);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3612, ze);
+ sail_int zgsz3613;
+ CREATE(sail_int)(&zgsz3613);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3613, INT64_C(4));
+ sail_int zgsz3614;
+ CREATE(sail_int)(&zgsz3614);
+ add_int(&zgsz3614, zgsz3612, zgsz3613);
+ zgaz3264 = CONVERT_OF(mach_int, sail_int)(zgsz3614);
+ KILL(sail_int)(&zgsz3614);
+ KILL(sail_int)(&zgsz3613);
+ KILL(sail_int)(&zgsz3612);
+ }
+ {
+ lbits zgsz3615;
+ CREATE(lbits)(&zgsz3615);
+ CONVERT_OF(lbits, fbits)(&zgsz3615, ztop, UINT64_C(33) , true);
+ sail_int zgsz3616;
+ CREATE(sail_int)(&zgsz3616);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3616, zgaz3264);
+ lbits zgsz3617;
+ CREATE(lbits)(&zgsz3617);
+ shiftr(&zgsz3617, zgsz3615, zgsz3616);
+ zgaz3265 = CONVERT_OF(fbits, lbits)(zgsz3617, true);
+ KILL(lbits)(&zgsz3617);
+ KILL(sail_int)(&zgsz3616);
+ KILL(lbits)(&zgsz3615);
+ }
+
+ }
+ int64_t zgaz3266;
+ {
+ sail_int zgsz3618;
+ CREATE(sail_int)(&zgsz3618);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3618, zcap_mantissa_width);
+ sail_int zgsz3619;
+ CREATE(sail_int)(&zgsz3619);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3619, INT64_C(3));
+ sail_int zgsz3620;
+ CREATE(sail_int)(&zgsz3620);
+ sub_int(&zgsz3620, zgsz3618, zgsz3619);
+ zgaz3266 = CONVERT_OF(mach_int, sail_int)(zgsz3620);
+ KILL(sail_int)(&zgsz3620);
+ KILL(sail_int)(&zgsz3619);
+ KILL(sail_int)(&zgsz3618);
+ }
+ {
+ lbits zgsz3621;
+ CREATE(lbits)(&zgsz3621);
+ CONVERT_OF(lbits, fbits)(&zgsz3621, zgaz3265, UINT64_C(33) , true);
+ sail_int zgsz3622;
+ CREATE(sail_int)(&zgsz3622);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3622, zgaz3266);
+ lbits zgsz3623;
+ CREATE(lbits)(&zgsz3623);
+ sail_truncate(&zgsz3623, zgsz3621, zgsz3622);
+ zgaz3267 = CONVERT_OF(fbits, lbits)(zgsz3623, true);
+ KILL(lbits)(&zgsz3623);
+ KILL(sail_int)(&zgsz3622);
+ KILL(lbits)(&zgsz3621);
+ }
+
+
+ }
+ {
+ lbits zgsz3624;
+ CREATE(lbits)(&zgsz3624);
+ CONVERT_OF(lbits, fbits)(&zgsz3624, zgaz3267, UINT64_C(5) , true);
+ sail_int zgsz3625;
+ CREATE(sail_int)(&zgsz3625);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3625, zincT);
+ lbits zgsz3626;
+ CREATE(lbits)(&zgsz3626);
+ add_bits_int(&zgsz3626, zgsz3624, zgsz3625);
+ zT_ie = CONVERT_OF(fbits, lbits)(zgsz3626, true);
+ KILL(lbits)(&zgsz3626);
+ KILL(sail_int)(&zgsz3625);
+ KILL(lbits)(&zgsz3624);
+ }
+ zgsz3589 = UNIT;
+
+
+ } else { zgsz3589 = UNIT; }
+
+ }
+ {
+ {
+ lbits zgsz3585;
+ CREATE(lbits)(&zgsz3585);
+ CONVERT_OF(lbits, fbits)(&zgsz3585, zB_ie, UINT64_C(5) , true);
+ lbits zgsz3586;
+ CREATE(lbits)(&zgsz3586);
+ CONVERT_OF(lbits, fbits)(&zgsz3586, UINT64_C(0b000), UINT64_C(3) , true);
+ lbits zgsz3587;
+ CREATE(lbits)(&zgsz3587);
+ append(&zgsz3587, zgsz3585, zgsz3586);
+ zBbits = CONVERT_OF(fbits, lbits)(zgsz3587, true);
+ KILL(lbits)(&zgsz3587);
+ KILL(lbits)(&zgsz3586);
+ KILL(lbits)(&zgsz3585);
+ }
+ unit zgsz3588;
+ zgsz3588 = UNIT;
+ }
+ {
+ lbits zgsz3627;
+ CREATE(lbits)(&zgsz3627);
+ CONVERT_OF(lbits, fbits)(&zgsz3627, zT_ie, UINT64_C(5) , true);
+ lbits zgsz3628;
+ CREATE(lbits)(&zgsz3628);
+ CONVERT_OF(lbits, fbits)(&zgsz3628, UINT64_C(0b000), UINT64_C(3) , true);
+ lbits zgsz3629;
+ CREATE(lbits)(&zgsz3629);
+ append(&zgsz3629, zgsz3627, zgsz3628);
+ zTbits = CONVERT_OF(fbits, lbits)(zgsz3629, true);
+ KILL(lbits)(&zgsz3629);
+ KILL(lbits)(&zgsz3628);
+ KILL(lbits)(&zgsz3627);
+ }
+ zgsz3527 = UNIT;
+
+
+
+
+ } else { zgsz3527 = UNIT; }
+ }
+ struct zCapability znewCap;
+ {
+ uint64_t zgaz3279;
+ {
+ int64_t zgaz3278;
+ if (zincE) {
+ {
+ sail_int zgsz3630;
+ CREATE(sail_int)(&zgsz3630);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3630, ze);
+ sail_int zgsz3631;
+ CREATE(sail_int)(&zgsz3631);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3631, INT64_C(1));
+ sail_int zgsz3632;
+ CREATE(sail_int)(&zgsz3632);
+ add_int(&zgsz3632, zgsz3630, zgsz3631);
+ zgaz3278 = CONVERT_OF(mach_int, sail_int)(zgsz3632);
+ KILL(sail_int)(&zgsz3632);
+ KILL(sail_int)(&zgsz3631);
+ KILL(sail_int)(&zgsz3630);
+ }
+ } else { zgaz3278 = ze; }
+ {
+ sail_int zgsz3633;
+ CREATE(sail_int)(&zgsz3633);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3633, zgaz3278);
+ zgaz3279 = sailgen_zzzz7lzzJzzK6z3to_bits(INT64_C(6), zgsz3633);
+ KILL(sail_int)(&zgsz3633);
+ }
+
+ }
+ struct zCapability zgsz3634;
+ zgsz3634 = zcap;
+ zgsz3634.zB = zBbits;
+ zgsz3634.zE = zgaz3279;
+ zgsz3634.zT = zTbits;
+ zgsz3634.zaddress = zbase;
+ zgsz3634.zinternal_E = zie;
+ znewCap = zgsz3634;
+
+
+ }
+ bool zexact;
+ {
+ bool zgaz3277;
+ {
+ bool zgsz3635;
+ if (zlostSignificantBase) { zgsz3635 = true; } else { zgsz3635 = zlostSignificantTop; }
+ zgaz3277 = zgsz3635;
+ }
+ zexact = not(zgaz3277);
+
+ }
+ struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 zgsz3636;
+ zgsz3636.ztup0 = zexact;
+ zgsz3636.ztup1 = znewCap;
+ zcbz344 = zgsz3636;
+
+
+
+
+
+
+
+
+
+
+
+
+end_function_176: ;
+ return zcbz344;
+end_block_exception_177: ;
+ struct zCapability zcbz368 = { .zuperms = UINT64_C(0xdeadc0de), .ztag = false, .zreserved = UINT64_C(0xdeadc0de), .zpermit_unseal = false, .zpermit_store_local_cap = false, .zpermit_store_cap = false, .zpermit_store = false, .zpermit_set_CID = false, .zpermit_seal = false, .zpermit_load_cap = false, .zpermit_load = false, .zpermit_execute = false, .zpermit_cinvoke = false, .zotype = UINT64_C(0xdeadc0de), .zinternal_E = false, .zglobal = false, .zflag_cap_mode = false, .zaddress = UINT64_C(0xdeadc0de), .zaccess_system_regs = false, .zT = UINT64_C(0xdeadc0de), .zE = UINT64_C(0xdeadc0de), .zB = UINT64_C(0xdeadc0de) };
+ struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 zcbz367 = { .ztup1 = zcbz368, .ztup0 = false };
+ return zcbz367;
+}
+
+static uint64_t sailgen_getCapPerms(struct zCapability);
+
+static uint64_t sailgen_getCapPerms(struct zCapability zcap)
+{
+ __label__ end_function_179, end_block_exception_180;
+
+ uint64_t zcbz345;
+ uint64_t zperms;
+ {
+ uint64_t zgaz3287;
+ zgaz3287 = sailgen_getCapHardPerms(zcap);
+ zperms = sailgen_zzzz7mzzJzzK15zzCzz0zz7nzzJzzK12z3EXTZ(INT64_C(15), zgaz3287);
+
+ }
+ uint64_t zgaz3286;
+ zgaz3286 = zcap.zuperms;
+ {
+ lbits zgsz3637;
+ CREATE(lbits)(&zgsz3637);
+ CONVERT_OF(lbits, fbits)(&zgsz3637, zgaz3286, UINT64_C(0) , true);
+ lbits zgsz3638;
+ CREATE(lbits)(&zgsz3638);
+ CONVERT_OF(lbits, fbits)(&zgsz3638, zperms, UINT64_C(15) , true);
+ lbits zgsz3639;
+ CREATE(lbits)(&zgsz3639);
+ append(&zgsz3639, zgsz3637, zgsz3638);
+ zcbz345 = CONVERT_OF(fbits, lbits)(zgsz3639, true);
+ KILL(lbits)(&zgsz3639);
+ KILL(lbits)(&zgsz3638);
+ KILL(lbits)(&zgsz3637);
+ }
+
+
+end_function_179: ;
+ return zcbz345;
+end_block_exception_180: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static struct zCapability sailgen_setCapPerms(struct zCapability, uint64_t);
+
+static struct zCapability sailgen_setCapPerms(struct zCapability zcap, uint64_t zperms)
+{
+ __label__ end_function_182, end_block_exception_183;
+
+ struct zCapability zcbz346;
+ uint64_t zgaz3289;
+ {
+ uint64_t zgaz3288;
+ {
+ lbits zgsz3640;
+ CREATE(lbits)(&zgsz3640);
+ CONVERT_OF(lbits, fbits)(&zgsz3640, zperms, UINT64_C(15) , true);
+ sail_int zgsz3641;
+ CREATE(sail_int)(&zgsz3641);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3641, zcap_uperms_shift);
+ lbits zgsz3642;
+ CREATE(lbits)(&zgsz3642);
+ shiftr(&zgsz3642, zgsz3640, zgsz3641);
+ zgaz3288 = CONVERT_OF(fbits, lbits)(zgsz3642, true);
+ KILL(lbits)(&zgsz3642);
+ KILL(sail_int)(&zgsz3641);
+ KILL(lbits)(&zgsz3640);
+ }
+ {
+ lbits zgsz3643;
+ CREATE(lbits)(&zgsz3643);
+ CONVERT_OF(lbits, fbits)(&zgsz3643, zgaz3288, UINT64_C(15) , true);
+ sail_int zgsz3644;
+ CREATE(sail_int)(&zgsz3644);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3644, zcap_uperms_width);
+ lbits zgsz3645;
+ CREATE(lbits)(&zgsz3645);
+ sail_truncate(&zgsz3645, zgsz3643, zgsz3644);
+ zgaz3289 = CONVERT_OF(fbits, lbits)(zgsz3645, true);
+ KILL(lbits)(&zgsz3645);
+ KILL(sail_int)(&zgsz3644);
+ KILL(lbits)(&zgsz3643);
+ }
+
+ }
+ bool zgaz3291;
+ {
+ fbits zgaz3290;
+ {
+ sail_int zgsz3647;
+ CREATE(sail_int)(&zgsz3647);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3647, INT64_C(11));
+ lbits zgsz3646;
+ CREATE(lbits)(&zgsz3646);
+ CONVERT_OF(lbits, fbits)(&zgsz3646, zperms, UINT64_C(15) , true);
+ zgaz3290 = bitvector_access(zgsz3646, zgsz3647);
+ KILL(sail_int)(&zgsz3647);
+ KILL(lbits)(&zgsz3646);
+ }
+ zgaz3291 = sailgen_bit_to_bool(zgaz3290);
+
+ }
+ bool zgaz3293;
+ {
+ fbits zgaz3292;
+ {
+ sail_int zgsz3649;
+ CREATE(sail_int)(&zgsz3649);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3649, INT64_C(10));
+ lbits zgsz3648;
+ CREATE(lbits)(&zgsz3648);
+ CONVERT_OF(lbits, fbits)(&zgsz3648, zperms, UINT64_C(15) , true);
+ zgaz3292 = bitvector_access(zgsz3648, zgsz3649);
+ KILL(sail_int)(&zgsz3649);
+ KILL(lbits)(&zgsz3648);
+ }
+ zgaz3293 = sailgen_bit_to_bool(zgaz3292);
+
+ }
+ bool zgaz3295;
+ {
+ fbits zgaz3294;
+ {
+ sail_int zgsz3651;
+ CREATE(sail_int)(&zgsz3651);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3651, INT64_C(9));
+ lbits zgsz3650;
+ CREATE(lbits)(&zgsz3650);
+ CONVERT_OF(lbits, fbits)(&zgsz3650, zperms, UINT64_C(15) , true);
+ zgaz3294 = bitvector_access(zgsz3650, zgsz3651);
+ KILL(sail_int)(&zgsz3651);
+ KILL(lbits)(&zgsz3650);
+ }
+ zgaz3295 = sailgen_bit_to_bool(zgaz3294);
+
+ }
+ bool zgaz3297;
+ {
+ fbits zgaz3296;
+ {
+ sail_int zgsz3653;
+ CREATE(sail_int)(&zgsz3653);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3653, INT64_C(8));
+ lbits zgsz3652;
+ CREATE(lbits)(&zgsz3652);
+ CONVERT_OF(lbits, fbits)(&zgsz3652, zperms, UINT64_C(15) , true);
+ zgaz3296 = bitvector_access(zgsz3652, zgsz3653);
+ KILL(sail_int)(&zgsz3653);
+ KILL(lbits)(&zgsz3652);
+ }
+ zgaz3297 = sailgen_bit_to_bool(zgaz3296);
+
+ }
+ bool zgaz3299;
+ {
+ fbits zgaz3298;
+ {
+ sail_int zgsz3655;
+ CREATE(sail_int)(&zgsz3655);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3655, INT64_C(7));
+ lbits zgsz3654;
+ CREATE(lbits)(&zgsz3654);
+ CONVERT_OF(lbits, fbits)(&zgsz3654, zperms, UINT64_C(15) , true);
+ zgaz3298 = bitvector_access(zgsz3654, zgsz3655);
+ KILL(sail_int)(&zgsz3655);
+ KILL(lbits)(&zgsz3654);
+ }
+ zgaz3299 = sailgen_bit_to_bool(zgaz3298);
+
+ }
+ bool zgaz3301;
+ {
+ fbits zgaz3300;
+ {
+ sail_int zgsz3657;
+ CREATE(sail_int)(&zgsz3657);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3657, INT64_C(6));
+ lbits zgsz3656;
+ CREATE(lbits)(&zgsz3656);
+ CONVERT_OF(lbits, fbits)(&zgsz3656, zperms, UINT64_C(15) , true);
+ zgaz3300 = bitvector_access(zgsz3656, zgsz3657);
+ KILL(sail_int)(&zgsz3657);
+ KILL(lbits)(&zgsz3656);
+ }
+ zgaz3301 = sailgen_bit_to_bool(zgaz3300);
+
+ }
+ bool zgaz3303;
+ {
+ fbits zgaz3302;
+ {
+ sail_int zgsz3659;
+ CREATE(sail_int)(&zgsz3659);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3659, INT64_C(5));
+ lbits zgsz3658;
+ CREATE(lbits)(&zgsz3658);
+ CONVERT_OF(lbits, fbits)(&zgsz3658, zperms, UINT64_C(15) , true);
+ zgaz3302 = bitvector_access(zgsz3658, zgsz3659);
+ KILL(sail_int)(&zgsz3659);
+ KILL(lbits)(&zgsz3658);
+ }
+ zgaz3303 = sailgen_bit_to_bool(zgaz3302);
+
+ }
+ bool zgaz3305;
+ {
+ fbits zgaz3304;
+ {
+ sail_int zgsz3661;
+ CREATE(sail_int)(&zgsz3661);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3661, INT64_C(4));
+ lbits zgsz3660;
+ CREATE(lbits)(&zgsz3660);
+ CONVERT_OF(lbits, fbits)(&zgsz3660, zperms, UINT64_C(15) , true);
+ zgaz3304 = bitvector_access(zgsz3660, zgsz3661);
+ KILL(sail_int)(&zgsz3661);
+ KILL(lbits)(&zgsz3660);
+ }
+ zgaz3305 = sailgen_bit_to_bool(zgaz3304);
+
+ }
+ bool zgaz3307;
+ {
+ fbits zgaz3306;
+ {
+ sail_int zgsz3663;
+ CREATE(sail_int)(&zgsz3663);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3663, INT64_C(3));
+ lbits zgsz3662;
+ CREATE(lbits)(&zgsz3662);
+ CONVERT_OF(lbits, fbits)(&zgsz3662, zperms, UINT64_C(15) , true);
+ zgaz3306 = bitvector_access(zgsz3662, zgsz3663);
+ KILL(sail_int)(&zgsz3663);
+ KILL(lbits)(&zgsz3662);
+ }
+ zgaz3307 = sailgen_bit_to_bool(zgaz3306);
+
+ }
+ bool zgaz3309;
+ {
+ fbits zgaz3308;
+ {
+ sail_int zgsz3665;
+ CREATE(sail_int)(&zgsz3665);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3665, INT64_C(2));
+ lbits zgsz3664;
+ CREATE(lbits)(&zgsz3664);
+ CONVERT_OF(lbits, fbits)(&zgsz3664, zperms, UINT64_C(15) , true);
+ zgaz3308 = bitvector_access(zgsz3664, zgsz3665);
+ KILL(sail_int)(&zgsz3665);
+ KILL(lbits)(&zgsz3664);
+ }
+ zgaz3309 = sailgen_bit_to_bool(zgaz3308);
+
+ }
+ bool zgaz3311;
+ {
+ fbits zgaz3310;
+ {
+ sail_int zgsz3667;
+ CREATE(sail_int)(&zgsz3667);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3667, INT64_C(1));
+ lbits zgsz3666;
+ CREATE(lbits)(&zgsz3666);
+ CONVERT_OF(lbits, fbits)(&zgsz3666, zperms, UINT64_C(15) , true);
+ zgaz3310 = bitvector_access(zgsz3666, zgsz3667);
+ KILL(sail_int)(&zgsz3667);
+ KILL(lbits)(&zgsz3666);
+ }
+ zgaz3311 = sailgen_bit_to_bool(zgaz3310);
+
+ }
+ bool zgaz3313;
+ {
+ fbits zgaz3312;
+ {
+ sail_int zgsz3669;
+ CREATE(sail_int)(&zgsz3669);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3669, INT64_C(0));
+ lbits zgsz3668;
+ CREATE(lbits)(&zgsz3668);
+ CONVERT_OF(lbits, fbits)(&zgsz3668, zperms, UINT64_C(15) , true);
+ zgaz3312 = bitvector_access(zgsz3668, zgsz3669);
+ KILL(sail_int)(&zgsz3669);
+ KILL(lbits)(&zgsz3668);
+ }
+ zgaz3313 = sailgen_bit_to_bool(zgaz3312);
+
+ }
+ struct zCapability zgsz3670;
+ zgsz3670 = zcap;
+ zgsz3670.zaccess_system_regs = zgaz3293;
+ zgsz3670.zglobal = zgaz3313;
+ zgsz3670.zpermit_cinvoke = zgaz3297;
+ zgsz3670.zpermit_execute = zgaz3311;
+ zgsz3670.zpermit_load = zgaz3309;
+ zgsz3670.zpermit_load_cap = zgaz3305;
+ zgsz3670.zpermit_seal = zgaz3299;
+ zgsz3670.zpermit_set_CID = zgaz3291;
+ zgsz3670.zpermit_store = zgaz3307;
+ zgsz3670.zpermit_store_cap = zgaz3303;
+ zgsz3670.zpermit_store_local_cap = zgaz3301;
+ zgsz3670.zpermit_unseal = zgaz3295;
+ zgsz3670.zuperms = zgaz3289;
+ zcbz346 = zgsz3670;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+end_function_182: ;
+ return zcbz346;
+end_block_exception_183: ;
+ struct zCapability zcbz369 = { .zuperms = UINT64_C(0xdeadc0de), .ztag = false, .zreserved = UINT64_C(0xdeadc0de), .zpermit_unseal = false, .zpermit_store_local_cap = false, .zpermit_store_cap = false, .zpermit_store = false, .zpermit_set_CID = false, .zpermit_seal = false, .zpermit_load_cap = false, .zpermit_load = false, .zpermit_execute = false, .zpermit_cinvoke = false, .zotype = UINT64_C(0xdeadc0de), .zinternal_E = false, .zglobal = false, .zflag_cap_mode = false, .zaddress = UINT64_C(0xdeadc0de), .zaccess_system_regs = false, .zT = UINT64_C(0xdeadc0de), .zE = UINT64_C(0xdeadc0de), .zB = UINT64_C(0xdeadc0de) };
+ return zcbz369;
+}
+
+static uint64_t sailgen_getCapFlags(struct zCapability);
+
+static uint64_t sailgen_getCapFlags(struct zCapability zcap)
+{
+ __label__ end_function_185, end_block_exception_186;
+
+ uint64_t zcbz347;
+ bool zgaz3314;
+ zgaz3314 = zcap.zflag_cap_mode;
+ zcbz347 = sailgen_bool_to_bits(zgaz3314);
+
+end_function_185: ;
+ return zcbz347;
+end_block_exception_186: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static bool sailgen_isCapSealed(struct zCapability);
+
+static bool sailgen_isCapSealed(struct zCapability zcap)
+{
+ __label__ end_function_188, end_block_exception_189;
+
+ bool zcbz348;
+ int64_t zgaz3316;
+ {
+ uint64_t zgaz3315;
+ zgaz3315 = zcap.zotype;
+ zgaz3316 = fast_signed(zgaz3315, 4);
+
+ }
+ {
+ sail_int zgsz3671;
+ CREATE(sail_int)(&zgsz3671);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3671, zgaz3316);
+ zcbz348 = sailgen_zzz3zzzz7mzzJzzKzzD1z3neq_int(zgsz3671, zotype_unsealed);
+ KILL(sail_int)(&zgsz3671);
+ }
+
+end_function_188: ;
+ return zcbz348;
+end_block_exception_189: ;
+
+ return false;
+}
+
+static bool sailgen_hasReservedOType(struct zCapability);
+
+static bool sailgen_hasReservedOType(struct zCapability zcap)
+{
+ __label__ end_function_191, end_block_exception_192;
+
+ bool zcbz349;
+ int64_t zgaz3318;
+ {
+ uint64_t zgaz3317;
+ zgaz3317 = zcap.zotype;
+ zgaz3318 = ((mach_int) zgaz3317);
+
+ }
+ {
+ sail_int zgsz3673;
+ CREATE(sail_int)(&zgsz3673);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3673, zcap_max_otype);
+ sail_int zgsz3672;
+ CREATE(sail_int)(&zgsz3672);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3672, zgaz3318);
+ zcbz349 = gt(zgsz3672, zgsz3673);
+ KILL(sail_int)(&zgsz3673);
+ KILL(sail_int)(&zgsz3672);
+ }
+
+end_function_191: ;
+ return zcbz349;
+end_block_exception_192: ;
+
+ return false;
+}
+
+static uint64_t sailgen_getCapBaseBits(struct zCapability);
+
+static uint64_t sailgen_getCapBaseBits(struct zCapability zc)
+{
+ __label__ case_195, finish_match_194, end_function_196, end_block_exception_197;
+
+ uint64_t zcbz350;
+ struct ztuple_z8z5bv32zCz0z5bv33z9 zgaz3319;
+ zgaz3319 = sailgen_getCapBoundsBits(zc);
+ uint64_t zgsz3674;
+ {
+ uint64_t zbase;
+ zbase = zgaz3319.ztup0;
+ zgsz3674 = zbase;
+
+ goto finish_match_194;
+ }
+case_195: ;
+ sail_match_failure("getCapBaseBits");
+finish_match_194: ;
+ zcbz350 = zgsz3674;
+
+
+end_function_196: ;
+ return zcbz350;
+end_block_exception_197: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_getCapOffsetBits(struct zCapability);
+
+static uint64_t sailgen_getCapOffsetBits(struct zCapability zc)
+{
+ __label__ end_function_199, end_block_exception_200;
+
+ uint64_t zcbz351;
+ uint64_t zbase;
+ zbase = sailgen_getCapBaseBits(zc);
+ uint64_t zgaz3320;
+ zgaz3320 = zc.zaddress;
+ {
+ lbits zgsz3676;
+ CREATE(lbits)(&zgsz3676);
+ CONVERT_OF(lbits, fbits)(&zgsz3676, zgaz3320, UINT64_C(32) , true);
+ lbits zgsz3677;
+ CREATE(lbits)(&zgsz3677);
+ CONVERT_OF(lbits, fbits)(&zgsz3677, zbase, UINT64_C(32) , true);
+ lbits zgsz3678;
+ CREATE(lbits)(&zgsz3678);
+ sub_bits(&zgsz3678, zgsz3676, zgsz3677);
+ zcbz351 = CONVERT_OF(fbits, lbits)(zgsz3678, true);
+ KILL(lbits)(&zgsz3678);
+ KILL(lbits)(&zgsz3677);
+ KILL(lbits)(&zgsz3676);
+ }
+
+
+end_function_199: ;
+ return zcbz351;
+end_block_exception_200: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static int64_t sailgen_getCapLength(struct zCapability);
+
+static int64_t sailgen_getCapLength(struct zCapability zc)
+{
+ __label__ case_203, finish_match_202, end_function_204, end_block_exception_205;
+
+ int64_t zcbz352;
+ struct ztuple_z8z5i64zCz0z5i64z9 zgaz3321;
+ zgaz3321 = sailgen_getCapBounds(zc);
+ int64_t zgsz3679;
+ {
+ int64_t zbase;
+ zbase = zgaz3321.ztup0;
+ int64_t ztop;
+ ztop = zgaz3321.ztup1;
+ {
+ bool zgaz3324;
+ {
+ bool zgaz3323;
+ {
+ bool zgaz3322;
+ zgaz3322 = zc.ztag;
+ zgaz3323 = not(zgaz3322);
+
+ }
+ bool zgsz3680;
+ if (zgaz3323) { zgsz3680 = true; } else {
+ {
+ sail_int zgsz3682;
+ CREATE(sail_int)(&zgsz3682);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3682, zbase);
+ sail_int zgsz3681;
+ CREATE(sail_int)(&zgsz3681);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3681, ztop);
+ zgsz3680 = gteq(zgsz3681, zgsz3682);
+ KILL(sail_int)(&zgsz3682);
+ KILL(sail_int)(&zgsz3681);
+ }
+ }
+ zgaz3324 = zgsz3680;
+
+ }
+ unit zgsz3683;
+ zgsz3683 = sail_assert(zgaz3324, "src/cheri_cap_common.sail 425:40 - 425:41");
+
+ }
+ int64_t zgaz3325;
+ {
+ sail_int zgsz3684;
+ CREATE(sail_int)(&zgsz3684);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3684, ztop);
+ sail_int zgsz3685;
+ CREATE(sail_int)(&zgsz3685);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3685, zbase);
+ sail_int zgsz3686;
+ CREATE(sail_int)(&zgsz3686);
+ sub_int(&zgsz3686, zgsz3684, zgsz3685);
+ zgaz3325 = CONVERT_OF(mach_int, sail_int)(zgsz3686);
+ KILL(sail_int)(&zgsz3686);
+ KILL(sail_int)(&zgsz3685);
+ KILL(sail_int)(&zgsz3684);
+ }
+ int64_t zgaz3326;
+ {
+ sail_int zgsz3687;
+ CREATE(sail_int)(&zgsz3687);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3687, zcap_len_width);
+ sail_int zgsz3688;
+ CREATE(sail_int)(&zgsz3688);
+ pow2(&zgsz3688, zgsz3687);
+ zgaz3326 = CONVERT_OF(mach_int, sail_int)(zgsz3688);
+ KILL(sail_int)(&zgsz3688);
+ KILL(sail_int)(&zgsz3687);
+ }
+ {
+ sail_int zgsz3690;
+ CREATE(sail_int)(&zgsz3690);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3690, zgaz3325);
+ sail_int zgsz3691;
+ CREATE(sail_int)(&zgsz3691);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3691, zgaz3326);
+ sail_int zgsz3692;
+ CREATE(sail_int)(&zgsz3692);
+ emod_int(&zgsz3692, zgsz3690, zgsz3691);
+ zgsz3679 = CONVERT_OF(mach_int, sail_int)(zgsz3692);
+ KILL(sail_int)(&zgsz3692);
+ KILL(sail_int)(&zgsz3691);
+ KILL(sail_int)(&zgsz3690);
+ }
+
+
+
+
+ goto finish_match_202;
+ }
+case_203: ;
+ sail_match_failure("getCapLength");
+finish_match_202: ;
+ zcbz352 = zgsz3679;
+
+
+end_function_204: ;
+ return zcbz352;
+end_block_exception_205: ;
+
+ return INT64_C(0xdeadc0de);
+}
+
+static bool sailgen_fastRepCheck(struct zCapability, uint64_t);
+
+static bool sailgen_fastRepCheck(struct zCapability zc, uint64_t zi)
+{
+ __label__ end_function_207, end_block_exception_208;
+
+ bool zcbz353;
+ int64_t zE;
+ {
+ uint64_t zgaz3340;
+ zgaz3340 = zc.zE;
+ zE = ((mach_int) zgaz3340);
+
+ }
+ bool zgaz3328;
+ {
+ int64_t zgaz3327;
+ {
+ sail_int zgsz3693;
+ CREATE(sail_int)(&zgsz3693);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3693, zcap_max_E);
+ sail_int zgsz3694;
+ CREATE(sail_int)(&zgsz3694);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3694, INT64_C(2));
+ sail_int zgsz3695;
+ CREATE(sail_int)(&zgsz3695);
+ sub_int(&zgsz3695, zgsz3693, zgsz3694);
+ zgaz3327 = CONVERT_OF(mach_int, sail_int)(zgsz3695);
+ KILL(sail_int)(&zgsz3695);
+ KILL(sail_int)(&zgsz3694);
+ KILL(sail_int)(&zgsz3693);
+ }
+ {
+ sail_int zgsz3697;
+ CREATE(sail_int)(&zgsz3697);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3697, zgaz3327);
+ sail_int zgsz3696;
+ CREATE(sail_int)(&zgsz3696);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3696, zE);
+ zgaz3328 = gteq(zgsz3696, zgsz3697);
+ KILL(sail_int)(&zgsz3697);
+ KILL(sail_int)(&zgsz3696);
+ }
+
+ }
+ if (zgaz3328) { zcbz353 = true; } else {
+ int64_t zi_top;
+ {
+ uint64_t zgaz3339;
+ {
+ int64_t zgaz3338;
+ {
+ sail_int zgsz3698;
+ CREATE(sail_int)(&zgsz3698);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3698, zE);
+ sail_int zgsz3699;
+ CREATE(sail_int)(&zgsz3699);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3699, zcap_mantissa_width);
+ sail_int zgsz3700;
+ CREATE(sail_int)(&zgsz3700);
+ add_int(&zgsz3700, zgsz3698, zgsz3699);
+ zgaz3338 = CONVERT_OF(mach_int, sail_int)(zgsz3700);
+ KILL(sail_int)(&zgsz3700);
+ KILL(sail_int)(&zgsz3699);
+ KILL(sail_int)(&zgsz3698);
+ }
+ {
+ lbits zgsz3701;
+ CREATE(lbits)(&zgsz3701);
+ CONVERT_OF(lbits, fbits)(&zgsz3701, zi, UINT64_C(32) , true);
+ sail_int zgsz3702;
+ CREATE(sail_int)(&zgsz3702);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3702, zgaz3338);
+ lbits zgsz3703;
+ CREATE(lbits)(&zgsz3703);
+ arith_shiftr(&zgsz3703, zgsz3701, zgsz3702);
+ zgaz3339 = CONVERT_OF(fbits, lbits)(zgsz3703, true);
+ KILL(lbits)(&zgsz3703);
+ KILL(sail_int)(&zgsz3702);
+ KILL(lbits)(&zgsz3701);
+ }
+
+ }
+ zi_top = fast_signed(zgaz3339, 32);
+
+ }
+ uint64_t zi_mid;
+ {
+ uint64_t zgaz3337;
+ {
+ lbits zgsz3704;
+ CREATE(lbits)(&zgsz3704);
+ CONVERT_OF(lbits, fbits)(&zgsz3704, zi, UINT64_C(32) , true);
+ sail_int zgsz3705;
+ CREATE(sail_int)(&zgsz3705);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3705, zE);
+ lbits zgsz3706;
+ CREATE(lbits)(&zgsz3706);
+ shiftr(&zgsz3706, zgsz3704, zgsz3705);
+ zgaz3337 = CONVERT_OF(fbits, lbits)(zgsz3706, true);
+ KILL(lbits)(&zgsz3706);
+ KILL(sail_int)(&zgsz3705);
+ KILL(lbits)(&zgsz3704);
+ }
+ {
+ lbits zgsz3707;
+ CREATE(lbits)(&zgsz3707);
+ CONVERT_OF(lbits, fbits)(&zgsz3707, zgaz3337, UINT64_C(32) , true);
+ sail_int zgsz3708;
+ CREATE(sail_int)(&zgsz3708);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3708, zcap_mantissa_width);
+ lbits zgsz3709;
+ CREATE(lbits)(&zgsz3709);
+ sail_truncate(&zgsz3709, zgsz3707, zgsz3708);
+ zi_mid = CONVERT_OF(fbits, lbits)(zgsz3709, true);
+ KILL(lbits)(&zgsz3709);
+ KILL(sail_int)(&zgsz3708);
+ KILL(lbits)(&zgsz3707);
+ }
+
+ }
+ uint64_t za_mid;
+ {
+ uint64_t zgaz3336;
+ {
+ uint64_t zgaz3335;
+ zgaz3335 = zc.zaddress;
+ {
+ lbits zgsz3710;
+ CREATE(lbits)(&zgsz3710);
+ CONVERT_OF(lbits, fbits)(&zgsz3710, zgaz3335, UINT64_C(32) , true);
+ sail_int zgsz3711;
+ CREATE(sail_int)(&zgsz3711);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3711, zE);
+ lbits zgsz3712;
+ CREATE(lbits)(&zgsz3712);
+ shiftr(&zgsz3712, zgsz3710, zgsz3711);
+ zgaz3336 = CONVERT_OF(fbits, lbits)(zgsz3712, true);
+ KILL(lbits)(&zgsz3712);
+ KILL(sail_int)(&zgsz3711);
+ KILL(lbits)(&zgsz3710);
+ }
+
+ }
+ {
+ lbits zgsz3713;
+ CREATE(lbits)(&zgsz3713);
+ CONVERT_OF(lbits, fbits)(&zgsz3713, zgaz3336, UINT64_C(32) , true);
+ sail_int zgsz3714;
+ CREATE(sail_int)(&zgsz3714);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3714, zcap_mantissa_width);
+ lbits zgsz3715;
+ CREATE(lbits)(&zgsz3715);
+ sail_truncate(&zgsz3715, zgsz3713, zgsz3714);
+ za_mid = CONVERT_OF(fbits, lbits)(zgsz3715, true);
+ KILL(lbits)(&zgsz3715);
+ KILL(sail_int)(&zgsz3714);
+ KILL(lbits)(&zgsz3713);
+ }
+
+ }
+ uint64_t zB3;
+ {
+ uint64_t zgaz3334;
+ zgaz3334 = zc.zB;
+ {
+ lbits zgsz3716;
+ CREATE(lbits)(&zgsz3716);
+ CONVERT_OF(lbits, fbits)(&zgsz3716, zgaz3334, UINT64_C(8) , true);
+ sail_int zgsz3717;
+ CREATE(sail_int)(&zgsz3717);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3717, INT64_C(3));
+ lbits zgsz3718;
+ CREATE(lbits)(&zgsz3718);
+ sail_truncateLSB(&zgsz3718, zgsz3716, zgsz3717);
+ zB3 = CONVERT_OF(fbits, lbits)(zgsz3718, true);
+ KILL(lbits)(&zgsz3718);
+ KILL(sail_int)(&zgsz3717);
+ KILL(lbits)(&zgsz3716);
+ }
+
+ }
+ uint64_t zR3;
+ {
+ lbits zgsz3719;
+ CREATE(lbits)(&zgsz3719);
+ CONVERT_OF(lbits, fbits)(&zgsz3719, zB3, UINT64_C(3) , true);
+ lbits zgsz3720;
+ CREATE(lbits)(&zgsz3720);
+ CONVERT_OF(lbits, fbits)(&zgsz3720, UINT64_C(0b001), UINT64_C(3) , true);
+ lbits zgsz3721;
+ CREATE(lbits)(&zgsz3721);
+ sub_bits(&zgsz3721, zgsz3719, zgsz3720);
+ zR3 = CONVERT_OF(fbits, lbits)(zgsz3721, true);
+ KILL(lbits)(&zgsz3721);
+ KILL(lbits)(&zgsz3720);
+ KILL(lbits)(&zgsz3719);
+ }
+ uint64_t zR;
+ {
+ uint64_t zgaz3333;
+ {
+ int64_t zgaz3332;
+ {
+ sail_int zgsz3722;
+ CREATE(sail_int)(&zgsz3722);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3722, zcap_mantissa_width);
+ sail_int zgsz3723;
+ CREATE(sail_int)(&zgsz3723);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3723, INT64_C(3));
+ sail_int zgsz3724;
+ CREATE(sail_int)(&zgsz3724);
+ sub_int(&zgsz3724, zgsz3722, zgsz3723);
+ zgaz3332 = CONVERT_OF(mach_int, sail_int)(zgsz3724);
+ KILL(sail_int)(&zgsz3724);
+ KILL(sail_int)(&zgsz3723);
+ KILL(sail_int)(&zgsz3722);
+ }
+ zgaz3333 = sailgen_zzzz7nzzJzzK5z3zzeros_implicit(zgaz3332);
+
+ }
+ {
+ lbits zgsz3725;
+ CREATE(lbits)(&zgsz3725);
+ CONVERT_OF(lbits, fbits)(&zgsz3725, zR3, UINT64_C(3) , true);
+ lbits zgsz3726;
+ CREATE(lbits)(&zgsz3726);
+ CONVERT_OF(lbits, fbits)(&zgsz3726, zgaz3333, UINT64_C(5) , true);
+ lbits zgsz3727;
+ CREATE(lbits)(&zgsz3727);
+ append(&zgsz3727, zgsz3725, zgsz3726);
+ zR = CONVERT_OF(fbits, lbits)(zgsz3727, true);
+ KILL(lbits)(&zgsz3727);
+ KILL(lbits)(&zgsz3726);
+ KILL(lbits)(&zgsz3725);
+ }
+
+ }
+ uint64_t zdiff;
+ {
+ lbits zgsz3728;
+ CREATE(lbits)(&zgsz3728);
+ CONVERT_OF(lbits, fbits)(&zgsz3728, zR, UINT64_C(8) , true);
+ lbits zgsz3729;
+ CREATE(lbits)(&zgsz3729);
+ CONVERT_OF(lbits, fbits)(&zgsz3729, za_mid, UINT64_C(8) , true);
+ lbits zgsz3730;
+ CREATE(lbits)(&zgsz3730);
+ sub_bits(&zgsz3730, zgsz3728, zgsz3729);
+ zdiff = CONVERT_OF(fbits, lbits)(zgsz3730, true);
+ KILL(lbits)(&zgsz3730);
+ KILL(lbits)(&zgsz3729);
+ KILL(lbits)(&zgsz3728);
+ }
+ uint64_t zdiff1;
+ {
+ lbits zgsz3731;
+ CREATE(lbits)(&zgsz3731);
+ CONVERT_OF(lbits, fbits)(&zgsz3731, zdiff, UINT64_C(8) , true);
+ sail_int zgsz3732;
+ CREATE(sail_int)(&zgsz3732);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3732, INT64_C(1));
+ lbits zgsz3733;
+ CREATE(lbits)(&zgsz3733);
+ sub_bits_int(&zgsz3733, zgsz3731, zgsz3732);
+ zdiff1 = CONVERT_OF(fbits, lbits)(zgsz3733, true);
+ KILL(lbits)(&zgsz3733);
+ KILL(sail_int)(&zgsz3732);
+ KILL(lbits)(&zgsz3731);
+ }
+ bool zgaz3329;
+ {
+ sail_int zgsz3735;
+ CREATE(sail_int)(&zgsz3735);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3735, INT64_C(0));
+ sail_int zgsz3734;
+ CREATE(sail_int)(&zgsz3734);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3734, zi_top);
+ zgaz3329 = eq_int(zgsz3734, zgsz3735);
+ KILL(sail_int)(&zgsz3735);
+ KILL(sail_int)(&zgsz3734);
+ }
+ if (zgaz3329) { zcbz353 = sailgen_z8operatorz0zzzz7nzzJzzK8z3zI_uz9(zi_mid, zdiff1); } else {
+ bool zgaz3330;
+ {
+ sail_int zgsz3737;
+ CREATE(sail_int)(&zgsz3737);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3737, INT64_C(-1));
+ sail_int zgsz3736;
+ CREATE(sail_int)(&zgsz3736);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3736, zi_top);
+ zgaz3330 = eq_int(zgsz3736, zgsz3737);
+ KILL(sail_int)(&zgsz3737);
+ KILL(sail_int)(&zgsz3736);
+ }
+ if (zgaz3330) {
+ bool zgaz3331;
+ zgaz3331 = sailgen_z8operatorz0zzzz7nzzJzzK8z3zKzJ_uz9(zi_mid, zdiff);
+ bool zgsz3738;
+ if (zgaz3331) {
+ {
+ lbits zgsz3740;
+ CREATE(lbits)(&zgsz3740);
+ CONVERT_OF(lbits, fbits)(&zgsz3740, za_mid, UINT64_C(8) , true);
+ lbits zgsz3739;
+ CREATE(lbits)(&zgsz3739);
+ CONVERT_OF(lbits, fbits)(&zgsz3739, zR, UINT64_C(8) , true);
+ zgsz3738 = neq_bits(zgsz3739, zgsz3740);
+ KILL(lbits)(&zgsz3740);
+ KILL(lbits)(&zgsz3739);
+ }
+ } else { zgsz3738 = false; }
+ zcbz353 = zgsz3738;
+
+ } else { zcbz353 = false; }
+
+ }
+
+
+
+
+
+
+
+
+
+ }
+
+
+end_function_207: ;
+ return zcbz353;
+end_block_exception_208: ;
+
+ return false;
+}
+
+static void sailgen_capToString(sail_string *rop, struct zCapability);
+
+static void sailgen_capToString(sail_string *zcbz354, struct zCapability zcap)
+{
+ __label__ end_function_210, end_block_exception_211, end_function_230;
+
+ int64_t zlen;
+ zlen = sailgen_getCapLength(zcap);
+ if (have_exception) {
+
+ goto end_block_exception_211;
+ }
+ sail_string zlen_str;
+ CREATE(sail_string)(&zlen_str);
+ {
+ uint64_t zgaz3369;
+ {
+ int64_t zgaz3368;
+ {
+ sail_int zgsz3741;
+ CREATE(sail_int)(&zgsz3741);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3741, zcap_len_width);
+ sail_int zgsz3742;
+ CREATE(sail_int)(&zgsz3742);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3742, INT64_C(3));
+ sail_int zgsz3743;
+ CREATE(sail_int)(&zgsz3743);
+ add_int(&zgsz3743, zgsz3741, zgsz3742);
+ zgaz3368 = CONVERT_OF(mach_int, sail_int)(zgsz3743);
+ KILL(sail_int)(&zgsz3743);
+ KILL(sail_int)(&zgsz3742);
+ KILL(sail_int)(&zgsz3741);
+ }
+ {
+ sail_int zgsz3744;
+ CREATE(sail_int)(&zgsz3744);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3744, zlen);
+ zgaz3369 = sailgen_zzzz7lzzJzzK36z3to_bits(zgaz3368, zgsz3744);
+ KILL(sail_int)(&zgsz3744);
+ }
+
+ }
+ {
+ lbits zgsz3745;
+ CREATE(lbits)(&zgsz3745);
+ CONVERT_OF(lbits, fbits)(&zgsz3745, zgaz3369, UINT64_C(36) , true);
+ string_of_lbits(&zlen_str, zgsz3745);
+ KILL(lbits)(&zgsz3745);
+ }
+
+ }
+ uint64_t zotype64;
+ {
+ bool zgaz3365;
+ zgaz3365 = sailgen_hasReservedOType(zcap);
+ if (zgaz3365) {
+ uint64_t zgaz3366;
+ zgaz3366 = zcap.zotype;
+ zotype64 = sailgen_zzzz7mzzJzzK32zzCzz0zz7nzzJzzK4z3EXTS(INT64_C(32), zgaz3366);
+
+ } else {
+ uint64_t zgaz3367;
+ zgaz3367 = zcap.zotype;
+ zotype64 = sailgen_zzzz7mzzJzzK32zzCzz0zz7nzzJzzK4z3EXTZ(INT64_C(32), zgaz3367);
+
+ }
+
+ }
+ sail_string zgaz3364;
+ CREATE(sail_string)(&zgaz3364);
+ {
+ sail_string zgaz3362;
+ CREATE(sail_string)(&zgaz3362);
+ {
+ bool zgaz3341;
+ zgaz3341 = zcap.ztag;
+ if (zgaz3341) { COPY(sail_string)(&zgaz3362, "1"); } else { COPY(sail_string)(&zgaz3362, "0"); }
+
+ }
+ sail_string zgaz3363;
+ CREATE(sail_string)(&zgaz3363);
+ {
+ sail_string zgaz3361;
+ CREATE(sail_string)(&zgaz3361);
+ {
+ sail_string zgaz3359;
+ CREATE(sail_string)(&zgaz3359);
+ {
+ bool zgaz3342;
+ zgaz3342 = sailgen_isCapSealed(zcap);
+ if (zgaz3342) { COPY(sail_string)(&zgaz3359, "1"); } else { COPY(sail_string)(&zgaz3359, "0"); }
+
+ }
+ sail_string zgaz3360;
+ CREATE(sail_string)(&zgaz3360);
+ {
+ sail_string zgaz3358;
+ CREATE(sail_string)(&zgaz3358);
+ {
+ sail_string zgaz3356;
+ CREATE(sail_string)(&zgaz3356);
+ {
+ uint64_t zgaz3344;
+ {
+ uint64_t zgaz3343;
+ zgaz3343 = sailgen_getCapPerms(zcap);
+ {
+ lbits zgsz3746;
+ CREATE(lbits)(&zgsz3746);
+ CONVERT_OF(lbits, fbits)(&zgsz3746, UINT64_C(0b0), UINT64_C(1) , true);
+ lbits zgsz3747;
+ CREATE(lbits)(&zgsz3747);
+ CONVERT_OF(lbits, fbits)(&zgsz3747, zgaz3343, UINT64_C(15) , true);
+ lbits zgsz3748;
+ CREATE(lbits)(&zgsz3748);
+ append(&zgsz3748, zgsz3746, zgsz3747);
+ zgaz3344 = CONVERT_OF(fbits, lbits)(zgsz3748, true);
+ KILL(lbits)(&zgsz3748);
+ KILL(lbits)(&zgsz3747);
+ KILL(lbits)(&zgsz3746);
+ }
+
+ }
+ {
+ lbits zgsz3749;
+ CREATE(lbits)(&zgsz3749);
+ CONVERT_OF(lbits, fbits)(&zgsz3749, zgaz3344, UINT64_C(16) , true);
+ string_of_lbits(&zgaz3356, zgsz3749);
+ KILL(lbits)(&zgsz3749);
+ }
+
+ }
+ sail_string zgaz3357;
+ CREATE(sail_string)(&zgaz3357);
+ {
+ sail_string zgaz3355;
+ CREATE(sail_string)(&zgaz3355);
+ {
+ sail_string zgaz3353;
+ CREATE(sail_string)(&zgaz3353);
+ {
+ lbits zgsz3750;
+ CREATE(lbits)(&zgsz3750);
+ CONVERT_OF(lbits, fbits)(&zgsz3750, zotype64, UINT64_C(32) , true);
+ string_of_lbits(&zgaz3353, zgsz3750);
+ KILL(lbits)(&zgsz3750);
+ }
+ sail_string zgaz3354;
+ CREATE(sail_string)(&zgaz3354);
+ {
+ sail_string zgaz3352;
+ CREATE(sail_string)(&zgaz3352);
+ {
+ sail_string zgaz3350;
+ CREATE(sail_string)(&zgaz3350);
+ {
+ uint64_t zgaz3345;
+ zgaz3345 = sailgen_getCapOffsetBits(zcap);
+ {
+ lbits zgsz3751;
+ CREATE(lbits)(&zgsz3751);
+ CONVERT_OF(lbits, fbits)(&zgsz3751, zgaz3345, UINT64_C(32) , true);
+ string_of_lbits(&zgaz3350, zgsz3751);
+ KILL(lbits)(&zgsz3751);
+ }
+
+ }
+ sail_string zgaz3351;
+ CREATE(sail_string)(&zgaz3351);
+ {
+ sail_string zgaz3349;
+ CREATE(sail_string)(&zgaz3349);
+ {
+ sail_string zgaz3347;
+ CREATE(sail_string)(&zgaz3347);
+ {
+ uint64_t zgaz3346;
+ zgaz3346 = sailgen_getCapBaseBits(zcap);
+ {
+ lbits zgsz3752;
+ CREATE(lbits)(&zgsz3752);
+ CONVERT_OF(lbits, fbits)(&zgsz3752, zgaz3346, UINT64_C(32) , true);
+ string_of_lbits(&zgaz3347, zgsz3752);
+ KILL(lbits)(&zgsz3752);
+ }
+
+ }
+ sail_string zgaz3348;
+ CREATE(sail_string)(&zgaz3348);
+ concat_str(&zgaz3348, " length:", zlen_str);
+ concat_str(&zgaz3349, zgaz3347, zgaz3348);
+ KILL(sail_string)(&zgaz3348);
+ KILL(sail_string)(&zgaz3347);
+ }
+ concat_str(&zgaz3351, " base:", zgaz3349);
+ KILL(sail_string)(&zgaz3349);
+ }
+ concat_str(&zgaz3352, zgaz3350, zgaz3351);
+ KILL(sail_string)(&zgaz3351);
+ KILL(sail_string)(&zgaz3350);
+ }
+ concat_str(&zgaz3354, " offset:", zgaz3352);
+ KILL(sail_string)(&zgaz3352);
+ }
+ concat_str(&zgaz3355, zgaz3353, zgaz3354);
+ KILL(sail_string)(&zgaz3354);
+ KILL(sail_string)(&zgaz3353);
+ }
+ concat_str(&zgaz3357, " type:", zgaz3355);
+ KILL(sail_string)(&zgaz3355);
+ }
+ concat_str(&zgaz3358, zgaz3356, zgaz3357);
+ KILL(sail_string)(&zgaz3357);
+ KILL(sail_string)(&zgaz3356);
+ }
+ concat_str(&zgaz3360, " perms:", zgaz3358);
+ KILL(sail_string)(&zgaz3358);
+ }
+ concat_str(&zgaz3361, zgaz3359, zgaz3360);
+ KILL(sail_string)(&zgaz3360);
+ KILL(sail_string)(&zgaz3359);
+ }
+ concat_str(&zgaz3363, " s:", zgaz3361);
+ KILL(sail_string)(&zgaz3361);
+ }
+ concat_str(&zgaz3364, zgaz3362, zgaz3363);
+ KILL(sail_string)(&zgaz3363);
+ KILL(sail_string)(&zgaz3362);
+ }
+ concat_str((*(&zcbz354)), " t:", zgaz3364);
+ KILL(sail_string)(&zgaz3364);
+
+ KILL(sail_string)(&zlen_str);
+
+end_function_210: ;
+ goto end_function_230;
+end_block_exception_211: ;
+ goto end_function_230;
+end_function_230: ;
+}
+
+static uint64_t sailgen_getRepresentableAlignmentMask(uint64_t);
+
+static uint64_t sailgen_getRepresentableAlignmentMask(uint64_t zlen)
+{
+ __label__ case_214, finish_match_213, end_function_215, end_block_exception_216;
+
+ uint64_t zcbz355;
+ struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 zgaz3372;
+ {
+ uint64_t zgaz3370;
+ {
+ sail_int zgsz3753;
+ CREATE(sail_int)(&zgsz3753);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3753, INT64_C(32));
+ sail_int zgsz3754;
+ CREATE(sail_int)(&zgsz3754);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3754, INT64_C(0));
+ lbits zgsz3755;
+ CREATE(lbits)(&zgsz3755);
+ sailgen_to_bits(&zgsz3755, zgsz3753, zgsz3754);
+ zgaz3370 = CONVERT_OF(fbits, lbits)(zgsz3755, true);
+ KILL(lbits)(&zgsz3755);
+ KILL(sail_int)(&zgsz3754);
+ KILL(sail_int)(&zgsz3753);
+ }
+ uint64_t zgaz3371;
+ {
+ lbits zgsz3756;
+ CREATE(lbits)(&zgsz3756);
+ CONVERT_OF(lbits, fbits)(&zgsz3756, UINT64_C(0b0), UINT64_C(1) , true);
+ lbits zgsz3757;
+ CREATE(lbits)(&zgsz3757);
+ CONVERT_OF(lbits, fbits)(&zgsz3757, zlen, UINT64_C(32) , true);
+ lbits zgsz3758;
+ CREATE(lbits)(&zgsz3758);
+ append(&zgsz3758, zgsz3756, zgsz3757);
+ zgaz3371 = CONVERT_OF(fbits, lbits)(zgsz3758, true);
+ KILL(lbits)(&zgsz3758);
+ KILL(lbits)(&zgsz3757);
+ KILL(lbits)(&zgsz3756);
+ }
+ zgaz3372 = sailgen_setCapBounds(zdefault_cap, zgaz3370, zgaz3371);
+
+
+ }
+ uint64_t zgsz3759;
+ {
+ bool zexact;
+ zexact = zgaz3372.ztup0;
+ struct zCapability zc;
+ zc = zgaz3372.ztup1;
+ int64_t ze;
+ {
+ int64_t zgaz3378;
+ {
+ uint64_t zgaz3377;
+ zgaz3377 = zc.zE;
+ zgaz3378 = ((mach_int) zgaz3377);
+
+ }
+ {
+ sail_int zgsz3760;
+ CREATE(sail_int)(&zgsz3760);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3760, zgaz3378);
+ sail_int zgsz3761;
+ CREATE(sail_int)(&zgsz3761);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3761, zcap_max_E);
+ sail_int zgsz3762;
+ CREATE(sail_int)(&zgsz3762);
+ min_int(&zgsz3762, zgsz3760, zgsz3761);
+ ze = CONVERT_OF(mach_int, sail_int)(zgsz3762);
+ KILL(sail_int)(&zgsz3762);
+ KILL(sail_int)(&zgsz3761);
+ KILL(sail_int)(&zgsz3760);
+ }
+
+ }
+ int64_t zez7;
+ {
+ bool zgaz3376;
+ zgaz3376 = zc.zinternal_E;
+ if (zgaz3376) {
+ {
+ sail_int zgsz3763;
+ CREATE(sail_int)(&zgsz3763);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3763, ze);
+ sail_int zgsz3764;
+ CREATE(sail_int)(&zgsz3764);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3764, zinternal_E_take_bits);
+ sail_int zgsz3765;
+ CREATE(sail_int)(&zgsz3765);
+ add_int(&zgsz3765, zgsz3763, zgsz3764);
+ zez7 = CONVERT_OF(mach_int, sail_int)(zgsz3765);
+ KILL(sail_int)(&zgsz3765);
+ KILL(sail_int)(&zgsz3764);
+ KILL(sail_int)(&zgsz3763);
+ }
+ } else { zez7 = INT64_C(0); }
+
+ }
+ sbits zgaz3374;
+ {
+ int64_t zgaz3373;
+ {
+ sail_int zgsz3766;
+ CREATE(sail_int)(&zgsz3766);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3766, INT64_C(32));
+ sail_int zgsz3767;
+ CREATE(sail_int)(&zgsz3767);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3767, zez7);
+ sail_int zgsz3768;
+ CREATE(sail_int)(&zgsz3768);
+ sub_int(&zgsz3768, zgsz3766, zgsz3767);
+ zgaz3373 = CONVERT_OF(mach_int, sail_int)(zgsz3768);
+ KILL(sail_int)(&zgsz3768);
+ KILL(sail_int)(&zgsz3767);
+ KILL(sail_int)(&zgsz3766);
+ }
+ {
+ sail_int zgsz3769;
+ CREATE(sail_int)(&zgsz3769);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3769, zgaz3373);
+ lbits zgsz3770;
+ CREATE(lbits)(&zgsz3770);
+ sailgen_zzz3zzz3ones(&zgsz3770, zgsz3769);
+ zgaz3374 = CONVERT_OF(sbits, lbits)(zgsz3770, true);
+ KILL(lbits)(&zgsz3770);
+ KILL(sail_int)(&zgsz3769);
+ }
+
+ }
+ sbits zgaz3375;
+ {
+ sail_int zgsz3771;
+ CREATE(sail_int)(&zgsz3771);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3771, zez7);
+ lbits zgsz3772;
+ CREATE(lbits)(&zgsz3772);
+ sailgen_zzz3zzz3zzeros_implicit(&zgsz3772, zgsz3771);
+ zgaz3375 = CONVERT_OF(sbits, lbits)(zgsz3772, true);
+ KILL(lbits)(&zgsz3772);
+ KILL(sail_int)(&zgsz3771);
+ }
+ {
+ lbits zgsz3774;
+ CREATE(lbits)(&zgsz3774);
+ CONVERT_OF(lbits, sbits)(&zgsz3774, zgaz3374, true);
+ lbits zgsz3775;
+ CREATE(lbits)(&zgsz3775);
+ CONVERT_OF(lbits, sbits)(&zgsz3775, zgaz3375, true);
+ lbits zgsz3776;
+ CREATE(lbits)(&zgsz3776);
+ append(&zgsz3776, zgsz3774, zgsz3775);
+ zgsz3759 = CONVERT_OF(fbits, lbits)(zgsz3776, true);
+ KILL(lbits)(&zgsz3776);
+ KILL(lbits)(&zgsz3775);
+ KILL(lbits)(&zgsz3774);
+ }
+
+
+
+
+
+
+ goto finish_match_213;
+ }
+case_214: ;
+ sail_match_failure("getRepresentableAlignmentMask");
+finish_match_213: ;
+ zcbz355 = zgsz3759;
+
+
+end_function_215: ;
+ return zcbz355;
+end_block_exception_216: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+static uint64_t sailgen_getRepresentableLength(uint64_t);
+
+static uint64_t sailgen_getRepresentableLength(uint64_t zlen)
+{
+ __label__ end_function_218, end_block_exception_219;
+
+ uint64_t zcbz356;
+ uint64_t zm;
+ zm = sailgen_getRepresentableAlignmentMask(zlen);
+ uint64_t zgaz3380;
+ {
+ uint64_t zgaz3379;
+ {
+ lbits zgsz3777;
+ CREATE(lbits)(&zgsz3777);
+ CONVERT_OF(lbits, fbits)(&zgsz3777, zm, UINT64_C(32) , true);
+ lbits zgsz3778;
+ CREATE(lbits)(&zgsz3778);
+ not_bits(&zgsz3778, zgsz3777);
+ zgaz3379 = CONVERT_OF(fbits, lbits)(zgsz3778, true);
+ KILL(lbits)(&zgsz3778);
+ KILL(lbits)(&zgsz3777);
+ }
+ {
+ lbits zgsz3779;
+ CREATE(lbits)(&zgsz3779);
+ CONVERT_OF(lbits, fbits)(&zgsz3779, zlen, UINT64_C(32) , true);
+ lbits zgsz3780;
+ CREATE(lbits)(&zgsz3780);
+ CONVERT_OF(lbits, fbits)(&zgsz3780, zgaz3379, UINT64_C(32) , true);
+ lbits zgsz3781;
+ CREATE(lbits)(&zgsz3781);
+ add_bits(&zgsz3781, zgsz3779, zgsz3780);
+ zgaz3380 = CONVERT_OF(fbits, lbits)(zgsz3781, true);
+ KILL(lbits)(&zgsz3781);
+ KILL(lbits)(&zgsz3780);
+ KILL(lbits)(&zgsz3779);
+ }
+
+ }
+ {
+ lbits zgsz3782;
+ CREATE(lbits)(&zgsz3782);
+ CONVERT_OF(lbits, fbits)(&zgsz3782, zgaz3380, UINT64_C(32) , true);
+ lbits zgsz3783;
+ CREATE(lbits)(&zgsz3783);
+ CONVERT_OF(lbits, fbits)(&zgsz3783, zm, UINT64_C(32) , true);
+ lbits zgsz3784;
+ CREATE(lbits)(&zgsz3784);
+ and_bits(&zgsz3784, zgsz3782, zgsz3783);
+ zcbz356 = CONVERT_OF(fbits, lbits)(zgsz3784, true);
+ KILL(lbits)(&zgsz3784);
+ KILL(lbits)(&zgsz3783);
+ KILL(lbits)(&zgsz3782);
+ }
+
+
+end_function_218: ;
+ return zcbz356;
+end_block_exception_219: ;
+
+ return UINT64_C(0xdeadc0de);
+}
+
+// register TestCap
+static struct zCapability zTestCap;
+
+// register TestAddr
+static uint64_t zTestAddr;
+
+// register TestLen
+static uint64_t zTestLen;
+
+static unit sailgen_main(unit);
+
+
+static unit sailgen_main(unit zgsz3785)
+{
+ __label__ end_function_225, end_block_exception_226;
+
+ unit zcbz357;
+ {
+ zTestCap = znull_cap;
+ unit zgsz3786;
+ zgsz3786 = UNIT;
+ }
+ uint64_t zbits1;
+ zbits1 = sailgen_capToBits(zTestCap);
+ uint64_t zbits2;
+ zbits2 = sailgen_capToMemBits(zTestCap);
+ struct zCapability zcap1;
+ {
+ bool zgaz3386;
+ zgaz3386 = zTestCap.ztag;
+ zcap1 = sailgen_capBitsToCapability(zgaz3386, zbits1);
+
+ }
+ struct zCapability zcap2;
+ {
+ bool zgaz3385;
+ zgaz3385 = zTestCap.ztag;
+ zcap2 = sailgen_memBitsToCapability(zgaz3385, zbits2);
+
+ }
+ bool zrep;
+ zrep = sailgen_fastRepCheck(zTestCap, zTestAddr);
+ {
+ __label__ case_222, finish_match_221;
+
+ struct ztuple_z8z5boolzCz0z5structz0zzCapabilityz9 zgaz3381;
+ zgaz3381 = sailgen_setCapBounds(zTestCap, zTestAddr, zTestLen);
+ unit zgsz3787;
+ {
+ bool ztup__0;
+ ztup__0 = zgaz3381.ztup0;
+ struct zCapability ztup__1;
+ ztup__1 = zgaz3381.ztup1;
+ bool zexact;
+ zexact = ztup__0;
+ struct zCapability zcap;
+ zcap = ztup__1;
+ zgsz3787 = UNIT;
+
+
+
+
+ goto finish_match_221;
+ }
+ case_222: ;
+ sail_match_failure("main");
+ finish_match_221: ;
+ unit zgsz3792;
+ zgsz3792 = zgsz3787;
+
+
+ }
+ {
+ __label__ case_224, finish_match_223;
+
+ struct ztuple_z8z5i64zCz0z5i64z9 zgaz3382;
+ zgaz3382 = sailgen_getCapBounds(zTestCap);
+ unit zgsz3789;
+ {
+ int64_t ztup__0;
+ ztup__0 = zgaz3382.ztup0;
+ int64_t ztup__1;
+ ztup__1 = zgaz3382.ztup1;
+ int64_t zbase;
+ zbase = ztup__0;
+ int64_t ztop;
+ ztop = ztup__1;
+ zgsz3789 = UNIT;
+
+
+
+
+ goto finish_match_223;
+ }
+ case_224: ;
+ sail_match_failure("main");
+ finish_match_223: ;
+ unit zgsz3791;
+ zgsz3791 = zgsz3789;
+
+
+ }
+ uint64_t zflags;
+ zflags = sailgen_getCapFlags(zTestCap);
+ struct zCapability znew_cap;
+ {
+ uint64_t zgaz3384;
+ {
+ int64_t zgaz3383;
+ {
+ sail_int zgsz3793;
+ CREATE(sail_int)(&zgsz3793);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3793, INT64_C(15));
+ sail_int zgsz3794;
+ CREATE(sail_int)(&zgsz3794);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3794, INT64_C(0));
+ sail_int zgsz3795;
+ CREATE(sail_int)(&zgsz3795);
+ add_int(&zgsz3795, zgsz3793, zgsz3794);
+ zgaz3383 = CONVERT_OF(mach_int, sail_int)(zgsz3795);
+ KILL(sail_int)(&zgsz3795);
+ KILL(sail_int)(&zgsz3794);
+ KILL(sail_int)(&zgsz3793);
+ }
+ {
+ sail_int zgsz3796;
+ CREATE(sail_int)(&zgsz3796);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3796, zgaz3383);
+ lbits zgsz3797;
+ CREATE(lbits)(&zgsz3797);
+ sailgen_zzz3zzz3ones(&zgsz3797, zgsz3796);
+ zgaz3384 = CONVERT_OF(fbits, lbits)(zgsz3797, true);
+ KILL(lbits)(&zgsz3797);
+ KILL(sail_int)(&zgsz3796);
+ }
+
+ }
+ znew_cap = sailgen_setCapPerms(zTestCap, zgaz3384);
+
+ }
+ sail_string zcap_str;
+ CREATE(sail_string)(&zcap_str);
+ sailgen_capToString(&zcap_str, zTestCap);
+ if (have_exception) {
+
+
+
+
+
+
+
+ KILL(sail_string)(&zcap_str);
+ goto end_block_exception_226;
+ }
+ uint64_t zlen;
+ zlen = sailgen_getRepresentableLength(zTestAddr);
+ uint64_t zmask;
+ zmask = sailgen_getRepresentableAlignmentMask(zTestAddr);
+ zcbz357 = UNIT;
+
+
+ KILL(sail_string)(&zcap_str);
+
+
+
+
+
+
+
+end_function_225: ;
+ return zcbz357;
+end_block_exception_226: ;
+
+ return UNIT;
+}
+
+static unit sailgen_initializze_registers(unit);
+
+static unit sailgen_initializze_registers(unit zgsz3798)
+{
+ __label__ end_function_228, end_block_exception_229;
+
+ unit zcbz358;
+ {
+ zTestCap = sailgen_undefined_Capability(UNIT);
+ unit zgsz3802;
+ zgsz3802 = UNIT;
+ }
+ {
+ {
+ sail_int zgsz3799;
+ CREATE(sail_int)(&zgsz3799);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3799, INT64_C(32));
+ lbits zgsz3800;
+ CREATE(lbits)(&zgsz3800);
+ UNDEFINED(lbits)(&zgsz3800, zgsz3799);
+ zTestAddr = CONVERT_OF(fbits, lbits)(zgsz3800, true);
+ KILL(lbits)(&zgsz3800);
+ KILL(sail_int)(&zgsz3799);
+ }
+ unit zgsz3801;
+ zgsz3801 = UNIT;
+ }
+ int64_t zgaz3387;
+ {
+ sail_int zgsz3803;
+ CREATE(sail_int)(&zgsz3803);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3803, INT64_C(32));
+ sail_int zgsz3804;
+ CREATE(sail_int)(&zgsz3804);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3804, INT64_C(1));
+ sail_int zgsz3805;
+ CREATE(sail_int)(&zgsz3805);
+ add_int(&zgsz3805, zgsz3803, zgsz3804);
+ zgaz3387 = CONVERT_OF(mach_int, sail_int)(zgsz3805);
+ KILL(sail_int)(&zgsz3805);
+ KILL(sail_int)(&zgsz3804);
+ KILL(sail_int)(&zgsz3803);
+ }
+ {
+ sail_int zgsz3806;
+ CREATE(sail_int)(&zgsz3806);
+ CONVERT_OF(sail_int, mach_int)(&zgsz3806, zgaz3387);
+ lbits zgsz3807;
+ CREATE(lbits)(&zgsz3807);
+ UNDEFINED(lbits)(&zgsz3807, zgsz3806);
+ zTestLen = CONVERT_OF(fbits, lbits)(zgsz3807, true);
+ KILL(lbits)(&zgsz3807);
+ KILL(sail_int)(&zgsz3806);
+ }
+ zcbz358 = UNIT;
+
+end_function_228: ;
+ return zcbz358;
+end_block_exception_229: ;
+
+ return UNIT;
+}
+
+static void model_init(void)
+{
+ setup_rts();
+ sailgen_initializze_registers(UNIT);
+ create_letbind_0();
+ create_letbind_1();
+ create_letbind_2();
+ create_letbind_3();
+ create_letbind_4();
+ create_letbind_5();
+ create_letbind_6();
+ create_letbind_7();
+ create_letbind_8();
+ create_letbind_9();
+ create_letbind_10();
+ create_letbind_11();
+ create_letbind_12();
+ create_letbind_13();
+ create_letbind_14();
+ create_letbind_15();
+ create_letbind_16();
+ create_letbind_17();
+ create_letbind_18();
+ create_letbind_19();
+ create_letbind_20();
+ create_letbind_21();
+ create_letbind_22();
+ create_letbind_23();
+ create_letbind_24();
+ create_letbind_25();
+ create_letbind_26();
+ create_letbind_27();
+}
+
+static void model_fini(void)
+{
+ kill_letbind_27();
+ kill_letbind_26();
+ kill_letbind_25();
+ kill_letbind_24();
+ kill_letbind_23();
+ kill_letbind_22();
+ kill_letbind_21();
+ kill_letbind_20();
+ kill_letbind_19();
+ kill_letbind_18();
+ kill_letbind_17();
+ kill_letbind_16();
+ kill_letbind_15();
+ kill_letbind_14();
+ kill_letbind_13();
+ kill_letbind_12();
+ kill_letbind_11();
+ kill_letbind_10();
+ kill_letbind_9();
+ kill_letbind_8();
+ kill_letbind_7();
+ kill_letbind_6();
+ kill_letbind_5();
+ kill_letbind_4();
+ kill_letbind_3();
+ kill_letbind_2();
+ kill_letbind_1();
+ kill_letbind_0();
+ cleanup_rts();
+}
+
+static int model_main(int argc, char *argv[])
+{
+ model_init();
+ if (process_arguments(argc, argv)) exit(EXIT_FAILURE);
+ sailgen_main(UNIT);
+ model_fini();
+ return EXIT_SUCCESS;
+}
+
+
diff --git a/gdb/cheri-compressed-cap/test/sail_failure.c b/gdb/cheri-compressed-cap/test/sail_failure.c
new file mode 100644
index 00000000000..b725d42c6be
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/sail_failure.c
@@ -0,0 +1,14 @@
+#include "sail_failure.h"
+
+void sail_match_failure(sail_string msg)
+{
+ fprintf(stderr, "Pattern match failure in %s\n", msg);
+ exit(EXIT_FAILURE);
+}
+
+unit sail_assert(bool b, sail_string msg)
+{
+ if (b) return UNIT;
+ fprintf(stderr, "Assertion failed: %s\n", msg);
+ exit(EXIT_FAILURE);
+}
diff --git a/gdb/cheri-compressed-cap/test/sail_failure.h b/gdb/cheri-compressed-cap/test/sail_failure.h
new file mode 100644
index 00000000000..d43baf4dd66
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/sail_failure.h
@@ -0,0 +1,18 @@
+#ifndef SAIL_FAILURE_H
+#define SAIL_FAILURE_H
+
+#include "sail.h"
+
+/*
+ * This function should be called whenever a pattern match failure
+ * occurs. Pattern match failures are always fatal.
+ */
+void sail_match_failure(sail_string msg);
+
+/*
+ * sail_assert implements the assert construct in Sail. If any
+ * assertion fails we immediately exit the model.
+ */
+unit sail_assert(bool b, sail_string msg);
+
+#endif
diff --git a/gdb/cheri-compressed-cap/test/sail_wrapper.h b/gdb/cheri-compressed-cap/test/sail_wrapper.h
new file mode 100644
index 00000000000..e7c1ac47934
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/sail_wrapper.h
@@ -0,0 +1,140 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2020 Alex Richardson
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include "../cheri_compressed_cap.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void sail_decode_64_mem(cc64_addr_t pesbt, cc64_addr_t cursor, bool tag, cc64_cap_t * cdp);
+void sail_decode_64_raw(cc64_addr_t pesbt, cc64_addr_t cursor, bool tag, cc64_cap_t* cdp);
+struct cc64_bounds_bits sail_extract_bounds_bits_64(uint32_t pesbt);
+cc64_addr_t sail_compress_64_raw(const cc64_cap_t* csp);
+cc64_addr_t sail_compress_64_mem(const cc64_cap_t* csp);
+cc64_addr_t sail_null_pesbt_64(void);
+cc64_addr_t sail_representable_mask_64(cc64_addr_t len);
+cc64_addr_t sail_representable_length_64(cc64_addr_t len);
+bool sail_setbounds_64(cc64_cap_t* cap, cc64_addr_t req_base, cc64_length_t req_top);
+
+void sail_decode_128_mem(cc128_addr_t pesbt, cc128_addr_t cursor, bool tag, cc128_cap_t* cdp);
+void sail_decode_128_raw(cc128_addr_t pesbt, cc128_addr_t cursor, bool tag, cc128_cap_t* cdp);
+struct cc128_bounds_bits sail_extract_bounds_bits_128(cc128_addr_t pesbt);
+cc128_addr_t sail_compress_128_raw(const cc128_cap_t* csp);
+cc128_addr_t sail_compress_128_mem(const cc128_cap_t* csp);
+cc128_addr_t sail_null_pesbt_128(void);
+cc128_addr_t sail_representable_mask_128(cc128_addr_t len);
+cc128_addr_t sail_representable_length_128(cc128_addr_t len);
+bool sail_setbounds_128(cc128_cap_t* cap, cc128_addr_t req_base, cc128_length_t req_top);
+
+void sail_decode_128m_mem(cc128m_addr_t pesbt, cc128m_addr_t cursor, bool tag, cc128m_cap_t* cdp);
+void sail_decode_128m_raw(cc128m_addr_t pesbt, cc128m_addr_t cursor, bool tag, cc128m_cap_t* cdp);
+struct cc128m_bounds_bits sail_extract_bounds_bits_128m(cc128m_addr_t pesbt);
+cc128m_addr_t sail_compress_128m_raw(const cc128m_cap_t* csp);
+cc128m_addr_t sail_compress_128m_mem(const cc128m_cap_t* csp);
+cc128m_addr_t sail_null_pesbt_128m(void);
+cc128m_addr_t sail_representable_mask_128m(cc128m_addr_t len);
+cc128m_addr_t sail_representable_length_128m(cc128m_addr_t len);
+bool sail_setbounds_128m(cc128m_cap_t* cap, cc128m_addr_t req_base, cc128m_length_t req_top);
+
+#define _cc_sail_decode_mem _CC_CONCAT(_CC_CONCAT(sail_decode_, CC_FORMAT_LOWER), _mem)
+#define _cc_sail_decode_raw _CC_CONCAT(_CC_CONCAT(sail_decode_, CC_FORMAT_LOWER), _raw)
+#define _cc_sail_extract_bounds_bits _CC_CONCAT(sail_extract_bounds_bits_, CC_FORMAT_LOWER)
+#define _cc_sail_compress_raw _CC_CONCAT(_CC_CONCAT(sail_compress_, CC_FORMAT_LOWER), _raw)
+#define _cc_sail_compress_mem _CC_CONCAT(_CC_CONCAT(sail_compress_, CC_FORMAT_LOWER), _mem)
+#define _cc_sail_null_pesbt _CC_CONCAT(sail_null_pesbt_, CC_FORMAT_LOWER)
+#define _cc_sail_representable_mask _CC_CONCAT(sail_representable_mask_, CC_FORMAT_LOWER)
+#define _cc_sail_representable_length _CC_CONCAT(sail_representable_length_, CC_FORMAT_LOWER)
+#define _cc_sail_setbounds _CC_CONCAT(sail_setbounds_, CC_FORMAT_LOWER)
+
+#ifdef __cplusplus
+}
+
+class TestAPI64 : public CompressedCap64 {
+public:
+ static inline void sail_decode_mem(addr_t pesbt, addr_t cursor, bool tag, cap_t* cdp) {
+ return sail_decode_64_mem(pesbt, cursor, tag, cdp);
+ }
+ static inline void sail_decode_raw(addr_t pesbt, addr_t cursor, bool tag, cap_t* cdp) {
+ return sail_decode_64_raw(pesbt, cursor, tag, cdp);
+ }
+ static inline bounds_bits sail_extract_bounds_bits(addr_t pesbt) { return sail_extract_bounds_bits_64(pesbt); }
+ static inline addr_t sail_compress_raw(const cap_t* csp) { return sail_compress_64_raw(csp); }
+ static inline addr_t sail_compress_mem(const cap_t* csp) { return sail_compress_64_mem(csp); }
+ static inline addr_t sail_null_pesbt() { return sail_null_pesbt_64(); }
+ static inline addr_t sail_representable_mask(addr_t len) { return sail_representable_mask_64(len); }
+ static inline addr_t sail_representable_length(addr_t len) { return sail_representable_length_64(len); }
+ static inline bool sail_setbounds(cap_t* cap, addr_t req_base, length_t req_top) {
+ return sail_setbounds_64(cap, req_base, req_top);
+ }
+};
+
+class TestAPI128 : public CompressedCap128 {
+public:
+ static inline void sail_decode_mem(addr_t pesbt, addr_t cursor, bool tag, cap_t* cdp) {
+ return sail_decode_128_mem(pesbt, cursor, tag, cdp);
+ }
+ static inline void sail_decode_raw(addr_t pesbt, addr_t cursor, bool tag, cap_t* cdp) {
+ return sail_decode_128_raw(pesbt, cursor, tag, cdp);
+ }
+ static inline bounds_bits sail_extract_bounds_bits(addr_t pesbt) { return sail_extract_bounds_bits_128(pesbt); }
+ static inline addr_t sail_compress_raw(const cap_t* csp) { return sail_compress_128_raw(csp); }
+ static inline addr_t sail_compress_mem(const cap_t* csp) { return sail_compress_128_mem(csp); }
+ static inline addr_t sail_null_pesbt() { return sail_null_pesbt_128(); }
+ static inline addr_t sail_representable_mask(addr_t len) { return sail_representable_mask_128(len); }
+ static inline addr_t sail_representable_length(addr_t len) { return sail_representable_length_128(len); }
+ static inline bool sail_setbounds(cap_t* cap, addr_t req_base, length_t req_top) {
+ return sail_setbounds_128(cap, req_base, req_top);
+ }
+};
+
+class TestAPI128m : public CompressedCap128m {
+public:
+ static inline void sail_decode_mem(addr_t pesbt, addr_t cursor, bool tag, cap_t* cdp) {
+ return sail_decode_128m_mem(pesbt, cursor, tag, cdp);
+ }
+ static inline void sail_decode_raw(addr_t pesbt, addr_t cursor, bool tag, cap_t* cdp) {
+ return sail_decode_128m_raw(pesbt, cursor, tag, cdp);
+ }
+ static inline bounds_bits sail_extract_bounds_bits(addr_t pesbt) { return sail_extract_bounds_bits_128m(pesbt); }
+ static inline addr_t sail_compress_raw(const cap_t* csp) { return sail_compress_128m_raw(csp); }
+ static inline addr_t sail_compress_mem(const cap_t* csp) { return sail_compress_128m_mem(csp); }
+ static inline addr_t sail_null_pesbt() { return sail_null_pesbt_128m(); }
+ static inline addr_t sail_representable_mask(addr_t len) { return sail_representable_mask_128m(len); }
+ static inline addr_t sail_representable_length(addr_t len) { return sail_representable_length_128m(len); }
+ static inline bool sail_setbounds(cap_t* cap, addr_t req_base, length_t req_top) {
+ return sail_setbounds_128m(cap, req_base, req_top);
+ }
+};
+
+#define TestAPICC _CC_CONCAT(TestAPI, CC_FORMAT_LOWER)
+#endif
diff --git a/gdb/cheri-compressed-cap/test/sail_wrapper_128.c b/gdb/cheri-compressed-cap/test/sail_wrapper_128.c
new file mode 100644
index 00000000000..fe4a65824fb
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/sail_wrapper_128.c
@@ -0,0 +1,106 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2020 Alex Richardson
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include "sail.h"
+
+/* Provide the 128-specific APIs for sail_wrapper_common.c */
+
+#define SAIL_COMPRESSION_GENERATED_C_FILE "sail_compression_128.c"
+#define sail_bounds_tuple ztuple_z8z5bv64zCz0z5bvz9
+
+#define SAIL_WRAPPER_CC_FORMAT_LOWER 128
+#define SAIL_WRAPPER_CC_FORMAT_UPPER 128
+
+/* CHERI-64 uses uint64_t, CHERI-128 uses lbits */
+typedef lbits sail_cap_bits;
+#define SAIL_COMPRESSION_INDIRECT_BITS
+static void create_sail_cap_bits(sail_cap_bits* bits) { create_lbits(bits); }
+static void kill_sail_cap_bits(sail_cap_bits* bits) { kill_lbits(bits); }
+static void pesbt_and_addr_to_sail_cap_bits(sail_cap_bits* out, uint64_t pesbt, uint64_t cursor) {
+ lbits sail_pesbt;
+ lbits sail_cursor;
+ CREATE_OF(lbits, fbits)(&sail_pesbt, pesbt, 64, true);
+ CREATE_OF(lbits, fbits)(&sail_cursor, cursor, 64, true);
+ CREATE(lbits)(out);
+ append(out, sail_pesbt, sail_cursor);
+ KILL(lbits)(&sail_pesbt);
+ KILL(lbits)(&sail_cursor);
+}
+static void cc_length_t_to_sail_cap_bits(sail_cap_bits* out, unsigned __int128 len) {
+ lbits len_high;
+ lbits len_low;
+ CREATE_OF(lbits, fbits)(&len_high, len >> 64, 1, true);
+ CREATE_OF(lbits, fbits)(&len_low, (uint64_t)len, 64, true);
+ append(out, len_high, len_low);
+ KILL(lbits)(&len_high);
+ KILL(lbits)(&len_low);
+}
+
+static inline uint64_t extract_bits(lbits op, uint64_t start, uint64_t len);
+static inline uint64_t extract_sail_cap_bits(sail_cap_bits* bits, uint64_t start, uint64_t len) {
+ return extract_bits(*bits, start, len);
+}
+
+#include "sail_wrapper_common.c"
+
+static inline void set_top_base_from_sail(const struct zCapability* sail, _cc_cap_t* c) {
+ // Would be nice to have a stable name for this tuple:
+ struct sail_bounds_tuple base_top;
+ _CC_CONCAT(create_, sail_bounds_tuple)(&base_top);
+ sailgen_getCapBoundsBits(&base_top, *sail);
+ c->cr_base = base_top.ztup0;
+ sail_int top_len;
+ CREATE(sail_int)(&top_len);
+ length_lbits(&top_len, base_top.ztup1);
+ assert(CONVERT_OF(mach_int, sail_int)(top_len) == 65);
+ KILL(sail_int)(&top_len);
+ fbits top_high = extract_bits(base_top.ztup1, 64, 1);
+ fbits top_low = CONVERT_OF(fbits, lbits)(base_top.ztup1, true);
+ c->_cr_top = (((cc128_length_t)top_high) << 64) | (cc128_length_t)top_low;
+ _CC_CONCAT(kill_, sail_bounds_tuple)(&base_top);
+}
+
+/* Exported API */
+void sail_decode_128_mem(uint64_t mem_pesbt, uint64_t mem_cursor, bool tag, cc128_cap_t* cdp) {
+ sail_decode_common_mem(mem_pesbt, mem_cursor, tag, cdp);
+}
+void sail_decode_128_raw(uint64_t mem_pesbt, uint64_t mem_cursor, bool tag, cc128_cap_t* cdp) {
+ sail_decode_common_raw(mem_pesbt, mem_cursor, tag, cdp);
+}
+struct cc128_bounds_bits sail_extract_bounds_bits_128(uint64_t pesbt) {
+ return sail_extract_bounds_bits_common(pesbt);
+}
+uint64_t sail_compress_128_raw(const cc128_cap_t* csp) { return sail_compress_common_raw(csp); }
+uint64_t sail_compress_128_mem(const cc128_cap_t* csp) { return sail_compress_common_mem(csp); }
+
+cc128_addr_t sail_representable_mask_128(cc128_addr_t len) { return sailgen_getRepresentableAlignmentMask(len); }
+cc128_addr_t sail_representable_length_128(cc128_addr_t len) { return sailgen_getRepresentableLength(len); }
diff --git a/gdb/cheri-compressed-cap/test/sail_wrapper_128m.c b/gdb/cheri-compressed-cap/test/sail_wrapper_128m.c
new file mode 100644
index 00000000000..cecd46c52ab
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/sail_wrapper_128m.c
@@ -0,0 +1,89 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2020 Alex Richardson
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include "sail.h"
+
+/* Provide the Morello-specific APIs for sail_wrapper_common.c */
+
+#define MORELLO_SAIL_PREFIX sailgen_
+#define SAIL_COMPRESSION_GENERATED_C_FILE "sail_compression_128m.c"
+// Two 65-bit bounds and a bool (for exactness)
+#define sail_bounds_tuple ztuple_z8z5bvzCz0z5bvzCz0z5boolz9
+
+#define SAIL_WRAPPER_CC_IS_MORELLO
+#define SAIL_WRAPPER_CC_FORMAT_LOWER 128m
+#define SAIL_WRAPPER_CC_FORMAT_UPPER 128M
+
+/* CHERI-64 uses uint64_t, CHERI-128 uses lbits */
+typedef lbits sail_cap_bits;
+#define SAIL_COMPRESSION_INDIRECT_BITS
+static void create_sail_cap_bits(sail_cap_bits* bits) { create_lbits(bits); }
+static void kill_sail_cap_bits(sail_cap_bits* bits) { kill_lbits(bits); }
+static void pesbt_and_addr_to_sail_cap_bits(sail_cap_bits* out, uint64_t pesbt, uint64_t cursor) {
+ lbits sail_pesbt;
+ lbits sail_cursor;
+ CREATE_OF(lbits, fbits)(&sail_pesbt, pesbt, 64, true);
+ CREATE_OF(lbits, fbits)(&sail_cursor, cursor, 64, true);
+ CREATE(lbits)(out);
+ append(out, sail_pesbt, sail_cursor);
+ KILL(lbits)(&sail_pesbt);
+ KILL(lbits)(&sail_cursor);
+}
+static void cc_length_t_to_sail_cap_bits(sail_cap_bits* out, unsigned __int128 len) {
+ lbits len_high;
+ lbits len_low;
+ CREATE_OF(lbits, fbits)(&len_high, len >> 64, 1, true);
+ CREATE_OF(lbits, fbits)(&len_low, (uint64_t)len, 64, true);
+ append(out, len_high, len_low);
+ KILL(lbits)(&len_high);
+ KILL(lbits)(&len_low);
+}
+
+static inline uint64_t extract_bits(lbits op, uint64_t start, uint64_t len);
+static inline uint64_t extract_sail_cap_bits(sail_cap_bits* bits, uint64_t start, uint64_t len) {
+ return extract_bits(*bits, start, len);
+}
+
+#include "sail_wrapper_common.c"
+
+/* Exported API */
+void sail_decode_128m_mem(uint64_t mem_pesbt, uint64_t mem_cursor, bool tag, cc128m_cap_t* cdp) {
+ sail_decode_common_mem(mem_pesbt, mem_cursor, tag, cdp);
+}
+void sail_decode_128m_raw(uint64_t mem_pesbt, uint64_t mem_cursor, bool tag, cc128m_cap_t* cdp) {
+ sail_decode_common_raw(mem_pesbt, mem_cursor, tag, cdp);
+}
+struct cc128m_bounds_bits sail_extract_bounds_bits_128m(uint64_t pesbt) {
+ return sail_extract_bounds_bits_common(pesbt);
+}
+uint64_t sail_compress_128m_raw(const cc128m_cap_t* csp) { return sail_compress_common_raw(csp); }
+uint64_t sail_compress_128m_mem(const cc128m_cap_t* csp) { return sail_compress_common_mem(csp); }
diff --git a/gdb/cheri-compressed-cap/test/sail_wrapper_64.c b/gdb/cheri-compressed-cap/test/sail_wrapper_64.c
new file mode 100644
index 00000000000..620ca77a0d9
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/sail_wrapper_64.c
@@ -0,0 +1,77 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2020 Alex Richardson
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include "sail.h"
+
+/* Provide the 64-specific APIs for sail_wrapper_common.c */
+#define SAIL_COMPRESSION_GENERATED_C_FILE "sail_compression_64.c"
+// Would be nice to have a stable name for this tuple:
+#define sail_bounds_tuple ztuple_z8z5bv32zCz0z5bv33z9
+
+#define SAIL_WRAPPER_CC_FORMAT_LOWER 64
+#define SAIL_WRAPPER_CC_FORMAT_UPPER 64
+
+/* CHERI-64 uses uint64_t, CHERI-128 uses lbits */
+typedef uint64_t sail_cap_bits;
+static void CREATE(sail_cap_bits)(sail_cap_bits* bits) { *bits = 0; }
+static void KILL(sail_cap_bits)(sail_cap_bits* bits) { *bits = UINT64_MAX; }
+static void pesbt_and_addr_to_sail_cap_bits(sail_cap_bits* out, uint32_t pesbt, uint32_t cursor) {
+ *out = (sail_cap_bits)pesbt << 32 | (sail_cap_bits)cursor;
+}
+static void cc_length_t_to_sail_cap_bits(sail_cap_bits* out, uint64_t len) { *out = len; }
+static uint64_t cc64_getbits(uint64_t bits, uint32_t start, uint32_t size);
+static uint64_t extract_sail_cap_bits(sail_cap_bits* bits, uint64_t start, uint64_t len) {
+ return cc64_getbits(*bits, start, len);
+}
+#include "sail_wrapper_common.c"
+
+static inline void set_top_base_from_sail(const struct zCapability* sail, _cc_cap_t* c) {
+ struct sail_bounds_tuple base_top = sailgen_getCapBoundsBits(*sail);
+ c->cr_base = base_top.ztup0;
+ c->_cr_top = base_top.ztup1;
+}
+
+/* Exported API */
+void sail_decode_64_mem(cc64_addr_t mem_pesbt, cc64_addr_t mem_cursor, bool tag, cc64_cap_t* cdp) {
+ sail_decode_common_mem(mem_pesbt, mem_cursor, tag, cdp);
+}
+void sail_decode_64_raw(cc64_addr_t mem_pesbt, cc64_addr_t mem_cursor, bool tag, cc64_cap_t* cdp) {
+ sail_decode_common_raw(mem_pesbt, mem_cursor, tag, cdp);
+}
+struct cc64_bounds_bits sail_extract_bounds_bits_64(cc64_addr_t pesbt) {
+ return sail_extract_bounds_bits_common(pesbt);
+}
+cc64_addr_t sail_compress_64_raw(const cc64_cap_t* csp) { return sail_compress_common_raw(csp); }
+cc64_addr_t sail_compress_64_mem(const cc64_cap_t* csp) { return sail_compress_common_mem(csp); }
+
+cc64_addr_t sail_representable_mask_64(cc64_addr_t len) { return sailgen_getRepresentableAlignmentMask(len); }
+cc64_addr_t sail_representable_length_64(cc64_addr_t len) { return sailgen_getRepresentableLength(len); }
diff --git a/gdb/cheri-compressed-cap/test/sail_wrapper_common.c b/gdb/cheri-compressed-cap/test/sail_wrapper_common.c
new file mode 100644
index 00000000000..d83fd78c7b4
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/sail_wrapper_common.c
@@ -0,0 +1,279 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2020 Alex Richardson
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#include "sail.h"
+#include "sail_failure.h"
+#include "sail_wrapper.h"
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wsometimes-uninitialized"
+#ifdef HAVE_UNUSED_BUT_SET_VARIABLE
+#pragma clang diagnostic ignored "-Wunused-but-set-variable"
+#endif
+#include SAIL_COMPRESSION_GENERATED_C_FILE
+#pragma clang diagnostic pop
+
+#define CC_FORMAT_LOWER SAIL_WRAPPER_CC_FORMAT_LOWER
+#define CC_FORMAT_UPPER SAIL_WRAPPER_CC_FORMAT_UPPER
+
+__attribute__((constructor, used)) static void sail_startup(void) { model_init(); }
+__attribute__((destructor, used)) static void sail_cleanup(void) { model_fini(); }
+
+static inline uint64_t extract_bits(lbits op, uint64_t start, uint64_t len) {
+ sail_int start_sail;
+ CREATE_OF(sail_int, mach_int)(&start_sail, start);
+ sail_int len_sail;
+ CREATE_OF(sail_int, mach_int)(&len_sail, len);
+ lbits slice_bits;
+ CREATE(lbits)(&slice_bits);
+ slice(&slice_bits, op, start_sail, len_sail);
+ KILL(sail_int)(&start_sail);
+ KILL(sail_int)(&len_sail);
+ uint64_t result = CONVERT_OF(fbits, lbits)(slice_bits, true);
+ KILL(lbits)(&slice_bits);
+ return result;
+}
+
+#ifdef SAIL_WRAPPER_CC_IS_MORELLO
+
+static inline uint64_t extract_low_bits(lbits bits) {
+ fbits bits_low = CONVERT_OF(fbits, lbits)(bits, true);
+ return (uint64_t)bits_low;
+}
+
+#define CHECK_FIELD_LENGTHS
+
+static inline void check_length(lbits bits, uint64_t length) {
+#ifdef CHECK_FIELD_LENGTHS
+ sail_int len;
+ CREATE(sail_int)(&len);
+ length_lbits(&len, bits);
+ assert(CONVERT_OF(mach_int, sail_int)(len) == length);
+ KILL(sail_int)(&len);
+#endif
+}
+
+/* Exported API */
+void sail_decode_common_mem(uint64_t mem_pesbt, uint64_t mem_cursor, bool tag, cc128m_cap_t* cdp) {
+ // The Morello cap is just all the bits slammed together with no extra decode
+
+ lbits cap_without_tag;
+ pesbt_and_addr_to_sail_cap_bits(&cap_without_tag, mem_pesbt, mem_cursor);
+ lbits capbits;
+ CREATE(lbits)(&capbits);
+ lbits captag;
+ CREATE_OF(lbits, fbits)(&captag, tag ? 1 : 0, 1, true);
+ append(&capbits, captag, cap_without_tag);
+ KILL(lbits)(&captag);
+ KILL(lbits)(&cap_without_tag);
+
+ check_length(capbits, 129);
+
+ // Now extract some fields
+
+ // Bounds (base and top)
+ struct sail_bounds_tuple bounds;
+ _CC_CONCAT(create_, sail_bounds_tuple)(&bounds);
+ _CC_CONCAT(MORELLO_SAIL_PREFIX, CapGetBounds)(&bounds, capbits);
+
+ check_length(bounds.ztup0, 65);
+ check_length(bounds.ztup1, 65);
+
+ cdp->cr_base = extract_bits(bounds.ztup0, 0, 64);
+ uint64_t top_hi = extract_bits(bounds.ztup1, 64, 1);
+ uint64_t top_lo = extract_low_bits(bounds.ztup1);
+ cdp->_cr_top = (((cc128m_length_t)top_hi) << 64) | (cc128m_length_t)top_lo;
+ _CC_CONCAT(kill_, sail_bounds_tuple)(&bounds);
+
+ cdp->cr_bounds_valid = bounds.ztup2;
+
+ // Address including flag bits
+ cdp->_cr_cursor = _CC_CONCAT(MORELLO_SAIL_PREFIX, CapGetValue)(capbits);
+ _cc_N(update_perms)(cdp, _CC_CONCAT(MORELLO_SAIL_PREFIX, CapGetPermissions)(capbits));
+ _cc_N(update_otype)(cdp, _CC_CONCAT(MORELLO_SAIL_PREFIX, CapGetObjectType)(capbits));
+ cdp->cr_tag = _CC_CONCAT(MORELLO_SAIL_PREFIX, CapGetTag)(capbits);
+
+ // Fix these extra fields not really present in sail
+ _cc_N(update_reserved)(cdp, 0);
+ _cc_N(update_flags)(cdp, 0);
+ _cc_N(update_uperms)(cdp, 0);
+ cdp->cr_pesbt = mem_pesbt;
+
+ // Destroy cap
+ KILL(lbits)(&capbits);
+}
+
+void sail_decode_common_raw(uint64_t mem_pesbt, uint64_t mem_cursor, bool tag, cc128m_cap_t* cdp) {
+ // Morello RAW has no mask. If this has been masked, undo it.
+ sail_decode_common_mem(mem_pesbt ^ CC128_NULL_XOR_MASK, mem_cursor, tag, cdp);
+}
+
+uint64_t sail_compress_common_raw(const cc128m_cap_t* csp) { assert(0); }
+
+uint64_t sail_compress_common_mem(const cc128m_cap_t* csp) { assert(0); }
+
+static _cc_bounds_bits sail_extract_bounds_bits_common(_cc_addr_t pesbt) { assert(0); }
+
+#else
+
+static inline void sail_dump_cap(const char* msg, struct zCapability cap) {
+ sail_string zcap_str;
+ CREATE(sail_string)(&zcap_str);
+ sailgen_capToString(&zcap_str, cap);
+ fprintf(stderr, "%s: %s\n", msg, zcap_str);
+ KILL(sail_string)(&zcap_str);
+}
+
+static inline void set_top_base_from_sail(const struct zCapability* sail, _cc_cap_t* c);
+static inline uint64_t extract_sail_cap_bits(sail_cap_bits* bits, uint64_t start, uint64_t len);
+
+static _cc_addr_t _compress_sailcap_raw(struct zCapability sailcap) {
+ sail_cap_bits sailbits;
+ CREATE(sail_cap_bits)(&sailbits);
+#ifdef SAIL_COMPRESSION_INDIRECT_BITS
+ sailgen_capToBits(&sailbits, sailcap);
+#else
+ sailbits = sailgen_capToBits(sailcap);
+#endif
+ _cc_addr_t result = extract_sail_cap_bits(&sailbits, _CC_ADDR_WIDTH, _CC_ADDR_WIDTH);
+ KILL(sail_cap_bits)(&sailbits);
+ return result;
+}
+
+static void sail_cap_to_cap_t(const struct zCapability* sail, _cc_cap_t* c) {
+ memset(c, 0, sizeof(*c));
+ c->_cr_cursor = sail->zaddress;
+ set_top_base_from_sail(sail, c);
+ _cc_N(update_perms)(c, sailgen_getCapHardPerms(*sail));
+ _cc_N(update_uperms)(c, sail->zuperms);
+ _cc_N(update_otype)(c, sail->zotype);
+ _cc_N(update_flags)(c, sailgen_getCapFlags(*sail));
+ _cc_N(update_reserved)(c, sail->zreserved);
+ c->cr_tag = sail->ztag;
+ // extract cc128 EBT field:
+ // TODO: avoid roundtrip via sailgen_capToBits?
+ uint64_t sail_pesbt = _compress_sailcap_raw(*sail);
+ c->cr_pesbt = sail_pesbt;
+}
+
+static void sail_decode_common_mem(_cc_addr_t mem_pesbt, _cc_addr_t mem_cursor, bool tag, _cc_cap_t* cdp) {
+ sail_cap_bits sail_all_bits;
+ pesbt_and_addr_to_sail_cap_bits(&sail_all_bits, mem_pesbt, mem_cursor);
+ struct zCapability sail_result = sailgen_memBitsToCapability(tag, sail_all_bits);
+ KILL(sail_cap_bits)(&sail_all_bits);
+ // sail_dump_cap("sail_result", sail_result);
+ sail_cap_to_cap_t(&sail_result, cdp);
+}
+
+static struct zCapability _sail_decode_common_raw_impl(_cc_addr_t pesbt, _cc_addr_t cursor, bool tag) {
+ sail_cap_bits sail_all_bits;
+ pesbt_and_addr_to_sail_cap_bits(&sail_all_bits, pesbt, cursor);
+ struct zCapability sail_result = sailgen_capBitsToCapability(tag, sail_all_bits);
+ KILL(sail_cap_bits)(&sail_all_bits);
+ return sail_result;
+}
+
+static void sail_decode_common_raw(_cc_addr_t pesbt, _cc_addr_t cursor, bool tag, _cc_cap_t* cdp) {
+ struct zCapability sail_result = _sail_decode_common_raw_impl(pesbt, cursor, tag);
+ sail_cap_to_cap_t(&sail_result, cdp);
+}
+
+static _cc_bounds_bits sail_extract_bounds_bits_common(_cc_addr_t pesbt) {
+ _cc_bounds_bits result;
+ struct zCapability sail_result = _sail_decode_common_raw_impl(pesbt, 0, false);
+ result.E = sail_result.zE;
+ result.B = sail_result.zB;
+ result.T = sail_result.zT;
+ result.IE = sail_result.zinternal_E;
+ return result;
+}
+
+static struct zCapability cap_t_to_sail_cap(const _cc_cap_t* c) {
+ struct zCapability result;
+ result = znull_cap;
+ result = sailgen_setCapPerms(result, _cc_N(get_perms)(c));
+ result.ztag = c->cr_tag;
+ result.zreserved = _cc_N(get_reserved)(c);
+ result.zaddress = c->_cr_cursor;
+ result.zuperms = _cc_N(get_uperms)(c);
+ result.zotype = _cc_N(get_otype)(c);
+ result.zflag_cap_mode = _cc_N(get_flags)(c);
+
+ // Extract E,B,T,IE from the cr_pesbt field:
+ _cc_addr_t fake_pesbt = c->cr_pesbt;
+ _cc_bounds_bits c_bounds = _cc_N(extract_bounds_bits)(fake_pesbt);
+ result.zinternal_E = c_bounds.IE;
+ result.zE = c_bounds.E;
+ result.zT = c_bounds.T;
+ result.zB = c_bounds.B;
+ return result;
+}
+
+static _cc_addr_t sail_compress_common_raw(const _cc_cap_t* csp) {
+ return _compress_sailcap_raw(cap_t_to_sail_cap(csp));
+}
+
+static _cc_addr_t sail_compress_common_mem(const _cc_cap_t* csp) {
+ struct zCapability sailcap = cap_t_to_sail_cap(csp);
+ sail_cap_bits sailbits;
+ CREATE(sail_cap_bits)(&sailbits);
+#ifdef SAIL_COMPRESSION_INDIRECT_BITS
+ sailgen_capToMemBits(&sailbits, sailcap);
+#else
+ sailbits = sailgen_capToMemBits(sailcap);
+#endif
+ _cc_addr_t result = extract_sail_cap_bits(&sailbits, _CC_ADDR_WIDTH, _CC_ADDR_WIDTH);
+ KILL(sail_cap_bits)(&sailbits);
+ return result;
+}
+
+_cc_addr_t _CC_CONCAT(sail_null_pesbt_, SAIL_WRAPPER_CC_FORMAT_LOWER)(void) {
+ // NULL CAP BITS:
+ _cc_addr_t null_pesbt = _compress_sailcap_raw(znull_cap);
+ sail_dump_cap("null cap", znull_cap);
+ fprintf(stderr, "Sail%d null pesbt 0x%jx\n", SAIL_WRAPPER_CC_FORMAT_LOWER, (uintmax_t)null_pesbt);
+ return null_pesbt;
+}
+
+bool _CC_CONCAT(sail_setbounds_, SAIL_WRAPPER_CC_FORMAT_LOWER)(_cc_cap_t* cap, _cc_addr_t req_base, _cc_length_t req_top) {
+ struct zCapability sailcap = cap_t_to_sail_cap(cap);
+ sail_cap_bits sailtop;
+ CREATE(sail_cap_bits)(&sailtop);
+ cc_length_t_to_sail_cap_bits(&sailtop, req_top);
+ __typeof__(sailgen_setCapBounds(sailcap, req_base, sailtop)) result =
+ sailgen_setCapBounds(sailcap, req_base, sailtop);
+ KILL(sail_cap_bits)(&sailtop);
+ bool exact = result.ztup0;
+ sail_cap_to_cap_t(&result.ztup1, cap);
+ return exact;
+}
+
+#endif // Morello
diff --git a/gdb/cheri-compressed-cap/test/setbounds_inputs_128.cpp b/gdb/cheri-compressed-cap/test/setbounds_inputs_128.cpp
new file mode 100644
index 00000000000..0794738dde0
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/setbounds_inputs_128.cpp
@@ -0,0 +1,10016 @@
+#include <cstdint>
+
+struct setbounds_input {
+ uint64_t base1;
+ uint64_t top1;
+ uint64_t base2;
+ uint64_t top2;
+ uint64_t sail_cc_base1;
+ uint64_t sail_cc_top1;
+ uint64_t sail_cc_base2;
+ uint64_t sail_cc_top2;
+};
+
+static struct setbounds_input setbounds_inputs[] = {
+ // "base1","top1","base2","top2","ccBase1","ccTop1","ccBase2","ccTop2""
+ { 0x000000000000004b,0x0000000007cf18f9b,0x000000000006d6a8,0x0000000000086d6a0,0x0000000000000000,0x0000000007d000000,0x000000000006c000,0x00000000000870000},
+ { 0x0000000000000007,0x000000712b609c5b0,0x00000000032dc20f,0x000000008032d1c77,0x0000000000000000,0x00000071400000000,0x0000000000000000,0x00000000804000000},
+ { 0x00000000000049fe,0x00b87df010d7254bb,0x000000000900a7ca,0x000000800085f0270,0x0000000000000000,0x00b88000000000000,0x0000000000000000,0x00000080400000000},
+ { 0x000001991a6fd045,0x00080018a6acd2d6c,0x0000bedaf8f73c0f,0x0004d37033a19b295,0x0000000000000000,0x00080400000000000,0x0000a00000000000,0x0004d400000000000},
+ { 0x0000000000003d0e,0x0000000902dceee9c,0x0000000000032796,0x00000003ffff8edc8,0x0000000000000000,0x00000009040000000,0x0000000000000000,0x00000004000000000},
+ { 0x000000000006cdf7,0x01fffff5b88378ec7,0x0000000000086940,0x00000000000214459,0x0000000000000000,0x02000000000000000,0x0000000000086800,0x00000000000214800},
+ { 0x0000000002ffffce,0x0383264c38950adb7,0x00000d5eba967a84,0x00010d700c6318a88,0x0000000000000000,0x03840000000000000,0x0000080000000000,0x00010d80000000000},
+ { 0x000000000002590c,0x00000750b18fdcf94,0x0000000000b90c93,0x00000000000bb5b9f,0x0000000000000000,0x00000752000000000,0x0000000000b90c00,0x00000000000bb5c00},
+ { 0x000000000000007f,0x000003eabdf157e25,0x0000007d5a4453c2,0x0000007578ca4ce50,0x0000000000000000,0x000003eb000000000,0x0000007c00000000,0x00000075800000000},
+ { 0x000000000000002e,0x00000003f98fb66b1,0x000000000ac8d344,0x0000000000ef0e8cd,0x0000000000000000,0x00000003fa0000000,0x000000000ac80000,0x0000000000ef20000},
+ { 0x00000000000000ea,0x0000000000000551c,0x0000000000000412,0x00000000000001d7b,0x00000000000000e0,0x00000000000005520,0x0000000000000410,0x00000000000001d80},
+ { 0x0000000000000002,0x03a753f19fbed23a2,0x000000000002ead3,0x0000000007f99b4ca,0x0000000000000000,0x03a80000000000000,0x0000000000000000,0x0000000007fa00000},
+ { 0x000000001c847fad,0x04cc50e0779d3ff00,0x00006cf88c2d052d,0x0336f5f8b7b231821,0x0000000000000000,0x04ce0000000000000,0x0000000000000000,0x03370000000000000},
+ { 0x0000000000000553,0x0004050c5c81008f9,0x000000009588898e,0x000000000fc4a03ce,0x0000000000000000,0x00040600000000000,0x0000000095800000,0x000000000fc600000},
+ { 0x000000000001b60d,0x000e3bdb8b0671a69,0x000005ed030e89a0,0x000385a9eab7d7f18,0x0000000000000000,0x000e3c00000000000,0x0000000000000000,0x00038600000000000},
+ { 0x00000000000f2505,0x000011dfa3c60f859,0x00000006d8291b3c,0x000001ab8022ff8f2,0x0000000000000000,0x000011e0000000000,0x0000000000000000,0x000001ac000000000},
+ { 0x0000000000001ba8,0x0007ec70e7a2beed7,0x000000000419848c,0x00001bc07b3a35e5b,0x0000000000000000,0x0007ee00000000000,0x0000000000000000,0x00001bc8000000000},
+ { 0x00000000002bd2df,0x02a7b7ff03fad107a,0x0000011bbc5f6036,0x00000392327491773,0x0000000000000000,0x02a80000000000000,0x0000011000000000,0x00000393000000000},
+ { 0x0000000009303d60,0x00001a0b18a1aff0e,0x000007f63c8eaeb9,0x0000012a4cc629a04,0x0000000000000000,0x00001a10000000000,0x000007f400000000,0x0000012a800000000},
+ { 0x0000000000000363,0x001b42028fd4d1bbe,0x0000000000186970,0x0000029beec330370,0x0000000000000000,0x001b4800000000000,0x0000000000000000,0x0000029c000000000},
+ { 0x0000000015ad4eee,0x0000dc296622ee8e6,0x000000006d3035cc,0x000000006896b8c48,0x0000000000000000,0x0000dc40000000000,0x000000006c000000,0x0000000068a000000},
+ { 0x0000000000000002,0x0000000a84f14931d,0x0000000000000342,0x00000000000000b70,0x0000000000000000,0x0000000a880000000,0x0000000000000342,0x00000000000000b70},
+ { 0x0000000000000006,0x000000000f634d905,0x000000000009ca7c,0x0000000002e9b3d8b,0x0000000000000000,0x000000000f6400000,0x0000000000000000,0x0000000002ea00000},
+ { 0x0000000000000d27,0x010c166c9273001f3,0x00000000019fb2d1,0x006d993556d8aa9d9,0x0000000000000000,0x010c8000000000000,0x0000000000000000,0x006da000000000000},
+ { 0x0000000000000d14,0x001e064e0a1eef641,0x00000000000f68a6,0x0000000003fb9eedb,0x0000000000000000,0x001e0800000000000,0x0000000000000000,0x0000000003fc00000},
+ { 0x000000000001505a,0x0000036de3c2295a4,0x00000001cac2f076,0x000000383d63209ee,0x0000000000000000,0x0000036e000000000,0x0000000100000000,0x00000038400000000},
+ { 0x00000000000745e3,0x000669881768f97d2,0x000000002a82fcb4,0x0000001372ef1d385,0x0000000000000000,0x00066a00000000000,0x0000000000000000,0x00000013780000000},
+ { 0x0000000bbbd9d64c,0x000453ebf693d1f99,0x000980a4a58c2318,0x0001c97fa1e85f9f7,0x0000000000000000,0x00045400000000000,0x0009800000000000,0x0001c980000000000},
+ { 0x0000000000000000,0x00000000000006038,0x000000000000006e,0x0000000000000237f,0x0000000000000000,0x00000000000006040,0x0000000000000060,0x00000000000002380},
+ { 0x000000000000000a,0x00000056f5aace241,0x00000000004ed2f7,0x00000002221136a9b,0x0000000000000000,0x00000057000000000,0x0000000000000000,0x00000002230000000},
+ { 0x000000000001b26d,0x008b2ae0a634d3232,0x000000000007e4e4,0x000000000e4988e45,0x0000000000000000,0x008b4000000000000,0x0000000000000000,0x000000000e4c00000},
+ { 0x0000000000001d77,0x03a9c0627b82e6a47,0x00000000091f2ab3,0x00000018ab8250eaa,0x0000000000000000,0x03aa0000000000000,0x0000000000000000,0x00000018b00000000},
+ { 0x0000000000000003,0x0064024f7513e5fd7,0x00000000000000ce,0x00000000000026511,0x0000000000000000,0x00642000000000000,0x0000000000000000,0x00000000000026600},
+ { 0x0000000000000001,0x00001e0281f1c99a5,0x000000000754aed5,0x000001dc3d9936db4,0x0000000000000000,0x00001e08000000000,0x0000000000000000,0x000001dc800000000},
+ { 0x0000000000000019,0x0126c9c0c7dda8d41,0x0000011bc48763e6,0x00110c738f7ea208e,0x0000000000000000,0x01270000000000000,0x0000000000000000,0x00111000000000000},
+ { 0x00000000021965bb,0x00ad8c4acd9c69ff4,0x000000001c1f156d,0x00019b313eb53c49c,0x0000000000000000,0x00adc000000000000,0x0000000000000000,0x00019b80000000000},
+ { 0x000000000000002a,0x004856d3c6c62f141,0x0000007933fdf82e,0x0006f61e01f551490,0x0000000000000000,0x00486000000000000,0x0000000000000000,0x0006f800000000000},
+ { 0x00000000000010ae,0x000651fe8b4aa2d9f,0x000001b8a413fa9c,0x000001edef0b711b3,0x0000000000000000,0x00065200000000000,0x000001b800000000,0x000001ee000000000},
+ { 0x0000000000003e55,0x0000066e194ecb749,0x000000002d967c3a,0x00000001f311c1db6,0x0000000000000000,0x00000670000000000,0x0000000028000000,0x00000001f38000000},
+ { 0x00000000000004e8,0x0000c5f430c22673b,0x0000000000085751,0x0000005601bdd8218,0x0000000000000000,0x0000c600000000000,0x0000000000000000,0x00000056200000000},
+ { 0x0000000000000002,0x00025bcecd9809ef5,0x000000000000c0aa,0x000000003dbdd009b,0x0000000000000000,0x00025c00000000000,0x0000000000000000,0x000000003dc000000},
+ { 0x0000000001e4d16f,0x002cd9791337375b3,0x0000000005976d57,0x0000005905d15ac09,0x0000000000000000,0x002ce000000000000,0x0000000000000000,0x00000059200000000},
+ { 0x000000000000007e,0x0061d756de79edfed,0x00000000064e3df8,0x00000025dff9949b5,0x0000000000000000,0x0061e000000000000,0x0000000000000000,0x00000025e00000000},
+ { 0x000000000009ccca,0x000689bc32d7c3bc4,0x00000000000be24d,0x0002026a83f8cbc1b,0x0000000000000000,0x00068a00000000000,0x0000000000000000,0x00020300000000000},
+ { 0x0000000008e79a54,0x00003a978e8af2c90,0x000000053e089df1,0x00000083c104afe7f,0x0000000000000000,0x00003aa0000000000,0x0000000400000000,0x00000084000000000},
+ { 0x000000000002bfa8,0x0927cae4b4bbade92,0x0002ded69a41ea93,0x0000a27c165b24da1,0x0000000000000000,0x09280000000000000,0x0002de0000000000,0x0000a280000000000},
+ { 0x0000000000000004,0x000ce26638ab05d82,0x00000749f578bb51,0x000001bcd4221790e,0x0000000000000000,0x000ce400000000000,0x0000074800000000,0x000001bd000000000},
+ { 0x0000000000000003,0x0000000002f73c638,0x0000000000000246,0x00000000000a769af,0x0000000000000000,0x0000000002f800000,0x0000000000000000,0x00000000000a78000},
+ { 0x0000000000000007,0x00000188d53a8e4ec,0x00000000461582dc,0x00000008e7797bc12,0x0000000000000000,0x00000189000000000,0x0000000040000000,0x00000008e80000000},
+ { 0x000000000000001f,0x00000000001e7492e,0x000000000003ccb6,0x000000000000c5d01,0x0000000000000000,0x00000000001e78000,0x000000000003cc00,0x000000000000c6000},
+ { 0x0000000000000040,0x00b79a889df2826ad,0x0000000004bc8c28,0x00000000782928459,0x0000000000000000,0x00b7c000000000000,0x0000000004000000,0x00000000784000000},
+ { 0x000000000000e1cf,0x0018fd39280258e57,0x000000caecb9a7b6,0x00000c3ed9335144e,0x0000000000000000,0x00190000000000000,0x000000c000000000,0x00000c40000000000},
+ { 0x000000000000000f,0x00365dfe30ef73d91,0x0000000000000147,0x000000000000233e9,0x0000000000000000,0x00366000000000000,0x0000000000000100,0x00000000000023400},
+ { 0x00000000000000fc,0x0000001a1b2117e87,0x00000000000002be,0x000000000002e7dda,0x0000000000000000,0x0000001a200000000,0x0000000000000000,0x000000000002e8000},
+ { 0x0000000000006a35,0x0000059fa935b16c2,0x00000000078718b5,0x00000000029e79d46,0x0000000000000000,0x000005a0000000000,0x0000000007800000,0x00000000029f00000},
+ { 0x000000001b596cfe,0x012880d67fbb23e50,0x000000a7069c8c0f,0x000001f2c0ac3250c,0x0000000000000000,0x01290000000000000,0x000000a000000000,0x000001f3000000000},
+ { 0x0000000000000003,0x0000005b73659afb1,0x0000000000001a7a,0x0000000000168f08e,0x0000000000000000,0x0000005b800000000,0x0000000000000000,0x00000000001690000},
+ { 0x0000000000000003,0x0000ed7960f9cbedf,0x00000000072532ac,0x00000000029aceee0,0x0000000000000000,0x0000ed80000000000,0x0000000007200000,0x00000000029b00000},
+ { 0x0000000000002ed4,0x0000007e2293c11e5,0x000000000000f6aa,0x000000000000146f2,0x0000000000000000,0x0000007e400000000,0x000000000000f6a0,0x00000000000014700},
+ { 0x0000000000066adb,0x00000679a4849ad88,0x0000000000305eb9,0x000000000009432e2,0x0000000000000000,0x0000067a000000000,0x0000000000304000,0x00000000000944000},
+ { 0x000000000000005c,0x01c75386b741a5331,0x0000000000005cce,0x00000000001a18640,0x0000000000000000,0x01c78000000000000,0x0000000000000000,0x00000000001a20000},
+ { 0x0000000000380431,0x00000002b78c7b96f,0x00000000007129c7,0x0000000062fb142a9,0x0000000000000000,0x00000002b80000000,0x0000000000000000,0x00000000630000000},
+ { 0x00000000000004e8,0x0075fd1d441cf00b9,0x000000080d5ecd66,0x00138829ecde06159,0x0000000000000000,0x00760000000000000,0x0000000000000000,0x00139000000000000},
+ { 0x000000000384640a,0x005785c91b1651c43,0x0000004ac746bdb7,0x00047e1ab6e2f1e50,0x0000000000000000,0x0057a000000000000,0x0000000000000000,0x00048000000000000},
+ { 0x0000000000003b6c,0x000f6de597c87918c,0x0000000000fe1965,0x0000000001b0fc603,0x0000000000000000,0x000f7000000000000,0x0000000000f80000,0x0000000001b100000},
+ { 0x0000000000000007,0x00000f6742b4ac793,0x00000000000000d6,0x0000001800772b752,0x0000000000000000,0x00000f68000000000,0x0000000000000000,0x00000018080000000},
+ { 0x000000000000000c,0x00000da806e1d974e,0x00000000000fcb6f,0x00000000000ad7516,0x0000000000000000,0x00000dac000000000,0x00000000000fc000,0x00000000000ad8000},
+ { 0x0000000001560264,0x0000bc7a3238bfd9c,0x0000000005bac1ac,0x00000000112a7e395,0x0000000000000000,0x0000bc80000000000,0x0000000005800000,0x00000000113000000},
+ { 0x000000000000000d,0x00000000027fb440b,0x0000000000000b7c,0x00000000000227b35,0x0000000000000000,0x00000000028000000,0x0000000000000000,0x00000000000228000},
+ { 0x00000000000bcc56,0x00372f14fc326e9c1,0x0000000257ae2fc8,0x000324e12b22fbc5d,0x0000000000000000,0x00373000000000000,0x0000000000000000,0x00032500000000000},
+ { 0x0000000000006774,0x0000b5065efbdfaca,0x00000000037efa00,0x00000000561b73abb,0x0000000000000000,0x0000b540000000000,0x0000000002000000,0x00000000562000000},
+ { 0x0000000000000004,0x00017bbef9f99c361,0x00000000000000e5,0x00000479bb5fccc41,0x0000000000000000,0x00017c00000000000,0x0000000000000000,0x0000047a000000000},
+ { 0x0000000000000000,0x00000000585a0e750,0x0000000000003a30,0x0000000000e70493f,0x0000000000000000,0x00000000586000000,0x0000000000000000,0x0000000000e740000},
+ { 0x0000000001710f4d,0x0000030697c385c06,0x00000000192a288f,0x00000000038966c55,0x0000000000000000,0x00000307000000000,0x0000000019280000,0x00000000038980000},
+ { 0x0000000000000005,0x03f282da03002e10d,0x000000000000d3d3,0x00000003af638c632,0x0000000000000000,0x03f30000000000000,0x0000000000000000,0x00000003b00000000},
+ { 0x0000000000013fe7,0x00000d68d05b07e3b,0x0000000000104710,0x000000000437c24ef,0x0000000000000000,0x00000d6c000000000,0x0000000000000000,0x00000000043800000},
+ { 0x00000000000eae2e,0x00005d69f8ae25095,0x0000000000466ecd,0x000000001e7b58d4e,0x0000000000000000,0x00005d80000000000,0x0000000000000000,0x000000001e8000000},
+ { 0x0000000000192111,0x0058bcaf6eb0e83f5,0x0000000017f09455,0x00007faa3e765280c,0x0000000000000000,0x0058c000000000000,0x0000000000000000,0x00007fc0000000000},
+ { 0x00000000000014a0,0x003c3fbf4cef545cd,0x000a62f9d8c51d77,0x00028e2fbe8525433,0x0000000000000000,0x003c4000000000000,0x000a600000000000,0x00028e80000000000},
+ { 0x000000000016b728,0x000007d6574734aba,0x0000000000fc3aff,0x00000000001afb098,0x0000000000000000,0x000007d8000000000,0x0000000000fc0000,0x00000000001afc000},
+ { 0x000000000015b608,0x0000000180b99d37d,0x00000000250a347f,0x00000000738621941,0x0000000000000000,0x00000001810000000,0x0000000024000000,0x0000000073a000000},
+ { 0x0000000000000003,0x028cb0e5a0b25ddaa,0x0000000000000509,0x00010c4b81735fb5e,0x0000000000000000,0x028d0000000000000,0x0000000000000000,0x00010c80000000000},
+ { 0x00000000007dc7a1,0x0019910bba87d73d4,0x000000003a5a6a67,0x000000001c5ecf266,0x0000000000000000,0x00199800000000000,0x000000003a000000,0x000000001c6000000},
+ { 0x000000000006409c,0x006c9838dfe969217,0x00000001b3dfcaa5,0x00011aed678157279,0x0000000000000000,0x006ca000000000000,0x0000000000000000,0x00011b00000000000},
+ { 0x0000000000000185,0x05453b823e44c5ac1,0x000000000001530e,0x0000081b21fcf8b10,0x0000000000000000,0x05460000000000000,0x0000000000000000,0x0000081c000000000},
+ { 0x00000000002e629f,0x01a0ce4603156113d,0x0000000000ec6b55,0x000000011821ab3f3,0x0000000000000000,0x01a10000000000000,0x0000000000000000,0x00000001188000000},
+ { 0x0000000000c5207b,0x00084f537b54efdef,0x00003b9038e4e7b3,0x00007ebdbf55f645c,0x0000000000000000,0x00085000000000000,0x00003a0000000000,0x00007ec0000000000},
+ { 0x0000000000000002,0x000001c422ffab5ca,0x00000000000002a9,0x000000003bef26b53,0x0000000000000000,0x000001c4800000000,0x0000000000000000,0x000000003bf000000},
+ { 0x00000014e974fd86,0x00732ed00d1dcaa2d,0x0000003586540a57,0x00002672ad624ee15,0x0000000000000000,0x00734000000000000,0x0000000000000000,0x00002680000000000},
+ { 0x000000000000000d,0x000078ba8c0b9e38e,0x0000000000000e06,0x00003d302fa54c89e,0x0000000000000000,0x000078c0000000000,0x0000000000000000,0x00003d40000000000},
+ { 0x000000000000b754,0x00011b7c58b25f13d,0x00000000000934f7,0x00000000000594fd1,0x0000000000000000,0x00011b80000000000,0x0000000000092000,0x00000000000596000},
+ { 0x000000000000000e,0x012b1bea0b3894d82,0x000000001a43106e,0x000003d0ec4dec8b0,0x0000000000000000,0x012b8000000000000,0x0000000000000000,0x000003d1000000000},
+ { 0x0000000000a93607,0x0000001843a2c5203,0x00000000032c50e2,0x00000000ef8b283c9,0x0000000000000000,0x00000018480000000,0x0000000000000000,0x00000000efc000000},
+ { 0x0000000000000005,0x0033ee9c02e83014d,0x000000000005839d,0x00000023d3421638d,0x0000000000000000,0x0033f000000000000,0x0000000000000000,0x00000023e00000000},
+ { 0x0000000000007886,0x0000e31d414383e8d,0x000000000000e8c9,0x00000001d150c9e9d,0x0000000000000000,0x0000e340000000000,0x0000000000000000,0x00000001d18000000},
+ { 0x000000000000052c,0x00000001018a66be1,0x0000000000000580,0x00000000b71918083,0x0000000000000000,0x00000001020000000,0x0000000000000000,0x00000000b74000000},
+ { 0x0000000000000588,0x000283f975dd4591f,0x0000000000000ba1,0x0000000001bdb3cf5,0x0000000000000000,0x00028400000000000,0x0000000000000000,0x0000000001be00000},
+ { 0x0000000000000031,0x021157185d73cae90,0x0000000a4d5e0f6a,0x000000012eb5a82f4,0x0000000000000000,0x02120000000000000,0x0000000a4c000000,0x000000012ec000000},
+ { 0x0000000d24099c06,0x03c823fed89ba3d1f,0x00000ae4274e2be0,0x007fc1d84dcd4d429,0x0000000000000000,0x03c90000000000000,0x0000000000000000,0x007fe000000000000},
+ { 0x0000000000000065,0x0000000021abc1a1d,0x0000000000000e96,0x000000000078408ef,0x0000000000000000,0x0000000021b000000,0x0000000000000000,0x00000000007860000},
+ { 0x000000000000007e,0x0000045d80aef7d14,0x0000000054c74ca6,0x0000001e58d7b8c3c,0x0000000000000000,0x0000045e000000000,0x0000000000000000,0x0000001e600000000},
+ { 0x0000000000000007,0x000685182c96812d4,0x0000000000000089,0x00000007b604ca816,0x0000000000000000,0x00068600000000000,0x0000000000000000,0x00000007b80000000},
+ { 0x0000000000000006,0x000000000367e0525,0x0000000000060ec3,0x0000000000a383956,0x0000000000000000,0x00000000036800000,0x0000000000040000,0x0000000000a3c0000},
+ { 0x00000000000003d7,0x00059ba3bd7f00841,0x0000000000000511,0x00000000007039a1a,0x0000000000000000,0x00059c00000000000,0x0000000000000000,0x00000000007040000},
+ { 0x000000000000001d,0x00d42933c5dd078b9,0x000000000000003d,0x0000000000000650b,0x0000000000000000,0x00d44000000000000,0x0000000000000020,0x00000000000006520},
+ { 0x000000000928312c,0x0022fe5e888962aa5,0x000000005fde9330,0x0004e701a484bede0,0x0000000000000000,0x00230000000000000,0x0000000000000000,0x0004e800000000000},
+ { 0x0000000000000c4e,0x0632ccd176195bbfe,0x00000000000c5940,0x0000000000f07ad9d,0x0000000000000000,0x06340000000000000,0x00000000000c0000,0x0000000000f080000},
+ { 0x00000000014fc37f,0x0078e6dfd5b5a8534,0x00000005e87454aa,0x0000033bd38cb0820,0x0000000000000000,0x00790000000000000,0x0000000000000000,0x0000033c000000000},
+ { 0x0000000000000003,0x0000000000001cc11,0x00000000000001e5,0x00000000000011bf4,0x0000000000000000,0x0000000000001cc80,0x0000000000000180,0x00000000000011c00},
+ { 0x00000000000001d6,0x0049d9673049b2dc8,0x000000548c0a50b5,0x0004896e1cef5bbb7,0x0000000000000000,0x0049e000000000000,0x0000000000000000,0x00048a00000000000},
+ { 0x00000000000018b7,0x0370401894f357e9f,0x000000084903a91e,0x00000035c1eab62cb,0x0000000000000000,0x03710000000000000,0x0000000800000000,0x00000035d00000000},
+ { 0x00006e03fbb0a4e9,0x0f52e037c4658fb20,0x0001d36afd03b47f,0x00325bd0c78d3f8db,0x0000000000000000,0x0f540000000000000,0x0001000000000000,0x00326000000000000},
+ { 0x0000000000000010,0x000d54cd00e7a2f71,0x00000000000f7dc9,0x0000000000598454c,0x0000000000000000,0x000d5800000000000,0x00000000000e0000,0x000000000059a0000},
+ { 0x0000000005e28501,0x000018f3317280242,0x000000034b3df98a,0x00000001e67d46135,0x0000000000000000,0x000018f8000000000,0x0000000348000000,0x00000001e68000000},
+ { 0x00000000005f45c6,0x0000017e13f9fcecc,0x000000005b143714,0x00000000f9ff3b5a6,0x0000000000000000,0x0000017e800000000,0x0000000058000000,0x00000000fa0000000},
+ { 0x0000000997efbec1,0x000455ed92e0acb0f,0x00000194f5544ba5,0x000001b352a70cdb9,0x0000000000000000,0x00045600000000000,0x0000019000000000,0x000001b3800000000},
+ { 0x000000000000001a,0x00003bf487cedebc0,0x00000000000e5e98,0x00000039d2b508cda,0x0000000000000000,0x00003c00000000000,0x0000000000000000,0x00000039e00000000},
+ { 0x00000000000000e3,0x00007932b2bd5059d,0x000000000007d5bb,0x0000000001152949b,0x0000000000000000,0x00007940000000000,0x0000000000000000,0x00000000011580000},
+ { 0x0000000000000000,0x001182df5b94c828d,0x0000000000000163,0x000001c405d6623f0,0x0000000000000000,0x00118800000000000,0x0000000000000000,0x000001c4800000000},
+ { 0x00000000000004f3,0x000b0eafdfb018e4c,0x00000000fe79e806,0x000000083176e30e7,0x0000000000000000,0x000b1000000000000,0x00000000c0000000,0x00000008340000000},
+ { 0x0000000000000016,0x0079bf3aea029903f,0x0000000059566422,0x00000000b87d90f76,0x0000000000000000,0x0079c000000000000,0x0000000058000000,0x00000000b88000000},
+ { 0x0000000f94e64a9f,0x00b1a249825d42b19,0x000000e43084de7c,0x0001eb81881ff85f3,0x0000000000000000,0x00b1c000000000000,0x0000000000000000,0x0001ec00000000000},
+ { 0x0000000000001c37,0x00000000002c51790,0x000000000002b49c,0x000000000003a09cd,0x0000000000000000,0x00000000002c60000,0x000000000002b000,0x000000000003a1000},
+ { 0x000000000000227e,0x00afa7e6af9fff3e6,0x0000034fdb219e87,0x000000710dad4a9fe,0x0000000000000000,0x00afc000000000000,0x0000034f00000000,0x00000071100000000},
+ { 0x00000000000007e1,0x00340870a7216f2e8,0x00583a886da78337,0x0013cd9c1b016bcb5,0x0000000000000000,0x00341000000000000,0x0058000000000000,0x0013d000000000000},
+ { 0x0000000000000014,0x000012c7e45b4ef33,0x000000000087e3e2,0x0000000000e293721,0x0000000000000000,0x000012c8000000000,0x0000000000840000,0x0000000000e2c0000},
+ { 0x0000001400461bfa,0x0091df28fdccffd35,0x0000001d6445bfee,0x0001604839a6dd8fa,0x0000000000000000,0x00920000000000000,0x0000000000000000,0x00016080000000000},
+ { 0x00000000024f8a3c,0x007995aa1d664b7cf,0x00000000875eca24,0x0000019ca4ac7c3fb,0x0000000000000000,0x0079a000000000000,0x0000000000000000,0x0000019d000000000},
+ { 0x0000000000001747,0x0018736240df6b7b1,0x000000000001bfce,0x000000000dd1b7379,0x0000000000000000,0x00187800000000000,0x0000000000000000,0x000000000dd400000},
+ { 0x0000000000000007,0x001c6e5de5dcf6f53,0x0000000000000039,0x000398ecc84c760af,0x0000000000000000,0x001c7000000000000,0x0000000000000000,0x00039900000000000},
+ { 0x0000000001c388d1,0x0040f10e88ea60208,0x000000000dbd5ba2,0x000000000199a64cc,0x0000000000000000,0x00410000000000000,0x000000000dbc0000,0x000000000199c0000},
+ { 0x0000000000000005,0x00033604c5b1077c3,0x0000000000001847,0x00000006546185efc,0x0000000000000000,0x00033700000000000,0x0000000000000000,0x00000006560000000},
+ { 0x000000000000000a,0x003c8e5f090d9abc3,0x000000000000002d,0x00000001dad96ecd1,0x0000000000000000,0x003c9000000000000,0x0000000000000000,0x00000001db0000000},
+ { 0x00000000000e78bd,0x0000000055eb17092,0x0000000000edc80f,0x00000000179d4fbf6,0x0000000000000000,0x00000000560000000,0x0000000000800000,0x0000000017a000000},
+ { 0x000000000000001a,0x000000000009ba184,0x0000000000000456,0x0000000000000543d,0x0000000000000000,0x000000000009bc000,0x0000000000000440,0x00000000000005440},
+ { 0x0002407d492e9520,0x0552f823b061260b7,0x00050cac11bf16e4,0x0006621a57a776f5d,0x0000000000000000,0x05540000000000000,0x0005000000000000,0x00066400000000000},
+ { 0x000000000693735d,0x03614f255e57fedc9,0x0000000450280263,0x00000799b5eb15a07,0x0000000000000000,0x03620000000000000,0x0000000000000000,0x0000079a000000000},
+ { 0x000000000105f695,0x0000006317331fc20,0x00000041d99cc27c,0x000000283f077edc7,0x0000000000000000,0x00000063200000000,0x0000004100000000,0x00000028400000000},
+ { 0x00000000000000e4,0x0004b62cacaf90e27,0x0000000000b11734,0x0001b1ab3d4ccd6a2,0x0000000000000000,0x0004b800000000000,0x0000000000000000,0x0001b200000000000},
+ { 0x0000000009fa1086,0x000c46dfdf54becf9,0x000005c4cb27b1e2,0x0001c6cf54db13cc3,0x0000000000000000,0x000c4800000000000,0x0000000000000000,0x0001c700000000000},
+ { 0x0000000000000008,0x0000000e7510d6383,0x0000000404d66d46,0x00000007d2c2109c6,0x0000000000000000,0x0000000e780000000,0x0000000400000000,0x00000007d40000000},
+ { 0x0000000085b90a12,0x00006d3a065fafdbd,0x0000061a85097dee,0x000006cec10562d28,0x0000000000000000,0x00006d40000000000,0x0000060000000000,0x000006d0000000000},
+ { 0x00000000000001cd,0x00000004b41f4de68,0x0000000000738961,0x0000000009ee595de,0x0000000000000000,0x00000004b60000000,0x0000000000400000,0x0000000009f000000},
+ { 0x0000000000041f62,0x02f3706d621844e1f,0x0000000001ec9352,0x00302fbdc24136d2a,0x0000000000000000,0x02f40000000000000,0x0000000000000000,0x00303000000000000},
+ { 0x0000000000000058,0x000085f4e24c2b42d,0x00000000000075ed,0x00000872738adab51,0x0000000000000000,0x00008600000000000,0x0000000000000000,0x00000874000000000},
+ { 0x0000000000000007,0x0000000983641e4ee,0x000000000000000a,0x000000000000f78b9,0x0000000000000000,0x00000009840000000,0x0000000000000000,0x000000000000f7c00},
+ { 0x0000171d45bc44e5,0x001820154b29c9473,0x000a6bc6484e8ab5,0x00038c7e9eafbb629,0x0000000000000000,0x00182800000000000,0x000a600000000000,0x00038d00000000000},
+ { 0x0000000000021124,0x00012a8b1204ef06b,0x0000000465ca75e8,0x00000001df6cc7c7f,0x0000000000000000,0x00012b00000000000,0x0000000460000000,0x00000001df8000000},
+ { 0x000000028559d753,0x02cbfa74d224741ff,0x000157f42e20f2f8,0x01492ed8ead6b0f73,0x0000000000000000,0x02cc0000000000000,0x0000000000000000,0x01498000000000000},
+ { 0x0000000000000033,0x00000000007fe6ef1,0x000000000006e03e,0x00000000001d55b2c,0x0000000000000000,0x00000000008000000,0x0000000000068000,0x00000000001d58000},
+ { 0x000000000042d240,0x02f6da893d3cc7355,0x0000000019ed3dac,0x00026cee80325ff16,0x0000000000000000,0x02f70000000000000,0x0000000000000000,0x00026d00000000000},
+ { 0x0000000000000007,0x000008175e5f01a42,0x00000000039061b2,0x00000000041d7b423,0x0000000000000000,0x00000818000000000,0x0000000003900000,0x00000000041e00000},
+ { 0x0000000000000004,0x000000b5ea0e317ce,0x0000000000000061,0x0000000fab3842b40,0x0000000000000000,0x000000b6000000000,0x0000000000000000,0x0000000fac0000000},
+ { 0x0000000000000789,0x000000054f5ef96ac,0x000000000031cacd,0x00000000072186182,0x0000000000000000,0x00000005500000000,0x0000000000200000,0x00000000072200000},
+ { 0x0000000000000011,0x000ce69836f4a91ce,0x000014de03b7146f,0x00007720687f84bfd,0x0000000000000000,0x000ce800000000000,0x0000140000000000,0x00007740000000000},
+ { 0x00000000224a2f3c,0x0000404c1403b5347,0x0000004bb80cea34,0x00000bf0fa2f26798,0x0000000000000000,0x00004060000000000,0x0000004000000000,0x00000bf4000000000},
+ { 0x0000000000000003,0x00000a5c4f130e54c,0x000000000004fa2f,0x00000017392bcfe3d,0x0000000000000000,0x00000a60000000000,0x0000000000000000,0x00000017400000000},
+ { 0x00000002937ef08b,0x0004ff4ab63b94f80,0x00000003020891d7,0x0000002dd5053aec0,0x0000000000000000,0x00050000000000000,0x0000000300000000,0x0000002de00000000},
+ { 0x00000000007aa1f4,0x004169e45f40b2f4c,0x0000000000d6dc12,0x0000000002dd4d1a4,0x0000000000000000,0x00418000000000000,0x0000000000d00000,0x0000000002de00000},
+ { 0x0000000000000002,0x0b3bc46ce60987541,0x00000000003236fc,0x000000109921722a1,0x0000000000000000,0x0b3c0000000000000,0x0000000000000000,0x00000010a00000000},
+ { 0x0000000000000001,0x000000000280b95f7,0x000000000001ea0d,0x0000000000016ddc6,0x0000000000000000,0x00000000028100000,0x000000000001e800,0x0000000000016e000},
+ { 0x0000000109d5d5cf,0x0003bfbee7cfbc105,0x000224733db4d1b5,0x000121f36059dce8e,0x0000000000000000,0x0003c000000000000,0x0002240000000000,0x00012200000000000},
+ { 0x0000000000000000,0x00003a2a4e5c5962d,0x0000000000047fea,0x0000001b4469f5cd3,0x0000000000000000,0x00003a30000000000,0x0000000000000000,0x0000001b480000000},
+ { 0x0000000000000037,0x0017cfb0e6b14d2e8,0x007ba64ba0e34d18,0x000e7232bfbe679a6,0x0000000000000000,0x0017d000000000000,0x007ba00000000000,0x000e7400000000000},
+ { 0x0000000039b6029b,0x0000747e4f124e725,0x000000fd0416bf5f,0x000003c38fe834e99,0x0000000000000000,0x00007480000000000,0x000000f000000000,0x000003c4000000000},
+ { 0x0000000000000000,0x00000001b499c73e4,0x00000000034cf652,0x00000000007c9d5aa,0x0000000000000000,0x00000001b50000000,0x00000000034c0000,0x00000000007ca0000},
+ { 0x0000000000000084,0x00d4ae4446f9ed8f4,0x00009ba1cd735e90,0x003b7e5696abf9313,0x0000000000000000,0x00d4c000000000000,0x0000000000000000,0x003b8000000000000},
+ { 0x00000000000002b0,0x00003729fddf8f8e7,0x00000025145c503b,0x0000000e9c2ee4896,0x0000000000000000,0x00003730000000000,0x0000002500000000,0x0000000ea00000000},
+ { 0x00000034a0f20265,0x00c092a58bf8b42ca,0x00000486533a7cf8,0x000c93852254ae448,0x0000000000000000,0x00c0c000000000000,0x0000000000000000,0x000c9400000000000},
+ { 0x000000000000000c,0x00b3aca7190d804a7,0x0000000000000061,0x00000026eeb65f23c,0x0000000000000000,0x00b3c000000000000,0x0000000000000000,0x00000026f00000000},
+ { 0x0000000000000588,0x001262cae4d321f67,0x00000000000019ed,0x00000000944c97306,0x0000000000000000,0x00126800000000000,0x0000000000000000,0x00000000948000000},
+ { 0x00000000000681dd,0x0001d5b1ceb2a7e2b,0x00000e52c3471fe2,0x000057e1100ad7416,0x0000000000000000,0x0001d600000000000,0x00000e0000000000,0x00005800000000000},
+ { 0x0000000000000521,0x000036e2290afca05,0x00000000004f3497,0x000000000009eeac5,0x0000000000000000,0x000036f0000000000,0x00000000004f2000,0x000000000009f0000},
+ { 0x00000000003dd96a,0x039a2c6f593d4e89a,0x0000000000724f1d,0x00000001140a9714d,0x0000000000000000,0x039b0000000000000,0x0000000000000000,0x00000001148000000},
+ { 0x00000000000473e7,0x000009070275c057e,0x0000000313a008f5,0x00000000c807361d2,0x0000000000000000,0x00000908000000000,0x0000000310000000,0x00000000c84000000},
+ { 0x00000000000000b1,0x000083dd708f4ca7a,0x0000000073fe8c6f,0x000008b88fb09ac01,0x0000000000000000,0x00008400000000000,0x0000000000000000,0x000008bc000000000},
+ { 0x0000000f8a65fcf2,0x08297548b31fc84b6,0x000a656751087438,0x0775f6b1b321a8cbe,0x0000000000000000,0x082c0000000000000,0x0000000000000000,0x07760000000000000},
+ { 0x0000000000576946,0x000e3cc54df487026,0x0000000002f6f08b,0x000002a026d9687fb,0x0000000000000000,0x000e4000000000000,0x0000000000000000,0x000002a1000000000},
+ { 0x0000000000000002,0x00689110558a6efee,0x0000000000011f7b,0x00000001dc157b3ca,0x0000000000000000,0x0068a000000000000,0x0000000000000000,0x00000001dc8000000},
+ { 0x000000000005467f,0x00003f1ba00b9f28c,0x0000000093c37bec,0x000006a26195bc015,0x0000000000000000,0x00003f20000000000,0x0000000000000000,0x000006a4000000000},
+ { 0x000000000000003e,0x0008c59b9ae43f9e1,0x000002fdb64cfed4,0x000001d1de8fcee48,0x0000000000000000,0x0008c800000000000,0x000002f800000000,0x000001d2000000000},
+ { 0x000000000000e630,0x0f4afe1a74c1646a8,0x00000000010fbd54,0x0016120b552ab8194,0x0000000000000000,0x0f4c0000000000000,0x0000000000000000,0x00161800000000000},
+ { 0x00000000000004a7,0x0000013f7268eb48d,0x00000000c8c7897e,0x00000001934df9428,0x0000000000000000,0x0000013f800000000,0x00000000c8000000,0x00000001938000000},
+ { 0x0000000000000006,0x00000002eb8285134,0x00000000000002c9,0x0000000000bd9a1b9,0x0000000000000000,0x00000002ec0000000,0x0000000000000000,0x0000000000bdc0000},
+ { 0x000000000000000a,0x0001b0c5edb4f0078,0x000000003f813b0b,0x00002e7ad12831696,0x0000000000000000,0x0001b100000000000,0x0000000000000000,0x00002e80000000000},
+ { 0x0000000000000000,0x003190b9bfc9a5bb5,0x0000000000000001,0x0000000000000c454,0x0000000000000000,0x0031a000000000000,0x0000000000000000,0x0000000000000c480},
+ { 0x0000000000000003,0x000d0d8be8f400689,0x0000000031a0ec3b,0x00000d057cc8faa89,0x0000000000000000,0x000d1000000000000,0x0000000000000000,0x00000d08000000000},
+ { 0x0000000000001af6,0x000008b02a726fb09,0x00000000010f95d8,0x00000000441528144,0x0000000000000000,0x000008b4000000000,0x0000000000000000,0x00000000442000000},
+ { 0x0000000000000003,0x00b1b67c8ab3474b2,0x000000000000005a,0x00000000000228821,0x0000000000000000,0x00b1c000000000000,0x0000000000000000,0x00000000000229000},
+ { 0x0000000000000010,0x00000000000006282,0x0000000000000025,0x00000000000000078,0x0000000000000000,0x000000000000062a0,0x0000000000000025,0x00000000000000078},
+ { 0x000000000060df60,0x000344ad7aef98bdc,0x000001eb5ceca99b,0x0000003a1ee5ac1f9,0x0000000000000000,0x00034500000000000,0x000001eb00000000,0x0000003a200000000},
+ { 0x00000002cb034c5f,0x0050452fd3f67d83b,0x00000008178d645e,0x0000217cd8af15f0e,0x0000000000000000,0x00506000000000000,0x0000000000000000,0x00002180000000000},
+ { 0x0000000000041131,0x00000147db0f56ca0,0x000000000013d950,0x0000000019c00bc75,0x0000000000000000,0x00000148000000000,0x0000000000000000,0x0000000019c800000},
+ { 0x000000000000036c,0x0000269bb862f2670,0x00000009e955102f,0x000014fe482224101,0x0000000000000000,0x000026a0000000000,0x0000000000000000,0x00001500000000000},
+ { 0x0000000000000068,0x001d96b307108df43,0x00000000000aece9,0x00000000001f4b5b7,0x0000000000000000,0x001d9800000000000,0x00000000000a8000,0x00000000001f50000},
+ { 0x0000000000000007,0x001f55bb8224dc826,0x00000000000b588a,0x00000063885e89400,0x0000000000000000,0x001f5800000000000,0x0000000000000000,0x00000063a00000000},
+ { 0x0000000000001710,0x00000002aa74f2681,0x000000000000e941,0x0000000000072eae8,0x0000000000000000,0x00000002ab0000000,0x000000000000e000,0x00000000000730000},
+ { 0x000000001ddfd3b1,0x0000a3aa6b8be8690,0x00003f8bd50b3443,0x00001ce73e61bb65c,0x0000000000000000,0x0000a3c0000000000,0x00003f8000000000,0x00001ce8000000000},
+ { 0x0000000002be770a,0x00b6464df7d72397f,0x00000000c7ad7b64,0x000000001c8d207c5,0x0000000000000000,0x00b68000000000000,0x00000000c7800000,0x000000001c9000000},
+ { 0x000000000000000a,0x00000008796a54373,0x00000000000000c1,0x0000000000006f151,0x0000000000000000,0x000000087c0000000,0x0000000000000000,0x0000000000006f200},
+ { 0x000000000000001f,0x00000001849971162,0x0000000000007c57,0x00000000a26ecf0ab,0x0000000000000000,0x00000001850000000,0x0000000000000000,0x00000000a28000000},
+ { 0x0000000000000009,0x00000c7fe8798bf81,0x00000000048a0fae,0x000000000078f02d1,0x0000000000000000,0x00000c80000000000,0x00000000048a0000,0x00000000007900000},
+ { 0x000000000000001a,0x0073d3a51a98e3676,0x0000000000001918,0x0000000000782be03,0x0000000000000000,0x0073e000000000000,0x0000000000000000,0x00000000007840000},
+ { 0x000000000000002e,0x0000006bc186a6d35,0x000000000000009a,0x00000000007db3d5c,0x0000000000000000,0x0000006be00000000,0x0000000000000000,0x00000000007dc0000},
+ { 0x00000000000000af,0x0000000072baf5212,0x0000000001a9c99c,0x000000002dc6143b7,0x0000000000000000,0x0000000072c000000,0x0000000001000000,0x000000002dd000000},
+ { 0x0000000000000148,0x00000000003b826c7,0x0000000000000614,0x000000000000008c4,0x0000000000000000,0x00000000003b90000,0x0000000000000614,0x000000000000008c4},
+ { 0x0000000000000003,0x00003ea97e4936ae2,0x00000000002ba297,0x0000000007fc84553,0x0000000000000000,0x00003eb0000000000,0x0000000000200000,0x0000000007fe00000},
+ { 0x00000000000b585a,0x00000006c99de6fe7,0x000000000013bdd1,0x000000000d483e9a9,0x0000000000000000,0x00000006ca0000000,0x0000000000000000,0x000000000d4c00000},
+ { 0x0000000000000001,0x00000aafdbda2148b,0x000000000000000f,0x0000007ab219fab2f,0x0000000000000000,0x00000ab0000000000,0x0000000000000000,0x0000007ac00000000},
+ { 0x0000000000000003,0x000064c38a287a488,0x000000000021d332,0x000000000071ff68e,0x0000000000000000,0x000064e0000000000,0x0000000000200000,0x00000000007200000},
+ { 0x00000000000004a1,0x01a9392669c2ce0ba,0x00000000002d9517,0x0000047bb4a576082,0x0000000000000000,0x01a98000000000000,0x0000000000000000,0x0000047c000000000},
+ { 0x00000000000000fa,0x054945d1a59236132,0x0059f87a494fce9d,0x0075348d49ca3f057,0x0000000000000000,0x054a0000000000000,0x0058000000000000,0x00754000000000000},
+ { 0x0000000000000008,0x000000311bfe112ff,0x00000000000000f7,0x0000000000009524c,0x0000000000000000,0x00000031200000000,0x0000000000000000,0x00000000000095400},
+ { 0x00000000000000d1,0x004e8048967c24cf5,0x00000000000b9c59,0x00000002c8d06747b,0x0000000000000000,0x004ea000000000000,0x0000000000000000,0x00000002c90000000},
+ { 0x0000000000000056,0x000000042d72026e4,0x000000000000012c,0x000000008c280fde9,0x0000000000000000,0x000000042e0000000,0x0000000000000000,0x000000008c4000000},
+ { 0x0000000000000058,0x021b128c529ffbbfc,0x000000000737bc7f,0x00000016fb5c854b4,0x0000000000000000,0x021c0000000000000,0x0000000000000000,0x00000017000000000},
+ { 0x0000000000000f1c,0x00000051b6e7f6c6d,0x0000000000002c08,0x00000000707e4ed8a,0x0000000000000000,0x00000051c00000000,0x0000000000000000,0x00000000708000000},
+ { 0x0000000000000002,0x003c4bae37fee1ea2,0x0000000000000663,0x000004134f78f872d,0x0000000000000000,0x003c5000000000000,0x0000000000000000,0x00000414000000000},
+ { 0x0000000000000040,0x00000000845dc5354,0x00000000000000c0,0x000000000000007b9,0x0000000000000000,0x00000000848000000,0x00000000000000c0,0x000000000000007b9},
+ { 0x0000000000000021,0x000000008779d0776,0x00000000000000b1,0x00000000004be1c8f,0x0000000000000000,0x00000000878000000,0x0000000000000000,0x00000000004c00000},
+ { 0x00000000001454cd,0x01e8ac4ae45729676,0x0000000001874e5e,0x000004c4f74a37676,0x0000000000000000,0x01e90000000000000,0x0000000000000000,0x000004c6000000000},
+ { 0x0000000001130fc1,0x000020b2fdf3a2f39,0x000000000205aa25,0x000000000024e9a6e,0x0000000000000000,0x000020c0000000000,0x000000000205a000,0x000000000024ea000},
+ { 0x00000000000001b9,0x00000137618c9303c,0x00000000001ae1ca,0x000000000c6b53994,0x0000000000000000,0x00000137800000000,0x0000000000000000,0x000000000c6c00000},
+ { 0x0000000000000a3a,0x01847bb4f3d1be934,0x00000000021af6d3,0x000005f30d7c18784,0x0000000000000000,0x01848000000000000,0x0000000000000000,0x000005f4000000000},
+ { 0x000000000000000e,0x037742da72a6b5280,0x0000000000000017,0x0000000000f818d00,0x0000000000000000,0x03780000000000000,0x0000000000000000,0x0000000000f840000},
+ { 0x0000000000000002,0x03b8cff0a396d1272,0x000000000000010c,0x000000000b9a26c67,0x0000000000000000,0x03b90000000000000,0x0000000000000000,0x000000000b9c00000},
+ { 0x000000000001e47d,0x0eacfb3290d87d762,0x000000003e7af03a,0x00001d62893e9fac3,0x0000000000000000,0x0eb00000000000000,0x0000000000000000,0x00001d68000000000},
+ { 0x000000000000b670,0x00272a135fada7718,0x00000000000967fe,0x000000e12ef4b87ff,0x0000000000000000,0x00273000000000000,0x0000000000000000,0x000000e1400000000},
+ { 0x0000000000000212,0x0024dd17c9148fbee,0x00000000003ecd11,0x00006e33a3b1a3f0c,0x0000000000000000,0x0024e000000000000,0x0000000000000000,0x00006e40000000000},
+ { 0x0000000000170fce,0x00000003c13e3ff94,0x0000000059af60b9,0x00000000209b5c966,0x0000000000000000,0x00000003c20000000,0x0000000059800000,0x0000000020a000000},
+ { 0x00000000000194e5,0x00000675d1a5e4476,0x000001fbdfd75c69,0x0000002857c43060c,0x0000000000000000,0x00000676000000000,0x000001fbc0000000,0x00000028580000000},
+ { 0x00000000000014d0,0x006e51aae0feb0f43,0x0000000d46facd06,0x00007efeda0f6e2b5,0x0000000000000000,0x006e6000000000000,0x0000000000000000,0x00007f00000000000},
+ { 0x00000000000e2035,0x00000000000cf18be,0x00000000001bd9f6,0x0000000000024a92b,0x00000000000e0000,0x00000000000cf4000,0x00000000001bd800,0x0000000000024ac00},
+ { 0x00000007a854ba19,0x02256a27b008718e0,0x0000000a68cc4d9a,0x0027a6247eb099067,0x0000000000000000,0x02260000000000000,0x0000000000000000,0x0027b000000000000},
+ { 0x00000000001d00a9,0x00049e58e2ad0b30c,0x0000037593146b6c,0x0000182b40157a7c5,0x0000000000000000,0x0004a000000000000,0x0000030000000000,0x00001830000000000},
+ { 0x0000000000005efd,0x000219a86ce3a17ee,0x00000000001196e8,0x00000002af68aa32c,0x0000000000000000,0x00021a00000000000,0x0000000000000000,0x00000002b00000000},
+ { 0x0000000000000042,0x01ed37773df154333,0x00b3898c19fc5508,0x0182772ea845a9c09,0x0000000000000000,0x01ed8000000000000,0x00b0000000000000,0x01828000000000000},
+ { 0x0000000000000007,0x000007ea37f411cb7,0x00000000000098df,0x00000000000091394,0x0000000000000000,0x000007ec000000000,0x0000000000009800,0x00000000000091400},
+ { 0x0000000000000004,0x00006da7c1f9b84b1,0x0000000000000015,0x000000000a645dc5d,0x0000000000000000,0x00006dc0000000000,0x0000000000000000,0x000000000a6800000},
+ { 0x0000000000000006,0x0022dabf771e97bc2,0x000000000000346e,0x0000000000000f7ea,0x0000000000000000,0x0022e000000000000,0x0000000000003440,0x0000000000000f800},
+ { 0x0000000000000030,0x000009af26fbed7d0,0x0000000000000d67,0x00000004e828322e1,0x0000000000000000,0x000009b0000000000,0x0000000000000000,0x00000004ea0000000},
+ { 0x0000000000000000,0x0036a9f2e70d0cb29,0x00000000002cb3a8,0x00072d2678013e2ee,0x0000000000000000,0x0036b000000000000,0x0000000000000000,0x00072e00000000000},
+ { 0x000000000000001e,0x026703d27d281dfad,0x00000000000037d1,0x00000000003f337c6,0x0000000000000000,0x02680000000000000,0x0000000000000000,0x00000000003f40000},
+ { 0x0000000000000caa,0x000000008f4dd7480,0x00000000000018c6,0x0000000000008b7f5,0x0000000000000000,0x000000008f8000000,0x0000000000001800,0x0000000000008b800},
+ { 0x0000000000000092,0x00264b07a6faeb009,0x00000000001a0356,0x00000000003269837,0x0000000000000000,0x00265000000000000,0x00000000001a0000,0x00000000003270000},
+ { 0x0000000000000e3b,0x0000005ec4b11a237,0x000000000006039a,0x00000000c92830f06,0x0000000000000000,0x0000005ee00000000,0x0000000000000000,0x00000000c94000000},
+ { 0x00000000000010cf,0x0000a1fe1c7398415,0x0000000000008132,0x000000001f1b5a57d,0x0000000000000000,0x0000a200000000000,0x0000000000000000,0x000000001f2000000},
+ { 0x000000000000000f,0x0417047293df4dc65,0x000004b0bb341550,0x00007845afcd08242,0x0000000000000000,0x04180000000000000,0x0000040000000000,0x00007860000000000},
+ { 0x00000000000001b3,0x00000000025057631,0x000000000000111c,0x000000000000017f3,0x0000000000000000,0x00000000025100000,0x000000000000111c,0x000000000000017f3},
+ { 0x0000000000000007,0x0000005619d5fb0ec,0x00000000001d03f2,0x00000000d6818505c,0x0000000000000000,0x00000056200000000,0x0000000000000000,0x00000000d6c000000},
+ { 0x000000000000000b,0x012fda4811187bb36,0x0000000000323864,0x0000001ea8e139c11,0x0000000000000000,0x01300000000000000,0x0000000000000000,0x0000001eb00000000},
+ { 0x000000000000001d,0x03d5c399c2863354c,0x018e825bf45e3776,0x002108830781710d6,0x0000000000000000,0x03d60000000000000,0x018e800000000000,0x00210c00000000000},
+ { 0x0000000000000016,0x0000000000daa9698,0x0000000000000038,0x0000000000b9cc568,0x0000000000000000,0x0000000000dac0000,0x0000000000000000,0x0000000000ba00000},
+ { 0x00000001bdd66156,0x0006d6f3979490e8b,0x000000048d36d2fa,0x0000000b204300895,0x0000000000000000,0x0006d800000000000,0x0000000480000000,0x0000000b240000000},
+ { 0x0000000000000005,0x000000000737a4a2f,0x000000000000035c,0x00000000001feaa53,0x0000000000000000,0x00000000073800000,0x0000000000000000,0x00000000001ff0000},
+ { 0x0000000000000002,0x0024978a28783caf7,0x0000000000006dea,0x00000000000008592,0x0000000000000000,0x0024a000000000000,0x0000000000006de8,0x00000000000008598},
+ { 0x0000000000000001,0x02479b638dd899597,0x00000000000001eb,0x000000000000003fd,0x0000000000000000,0x02480000000000000,0x00000000000001eb,0x000000000000003fd},
+ { 0x00000000000d00d0,0x0d2c10f381567f30a,0x00000000004c72a3,0x00000013e03781e8c,0x0000000000000000,0x0d300000000000000,0x0000000000000000,0x00000013e80000000},
+ { 0x0000000002b795a4,0x00076fb9de9c7e21a,0x000000009bc8b2f4,0x0000000151d489290,0x0000000000000000,0x00077000000000000,0x0000000098000000,0x00000001520000000},
+ { 0x00000000000a0089,0x000002542be8187e7,0x00000028870cb77c,0x000000057af969030,0x0000000000000000,0x00000255000000000,0x0000002880000000,0x000000057b0000000},
+ { 0x000000000000da62,0x00000000751a90788,0x000000000003db1a,0x000000000001123c2,0x0000000000000000,0x00000000752000000,0x000000000003d800,0x00000000000112400},
+ { 0x00000009372101f7,0x002329fbd0b2f71d5,0x0000000afd595b39,0x000002d87fd74b760,0x0000000000000000,0x00233000000000000,0x0000000000000000,0x000002d9000000000},
+ { 0x0000000000000037,0x0000139c091e870fd,0x000000003bebe044,0x00000eacea3eca13b,0x0000000000000000,0x000013a0000000000,0x0000000000000000,0x00000eb0000000000},
+ { 0x0000000000000326,0x000035e9cd8f3e4ce,0x000000000003bef0,0x000003036b1e2f7f2,0x0000000000000000,0x000035f0000000000,0x0000000000000000,0x00000304000000000},
+ { 0x000000000000393e,0x0000d464baaf7914c,0x0000000029860eb3,0x00006401e588a8db2,0x0000000000000000,0x0000d480000000000,0x0000000000000000,0x00006420000000000},
+ { 0x000000000000000b,0x0001dfe1f52122bc9,0x0000000000000227,0x00006a50c64b0be00,0x0000000000000000,0x0001e000000000000,0x0000000000000000,0x00006a60000000000},
+ { 0x00000000003c879b,0x000038d8affc2704f,0x0000000012edde6c,0x0000000e4141cf689,0x0000000000000000,0x000038e0000000000,0x0000000000000000,0x0000000e440000000},
+ { 0x0000000000fe9414,0x0000d8ad21f919792,0x00000000032c0680,0x00000522749126ae5,0x0000000000000000,0x0000d8c0000000000,0x0000000000000000,0x00000524000000000},
+ { 0x0000000000000313,0x00020a2d7384b5c5c,0x0000000000012509,0x00000003c6eea672c,0x0000000000000000,0x00020b00000000000,0x0000000000000000,0x00000003c70000000},
+ { 0x0000000000000040,0x0000094f73710003e,0x00000000000000dc,0x000000001a868ddf0,0x0000000000000000,0x00000950000000000,0x0000000000000000,0x000000001a8800000},
+ { 0x0000000000000004,0x000019502ab58927e,0x0000000000000266,0x0000000002c1f6a55,0x0000000000000000,0x00001958000000000,0x0000000000000000,0x0000000002c200000},
+ { 0x000000000000009f,0x00000000028a17490,0x0000000000000b96,0x0000000000002c714,0x0000000000000000,0x00000000028b00000,0x0000000000000b00,0x0000000000002c800},
+ { 0x00000000000f5a84,0x0017b08dee54f8de3,0x0000000001907a6b,0x000000cc1c8c74646,0x0000000000000000,0x0017b800000000000,0x0000000000000000,0x000000cc400000000},
+ { 0x00000000000000c6,0x00000009bdb6f41a4,0x0000000dd00dfbbe,0x00000001ba217dd01,0x0000000000000000,0x00000009c00000000,0x0000000dd0000000,0x00000001ba4000000},
+ { 0x00000000000a0416,0x072cd84a77586052b,0x0000009c74835e95,0x00000011b54136934,0x0000000000000000,0x072e0000000000000,0x0000009c60000000,0x00000011b60000000},
+ { 0x000000000000ba8b,0x0000549719704a528,0x0000000000164efa,0x00000253304597993,0x0000000000000000,0x000054a0000000000,0x0000000000000000,0x00000254000000000},
+ { 0x0000000000000182,0x000076a5fea82d5f0,0x000000000000db6a,0x0000000000005f4d5,0x0000000000000000,0x000076c0000000000,0x000000000000da00,0x0000000000005f600},
+ { 0x000000000ac0b5e9,0x00000bf180c6691ba,0x000000000da31d04,0x000000250442c8a50,0x0000000000000000,0x00000bf4000000000,0x0000000000000000,0x00000025100000000},
+ { 0x00000000000001a5,0x0000058b7efc30435,0x00000000000002d0,0x000000000489f7a15,0x0000000000000000,0x0000058c000000000,0x0000000000000000,0x00000000048a00000},
+ { 0x000000000000027d,0x0000002fb3f7ca8c7,0x0000000000002b36,0x00000002d278b52e8,0x0000000000000000,0x0000002fc00000000,0x0000000000000000,0x00000002d30000000},
+ { 0x0000000001d8400c,0x000000375925af082,0x00000000bf1367c7,0x00000000953fd0242,0x0000000000000000,0x00000037600000000,0x00000000bc000000,0x00000000954000000},
+ { 0x000000000000002f,0x0001760d8ce029e0b,0x0000000000000031,0x000000000001d78ff,0x0000000000000000,0x00017680000000000,0x0000000000000000,0x000000000001d8000},
+ { 0x0000000007d32230,0x0078ea617dd686095,0x000000000cc77e36,0x0000000007625dab1,0x0000000000000000,0x00790000000000000,0x000000000cc00000,0x00000000076400000},
+ { 0x0000000000000011,0x000001164ef7d2abc,0x0000000000000060,0x0000003585e9cf478,0x0000000000000000,0x00000116800000000,0x0000000000000000,0x00000035900000000},
+ { 0x0000000011e862ad,0x0ffbe08e911685b5a,0x000025d2a0f357ec,0x013470d074aa70ea4,0x0000000000000000,0x0ffc0000000000000,0x0000000000000000,0x01348000000000000},
+ { 0x000000003bd1c7c9,0x00077d70f39aa0319,0x00000001a9fc2f45,0x0000046d5aab0de20,0x0000000000000000,0x00077e00000000000,0x0000000000000000,0x0000046e000000000},
+ { 0x000000000000001a,0x000003e734baf50a1,0x0000000000000038,0x0000000000000014c,0x0000000000000000,0x000003e8000000000,0x0000000000000038,0x0000000000000014c},
+ { 0x0000000000000866,0x000b51c9300ca0d0f,0x00000a4e62b6c022,0x000002b91f3688078,0x0000000000000000,0x000b5400000000000,0x00000a4000000000,0x000002ba000000000},
+ { 0x0000000000000002,0x000005a509f785197,0x0000000000001106,0x0000000015479a365,0x0000000000000000,0x000005a6000000000,0x0000000000000000,0x00000000154800000},
+ { 0x0000000000000017,0x0008c6ff84d1f0cb2,0x000000000000090c,0x000057606d690363f,0x0000000000000000,0x0008c800000000000,0x0000000000000000,0x00005780000000000},
+ { 0x0000000000000146,0x0000001a84fb20d4b,0x0000000000040a70,0x0000000000007f7ba,0x0000000000000000,0x0000001a880000000,0x0000000000040a00,0x0000000000007f800},
+ { 0x000000000000000e,0x022607ccbe5adaed1,0x000000019c4fc518,0x014bfe44d33309c6a,0x0000000000000000,0x02270000000000000,0x0000000000000000,0x014c0000000000000},
+ { 0x0000000000000877,0x0000000a24a7b165e,0x0000000000001f3c,0x00000000000e853aa,0x0000000000000000,0x0000000a280000000,0x0000000000000000,0x00000000000e88000},
+ { 0x0000000000000001,0x000264859d00af869,0x00000000000fe193,0x00000000025cbcc47,0x0000000000000000,0x00026500000000000,0x0000000000000000,0x00000000025d00000},
+ { 0x0000000000000032,0x00005fa2c7953d76b,0x00000000003f5c7a,0x00000027420b13c0d,0x0000000000000000,0x00005fc0000000000,0x0000000000000000,0x00000027500000000},
+ { 0x0000000000000002,0x00000003cfe69db57,0x00000000000001f5,0x000000000000104ee,0x0000000000000000,0x00000003d00000000,0x0000000000000180,0x00000000000010500},
+ { 0x00000005a57c4faf,0x000ff63f40033b8e3,0x00000006679f39c8,0x00000a2b84fb2895b,0x0000000000000000,0x000ff800000000000,0x0000000000000000,0x00000a2c000000000},
+ { 0x0000000db9405013,0x00000b0fa8a95900b,0x00000036c41db9b5,0x000006cfef5da01e0,0x0000000000000000,0x00000b10000000000,0x0000002000000000,0x000006d0000000000},
+ { 0x0000000000000014,0x00000001671ebd093,0x0000000000002e48,0x0000000007f53d331,0x0000000000000000,0x00000001678000000,0x0000000000000000,0x0000000007f600000},
+ { 0x0000000000000003,0x0025517fd410c4f63,0x000000000d109692,0x0000000003b50ead9,0x0000000000000000,0x00256000000000000,0x000000000d100000,0x0000000003b600000},
+ { 0x000000000087b63f,0x0000006b37bb0a770,0x00000002bc30ecd0,0x0000000ad8ee0f296,0x0000000000000000,0x0000006b400000000,0x0000000280000000,0x0000000adc0000000},
+ { 0x0000000000000013,0x000768d7194189093,0x0000000000001bf7,0x000000000009777db,0x0000000000000000,0x00076a00000000000,0x0000000000000000,0x00000000000978000},
+ { 0x0000000000000013,0x00004b860c96bf17f,0x000000000000002f,0x0000000001dd8579c,0x0000000000000000,0x00004ba0000000000,0x0000000000000000,0x0000000001de00000},
+ { 0x00000000000006d2,0x0033a89db85931036,0x0000000000006f16,0x000cb0fa49290eff2,0x0000000000000000,0x0033b000000000000,0x0000000000000000,0x000cb400000000000},
+ { 0x0000000000000420,0x0000db12c19c16021,0x000003f293df8326,0x00008e8f4c656c1f8,0x0000000000000000,0x0000db40000000000,0x0000000000000000,0x00008ec0000000000},
+ { 0x00000000001138e1,0x0018f0d1468eb59de,0x0000000002b48b39,0x0000008106b112f7c,0x0000000000000000,0x0018f800000000000,0x0000000000000000,0x00000081400000000},
+ { 0x0000000000000a7a,0x00030363853356b07,0x0000000096d141a0,0x0001f345e41820cb8,0x0000000000000000,0x00030400000000000,0x0000000000000000,0x0001f380000000000},
+ { 0x000000000f6f1763,0x01997d644c19231a7,0x0acefae1813abe86,0x01884dd5d93be5df5,0x0000000000000000,0x01998000000000000,0x0acc000000000000,0x01888000000000000},
+ { 0x0000000000000000,0x00917f17397eb258d,0x0000000037d7f0c1,0x000694b0197741aa7,0x0000000000000000,0x00918000000000000,0x0000000000000000,0x00069600000000000},
+ { 0x0000000000000000,0x0000004826c752038,0x0000000000028cb7,0x000000000004df0bb,0x0000000000000000,0x00000048400000000,0x0000000000028000,0x000000000004e0000},
+ { 0x00000000000000ba,0x0000a5857947fbc2e,0x000000000002fa77,0x0000000000004d62c,0x0000000000000000,0x0000a5c0000000000,0x000000000002fa00,0x0000000000004d680},
+ { 0x00000000000007dd,0x000000002c0ab36dc,0x0000000000006c34,0x00000000000007936,0x0000000000000000,0x000000002c1000000,0x0000000000006c34,0x00000000000007936},
+ { 0x00000000c9ffaad5,0x000099e9e5b499356,0x00002356e0b3d146,0x000002c85374dae9a,0x0000000000000000,0x00009a00000000000,0x0000235400000000,0x000002c8800000000},
+ { 0x000000009f367a04,0x00138d2b48cdfb66b,0x00000000f244df26,0x00000014774190586,0x0000000000000000,0x00139000000000000,0x0000000080000000,0x00000014780000000},
+ { 0x0000000000000006,0x0000013f9dfc69c4c,0x00000000000001d0,0x0000000172ff5ce51,0x0000000000000000,0x00000140000000000,0x0000000000000000,0x00000001730000000},
+ { 0x000000000000000e,0x0013336938f7660be,0x0000000000000c69,0x0001dd3a9762f3310,0x0000000000000000,0x00133800000000000,0x0000000000000000,0x0001dd80000000000},
+ { 0x0000000000000078,0x001b3d15ce22655d3,0x000000000026c0f1,0x0000000051d3319e7,0x0000000000000000,0x001b4000000000000,0x0000000000000000,0x0000000051e000000},
+ { 0x000000080610dde5,0x006e17dbfa21943d9,0x000080398a1ff096,0x001e9b2e69a21e051,0x0000000000000000,0x006e2000000000000,0x0000800000000000,0x001ea000000000000},
+ { 0x0000000000000000,0x016039f8228579a96,0x000000000000075d,0x000000000001b2264,0x0000000000000000,0x01608000000000000,0x0000000000000000,0x000000000001b2800},
+ { 0x0000000000000027,0x02aed2518f37a7b11,0x0000000000016bd7,0x0000000022b3e9bed,0x0000000000000000,0x02af0000000000000,0x0000000000000000,0x0000000022c000000},
+ { 0x0000000000000007,0x0002f6bb7889ab1ef,0x0000000000000016,0x00000000000004874,0x0000000000000000,0x0002f700000000000,0x0000000000000000,0x00000000000004880},
+ { 0x0000000000000003,0x0003d74dd04e17b83,0x00000000000006bb,0x000000000000044fb,0x0000000000000000,0x0003d800000000000,0x00000000000006b0,0x00000000000004500},
+ { 0x0000000000002e8e,0x03e013bb1e0ae9a22,0x00000000000c6289,0x0002268a39c7a053b,0x0000000000000000,0x03e10000000000000,0x0000000000000000,0x00022700000000000},
+ { 0x0000000000000003,0x05fa95eee1d0768b4,0x000000000000001d,0x00000ad9f72ef8841,0x0000000000000000,0x05fc0000000000000,0x0000000000000000,0x00000adc000000000},
+ { 0x000000000000001b,0x010de65becc8faca9,0x000000002e3e5bb0,0x00000000f44b7414b,0x0000000000000000,0x010e0000000000000,0x000000002c000000,0x00000000f48000000},
+ { 0x0000000000000257,0x000007cab6ed084d8,0x0000000000000c74,0x0000000024ca10b5a,0x0000000000000000,0x000007cc000000000,0x0000000000000000,0x0000000024d000000},
+ { 0x0000000026e2fa29,0x012b0aa3ca3302403,0x000000c18ca335a3,0x0007ce6267ca090fd,0x0000000000000000,0x012b8000000000000,0x0000000000000000,0x0007d000000000000},
+ { 0x0000000000000002,0x003f45ac434b90862,0x0000000000cbb58d,0x0000000000687666a,0x0000000000000000,0x003f5000000000000,0x0000000000ca0000,0x00000000006880000},
+ { 0x00000000000053fd,0x0012d51532a4b131a,0x000000daec74481b,0x000177d48f44ffabb,0x0000000000000000,0x0012d800000000000,0x0000000000000000,0x00017800000000000},
+ { 0x0000000000000000,0x000c2ca70c9bb06ad,0x0000000000000147,0x00000000003ae8116,0x0000000000000000,0x000c3000000000000,0x0000000000000000,0x00000000003af0000},
+ { 0x00000000000067a1,0x000e3423e7a3d1c9a,0x000000000000f51a,0x000000000057e4c48,0x0000000000000000,0x000e3800000000000,0x0000000000000000,0x00000000005800000},
+ { 0x00000000006e195d,0x000194f09a557409a,0x0000000000fc41e4,0x00000a3aad0cb0554,0x0000000000000000,0x00019500000000000,0x0000000000000000,0x00000a3c000000000},
+ { 0x0000000000000042,0x00058ef842fe1a81a,0x00000000000053ee,0x000000111ec73d556,0x0000000000000000,0x00059000000000000,0x0000000000000000,0x00000011200000000},
+ { 0x0000000000000000,0x00004e392b1cc4c44,0x0000039d85b88b1e,0x00000075cb6a8c90a,0x0000000000000000,0x00004e40000000000,0x0000039d00000000,0x00000075d00000000},
+ { 0x0000000000004aa8,0x04504b016de606831,0x000000000001ae95,0x00014252b6caaa79d,0x0000000000000000,0x04520000000000000,0x0000000000000000,0x00014280000000000},
+ { 0x0000000000000004,0x00c0a54d5c027a790,0x00000000006a1e81,0x0000000003a4149c2,0x0000000000000000,0x00c0c000000000000,0x0000000000600000,0x0000000003a500000},
+ { 0x0000000000000002,0x0000000704e9e46cf,0x000000000000000b,0x0000000000000e776,0x0000000000000000,0x00000007060000000,0x0000000000000000,0x0000000000000e780},
+ { 0x0000000000000011,0x0079c5b8205de26cb,0x00000fb3863755e1,0x000001c182d0fa7a2,0x0000000000000000,0x0079e000000000000,0x00000fb000000000,0x000001c1c00000000},
+ { 0x000000000068d4a1,0x003c294bc8ed9b3f0,0x00000ba7844b8291,0x0000018ae3cb984b0,0x0000000000000000,0x003c3000000000000,0x00000ba400000000,0x0000018b000000000},
+ { 0x0000000012a35c34,0x001a03173246d7cc2,0x00000005a768f56f,0x0000000c6656be2da,0x0000000000000000,0x001a0800000000000,0x0000000580000000,0x0000000c680000000},
+ { 0x000000000000003a,0x0000000002eafd115,0x000000000017e74e,0x000000000057fe4c8,0x0000000000000000,0x0000000002eb00000,0x0000000000160000,0x00000000005800000},
+ { 0x000000000000002b,0x00000075bfd5cea74,0x0000000000000632,0x0000000002b39a45a,0x0000000000000000,0x00000075c00000000,0x0000000000000000,0x0000000002b400000},
+ { 0x0000000000000014,0x00000058b24f038fa,0x00000000a5eb4102,0x000000002361f687a,0x0000000000000000,0x00000058c00000000,0x00000000a5800000,0x00000000236800000},
+ { 0x0000000000000003,0x03c473d898e3ad9da,0x000000000000185c,0x005986872f5cd0a39,0x0000000000000000,0x03c50000000000000,0x0000000000000000,0x0059a000000000000},
+ { 0x0000000000000007,0x00000014fde3ccfdf,0x000000000000000d,0x000000003f10340d3,0x0000000000000000,0x00000015000000000,0x0000000000000000,0x000000003f2000000},
+ { 0x000000000000067a,0x00439905850d5fdb8,0x0000000000270c54,0x000000000006eca2f,0x0000000000000000,0x0043a000000000000,0x0000000000270000,0x000000000006ee000},
+ { 0x000000000090328b,0x00000031db863702c,0x0000000443d22d1f,0x000000032d3ad161e,0x0000000000000000,0x00000031e00000000,0x0000000440000000,0x000000032e0000000},
+ { 0x0000000000000035,0x00de9dc4201edf62d,0x0000000000000047,0x000000000000018fa,0x0000000000000000,0x00dec000000000000,0x0000000000000040,0x00000000000001900},
+ { 0x00000000000000b9,0x005385b9645ada70e,0x000000000183c44b,0x00167208486d646e7,0x0000000000000000,0x0053a000000000000,0x0000000000000000,0x00167800000000000},
+ { 0x0000000000000001,0x014cf9438c764b72a,0x0000000032d0301b,0x00000007e7651f060,0x0000000000000000,0x014d0000000000000,0x0000000020000000,0x00000007e80000000},
+ { 0x0000000000015fcd,0x008c1b22f65b47989,0x0000000000964870,0x00000234dc25a1025,0x0000000000000000,0x008c4000000000000,0x0000000000000000,0x00000235000000000},
+ { 0x0000000014c53dc5,0x0008e1b266a971a3e,0x000013dadd86c50f,0x000069342c8f3af5c,0x0000000000000000,0x0008e400000000000,0x0000120000000000,0x00006940000000000},
+ { 0x000003361fd474ca,0x0006f22fb09c62a45,0x0002b5f1b9077124,0x0000e57961240ea7a,0x0000000000000000,0x0006f400000000000,0x0002b40000000000,0x0000e580000000000},
+ { 0x000000000000000d,0x00001c75afe40f148,0x000000000039cd22,0x00000173a52407c53,0x0000000000000000,0x00001c78000000000,0x0000000000000000,0x00000174000000000},
+ { 0x0000000000000007,0x00000003c6b2273cc,0x000000000008943e,0x000000000019de0d4,0x0000000000000000,0x00000003c70000000,0x0000000000088000,0x000000000019e0000},
+ { 0x000000000000000f,0x0028b29f256ab1450,0x0000001c5dc27883,0x00000049fbc1b3332,0x0000000000000000,0x0028c000000000000,0x0000001c00000000,0x0000004a000000000},
+ { 0x0000000000000002,0x000000000de0cdc18,0x000000002c2e94ad,0x000000000b3e341f5,0x0000000000000000,0x000000000de400000,0x000000002c000000,0x000000000b4000000},
+ { 0x000000000001d257,0x008857b68331cf735,0x00000000003fdfe8,0x0000000376f92a5d6,0x0000000000000000,0x00888000000000000,0x0000000000000000,0x00000003770000000},
+ { 0x00000000000059d7,0x0359dc52dd06a73b0,0x0000000268e15155,0x00000001b3c5573fd,0x0000000000000000,0x035a0000000000000,0x0000000268000000,0x00000001b40000000},
+ { 0x000000000000001f,0x00cc03e95d515132a,0x000000000002f33a,0x00000000079089ad5,0x0000000000000000,0x00cc4000000000000,0x0000000000000000,0x00000000079200000},
+ { 0x0000000000000bc4,0x000001350f90c1f82,0x00000000003f123a,0x000000009441fc124,0x0000000000000000,0x00000135800000000,0x0000000000000000,0x00000000948000000},
+ { 0x000000000000006c,0x0036d842c48f6b2fd,0x00000003b8829978,0x000000f221ed4baac,0x0000000000000000,0x0036e000000000000,0x0000000000000000,0x000000f2400000000},
+ { 0x0000000000000001,0x090631ec1be38f9e6,0x00000007cfdcb54b,0x0000000560d7e944b,0x0000000000000000,0x09080000000000000,0x00000007c0000000,0x00000005620000000},
+ { 0x0000000000000003,0x038154b0be6c41c7a,0x0000000000000007,0x0000001e033de7ac8,0x0000000000000000,0x03820000000000000,0x0000000000000000,0x0000001e080000000},
+ { 0x000000000070b5b1,0x053ae0daf4e0e7164,0x00000000c85605e3,0x0000000699a86c00a,0x0000000000000000,0x053c0000000000000,0x00000000c0000000,0x000000069a0000000},
+ { 0x0000000000000008,0x0000003dbbcf35abc,0x000000000000001e,0x0000000e109a0deeb,0x0000000000000000,0x0000003dc00000000,0x0000000000000000,0x0000000e140000000},
+ { 0x0000000000001afc,0x03f4a22af5e3baac2,0x000000000007dd33,0x00000000937e356fd,0x0000000000000000,0x03f50000000000000,0x0000000000000000,0x00000000938000000},
+ { 0x0000000000000000,0x0f28f465a1253c0a8,0x00000000000009af,0x0d25e4f9c069d8b7c,0x0000000000000000,0x0f2c0000000000000,0x0000000000000000,0x0d280000000000000},
+ { 0x000000000000037b,0x02cbc80087bd17679,0x00000000004bca8e,0x000004f71e13d74bd,0x0000000000000000,0x02cc0000000000000,0x0000000000000000,0x000004f8000000000},
+ { 0x000000000000000d,0x000007e769f11dbb9,0x0000000004f9652d,0x0000000002078e781,0x0000000000000000,0x000007e8000000000,0x0000000004f80000,0x00000000020800000},
+ { 0x0000000000000020,0x000000000fbd0d9c4,0x000000000326eadf,0x00000000007e78574,0x0000000000000000,0x000000000fc000000,0x0000000003260000,0x00000000007e80000},
+ { 0x0000000000000006,0x0048b6aee780a49c6,0x00000000001b9cae,0x00002a56dd401980d,0x0000000000000000,0x0048c000000000000,0x0000000000000000,0x00002a60000000000},
+ { 0x000000000000306b,0x000090b8d8eab2e85,0x0000000000058e78,0x000032c5627afc1de,0x0000000000000000,0x000090c0000000000,0x0000000000000000,0x000032d0000000000},
+ { 0x0000000000000001,0x000207995330800cb,0x000001c911ae7a4c,0x000006b5d05f1c94f,0x0000000000000000,0x00020800000000000,0x000001c000000000,0x000006b6000000000},
+ { 0x000000035d2dc8d6,0x012ef0398fdc8b07f,0x00002c1962d55a04,0x0000074bf91deb1ce,0x0000000000000000,0x012f0000000000000,0x00002c0000000000,0x0000074c000000000},
+ { 0x0000000000000003,0x007228987a5ba1d32,0x00000000000036f8,0x0000000428a39a4d4,0x0000000000000000,0x00724000000000000,0x0000000000000000,0x000000042a0000000},
+ { 0x000000000000000d,0x00002b3006258980d,0x000001846344c2c4,0x00000321e716fce81,0x0000000000000000,0x00002b40000000000,0x0000018000000000,0x00000322000000000},
+ { 0x000000000000001c,0x050ced393f6e8e966,0x00000000000e8c9d,0x0000000068dc7772e,0x0000000000000000,0x050e0000000000000,0x0000000000000000,0x0000000068e000000},
+ { 0x0000000000000074,0x0740238f301efa9f3,0x00000000046214cd,0x0000027cee4239de7,0x0000000000000000,0x07420000000000000,0x0000000000000000,0x0000027d000000000},
+ { 0x00000000087fad39,0x000077c959929b7a3,0x00001a144f5e19bf,0x00001e354c5cbe23d,0x0000000000000000,0x000077e0000000000,0x00001a0000000000,0x00001e38000000000},
+ { 0x0000000000000007,0x000012f556e5ae39b,0x0000000000000045,0x0000000000000070e,0x0000000000000000,0x000012f8000000000,0x0000000000000045,0x0000000000000070e},
+ { 0x0000000000000056,0x000009a2878c525dc,0x00000000000002aa,0x00000174d7b231060,0x0000000000000000,0x000009a4000000000,0x0000000000000000,0x00000175000000000},
+ { 0x000000000000000b,0x00000003ec30cd18f,0x00000000000001d2,0x000000006454275a7,0x0000000000000000,0x00000003ed0000000,0x0000000000000000,0x00000000646000000},
+ { 0x000000000000673a,0x000000002f77ff561,0x000000000007dc52,0x0000000000219103b,0x0000000000000000,0x000000002f8000000,0x0000000000070000,0x000000000021a0000},
+ { 0x0000000000000019,0x0310cc7915ddd6139,0x00000001a54d3b67,0x000000008508f4e99,0x0000000000000000,0x03110000000000000,0x00000001a4000000,0x00000000852000000},
+ { 0x000000000012257c,0x0018283b25c42a4ea,0x000000001a323763,0x00000007d606f0152,0x0000000000000000,0x00183000000000000,0x0000000000000000,0x00000007d80000000},
+ { 0x000000000000000a,0x0000000040aeb4f7d,0x000000000c0d3c22,0x000000001a4942bf4,0x0000000000000000,0x0000000040c000000,0x000000000c000000,0x000000001a5000000},
+ { 0x0000000004394bf6,0x022eedab932eb2e67,0x0000000039ee16db,0x000e59697c4694ff0,0x0000000000000000,0x022f0000000000000,0x0000000000000000,0x000e5c00000000000},
+ { 0x00000000000000c9,0x00d23609a3f5ec4d6,0x0000000000004920,0x0002bdb8a58575226,0x0000000000000000,0x00d24000000000000,0x0000000000000000,0x0002be00000000000},
+ { 0x0000000000001930,0x000045c181565ad69,0x000000001cae0f35,0x000000796ebfe9f7f,0x0000000000000000,0x000045e0000000000,0x0000000000000000,0x00000079800000000},
+ { 0x0000000000000014,0x05b0ff2cc086b53f3,0x000000c1faea6d5e,0x0120d9f61a8f3fa04,0x0000000000000000,0x05b20000000000000,0x0000000000000000,0x01210000000000000},
+ { 0x00000000000324a5,0x000003b0fbff7e1a5,0x0000000001830227,0x00000003ca5f40537,0x0000000000000000,0x000003b1000000000,0x0000000000000000,0x00000003cb0000000},
+ { 0x000000000000005c,0x0000125f9675936da,0x00000000000014a2,0x0000000000d24ddc5,0x0000000000000000,0x00001260000000000,0x0000000000000000,0x0000000000d280000},
+ { 0x0000000000001f59,0x000000012c069e893,0x000000000176b1db,0x000000001272d3d1e,0x0000000000000000,0x000000012c8000000,0x0000000001000000,0x00000000127800000},
+ { 0x0000000000000055,0x001ac0c607438f3c4,0x0000000000007758,0x000000214814bfc4f,0x0000000000000000,0x001ac800000000000,0x0000000000000000,0x00000021500000000},
+ { 0x000000000000045e,0x002d2a4622f51d259,0x0000000000090387,0x00000000000098b68,0x0000000000000000,0x002d3000000000000,0x0000000000090380,0x00000000000098b80},
+ { 0x0000000000000007,0x000000c3cfb5c26dc,0x000000000000014a,0x0000000000000015d,0x0000000000000000,0x000000c4000000000,0x000000000000014a,0x0000000000000015d},
+ { 0x0000000000000647,0x000006adfd91f8c06,0x0000000050c07588,0x000000051e5f09e86,0x0000000000000000,0x000006ae000000000,0x0000000040000000,0x00000005200000000},
+ { 0x0000000000000000,0x0000000b841a15e4c,0x00000000000d0782,0x00000000007fe7f06,0x0000000000000000,0x0000000b880000000,0x00000000000c0000,0x00000000008000000},
+ { 0x0000000000000001,0x003f1575cbf4ea435,0x00000357251d08b1,0x0000f441e80c5c438,0x0000000000000000,0x003f2000000000000,0x0000000000000000,0x0000f480000000000},
+ { 0x00000001228e8d09,0x000030591c58253c3,0x000000336f24a532,0x000000e74a060dfe7,0x0000000000000000,0x00003060000000000,0x0000003000000000,0x000000e7800000000},
+ { 0x000000000000024a,0x0000000038439d02e,0x0000000000001784,0x00000000000b118d0,0x0000000000000000,0x00000000385000000,0x0000000000000000,0x00000000000b14000},
+ { 0x0000000000000003,0x0000012030fb6ef2a,0x000000000a8c4467,0x00000000013e560eb,0x0000000000000000,0x00000120800000000,0x000000000a8c0000,0x00000000013e80000},
+ { 0x0000000000000008,0x000000052f71bf5a3,0x000000000005c826,0x0000000057ac45889,0x0000000000000000,0x00000005300000000,0x0000000000000000,0x0000000057c000000},
+ { 0x0000000000000046,0x0003ccf364af44240,0x0000000000687d2c,0x0000000faa64d3296,0x0000000000000000,0x0003cd00000000000,0x0000000000000000,0x0000000fac0000000},
+ { 0x000000000001cc4a,0x0002b6ab04b5ee9a3,0x0000000069fc99ab,0x0000024b86c635a5c,0x0000000000000000,0x0002b700000000000,0x0000000000000000,0x0000024c000000000},
+ { 0x0000000000018007,0x000000007eaf2cc16,0x00000000165956ad,0x000000001783711ce,0x0000000000000000,0x000000007ec000000,0x0000000016000000,0x00000000178800000},
+ { 0x00000000007b65d8,0x000000b08422bab82,0x000000000db5b19d,0x00000000025b15961,0x0000000000000000,0x000000b0c00000000,0x000000000db00000,0x00000000025b80000},
+ { 0x000000000000015e,0x0000000000b55ef08,0x000000000000108b,0x000000000000216fe,0x0000000000000000,0x0000000000b580000,0x0000000000001000,0x00000000000021700},
+ { 0x00000000000004ce,0x0000000f298e968a7,0x0000000000000a76,0x000000000000a11b7,0x0000000000000000,0x0000000f2c0000000,0x0000000000000800,0x000000000000a1400},
+ { 0x0000000000000018,0x000126b135e19424c,0x00000000000000aa,0x0000000000cf9f882,0x0000000000000000,0x00012700000000000,0x0000000000000000,0x0000000000cfc0000},
+ { 0x0000000000097488,0x0000004dea64851d0,0x00000324efcd9e3f,0x00000032d0c190f83,0x0000000000000000,0x0000004e000000000,0x00000324ec000000,0x00000032d10000000},
+ { 0x00000000000065f0,0x0000a4bd05ff38f02,0x000000000000fb2e,0x00000000008ea0477,0x0000000000000000,0x0000a4c0000000000,0x0000000000000000,0x00000000008ec0000},
+ { 0x000000000000002d,0x0000000002027eeff,0x0000000000125823,0x00000000000c79637,0x0000000000000000,0x00000000020300000,0x0000000000124000,0x00000000000c7c000},
+ { 0x000000000000004a,0x02410ea0e8f876602,0x00000000001061ff,0x00000000025bb416a,0x0000000000000000,0x02420000000000000,0x0000000000100000,0x00000000025c00000},
+ { 0x0000000000000019,0x0188c42836701bb95,0x000000000006d948,0x000982b44f462fc98,0x0000000000000000,0x01890000000000000,0x0000000000000000,0x00098400000000000},
+ { 0x0000000000000001,0x0000000000007664d,0x0000000000000cce,0x0000000000000f187,0x0000000000000000,0x00000000000076800,0x0000000000000cc0,0x0000000000000f1c0},
+ { 0x0000000000000003,0x0000009571c4f9389,0x00000000006ab56c,0x0000000000c30636b,0x0000000000000000,0x00000095800000000,0x0000000000680000,0x0000000000c340000},
+ { 0x0000000001e309c6,0x0cadde5944bf4b987,0x000000003fcaec78,0x0000000011122ac08,0x0000000000000000,0x0cb00000000000000,0x000000003fc00000,0x00000000111400000},
+ { 0x0000000000125809,0x006677134bfa571a6,0x00000000006ca523,0x00000880faacfa9de,0x0000000000000000,0x00668000000000000,0x0000000000000000,0x00000884000000000},
+ { 0x0000000000000002,0x0016d032b9ced3b95,0x00000031f7aa8d5d,0x0000007ef0d77a679,0x0000000000000000,0x0016d800000000000,0x0000003000000000,0x0000007f000000000},
+ { 0x0000000000000003,0x0001538f8d77fadeb,0x00000000003747cd,0x000000001dbacc5bd,0x0000000000000000,0x00015400000000000,0x0000000000000000,0x000000001dc000000},
+ { 0x00000000000002b1,0x002811a74f938c21c,0x000000000001d408,0x00000000000152dfe,0x0000000000000000,0x00282000000000000,0x000000000001d000,0x00000000000153000},
+ { 0x0000005fe785cf92,0x001c5da9be8e70633,0x0000093b6f8fe2ff,0x0001a5c4f0eb88dab,0x0000000000000000,0x001c6000000000000,0x0000080000000000,0x0001a600000000000},
+ { 0x0000000000000003,0x000000010ac5e0f93,0x000000000000cbc6,0x00000000001d60e89,0x0000000000000000,0x000000010b0000000,0x0000000000008000,0x00000000001d68000},
+ { 0x000000001cd28788,0x02f3a419b75847aa0,0x00000003cb00ddd5,0x000000219122c6aa4,0x0000000000000000,0x02f40000000000000,0x0000000300000000,0x00000021a00000000},
+ { 0x0000000000000057,0x0000000d1106802db,0x000000000001415a,0x00000000001684577,0x0000000000000000,0x0000000d140000000,0x0000000000010000,0x00000000001688000},
+ { 0x0000000000000006,0x007d1bae4aecb61e8,0x000000000000000c,0x000000000c8a49360,0x0000000000000000,0x007d2000000000000,0x0000000000000000,0x000000000c8c00000},
+ { 0x0000000000000001,0x000ddedc9a5769447,0x0000000000072a63,0x0000000027ec28f2c,0x0000000000000000,0x000de000000000000,0x0000000000000000,0x0000000027f000000},
+ { 0x000000000000006e,0x00000000000003a5a,0x000000000000008a,0x000000000000001c4,0x0000000000000060,0x00000000000003a60,0x000000000000008a,0x000000000000001c4},
+ { 0x0000000000001def,0x000063228ccf612c3,0x0000000001ec8d4c,0x00000001c0f6f0c71,0x0000000000000000,0x00006340000000000,0x0000000000000000,0x00000001c10000000},
+ { 0x000000000000000e,0x00000b7b291de87d6,0x000000000000003d,0x00000000000004c97,0x0000000000000000,0x00000b7c000000000,0x0000000000000020,0x00000000000004ca0},
+ { 0x0000000000007b70,0x000000030e90eb460,0x00000001e2bdae0f,0x000000001f5653186,0x0000000000000000,0x000000030f0000000,0x00000001e2b80000,0x000000001f5680000},
+ { 0x000000000000eaf0,0x0000f4a06be0c19ee,0x00000000007b5e98,0x0000005a95fc68317,0x0000000000000000,0x0000f4c0000000000,0x0000000000000000,0x0000005aa00000000},
+ { 0x0000000000000219,0x0bd0c10931cd50490,0x000000000f7260a8,0x000a65d0919b4bad9,0x0000000000000000,0x0bd40000000000000,0x0000000000000000,0x000a6800000000000},
+ { 0x000000000000001c,0x0015059eb25889e22,0x00000000008394bf,0x0000000180306482a,0x0000000000000000,0x00150800000000000,0x0000000000000000,0x00000001808000000},
+ { 0x000000003c500be6,0x00038235a17eb7c12,0x00000014efe8efb6,0x000048063e58d1daa,0x0000000000000000,0x00038300000000000,0x0000000000000000,0x00004820000000000},
+ { 0x000000000450a80c,0x00032c41685093c60,0x00000015e9b86f58,0x0000009c5efb5d837,0x0000000000000000,0x00032d00000000000,0x0000001400000000,0x0000009c800000000},
+ { 0x0000000000000058,0x0007dc3670fe4f054,0x00000000000f1f2d,0x0000000001e48a614,0x0000000000000000,0x0007de00000000000,0x0000000000080000,0x0000000001e500000},
+ { 0x0000000000000000,0x0007cb324c3e54508,0x0000000000000003,0x0000000001f1046ca,0x0000000000000000,0x0007cc00000000000,0x0000000000000000,0x0000000001f180000},
+ { 0x000000000000000c,0x00001ca0c6498cc18,0x00000000065a45cd,0x0000001c36bc256f5,0x0000000000000000,0x00001ca8000000000,0x0000000000000000,0x0000001c380000000},
+ { 0x0000000016d25e09,0x0f36908a24743b0c1,0x00000000c089314b,0x001d49c28d78da9e9,0x0000000000000000,0x0f380000000000000,0x0000000000000000,0x001d5000000000000},
+ { 0x00000000000a9f8f,0x0000dfbfaac49a864,0x000000456023dc1a,0x000005aa5f8eede20,0x0000000000000000,0x0000dfc0000000000,0x0000004000000000,0x000005ac000000000},
+ { 0x0000000000000c47,0x0000000038886c5d8,0x0000000000527185,0x00000000001f4a995,0x0000000000000000,0x00000000389000000,0x0000000000520000,0x00000000001f50000},
+ { 0x00000000000057ec,0x0000000000552ee4d,0x00000000047b57d2,0x00000000005219e75,0x0000000000000000,0x00000000005540000,0x00000000047b4000,0x0000000000521c000},
+ { 0x0000000000000009,0x004bf8fec79285802,0x000000000008e131,0x0000002bb771df0d3,0x0000000000000000,0x004c0000000000000,0x0000000000000000,0x0000002bc00000000},
+ { 0x0000000000001f05,0x00000037bdd6b2cc6,0x0000000758618b17,0x00000001502de3194,0x0000000000000000,0x00000037c00000000,0x0000000758000000,0x00000001504000000},
+ { 0x0000000000018066,0x001333159e671c1f7,0x00000000007c5b89,0x0002514426dd8ad99,0x0000000000000000,0x00133800000000000,0x0000000000000000,0x00025200000000000},
+ { 0x00000000000003da,0x001415e1c0600d821,0x000000001828cd6b,0x00004653242baf166,0x0000000000000000,0x00141800000000000,0x0000000000000000,0x00004660000000000},
+ { 0x0000000000000032,0x0000d12425799e79c,0x000000000000003e,0x00000000000001220,0x0000000000000000,0x0000d140000000000,0x0000000000000038,0x00000000000001220},
+ { 0x0000000001f6e4a7,0x0000426b22808297d,0x0000000003b7ac6f,0x0000000e58d6de5aa,0x0000000000000000,0x00004280000000000,0x0000000000000000,0x0000000e5c0000000},
+ { 0x0000000000000001,0x01a91a43e39a58350,0x000000026788a5cc,0x000000352798c4ac3,0x0000000000000000,0x01a98000000000000,0x0000000200000000,0x00000035300000000},
+ { 0x000000009cd8f291,0x00fa41fce9e5a2b9d,0x0000001cbc14d5cd,0x0000c7295a5e37b52,0x0000000000000000,0x00fa8000000000000,0x0000000000000000,0x0000c740000000000},
+ { 0x0000000000000002,0x00163986f6b3807f6,0x0000000000000014,0x000009fca26ceea39,0x0000000000000000,0x00164000000000000,0x0000000000000000,0x00000a00000000000},
+ { 0x0000000001577497,0x00003fe949339341e,0x000000002c4331e6,0x00000160ec2f5043a,0x0000000000000000,0x00003ff0000000000,0x0000000000000000,0x00000161000000000},
+ { 0x0000000000000007,0x0002b993e885299b7,0x0000000000001874,0x000000000203b0f3f,0x0000000000000000,0x0002ba00000000000,0x0000000000000000,0x00000000020400000},
+ { 0x0000000084c1ebc6,0x000015c2eb8703262,0x000000ad18e32fa4,0x0000072c50ef02626,0x0000000000000000,0x000015c8000000000,0x000000a000000000,0x0000072e000000000},
+ { 0x00000000000ac6d9,0x0019adaa557c7a945,0x0000000003a6b98f,0x00000000073e0dd55,0x0000000000000000,0x0019b000000000000,0x0000000003a00000,0x00000000074000000},
+ { 0x000000000000000d,0x02824f2aa187afe1d,0x000000000000168e,0x00000000000014c92,0x0000000000000000,0x02830000000000000,0x0000000000001680,0x00000000000014d00},
+ { 0x0000000000000312,0x0001b7a9502d8b242,0x000000001e162d07,0x000000000525684dc,0x0000000000000000,0x0001b800000000000,0x000000001e100000,0x00000000052600000},
+ { 0x000000000000a31a,0x00001bee4ea98d195,0x00000000f3f08d43,0x0000011f716b616c6,0x0000000000000000,0x00001bf0000000000,0x0000000000000000,0x0000011f800000000},
+ { 0x000000000000000c,0x000000261b4530f6b,0x0000000000000055,0x0000000000000e1ca,0x0000000000000000,0x00000026200000000,0x0000000000000040,0x0000000000000e200},
+ { 0x00000000000d96b1,0x00968fb25dab1115e,0x00000000007a8ebc,0x007dcb434daf10fc2,0x0000000000000000,0x0096c000000000000,0x0000000000000000,0x007de000000000000},
+ { 0x0000000000006029,0x03d72fc6b95740730,0x00000000067e7699,0x00c7268b70699c0a2,0x0000000000000000,0x03d80000000000000,0x0000000000000000,0x00c74000000000000},
+ { 0x0000000000000001,0x0000000036e8bdac6,0x000000000012ca45,0x00000000052cfea1f,0x0000000000000000,0x0000000036f000000,0x0000000000000000,0x00000000052e00000},
+ { 0x0000000000000009,0x01a6194e330977128,0x00069b36d17904fa,0x000d110844e6189de,0x0000000000000000,0x01a68000000000000,0x0006800000000000,0x000d1400000000000},
+ { 0x0000000000000031,0x00000004d8d2531e4,0x000000000010093b,0x0000000007f09008f,0x0000000000000000,0x00000004da0000000,0x0000000000000000,0x0000000007f200000},
+ { 0x0000000000000000,0x005c00b57b772cf2d,0x0000000000df4112,0x00268b6dac3b90508,0x0000000000000000,0x005c2000000000000,0x0000000000000000,0x00269000000000000},
+ { 0x000000000000b07e,0x00001aa9019d95859,0x00000000006f2217,0x000000773d56c5e50,0x0000000000000000,0x00001ab0000000000,0x0000000000000000,0x00000077400000000},
+ { 0x0000000000000002,0x000016455ddffd55d,0x000000000000004c,0x000000020ff7e887d,0x0000000000000000,0x00001648000000000,0x0000000000000000,0x00000002100000000},
+ { 0x000000000000008f,0x000000000000005b7,0x00000000000000a8,0x00000000000000186,0x000000000000008f,0x000000000000005b7,0x00000000000000a8,0x00000000000000186},
+ { 0x0000000000000005,0x02d465a377ceee274,0x0000000000000071,0x00705912d28951c8c,0x0000000000000000,0x02d50000000000000,0x0000000000000000,0x00706000000000000},
+ { 0x0000000000042930,0x00834fb22c82f92d7,0x00000000000545e8,0x000000000003b1082,0x0000000000000000,0x00838000000000000,0x0000000000054000,0x000000000003b2000},
+ { 0x0000000000003d03,0x0000b86d80902bac4,0x000000000002cbf6,0x0000000006587b526,0x0000000000000000,0x0000b880000000000,0x0000000000000000,0x00000000065a00000},
+ { 0x00000000003e6b4b,0x00005e26f9b2657be,0x00000000003eb968,0x00000003e43b8ee90,0x0000000000000000,0x00005e40000000000,0x0000000000000000,0x00000003e50000000},
+ { 0x0000000011327a87,0x004491d2de39c57fe,0x0000000018c5ed56,0x000000002fd8bf4ab,0x0000000000000000,0x0044a000000000000,0x0000000018000000,0x000000002fe000000},
+ { 0x000000000000019b,0x03a31c8dd4fa9f9ee,0x000040e9f9205c38,0x001c4b7a4df375e9f,0x0000000000000000,0x03a40000000000000,0x0000000000000000,0x001c5000000000000},
+ { 0x0000000000261506,0x008c99f4bd3bdf11f,0x0000fa13d2c54d84,0x00057d9eaa7254113,0x0000000000000000,0x008cc000000000000,0x0000e00000000000,0x00057e00000000000},
+ { 0x0000001fc34413b8,0x0015e5661e1366a1e,0x000000360a439270,0x000aaae625551282d,0x0000000000000000,0x0015e800000000000,0x0000000000000000,0x000aac00000000000},
+ { 0x0000000000000c3b,0x00004f7b1c567c9d9,0x00000000006a0b92,0x000000000035725a6,0x0000000000000000,0x00004f80000000000,0x00000000006a0000,0x00000000003580000},
+ { 0x0000000000000005,0x000348ae32ee3d305,0x00000000c5040cfc,0x00000000cc77eb495,0x0000000000000000,0x00034900000000000,0x00000000c4000000,0x00000000cc8000000},
+ { 0x000000000f220e43,0x00000129341e5e691,0x0000000067650a98,0x0000000007c36e353,0x0000000000000000,0x00000129800000000,0x0000000067600000,0x0000000007c380000},
+ { 0x0000000000000006,0x000000000000f7e0a,0x0000000000000067,0x00000000000012eb0,0x0000000000000000,0x000000000000f8000,0x0000000000000000,0x00000000000012f00},
+ { 0x0000000000000000,0x01f7c48bec879e524,0x000000000000000f,0x0000078d26d8c9ae2,0x0000000000000000,0x01f80000000000000,0x0000000000000000,0x0000078e000000000},
+ { 0x00000000000168b2,0x00034e03f8ea48bff,0x00000014c78138c5,0x0000073694a8e303a,0x0000000000000000,0x00034f00000000000,0x0000000000000000,0x00000738000000000},
+ { 0x0000000000000012,0x00000000001232888,0x000000000000008c,0x00000000000000fe1,0x0000000000000000,0x00000000001238000,0x000000000000008c,0x00000000000000fe1},
+ { 0x00000002a05a1672,0x0003dd5f54f6ec601,0x0000000719f798c3,0x000006e53decd7510,0x0000000000000000,0x0003de00000000000,0x0000000000000000,0x000006e6000000000},
+ { 0x000000000000161a,0x0086cb72c70cc0713,0x000000d796d810a1,0x003a5c6b7bc6eda86,0x0000000000000000,0x00870000000000000,0x0000000000000000,0x003a6000000000000},
+ { 0x00000000000000e0,0x0013d2de36d9101bb,0x0000000000000687,0x0000000000173d559,0x0000000000000000,0x0013d800000000000,0x0000000000000000,0x00000000001740000},
+ { 0x0000000000000744,0x00012c53f4e7d436c,0x00000000000011b0,0x0000000000095f27c,0x0000000000000000,0x00012c80000000000,0x0000000000000000,0x00000000000960000},
+ { 0x00000000000000b9,0x00190ec7c63e04e3d,0x0000000000001d54,0x000edca3a325da595,0x0000000000000000,0x00191000000000000,0x0000000000000000,0x000ee000000000000},
+ { 0x000000004260ac3a,0x00003e75aee77ef32,0x00000001eeda0572,0x00000c98eb22a0469,0x0000000000000000,0x00003e80000000000,0x0000000000000000,0x00000c9c000000000},
+ { 0x0000000000000005,0x022e6b8705a99a744,0x0009ee8616ace53c,0x000112a37818e7ebf,0x0000000000000000,0x022f0000000000000,0x0009ee0000000000,0x000112c0000000000},
+ { 0x000000000000006e,0x001756dbe240c0669,0x0000000000011fbd,0x0001231797c398b53,0x0000000000000000,0x00175800000000000,0x0000000000000000,0x00012380000000000},
+ { 0x000000000000003d,0x00000a53266dc530a,0x0000000000d5b600,0x000000029c2c5e822,0x0000000000000000,0x00000a54000000000,0x0000000000000000,0x000000029d0000000},
+ { 0x0000000000000002,0x00001df2eb0473dbb,0x000000000003fcf5,0x00000000000198111,0x0000000000000000,0x00001df8000000000,0x000000000003f800,0x00000000000198800},
+ { 0x00000000000f6331,0x00000036ad99169bc,0x000000a086f01113,0x0000001d5659edbd9,0x0000000000000000,0x00000036b00000000,0x000000a080000000,0x0000001d580000000},
+ { 0x0000000001214c4a,0x00380e28acc6e5fbb,0x00000001885fcf94,0x000032e482fd6a799,0x0000000000000000,0x00381000000000000,0x0000000000000000,0x000032f0000000000},
+ { 0x0000000000000002,0x00000e94081cff294,0x0000000016d13de2,0x000001165453aba5e,0x0000000000000000,0x00000e98000000000,0x0000000000000000,0x00000116800000000},
+ { 0x0000000000000468,0x000000fcbcf373563,0x0000000000000c60,0x000000000013e203b,0x0000000000000000,0x000000fcc00000000,0x0000000000000000,0x000000000013e8000},
+ { 0x00000000000000a3,0x0d0f0e31050646cfc,0x0000000000e0b2e2,0x000000000031a9da1,0x0000000000000000,0x0d100000000000000,0x0000000000e00000,0x000000000031b0000},
+ { 0x0000000000000002,0x000000668679269b8,0x0000000000002d2d,0x0000000004eb6155a,0x0000000000000000,0x00000066a00000000,0x0000000000000000,0x0000000004ec00000},
+ { 0x0000000000001513,0x00000001f538c18c6,0x0000000000074512,0x000000001c461983d,0x0000000000000000,0x00000001f58000000,0x0000000000000000,0x000000001c4800000},
+ { 0x0000000000000003,0x0000eba5e1803af5f,0x000000000000000b,0x00000000000034cdf,0x0000000000000000,0x0000ebc0000000000,0x0000000000000000,0x00000000000034d00},
+ { 0x0000000000000000,0x0000b226e03967524,0x000000000041df20,0x0000000005d2fb369,0x0000000000000000,0x0000b240000000000,0x0000000000400000,0x0000000005d400000},
+ { 0x0000000000000002,0x0000000000555e10f,0x00000000000009fb,0x00000000000084107,0x0000000000000000,0x00000000005560000,0x0000000000000800,0x00000000000084400},
+ { 0x0000000000000007,0x039602e20b0bcd152,0x000000000000e39e,0x000000000000cc6af,0x0000000000000000,0x03970000000000000,0x000000000000e000,0x000000000000cc800},
+ { 0x000000000b519bc8,0x01a9c9d733c698f12,0x000000246c366416,0x006107766c6f6071f,0x0000000000000000,0x01aa0000000000000,0x0000000000000000,0x00612000000000000},
+ { 0x000000000000001e,0x0084274468036d9ea,0x0002641282c1215e,0x000451e86d5cb5d73,0x0000000000000000,0x00844000000000000,0x0002600000000000,0x00045200000000000},
+ { 0x00000000000001d9,0x00009f24850e51b08,0x0000000be643530b,0x0000002255633d057,0x0000000000000000,0x00009f40000000000,0x0000000b00000000,0x00000022600000000},
+ { 0x00000000000000b1,0x00000000000426738,0x00000000000c1fd0,0x000000000001b9019,0x0000000000000000,0x00000000000428000,0x00000000000c1c00,0x000000000001b9400},
+ { 0x0000000000000000,0x00000013337feac7a,0x0000000000000271,0x00000000000000485,0x0000000000000000,0x00000013380000000,0x0000000000000271,0x00000000000000485},
+ { 0x0000000000000003,0x00000000000019cde,0x0000000000000009,0x0000000000000000f,0x0000000000000000,0x00000000000019d00,0x0000000000000009,0x0000000000000000f},
+ { 0x000000000000001a,0x000000068dc34be5c,0x00000000000364ed,0x000000000b27f73e5,0x0000000000000000,0x000000068e0000000,0x0000000000000000,0x000000000b2800000},
+ { 0x0000000000006934,0x014ca83f398124c24,0x00000002c2d68a04,0x009e483631ce3ba5d,0x0000000000000000,0x014d0000000000000,0x0000000000000000,0x009e8000000000000},
+ { 0x0000000000000002,0x0e36de6d241502cc9,0x000000000000eca6,0x000000000001d451d,0x0000000000000000,0x0e380000000000000,0x000000000000e800,0x000000000001d4800},
+ { 0x0000000000000130,0x0e80dc8a30f265192,0x000000003e2bd063,0x0000001981c85328a,0x0000000000000000,0x0e840000000000000,0x0000000000000000,0x00000019880000000},
+ { 0x000000000000001d,0x000000220c7c46d59,0x000000000000a10b,0x0000000000000eeef,0x0000000000000000,0x00000022100000000,0x000000000000a100,0x0000000000000ef00},
+ { 0x000000000000065d,0x00b0f8424d242a76f,0x0000000000003ca6,0x000000abc7f511113,0x0000000000000000,0x00b10000000000000,0x0000000000000000,0x000000ac000000000},
+ { 0x0000000000fbf485,0x00582fb9d797134ca,0x000000005e963acd,0x00001b08432a210bb,0x0000000000000000,0x00584000000000000,0x0000000000000000,0x00001b10000000000},
+ { 0x0000000000000052,0x0022f9d786ecc7f47,0x00000000000038d6,0x00000014c6f8949b8,0x0000000000000000,0x00230000000000000,0x0000000000000000,0x00000014c80000000},
+ { 0x000000000394c986,0x00d360a9c41faf4f2,0x0000001b16ca0161,0x000181b1c0e3647c1,0x0000000000000000,0x00d38000000000000,0x0000000000000000,0x00018200000000000},
+ { 0x00000000002a639c,0x00ba8d760ca729919,0x000004d148d6d3a4,0x00006bf6c46f94ac1,0x0000000000000000,0x00bac000000000000,0x0000040000000000,0x00006c00000000000},
+ { 0x00000000003576f2,0x00000000282111b04,0x00000000012a8d64,0x000000001912f586f,0x0000000000000000,0x00000000283000000,0x0000000001000000,0x00000000191800000},
+ { 0x000000008b2aa4af,0x001296a0f23398e71,0x000109111dcd9551,0x000048b3d6c21d998,0x0000000000000000,0x00129800000000000,0x0001090000000000,0x000048c0000000000},
+ { 0x000000000000943a,0x00331aba8e4a1c518,0x0000000006422da4,0x00000005fa9c894a9,0x0000000000000000,0x00332000000000000,0x0000000000000000,0x00000005fc0000000},
+ { 0x0000000000000000,0x000000007bf679553,0x000000000000000b,0x0000000000003c876,0x0000000000000000,0x000000007c0000000,0x0000000000000000,0x0000000000003c900},
+ { 0x0000000000000207,0x0001a65ed8386acc4,0x000000000000352e,0x00000019724633bbe,0x0000000000000000,0x0001a680000000000,0x0000000000000000,0x00000019780000000},
+ { 0x000000000000d526,0x03c1c4f835d0231ae,0x000000006d61ba8c,0x0000001cfb710c885,0x0000000000000000,0x03c20000000000000,0x0000000000000000,0x0000001d000000000},
+ { 0x0000000000004825,0x00182a08d9fcc5acc,0x000000000000d9f3,0x000066412adf62e4c,0x0000000000000000,0x00183000000000000,0x0000000000000000,0x00006660000000000},
+ { 0x00000000000017d5,0x000e40c8ea1a165f2,0x0000000d06433f69,0x000000dd2db43d0c6,0x0000000000000000,0x000e4400000000000,0x0000000c00000000,0x000000dd400000000},
+ { 0x0000000000000001,0x0014054f2631adbc5,0x000000012da70fca,0x00000344f6433c7ed,0x0000000000000000,0x00140800000000000,0x0000000000000000,0x00000345000000000},
+ { 0x00000000000cc222,0x00524964432b89cee,0x00000299a771d5d3,0x00244d97fb4d12b4b,0x0000000000000000,0x00526000000000000,0x0000000000000000,0x00245000000000000},
+ { 0x0000000000073720,0x0000000d3607e9fee,0x000000000009cf5b,0x0000000001d341732,0x0000000000000000,0x0000000d380000000,0x0000000000080000,0x0000000001d380000},
+ { 0x0000000001087c41,0x000094605e2ef19c1,0x0000000013f40f6e,0x00000001a4bbfc084,0x0000000000000000,0x00009480000000000,0x0000000010000000,0x00000001a50000000},
+ { 0x00000000013ef2a5,0x00072c23529df6eac,0x00000004a4b602ed,0x000003d0433ec4b88,0x0000000000000000,0x00072e00000000000,0x0000000000000000,0x000003d1000000000},
+ { 0x0000000000000158,0x0000162080da58783,0x00000002eecbc37d,0x000007afd64d90aea,0x0000000000000000,0x00001628000000000,0x0000000000000000,0x000007b0000000000},
+ { 0x00000000006d9eaf,0x000ef3a968e4ce5f2,0x00000031aacef3d3,0x0000141886764b819,0x0000000000000000,0x000ef400000000000,0x0000000000000000,0x00001420000000000},
+ { 0x0000000000002917,0x0000536083ab542a4,0x0000000000006666,0x00000000205b5162d,0x0000000000000000,0x00005380000000000,0x0000000000000000,0x00000000206000000},
+ { 0x0000000000000001,0x01dd83eaf2831d127,0x00000000186b6164,0x000001e43c7eb0701,0x0000000000000000,0x01de0000000000000,0x0000000000000000,0x000001e4800000000},
+ { 0x00000000000000f9,0x01f1914ef18af7292,0x0000000000017099,0x000076ece4c38d838,0x0000000000000000,0x01f20000000000000,0x0000000000000000,0x00007700000000000},
+ { 0x0000000000000185,0x07124877f5835a917,0x000000000530bd84,0x0000000006d2c35fd,0x0000000000000000,0x07140000000000000,0x0000000005200000,0x0000000006d400000},
+ { 0x00000000000194ca,0x000cb3fe12248fdcf,0x00000000004737cc,0x0000175bbfc6a0003,0x0000000000000000,0x000cb400000000000,0x0000000000000000,0x00001760000000000},
+ { 0x000000000000000c,0x00000005304d66c1b,0x000000000134e047,0x00000000007a62442,0x0000000000000000,0x00000005320000000,0x0000000001340000,0x00000000007a80000},
+ { 0x0000000000000506,0x000000000dbcf35e9,0x00000000000ecea7,0x0000000000979fe6a,0x0000000000000000,0x000000000dc000000,0x00000000000c0000,0x000000000097c0000},
+ { 0x0000000000011ed0,0x00a36f8f5f6c640b0,0x0000014ad29ba6ea,0x001ef0d8e8af70c9b,0x0000000000000000,0x00a38000000000000,0x0000000000000000,0x001ef800000000000},
+ { 0x00000000033d7d1d,0x0000006a4f55994a7,0x000000056ca9c77f,0x00000002df9d3960b,0x0000000000000000,0x0000006a600000000,0x0000000560000000,0x00000002e00000000},
+ { 0x000000000000003d,0x0000000cd6c8b9ebf,0x00000000000003b9,0x000000000000009eb,0x0000000000000000,0x0000000cd80000000,0x00000000000003b9,0x000000000000009eb},
+ { 0x00000000000000b5,0x00003a369d127ccd1,0x00000000000003ba,0x0000000000009babc,0x0000000000000000,0x00003a40000000000,0x0000000000000000,0x0000000000009bc00},
+ { 0x00000000000000af,0x00000c2044adcdc4e,0x0000000000000c81,0x00000000000003651,0x0000000000000000,0x00000c24000000000,0x0000000000000c80,0x00000000000003660},
+ { 0x0000000000004c6b,0x000005b41cf2f0c78,0x0000000001fb283d,0x000000117d42543b7,0x0000000000000000,0x000005b6000000000,0x0000000000000000,0x00000011800000000},
+ { 0x0000000000000000,0x0003d797f720041b7,0x000000000751c992,0x00000000ca31508df,0x0000000000000000,0x0003d800000000000,0x0000000004000000,0x00000000ca4000000},
+ { 0x0000000190cfd7e2,0x000001c8705ea2827,0x000000262a2f8a18,0x0000002dad3a9cc12,0x0000000000000000,0x000001c8800000000,0x0000002600000000,0x0000002db00000000},
+ { 0x0000000000003b9f,0x0022d81ff77514675,0x0000016c0d27d2b3,0x0000045a270a9912d,0x0000000000000000,0x0022e000000000000,0x0000016000000000,0x0000045c000000000},
+ { 0x000000000000039a,0x000ced723060c9016,0x00000000000fb168,0x00000007b807d5ea9,0x0000000000000000,0x000cf000000000000,0x0000000000000000,0x00000007ba0000000},
+ { 0x000000001c2793f2,0x07a98937f931ff6ae,0x0079bad649596b4e,0x008c5410dffba00b3,0x0000000000000000,0x07aa0000000000000,0x0078000000000000,0x008c8000000000000},
+ { 0x0000000000000018,0x0058e38e6ccb1eb44,0x0000000000000550,0x00000000000062fa5,0x0000000000000000,0x00590000000000000,0x0000000000000400,0x00000000000063000},
+ { 0x00000000000000ae,0x0ae8e4201d29134e8,0x0000000002a961cd,0x0000000f0539edce7,0x0000000000000000,0x0aec0000000000000,0x0000000000000000,0x0000000f080000000},
+ { 0x000000000000a3bd,0x00000001b1f8d1335,0x0000000003af1dc3,0x0000000001acf2d12,0x0000000000000000,0x00000001b20000000,0x0000000003a80000,0x0000000001ad00000},
+ { 0x000000000000019a,0x00012484a19b024e5,0x000000000002ecd9,0x0000000000253c6d6,0x0000000000000000,0x00012500000000000,0x0000000000020000,0x00000000002540000},
+ { 0x0000000000000873,0x00129e8c7db5b9b3f,0x00000005e46040b8,0x000470307f8b6f7ac,0x0000000000000000,0x0012a000000000000,0x0000000000000000,0x00047200000000000},
+ { 0x00000000001b3b1a,0x0d4671122be4250a6,0x00000000002c0e87,0x00000000003050641,0x0000000000000000,0x0d480000000000000,0x00000000002c0000,0x00000000003060000},
+ { 0x0000000000002178,0x00064f949918a77a6,0x0000018a4cb639d1,0x00000035f7d60bdf9,0x0000000000000000,0x00065000000000000,0x0000018a00000000,0x00000035f80000000},
+ { 0x0000000000000004,0x00000000000dd2dc9,0x00000000000008bd,0x000000000007a4006,0x0000000000000000,0x00000000000dd4000,0x0000000000000000,0x000000000007a6000},
+ { 0x0000000000000000,0x000019115a86f169a,0x0000000000000531,0x0000000af08b77c19,0x0000000000000000,0x00001918000000000,0x0000000000000000,0x0000000af40000000},
+ { 0x0000000000f1775f,0x0668eca7d812ce760,0x00000000fa706b01,0x000000dceff14870e,0x0000000000000000,0x066a0000000000000,0x0000000000000000,0x000000dd000000000},
+ { 0x00000000000000bd,0x0000013b86a1ec3f3,0x00000000003ecd50,0x00000046e70e91096,0x0000000000000000,0x0000013c000000000,0x0000000000000000,0x00000047000000000},
+ { 0x0000000005973634,0x0000163e4fe8c89bc,0x0000005c4f7d71e8,0x000015b1f00fa2ee2,0x0000000000000000,0x00001640000000000,0x0000000000000000,0x000015b8000000000},
+ { 0x000000000000002f,0x000016897196747c2,0x00000000000e1122,0x0000003d4c94708ca,0x0000000000000000,0x00001690000000000,0x0000000000000000,0x0000003d500000000},
+ { 0x00000000001cf800,0x00000014f206e37ae,0x00000000f88871e2,0x0000000018dc9970f,0x0000000000000000,0x00000014f80000000,0x00000000f8800000,0x0000000018e000000},
+ { 0x000000000000016d,0x00dc9787fe5b0b4d3,0x0004b28d4a4bcff7,0x001b1f6965e974d51,0x0000000000000000,0x00dcc000000000000,0x0004800000000000,0x001b2000000000000},
+ { 0x000000000000000e,0x0000000000016ef2f,0x00000000000000b2,0x00000000000000173,0x0000000000000000,0x0000000000016f000,0x00000000000000b2,0x00000000000000173},
+ { 0x0000000000000004,0x0000000bf914da1a6,0x000000000000367c,0x000000000000482aa,0x0000000000000000,0x0000000bfc0000000,0x0000000000003600,0x00000000000048400},
+ { 0x0000000000000186,0x0017ef180280cfd4a,0x0000000065c12582,0x00000ae9589187635,0x0000000000000000,0x0017f000000000000,0x0000000000000000,0x00000aec000000000},
+ { 0x0000000000000013,0x000000004d3d38ddb,0x0000000000023b51,0x000000000515e0871,0x0000000000000000,0x000000004d4000000,0x0000000000000000,0x00000000051600000},
+ { 0x000000002d79311e,0x00000cb7b94b6e834,0x000000014f36b550,0x0000000024d228e2d,0x0000000000000000,0x00000cb8000000000,0x000000014f000000,0x0000000024d400000},
+ { 0x0000000000001b96,0x0000000b93f731b25,0x000000000000589a,0x0000000261fbbf397,0x0000000000000000,0x0000000b940000000,0x0000000000000000,0x00000002620000000},
+ { 0x000000000000002f,0x0000f2e41ebe420d1,0x0000000000008902,0x00000069bdebbe1a0,0x0000000000000000,0x0000f300000000000,0x0000000000000000,0x00000069c00000000},
+ { 0x000000007a1a31d1,0x03d64af45c050bc06,0x00000003821f2002,0x00000008f98d634b9,0x0000000000000000,0x03d70000000000000,0x0000000380000000,0x00000008fc0000000},
+ { 0x0000000000000035,0x0063a7994a20e8dd9,0x00000000000e3d2b,0x0009c418c4906e2ef,0x0000000000000000,0x0063c000000000000,0x0000000000000000,0x0009c800000000000},
+ { 0x0000000000000000,0x061132198b47bd8f7,0x00000007c3d45281,0x0006288077dbe7ce9,0x0000000000000000,0x06120000000000000,0x0000000000000000,0x00062a00000000000},
+ { 0x0000000000000006,0x00002b97f5f4124b2,0x0000000006d35fc6,0x000000014a48a9629,0x0000000000000000,0x00002ba0000000000,0x0000000000000000,0x000000014a8000000},
+ { 0x00000000000001eb,0x001b48764025d7e32,0x000000000d9899a2,0x000000000a91b8358,0x0000000000000000,0x001b5000000000000,0x000000000d800000,0x000000000a9400000},
+ { 0x000000000000136d,0x00000112613fc6570,0x00000000031f9758,0x000000006a85b2d1a,0x0000000000000000,0x00000112800000000,0x0000000002000000,0x000000006aa000000},
+ { 0x0000000000061ed9,0x00e2199328578eecb,0x0000000cdfb17e5f,0x00d8817e212ca8680,0x0000000000000000,0x00e24000000000000,0x0000000000000000,0x00d8c000000000000},
+ { 0x000000000b3d1550,0x03917113928b1be86,0x00006120461fa292,0x0061bbf61c07a8ad9,0x0000000000000000,0x03920000000000000,0x0000000000000000,0x0061c000000000000},
+ { 0x00000000000042f2,0x00047ac019c724870,0x0000000164c5a439,0x0000000621b6b438e,0x0000000000000000,0x00047c00000000000,0x0000000160000000,0x00000006220000000},
+ { 0x0000000000000003,0x0000000d9c0dbc1f3,0x0000000000000397,0x000000000008f5ad1,0x0000000000000000,0x0000000da00000000,0x0000000000000000,0x000000000008f8000},
+ { 0x0000000000000000,0x000000000008eabc6,0x0000000000000166,0x00000000000147a32,0x0000000000000000,0x000000000008ec000,0x0000000000000000,0x00000000000148000},
+ { 0x00000074a52ea98d,0x078e539ebde00021c,0x00000c9c270489c6,0x00709c8b7f664b008,0x0000000000000000,0x07900000000000000,0x0000000000000000,0x0070a000000000000},
+ { 0x0000000000015289,0x00000aa7445355634,0x000000000195a394,0x00000000118bdbe3a,0x0000000000000000,0x00000aa8000000000,0x0000000001800000,0x00000000119000000},
+ { 0x0000000000001f9e,0x07e27e6043c217be3,0x000000000005f2c2,0x0000000000f8e3b78,0x0000000000000000,0x07e40000000000000,0x0000000000040000,0x0000000000f900000},
+ { 0x000000000000000b,0x0000000000029fc77,0x00000000000137f7,0x00000000000220d29,0x0000000000000000,0x000000000002a0000,0x0000000000013000,0x00000000000221000},
+ { 0x0000000000000001,0x000000003ba465a70,0x000000000000004b,0x00000000002ff29dd,0x0000000000000000,0x000000003bb000000,0x0000000000000000,0x00000000003000000},
+ { 0x00000000001b12c1,0x000185b869841a4d0,0x0000000339a12a4f,0x0000010f38e295d43,0x0000000000000000,0x00018600000000000,0x0000000000000000,0x0000010f800000000},
+ { 0x0000000000000009,0x00008c4f09c816c94,0x0000000000000178,0x00000001321b535b4,0x0000000000000000,0x00008c80000000000,0x0000000000000000,0x00000001328000000},
+ { 0x000000000000006f,0x000000000603f1d78,0x0000000000000170,0x0000000000a2e4e15,0x0000000000000000,0x00000000060400000,0x0000000000000000,0x0000000000a300000},
+ { 0x00000000006b09d3,0x04e4d989933b51b80,0x000000190f81562c,0x0023b4b078158f284,0x0000000000000000,0x04e60000000000000,0x0000000000000000,0x0023c000000000000},
+ { 0x0000000000003cea,0x0000000007f3bc82e,0x000000000023ca0b,0x0000000000144edbd,0x0000000000000000,0x0000000007f400000,0x0000000000238000,0x00000000001450000},
+ { 0x0000000000000077,0x00000010b484fc07e,0x00000000000d275f,0x000000000010469de,0x0000000000000000,0x00000010b80000000,0x00000000000d0000,0x00000000001048000},
+ { 0x0000000000001eb4,0x06420a57cbaf58e3c,0x000004a2746c1db8,0x000001e93635625d2,0x0000000000000000,0x06440000000000000,0x000004a000000000,0x000001e9800000000},
+ { 0x00000000000d1bda,0x00000001e99093c3c,0x000000000736ce21,0x000000000e445f6fd,0x0000000000000000,0x00000001ea0000000,0x0000000007000000,0x000000000e4800000},
+ { 0x0000000000000004,0x0000000364acc1e35,0x000000000000000e,0x0000000028014bb2a,0x0000000000000000,0x00000003650000000,0x0000000000000000,0x00000000281000000},
+ { 0x0000000000000020,0x0011a6bf24495aad5,0x0000000000000d22,0x000bdbb9cf44ed927,0x0000000000000000,0x0011a800000000000,0x0000000000000000,0x000bdc00000000000},
+ { 0x00000000000106e4,0x010730dd9385eee26,0x00016e639819a5a4,0x000036422369d8cd2,0x0000000000000000,0x01078000000000000,0x00016e0000000000,0x00003648000000000},
+ { 0x0000000000000dbc,0x0005c609b429bd103,0x0000000005ae0450,0x00000013eb31e6303,0x0000000000000000,0x0005c800000000000,0x0000000000000000,0x00000013f00000000},
+ { 0x0000000000000002,0x000000000afcbcbc0,0x000000000000000f,0x00000000000000012,0x0000000000000000,0x000000000b0000000,0x000000000000000f,0x00000000000000012},
+ { 0x000000000000000e,0x02671d265b01a63fd,0x0000000bd88ab94e,0x0042e88cb2058e79e,0x0000000000000000,0x02680000000000000,0x0000000000000000,0x00430000000000000},
+ { 0x0000000000000001,0x000009a2707a74b9d,0x00000003ed1ac1cc,0x000000010a78b479b,0x0000000000000000,0x000009a4000000000,0x00000003ec000000,0x000000010a8000000},
+ { 0x000000000000000b,0x0078fc9792a106378,0x00000002fbd1e490,0x0000000070c38820e,0x0000000000000000,0x00790000000000000,0x00000002fa000000,0x0000000070e000000},
+ { 0x000000000001b887,0x003c85d1caf07f5c2,0x0004b2e9415b37d3,0x0006b3fda8c80a522,0x0000000000000000,0x003c9000000000000,0x0004a00000000000,0x0006b400000000000},
+ { 0x0000000000000d08,0x01e2e2ce05f3a50eb,0x000000000002d8bd,0x0000003fe83a5f038,0x0000000000000000,0x01e30000000000000,0x0000000000000000,0x0000003ff00000000},
+ { 0x0000000002b2540e,0x00003b1ec80096da4,0x000000000344705d,0x0000000001cd6caff,0x0000000000000000,0x00003b20000000000,0x0000000003400000,0x0000000001cd80000},
+ { 0x0000000000006156,0x071dcb11efc07c152,0x0000000eca1a6fe3,0x00000077bcebbdf6c,0x0000000000000000,0x071e0000000000000,0x0000000e00000000,0x00000077c00000000},
+ { 0x0000000000000004,0x00355141dd3bbc08a,0x00000000000350a8,0x00000000000064c79,0x0000000000000000,0x00356000000000000,0x0000000000035000,0x00000000000064d00},
+ { 0x0000000000000024,0x0000005686c0735f3,0x0000000000000db0,0x000000000029c253f,0x0000000000000000,0x00000056a00000000,0x0000000000000000,0x000000000029d0000},
+ { 0x0000000000000659,0x06464792750886567,0x0000003169e9e440,0x0000be290c5628a5f,0x0000000000000000,0x06480000000000000,0x0000000000000000,0x0000be40000000000},
+ { 0x0000000000000246,0x000000000320a3ed4,0x000000000000059a,0x0000000000a9586c5,0x0000000000000000,0x00000000032100000,0x0000000000000000,0x0000000000a980000},
+ { 0x00000000000000e4,0x0175c3bd368b1efa3,0x00000000003dab1c,0x00000000006c4909f,0x0000000000000000,0x01760000000000000,0x00000000003c0000,0x00000000006c60000},
+ { 0x0000000000000728,0x000003a1fb04ae948,0x0000001cf3b4db9d,0x000000e5b28a36237,0x0000000000000000,0x000003a2000000000,0x0000001c00000000,0x000000e5c00000000},
+ { 0x0000000000163058,0x00f23c0209e7a9395,0x0046040e672776c2,0x00cfdd7c426fa9d0d,0x0000000000000000,0x00f24000000000000,0x0044000000000000,0x00d00000000000000},
+ { 0x000000000004726e,0x0000000ab201d657e,0x0000000000edac38,0x0000000001d1b690d,0x0000000000000000,0x0000000ab40000000,0x0000000000e80000,0x0000000001d200000},
+ { 0x00000000000003b9,0x000000007f5666d7f,0x000000000000e635,0x00000000016b34a8b,0x0000000000000000,0x000000007f6000000,0x0000000000000000,0x00000000016b80000},
+ { 0x0000021b32a72589,0x000043f687429df45,0x00005f603ebbf156,0x00001032323611873,0x0000020000000000,0x00004400000000000,0x00005f4000000000,0x00001034000000000},
+ { 0x00000000000074a7,0x000e6587631b9a0b6,0x00000001bfcf8dff,0x0000d2f06fa23dde5,0x0000000000000000,0x000e6800000000000,0x0000000000000000,0x0000d300000000000},
+ { 0x0000000000000011,0x00001c4617a785a83,0x0000000000001bbb,0x000001ae3b1bae5fa,0x0000000000000000,0x00001c48000000000,0x0000000000000000,0x000001ae800000000},
+ { 0x000000000000385d,0x000a4fd27c6c87561,0x0000000000b23866,0x00000023bad651d62,0x0000000000000000,0x000a5000000000000,0x0000000000000000,0x00000023c00000000},
+ { 0x0000000000001aa3,0x00003e162c9567383,0x0000000000003522,0x0000000002ad86826,0x0000000000000000,0x00003e20000000000,0x0000000000000000,0x0000000002ae00000},
+ { 0x0000000000000117,0x000226835626019e8,0x000000db82c172b8,0x0000000e14acbf747,0x0000000000000000,0x00022700000000000,0x000000db82000000,0x0000000e14c000000},
+ { 0x00000003d5683dcc,0x0032a02fb27e06236,0x00000024052772e5,0x0000000ff9950b9a3,0x0000000000000000,0x0032b000000000000,0x0000002400000000,0x0000000ffc0000000},
+ { 0x00000000002d884b,0x003154dde799a72fe,0x0000000347f9d617,0x0000000435ad8260a,0x0000000000000000,0x00316000000000000,0x0000000340000000,0x00000004360000000},
+ { 0x0000000000000003,0x0efffe8d270a4415d,0x0000000003dcaff3,0x0000000045b08ea47,0x0000000000000000,0x0f000000000000000,0x0000000002000000,0x0000000045c000000},
+ { 0x0000000000000003,0x00000000009e576d4,0x00000000000dbada,0x0000000000031c704,0x0000000000000000,0x00000000009e80000,0x00000000000db000,0x0000000000031d000},
+ { 0x0000000000000001,0x00000000c30708be0,0x00000000000000bd,0x0000000000025cb2a,0x0000000000000000,0x00000000c34000000,0x0000000000000000,0x0000000000025d000},
+ { 0x000000000000001c,0x00000003f67f20021,0x000000000002da5a,0x0000000000d2320a1,0x0000000000000000,0x00000003f70000000,0x0000000000000000,0x0000000000d240000},
+ { 0x00000000069d9334,0x00000062b3941df4f,0x000000000ecd1249,0x000000037f12e1b26,0x0000000000000000,0x00000062c00000000,0x0000000000000000,0x00000003800000000},
+ { 0x00000000004c3a9d,0x017d07e091f49c61f,0x000029d6eed9810b,0x00000b6a5c25c5371,0x0000000000000000,0x017d8000000000000,0x000029c000000000,0x00000b6c000000000},
+ { 0x000000000001d847,0x06a6b28a15247dc17,0x000003541b322c4c,0x03c8dfe2f0f6fa91b,0x0000000000000000,0x06a80000000000000,0x0000000000000000,0x03c90000000000000},
+ { 0x00000000000a617e,0x0001e6f6d12326447,0x0000000002a867a0,0x0000012bb1ef21f8a,0x0000000000000000,0x0001e700000000000,0x0000000000000000,0x0000012c000000000},
+ { 0x0000000000000039,0x0000000000138a045,0x00000000001f6c2a,0x00000000000279324,0x0000000000000000,0x00000000001390000,0x00000000001f6c00,0x00000000000279400},
+ { 0x00000000000000fc,0x0002a52b32e5185e6,0x00000001a28af258,0x000001e345ee420f2,0x0000000000000000,0x0002a600000000000,0x0000000000000000,0x000001e3800000000},
+ { 0x000000000000008d,0x00001ee59cac072c8,0x0000000000014296,0x0000000309e75b9aa,0x0000000000000000,0x00001ee8000000000,0x0000000000000000,0x000000030a0000000},
+ { 0x00000000000000e8,0x0194b4efac1ed44a2,0x00000000000001ab,0x0000000000000022f,0x0000000000000000,0x01950000000000000,0x00000000000001ab,0x0000000000000022f},
+ { 0x0000000000000008,0x0354d98688316acb1,0x00000000000002c6,0x0000019f99c684443,0x0000000000000000,0x03550000000000000,0x0000000000000000,0x000001a0000000000},
+ { 0x000000000003cf2d,0x00071bdc1b2799abb,0x0000014c39433f5d,0x000024a1f4fc0d477,0x0000000000000000,0x00071c00000000000,0x0000010000000000,0x000024b0000000000},
+ { 0x0000000003f85f32,0x0d36f562b769aab94,0x0000227f252becbf,0x00001fdd64f02bd59,0x0000000000000000,0x0d380000000000000,0x0000220000000000,0x00001fe0000000000},
+ { 0x000000000000000f,0x000000069205eed49,0x00000000000662d2,0x0000000000219ee5a,0x0000000000000000,0x00000006940000000,0x0000000000060000,0x000000000021a0000},
+ { 0x0000000000000003,0x000001e671dab656e,0x0000000000000006,0x0000000000015cf87,0x0000000000000000,0x000001e6800000000,0x0000000000000000,0x0000000000015d000},
+ { 0x0000000000000004,0x00000004d48d679f8,0x0000000000823957,0x000000000017c2335,0x0000000000000000,0x00000004d60000000,0x0000000000820000,0x000000000017c4000},
+ { 0x0000000000000002,0x0001f587ebbb6082a,0x000000000229c114,0x0000001ce9cf6585c,0x0000000000000000,0x0001f600000000000,0x0000000000000000,0x0000001cf00000000},
+ { 0x000000000000534d,0x000000002c8e13090,0x00000000000233d1,0x0000000000004800f,0x0000000000000000,0x000000002c9000000,0x0000000000023300,0x00000000000048100},
+ { 0x0000000000001440,0x0000000ea097fce70,0x00000000000098f9,0x00000000000b6784c,0x0000000000000000,0x0000000ea40000000,0x0000000000008000,0x00000000000b68000},
+ { 0x000000000000028c,0x0f0aa5d62a6eff141,0x00000000005c0941,0x000000001da674ce6,0x0000000000000000,0x0f0c0000000000000,0x0000000000000000,0x000000001da800000},
+ { 0x000000000000009e,0x0002f38982a3983cb,0x00000001515010da,0x000007ded33a2ea3f,0x0000000000000000,0x0002f400000000000,0x0000000000000000,0x000007e0000000000},
+ { 0x00000000000ef1c2,0x00025061b58031b6f,0x000030cdb6322a47,0x00001669a959dae84,0x0000000000000000,0x00025100000000000,0x0000308000000000,0x00001670000000000},
+ { 0x0000000000000009,0x00000000000059fd8,0x000000000000003b,0x00000000000014329,0x0000000000000000,0x0000000000005a000,0x0000000000000000,0x00000000000014380},
+ { 0x000000000000034b,0x0014c70492014656a,0x0000000000085d56,0x000000000003b0e19,0x0000000000000000,0x0014c800000000000,0x0000000000085000,0x000000000003b1000},
+ { 0x0000000000000000,0x000000005a6489457,0x000000000000001c,0x00000000037be1e39,0x0000000000000000,0x000000005a8000000,0x0000000000000000,0x00000000037c00000},
+ { 0x00000000050f3e86,0x0107a35de93e454b1,0x0000000039aa6133,0x000000001216bc5bd,0x0000000000000000,0x01080000000000000,0x0000000039800000,0x00000000121800000},
+ { 0x000000000000001c,0x01d7d9574680adef3,0x000000474db85f2c,0x0000005d3cf82e106,0x0000000000000000,0x01d80000000000000,0x0000004600000000,0x0000005d400000000},
+ { 0x0000000000000000,0x0cd140c13d476f8c9,0x0000000000000065,0x00000000000000181,0x0000000000000000,0x0cd40000000000000,0x0000000000000065,0x00000000000000181},
+ { 0x0000000000000507,0x0004b1cdfbe663ae0,0x000000000000e79d,0x000000000003a9995,0x0000000000000000,0x0004b200000000000,0x000000000000e000,0x000000000003aa000},
+ { 0x0000000000000009,0x000000165278b5b53,0x0000000000003706,0x00000000000f0df47,0x0000000000000000,0x00000016580000000,0x0000000000000000,0x00000000000f10000},
+ { 0x000000000000184b,0x0001912af789abb50,0x0000244af34f03c3,0x000071f5bd697a214,0x0000000000000000,0x00019180000000000,0x0000240000000000,0x00007200000000000},
+ { 0x0000000000000005,0x00000015a9de77ad0,0x00000000000000ef,0x000000000025e204f,0x0000000000000000,0x00000015b00000000,0x0000000000000000,0x000000000025f0000},
+ { 0x000000000000003e,0x00025bd2a69175040,0x0000000000002a83,0x0000000000542f5b6,0x0000000000000000,0x00025c00000000000,0x0000000000000000,0x00000000005440000},
+ { 0x0000000000025103,0x0001e5f2929b88c4f,0x0000000bcf60e03a,0x000000aa738f57880,0x0000000000000000,0x0001e600000000000,0x0000000800000000,0x000000aa800000000},
+ { 0x000000000000003f,0x00002a69d7583cfd0,0x000000000001196c,0x0000000000004ff1a,0x0000000000000000,0x00002a70000000000,0x0000000000011900,0x00000000000050000},
+ { 0x0000000000000025,0x0000000bc7f1f6be7,0x0000000000000de1,0x0000000000007221f,0x0000000000000000,0x0000000bc80000000,0x0000000000000c00,0x00000000000072400},
+ { 0x0000000002586a61,0x0005a0dc577afa17f,0x00000f8cb00d3adf,0x0000055843ae6120f,0x0000000000000000,0x0005a200000000000,0x00000f8000000000,0x0000055a000000000},
+ { 0x0000000000c997c5,0x00003efc68dd723df,0x000000007fa7f2d4,0x00001ba26d7b75068,0x0000000000000000,0x00003f00000000000,0x0000000000000000,0x00001ba8000000000},
+ { 0x0000000000094608,0x0077ef0132ce3d440,0x0000000000151f47,0x00000000fc4f2b3f7,0x0000000000000000,0x00780000000000000,0x0000000000000000,0x00000000fc8000000},
+ { 0x00000000048c90bf,0x000685d23f4df80e0,0x00000000177680aa,0x000000001b8be4069,0x0000000000000000,0x00068600000000000,0x0000000017000000,0x000000001b9000000},
+ { 0x000000000000006b,0x0039ea494e14e8623,0x000000044d0a9b6d,0x00005dc1fe15e14fa,0x0000000000000000,0x0039f000000000000,0x0000000000000000,0x00005de0000000000},
+ { 0x00000000000001b2,0x06446dd1549249bcd,0x0016dd088eb8ab6e,0x000e3ac87875d0f26,0x0000000000000000,0x06460000000000000,0x0016c00000000000,0x000e3c00000000000},
+ { 0x00000000000003f3,0x0244f7a61c1797456,0x000005e4dcb5b25a,0x000351fc522704047,0x0000000000000000,0x02450000000000000,0x0000000000000000,0x00035200000000000},
+ { 0x00000002b8ea4fa7,0x026374ba59b643f1c,0x00008db5759f1a72,0x0000fbfea571e6e05,0x0000000000000000,0x02640000000000000,0x00008c0000000000,0x0000fc00000000000},
+ { 0x000000000000004c,0x00216591181334cd9,0x000000000000211f,0x00000000000019284,0x0000000000000000,0x00217000000000000,0x0000000000002100,0x00000000000019300},
+ { 0x0000000000326bcf,0x01a378cf9e773032b,0x000000e2f8e6956f,0x0000001fd95af2034,0x0000000000000000,0x01a38000000000000,0x000000e280000000,0x0000001fe00000000},
+ { 0x0000000000392974,0x0005ba89259f94a7b,0x000000008ca83ef0,0x000000d9bf75e0565,0x0000000000000000,0x0005bc00000000000,0x0000000000000000,0x000000d9c00000000},
+ { 0x000000000000000e,0x00007774dbd4397de,0x0000000001c07aae,0x00000000001e22b1f,0x0000000000000000,0x00007780000000000,0x0000000001c07000,0x00000000001e23000},
+ { 0x0000000000000007,0x0f7fd8d686db1e12c,0x0000000000338fd5,0x0000000000c490cf2,0x0000000000000000,0x0f800000000000000,0x0000000000300000,0x0000000000c4c0000},
+ { 0x0000000000000128,0x0180ad4c661f10f33,0x0000030648695c8f,0x0000024995f2123fc,0x0000000000000000,0x01810000000000000,0x0000030000000000,0x0000024a000000000},
+ { 0x0000000000000002,0x0000006e56c241a71,0x0000000000020754,0x000000000003a4394,0x0000000000000000,0x0000006e600000000,0x0000000000020000,0x000000000003a5000},
+ { 0x0000000000000128,0x001d6ab6b14843290,0x00000000027bf1ff,0x00002b74de11da0a5,0x0000000000000000,0x001d7000000000000,0x0000000000000000,0x00002b80000000000},
+ { 0x0000000000002e7f,0x00007e7fcefec8bdf,0x0000000000415693,0x00000000025432946,0x0000000000000000,0x00007e80000000000,0x0000000000400000,0x00000000025500000},
+ { 0x0000000000000003,0x00000017833ac37b9,0x000000000067f9b1,0x000000005b3a15191,0x0000000000000000,0x00000017880000000,0x0000000000000000,0x000000005b4000000},
+ { 0x000000000000007b,0x0229e6e7627b51e0b,0x00000000000d3567,0x000000001d3a7d493,0x0000000000000000,0x022a0000000000000,0x0000000000000000,0x000000001d4000000},
+ { 0x00000000000000ce,0x00010c6a8c3f845eb,0x00000005162ff350,0x000000016cd1b9193,0x0000000000000000,0x00010c80000000000,0x0000000510000000,0x000000016d0000000},
+ { 0x0000000000000002,0x0000000028ddb272f,0x000000000036538f,0x000000000003a4d3b,0x0000000000000000,0x0000000028e000000,0x0000000000365300,0x000000000003a4e00},
+ { 0x0000000000000006,0x006802ebb0d8892aa,0x0000000002d9203e,0x0000077639677a755,0x0000000000000000,0x00682000000000000,0x0000000000000000,0x00000778000000000},
+ { 0x0000000000000030,0x0000000001e0e80ad,0x00000000000002a0,0x00000000000000390,0x0000000000000000,0x0000000001e100000,0x00000000000002a0,0x00000000000000390},
+ { 0x00000000000008e7,0x0000002e0eb211c35,0x0000000ec60e63c7,0x0000001f2ffb10a86,0x0000000000000000,0x0000002e100000000,0x0000000e80000000,0x0000001f300000000},
+ { 0x0000000000000001,0x000078208c7d14a5b,0x000000000070550c,0x0000053b0163dc170,0x0000000000000000,0x00007840000000000,0x0000000000000000,0x0000053c000000000},
+ { 0x000000000003234d,0x0000008c27bd5b637,0x0000000007f0878c,0x000000001cab37653,0x0000000000000000,0x0000008c400000000,0x0000000007800000,0x000000001cb000000},
+ { 0x000000000000003b,0x0052e489457b095d8,0x00000058e0ecf0b1,0x000006c3a69d60d73,0x0000000000000000,0x00530000000000000,0x0000004000000000,0x000006c4000000000},
+ { 0x00000000000f2ab2,0x003ee8642f7d5e305,0x0000000000f26792,0x00000de06c24997ee,0x0000000000000000,0x003ef000000000000,0x0000000000000000,0x00000de4000000000},
+ { 0x0000000000000039,0x0000020957c4d5708,0x00000003fe02f444,0x000000e9daeafffe8,0x0000000000000000,0x0000020a000000000,0x0000000000000000,0x000000ea000000000},
+ { 0x0000000000003cb2,0x0009d2a57c06e4c70,0x0000000028cac878,0x0000000049d3f625a,0x0000000000000000,0x0009d400000000000,0x0000000028000000,0x0000000049e000000},
+ { 0x0000000000000ef9,0x03013ac717a99f41d,0x000000000000fec2,0x0000037ae24bcab25,0x0000000000000000,0x03020000000000000,0x0000000000000000,0x0000037b000000000},
+ { 0x0000000000000002,0x0241fe8b2cd041ad9,0x0000000000000007,0x000000ae4dc759763,0x0000000000000000,0x02420000000000000,0x0000000000000000,0x000000ae800000000},
+ { 0x000000000004e608,0x000063e3affc7f5af,0x000000016c6ad520,0x000000a858c7366e8,0x0000000000000000,0x00006400000000000,0x0000000000000000,0x000000a8800000000},
+ { 0x0000018d500c95e4,0x0c527be156cbc161b,0x001d2dfd7e6e9be0,0x001a69228bf37d059,0x0000000000000000,0x0c540000000000000,0x001d000000000000,0x001a7000000000000},
+ { 0x00000000000000b6,0x0066abfdf4dfc454a,0x00000000013fa1b4,0x0000001b5778e6f06,0x0000000000000000,0x0066c000000000000,0x0000000000000000,0x0000001b580000000},
+ { 0x000000000003803c,0x000005e11c6174956,0x0000000000158da4,0x000000000001a0fba,0x0000000000000000,0x000005e2000000000,0x0000000000158c00,0x000000000001a1000},
+ { 0x00000000000006f1,0x001cd9b17996b0648,0x00000000540c7600,0x00000003a78308302,0x0000000000000000,0x001ce000000000000,0x0000000050000000,0x00000003a80000000},
+ { 0x000000000000001f,0x0000f12bea5816457,0x0000000000005a23,0x000016b2a136afd9f,0x0000000000000000,0x0000f140000000000,0x0000000000000000,0x000016b8000000000},
+ { 0x000000002b8fc2e8,0x001fd8ea0a94892ce,0x000000006193792b,0x000000009dbfe2379,0x0000000000000000,0x001fe000000000000,0x0000000060000000,0x000000009dc000000},
+ { 0x0000000000000c26,0x00eb33db39d6553c6,0x0000000000009577,0x00071d85fb75d5318,0x0000000000000000,0x00eb4000000000000,0x0000000000000000,0x00071e00000000000},
+ { 0x0000000000000003,0x000000007aed7f38f,0x0000000000000331,0x00000000004acd402,0x0000000000000000,0x000000007b0000000,0x0000000000000000,0x00000000004ae0000},
+ { 0x000000000004f67a,0x000008377b71d4bec,0x00001ddc4ff04628,0x0000025576b122710,0x0000000000000000,0x00000838000000000,0x00001ddc00000000,0x00000255800000000},
+ { 0x0000000000000006,0x0005bdfe271d61cc8,0x000000000000201e,0x0000006566cec1e6f,0x0000000000000000,0x0005be00000000000,0x0000000000000000,0x00000065800000000},
+ { 0x00000000000000d1,0x000021107c2036f4c,0x000000000383d212,0x0000012455ddb36cf,0x0000000000000000,0x00002120000000000,0x0000000000000000,0x00000124800000000},
+ { 0x0000000000000449,0x00006b4d6dca76be9,0x00000000000113d2,0x0000000000d7a6747,0x0000000000000000,0x00006b60000000000,0x0000000000000000,0x0000000000d7c0000},
+ { 0x0000000000e6ebc2,0x0000324c4d268b7b1,0x0000000006bceafc,0x00000032e11d03f05,0x0000000000000000,0x00003250000000000,0x0000000000000000,0x00000032f00000000},
+ { 0x00000000000001cd,0x000000054a950578a,0x0000000000008636,0x00000000000091419,0x0000000000000000,0x000000054c0000000,0x0000000000008400,0x00000000000091800},
+ { 0x0000000000051c7b,0x00000027e3e8543c7,0x00000000000588c5,0x0000000001a76c5b1,0x0000000000000000,0x00000027f00000000,0x0000000000000000,0x0000000001a780000},
+ { 0x000000a4dc1e061c,0x002ddda8b35727d75,0x000002d572065e17,0x001a9b5bb2c6ef482,0x0000000000000000,0x002de000000000000,0x0000000000000000,0x001aa000000000000},
+ { 0x0000000000000058,0x000005fc14dd60599,0x0000000000002aef,0x00000000002dd0793,0x0000000000000000,0x000005fe000000000,0x0000000000000000,0x00000000002de0000},
+ { 0x0000000000000025,0x00000043b507d5d9e,0x0000000000035e37,0x0000000539badeea5,0x0000000000000000,0x00000043c00000000,0x0000000000000000,0x000000053a0000000},
+ { 0x0000000000000601,0x0000001c09a86e866,0x000000000008d0eb,0x0000000005cd0a99f,0x0000000000000000,0x0000001c100000000,0x0000000000000000,0x0000000005ce00000},
+ { 0x00000000000000ac,0x0000003cb36f13adc,0x0000000000037648,0x00000000000c4d41f,0x0000000000000000,0x0000003cc00000000,0x0000000000034000,0x00000000000c50000},
+ { 0x000000000706f1b1,0x0661f91fa822ebc43,0x000000005cb54a3b,0x00017d2966efc03cb,0x0000000000000000,0x06620000000000000,0x0000000000000000,0x00017d80000000000},
+ { 0x00000000002f62ae,0x0011b9ece83eb0590,0x00000000087303a4,0x000000002afcad319,0x0000000000000000,0x0011c000000000000,0x0000000008000000,0x000000002b0000000},
+ { 0x00000000000000b8,0x01216da43ac1c96af,0x0014041766987a01,0x0011c0ca2c7727fc3,0x0000000000000000,0x01218000000000000,0x0014000000000000,0x0011c800000000000},
+ { 0x0000000000000008,0x0000021781591b3a6,0x0000000000000009,0x000000033c5b03d54,0x0000000000000000,0x00000218000000000,0x0000000000000000,0x000000033d0000000},
+ { 0x0000000000008bf3,0x09065b337509bc5a9,0x0000000000afdb87,0x000000c302b52d6cc,0x0000000000000000,0x09080000000000000,0x0000000000000000,0x000000c3400000000},
+ { 0x000000000000002e,0x000009c45ff53771d,0x000000000001c187,0x0000000007e799d1d,0x0000000000000000,0x000009c8000000000,0x0000000000000000,0x0000000007e800000},
+ { 0x00000000d14e034d,0x00697ca5f174dfb10,0x000029e83741f5d6,0x00000334700e01e7d,0x0000000000000000,0x00698000000000000,0x000029e800000000,0x00000334800000000},
+ { 0x0000000000000053,0x013a7832325f4de4b,0x00000000000046c6,0x00000000000008080,0x0000000000000000,0x013a8000000000000,0x00000000000046c0,0x00000000000008080},
+ { 0x00000000000398de,0x009d45b1cfe01bc0e,0x0000000001d52e31,0x00042c98205d50bb2,0x0000000000000000,0x009d8000000000000,0x0000000000000000,0x00042e00000000000},
+ { 0x000000000008b959,0x06d564a86e315d719,0x000003753a0fab45,0x000024aa6b57de9e6,0x0000000000000000,0x06d60000000000000,0x0000030000000000,0x000024b0000000000},
+ { 0x00000000000001e2,0x0000230f79572bcc0,0x0000000074003bc8,0x000000eff587cfe26,0x0000000000000000,0x00002310000000000,0x0000000000000000,0x000000f0000000000},
+ { 0x0000000000000020,0x000000279cb7d0d60,0x00000000000003f9,0x00000000000002d2c,0x0000000000000000,0x00000027a00000000,0x00000000000003f0,0x00000000000002d30},
+ { 0x0000000000000002,0x000002156b4696640,0x0000000000db38dd,0x00000000009679297,0x0000000000000000,0x00000216000000000,0x0000000000d80000,0x00000000009680000},
+ { 0x0000000000282315,0x000024df2366f1089,0x00000003f66371a6,0x00000003d7f934c5b,0x0000000000000000,0x000024e0000000000,0x00000003f0000000,0x00000003d80000000},
+ { 0x0000000000000003,0x03a852090d580d051,0x00000000000003bf,0x0000006bb95189364,0x0000000000000000,0x03a90000000000000,0x0000000000000000,0x0000006bc00000000},
+ { 0x0000000000000003,0x054d424d69bc06d4c,0x0000000893ff4b1a,0x000000016c573cf83,0x0000000000000000,0x054e0000000000000,0x0000000890000000,0x000000016c8000000},
+ { 0x00000001ab7c36be,0x0001059fe9eb28241,0x00007bb43168120d,0x00001f3dbf2f1c3ea,0x0000000000000000,0x00010600000000000,0x00007b8000000000,0x00001f40000000000},
+ { 0x000000002be5311c,0x000019b48ce3da26a,0x0000006519894392,0x0000000a76226db6d,0x0000000000000000,0x000019b8000000000,0x0000006500000000,0x0000000a780000000},
+ { 0x0000000000000014,0x00001d86b0852c3fe,0x00000000006f599e,0x00000000002f9961f,0x0000000000000000,0x00001d88000000000,0x00000000006f0000,0x00000000002fa0000},
+ { 0x000000000000079b,0x003d9c475773b1789,0x0000000000002755,0x0000000000195572a,0x0000000000000000,0x003da000000000000,0x0000000000000000,0x00000000001958000},
+ { 0x0000000000039ab6,0x0007f0cc883018d7a,0x0000000005b98820,0x0000000086a009852,0x0000000000000000,0x0007f200000000000,0x0000000004000000,0x0000000086c000000},
+ { 0x0000000000000006,0x002adfcfbf2fbd743,0x000000000000008e,0x00000191cc7b3af4a,0x0000000000000000,0x002ae000000000000,0x0000000000000000,0x00000192000000000},
+ { 0x00000000000010fa,0x000015dd34d886f16,0x0000000016403301,0x00000061c4e9db442,0x0000000000000000,0x000015e0000000000,0x0000000000000000,0x00000061e00000000},
+ { 0x0000000000000001,0x00000000f4886a896,0x0000000000000005,0x0000000000001dfbc,0x0000000000000000,0x00000000f4c000000,0x0000000000000000,0x0000000000001e000},
+ { 0x000000000000002f,0x042a8335821717d5f,0x0000000000000037,0x000000000000006ed,0x0000000000000000,0x042c0000000000000,0x0000000000000037,0x000000000000006ed},
+ { 0x000000000e7adb99,0x0162fb573fba6b0c9,0x0000007041cb1f8e,0x008c1ab7e2f2d6843,0x0000000000000000,0x01630000000000000,0x0000000000000000,0x008c4000000000000},
+ { 0x0000000000000034,0x0000cae169df1fc3b,0x000000000c92a421,0x0000000000eae8fcc,0x0000000000000000,0x0000cb00000000000,0x000000000c920000,0x0000000000eaf0000},
+ { 0x0000000000000004,0x0000000001df48275,0x0000000000002cb9,0x000000000000befd6,0x0000000000000000,0x0000000001df80000,0x0000000000002c00,0x000000000000bf000},
+ { 0x00000000001ae2cc,0x02af788d4aeff3b79,0x000000004df315a4,0x00163e457e6356efd,0x0000000000000000,0x02b00000000000000,0x0000000000000000,0x00164000000000000},
+ { 0x000028277d29cdac,0x0374f16e4ddfd6953,0x00006945b8fae6a1,0x00000d6ebfdc8406b,0x0000000000000000,0x03750000000000000,0x0000694000000000,0x00000d70000000000},
+ { 0x0000000000000002,0x0000f33a9b6b41f63,0x00000000056ee4cc,0x00000f53a593dc51a,0x0000000000000000,0x0000f340000000000,0x0000000000000000,0x00000f54000000000},
+ { 0x000000000000006f,0x00005e556afa09509,0x00000000000000a4,0x000000000000cb39f,0x0000000000000000,0x00005e60000000000,0x0000000000000000,0x000000000000cb400},
+ { 0x00000000000d5a57,0x015b1898bdd152c26,0x0000000000caf19a,0x0010934415694a219,0x0000000000000000,0x015b8000000000000,0x0000000000000000,0x00109800000000000},
+ { 0x00000000000000ce,0x000000070e66f8842,0x0000000000000d64,0x00000000000151c5d,0x0000000000000000,0x00000007100000000,0x0000000000000800,0x00000000000152000},
+ { 0x0000000000000000,0x0000005623f9fd3ba,0x0000000000000000,0x00000000003743ded,0x0000000000000000,0x00000056400000000,0x0000000000000000,0x00000000003750000},
+ { 0x0000000008451bc3,0x030bd42d1c7feb8fc,0x00000007cdff0e23,0x000000e6366fffae5,0x0000000000000000,0x030c0000000000000,0x0000000400000000,0x000000e6400000000},
+ { 0x0000000000000002,0x00127844015204d82,0x0000000000001403,0x000055010e145c937,0x0000000000000000,0x00128000000000000,0x0000000000000000,0x00005520000000000},
+ { 0x000000000000023c,0x0007894c1413f9c79,0x00000000001be075,0x0000072dfba299a56,0x0000000000000000,0x00078a00000000000,0x0000000000000000,0x0000072e000000000},
+ { 0x000000000031a85d,0x00000080896b4e53f,0x0000000009f9dd7e,0x00000000c37532a46,0x0000000000000000,0x00000080c00000000,0x0000000008000000,0x00000000c38000000},
+ { 0x00000000000000b5,0x0017db6736cf10877,0x00000000059502c6,0x000307ff6c4af573d,0x0000000000000000,0x0017e000000000000,0x0000000000000000,0x00030800000000000},
+ { 0x00000000000000a8,0x004efe3fc5060e0b6,0x00000007067d6a53,0x00000058bdf4525e4,0x0000000000000000,0x004f0000000000000,0x0000000600000000,0x00000058c00000000},
+ { 0x00000000000034fa,0x000000033cd6bfe05,0x000000000000db7e,0x00000000000c1860b,0x0000000000000000,0x000000033d0000000,0x000000000000c000,0x00000000000c1c000},
+ { 0x0000000000000002,0x0d6bfeec7e8ccf6f2,0x000006d41d7393f8,0x002033d31e441f07b,0x0000000000000000,0x0d6c0000000000000,0x0000000000000000,0x00204000000000000},
+ { 0x00000000000005dc,0x0000001c7ec894b34,0x000000010dec4cf2,0x000000072573422c0,0x0000000000000000,0x0000001c800000000,0x0000000100000000,0x00000007260000000},
+ { 0x000000000a1669b4,0x0000f11f071e0c8ea,0x000732052a2a8f99,0x0000786ca13dac692,0x0000000000000000,0x0000f140000000000,0x0007320000000000,0x0000786e000000000},
+ { 0x0000000000000278,0x00000005d4bc4a4d1,0x00000000002713b6,0x000000001f6d9c748,0x0000000000000000,0x00000005d60000000,0x0000000000000000,0x000000001f7000000},
+ { 0x000000000546ca68,0x00127b77d6422ad7f,0x0000002ce2f4297a,0x000000c57ea8001cc,0x0000000000000000,0x00128000000000000,0x0000002c00000000,0x000000c5800000000},
+ { 0x00000000801078f7,0x00173fc95e2cfb977,0x000006378177efad,0x00000747d704bf26a,0x0000000000000000,0x00174000000000000,0x0000062000000000,0x00000748000000000},
+ { 0x000000000000001b,0x00337a52991a4d058,0x0000052322373f96,0x0011e51b3133876d2,0x0000000000000000,0x00338000000000000,0x0000000000000000,0x0011e800000000000},
+ { 0x000000000000000a,0x00b228906838caf24,0x0000000000006d37,0x000000000068346a8,0x0000000000000000,0x00b24000000000000,0x0000000000000000,0x00000000006840000},
+ { 0x000000000677acea,0x0005582e4e95c20b2,0x000000001e1319e9,0x00006fb5ad1cefc3b,0x0000000000000000,0x00055a00000000000,0x0000000000000000,0x00006fc0000000000},
+ { 0x000000000000004f,0x0000078b24fb9a88d,0x00000000000324fd,0x000000980dcc23636,0x0000000000000000,0x0000078c000000000,0x0000000000000000,0x00000098400000000},
+ { 0x00000000000034c8,0x000097e76995233c8,0x0000000001a0fbe7,0x0000000002b0e9984,0x0000000000000000,0x00009800000000000,0x0000000001a00000,0x0000000002b100000},
+ { 0x00000000009807a9,0x0000008f761c3fe36,0x00000003d23f5a25,0x0000001a9a758cca9,0x0000000000000000,0x0000008f800000000,0x0000000380000000,0x0000001aa00000000},
+ { 0x00000000000000d8,0x000000084b1f4b95a,0x0000000000075207,0x0000000001cc5e52d,0x0000000000000000,0x000000084c0000000,0x0000000000000000,0x0000000001cc80000},
+ { 0x0000000016316663,0x05a8840ade51d9e6f,0x000001b1904e1f59,0x00017a1a5d45da20c,0x0000000000000000,0x05aa0000000000000,0x0000000000000000,0x00017a80000000000},
+ { 0x00000000000000b1,0x0000000007e619950,0x0000000000000c57,0x00000000003231a60,0x0000000000000000,0x0000000007e800000,0x0000000000000000,0x00000000003240000},
+ { 0x0000000000000000,0x007109fa023a3693b,0x000000000000c05f,0x000000000f8e55405,0x0000000000000000,0x00712000000000000,0x0000000000000000,0x000000000f9000000},
+ { 0x00000000000007d2,0x0000001678cb978ba,0x0000000000069387,0x00000000001a7513c,0x0000000000000000,0x00000016800000000,0x0000000000068000,0x00000000001a78000},
+ { 0x00000000000001a7,0x00000002521f011ce,0x000000005afcfaad,0x00000001d36ba3fc4,0x0000000000000000,0x00000002530000000,0x0000000058000000,0x00000001d38000000},
+ { 0x0000000000000176,0x000f3410e9810b62c,0x00000000000130ad,0x000000000000feb3e,0x0000000000000000,0x000f3800000000000,0x0000000000013000,0x000000000000fec00},
+ { 0x00000000001c94be,0x000000f0a25749c25,0x0000000001a74f06,0x00000006eebe87185,0x0000000000000000,0x000000f0c00000000,0x0000000000000000,0x00000006f00000000},
+ { 0x0000007e19922b1b,0x00012621b66b7dd37,0x000000f6a1b407d3,0x00002450d8eb501b4,0x0000000000000000,0x00012680000000000,0x0000000000000000,0x00002460000000000},
+ { 0x00000000000064c6,0x007dfd2541da28051,0x000000000000e8b5,0x0000000000002e466,0x0000000000000000,0x007e0000000000000,0x000000000000e880,0x0000000000002e480},
+ { 0x000000000001872e,0x039485be3be4c2805,0x000000000005b25f,0x0000000000019a340,0x0000000000000000,0x03950000000000000,0x000000000005b000,0x0000000000019a800},
+ { 0x00000001b96d24a0,0x00198a08d174acf08,0x0000ead466259b74,0x0003309ef4a486ecb,0x0000000000000000,0x00199000000000000,0x0000e00000000000,0x00033100000000000},
+ { 0x0000000000035819,0x01add8663f8120088,0x0000001221599d2a,0x000115c041b478c88,0x0000000000000000,0x01ae0000000000000,0x0000000000000000,0x00011600000000000},
+ { 0x00000000000031fd,0x000706f6a65e6f039,0x0000000000058ae5,0x0000aee75ef8c04d4,0x0000000000000000,0x00070800000000000,0x0000000000000000,0x0000af00000000000},
+ { 0x000000002348dd7b,0x0000009aa43438f68,0x000000328d180841,0x00000014874bcd57f,0x0000000000000000,0x0000009ac00000000,0x0000003280000000,0x00000014880000000},
+ { 0x0000000000000097,0x016f363f4da3cb3ad,0x0cf965a5cd85ce76,0x00e8df9b06491aae1,0x0000000000000000,0x016f8000000000000,0x0cf9000000000000,0x00e8e000000000000},
+ { 0x00000000000040d0,0x00371c7d5da553014,0x000000000015cda0,0x00000ccae100d5a82,0x0000000000000000,0x00372000000000000,0x0000000000000000,0x00000ccc000000000},
+ { 0x000000001cddbac3,0x00000f6cc9e54ce2e,0x0000002cb7e4f620,0x000000c76ba7d4a86,0x0000000000000000,0x00000f70000000000,0x0000002c00000000,0x000000c7800000000},
+ { 0x0000000016893b80,0x000001dd5b12101fa,0x000000ca2a09bb2b,0x000000334f59cae0e,0x0000000000000000,0x000001dd800000000,0x000000ca00000000,0x00000033500000000},
+ { 0x000000212469a61a,0x000060524f77753e9,0x0000108ec0ebd2fc,0x000001b4e45396fea,0x0000000000000000,0x00006060000000000,0x0000108c00000000,0x000001b5000000000},
+ { 0x000000000000001f,0x000093688ed1e2833,0x00000000b9ffeeba,0x000000007899f2ac1,0x0000000000000000,0x00009380000000000,0x00000000b8000000,0x0000000078a000000},
+ { 0x0000000000000003,0x0a284a239a394cdc0,0x000000000000000c,0x00000000036d13358,0x0000000000000000,0x0a2c0000000000000,0x0000000000000000,0x00000000036e00000},
+ { 0x0000000000000001,0x0685fdcc0e30c2a3b,0x0000000000016f78,0x000000000007c844f,0x0000000000000000,0x06860000000000000,0x0000000000016000,0x000000000007ca000},
+ { 0x0000000000000003,0x06ddcafa23efd1165,0x000000000000965b,0x000000000002f07c6,0x0000000000000000,0x06de0000000000000,0x0000000000009000,0x000000000002f1000},
+ { 0x0000000000000001,0x000000bcc5d694448,0x0000000000000293,0x00000000000796b0f,0x0000000000000000,0x000000bd000000000,0x0000000000000000,0x00000000000798000},
+ { 0x0000000000000000,0x005b07753276e9720,0x0000000003c7dd87,0x001be4b1777e980e1,0x0000000000000000,0x005b2000000000000,0x0000000000000000,0x001be800000000000},
+ { 0x0000000000000237,0x00002ca066f2faeb4,0x000000000000b4ac,0x0000000000001b1d4,0x0000000000000000,0x00002cb0000000000,0x000000000000b480,0x0000000000001b200},
+ { 0x000000000001f622,0x0325afa32a8fefda6,0x00000072c0dfb458,0x00357e87573572f57,0x0000000000000000,0x03260000000000000,0x0000000000000000,0x00358000000000000},
+ { 0x0000000006be8d6a,0x0000008dc3a0caa31,0x0000000007259c42,0x0000000000b970902,0x0000000000000000,0x0000008e000000000,0x0000000007240000,0x0000000000b980000},
+ { 0x000000000000d7ff,0x0000002bbc768f5a3,0x000000000c167668,0x0000000000ddf83ad,0x0000000000000000,0x0000002bc00000000,0x000000000c160000,0x0000000000de00000},
+ { 0x0000000000000001,0x005d17cd51b145045,0x0000000000020e6a,0x003e6450b41c78d3b,0x0000000000000000,0x005d2000000000000,0x0000000000000000,0x003e7000000000000},
+ { 0x00000000000e5c35,0x0001a1e02976f82b0,0x000000064abd9cc0,0x0000005fcb4165597,0x0000000000000000,0x0001a200000000000,0x0000000600000000,0x0000005fe00000000},
+ { 0x000000000001b80b,0x0018d66e87e67e064,0x0000000000156f96,0x00000000003cff413,0x0000000000000000,0x0018d800000000000,0x0000000000150000,0x00000000003d00000},
+ { 0x0000000000000007,0x00000122d1a6b5049,0x00000000000003d6,0x0000005ec12236ded,0x0000000000000000,0x00000123000000000,0x0000000000000000,0x0000005ee00000000},
+ { 0x0000000000000005,0x0000009fb122bb3c3,0x000000000000001e,0x0000000000014b68f,0x0000000000000000,0x0000009fc00000000,0x0000000000000000,0x0000000000014b800},
+ { 0x0000000010c4cf68,0x033914ff7a66e63e2,0x000000017f5c05c7,0x000004513a37eadee,0x0000000000000000,0x033a0000000000000,0x0000000000000000,0x00000452000000000},
+ { 0x000000000041d91a,0x0000023419046360c,0x0000000000cb7a49,0x0000000092eaa6edf,0x0000000000000000,0x00000235000000000,0x0000000000000000,0x00000000930000000},
+ { 0x00000000000089f5,0x02f3c16870ecb0d68,0x00a0e97a964a44de,0x005928bf1e37d85cf,0x0000000000000000,0x02f40000000000000,0x00a0000000000000,0x00594000000000000},
+ { 0x00000000000011dd,0x000033e04b129c8fd,0x00000000003d784d,0x000000000006ea4f1,0x0000000000000000,0x000033f0000000000,0x00000000003d7000,0x000000000006eb000},
+ { 0x0000000000032ab5,0x00002214b6a77e08c,0x00000000006ecd5e,0x000000009eb4257d2,0x0000000000000000,0x00002220000000000,0x0000000000000000,0x000000009ec000000},
+ { 0x000000000000125e,0x00002e2ad26508481,0x000000000004e263,0x00000000009584b1d,0x0000000000000000,0x00002e30000000000,0x0000000000040000,0x000000000095c0000},
+ { 0x00000000036739aa,0x004e899d261232e98,0x00000000d5a3cf57,0x00000000218dc5bcd,0x0000000000000000,0x004ea000000000000,0x00000000d5800000,0x00000000219000000},
+ { 0x000000000000001b,0x03c97a447667ffded,0x00000002d721dd52,0x00000000b662d2fe8,0x0000000000000000,0x03ca0000000000000,0x00000002d4000000,0x00000000b68000000},
+ { 0x000000000000002d,0x03cd4f45b76d57a1f,0x000000000e60e3c9,0x0000c50e6b86ecd9b,0x0000000000000000,0x03ce0000000000000,0x0000000000000000,0x0000c540000000000},
+ { 0x00000000000b98cc,0x00394d537c97acbf0,0x00000024d9b60c2c,0x00049c27294a26f7a,0x0000000000000000,0x00395000000000000,0x0000000000000000,0x00049e00000000000},
+ { 0x0000000000000002,0x00a390c570251a895,0x00000000000002ad,0x0000cf56b5060c9b7,0x0000000000000000,0x00a3c000000000000,0x0000000000000000,0x0000cf80000000000},
+ { 0x000000e13e057ed7,0x03c9bd32e90c22901,0x02b87f8f456dd680,0x0084b8bfea52b85bd,0x0000000000000000,0x03ca0000000000000,0x02b8000000000000,0x0084c000000000000},
+ { 0x000000000012bf14,0x000322623b88e94b1,0x0000000383646704,0x000088e7231e4ee44,0x0000000000000000,0x00032300000000000,0x0000000000000000,0x00008900000000000},
+ { 0x00000000000001cc,0x0098f36993c6e9822,0x00000007537b6f9c,0x00001b4382c9b8a3e,0x0000000000000000,0x00990000000000000,0x0000000000000000,0x00001b48000000000},
+ { 0x0000000007895623,0x000a22131e8a47e61,0x0000001fbd4877a7,0x000001558f390240d,0x0000000000000000,0x000a2400000000000,0x0000001800000000,0x00000156000000000},
+ { 0x0000000000000d8e,0x000da0e52342fdb85,0x000000020dff8346,0x0000145124a4f5d18,0x0000000000000000,0x000da400000000000,0x0000000000000000,0x00001458000000000},
+ { 0x0000000000000000,0x000000000ce8e901b,0x0000000000000009,0x0000000000000001b,0x0000000000000000,0x000000000cec00000,0x0000000000000009,0x0000000000000001b},
+ { 0x0000000000f439c4,0x0000431b978fe0788,0x00000007973cd6e3,0x00000002912f0a053,0x0000000000000000,0x00004320000000000,0x0000000790000000,0x00000002920000000},
+ { 0x00000000000071a2,0x0000de8c426a1c021,0x000000095e5fc118,0x0000000f5e0fbff68,0x0000000000000000,0x0000dec0000000000,0x0000000940000000,0x0000000f600000000},
+ { 0x00000000000003ee,0x000000032c950b6d8,0x000000000000060f,0x0000000000054a9d9,0x0000000000000000,0x000000032d0000000,0x0000000000000000,0x0000000000054c000},
+ { 0x0000017ce7750d53,0x0005a0a49ba0a0ba2,0x000003dfc00c48b7,0x0000e4d9ac9b2b826,0x0000000000000000,0x0005a200000000000,0x0000000000000000,0x0000e500000000000},
+ { 0x0000000000000000,0x000007f90b654b0e2,0x000000001388ac72,0x0000000194614b8cf,0x0000000000000000,0x000007fa000000000,0x0000000010000000,0x00000001948000000},
+ { 0x0000000000003499,0x000000c783c8256ea,0x0000000001a7e1f7,0x00000017d29d5074b,0x0000000000000000,0x000000c7c00000000,0x0000000000000000,0x00000017d80000000},
+ { 0x0000000000000012,0x000347ef31be2899d,0x0000000000003999,0x0000000009fe3352d,0x0000000000000000,0x00034800000000000,0x0000000000000000,0x000000000a0000000},
+ { 0x000000000000001c,0x0050e07374585824d,0x00000000000001c0,0x001ed26ceb33d01fc,0x0000000000000000,0x00510000000000000,0x0000000000000000,0x001ed800000000000},
+ { 0x000000000000000f,0x0000d7750ac545f39,0x00000000000007f0,0x00000000000007068,0x0000000000000000,0x0000d780000000000,0x00000000000007e0,0x00000000000007080},
+ { 0x00000000000003a8,0x000002cb1fec783f8,0x000000007c171200,0x00000001b7f854330,0x0000000000000000,0x000002cc000000000,0x0000000078000000,0x00000001b80000000},
+ { 0x0000000000000017,0x00034ec51c9bdc9c4,0x00000002dcaadd19,0x0000007d3b31ee325,0x0000000000000000,0x00034f00000000000,0x0000000200000000,0x0000007d400000000},
+ { 0x0000000000000001,0x0001b6c19ac6d47da,0x0000000000f19515,0x00000000028aeab1f,0x0000000000000000,0x0001b700000000000,0x0000000000f00000,0x00000000028b00000},
+ { 0x000000000019042f,0x000798adc9cae1f29,0x00001a57552ca5b5,0x0000412ec0f9897b4,0x0000000000000000,0x00079a00000000000,0x00001a0000000000,0x00004130000000000},
+ { 0x00000000000b60c6,0x000000f0f3d89c1f1,0x00000000001d9810,0x000000000741a093f,0x0000000000000000,0x000000f1000000000,0x0000000000000000,0x00000000074200000},
+ { 0x0000000001dba7e3,0x0017b1a7d560b2c5c,0x00000350caa0b98f,0x000795ed7197a11d1,0x0000000000000000,0x0017b800000000000,0x0000000000000000,0x00079600000000000},
+ { 0x0000000000000022,0x00000004650e8e37d,0x000000000000002c,0x000000000000000ff,0x0000000000000000,0x00000004660000000,0x000000000000002c,0x000000000000000ff},
+ { 0x0000000000000002,0x002986b252fdefbe6,0x00000000000002b2,0x0000001aebede2a22,0x0000000000000000,0x00299000000000000,0x0000000000000000,0x0000001af00000000},
+ { 0x0000000000009cc0,0x01e4f70d443c5e3ab,0x000000000000c663,0x0001af004a2f72f21,0x0000000000000000,0x01e50000000000000,0x0000000000000000,0x0001af80000000000},
+ { 0x0000000000000001,0x03b459731fb8b7666,0x00000000046c08a2,0x000000008a30f5685,0x0000000000000000,0x03b50000000000000,0x0000000004000000,0x000000008a4000000},
+ { 0x0000000000000002,0x000ff083271ea8b0e,0x000000004219c02f,0x0000016d4fd1eca0b,0x0000000000000000,0x000ff400000000000,0x0000000000000000,0x0000016d800000000},
+ { 0x0000000000000993,0x0019758d51b985d3e,0x0000010fc85f99d9,0x00003451f5f5c5341,0x0000000000000000,0x00197800000000000,0x0000010000000000,0x00003460000000000},
+ { 0x0000000000000092,0x01ef3ff291d3e2461,0x0000000000637234,0x000000560aa6c51f1,0x0000000000000000,0x01ef8000000000000,0x0000000000000000,0x00000056200000000},
+ { 0x0000000001110912,0x000f4e79a6693b9be,0x0000315544d63141,0x00003c2226d21bb05,0x0000000000000000,0x000f5000000000000,0x0000310000000000,0x00003c30000000000},
+ { 0x000000000001b747,0x0000156f579839520,0x00000001a4dc812a,0x00000000c158675bc,0x0000000000000000,0x00001570000000000,0x00000001a4000000,0x00000000c18000000},
+ { 0x000000000000082d,0x0038cfbd8a7b3c53f,0x000000000000c012,0x00001c41d67d8a761,0x0000000000000000,0x0038d000000000000,0x0000000000000000,0x00001c48000000000},
+ { 0x0000000000000113,0x00000002f72e6aa58,0x00000000000008c3,0x0000000000008612b,0x0000000000000000,0x00000002f80000000,0x0000000000000800,0x00000000000086400},
+ { 0x0000000000000001,0x00000005e9a6747aa,0x00000000749135a5,0x000000001b3aebe9e,0x0000000000000000,0x00000005ea0000000,0x0000000074800000,0x000000001b4000000},
+ { 0x0000000000000013,0x0040ce815ac5e4f3d,0x000000000005c479,0x001e6dcca7d6e7e18,0x0000000000000000,0x0040e000000000000,0x0000000000000000,0x001e7000000000000},
+ { 0x0000000000000006,0x06ace550e00437a57,0x0000000000191a96,0x000000fadfda2f806,0x0000000000000000,0x06ae0000000000000,0x0000000000000000,0x000000fb000000000},
+ { 0x0000000000000002,0x000000000c3f15d30,0x0000000000000868,0x0000000005020518d,0x0000000000000000,0x000000000c4000000,0x0000000000000000,0x00000000050400000},
+ { 0x0000000000002507,0x0000000741f7ede85,0x0000000008472332,0x00000000018bd4541,0x0000000000000000,0x00000007420000000,0x0000000008400000,0x00000000018c00000},
+ { 0x0000000000000003,0x0000003aed17352c1,0x00000000006b3aac,0x00000004d91beae4a,0x0000000000000000,0x0000003af00000000,0x0000000000000000,0x00000004da0000000},
+ { 0x000003b689433f50,0x001c1517dede1fcaa,0x0000065534744339,0x0000038ac820dbda5,0x0000000000000000,0x001c1800000000000,0x0000065000000000,0x0000038b000000000},
+ { 0x0000000002551fd5,0x000000001e9c4ddf8,0x000000000783612a,0x0000000001f42bf79,0x0000000002000000,0x000000001ea000000,0x0000000007800000,0x0000000001f480000},
+ { 0x0000000000000002,0x00000f8cc27b40a7b,0x00000000000c64eb,0x0000000000dc6ed36,0x0000000000000000,0x00000f90000000000,0x00000000000c0000,0x0000000000dc80000},
+ { 0x0000000000001989,0x03d426d190e931596,0x0000000000108f83,0x00000000032601c57,0x0000000000000000,0x03d50000000000000,0x0000000000100000,0x00000000032700000},
+ { 0x0000000000000002,0x0292c73202509f087,0x0000000000000260,0x0000000000059df93,0x0000000000000000,0x02930000000000000,0x0000000000000000,0x0000000000059e000},
+ { 0x00000000000004bc,0x0000158d8a4728d23,0x00000000000ffb25,0x0000000bd572d1c95,0x0000000000000000,0x00001590000000000,0x0000000000000000,0x0000000bd80000000},
+ { 0x0000000000132163,0x004947977934a9065,0x000000d820a94907,0x000a7fa73ca98934d,0x0000000000000000,0x00496000000000000,0x0000000000000000,0x000a8000000000000},
+ { 0x0000000000000691,0x000000000046afc0a,0x0000000000000a6e,0x00000000000003b4a,0x0000000000000000,0x000000000046c0000,0x0000000000000a60,0x00000000000003b50},
+ { 0x000000000007ad29,0x000000695e839a6aa,0x0000000005463f4a,0x000000000c6b4da3d,0x0000000000000000,0x00000069600000000,0x0000000005400000,0x000000000c6c00000},
+ { 0x0000000f673cc950,0x00001b9ddf382247b,0x0000008b4e9408b8,0x0000000ef210f0335,0x0000000000000000,0x00001ba0000000000,0x0000008b40000000,0x0000000ef40000000},
+ { 0x0000000000016032,0x03619cb5211745a57,0x0000000000699b31,0x00000000d5b5c6b52,0x0000000000000000,0x03620000000000000,0x0000000000000000,0x00000000d5c000000},
+ { 0x00000001266bd20b,0x0000175829c5b1355,0x000014a6eb63e134,0x000001a4643fce449,0x0000000000000000,0x00001760000000000,0x000014a600000000,0x000001a4800000000},
+ { 0x00000000008f2aa1,0x0005f7867f461cb10,0x000000000161da7b,0x0000001a390b0cb67,0x0000000000000000,0x0005f800000000000,0x0000000000000000,0x0000001a400000000},
+ { 0x0000000000000007,0x00e2c0e7279845124,0x00000000000eb100,0x0000000005aa507b1,0x0000000000000000,0x00e30000000000000,0x0000000000000000,0x0000000005ac00000},
+ { 0x0000000000000017,0x0000000f6fa515f9e,0x0000000000035f96,0x0000000192aba9775,0x0000000000000000,0x0000000f700000000,0x0000000000000000,0x00000001930000000},
+ { 0x0000000000000001,0x000000003192381fb,0x000000000006696c,0x0000000004e797ce3,0x0000000000000000,0x0000000031a000000,0x0000000000000000,0x0000000004e800000},
+ { 0x0000000000002746,0x0006facd791f7d59a,0x0000000001724fb6,0x00000ffd0e23d10a7,0x0000000000000000,0x0006fc00000000000,0x0000000000000000,0x00001000000000000},
+ { 0x0000000000000000,0x00b9f45da25a352de,0x0000000000000619,0x00000268973c0c51d,0x0000000000000000,0x00ba0000000000000,0x0000000000000000,0x00000269000000000},
+ { 0x000000000000001b,0x0000045945c3f688e,0x000000000e4a67bf,0x000001b9760ffb567,0x0000000000000000,0x0000045a000000000,0x0000000000000000,0x000001b9800000000},
+ { 0x000000000000087a,0x0004f084d2b0d6c02,0x000000000000d8b2,0x000000b91982f8761,0x0000000000000000,0x0004f200000000000,0x0000000000000000,0x000000b9400000000},
+ { 0x00000000000000ee,0x0027aa3450d7aee86,0x00000000000522b4,0x000d58f15c459ed86,0x0000000000000000,0x0027b000000000000,0x0000000000000000,0x000d5c00000000000},
+ { 0x0000000000000007,0x000009fdf81fc8582,0x0000000000161183,0x000000000017bcd2e,0x0000000000000000,0x00000a00000000000,0x0000000000160000,0x000000000017c0000},
+ { 0x0000000000000006,0x00000001db439a8c7,0x0000000000000044,0x00000000000000078,0x0000000000000000,0x00000001db8000000,0x0000000000000044,0x00000000000000078},
+ { 0x0000000000000085,0x04379a447ce9e1625,0x000000030608b491,0x0000000fd4b4168c4,0x0000000000000000,0x04380000000000000,0x0000000300000000,0x0000000fd80000000},
+ { 0x0000000000000014,0x00000007e2c5a8e7c,0x00000000030458de,0x0000000125af0a821,0x0000000000000000,0x00000007e40000000,0x0000000000000000,0x00000001260000000},
+ { 0x0000000000000014,0x0015e4ee84a7b23e8,0x0000000000000062,0x00000000000000201,0x0000000000000000,0x0015e800000000000,0x0000000000000062,0x00000000000000201},
+ { 0x0000000003525144,0x0003bf141a7b68bc5,0x0000000006b7108a,0x000004cf164923d25,0x0000000000000000,0x0003c000000000000,0x0000000000000000,0x000004d0000000000},
+ { 0x000000000006840c,0x0000000cf2a1d854a,0x0000001bd0e8f203,0x00000002d1182aaf7,0x0000000000000000,0x0000000cf40000000,0x0000001bd0000000,0x00000002d18000000},
+ { 0x000000000000000d,0x00087fd05befc6f71,0x000000000000649d,0x0000000000067bcdd,0x0000000000000000,0x00088000000000000,0x0000000000006000,0x0000000000067c000},
+ { 0x0000000000000003,0x003f4d279ebca0000,0x00006d9249072a41,0x00280479f8992bcc9,0x0000000000000000,0x003f5000000000000,0x0000000000000000,0x00281000000000000},
+ { 0x0000000000000000,0x0000002de2ce50740,0x00000000000000ad,0x000000005fbe7067c,0x0000000000000000,0x0000002df00000000,0x0000000000000000,0x000000005fc000000},
+ { 0x0000000000001932,0x000006cf571f0de84,0x0000000002ed95f6,0x00000002c3c55d012,0x0000000000000000,0x000006d0000000000,0x0000000000000000,0x00000002c40000000},
+ { 0x00000000000000bf,0x00000000013753497,0x000000000001a9f1,0x00000000000034b3e,0x0000000000000000,0x00000000013780000,0x000000000001a980,0x00000000000034b80},
+ { 0x000000000000e7a0,0x00081aa72cd004b5e,0x0000000d7c7e81a9,0x0000624e9f5ca6d95,0x0000000000000000,0x00081c00000000000,0x0000000000000000,0x00006260000000000},
+ { 0x0000000000000029,0x04897612fa31763be,0x0000000000004908,0x014941e91122a8b27,0x0000000000000000,0x048a0000000000000,0x0000000000000000,0x01498000000000000},
+ { 0x0000000000000627,0x0000001644fad2779,0x0000000000168b0c,0x0000000001c6786c8,0x0000000000000000,0x00000016480000000,0x0000000000100000,0x0000000001c680000},
+ { 0x0000000000000239,0x035b7d53b8962da0e,0x0000000003f15489,0x000097316b000a0f2,0x0000000000000000,0x035c0000000000000,0x0000000000000000,0x00009740000000000},
+ { 0x0000000000000014,0x0003c4f1fe2c18802,0x0000000000002a16,0x0000000000019efcb,0x0000000000000000,0x0003c500000000000,0x0000000000002800,0x0000000000019f000},
+ { 0x0000000000000015,0x0119a0ec3c8d32211,0x0000000028ab248b,0x000000004715b9901,0x0000000000000000,0x011a0000000000000,0x0000000028000000,0x00000000472000000},
+ { 0x0000000000000004,0x00000790d17b76e53,0x0000000000000045,0x0000000366a0b9e8c,0x0000000000000000,0x00000792000000000,0x0000000000000000,0x00000003670000000},
+ { 0x000000000000058f,0x0fb4bb8ca41681b99,0x0002efaedb4fb283,0x003fc18bbe8a1f887,0x0000000000000000,0x0fb80000000000000,0x0002000000000000,0x003fd000000000000},
+ { 0x00000000000014fc,0x0002b62dfd38bcd51,0x00000002b1d71953,0x00000001ab0380ea4,0x0000000000000000,0x0002b700000000000,0x00000002b0000000,0x00000001ab8000000},
+ { 0x000000000000004e,0x000007099da60763a,0x000000000027e7d2,0x0000002494cd402cc,0x0000000000000000,0x0000070a000000000,0x0000000000000000,0x00000024a00000000},
+ { 0x000000000000000a,0x00001eb3ac77fc980,0x000000000000bb0a,0x00000006033fe010b,0x0000000000000000,0x00001eb8000000000,0x0000000000000000,0x00000006040000000},
+ { 0x0000000a838e4aa1,0x00017d6e1bd9213a9,0x00000aa06120ac33,0x00008bdd62ef786e7,0x0000000000000000,0x00017d80000000000,0x0000080000000000,0x00008c00000000000},
+ { 0x00000000000000bc,0x00015962f28473e1c,0x0000000000002dcd,0x00000000ab492f5a1,0x0000000000000000,0x00015980000000000,0x0000000000000000,0x00000000ab8000000},
+ { 0x000000000000000d,0x000009dad4318b58f,0x00000000000cae73,0x000000000000fdee3,0x0000000000000000,0x000009dc000000000,0x00000000000cae00,0x000000000000fdf00},
+ { 0x000000000011ccdd,0x000000235652f9597,0x00000000005a46b2,0x0000000000a5215c8,0x0000000000000000,0x00000023600000000,0x0000000000580000,0x0000000000a540000},
+ { 0x0000000000000024,0x000008bdc0e5bf96a,0x0000010967a7acfb,0x000000158a24ecf78,0x0000000000000000,0x000008c0000000000,0x0000010960000000,0x000000158c0000000},
+ { 0x00000000d309dbf7,0x009c4dbea7fed1cc7,0x016039ea23fc7e14,0x004f393c789edb93e,0x0000000000000000,0x009c8000000000000,0x0160000000000000,0x004f4000000000000},
+ { 0x0000000001743166,0x0000016de01c80ca7,0x00000000ba2c226c,0x000000006ac9d5f56,0x0000000000000000,0x0000016e000000000,0x00000000ba000000,0x000000006ae000000},
+ { 0x00000000002dc1d5,0x0001ae54d1213863e,0x000000000f7000b7,0x0000005dbd6e59115,0x0000000000000000,0x0001ae80000000000,0x0000000000000000,0x0000005dc00000000},
+ { 0x0000000000000008,0x00031b43027a563aa,0x0000000000002371,0x000000000007396cd,0x0000000000000000,0x00031c00000000000,0x0000000000002000,0x0000000000073a000},
+ { 0x0000000000000002,0x000000000011a2dc5,0x00000000000000ff,0x000000000000094d4,0x0000000000000000,0x000000000011a8000,0x00000000000000c0,0x00000000000009500},
+ { 0x000000000007d625,0x00003bfb9aa23ee65,0x000000000183ee1b,0x00000026bbf0d15ff,0x0000000000000000,0x00003c00000000000,0x0000000000000000,0x00000026c00000000},
+ { 0x00000000000000a6,0x0001aecc252953b15,0x00000000094eb487,0x000000000441a9ade,0x0000000000000000,0x0001af00000000000,0x0000000009400000,0x00000000044200000},
+ { 0x0000067c5f5225c2,0x007a8b0b5fa18673c,0x0000367ec2722227,0x000075d39fe26d37f,0x0000000000000000,0x007aa000000000000,0x0000360000000000,0x000075e0000000000},
+ { 0x000000000000078a,0x0000003a1db9e02b2,0x000000000073b3ab,0x0000000000ec79223,0x0000000000000000,0x0000003a200000000,0x0000000000700000,0x0000000000ec80000},
+ { 0x00000000000011e0,0x0001022fe31e58d8b,0x00000000000092bd,0x0000000032a3bc19b,0x0000000000000000,0x00010280000000000,0x0000000000000000,0x0000000032b000000},
+ { 0x0000000000000007,0x013f90baaf3021e50,0x0000000000464fda,0x000000000037f997d,0x0000000000000000,0x01400000000000000,0x0000000000460000,0x00000000003800000},
+ { 0x000000000000001d,0x000000278acf92905,0x00000000102a9a10,0x0000000003b54d2a6,0x0000000000000000,0x00000027900000000,0x0000000010200000,0x0000000003b600000},
+ { 0x0000000000000000,0x05e0b42fadd2e4f2c,0x0000820a80f9d013,0x00037560fb23e4f83,0x0000000000000000,0x05e20000000000000,0x0000800000000000,0x00037600000000000},
+ { 0x0000000000001363,0x0000c358d25d10d4b,0x000000000018bb93,0x000000000d63d8857,0x0000000000000000,0x0000c380000000000,0x0000000000000000,0x000000000d6400000},
+ { 0x00000000000007ce,0x00095e3a258bdeff4,0x00000000000038fb,0x0000ef13965f9a36a,0x0000000000000000,0x00096000000000000,0x0000000000000000,0x0000ef40000000000},
+ { 0x0000000000000057,0x0000000eaba18c100,0x00000000000001ee,0x00000000609bf4911,0x0000000000000000,0x0000000eac0000000,0x0000000000000000,0x0000000060a000000},
+ { 0x000000000000000b,0x00000002dbbdf5715,0x0000000c47074eca,0x000000015cada8500,0x0000000000000000,0x00000002dc0000000,0x0000000c44000000,0x000000015cc000000},
+ { 0x00000000007c9483,0x00cb17c98f3c84322,0x00000f605b2a6bfa,0x00000391e0ada9986,0x0000000000000000,0x00cb4000000000000,0x00000f6000000000,0x00000392000000000},
+ { 0x0000000050ac491a,0x00003d3b4bd12f7d9,0x000014ec63c05d6f,0x000001bbea6c22225,0x0000000000000000,0x00003d40000000000,0x000014ec00000000,0x000001bc000000000},
+ { 0x0000000000000003,0x0000000002382ef89,0x000000000000003e,0x0000000000871b69b,0x0000000000000000,0x00000000023900000,0x0000000000000000,0x00000000008740000},
+ { 0x0000000000000120,0x0000ad796bf7d1362,0x00000000000eadfb,0x00000017485afb9aa,0x0000000000000000,0x0000ad80000000000,0x0000000000000000,0x00000017500000000},
+ { 0x0000000000227937,0x002ecc3133d5dbc90,0x0000000036b7837a,0x00063936dc4f11c6a,0x0000000000000000,0x002ed000000000000,0x0000000000000000,0x00063a00000000000},
+ { 0x0000000000115d1b,0x00045b405f3dff3b2,0x00004b81c51969a9,0x00001e0c807ec78bf,0x0000000000000000,0x00045c00000000000,0x00004b8000000000,0x00001e10000000000},
+ { 0x00000000000047d6,0x000698197c11e2012,0x0000000008141df4,0x0002564837528ac7a,0x0000000000000000,0x00069a00000000000,0x0000000000000000,0x00025700000000000},
+ { 0x000000000005b80b,0x0000d7803cbd89604,0x00000000414987df,0x0000000d8c1fca610,0x0000000000000000,0x0000d7c0000000000,0x0000000040000000,0x0000000d900000000},
+ { 0x0000000000000007,0x0000000003bac731b,0x0000000000007a08,0x0000000001d2edd63,0x0000000000000000,0x0000000003bb00000,0x0000000000000000,0x0000000001d300000},
+ { 0x000000000017b8d6,0x06f6a1834b8ed0e8b,0x0f3304842618764d,0x017fd8a2bc9036ee4,0x0000000000000000,0x06f80000000000000,0x0f30000000000000,0x01800000000000000},
+ { 0x0000000002645eaa,0x000000000124b9d4f,0x0000000005d92057,0x0000000000b4e9313,0x0000000002640000,0x000000000124c0000,0x0000000005d80000,0x0000000000b500000},
+ { 0x0000000000000002,0x00007810726e2ec2a,0x000000000000ae87,0x00000000000040266,0x0000000000000000,0x00007820000000000,0x000000000000ae00,0x00000000000040300},
+ { 0x0000000000000009,0x003361b9a36493352,0x000000000000cd28,0x00000065d83f7cfb1,0x0000000000000000,0x00337000000000000,0x0000000000000000,0x00000065e00000000},
+ { 0x0000000000000cf1,0x01b6367a3c1fc5560,0x00001fd6f67a7cf8,0x00000388c568eb17a,0x0000000000000000,0x01b68000000000000,0x00001fd000000000,0x00000389000000000},
+ { 0x000000000015118c,0x000033b59ce401999,0x00000061c98ef6ff,0x000001adca73ec104,0x0000000000000000,0x000033c0000000000,0x0000006000000000,0x000001ae000000000},
+ { 0x0000000000000009,0x0000a6f245949ba54,0x000000000000001f,0x000000000000000e0,0x0000000000000000,0x0000a700000000000,0x000000000000001f,0x000000000000000e0},
+ { 0x0000000000003331,0x00031166ffe218679,0x0000000000964e78,0x00000014766a3d19a,0x0000000000000000,0x00031200000000000,0x0000000000000000,0x00000014780000000},
+ { 0x000000000000133d,0x0000000e5c72e282f,0x00000000006cb2a6,0x00000001ad63185bd,0x0000000000000000,0x0000000e600000000,0x0000000000000000,0x00000001ad8000000},
+ { 0x000000000000001a,0x000000000366dca70,0x0000000000000073,0x000000000000001dd,0x0000000000000000,0x00000000036700000,0x0000000000000073,0x000000000000001dd},
+ { 0x00000000001238b2,0x00000003f3ac97916,0x000000000019d065,0x00000000005d60cb6,0x0000000000000000,0x00000003f40000000,0x0000000000180000,0x00000000005d80000},
+ { 0x0000000000000061,0x000010810ecff75d4,0x0000002e8dc18bbd,0x00000040392a3f60d,0x0000000000000000,0x00001088000000000,0x0000002e00000000,0x00000040400000000},
+ { 0x000000000001582e,0x00000dbdd8163cdc9,0x0000006eecb7e34c,0x0000000a07e37d813,0x0000000000000000,0x00000dc0000000000,0x0000006ee0000000,0x0000000a080000000},
+ { 0x00000000006f5608,0x000b672e1d4bbb1d2,0x000000029e0a3f80,0x00007073d49b368ff,0x0000000000000000,0x000b6800000000000,0x0000000000000000,0x00007080000000000},
+ { 0x000000000000001f,0x000000000670e7b5d,0x000000001926124c,0x00000000050ed671e,0x0000000000000000,0x00000000067200000,0x0000000019200000,0x00000000050f00000},
+ { 0x0000000000000001,0x00000002cf9c7b626,0x0000000000001959,0x00000000001b89a77,0x0000000000000000,0x00000002d00000000,0x0000000000000000,0x00000000001b90000},
+ { 0x0000000000092cf2,0x000000044eba01e11,0x0000000009c222aa,0x0000000000df155f0,0x0000000000000000,0x00000004500000000,0x0000000009c20000,0x0000000000df20000},
+ { 0x000000000000000f,0x00000acf5c13c1dc6,0x0000000000664237,0x00000016984523886,0x0000000000000000,0x00000ad0000000000,0x0000000000000000,0x00000016a00000000},
+ { 0x0000000000000001,0x0000dbc3cfd6efb7d,0x0000000000000060,0x000001792376176e4,0x0000000000000000,0x0000dc00000000000,0x0000000000000000,0x00000179800000000},
+ { 0x00000000802e8fdb,0x00000f03edc7c36c9,0x000007bbb80c08cf,0x000000fa6a7a442b1,0x0000000000000000,0x00000f04000000000,0x000007ba00000000,0x000000fa800000000},
+ { 0x0000000000000034,0x0002b68d2b0d6341e,0x000000004c9ee2bb,0x00006e4dafeb2bf5e,0x0000000000000000,0x0002b700000000000,0x0000000000000000,0x00006e60000000000},
+ { 0x0000000000000087,0x07003d972849cd430,0x00000001d8bf902d,0x000000018b1760cb7,0x0000000000000000,0x07020000000000000,0x00000001d8000000,0x000000018b8000000},
+ { 0x0000000000000009,0x00003b94774ba720e,0x000000000000082f,0x00000000000b175e0,0x0000000000000000,0x00003ba0000000000,0x0000000000000000,0x00000000000b18000},
+ { 0x0000000000000007,0x000001f74edf8e145,0x0000000000000a53,0x00000008217d0886d,0x0000000000000000,0x000001f7800000000,0x0000000000000000,0x00000008240000000},
+ { 0x000000001c3bf622,0x01204929998f4a8b1,0x00000000573346b4,0x0000001f6a24a4451,0x0000000000000000,0x01208000000000000,0x0000000000000000,0x0000001f700000000},
+ { 0x000000000000020f,0x0001eb6801bebda55,0x00000000001856b4,0x000000eb4f40533fd,0x0000000000000000,0x0001eb80000000000,0x0000000000000000,0x000000eb800000000},
+ { 0x0000001cbeaa5d48,0x000091ca8ee2512ab,0x000001cebed8522b,0x000000b597cf00273,0x0000000000000000,0x00009200000000000,0x000001cc00000000,0x000000b5c00000000},
+ { 0x00000000000004af,0x00002e0a84be05f98,0x00000000000ec086,0x0000000030a42ebe2,0x0000000000000000,0x00002e10000000000,0x0000000000000000,0x0000000030b000000},
+ { 0x00000bc1d74ce466,0x0b4bba271f4aa3e10,0x0000698492649e36,0x03d03f6ee6eb01b38,0x0000000000000000,0x0b4c0000000000000,0x0000000000000000,0x03d10000000000000},
+ { 0x0000000000000d56,0x0000028fd42ae4453,0x000000000041f8ab,0x0000000000bbfb8e0,0x0000000000000000,0x00000290000000000,0x0000000000400000,0x0000000000bc00000},
+ { 0x000000000004a698,0x000c3d8dd2e5773aa,0x00000003a988e596,0x0001cdd059f9982b8,0x0000000000000000,0x000c4000000000000,0x0000000000000000,0x0001ce00000000000},
+ { 0x0000000003cc877d,0x031260fce497ef0b5,0x000000003e58a380,0x00017bf13be3ce609,0x0000000000000000,0x03130000000000000,0x0000000000000000,0x00017c00000000000},
+ { 0x0000000000000003,0x00009d1f612dce46c,0x000000000000000d,0x00007170dc1d8907c,0x0000000000000000,0x00009d40000000000,0x0000000000000000,0x00007180000000000},
+ { 0x00000000081c014d,0x0000000316a240452,0x00000000682ee984,0x00000000b24888f8e,0x0000000000000000,0x00000003170000000,0x0000000068000000,0x00000000b28000000},
+ { 0x0000000000000000,0x007a1e7144a0bb5c1,0x00000004b21bc61d,0x000000ad28920324f,0x0000000000000000,0x007a2000000000000,0x0000000400000000,0x000000ad400000000},
+ { 0x0000000000ad754b,0x015ef85e9594f6a0e,0x000000c2c24e9f98,0x000001d8c45c73355,0x0000000000000000,0x015f0000000000000,0x000000c000000000,0x000001d9000000000},
+ { 0x0000000000000045,0x0000001e0b787b170,0x0000000b7e2939f5,0x000000096410c5cf1,0x0000000000000000,0x0000001e100000000,0x0000000b40000000,0x00000009680000000},
+ { 0x0000000000000002,0x0000028bdd674c06a,0x0000000000000029,0x00000000595bec66c,0x0000000000000000,0x0000028c000000000,0x0000000000000000,0x00000000596000000},
+ { 0x0000000000000638,0x00000000b5a729fb0,0x000000000001d635,0x0000000000618a804,0x0000000000000000,0x00000000b5c000000,0x0000000000000000,0x000000000061a0000},
+ { 0x0000000000000832,0x009ba2cce03642862,0x000000000008f298,0x0002fdcaff44aa677,0x0000000000000000,0x009bc000000000000,0x0000000000000000,0x0002fe00000000000},
+ { 0x0000000000000180,0x000000003fa2e8f12,0x000000000000070a,0x000000000000739aa,0x0000000000000000,0x000000003fb000000,0x0000000000000600,0x00000000000073a00},
+ { 0x000000000000002d,0x0000000004b712517,0x000000000000006f,0x000000000000614ce,0x0000000000000000,0x0000000004b800000,0x0000000000000000,0x00000000000061600},
+ { 0x0000000000000001,0x000000000fc66ce03,0x00000000001f37eb,0x000000000006be53b,0x0000000000000000,0x000000000fc800000,0x00000000001f2000,0x000000000006c0000},
+ { 0x0000000000000a1d,0x00e7062b369cf4e54,0x00000000025b699f,0x000000184c9db7af3,0x0000000000000000,0x00e74000000000000,0x0000000000000000,0x00000018500000000},
+ { 0x000000000399221e,0x000034548619c2583,0x0000000003f63e77,0x000008ce75e76bdc9,0x0000000000000000,0x00003460000000000,0x0000000000000000,0x000008d0000000000},
+ { 0x0000000000000002,0x000000118e262e3fd,0x0000000000e78b09,0x0000000000a390a08,0x0000000000000000,0x00000011900000000,0x0000000000e40000,0x0000000000a3c0000},
+ { 0x0000000000000e3b,0x000007540b05030dc,0x000000000000cd16,0x0000024eb6ad71d70,0x0000000000000000,0x00000756000000000,0x0000000000000000,0x0000024f000000000},
+ { 0x0000000000000000,0x002fca0f5334ca16a,0x00000001e6750e11,0x00000001e62ba7ef6,0x0000000000000000,0x002fd000000000000,0x00000001e0000000,0x00000001e68000000},
+ { 0x000000000000006d,0x002a8b800ed908bc7,0x0000000000000305,0x000003293d7cbf792,0x0000000000000000,0x002a9000000000000,0x0000000000000000,0x0000032a000000000},
+ { 0x0000000000002f57,0x00009832bc19bae50,0x000000001c6bd716,0x00000001af8bbc912,0x0000000000000000,0x00009840000000000,0x0000000018000000,0x00000001b00000000},
+ { 0x0000000000000018,0x0000000000373f330,0x0000000000000039,0x00000000000073b6b,0x0000000000000000,0x00000000003740000,0x0000000000000000,0x00000000000073c00},
+ { 0x0000000000006fd2,0x00077d8a2c0dc5d47,0x000000000000d85b,0x00000000000076621,0x0000000000000000,0x00077e00000000000,0x000000000000d800,0x00000000000076800},
+ { 0x0000000000000688,0x00000000751a6d6ed,0x000000000002213b,0x0000000000002a9b9,0x0000000000000000,0x00000000752000000,0x0000000000022100,0x0000000000002a9c0},
+ { 0x00000000000055f2,0x0000b44a6941bfe77,0x00000001ef0a89cd,0x00000379ab912bc6d,0x0000000000000000,0x0000b480000000000,0x0000000000000000,0x0000037a000000000},
+ { 0x000000000000000f,0x000c560f1b3fb72b3,0x00000000001e6826,0x000000000cc0a3c99,0x0000000000000000,0x000c5800000000000,0x0000000000000000,0x000000000cc400000},
+ { 0x0000000000000005,0x0000343a372cb2a3a,0x0000000000003d30,0x000000000000bc191,0x0000000000000000,0x00003440000000000,0x0000000000003c00,0x000000000000bc400},
+ { 0x0000000000000005,0x001c1ababbf892fb2,0x0000000000076f3d,0x00001b83dc7cf60f9,0x0000000000000000,0x001c2000000000000,0x0000000000000000,0x00001b88000000000},
+ { 0x000000000000001f,0x000702e8703a03626,0x0000003a749f344f,0x000001bc37ad35c89,0x0000000000000000,0x00070400000000000,0x0000003800000000,0x000001bc800000000},
+ { 0x000000000311b2e5,0x0000602a4a44c780d,0x00000000a0671dd8,0x000001c10c9de73d1,0x0000000000000000,0x00006040000000000,0x0000000000000000,0x000001c1800000000},
+ { 0x00000000000bef4b,0x0562aa0c129fc7310,0x00520657c2d96f83,0x00dbdeef7d128ffa8,0x0000000000000000,0x05640000000000000,0x0050000000000000,0x00dc0000000000000},
+ { 0x0000000000054e6f,0x000023ca4e5f86d70,0x00000000008ea603,0x000017fe63b6124a5,0x0000000000000000,0x000023d0000000000,0x0000000000000000,0x00001800000000000},
+ { 0x0000000000000000,0x00003d332243f5a92,0x0000000000003a46,0x0000000000039cf4b,0x0000000000000000,0x00003d40000000000,0x0000000000003000,0x0000000000039d000},
+ { 0x00000000d7a0dc98,0x0001f5b2d4b47333b,0x000000c16fb09584,0x0000000c21dc67576,0x0000000000000000,0x0001f600000000000,0x000000c16f800000,0x0000000c21e000000},
+ { 0x0000000000000b9c,0x07e826e460b4cb99c,0x000000000fd2e5f4,0x00000005e7a5e3593,0x0000000000000000,0x07ea0000000000000,0x0000000000000000,0x00000005e80000000},
+ { 0x0000000000000016,0x000368bac48954aef,0x0000000182588c04,0x0000d3335a64451ec,0x0000000000000000,0x00036900000000000,0x0000000000000000,0x0000d340000000000},
+ { 0x0000000000000003,0x0541e1e400371d3f2,0x000000000026104e,0x000005e622fc80c5f,0x0000000000000000,0x05420000000000000,0x0000000000000000,0x000005e8000000000},
+ { 0x000000000000007d,0x00349ceab3ac713b7,0x00000000000013e2,0x000748417b3d0eabc,0x0000000000000000,0x0034a000000000000,0x0000000000000000,0x00074a00000000000},
+ { 0x0000000000000937,0x0001f5e44ba3eb935,0x0000000045f90388,0x000000000e332b859,0x0000000000000000,0x0001f600000000000,0x0000000045c00000,0x000000000e3400000},
+ { 0x0000000000000000,0x000237f2e39e1b6e4,0x0000000000000002,0x000000000000010ac,0x0000000000000000,0x00023800000000000,0x0000000000000000,0x000000000000010b0},
+ { 0x000000000009a5a3,0x000000002485cb714,0x00000000000b8667,0x000000000000c0320,0x0000000000000000,0x00000000249000000,0x00000000000b8660,0x000000000000c0320},
+ { 0x000000000003316f,0x000205cb4ca936149,0x00000000005ed7c0,0x000000ec49fc47d39,0x0000000000000000,0x00020600000000000,0x0000000000000000,0x000000ec800000000},
+ { 0x0000000000000003,0x0001258d809d50470,0x000000000011510d,0x000000000003b92bc,0x0000000000000000,0x00012600000000000,0x0000000000115000,0x000000000003ba000},
+ { 0x0000000000000085,0x0000000000005ae6d,0x00000000000000da,0x0000000000000d91f,0x0000000000000000,0x0000000000005b000,0x00000000000000c0,0x0000000000000d940},
+ { 0x00000000000051f4,0x0002d5b488e95b36f,0x00000000003ab513,0x00000000031e53b79,0x0000000000000000,0x0002d600000000000,0x0000000000300000,0x00000000031f00000},
+ { 0x0000000000355b74,0x0000009422311dbed,0x000000000713f142,0x0000000604cd77183,0x0000000000000000,0x00000094400000000,0x0000000000000000,0x00000006060000000},
+ { 0x0000000000000692,0x00040b085c89dc116,0x00000270d1f2ddd4,0x00000e7a110690fcc,0x0000000000000000,0x00040c00000000000,0x0000024000000000,0x00000e7c000000000},
+ { 0x0000000000efaf43,0x000d243096dcba19b,0x00000052a53f4773,0x0000001d6c234d563,0x0000000000000000,0x000d2800000000000,0x0000005280000000,0x0000001d700000000},
+ { 0x00000000000017e1,0x000000059ec688717,0x0000000000001818,0x0000000018bca3aad,0x0000000000000000,0x00000005a00000000,0x0000000000000000,0x0000000018c000000},
+ { 0x0000000000000003,0x00000000f3b150d63,0x000000000000319c,0x000000007785cdd47,0x0000000000000000,0x00000000f3c000000,0x0000000000000000,0x0000000077a000000},
+ { 0x00000000d31d89ef,0x00000f57a0bf9ce9b,0x0000001adf768cee,0x000001e4d98a14461,0x0000000000000000,0x00000f58000000000,0x0000001800000000,0x000001e5000000000},
+ { 0x00000000002cb3be,0x0a41c5262b7378413,0x000000018ddb2baf,0x000000aaec33a4484,0x0000000000000000,0x0a440000000000000,0x0000000000000000,0x000000ab000000000},
+ { 0x0000000000000516,0x000717368c4a853a2,0x000000a8f9513ac2,0x00000333c9606621f,0x0000000000000000,0x00071800000000000,0x000000a000000000,0x00000334000000000},
+ { 0x0000000000002f53,0x0005daaea4f2b8431,0x000000068a061b51,0x000000178cfbdd9d8,0x0000000000000000,0x0005dc00000000000,0x0000000680000000,0x00000017900000000},
+ { 0x0000000002c181a4,0x06f26dc4a26839906,0x000000001707a033,0x0035aff3599f02b26,0x0000000000000000,0x06f40000000000000,0x0000000000000000,0x0035b000000000000},
+ { 0x00000000002b979d,0x0000f9474a3afab8d,0x00000000005f35f0,0x000000000021629f2,0x0000000000000000,0x0000f980000000000,0x00000000005f0000,0x00000000002168000},
+ { 0x0000000000000785,0x00049d3532e933407,0x0000000000005a9c,0x0000000000059ed18,0x0000000000000000,0x00049e00000000000,0x0000000000004000,0x000000000005a0000},
+ { 0x0000000000000088,0x0000162604ef1fa22,0x000000002b6e319c,0x00000c9e299f6f975,0x0000000000000000,0x00001628000000000,0x0000000000000000,0x00000ca0000000000},
+ { 0x0000000000000007,0x0000035c53b23f29d,0x000000000000000e,0x00000056e1762609c,0x0000000000000000,0x0000035d000000000,0x0000000000000000,0x00000057000000000},
+ { 0x0000000001857a23,0x00000f40bdd4cd8eb,0x0000000003614d0c,0x0000000015c969d73,0x0000000000000000,0x00000f44000000000,0x0000000003000000,0x0000000015d000000},
+ { 0x0000000000000574,0x00933b492f0bc8d59,0x0000001dbfc49d30,0x00007907a7fc5c560,0x0000000000000000,0x00934000000000000,0x0000000000000000,0x00007920000000000},
+ { 0x000000000000ad6f,0x0000293d80f3541c3,0x000000d31f8d9d13,0x000000f5c5372b465,0x0000000000000000,0x00002940000000000,0x000000d000000000,0x000000f6000000000},
+ { 0x0000000000000002,0x001396841ce2b1d35,0x0000000000000159,0x0000000000003189c,0x0000000000000000,0x00139800000000000,0x0000000000000100,0x00000000000031900},
+ { 0x0000000000001beb,0x007541c6ba1b8c325,0x00000002cb25d450,0x00000000fbb9025a1,0x0000000000000000,0x00756000000000000,0x00000002c8000000,0x00000000fbc000000},
+ { 0x0000000000000b1b,0x000003db0dbf8a5e9,0x00000000c906673f,0x0000000c0ace4af67,0x0000000000000000,0x000003dc000000000,0x00000000c0000000,0x0000000c0c0000000},
+ { 0x00000000000026bb,0x0398a598aa4d5123d,0x000000000000560b,0x000000001f00ae93b,0x0000000000000000,0x03990000000000000,0x0000000000000000,0x000000001f0800000},
+ { 0x0000000039636ccb,0x000013d134c226468,0x00000000c4a5c8ff,0x0000000090ae79088,0x0000000000000000,0x000013d8000000000,0x00000000c4000000,0x0000000090c000000},
+ { 0x0000000002258363,0x01b544eeb7c9fbe67,0x09c675b1fd2a9512,0x01a7185de257da7da,0x0000000000000000,0x01b58000000000000,0x09c0000000000000,0x01a78000000000000},
+ { 0x00000000000082b0,0x000b64c6937a79681,0x00053ad1444c05a0,0x0000b6af135ad575b,0x0000000000000000,0x000b6800000000000,0x00053a0000000000,0x0000b6c0000000000},
+ { 0x000000000000000d,0x000095b7da76b5cfc,0x00000bb386b9f269,0x000010f0a6b9631c5,0x0000000000000000,0x000095c0000000000,0x00000b8000000000,0x000010f8000000000},
+ { 0x0000000000000316,0x0000001be5d5b1589,0x0000000001aafe40,0x00000000006d62a71,0x0000000000000000,0x0000001be80000000,0x0000000001aa0000,0x00000000006d80000},
+ { 0x000000000002899c,0x000435b6864e3922a,0x000000000053ecd0,0x000066080ee9a57a6,0x0000000000000000,0x00043600000000000,0x0000000000000000,0x00006620000000000},
+ { 0x0000000000000006,0x0000000005a6cc468,0x000000000000ebba,0x000000000000122dd,0x0000000000000000,0x0000000005a800000,0x000000000000ebb0,0x000000000000122e0},
+ { 0x0000000000000014,0x0000006628df3f959,0x0000000000004adf,0x000000000000fc470,0x0000000000000000,0x00000066400000000,0x0000000000004800,0x000000000000fc800},
+ { 0x0000000000000169,0x0002b5a5f36e66b4e,0x00000492eea39c8f,0x000012e6b8be223e0,0x0000000000000000,0x0002b600000000000,0x0000048000000000,0x000012e8000000000},
+ { 0x0000000000002d90,0x002b96702648f177a,0x000004977fa3f9aa,0x0000087ce0b42efa7,0x0000000000000000,0x002ba000000000000,0x0000048000000000,0x00000880000000000},
+ { 0x0000000000000003,0x007eb73560c94c36f,0x00000000000000fe,0x00000612d332a1014,0x0000000000000000,0x007ec000000000000,0x0000000000000000,0x00000614000000000},
+ { 0x00000000000004b9,0x0000be37cb204b39a,0x000000000014deb1,0x00000000001b95942,0x0000000000000000,0x0000be40000000000,0x0000000000148000,0x00000000001b98000},
+ { 0x0000000035967447,0x0002c1b5621215b07,0x0000063f7b75afd9,0x00000783f2c94d1fd,0x0000000000000000,0x0002c200000000000,0x0000062000000000,0x00000784000000000},
+ { 0x00000000000009d4,0x0000000000ba2042d,0x00000000000021d0,0x00000000006e35f38,0x0000000000000000,0x0000000000ba40000,0x0000000000000000,0x00000000006e40000},
+ { 0x00000000000069c5,0x03c08454b84685315,0x00000c279f78d0a1,0x00000d8fe0da2f090,0x0000000000000000,0x03c10000000000000,0x00000c0000000000,0x00000d90000000000},
+ { 0x0000000000000002,0x00057e6465a432ed5,0x000000000000a869,0x0000000000001a93f,0x0000000000000000,0x00058000000000000,0x000000000000a800,0x0000000000001a980},
+ { 0x000000005e8fa45f,0x05cb229381a11cbe1,0x00001a627aa9d282,0x00036dbba14ac0562,0x0000000000000000,0x05cc0000000000000,0x0000100000000000,0x00036e00000000000},
+ { 0x00000000000000b9,0x0000dbdad42173671,0x00000000000a22b6,0x00000000c4407cc5b,0x0000000000000000,0x0000dc00000000000,0x0000000000000000,0x00000000c48000000},
+ { 0x0000000000000cc5,0x00000003570121a7a,0x00000000000035e7,0x000000000000da741,0x0000000000000000,0x00000003580000000,0x0000000000003400,0x000000000000da800},
+ { 0x00000000001a7e9e,0x0a64775f3a096e829,0x0000000000590266,0x00138162259dc6c4c,0x0000000000000000,0x0a680000000000000,0x0000000000000000,0x00138800000000000},
+ { 0x0000000000000000,0x0194c9dc1408be5c6,0x000000000026ad3f,0x00002995a166784db,0x0000000000000000,0x01950000000000000,0x0000000000000000,0x000029a0000000000},
+ { 0x00000000000062dd,0x00005781f3348cbcc,0x0000000000029c92,0x00000001df394660f,0x0000000000000000,0x000057a0000000000,0x0000000000000000,0x00000001df8000000},
+ { 0x0000001f3c07232d,0x00002d3c2109cf02b,0x000001688389ea77,0x000020c0471067c49,0x0000000000000000,0x00002d40000000000,0x0000010000000000,0x000020d0000000000},
+ { 0x00000000e30348ed,0x0001de5a1bc66f726,0x0000e11e07153d85,0x00009416a71ba3d80,0x0000000000000000,0x0001de80000000000,0x0000e00000000000,0x00009440000000000},
+ { 0x0000000000000000,0x00f3764315deeec84,0x0000000000000008,0x000000000000000e3,0x0000000000000000,0x00f38000000000000,0x0000000000000008,0x000000000000000e3},
+ { 0x000000000712471b,0x016fd6b2dfc513718,0x0000001eb2d87b75,0x0000002ecf7abdd4b,0x0000000000000000,0x01700000000000000,0x0000001e00000000,0x0000002ed00000000},
+ { 0x000000000000fced,0x019eefb4de44f629e,0x00004c583ddd151f,0x00006383630051107,0x0000000000000000,0x019f0000000000000,0x00004c0000000000,0x000063a0000000000},
+ { 0x0000000000000007,0x0000000271bb6e0e2,0x0000000000001b6f,0x0000000113a0dddcd,0x0000000000000000,0x00000002720000000,0x0000000000000000,0x00000001140000000},
+ { 0x0000000000000002,0x0000878fc4e06cd48,0x00000000000000eb,0x000000007359bfc81,0x0000000000000000,0x000087c0000000000,0x0000000000000000,0x00000000736000000},
+ { 0x0000000000000094,0x00000000014a30b26,0x00000000000004ee,0x0000000000000e65f,0x0000000000000000,0x00000000014a80000,0x00000000000004c0,0x0000000000000e680},
+ { 0x000000000000003a,0x000000055a1c6389b,0x0000000000e8c262,0x00000000001be86e5,0x0000000000000000,0x000000055c0000000,0x0000000000e8c000,0x00000000001bec000},
+ { 0x0000000000005517,0x00000000ad3b2a6c9,0x000000000002b08b,0x00000000017343cc1,0x0000000000000000,0x00000000ad4000000,0x0000000000000000,0x00000000017380000},
+ { 0x0000000000005028,0x0087c81f21883663e,0x000000206e33b038,0x0004369b27148d318,0x0000000000000000,0x00880000000000000,0x0000000000000000,0x00043800000000000},
+ { 0x0000000000000002,0x0000d1ffbb914da7a,0x0000000000041f74,0x0000000054719df33,0x0000000000000000,0x0000d200000000000,0x0000000000000000,0x00000000548000000},
+ { 0x0000000000000012,0x00000133e9528ccea,0x00000000000000d3,0x0000000000000256a,0x0000000000000000,0x00000134000000000,0x00000000000000d0,0x00000000000002570},
+ { 0x0000000000000001,0x0003147e5f669c115,0x00000000005848bd,0x000280c0bb1c72345,0x0000000000000000,0x00031500000000000,0x0000000000000000,0x00028100000000000},
+ { 0x0000000000000191,0x0a722bee4fffe0926,0x000000000048e74c,0x0000000320dfbd943,0x0000000000000000,0x0a740000000000000,0x0000000000000000,0x00000003210000000},
+ { 0x000000000003c2b3,0x000048aada9a4b040,0x00000001bb788a03,0x0000000073c9856c5,0x0000000000000000,0x000048c0000000000,0x00000001ba000000,0x0000000073e000000},
+ { 0x000000000000006b,0x000019fe50d0cf5ec,0x00000000000b87fa,0x000000004f7f79a62,0x0000000000000000,0x00001a00000000000,0x0000000000000000,0x000000004f8000000},
+ { 0x0000000000000076,0x0000502b70f24bcbf,0x000000000557343e,0x0000002acd44e6ae9,0x0000000000000000,0x00005040000000000,0x0000000000000000,0x0000002ad00000000},
+ { 0x000000000000007d,0x0000000000001efa8,0x00000000000027de,0x00000000000007234,0x0000000000000000,0x0000000000001f000,0x00000000000027c0,0x00000000000007240},
+ { 0x0000000000000c4e,0x00008054c3bcc70ce,0x00000000001762c9,0x00001442b9b5cc0e3,0x0000000000000000,0x00008080000000000,0x0000000000000000,0x00001448000000000},
+ { 0x000000000000361b,0x00003dad0835e175c,0x0000000000026970,0x000000000000271ec,0x0000000000000000,0x00003db0000000000,0x0000000000026970,0x000000000000271ec},
+ { 0x000000000c107fbd,0x00005cb8ccdc66d0e,0x00002152e89c3a8f,0x00001598de4bcbc27,0x0000000000000000,0x00005cc0000000000,0x0000210000000000,0x000015a0000000000},
+ { 0x0000000000003a0b,0x00000006fdd5cc574,0x000000000003bff7,0x00000002a09ec0d31,0x0000000000000000,0x00000006fe0000000,0x0000000000000000,0x00000002a10000000},
+ { 0x0000000000000000,0x048b65d4b4110e2b3,0x00000000000025f3,0x00000099ba1fee9cc,0x0000000000000000,0x048c0000000000000,0x0000000000000000,0x00000099c00000000},
+ { 0x000000000000000e,0x000009059253e6b77,0x0000000000aa0a8f,0x000007f9ac0b69e5a,0x0000000000000000,0x00000908000000000,0x0000000000000000,0x000007fa000000000},
+ { 0x000000000000000a,0x0000047fc0dc8cdd8,0x0000000000000287,0x0000035e39e554389,0x0000000000000000,0x00000480000000000,0x0000000000000000,0x0000035f000000000},
+ { 0x000000000000000c,0x0c6936debd9cc22c0,0x0000000000000013,0x00000033381b2c20b,0x0000000000000000,0x0c6c0000000000000,0x0000000000000000,0x00000033400000000},
+ { 0x0000000000000031,0x0000202a41e68e790,0x000000000000173a,0x00000000228a00be3,0x0000000000000000,0x00002030000000000,0x0000000000000000,0x00000000229000000},
+ { 0x000000000000c623,0x0008559d5bd9e935f,0x000000000000e4a6,0x00000000000020d67,0x0000000000000000,0x00085800000000000,0x000000000000e480,0x00000000000020d80},
+ { 0x0000000000001019,0x00000fdd13e7ff611,0x0000000000294503,0x0000000bdddef3101,0x0000000000000000,0x00000fe0000000000,0x0000000000000000,0x0000000be00000000},
+ { 0x00000000000012ee,0x003513eb6b829cd39,0x0000000ef888459e,0x00000009ce5367583,0x0000000000000000,0x00352000000000000,0x0000000ec0000000,0x00000009d00000000},
+ { 0x000000003c897e16,0x06628b714f26e5fcf,0x000000233417f573,0x00001dc7860ab7959,0x0000000000000000,0x06640000000000000,0x0000000000000000,0x00001dc8000000000},
+ { 0x00000000000a691f,0x00000013cea3f1800,0x00000000003f9e5e,0x0000000007e7b513b,0x0000000000000000,0x00000013d00000000,0x0000000000200000,0x0000000007e800000},
+ { 0x000000000003ec01,0x000001d5d91747837,0x00000000043fae14,0x0000006496b07efbf,0x0000000000000000,0x000001d6000000000,0x0000000000000000,0x00000064a00000000},
+ { 0x0000000000000039,0x09cbe1b83c8a542c5,0x0000000000014a92,0x038469a4d58ead000,0x0000000000000000,0x09cc0000000000000,0x0000000000000000,0x03850000000000000},
+ { 0x0000000000000018,0x00bcbb00fa5bb544e,0x000000000000020c,0x000000031c781c574,0x0000000000000000,0x00bcc000000000000,0x0000000000000000,0x000000031d0000000},
+ { 0x0000000000000fbd,0x00015cee21fc88f8a,0x0000000002cf14f5,0x000000062374392c9,0x0000000000000000,0x00015d00000000000,0x0000000000000000,0x00000006240000000},
+ { 0x0000000000000003,0x000540649bd0ed0c8,0x000000000007d56f,0x00000380e4643e156,0x0000000000000000,0x00054200000000000,0x0000000000000000,0x00000381000000000},
+ { 0x0000000000000003,0x00000000cfe54b955,0x0000000487ad9ceb,0x00000000c52878597,0x0000000000000000,0x00000000d00000000,0x0000000486000000,0x00000000c54000000},
+ { 0x00000000000003dc,0x01369f913424f519b,0x000000000000a723,0x000000001fa478680,0x0000000000000000,0x01370000000000000,0x0000000000000000,0x000000001fa800000},
+ { 0x000000000000108e,0x0000234fb5c6f1fee,0x00000000000b45c4,0x00000000001fc3d41,0x0000000000000000,0x00002350000000000,0x00000000000b0000,0x00000000001fc8000},
+ { 0x000005f57f71fc20,0x001e70485828bfb1e,0x00011498ae17a08f,0x000189831268ea68b,0x0000000000000000,0x001e7800000000000,0x0001100000000000,0x00018a00000000000},
+ { 0x0000000000005fcc,0x02462554b7118066e,0x00000000001e3373,0x0009fe37050da164e,0x0000000000000000,0x02470000000000000,0x0000000000000000,0x000a0000000000000},
+ { 0x0000000000000050,0x000158a817fba148b,0x00000002c181689b,0x0000031623236615b,0x0000000000000000,0x00015900000000000,0x0000000000000000,0x00000317000000000},
+ { 0x0000000001adf565,0x001a5b61071f6865c,0x0000000884f9728b,0x000003291047d23e2,0x0000000000000000,0x001a6000000000000,0x0000000000000000,0x0000032a000000000},
+ { 0x00000000380f8b10,0x00005b68cc1dcacea,0x00000051e0933d87,0x00000328b092a67a1,0x0000000000000000,0x00005b80000000000,0x0000005000000000,0x00000329000000000},
+ { 0x0000000000000005,0x026cdd511dfc1f4c9,0x000000000000001e,0x00010607698882025,0x0000000000000000,0x026d0000000000000,0x0000000000000000,0x00010680000000000},
+ { 0x0000000000000077,0x0001f2d7eb26a56dd,0x0000000000000083,0x000000000000001a7,0x0000000000000000,0x0001f300000000000,0x0000000000000083,0x000000000000001a7},
+ { 0x0000000000000001,0x0000036ba3a5ac5c6,0x000000000000000b,0x00000005626ec7015,0x0000000000000000,0x0000036c000000000,0x0000000000000000,0x00000005640000000},
+ { 0x00000000017ad2f6,0x00054d1b0a667ec95,0x0000000005c66c3e,0x000000003a23336cf,0x0000000000000000,0x00054e00000000000,0x0000000005000000,0x000000003a3000000},
+ { 0x00000000b5b8ac9c,0x0c2aeff3392ba714c,0x00000002c98ce039,0x00000fd86b9c39507,0x0000000000000000,0x0c2c0000000000000,0x0000000000000000,0x00000fdc000000000},
+ { 0x00003957eab48372,0x012be0d8b7099fed4,0x00004fb470c27008,0x0000bf5cf57b89eea,0x0000000000000000,0x012c0000000000000,0x00004c0000000000,0x0000bf80000000000},
+ { 0x000001e89dcd94cc,0x0016f0465aaba9a9e,0x001276275837ac9b,0x0002a94c3228a06fe,0x0000000000000000,0x0016f800000000000,0x0012700000000000,0x0002a980000000000},
+ { 0x000000000000b11b,0x000021c376d6b4129,0x0000000001be4a4b,0x000000001a8fc05f8,0x0000000000000000,0x000021d0000000000,0x0000000001800000,0x000000001a9000000},
+ { 0x0000000000004c54,0x00031ad1af46416cb,0x0000000000037482,0x000000000a8e120a2,0x0000000000000000,0x00031b00000000000,0x0000000000000000,0x000000000a9000000},
+ { 0x0000000000000012,0x00cd7acd3e60031eb,0x000000000000002b,0x001bdf29b15fe9147,0x0000000000000000,0x00cd8000000000000,0x0000000000000000,0x001be000000000000},
+ { 0x00000000000000e6,0x0000003717b5181e7,0x0000000000000189,0x00000000000016964,0x0000000000000000,0x00000037200000000,0x0000000000000180,0x00000000000016980},
+ { 0x0000000000000000,0x003480f633068a303,0x00000000000079d2,0x0000000000000f515,0x0000000000000000,0x00349000000000000,0x00000000000079c0,0x0000000000000f520},
+ { 0x0000000000000009,0x0001746f2c44b5fcc,0x000062e0246fb21a,0x00007067614ff6491,0x0000000000000000,0x00017480000000000,0x0000620000000000,0x00007080000000000},
+ { 0x000000005c247e1b,0x029d989e10e9a2c90,0x000010ff14944759,0x00000e7a85e71fb26,0x0000000000000000,0x029e0000000000000,0x000010c000000000,0x00000e7c000000000},
+ { 0x0000000000000039,0x09f31bebf33671e44,0x0000000000006232,0x00000fa22cef83ad2,0x0000000000000000,0x09f40000000000000,0x0000000000000000,0x00000fa4000000000},
+ { 0x000000000000001d,0x000042d767fc55c90,0x00000000034ca41c,0x0000098753a5594e9,0x0000000000000000,0x000042e0000000000,0x0000000000000000,0x00000988000000000},
+ { 0x000000000f65b4b6,0x0864e9b82ae0f08ad,0x00000144cbb3dc6c,0x0706c65a998ffa5d3,0x0000000000000000,0x08680000000000000,0x0000000000000000,0x07080000000000000},
+ { 0x0000000000000005,0x0000001f4e5074833,0x000000000165745c,0x000000001604b6ebd,0x0000000000000000,0x0000001f500000000,0x0000000001000000,0x00000000160800000},
+ { 0x00000000001951bb,0x0006bb557fa5ec8fd,0x000000006ccdfd22,0x00004fd84449f8249,0x0000000000000000,0x0006bc00000000000,0x0000000000000000,0x00004fe0000000000},
+ { 0x0000000000000089,0x00006de61329e0888,0x00000000004b1647,0x000000000137079d9,0x0000000000000000,0x00006e00000000000,0x0000000000480000,0x00000000013780000},
+ { 0x00000000000903c1,0x0000b7df4971e0121,0x00000001eb1eef0e,0x000000005eaf285ad,0x0000000000000000,0x0000b800000000000,0x00000001ea000000,0x000000005ec000000},
+ { 0x00000000001d454d,0x000000000f7b6c835,0x00000000001e8ba9,0x0000000000d1a942e,0x0000000000000000,0x000000000f7c00000,0x00000000001c0000,0x0000000000d1c0000},
+ { 0x0000000000000003,0x00000000007924c12,0x000000000000002a,0x00000000000031bf9,0x0000000000000000,0x00000000007940000,0x0000000000000000,0x00000000000031c00},
+ { 0x000000000000001d,0x00000000c00b9240e,0x000000000000007c,0x0000000000bb54692,0x0000000000000000,0x00000000c04000000,0x0000000000000000,0x0000000000bb80000},
+ { 0x00000000002e1c85,0x0084e4425f7485316,0x00000002baeb5a35,0x0000000f46e3343b5,0x0000000000000000,0x00850000000000000,0x0000000280000000,0x0000000f480000000},
+ { 0x000000000000000f,0x08bc27e8f71a99b35,0x000000000e5661bd,0x000004547a3e36ba7,0x0000000000000000,0x08c00000000000000,0x0000000000000000,0x00000456000000000},
+ { 0x00000000d9648c5e,0x0000000776e22e960,0x0000003bd0868110,0x0000000510d46f4b4,0x00000000c0000000,0x00000007780000000,0x0000003bd0000000,0x00000005110000000},
+ { 0x0000000000000fef,0x0000012f050309101,0x00000043003c6c18,0x00000052c45df5b65,0x0000000000000000,0x0000012f800000000,0x0000004200000000,0x00000052e00000000},
+ { 0x0000000000000002,0x0000000c2649b5f2f,0x00000000000000fd,0x00000000000012a68,0x0000000000000000,0x0000000c280000000,0x0000000000000080,0x00000000000012a80},
+ { 0x0000000009682c00,0x000c7a8810664eb46,0x0007eef40ac0895d,0x000544e47dc156229,0x0000000000000000,0x000c7c00000000000,0x0007e00000000000,0x00054600000000000},
+ { 0x000000000007c1ea,0x00001e91e775847dc,0x000000000009823e,0x0000000000038848b,0x0000000000000000,0x00001e98000000000,0x0000000000098000,0x00000000000389000},
+ { 0x0000000000004085,0x0001f4d8bca6d6c93,0x000000000000875d,0x0000000000c11204f,0x0000000000000000,0x0001f500000000000,0x0000000000000000,0x0000000000c140000},
+ { 0x000000000000004b,0x0285a95e08134a1ab,0x00000000082abbdc,0x00006b4fe2948da22,0x0000000000000000,0x02860000000000000,0x0000000000000000,0x00006b60000000000},
+ { 0x0000000000021684,0x00c3f9721c4ba7429,0x00000000012d8814,0x00000000047c563b6,0x0000000000000000,0x00c40000000000000,0x0000000001200000,0x00000000047e00000},
+ { 0x000018c465852838,0x001267880c5d2f0d7,0x000036c8bfeb619c,0x000004be190b111b5,0x0000000000000000,0x00126800000000000,0x000036c800000000,0x000004be800000000},
+ { 0x0000000000000006,0x0005e7b5cac4c686d,0x000000000000001e,0x000000353f7dcd211,0x0000000000000000,0x0005e800000000000,0x0000000000000000,0x00000035400000000},
+ { 0x00000000001dd02d,0x0243f1253dbaaa5dc,0x00000000003055f4,0x0110ca2d5301de730,0x0000000000000000,0x02440000000000000,0x0000000000000000,0x01110000000000000},
+ { 0x0000000000000013,0x01fd1d24dc44ebecb,0x000000000088bc7b,0x00000000001d22358,0x0000000000000000,0x01fd8000000000000,0x0000000000888000,0x00000000001d28000},
+ { 0x00000000001b4f47,0x004612757ee95693e,0x000006638c019313,0x000953c3127bb145e,0x0000000000000000,0x00462000000000000,0x0000000000000000,0x00095400000000000},
+ { 0x00000000000003f9,0x00003a3e968511850,0x00000000027bbe4a,0x00000002bbb55b24e,0x0000000000000000,0x00003a40000000000,0x0000000000000000,0x00000002bc0000000},
+ { 0x000000000000f8f6,0x0005401af99003799,0x000001f0186b22c5,0x00009d3a37a788643,0x0000000000000000,0x00054200000000000,0x0000000000000000,0x00009d40000000000},
+ { 0x0000000000182c4d,0x0068613ddcb070da7,0x00000000002c9bab,0x0006a78adf0317273,0x0000000000000000,0x00688000000000000,0x0000000000000000,0x0006a800000000000},
+ { 0x0000000000000042,0x018318e53aa0acff4,0x0000000001512574,0x00000022981248853,0x0000000000000000,0x01838000000000000,0x0000000000000000,0x00000022a00000000},
+ { 0x0000000000000011,0x000484a19d9d5e29f,0x00000000000000af,0x0001c6d96d2f0d50f,0x0000000000000000,0x00048600000000000,0x0000000000000000,0x0001c700000000000},
+ { 0x000000000000002d,0x00000631c236ab88b,0x00000068601048af,0x000000075dec34c2a,0x0000000000000000,0x00000632000000000,0x0000006860000000,0x000000075e0000000},
+ { 0x0000000000598b55,0x0000013a2d604dd64,0x0000000049a5d502,0x000000031141b33d1,0x0000000000000000,0x0000013a800000000,0x0000000040000000,0x00000003120000000},
+ { 0x000000841b2e6a03,0x0c37877e21f73916d,0x00000b7935cb4e09,0x00075534e0a6089ab,0x0000000000000000,0x0c380000000000000,0x0000000000000000,0x00075600000000000},
+ { 0x0000000000000011,0x061003e2a39202e41,0x000000d889586ee1,0x0005d2e9811ffefcd,0x0000000000000000,0x06120000000000000,0x0000000000000000,0x0005d400000000000},
+ { 0x000000000006fb8a,0x0000003f961d4c4df,0x0000000001557efd,0x000000078f65b1d7a,0x0000000000000000,0x0000003fa00000000,0x0000000000000000,0x00000007900000000},
+ { 0x0000000000376cde,0x000d55d718020f0b6,0x000000000e4aead1,0x0004cfef6c2660d01,0x0000000000000000,0x000d5800000000000,0x0000000000000000,0x0004d000000000000},
+ { 0x000000000000001e,0x0b332107f9a83147c,0x000000001c64b964,0x0000027338520fb31,0x0000000000000000,0x0b340000000000000,0x0000000000000000,0x00000274000000000},
+ { 0x00000000000001a7,0x034a897b9a5fb946c,0x000000e2d90dd4cd,0x0000048dc5ddb9207,0x0000000000000000,0x034b0000000000000,0x000000e000000000,0x0000048e000000000},
+ { 0x0000000000000060,0x000005655da10031c,0x0000000000011202,0x0000000edbf55e300,0x0000000000000000,0x00000566000000000,0x0000000000000000,0x0000000edc0000000},
+ { 0x0000000000000003,0x00368fa9f5848b040,0x000000000000001f,0x00000000000000038,0x0000000000000000,0x00369000000000000,0x000000000000001f,0x00000000000000038},
+ { 0x000000000000000d,0x002192f460faf8873,0x0000000000001258,0x000020e58fda52599,0x0000000000000000,0x0021a000000000000,0x0000000000000000,0x000020f0000000000},
+ { 0x0000000000000bb6,0x00000003e7dfe66e3,0x0000000000481e9a,0x0000000007ae0fc24,0x0000000000000000,0x00000003e80000000,0x0000000000400000,0x0000000007b000000},
+ { 0x0000000000000004,0x0000000000555fc27,0x00000000000002de,0x0000000000004f38a,0x0000000000000000,0x00000000005560000,0x0000000000000200,0x0000000000004f400},
+ { 0x000000000000000a,0x000075b140af43b36,0x00000001a485d0bf,0x00001437caffcb64f,0x0000000000000000,0x000075c0000000000,0x0000000000000000,0x00001438000000000},
+ { 0x0000000000000e18,0x00000b3b1b6eee8d9,0x00000000000727ff,0x000000001f22caae3,0x0000000000000000,0x00000b3c000000000,0x0000000000000000,0x000000001f2800000},
+ { 0x0000000000000084,0x0019f532c4f2e631e,0x000000d36672ec22,0x00000c3468737b6bb,0x0000000000000000,0x0019f800000000000,0x000000c000000000,0x00000c38000000000},
+ { 0x0000000000003e62,0x0012e89455b97956b,0x000000002d3f14e0,0x00018b08c9b56bb8a,0x0000000000000000,0x0012f000000000000,0x0000000000000000,0x00018b80000000000},
+ { 0x000000001a2c692b,0x0000d977e87b3b8e5,0x00000000288626c3,0x00000002117b3b316,0x0000000000000000,0x0000d980000000000,0x0000000020000000,0x00000002120000000},
+ { 0x0000000000000958,0x002372c58b0a5c591,0x000000000000198c,0x00000000000002d61,0x0000000000000000,0x00238000000000000,0x0000000000001988,0x00000000000002d68},
+ { 0x00000000476e2ff5,0x0f281430f59a49209,0x0000000f8729dc05,0x00000088b7296fa81,0x0000000000000000,0x0f2c0000000000000,0x0000000c00000000,0x00000088c00000000},
+ { 0x0000000000000030,0x0118692551071bd7f,0x000000000061b662,0x00000003815291f02,0x0000000000000000,0x01188000000000000,0x0000000000000000,0x00000003820000000},
+ { 0x000000000000001a,0x0071ca4643f2f3647,0x0000000361485f67,0x00000003dadb200f0,0x0000000000000000,0x0071e000000000000,0x0000000360000000,0x00000003db0000000},
+ { 0x0000000016b76fd0,0x0001dd7b036a55bbc,0x000008523e930372,0x0001a737f6ee668af,0x0000000000000000,0x0001dd80000000000,0x0000080000000000,0x0001a780000000000},
+ { 0x0000000000000027,0x0019eb2909cce622a,0x000000000009348a,0x00001ca6cfd21a31f,0x0000000000000000,0x0019f000000000000,0x0000000000000000,0x00001ca8000000000},
+ { 0x00000000001e2513,0x014ef727e15d9c3e0,0x011af293f0dc4c27,0x003fe65d5a6e73ebe,0x0000000000000000,0x014f0000000000000,0x011a000000000000,0x003ff000000000000},
+ { 0x0000000000000002,0x0000000000002e95f,0x0000000000000009,0x00000000000001d9a,0x0000000000000000,0x0000000000002ea00,0x0000000000000008,0x00000000000001da0},
+ { 0x0000000000000532,0x000000023477f67c3,0x0000000000003734,0x0000000000000c10d,0x0000000000000000,0x00000002350000000,0x0000000000003700,0x0000000000000c140},
+ { 0x0000000000020826,0x00000000146554192,0x000000000307962d,0x000000000039c9b65,0x0000000000000000,0x00000000146800000,0x0000000003078000,0x000000000039cc000},
+ { 0x0000000000000038,0x0023ef47bd2112b5c,0x0000000000ae3244,0x000000035fd41d270,0x0000000000000000,0x0023f000000000000,0x0000000000000000,0x00000003600000000},
+ { 0x0000000000039561,0x00098f13f60bbc6a4,0x00000b97bc6bdccc,0x00012d503abc61481,0x0000000000000000,0x00099000000000000,0x0000080000000000,0x00012d80000000000},
+ { 0x000000000000001e,0x004b0ad1eb3c5abcf,0x00000000002ee327,0x00000008786469931,0x0000000000000000,0x004b2000000000000,0x0000000000000000,0x000000087c0000000},
+ { 0x00000000000db299,0x05d6da903cb3b8138,0x0000000000f614e5,0x0000643d5d8c42e22,0x0000000000000000,0x05d80000000000000,0x0000000000000000,0x00006440000000000},
+ { 0x000000000000000f,0x0f2d4b119369653f5,0x000000000ee5780b,0x00478912bd30f7c16,0x0000000000000000,0x0f300000000000000,0x0000000000000000,0x0047a000000000000},
+ { 0x000000000000050a,0x000000077101768a6,0x0000000000988d8c,0x00000003297dc7d59,0x0000000000000000,0x00000007720000000,0x0000000000000000,0x000000032a0000000},
+ { 0x000000000000009b,0x0000977ba37cea1ae,0x000000e37ca46de0,0x000018431dfaae9a4,0x0000000000000000,0x00009780000000000,0x0000008000000000,0x00001848000000000},
+ { 0x0000000000000007,0x00113231875f30780,0x0000000000dc49fb,0x0000036abaeef7f59,0x0000000000000000,0x00113800000000000,0x0000000000000000,0x0000036b000000000},
+ { 0x00000000008327ce,0x0023493f0a7aea5e5,0x0000002962d0e1a6,0x0000063b89f52d1f1,0x0000000000000000,0x00235000000000000,0x0000002000000000,0x0000063c000000000},
+ { 0x00000000000002cb,0x000f94eb7572cd003,0x00000001682a51af,0x0000000c575be5690,0x0000000000000000,0x000f9800000000000,0x0000000140000000,0x0000000c580000000},
+ { 0x0000000000000009,0x0069839f1d4a8b248,0x00000002cf506bd8,0x000fbbbcced524da1,0x0000000000000000,0x0069a000000000000,0x0000000000000000,0x000fbc00000000000},
+ { 0x00000000000001a2,0x0000012bffd9cf43d,0x000000001a451aeb,0x00000005e924916db,0x0000000000000000,0x0000012c000000000,0x0000000000000000,0x00000005ea0000000},
+ { 0x0000000000000001,0x01012486e6bb4ac20,0x0000000000000012,0x0018ad3516b37c939,0x0000000000000000,0x01018000000000000,0x0000000000000000,0x0018b000000000000},
+ { 0x0000000000000028,0x0005e6a7b863c95e1,0x0000000000000037,0x0000000000005647f,0x0000000000000000,0x0005e800000000000,0x0000000000000000,0x00000000000056600},
+ { 0x00000010c0e8e9d8,0x00007fbade42e9811,0x000049024b9cdd9e,0x000006b08cea8873b,0x0000000000000000,0x00007fc0000000000,0x0000490000000000,0x000006b1000000000},
+ { 0x0000000000000003,0x000c8f81588ce7673,0x00000000000129fd,0x000000003ee97ae59,0x0000000000000000,0x000c9000000000000,0x0000000000000000,0x000000003ef000000},
+ { 0x00000000000003c8,0x0006a1cce8c6f16e4,0x000012eca253bc6c,0x00007c397d724140c,0x0000000000000000,0x0006a200000000000,0x0000120000000000,0x00007c40000000000},
+ { 0x0000000000000018,0x0000000637236132e,0x0000000000005f5a,0x0000000000001cff9,0x0000000000000000,0x00000006380000000,0x0000000000005f00,0x0000000000001d000},
+ { 0x000000407d141a6b,0x0044dbfb832910b87,0x000002f1db601364,0x001a41cdcfd1dd871,0x0000000000000000,0x0044e000000000000,0x0000000000000000,0x001a4800000000000},
+ { 0x00000000000d7e31,0x0000000253f2a6759,0x00000000001720d0,0x00000000000b4a57f,0x0000000000000000,0x00000002540000000,0x0000000000170000,0x00000000000b4c000},
+ { 0x000000000000143f,0x000006690104a1ff2,0x0000000000007feb,0x0000000009fc86624,0x0000000000000000,0x0000066a000000000,0x0000000000000000,0x000000000a0000000},
+ { 0x0000000000000001,0x000000001af03eef7,0x0000000000000003,0x00000000000000012,0x0000000000000000,0x000000001af800000,0x0000000000000003,0x00000000000000012},
+ { 0x00000000016f68b0,0x072c2967a14370af1,0x00000001ebbc422a,0x000000429d43db557,0x0000000000000000,0x072e0000000000000,0x0000000000000000,0x00000042a00000000},
+ { 0x00000000000692cb,0x000032a86b6d58921,0x000000000008402a,0x00000064f9dd1d73d,0x0000000000000000,0x000032b0000000000,0x0000000000000000,0x00000065000000000},
+ { 0x0000000000000003,0x000ee9a073ed6f17a,0x000000000000d39e,0x0000000149dbb25e2,0x0000000000000000,0x000eec00000000000,0x0000000000000000,0x000000014a0000000},
+ { 0x0000000000000262,0x00001be6ba0b36bb1,0x000000000000ee30,0x000000f905511f557,0x0000000000000000,0x00001be8000000000,0x0000000000000000,0x000000f9400000000},
+ { 0x000000000007826f,0x0007e0eeeaf8752da,0x00000000ae1cd896,0x0000001adbc78c730,0x0000000000000000,0x0007e200000000000,0x0000000080000000,0x0000001ae00000000},
+ { 0x0000000000000003,0x000000000028e19de,0x0000000000000365,0x000000000000a8ff2,0x0000000000000000,0x000000000028f0000,0x0000000000000000,0x000000000000a9000},
+ { 0x0000000000000007,0x00000000000fc9d4c,0x0000000000000217,0x000000000000098e5,0x0000000000000000,0x00000000000fcc000,0x0000000000000200,0x00000000000009900},
+ { 0x0000000000000020,0x002a815acae612319,0x00000000000002e3,0x000036ce367a76691,0x0000000000000000,0x002a9000000000000,0x0000000000000000,0x000036d0000000000},
+ { 0x0000000000000007,0x00003de0c727099d6,0x00000000000062a6,0x0000000000000f936,0x0000000000000000,0x00003df0000000000,0x0000000000006280,0x0000000000000f940},
+ { 0x0000000000000002,0x000000001f8b6081f,0x000000000000000f,0x00000000080f5f47f,0x0000000000000000,0x000000001f9000000,0x0000000000000000,0x00000000081000000},
+ { 0x000000000000a0a3,0x000002028486bce5f,0x000000000000bd24,0x000000000073fd93b,0x0000000000000000,0x00000203000000000,0x0000000000000000,0x00000000007400000},
+ { 0x000000000000006b,0x00fe2713a2e78ec0c,0x000000000a3ee2ef,0x0002d6b8f1e887c88,0x0000000000000000,0x00fe4000000000000,0x0000000000000000,0x0002d700000000000},
+ { 0x00000001e1d46625,0x016d77e8fcb2275a8,0x00017b1fcf89836d,0x0000cef46cde3e47e,0x0000000000000000,0x016d8000000000000,0x0001780000000000,0x0000cf00000000000},
+ { 0x0000000073c4888b,0x00000061f2612087c,0x00000002f2b59ba5,0x000000003a404f1c0,0x0000000000000000,0x00000062000000000,0x00000002f2800000,0x000000003a4400000},
+ { 0x0000000000000dc2,0x00135d07d34d5ac25,0x00000000055506f0,0x0000005e68cef9a19,0x0000000000000000,0x00136000000000000,0x0000000000000000,0x0000005e800000000},
+ { 0x0000000000000071,0x0003e8a74a15402fa,0x000000000db19478,0x000000000f50ba272,0x0000000000000000,0x0003e900000000000,0x000000000d800000,0x000000000f5400000},
+ { 0x0000000000000013,0x000000001f81cdc95,0x00000000000016d2,0x0000000018361e47c,0x0000000000000000,0x000000001f8800000,0x0000000000000000,0x00000000183800000},
+ { 0x00000000fff9dd92,0x00329c7e66cc2fdfd,0x000001254a67529c,0x0000185838935a240,0x0000000000000000,0x0032a000000000000,0x0000010000000000,0x00001860000000000},
+ { 0x0000000000000703,0x019cf20393417d6b1,0x000000002c8df7ca,0x00000003d9f51fb84,0x0000000000000000,0x019d0000000000000,0x0000000020000000,0x00000003da0000000},
+ { 0x0000000000000000,0x00bc5ef0f1354bc0b,0x00000000000f0199,0x000005945f88caa6e,0x0000000000000000,0x00bc8000000000000,0x0000000000000000,0x00000596000000000},
+ { 0x0000000000003c1e,0x0003ade5dad64d3fb,0x000bad65a2c10cfa,0x0001501f08f06a1ba,0x0000000000000000,0x0003ae00000000000,0x000bac0000000000,0x00015040000000000},
+ { 0x000000039d38bc73,0x0002d92301fe32b57,0x0000005fcfd1bcbf,0x0000ed9b0c1522d22,0x0000000000000000,0x0002da00000000000,0x0000000000000000,0x0000edc0000000000},
+ { 0x0000000000000166,0x000000000002a2097,0x000000000000656f,0x000000000001df4d7,0x0000000000000000,0x000000000002a3000,0x0000000000006000,0x000000000001df800},
+ { 0x000000000000091f,0x0006fa3aeedc427a9,0x000000ce50e11206,0x0001a31f20b2d56cf,0x0000000000000000,0x0006fc00000000000,0x0000000000000000,0x0001a380000000000},
+ { 0x00000000000015e8,0x0000de16c468fbc2a,0x000000067b0a71d3,0x0000003a192adc02f,0x0000000000000000,0x0000de40000000000,0x0000000600000000,0x0000003a200000000},
+ { 0x000000000000007b,0x0000000000d227999,0x0000000000000163,0x000000000001b3120,0x0000000000000000,0x0000000000d240000,0x0000000000000000,0x000000000001b3800},
+ { 0x000000000000000b,0x00018b1c4762032b2,0x00000ac016bf0a93,0x000003115c60670bf,0x0000000000000000,0x00018b80000000000,0x00000ac000000000,0x00000312000000000},
+ { 0x0000000000f8131b,0x000005c93a22fc970,0x00000001e7a56d59,0x0000001a6314a512b,0x0000000000000000,0x000005ca000000000,0x0000000180000000,0x0000001a680000000},
+ { 0x000000000000002c,0x000035dadc13f0d2d,0x00000000748c5ce7,0x00000000cbbe75d1c,0x0000000000000000,0x000035e0000000000,0x0000000074000000,0x00000000cbc000000},
+ { 0x000000000037be53,0x000111eae5abd9ce2,0x00000000015891d3,0x0000041a242b1afbd,0x0000000000000000,0x00011200000000000,0x0000000000000000,0x0000041c000000000},
+ { 0x00000000000235d2,0x000822630ee90049a,0x000001bf6607a1ff,0x0000c8d273a68f393,0x0000000000000000,0x00082400000000000,0x0000000000000000,0x0000c900000000000},
+ { 0x0000000000000006,0x000000000d2684ee0,0x00000000000006ca,0x00000000000001445,0x0000000000000000,0x000000000d2800000,0x00000000000006ca,0x00000000000001445},
+ { 0x0000011e3e474c22,0x03a37f648116e8337,0x000004a5abff96ac,0x0055068689aeb77cc,0x0000000000000000,0x03a40000000000000,0x0000000000000000,0x00552000000000000},
+ { 0x00000000000e415d,0x015920a89e6c45279,0x0000002ccc157927,0x00000009bb79d981e,0x0000000000000000,0x01598000000000000,0x0000002cc0000000,0x00000009bc0000000},
+ { 0x000000000000000b,0x01a0cfa43fcb0155a,0x000000000001b325,0x000034f9169e8e020,0x0000000000000000,0x01a10000000000000,0x0000000000000000,0x00003500000000000},
+ { 0x0000000000000003,0x043f6fa172858787f,0x000000000000002a,0x0000000004dbc0c13,0x0000000000000000,0x04400000000000000,0x0000000000000000,0x0000000004dc00000},
+ { 0x0000000000000013,0x000006b0e6de22b7f,0x0000000001961520,0x000001fe4bdb42f88,0x0000000000000000,0x000006b2000000000,0x0000000000000000,0x000001fe800000000},
+ { 0x0000000000000131,0x00000042c982b82ff,0x00000000000cad79,0x00000000001201f62,0x0000000000000000,0x00000042e00000000,0x00000000000c8000,0x00000000001208000},
+ { 0x00000000000006dd,0x002e79f9ca17e28f4,0x00000001013150d5,0x00016268756b7613f,0x0000000000000000,0x002e8000000000000,0x0000000000000000,0x00016280000000000},
+ { 0x000000000000000f,0x0006c5291eb0a2a80,0x0000a6f506990105,0x00001a6c599427b17,0x0000000000000000,0x0006c600000000000,0x0000a68000000000,0x00001a70000000000},
+ { 0x000000000e09aa2c,0x0002d434ccaa4bde3,0x00000169658c8933,0x000001a217e977103,0x0000000000000000,0x0002d500000000000,0x0000016800000000,0x000001a2800000000},
+ { 0x00000000000003df,0x0016ba53d90f312b5,0x000010f880c16693,0x000003eafee9b8d8a,0x0000000000000000,0x0016c000000000000,0x000010f000000000,0x000003eb000000000},
+ { 0x00000000001c7732,0x0002ba3005632beb5,0x00000000006a0cbe,0x0000000faf8c1d61f,0x0000000000000000,0x0002bb00000000000,0x0000000000000000,0x0000000fb00000000},
+ { 0x0000000000003933,0x0000007fc5e8778e3,0x0000000000080c89,0x00000000355ff26f9,0x0000000000000000,0x0000007fe00000000,0x0000000000000000,0x00000000356000000},
+ { 0x0000000000000036,0x000022fbe139f6bc6,0x000000000000003a,0x000000000000001b9,0x0000000000000000,0x00002300000000000,0x000000000000003a,0x000000000000001b9},
+ { 0x00000000000004cd,0x0013196960043faa9,0x00000000000006e9,0x0000000000028bbb4,0x0000000000000000,0x00132000000000000,0x0000000000000000,0x0000000000028c000},
+ { 0x0000000000000a7d,0x0000c08ca47c05789,0x00000a1db5fc5c4d,0x000004abfe903b6db,0x0000000000000000,0x0000c0c0000000000,0x00000a0000000000,0x000004ac000000000},
+ { 0x0000000000000259,0x000002c30bb18e05c,0x0000000000006bad,0x00000000004b6a190,0x0000000000000000,0x000002c4000000000,0x0000000000000000,0x00000000004b80000},
+ { 0x0000000000006094,0x002f238d6de0b34bb,0x0000031bdba3833c,0x00007203a4cfd872d,0x0000000000000000,0x002f3000000000000,0x0000020000000000,0x00007220000000000},
+ { 0x000000000000000e,0x0000ac85cfc2e775a,0x000000000000683f,0x00000000000059426,0x0000000000000000,0x0000acc0000000000,0x0000000000006800,0x00000000000059600},
+ { 0x00000000dbcba961,0x02e15fd16ed4f21ab,0x00a078a20e0a36cc,0x01fd369655c5340d6,0x0000000000000000,0x02e20000000000000,0x00a0000000000000,0x01fd8000000000000},
+ { 0x0000000000000009,0x0059bac69d8e1517a,0x00000000098e8a37,0x000000050a285bb43,0x0000000000000000,0x0059c000000000000,0x0000000000000000,0x000000050c0000000},
+ { 0x0000000000000213,0x0004b8b6d2dcdda3e,0x000000000000bf66,0x000000000094f3789,0x0000000000000000,0x0004ba00000000000,0x0000000000000000,0x00000000009500000},
+ { 0x000000000000686c,0x02048bd829a144920,0x000000000692a8bc,0x0001543b1372ef28e,0x0000000000000000,0x02050000000000000,0x0000000000000000,0x00015480000000000},
+ { 0x000000000000013b,0x006557d1b71b1c35b,0x0000001222c0390a,0x00000040661585a34,0x0000000000000000,0x00656000000000000,0x0000001200000000,0x00000040700000000},
+ { 0x0000000000000012,0x0052bdc7d6bad288f,0x000000000000942a,0x0002179b65d74ad9c,0x0000000000000000,0x0052c000000000000,0x0000000000000000,0x00021800000000000},
+ { 0x000000000000007f,0x0579dee727c102415,0x000000740c675229,0x0000001deb0c29ece,0x0000000000000000,0x057a0000000000000,0x0000007400000000,0x0000001df00000000},
+ { 0x0000000000000000,0x00fdc68f2e1b7ba46,0x00000000a729cd72,0x000000eb7dbe888ce,0x0000000000000000,0x00fe0000000000000,0x0000000000000000,0x000000eb800000000},
+ { 0x0000000000039fbe,0x0000040260c080646,0x00000001ae773906,0x00000011311031e1e,0x0000000000000000,0x00000404000000000,0x0000000180000000,0x00000011380000000},
+ { 0x00000000000000ed,0x006b4996148f17027,0x0000000000aea77b,0x0000000001d7c9f08,0x0000000000000000,0x006b6000000000000,0x0000000000a80000,0x0000000001d800000},
+ { 0x0000000000000007,0x000000000045a30de,0x0000000000000024,0x000000000000d203a,0x0000000000000000,0x000000000045c0000,0x0000000000000000,0x000000000000d2400},
+ { 0x0000000000000171,0x00000018fcb8dce63,0x000000000000063d,0x0000000000000083b,0x0000000000000000,0x00000019000000000,0x000000000000063d,0x0000000000000083b},
+ { 0x0000000002c6b605,0x0000697e48a6633aa,0x000000000487fe2f,0x00000eb057902bdff,0x0000000000000000,0x00006980000000000,0x0000000000000000,0x00000eb4000000000},
+ { 0x00000000003c5462,0x02e0574f8227ac3dd,0x0000ffb188521db7,0x00a206ba50cef2539,0x0000000000000000,0x02e10000000000000,0x0000000000000000,0x00a24000000000000},
+ { 0x00000000000005d5,0x000002cc708b38677,0x000000005c3a81e7,0x00000069753a7530f,0x0000000000000000,0x000002cd000000000,0x0000000000000000,0x00000069800000000},
+ { 0x00000003e0870924,0x000f6f3b7bf8fa629,0x000032d23c776900,0x00066678230f73813,0x0000000000000000,0x000f7000000000000,0x0000200000000000,0x00066800000000000},
+ { 0x000000330fd86ba4,0x00015c096d8c098e0,0x000000e482184c7d,0x00000123886d593ba,0x0000000000000000,0x00015c80000000000,0x000000e000000000,0x00000124000000000},
+ { 0x000000000000056e,0x026c83c1ba8e8a58c,0x0000000001c32a11,0x002df04716b077506,0x0000000000000000,0x026d0000000000000,0x0000000000000000,0x002e0000000000000},
+ { 0x00000000000009ab,0x013d043840a0bfd9f,0x000000000000480c,0x0002046c717b06454,0x0000000000000000,0x013d8000000000000,0x0000000000000000,0x00020500000000000},
+ { 0x000005bd490b897d,0x07bff9df5f98bcfe1,0x000007aee16e977b,0x00250108c3abc977a,0x0000000000000000,0x07c00000000000000,0x0000000000000000,0x00251000000000000},
+ { 0x000000000000a087,0x005dc23f125f3b55d,0x00000005d693cb0f,0x000004b216d4232e8,0x0000000000000000,0x005de000000000000,0x0000000000000000,0x000004b4000000000},
+ { 0x000000000000b5a7,0x09cb96a32094f3d74,0x000000000039213a,0x0000000147c64b812,0x0000000000000000,0x09cc0000000000000,0x0000000000000000,0x00000001480000000},
+ { 0x0000000000000a71,0x000105f69db2e21e0,0x000000571d5af2ba,0x00000069ffdd09a49,0x0000000000000000,0x00010600000000000,0x0000005600000000,0x0000006a000000000},
+ { 0x000000000000050c,0x00a4142348b287c29,0x00000000000005f6,0x00000000000ac6135,0x0000000000000000,0x00a44000000000000,0x0000000000000000,0x00000000000ac8000},
+ { 0x0000000000000281,0x035d06fdd6bf88aca,0x000000001a84232e,0x0000000009fd02895,0x0000000000000000,0x035e0000000000000,0x000000001a800000,0x000000000a0000000},
+ { 0x0000000000000004,0x00143621d936cd75b,0x0000000000001042,0x000000000000011d5,0x0000000000000000,0x00143800000000000,0x0000000000001042,0x000000000000011d5},
+ { 0x0000000000000004,0x000000000e87d15c4,0x0000000000aaaba2,0x0000000005bdb2b86,0x0000000000000000,0x000000000e8800000,0x0000000000a00000,0x0000000005be00000},
+ { 0x00000000000bfd26,0x0a56290f7362787cb,0x00ff5c3a3ebf1721,0x08ceb80cc3511949d,0x0000000000000000,0x0a580000000000000,0x00c0000000000000,0x08d00000000000000},
+ { 0x0000000000000002,0x00000e9352931dcfe,0x0000000000002cd6,0x0000000001fa4671e,0x0000000000000000,0x00000e94000000000,0x0000000000000000,0x0000000001fa80000},
+ { 0x0000000000000004,0x0000017162dd8e3e9,0x000000021dee5c55,0x00000001c67614525,0x0000000000000000,0x00000171800000000,0x0000000218000000,0x00000001c68000000},
+ { 0x00000000000000ca,0x031595d46a9b8d0e8,0x000000000000018d,0x0000000000066a7be,0x0000000000000000,0x03160000000000000,0x0000000000000000,0x0000000000066c000},
+ { 0x0000000000002fc6,0x0000041f8594fd2f3,0x00000001636f274f,0x000000d44b6fe6327,0x0000000000000000,0x00000420000000000,0x0000000000000000,0x000000d4800000000},
+ { 0x0000000000000ce0,0x08dc59c9ef9c277a6,0x00000000035534bf,0x00004737069c55a0f,0x0000000000000000,0x08e00000000000000,0x0000000000000000,0x00004740000000000},
+ { 0x0000000000000005,0x0000000003d3a51f0,0x0000000000000096,0x00000000000008d87,0x0000000000000000,0x0000000003d400000,0x0000000000000080,0x00000000000008dc0},
+ { 0x000000000009b871,0x0001ea06d12ce8182,0x0000000006ce269d,0x0000000014d3d6c64,0x0000000000000000,0x0001ea80000000000,0x0000000006800000,0x0000000014d800000},
+ { 0x0000000000000000,0x020d3af39e1599679,0x000000000000002a,0x0000000000a090c53,0x0000000000000000,0x020e0000000000000,0x0000000000000000,0x0000000000a0c0000},
+ { 0x0000002892b6d0c1,0x0000062a975ed55a0,0x0000009f26833df7,0x0000007fd380ccad8,0x0000002000000000,0x0000062c000000000,0x0000009e00000000,0x0000007fe00000000},
+ { 0x000000002753763a,0x00011d08928ff1349,0x000000091c26a6d5,0x000086f2339ab7526,0x0000000000000000,0x00011d80000000000,0x0000000000000000,0x00008700000000000},
+ { 0x000000000000cf94,0x00076c64ad9a67081,0x000000f21c85783b,0x0000a9a8aa36efa67,0x0000000000000000,0x00076e00000000000,0x0000000000000000,0x0000a9c0000000000},
+ { 0x000000000001d97a,0x00001a0c0326c3013,0x000000000120fc02,0x0000000061322185b,0x0000000000000000,0x00001a10000000000,0x0000000000000000,0x00000000614000000},
+ { 0x0000000000c0ee14,0x03a6da0f21ce40fff,0x000001a9f785bc60,0x0000dbe3524a5e327,0x0000000000000000,0x03a70000000000000,0x0000000000000000,0x0000dc00000000000},
+ { 0x0000000000000014,0x000000708338e425f,0x000000000001501e,0x000000000007c379c,0x0000000000000000,0x00000070a00000000,0x0000000000014000,0x000000000007c4000},
+ { 0x0000000000000028,0x00903806731d3f360,0x0000000000009cb4,0x000049f76c2ae1602,0x0000000000000000,0x00904000000000000,0x0000000000000000,0x00004a00000000000},
+ { 0x00000000000006b5,0x0003a0c79fe35ece0,0x000000000000ab41,0x00000000001be6fe2,0x0000000000000000,0x0003a100000000000,0x0000000000008000,0x00000000001be8000},
+ { 0x000000000005eae0,0x0000000002adeab58,0x0000000005adfcb4,0x00000000012de4c23,0x0000000000000000,0x0000000002ae00000,0x0000000005ac0000,0x00000000012e00000},
+ { 0x000000000000094c,0x0031207a7679a379d,0x0000000000013e40,0x00000000002b8da0d,0x0000000000000000,0x00313000000000000,0x0000000000010000,0x00000000002b90000},
+ { 0x0000000000000002,0x03928c10624ef3088,0x0000015af8aab198,0x00054c7c1f8a18adf,0x0000000000000000,0x03930000000000000,0x0000000000000000,0x00054e00000000000},
+ { 0x0000000000042678,0x015128b3c3f0e6f96,0x00000000aae4a4a9,0x00000eef0808c3622,0x0000000000000000,0x01518000000000000,0x0000000000000000,0x00000ef0000000000},
+ { 0x0000000000000022,0x00000001e05278f0d,0x0000000000001f32,0x00000000000124151,0x0000000000000000,0x00000001e08000000,0x0000000000001800,0x00000000000124800},
+ { 0x00000000138a8e2f,0x002ff07f114ff1d41,0x000007c0412fb893,0x00004593ca334231a,0x0000000000000000,0x00300000000000000,0x0000060000000000,0x000045a0000000000},
+ { 0x0000000000002453,0x024d0192dacf51ddd,0x0000006f1974d8c9,0x00cb528ded7536cd4,0x0000000000000000,0x024e0000000000000,0x0000000000000000,0x00cb8000000000000},
+ { 0x0000000007f2d203,0x0508fc3769f826742,0x0000001a113c9d8a,0x0000aaa2e34e75642,0x0000000000000000,0x050a0000000000000,0x0000000000000000,0x0000aac0000000000},
+ { 0x0000000000138a1f,0x003e65bc59c5eac09,0x0000005fb2495e06,0x0000001674c05d953,0x0000000000000000,0x003e7000000000000,0x0000005f80000000,0x00000016780000000},
+ { 0x0000000000000004,0x000000092d4465dd5,0x0000000000000005,0x0000000713117ec86,0x0000000000000000,0x00000009300000000,0x0000000000000000,0x00000007140000000},
+ { 0x0000000021afa4eb,0x000068e9db0cbee19,0x0000000175eb7db0,0x0000000032088c1cf,0x0000000000000000,0x00006900000000000,0x0000000175800000,0x00000000321000000},
+ { 0x0000000000000161,0x0001f142a12e81553,0x000000000004cf90,0x00003d82939b6ab0b,0x0000000000000000,0x0001f180000000000,0x0000000000000000,0x00003d90000000000},
+ { 0x00000000c314a497,0x0003ba94659d7c085,0x000000016ef36e6e,0x000000036596aab3e,0x0000000000000000,0x0003bb00000000000,0x0000000160000000,0x00000003660000000},
+ { 0x0000000000000077,0x0000dd20981ba4a0c,0x000000003d89b023,0x000003e0aa520ef2d,0x0000000000000000,0x0000dd40000000000,0x0000000000000000,0x000003e1000000000},
+ { 0x000000000011d253,0x000001da606d3a812,0x000002cd52934a0b,0x00000094c4eb73bda,0x0000000000000000,0x000001da800000000,0x000002cc00000000,0x00000094e00000000},
+ { 0x0000000000000014,0x00001c9cbf399d2f0,0x0000000000072379,0x0000036bb39c45080,0x0000000000000000,0x00001ca0000000000,0x0000000000000000,0x0000036c000000000},
+ { 0x0000000000014179,0x00000003e7307c25b,0x00000000001aaccd,0x0000000008fab2219,0x0000000000000000,0x00000003e80000000,0x0000000000000000,0x0000000008fc00000},
+ { 0x000000000000000a,0x00000272725c53ef4,0x0000000000001908,0x00000000000008391,0x0000000000000000,0x00000273000000000,0x0000000000001900,0x000000000000083a0},
+ { 0x00000000000105cd,0x00000013bd435da24,0x0000000000323394,0x0000000247e155059,0x0000000000000000,0x00000013c00000000,0x0000000000000000,0x00000002480000000},
+ { 0x00000000034b67f6,0x023ce68fe26e15ab2,0x000000001fe9963e,0x007fc7a4df3b40bd0,0x0000000000000000,0x023d0000000000000,0x0000000000000000,0x007fe000000000000},
+ { 0x00000000000a6193,0x02d48f1dc228ab15a,0x000005110a6f203d,0x00068ae1a8a970f93,0x0000000000000000,0x02d50000000000000,0x0000000000000000,0x00068c00000000000},
+ { 0x0000000000000002,0x000d47fa5064b4eb1,0x0000000000003721,0x0000b0ebf859b55b2,0x0000000000000000,0x000d4800000000000,0x0000000000000000,0x0000b100000000000},
+ { 0x000011b4011010f5,0x00022bd29a2c19762,0x00001927224aef89,0x000013a2f884cbfa0,0x0000100000000000,0x00022c00000000000,0x0000190000000000,0x000013a8000000000},
+ { 0x0000000000000001,0x06be09cdf30145184,0x0000000000000040,0x055231f86a9bbcec2,0x0000000000000000,0x06c00000000000000,0x0000000000000000,0x05540000000000000},
+ { 0x00000000812d677f,0x000caf7da3ff2e48f,0x0000049a4b552aec,0x00003b4326fdd6196,0x0000000000000000,0x000cb000000000000,0x0000040000000000,0x00003b50000000000},
+ { 0x000000000000000c,0x0000000013e56ad74,0x000000000000014e,0x00000000000000f68,0x0000000000000000,0x0000000013e800000,0x000000000000014e,0x00000000000000f68},
+ { 0x00000000003549e1,0x00005b542836184fa,0x000000000064cda8,0x00000000006a64198,0x0000000000000000,0x00005b60000000000,0x0000000000640000,0x00000000006a80000},
+ { 0x000000000b0dd804,0x000018c9d7744c2b9,0x0000004aea7d260d,0x000006a66e01c8a4e,0x0000000000000000,0x000018d0000000000,0x0000004000000000,0x000006a8000000000},
+ { 0x000000000003238c,0x0036dde892302bb70,0x000000002322a081,0x00024673b0b1ee4b0,0x0000000000000000,0x0036e000000000000,0x0000000000000000,0x00024700000000000},
+ { 0x000000000000000a,0x00efdccac55d008a6,0x00000006d0b4d6f6,0x000004778794e5f3f,0x0000000000000000,0x00f00000000000000,0x0000000000000000,0x00000478000000000},
+ { 0x000000000005d4a4,0x02908e9988cdf04ef,0x00000000009b8f99,0x000758c2b85b0e43e,0x0000000000000000,0x02910000000000000,0x0000000000000000,0x00075a00000000000},
+ { 0x0000000000000093,0x000001c4e0b8841d5,0x00000000000010a3,0x0000000c3abcdffe7,0x0000000000000000,0x000001c5000000000,0x0000000000000000,0x0000000c3c0000000},
+ { 0x000000000000002f,0x0001fefdb63305e12,0x00000000001b55c3,0x0000000010195a81f,0x0000000000000000,0x0001ff00000000000,0x0000000000000000,0x00000000102000000},
+ { 0x00000000000057b7,0x00000124e4e39847a,0x00000000067809b6,0x00000000054a16b87,0x0000000000000000,0x00000125000000000,0x0000000006600000,0x00000000054c00000},
+ { 0x000000000000081f,0x03e7f1ae51bfe0b52,0x0000000000009fe7,0x00000000000137cfe,0x0000000000000000,0x03e80000000000000,0x0000000000009800,0x00000000000138000},
+ { 0x0000000000000004,0x00238485329e5d162,0x00000000000b79d7,0x000000c17258fb381,0x0000000000000000,0x00239000000000000,0x0000000000000000,0x000000c1800000000},
+ { 0x00000000d3192c6b,0x003d16a32025c34b9,0x00000001d202bba7,0x0000000033d8c220e,0x0000000000000000,0x003d2000000000000,0x00000001d2000000,0x0000000033e000000},
+ { 0x0000000000000005,0x0000000001f9dc928,0x00000000000000c5,0x00000000000617532,0x0000000000000000,0x0000000001fa00000,0x0000000000000000,0x00000000000618000},
+ { 0x000091c170ef38cb,0x006b2c989116aa813,0x0001d95b3d4e82ed,0x00007effd09c8fb38,0x0000000000000000,0x006b4000000000000,0x0001d80000000000,0x00007f00000000000},
+ { 0x0000000003759a70,0x000017130ade2e435,0x0000000005012e7c,0x000000000314c1429,0x0000000000000000,0x00001718000000000,0x0000000005000000,0x00000000031500000},
+ { 0x0000000000000012,0x0000005651b71858e,0x00000000000132d1,0x00000000006b05017,0x0000000000000000,0x00000056600000000,0x0000000000000000,0x00000000006b20000},
+ { 0x000000000000fdfd,0x005523fa9b8863843,0x00000000fc06d176,0x0000000070456b53c,0x0000000000000000,0x00554000000000000,0x00000000fc000000,0x00000000706000000},
+ { 0x00000004352db2a5,0x01eb1cb9d1b38e824,0x0000017e2a5d0648,0x000000233db64dbd0,0x0000000000000000,0x01eb8000000000000,0x0000017e00000000,0x00000023400000000},
+ { 0x0000000000000012,0x0000000000344db8a,0x0000000000006a96,0x000000000000e9332,0x0000000000000000,0x00000000003450000,0x0000000000006800,0x000000000000e9400},
+ { 0x00000000064ea035,0x061f97bbd04f51c05,0x00032f84c9ca383c,0x00f805c3b638664c6,0x0000000000000000,0x06200000000000000,0x0000000000000000,0x00f84000000000000},
+ { 0x000000000000024a,0x0000000000348bbe2,0x000000000000189c,0x0000000000030f7a8,0x0000000000000000,0x00000000003490000,0x0000000000001000,0x00000000000310000},
+ { 0x0000000000003e72,0x00016fd086866e8fa,0x0000000001d4f853,0x0000046a24b143bab,0x0000000000000000,0x00017000000000000,0x0000000000000000,0x0000046c000000000},
+ { 0x0000000000000000,0x00000000373479ae9,0x0000000000000016,0x0000000000090efee,0x0000000000000000,0x00000000374000000,0x0000000000000000,0x00000000000910000},
+ { 0x00000000004d5c6f,0x00003f85309c8e8ed,0x00000004d3976a59,0x0000073f0c51d5e57,0x0000000000000000,0x00003f90000000000,0x0000000000000000,0x00000740000000000},
+ { 0x000000001ae73d3d,0x00001b8cf992b4198,0x00000012358fd0d9,0x00000003e57b63021,0x0000000000000000,0x00001b90000000000,0x0000001230000000,0x00000003e60000000},
+ { 0x00000000091bcc85,0x02f317e3b16ce19f1,0x001fd2aa11a14620,0x010028c5b81d4f958,0x0000000000000000,0x02f40000000000000,0x001c000000000000,0x01004000000000000},
+ { 0x0000000000000004,0x00046673531a9b910,0x0000000000042e0a,0x000189cb070bdb964,0x0000000000000000,0x00046800000000000,0x0000000000000000,0x00018a00000000000},
+ { 0x000000000000001d,0x00000198f09bcbe46,0x00000000000f77a1,0x0000000e0f6452805,0x0000000000000000,0x00000199000000000,0x0000000000000000,0x0000000e100000000},
+ { 0x0000000000000028,0x0b73e53675607a792,0x000000756ac1f388,0x0000272c7652916dc,0x0000000000000000,0x0b740000000000000,0x0000000000000000,0x00002730000000000},
+ { 0x0000000000000372,0x00000011b294a53f1,0x000000007deeac5e,0x000000004bebcb90b,0x0000000000000000,0x00000011b80000000,0x000000007c000000,0x000000004c0000000},
+ { 0x000000000000002d,0x01d2bf11605491760,0x0000000001814ff0,0x0000000d2074e7984,0x0000000000000000,0x01d30000000000000,0x0000000000000000,0x0000000d240000000},
+ { 0x0000000000000007,0x0000695a899f81bb4,0x00000000025b983e,0x00000013ef713b197,0x0000000000000000,0x00006960000000000,0x0000000000000000,0x00000013f00000000},
+ { 0x000000000b319464,0x0005a893050ffd4da,0x000053e6a7befdb8,0x000007c5ff4910f78,0x0000000000000000,0x0005aa00000000000,0x000053e000000000,0x000007c6000000000},
+ { 0x0000000000000000,0x000054d4052fdb242,0x0000000000001728,0x000000b457f83d6e5,0x0000000000000000,0x000054e0000000000,0x0000000000000000,0x000000b4800000000},
+ { 0x000a9afe55b036e1,0x03df2bd9c9a07b03f,0x01a7fca9e38d0610,0x0023d8d01fa441e5a,0x0000000000000000,0x03e00000000000000,0x01a7c00000000000,0x0023dc00000000000},
+ { 0x000000000000000c,0x000328fce2e9e13c6,0x0000000000000392,0x0000066dc77a29232,0x0000000000000000,0x00032900000000000,0x0000000000000000,0x0000066e000000000},
+ { 0x000000000000016f,0x00000a34d0b064841,0x00000002cb2fd181,0x00000001062d2f109,0x0000000000000000,0x00000a38000000000,0x00000002c8000000,0x00000001064000000},
+ { 0x0000000000000003,0x000002dc5f0de6d11,0x0000000033a88cc4,0x0000000330cc6c206,0x0000000000000000,0x000002dd000000000,0x0000000030000000,0x00000003310000000},
+ { 0x00000000000089ea,0x006bca78e2bbc9a08,0x0000000157284748,0x00000074d333f9252,0x0000000000000000,0x006be000000000000,0x0000000000000000,0x00000074e00000000},
+ { 0x00000000000384ae,0x00017edd756ad8a92,0x000000000de7027b,0x00015e8010fd679fc,0x0000000000000000,0x00017f00000000000,0x0000000000000000,0x00015f00000000000},
+ { 0x000000000000a0f7,0x01a09d29e278f7a7a,0x0000000000045020,0x000007358747e7236,0x0000000000000000,0x01a10000000000000,0x0000000000000000,0x00000736000000000},
+ { 0x0000000000000006,0x000051fe774b6f9cd,0x0000000000000018,0x0000000000004431b,0x0000000000000000,0x00005200000000000,0x0000000000000000,0x00000000000044400},
+ { 0x0000000000001b25,0x00000327cab2351f4,0x000000001bcf38fd,0x0000000003bd51230,0x0000000000000000,0x00000328000000000,0x000000001bc00000,0x0000000003be00000},
+ { 0x0000000000ad323b,0x00019ee58e14c6ba1,0x000000001c74ca71,0x00007e98401b2a4aa,0x0000000000000000,0x00019f00000000000,0x0000000000000000,0x00007ea0000000000},
+ { 0x0000000000041530,0x0000014ce98da5262,0x00000000006fe17d,0x00000098274ffcb68,0x0000000000000000,0x0000014d000000000,0x0000000000000000,0x00000098400000000},
+ { 0x000000000000001b,0x00000000b38ff4b44,0x000000002ff20cf5,0x000000007042dd327,0x0000000000000000,0x00000000b3c000000,0x000000002e000000,0x00000000706000000},
+ { 0x00000000002505f1,0x02609233c409db4fd,0x00000051553872e5,0x00029c6a10c82aa1c,0x0000000000000000,0x02610000000000000,0x0000000000000000,0x00029d00000000000},
+ { 0x0000000000000374,0x00051c89a1bc2c2e3,0x000000000006c875,0x000126e754b2f6f50,0x0000000000000000,0x00051e00000000000,0x0000000000000000,0x00012700000000000},
+ { 0x00000004ac033454,0x00f8ec9d19888ece3,0x000036f238e40d00,0x0033b6d1ee46e6e6b,0x0000000000000000,0x00f90000000000000,0x0000000000000000,0x0033c000000000000},
+ { 0x0000000000ed52be,0x0000b1a75e593670d,0x000000000140e261,0x0000034e80b8cb91e,0x0000000000000000,0x0000b1c0000000000,0x0000000000000000,0x0000034f000000000},
+ { 0x000000000000000f,0x07301b674e9b59326,0x00000000000000a7,0x051d30eb9c4e012df,0x0000000000000000,0x07320000000000000,0x0000000000000000,0x051e0000000000000},
+ { 0x0000000000000003,0x0336ace9569519fd1,0x00000000000366ed,0x000000c638647a727,0x0000000000000000,0x03370000000000000,0x0000000000000000,0x000000c6400000000},
+ { 0x0000000000061bf4,0x00070c7a25de0c0b4,0x00000000000d22a7,0x000000001d9d97617,0x0000000000000000,0x00070e00000000000,0x0000000000000000,0x000000001da000000},
+ { 0x00000000000003cf,0x01b9fbda12b954c85,0x0000000000000bb3,0x0000000000000c6f6,0x0000000000000000,0x01ba0000000000000,0x0000000000000b80,0x0000000000000c700},
+ { 0x00000001db8dd54a,0x002e4a48f1e25fcdd,0x0000289fda7d0075,0x001bc3834de432a60,0x0000000000000000,0x002e5000000000000,0x0000000000000000,0x001bc800000000000},
+ { 0x000000000002bc23,0x0000ac1f8cc2388ed,0x000000000273cbd0,0x00000000357a7cdc6,0x0000000000000000,0x0000ac40000000000,0x0000000002000000,0x00000000358000000},
+ { 0x0000000000000009,0x00000059dbc919e87,0x00000000000000e8,0x00000002b8d62bdc3,0x0000000000000000,0x00000059e00000000,0x0000000000000000,0x00000002b90000000},
+ { 0x00000000000001b4,0x00d2b8e751a19922b,0x0000000071d0e7c6,0x00a6058942471d6f2,0x0000000000000000,0x00d2c000000000000,0x0000000000000000,0x00a64000000000000},
+ { 0x0000000000000003,0x016267400f5380da4,0x0000002f5740bd50,0x00115c2df33704859,0x0000000000000000,0x01628000000000000,0x0000000000000000,0x00116000000000000},
+ { 0x000000000004be56,0x000000035e3cc2e60,0x000000000004dde8,0x00000000caec9ffc7,0x0000000000000000,0x000000035f0000000,0x0000000000000000,0x00000000cb0000000},
+ { 0x0000000000000005,0x07435194035a5af40,0x00000000000033a0,0x0000000d06fe09425,0x0000000000000000,0x07440000000000000,0x0000000000000000,0x0000000d080000000},
+ { 0x0000000000000014,0x0000000022a788450,0x00000000000005cf,0x000000000002900d7,0x0000000000000000,0x0000000022b000000,0x0000000000000000,0x00000000000291000},
+ { 0x00000017a88a543d,0x000384f75f65cd947,0x000001ec37df6b81,0x00000025d1b4fbe0c,0x0000000000000000,0x00038500000000000,0x000001ec20000000,0x00000025d20000000},
+ { 0x0000000006d0a565,0x0025868e434ad386c,0x00000067ebb2830f,0x0000001d05d876b7e,0x0000000000000000,0x00259000000000000,0x0000006780000000,0x0000001d080000000},
+ { 0x0000000000004a83,0x00f2dc570b7538f2a,0x000000001a3cf11e,0x00000827b59d67654,0x0000000000000000,0x00f30000000000000,0x0000000000000000,0x00000828000000000},
+ { 0x000000003c4e31b7,0x0002c40241ab366ac,0x0001e04286213b95,0x00002f820858c2139,0x0000000000000000,0x0002c500000000000,0x0001e00000000000,0x00002f88000000000},
+ { 0x0000000000092933,0x00001583a825e4cd7,0x0000000026d35d2b,0x0000000ced005de08,0x0000000000000000,0x00001588000000000,0x0000000000000000,0x0000000cf00000000},
+ { 0x0000000000000012,0x003a61768bf1e880a,0x0000001e8f86fcb0,0x0000321b965314b12,0x0000000000000000,0x003a7000000000000,0x0000000000000000,0x00003220000000000},
+ { 0x00000000001367ab,0x0000183b2b29b4560,0x00000000007608b2,0x000001fe03180c768,0x0000000000000000,0x00001840000000000,0x0000000000000000,0x000001fe800000000},
+ { 0x00000f5e3bf1cb69,0x00caa64c82460a125,0x0053f90846a49012,0x003e2a40826086396,0x0000000000000000,0x00cac000000000000,0x0053000000000000,0x003e3000000000000},
+ { 0x0000000000002c4f,0x0002e466fbb8c5b4b,0x0000000000093b01,0x0002aac161c3de951,0x0000000000000000,0x0002e500000000000,0x0000000000000000,0x0002ab00000000000},
+ { 0x000000000000009a,0x00c87b17668d106a7,0x0000000001d45324,0x00000000004ce98d5,0x0000000000000000,0x00c88000000000000,0x0000000001d40000,0x00000000004cf0000},
+ { 0x00000000000f9eea,0x00000000014be0eaa,0x00000000001448e6,0x000000000004d3606,0x0000000000080000,0x00000000014c00000,0x0000000000144000,0x000000000004d4000},
+ { 0x0000000000000e90,0x00b46a9874b187b70,0x0000004e660d10d8,0x0000148a55eca07fe,0x0000000000000000,0x00b48000000000000,0x0000000000000000,0x00001490000000000},
+ { 0x000000000004a81a,0x00003a7f495e5828d,0x000000000017464d,0x00001ce6e29880d96,0x0000000000000000,0x00003a80000000000,0x0000000000000000,0x00001ce8000000000},
+ { 0x000000e8adf88201,0x00edffca2a3ed01e6,0x0000050e82151210,0x003f82bb7e9466407,0x0000000000000000,0x00ee0000000000000,0x0000000000000000,0x003f9000000000000},
+ { 0x000000000000074d,0x00000952baff99ed1,0x0000000000036772,0x000000007a5b014c2,0x0000000000000000,0x00000954000000000,0x0000000000000000,0x000000007a6000000},
+ { 0x00009c09e3e504d6,0x00e585f7e75f4062c,0x002aed3b64daed95,0x006b6daa6c85ae9ae,0x0000000000000000,0x00e5c000000000000,0x002a000000000000,0x006b8000000000000},
+ { 0x000000000000026c,0x002edfb707e2a7e26,0x00000008d8d61fc6,0x000003532fd6e0871,0x0000000000000000,0x002ee000000000000,0x0000000000000000,0x00000354000000000},
+ { 0x0000000000000051,0x00000000000003e03,0x0000000000000273,0x000000000000029f0,0x0000000000000050,0x00000000000003e10,0x0000000000000270,0x000000000000029f0},
+ { 0x00000000000007d0,0x005379e687d986ee7,0x00000058c0f49bd8,0x001320c7c78b3ee88,0x0000000000000000,0x00538000000000000,0x0000000000000000,0x00132800000000000},
+ { 0x0000000000000006,0x000000000003ef0e0,0x0000000000001003,0x00000000000254027,0x0000000000000000,0x000000000003f0000,0x0000000000001000,0x00000000000255000},
+ { 0x0000000000002765,0x00e672fef9884664f,0x00000000001c35be,0x000000000006cd2b7,0x0000000000000000,0x00e68000000000000,0x00000000001c2000,0x000000000006ce000},
+ { 0x000000000000001f,0x02db6089bf750fc6a,0x00000000000002b1,0x000000000024f23db,0x0000000000000000,0x02dc0000000000000,0x0000000000000000,0x00000000002500000},
+ { 0x0000000000000000,0x0266309500eac5584,0x0000000000000003,0x000000000000004fd,0x0000000000000000,0x02670000000000000,0x0000000000000003,0x000000000000004fd},
+ { 0x00000000000000ef,0x0035481a18f98fda3,0x0000000248b6479c,0x000000037fceed91e,0x0000000000000000,0x00355000000000000,0x0000000240000000,0x00000003800000000},
+ { 0x0000000000001b79,0x01122fed1f62f6b1b,0x000000003a547984,0x000000016a49d74a7,0x0000000000000000,0x01128000000000000,0x0000000038000000,0x000000016a8000000},
+ { 0x00000000000000f3,0x00000c73f3aed3361,0x0000000000000ff4,0x0000000704557137e,0x0000000000000000,0x00000c74000000000,0x0000000000000000,0x00000007060000000},
+ { 0x0000000000000092,0x00000000002328ce5,0x000000000020c7f8,0x000000000002223b1,0x0000000000000000,0x00000000002330000,0x000000000020c780,0x00000000000222400},
+ { 0x00000000099de841,0x0000005984a3b7cb6,0x0000000090883267,0x00000000ddfc57c2b,0x0000000000000000,0x00000059a00000000,0x0000000090000000,0x00000000de0000000},
+ { 0x00000000000072e1,0x000000004eb57ec79,0x00000000000170c3,0x0000000006ae4f068,0x0000000000000000,0x000000004ec000000,0x0000000000000000,0x0000000006b000000},
+ { 0x00000000002c21d3,0x00000000033be547a,0x000000000030d86e,0x000000000313faae8,0x0000000000200000,0x00000000033c00000,0x0000000000300000,0x00000000031400000},
+ { 0x000000000000357a,0x01c52344d70ced081,0x00000000007ad9d6,0x00025583f7531ebfc,0x0000000000000000,0x01c58000000000000,0x0000000000000000,0x00025600000000000},
+ { 0x0000000000000014,0x001c3e0bf529294e0,0x0000353e379f7832,0x000008a3bf40a7005,0x0000000000000000,0x001c4000000000000,0x0000352000000000,0x000008a4000000000},
+ { 0x000000000000001d,0x00000040eda503b74,0x00000000000084d1,0x0000000009bac6e22,0x0000000000000000,0x00000041000000000,0x0000000000000000,0x0000000009bc00000},
+ { 0x000000000000002c,0x0000bec5fd7537dd5,0x00000000000083e6,0x000000003d58bf691,0x0000000000000000,0x0000bf00000000000,0x0000000000000000,0x000000003d6000000},
+ { 0x0000000000003165,0x00006187446f68209,0x0000000000dd0210,0x0000000000154f62f,0x0000000000000000,0x000061a0000000000,0x0000000000dd0000,0x00000000001550000},
+ { 0x0000000000000003,0x011abcbee281da7f5,0x0000000000000045,0x000000000004048ce,0x0000000000000000,0x011b0000000000000,0x0000000000000000,0x00000000000406000},
+ { 0x0000000001d85977,0x000001d49370f0c02,0x000000183e04a1d5,0x0000000245614c572,0x0000000000000000,0x000001d5000000000,0x000000183c000000,0x00000002458000000},
+ { 0x0000000000003dc7,0x0cc51e4f63ceecc8a,0x0000002d8b79dd30,0x0000fd0793f28dc87,0x0000000000000000,0x0cc80000000000000,0x0000000000000000,0x0000fd40000000000},
+ { 0x0000000000000167,0x000000090cab6b2bd,0x0000000001051247,0x0000000008858002f,0x0000000000000000,0x00000009100000000,0x0000000001000000,0x00000000088800000},
+ { 0x00000000003b79b5,0x000cae26f759b72f6,0x000000695c600ad2,0x00006032f5f184167,0x0000000000000000,0x000cb000000000000,0x0000000000000000,0x00006040000000000},
+ { 0x0000000003693a70,0x0000e88bcfff56b52,0x0000f225e2c2b3bc,0x000013e72e8938e10,0x0000000000000000,0x0000e8c0000000000,0x0000f22000000000,0x000013e8000000000},
+ { 0x000000000000000e,0x00001653c014b6a58,0x00000000000c8bb2,0x000006449f731d279,0x0000000000000000,0x00001658000000000,0x0000000000000000,0x00000646000000000},
+ { 0x0000000023035ae1,0x000739f7ba65fd140,0x0000a444a81e5186,0x0003085ced58d199d,0x0000000000000000,0x00073a00000000000,0x0000a00000000000,0x00030900000000000},
+ { 0x000000000130bbd3,0x05bbc73d73b898359,0x000000000721aa81,0x0000000004e57af0f,0x0000000000000000,0x05bc0000000000000,0x0000000007200000,0x0000000004e600000},
+ { 0x00000000000acf46,0x00000000bc18a7fd6,0x0000000000daa67a,0x0000000001d7d67e4,0x0000000000000000,0x00000000bc4000000,0x0000000000d80000,0x0000000001d800000},
+ { 0x00000000000054e4,0x00000000005069768,0x00000000000eb4e8,0x00000000000f3e9a8,0x0000000000000000,0x00000000005080000,0x00000000000e8000,0x00000000000f40000},
+ { 0x00000000000000ac,0x001353fe23662d114,0x0000000b74626116,0x0000e472917315127,0x0000000000000000,0x00135800000000000,0x0000000000000000,0x0000e480000000000},
+ { 0x000000000000000e,0x00000000114eef7e6,0x00000000001fe292,0x00000000004fe8548,0x0000000000000000,0x00000000115000000,0x00000000001e0000,0x00000000005000000},
+ { 0x0000000000000076,0x000017d65cc452d77,0x0000000000053a9c,0x00000000003975264,0x0000000000000000,0x000017d8000000000,0x0000000000050000,0x00000000003980000},
+ { 0x0000000000001d10,0x00002199413319955,0x00002ba32c7e5a13,0x000010d7c8bc64ed4,0x0000000000000000,0x000021a0000000000,0x00002b8000000000,0x000010d8000000000},
+ { 0x0000000000000044,0x0249b2f38602e7540,0x00021e2b703c4c8a,0x00002efc11d80834d,0x0000000000000000,0x024a0000000000000,0x00021e0000000000,0x00002f00000000000},
+ { 0x0000000000000073,0x00000000005db02a4,0x0000000000145a36,0x0000000000023dc8c,0x0000000000000000,0x00000000005dc0000,0x0000000000145800,0x0000000000023e000},
+ { 0x0000000bf7069ff5,0x000038896110aa369,0x00000013023858a1,0x00000002ed33b2b77,0x0000000000000000,0x00003890000000000,0x0000001300000000,0x00000002ed8000000},
+ { 0x0000000000000011,0x0001becf4d6fc10bc,0x0000000000000057,0x00000000000002ad5,0x0000000000000000,0x0001bf00000000000,0x0000000000000050,0x00000000000002ae0},
+ { 0x0000000000000003,0x000f3c5c800b8a254,0x0000000003421f32,0x0000001e43fc809e9,0x0000000000000000,0x000f4000000000000,0x0000000000000000,0x0000001e480000000},
+ { 0x0000000000000008,0x0002f5d1eeb400f3a,0x0000000000000062,0x000000000000000bf,0x0000000000000000,0x0002f600000000000,0x0000000000000062,0x000000000000000bf},
+ { 0x00000000002aac15,0x0025e44848a8bda9e,0x000062f16679f0d7,0x00002247c83c3505b,0x0000000000000000,0x0025f000000000000,0x0000628000000000,0x00002248000000000},
+ { 0x00000000000066bf,0x02ccd9de63fcc3f1a,0x000000000001d7f1,0x0000000070ace28bf,0x0000000000000000,0x02cd0000000000000,0x0000000000000000,0x0000000070c000000},
+ { 0x000000000000007d,0x000002fece90ddb9a,0x0000000006f8e32d,0x000000000f44446a8,0x0000000000000000,0x000002ff000000000,0x0000000006c00000,0x000000000f4800000},
+ { 0x000000000000000f,0x000000000005110c6,0x0000000000000147,0x00000000000000195,0x0000000000000000,0x00000000000512000,0x0000000000000147,0x00000000000000195},
+ { 0x00000000000003cf,0x0247a7bae34e0b1d7,0x00000000017fa161,0x0000000001e40bc21,0x0000000000000000,0x02480000000000000,0x0000000001780000,0x0000000001e480000},
+ { 0x00000000000001bc,0x000006125a1530153,0x000000000328fff6,0x00000028f780a6f75,0x0000000000000000,0x00000614000000000,0x0000000000000000,0x00000029000000000},
+ { 0x00000000000864a3,0x000b08dbd5dab3865,0x0000000013c3648d,0x000000000cca57acf,0x0000000000000000,0x000b0c00000000000,0x0000000013c00000,0x000000000ccc00000},
+ { 0x0000000000000143,0x000011e59d269b161,0x00000000069d3e39,0x000001717b0ac1c8a,0x0000000000000000,0x000011e8000000000,0x0000000000000000,0x00000171800000000},
+ { 0x000000001980f731,0x00027c2a4585b9184,0x000020cb6390fff5,0x0000e10a752d8f933,0x0000000000000000,0x00027d00000000000,0x0000200000000000,0x0000e140000000000},
+ { 0x0000000000000331,0x0000000dac2b75939,0x0000000000002188,0x0000000000003b699,0x0000000000000000,0x0000000db00000000,0x0000000000002100,0x0000000000003b700},
+ { 0x0000000000000066,0x00003bc062426f110,0x00000000000006f2,0x00000000007f6555e,0x0000000000000000,0x00003bd0000000000,0x0000000000000000,0x00000000007f80000},
+ { 0x0000000000000006,0x00308b95b2c668919,0x000000a62d6efaf4,0x0000e66b813cb1db6,0x0000000000000000,0x00309000000000000,0x0000000000000000,0x0000e680000000000},
+ { 0x000000000001aa38,0x00001b1e2e10f4508,0x00000084164c7e01,0x0000030c53a0a6b43,0x0000000000000000,0x00001b20000000000,0x0000008000000000,0x0000030d000000000},
+ { 0x000000000002d562,0x000011fff08daf088,0x000000000df506c7,0x0000006cbaeac552b,0x0000000000000000,0x00001200000000000,0x0000000000000000,0x0000006cc00000000},
+ { 0x00000009adc2f8d0,0x070a21576cd77a08c,0x000da897a4bf1138,0x00e20f09fd2fb89bc,0x0000000000000000,0x070c0000000000000,0x000c000000000000,0x00e24000000000000},
+ { 0x0000000000000001,0x0000000000393aae1,0x0000000000000005,0x00000000000000149,0x0000000000000000,0x00000000003940000,0x0000000000000005,0x00000000000000149},
+ { 0x000000000000016c,0x00000059bd55f4f61,0x0000000000189683,0x000000000caa07813,0x0000000000000000,0x00000059c00000000,0x0000000000000000,0x000000000cac00000},
+ { 0x0000000000000003,0x00000fdb34b958211,0x000000000017f139,0x000000037db771d75,0x0000000000000000,0x00000fdc000000000,0x0000000000000000,0x000000037e0000000},
+ { 0x000000000000000a,0x000000005b3b0138a,0x0000000000000601,0x000000000000c2d1c,0x0000000000000000,0x000000005b4000000,0x0000000000000400,0x000000000000c3000},
+ { 0x0000000000000004,0x005c3b5cea9786add,0x0000000000272f15,0x0000069f5124bf397,0x0000000000000000,0x005c4000000000000,0x0000000000000000,0x000006a0000000000},
+ { 0x0000000000000005,0x0000000000007f338,0x0000000000000106,0x000000000000739c1,0x0000000000000000,0x0000000000007f400,0x0000000000000000,0x00000000000073a00},
+ { 0x00000000000003b7,0x00071116208167459,0x000000000500ce47,0x000001167e69f88fa,0x0000000000000000,0x00071200000000000,0x0000000000000000,0x00000116800000000},
+ { 0x0000000000003f96,0x009ba5e41199035c5,0x00000000003fddaf,0x001916d18d53026ae,0x0000000000000000,0x009bc000000000000,0x0000000000000000,0x00191800000000000},
+ { 0x0000000000035605,0x0000092efc5116184,0x0000005c2bf45a81,0x00000010bdfd80669,0x0000000000000000,0x00000930000000000,0x0000005c00000000,0x00000010c00000000},
+ { 0x0000000000000c2e,0x002f6e0846d2844a9,0x00000000002c931d,0x0003250ad5af1889d,0x0000000000000000,0x002f7000000000000,0x0000000000000000,0x00032600000000000},
+ { 0x000000000000011f,0x000000011701816c1,0x000000000000e68c,0x0000000003bf28c36,0x0000000000000000,0x00000001178000000,0x0000000000000000,0x0000000003c000000},
+ { 0x000000000002e932,0x0016e684fb441a714,0x000361e4a3fcd2c8,0x0000d84ee3d984bc6,0x0000000000000000,0x0016e800000000000,0x0003600000000000,0x0000d880000000000},
+ { 0x0000000000a6cc0b,0x0002b5590dffbc819,0x000000000a91b81e,0x000000d5990a9ad9d,0x0000000000000000,0x0002b600000000000,0x0000000000000000,0x000000d5c00000000},
+ { 0x0000000000000006,0x0000007c493b3debc,0x00000000000000c7,0x000000001f18706a9,0x0000000000000000,0x0000007c600000000,0x0000000000000000,0x000000001f2000000},
+ { 0x0000000017d1236e,0x014edde53c8839e92,0x0000370885306d5a,0x00000e2a5f6281871,0x0000000000000000,0x014f0000000000000,0x0000370000000000,0x00000e2c000000000},
+ { 0x00000000000072c0,0x01c9f9d0597c31ce8,0x000001fd960ea21a,0x0000003a32998c831,0x0000000000000000,0x01ca0000000000000,0x000001fd80000000,0x0000003a380000000},
+ { 0x000000000000033e,0x0000000000077afe3,0x000000000012b338,0x000000000001bee0a,0x0000000000000000,0x0000000000077c000,0x000000000012b000,0x000000000001bf000},
+ { 0x0000000000005518,0x0001dbcccd5c1e1af,0x000000000013adf1,0x00000008417430ea5,0x0000000000000000,0x0001dc00000000000,0x0000000000000000,0x00000008440000000},
+ { 0x0000000000000312,0x0076a474cdc34a184,0x000003dd9cb23610,0x000670e694d43dbf8,0x0000000000000000,0x0076c000000000000,0x0000000000000000,0x00067200000000000},
+ { 0x0000000000000d09,0x001192dbcd626ec99,0x0008db78b551e2b0,0x00076afaf77037efb,0x0000000000000000,0x00119800000000000,0x0008c00000000000,0x00076c00000000000},
+ { 0x000000000000032e,0x005d3571b74d218c1,0x00000001af37871e,0x0000000159978a9fc,0x0000000000000000,0x005d4000000000000,0x00000001a8000000,0x000000015a0000000},
+ { 0x0000000000059a2c,0x000003f6e39d08778,0x000000cd1621f7b4,0x0000029d777e8c27d,0x0000000000000000,0x000003f7000000000,0x000000c000000000,0x0000029e000000000},
+ { 0x000000000000007d,0x017d01ed6dc09899b,0x000000000027df30,0x00000000007e9369b,0x0000000000000000,0x017d8000000000000,0x0000000000260000,0x00000000007ea0000},
+ { 0x0000000000000003,0x004e05b5313db49b5,0x0000000001f79842,0x00000c84b99e152fe,0x0000000000000000,0x004e2000000000000,0x0000000000000000,0x00000c88000000000},
+ { 0x0000000000000013,0x0000610b7703fe42c,0x000000000000075e,0x00000000000261cc4,0x0000000000000000,0x00006120000000000,0x0000000000000000,0x00000000000262000},
+ { 0x00000000000d3082,0x003353a1e65fe8b47,0x000110ac7b669164,0x00001b3ec9b01c815,0x0000000000000000,0x00336000000000000,0x0001108000000000,0x00001b40000000000},
+ { 0x0000000000000007,0x00000074bf9bc3eae,0x0000000003ba522f,0x0000000030925a34d,0x0000000000000000,0x00000074c00000000,0x0000000003000000,0x0000000030a000000},
+ { 0x0000000000000000,0x00022b6a954d56500,0x0000000000000002,0x000000000000001ce,0x0000000000000000,0x00022c00000000000,0x0000000000000002,0x000000000000001ce},
+ { 0x000000000000001a,0x039521feff35b6eae,0x000000029b0fd542,0x000000655e33f8484,0x0000000000000000,0x03960000000000000,0x0000000200000000,0x00000065600000000},
+ { 0x0000000000076a2f,0x000003f3121ca0021,0x000000000de9925a,0x0000000c627c39f05,0x0000000000000000,0x000003f4000000000,0x0000000000000000,0x0000000c640000000},
+ { 0x000000000000003a,0x046f31b5edc2de3ea,0x0000000001268e97,0x015ea4a441fa90318,0x0000000000000000,0x04700000000000000,0x0000000000000000,0x015f0000000000000},
+ { 0x0000000021982b44,0x000662bcb24a72ced,0x000000002fb167ab,0x0000039bd7dcc775b,0x0000000000000000,0x00066400000000000,0x0000000000000000,0x0000039c000000000},
+ { 0x0000000000000008,0x03c71bdc9ac397e8f,0x000000052726b9f5,0x00000001e2e59afa5,0x0000000000000000,0x03c80000000000000,0x0000000520000000,0x00000001e30000000},
+ { 0x00000000000005b2,0x000a89e6a200f3b29,0x000000fc5dc79510,0x0000001f4bf6ca73a,0x0000000000000000,0x000a8c00000000000,0x000000fc40000000,0x0000001f4c0000000},
+ { 0x0000000000000001,0x001f35e86d42e8cd8,0x0000000000000007,0x000039398d7fe6a12,0x0000000000000000,0x001f3800000000000,0x0000000000000000,0x00003940000000000},
+ { 0x0000000354d86670,0x0e6c6f0a4c1239da2,0x0000f441d768efd8,0x03d1863fa8f8ac75b,0x0000000000000000,0x0e700000000000000,0x0000000000000000,0x03d20000000000000},
+ { 0x000000000000e092,0x0000001322d5721b3,0x000000000003f161,0x0000000000fa78669,0x0000000000000000,0x00000013280000000,0x0000000000000000,0x0000000000fa80000},
+ { 0x0000010176701c2e,0x00afcfb041b2b9cbe,0x0006afa3c2c784c8,0x0010665bd194d63a1,0x0000000000000000,0x00b00000000000000,0x0006800000000000,0x00106800000000000},
+ { 0x0000000000000034,0x00000000726350870,0x00000000000e39d3,0x000000000009d3bfe,0x0000000000000000,0x00000000728000000,0x00000000000e0000,0x000000000009d4000},
+ { 0x00000000000002cc,0x000000010068be94a,0x0000000000000927,0x0000000029a9c569d,0x0000000000000000,0x00000001008000000,0x0000000000000000,0x0000000029b000000},
+ { 0x000000001fb6dc74,0x009ab631a9f08672d,0x0000002e67f67027,0x0000035924fb64e68,0x0000000000000000,0x009ac000000000000,0x0000002000000000,0x0000035a000000000},
+ { 0x0000000000000037,0x0002f882600db3649,0x000000000019fa37,0x000000000001bcbb3,0x0000000000000000,0x0002f900000000000,0x000000000019fa00,0x000000000001bcc00},
+ { 0x000000000000000a,0x01ad9fd6250360622,0x000001ff33c2eb46,0x000184f122bb61048,0x0000000000000000,0x01ae0000000000000,0x0000000000000000,0x00018500000000000},
+ { 0x0000000000000007,0x000003b1f86b8a766,0x00000000000009e4,0x00000000000009d15,0x0000000000000000,0x000003b2000000000,0x00000000000009c0,0x00000000000009d40},
+ { 0x0000000000009fb8,0x00000893532ff8892,0x0000000e42084514,0x0000000908e2cbed2,0x0000000000000000,0x00000894000000000,0x0000000e40000000,0x000000090c0000000},
+ { 0x000000000018568a,0x01febc5c5fb29af3f,0x0000000000fece52,0x00000001335a33f3c,0x0000000000000000,0x01ff0000000000000,0x0000000000000000,0x00000001338000000},
+ { 0x0000000000000007,0x00000005224c9a67f,0x0000000012cb33df,0x00000000102c1d298,0x0000000000000000,0x00000005240000000,0x0000000012c00000,0x00000000103000000},
+ { 0x0000000000090f45,0x0006c1be697b77c28,0x00000000005f603e,0x00000000cc6527c17,0x0000000000000000,0x0006c200000000000,0x0000000000000000,0x00000000cc8000000},
+ { 0x000000013f523123,0x0000068c2ee749060,0x0000001eb0b069bc,0x0000007879790ad1f,0x0000000000000000,0x0000068e000000000,0x0000001e00000000,0x00000078800000000},
+ { 0x0000000000000024,0x05d061fa825a8caad,0x000000000000007f,0x0011babd1bc932ab3,0x0000000000000000,0x05d20000000000000,0x0000000000000000,0x0011c000000000000},
+ { 0x0000000000000048,0x000000000d0cccbb7,0x00000000000017b2,0x00000000011215e74,0x0000000000000000,0x000000000d1000000,0x0000000000000000,0x00000000011280000},
+ { 0x000000000001a563,0x0c1b856c1eadae032,0x000003982e16ae20,0x0028cbd05bb3d6433,0x0000000000000000,0x0c1c0000000000000,0x0000000000000000,0x0028d000000000000},
+ { 0x000000000000613a,0x00000be00954b4011,0x00000000000ccad0,0x0000000000e19d0cc,0x0000000000000000,0x00000be4000000000,0x00000000000c0000,0x0000000000e1c0000},
+ { 0x0000000000000003,0x025d2ef916c71961f,0x00000000805e8687,0x00007a47a85902bbe,0x0000000000000000,0x025e0000000000000,0x0000000000000000,0x00007a60000000000},
+ { 0x000000000000007e,0x00004a51e5a2de8d9,0x00000000331c0469,0x000000001ca111141,0x0000000000000000,0x00004a60000000000,0x0000000033000000,0x000000001ca800000},
+ { 0x0000000000000003,0x018ae570ad8185afd,0x000000000000055f,0x000000005f88836da,0x0000000000000000,0x018b0000000000000,0x0000000000000000,0x000000005fa000000},
+ { 0x000000000304db4d,0x015ec0d9d49207571,0x000000003ef03297,0x010d816eb753bbca0,0x0000000000000000,0x015f0000000000000,0x0000000000000000,0x010e0000000000000},
+ { 0x0000000000000001,0x00000000001c00bda,0x000000000000004e,0x00000000000ec99b6,0x0000000000000000,0x00000000001c08000,0x0000000000000000,0x00000000000ecc000},
+ { 0x00000000000000f2,0x0000005d55c2785d5,0x000000000000d7d8,0x00000000000a88346,0x0000000000000000,0x0000005d600000000,0x000000000000c000,0x00000000000a8c000},
+ { 0x0000000000000004,0x00000a80b532ec473,0x0000000000000037,0x000003457d52f6105,0x0000000000000000,0x00000a84000000000,0x0000000000000000,0x00000346000000000},
+ { 0x0000000000084d13,0x093d11084a5966841,0x00001fa5a51c6c5c,0x000005d2d5301770e,0x0000000000000000,0x09400000000000000,0x00001fa000000000,0x000005d3000000000},
+ { 0x0000000000000040,0x00000872cf569c5f7,0x0000000000000ea7,0x000003dec0b1c8aea,0x0000000000000000,0x00000874000000000,0x0000000000000000,0x000003df000000000},
+ { 0x0000000000000c67,0x0000003c830753e08,0x0000000000060251,0x000000300f9ac9c89,0x0000000000000000,0x0000003c900000000,0x0000000000000000,0x00000030100000000},
+ { 0x0000000000000c72,0x006044e1eae2ef57f,0x000000071a97a3c0,0x000024b40c0811834,0x0000000000000000,0x00606000000000000,0x0000000000000000,0x000024c0000000000},
+ { 0x0000000000000001,0x000000054d74aa1fd,0x000000000000005f,0x00000000000744527,0x0000000000000000,0x000000054e0000000,0x0000000000000000,0x00000000000746000},
+ { 0x0000000000000035,0x00000011bb62616f3,0x00000000000070b2,0x00000006f560414af,0x0000000000000000,0x00000011c00000000,0x0000000000000000,0x00000006f60000000},
+ { 0x000000000002f837,0x0001a1084a3204204,0x00000001d6b988bd,0x00000004e04f6499a,0x0000000000000000,0x0001a180000000000,0x00000001c0000000,0x00000004e20000000},
+ { 0x00000000000000dc,0x01c80c7eec1160d31,0x00000000005e5fd8,0x000000130fd610603,0x0000000000000000,0x01c88000000000000,0x0000000000000000,0x00000013100000000},
+ { 0x00000000000000a7,0x007d8e9f93f3772b6,0x0000000022224f8a,0x000000031ac3ef8e3,0x0000000000000000,0x007da000000000000,0x0000000020000000,0x000000031b0000000},
+ { 0x0000001eb1739b22,0x0977424dbbad7983b,0x0000002cad7a5405,0x000002c6e0a2ab58d,0x0000000000000000,0x09780000000000000,0x0000002000000000,0x000002c7000000000},
+ { 0x0000000010ed2f7d,0x062ea7643ecfa117d,0x0000000130f59b29,0x000000039ed803ee5,0x0000000000000000,0x06300000000000000,0x0000000130000000,0x000000039f0000000},
+ { 0x0000000000063146,0x00000002c596db39f,0x00000000001f0475,0x0000000000450da3c,0x0000000000000000,0x00000002c60000000,0x00000000001e0000,0x00000000004520000},
+ { 0x000000000000030b,0x0000000037f0a091a,0x00000000000087ea,0x000000000000c8d49,0x0000000000000000,0x00000000380000000,0x0000000000008400,0x000000000000c9000},
+ { 0x00000000000000e2,0x00187b1badfd03e97,0x000000000021b9ae,0x00000059885dcae82,0x0000000000000000,0x00188000000000000,0x0000000000000000,0x00000059a00000000},
+ { 0x0000000000000152,0x0063a1d38f042790f,0x00001f936fa70ae3,0x00000324dde2b48f7,0x0000000000000000,0x0063c000000000000,0x00001f9000000000,0x00000325000000000},
+ { 0x00000000000000f7,0x0000000000030add7,0x00000000000029a2,0x000000000000047e4,0x0000000000000000,0x0000000000030b000,0x00000000000029a0,0x000000000000047e8},
+ { 0x00000000001050a7,0x0069d735e1661c131,0x0000000007110e5a,0x00040ee4224007a1b,0x0000000000000000,0x0069e000000000000,0x0000000000000000,0x00041000000000000},
+ { 0x00000000000002b4,0x0cde82b42743e694c,0x00000fbe82bb7456,0x000001a3bf06bc442,0x0000000000000000,0x0ce00000000000000,0x00000fbc00000000,0x000001a3c00000000},
+ { 0x0000000000000007,0x000000003247187c1,0x0000000000000008,0x000000000006a816e,0x0000000000000000,0x00000000325000000,0x0000000000000000,0x000000000006aa000},
+ { 0x00000000000012eb,0x00060420bfe301ef6,0x0000000023413fa2,0x0000167ff3f7c066b,0x0000000000000000,0x00060600000000000,0x0000000000000000,0x00001680000000000},
+ { 0x0000000000000001,0x00002522d77c7b4a6,0x00000000050b526c,0x000000000052c3b5a,0x0000000000000000,0x00002530000000000,0x00000000050b5000,0x000000000052c4000},
+ { 0x0000000000001979,0x001ff1d4bdc546756,0x000000000001f9cb,0x0000000000003a295,0x0000000000000000,0x001ff800000000000,0x000000000001f980,0x0000000000003a300},
+ { 0x00000000001d9dde,0x000000067e70a4f6b,0x00000000029761fb,0x00000000696c4eeae,0x0000000000000000,0x00000006800000000,0x0000000002000000,0x00000000698000000},
+ { 0x00000000000002a6,0x0dbf149ce41ff6d76,0x000d58b5fd6a6821,0x0b34b68a59762fd91,0x0000000000000000,0x0dc00000000000000,0x0000000000000000,0x0b380000000000000},
+ { 0x000000000001b218,0x0006de334c61cb6d7,0x000000000001f269,0x0000000000814d8f9,0x0000000000000000,0x0006e000000000000,0x0000000000000000,0x00000000008180000},
+ { 0x00000000000004cc,0x09e49d4128aef6b68,0x0000000000000988,0x00f60ca5073c8b8dc,0x0000000000000000,0x09e80000000000000,0x0000000000000000,0x00f64000000000000},
+ { 0x000000000000e8d3,0x000010e7f817f44d1,0x00000717272a70aa,0x000001a3444ac4256,0x0000000000000000,0x000010e8000000000,0x0000071000000000,0x000001a3800000000},
+ { 0x0000000017b3977f,0x00002d5ea844536fd,0x0000000051b22c1e,0x0000147097509c078,0x0000000000000000,0x00002d60000000000,0x0000000000000000,0x00001478000000000},
+ { 0x00000000504954af,0x00023b0a76697640d,0x000008d0ca7095be,0x0001d2f4af77f7340,0x0000000000000000,0x00023c00000000000,0x0000080000000000,0x0001d300000000000},
+ { 0x000000017a4238f6,0x0000008936dd7a0e6,0x000000fee22cbd8d,0x00000071ab00868b1,0x0000000000000000,0x00000089400000000,0x000000fe00000000,0x00000071c00000000},
+ { 0x0000000000000003,0x000030a89f9736b86,0x000000000013d238,0x00000000000242367,0x0000000000000000,0x000030b0000000000,0x000000000013d000,0x00000000000242800},
+ { 0x000000000000004a,0x000000ef11eb6b71e,0x0000000002cbaaf4,0x000000011ecd372af,0x0000000000000000,0x000000ef400000000,0x0000000000000000,0x000000011f0000000},
+ { 0x000000000000004b,0x0000d2cc3f65ecd53,0x0000000000001777,0x0000000001dfb3616,0x0000000000000000,0x0000d300000000000,0x0000000000000000,0x0000000001e000000},
+ { 0x00000000000002e4,0x0003a39ae4a6f8d28,0x00000000000031d6,0x000017121ba570048,0x0000000000000000,0x0003a400000000000,0x0000000000000000,0x00001718000000000},
+ { 0x000000000000a4d4,0x000003e70acf9e11f,0x000000000001c37e,0x00000008f78518494,0x0000000000000000,0x000003e8000000000,0x0000000000000000,0x00000008f80000000},
+ { 0x0000000000001df0,0x000000dcdfc33a237,0x0000003239cb74c2,0x0000002a9947cb6d4,0x0000000000000000,0x000000dd000000000,0x0000003200000000,0x0000002aa00000000},
+ { 0x0000000000000029,0x0000000000006ccf7,0x0000000000000032,0x0000000000000f4ee,0x0000000000000000,0x0000000000006ce00,0x0000000000000000,0x0000000000000f500},
+ { 0x000000000002c3de,0x0000000042457f4ea,0x0000000000846b24,0x000000000009923f9,0x0000000000000000,0x00000000426000000,0x0000000000846800,0x00000000000992800},
+ { 0x000000000000004d,0x000000002b3523f07,0x0000000000000ab2,0x00000000002c717fc,0x0000000000000000,0x000000002b4000000,0x0000000000000000,0x00000000002c80000},
+ { 0x0000000000000003,0x0030e61921d519a60,0x000000000000000e,0x00004ca4105482908,0x0000000000000000,0x0030f000000000000,0x0000000000000000,0x00004cc0000000000},
+ { 0x0000000000000212,0x0000000cc4035f276,0x00000000000012ec,0x00000000057cc4f85,0x0000000000000000,0x0000000cc80000000,0x0000000000000000,0x00000000057e00000},
+ { 0x000000000001ccd8,0x00148abfe7780f8f0,0x000000000b91e19f,0x0003831b536ae80ae,0x0000000000000000,0x00149000000000000,0x0000000000000000,0x00038400000000000},
+ { 0x00000000001be1ff,0x0003a3b27ef6f15b9,0x00000006703ce6af,0x0000007a32d5df0d6,0x0000000000000000,0x0003a400000000000,0x0000000600000000,0x0000007a400000000},
+ { 0x000089ea517df31b,0x001f374299d616839,0x00ed837e9162c81d,0x0016edacfa952ba28,0x0000800000000000,0x001f3800000000000,0x00ed800000000000,0x0016f000000000000},
+ { 0x000000017161bcd8,0x0005f4415449fdf11,0x0007896ac6b33039,0x00012817905fc5334,0x0000000000000000,0x0005f600000000000,0x0007880000000000,0x00012840000000000},
+ { 0x0000000000000009,0x0000001dd8133c2be,0x000000000000014f,0x0000000001a7ba767,0x0000000000000000,0x0000001de00000000,0x0000000000000000,0x0000000001a800000},
+ { 0x000000000000015a,0x000004bcac5d9c51c,0x0000000001ca081b,0x000000001ba8afd86,0x0000000000000000,0x000004be000000000,0x0000000001800000,0x000000001bb000000},
+ { 0x00000000006a1a1f,0x00000e04fa69f799d,0x00000000117b3baa,0x0000002a17e9546d5,0x0000000000000000,0x00000e08000000000,0x0000000000000000,0x0000002a200000000},
+ { 0x00000000233c923d,0x014fc016b1eec41c9,0x00000047696cfd2c,0x0000000b6d95225e4,0x0000000000000000,0x01500000000000000,0x0000004760000000,0x0000000b6e0000000},
+ { 0x0000000000000008,0x0060f5fe150125cae,0x00000000084ed185,0x0000007a390b935ac,0x0000000000000000,0x00610000000000000,0x0000000000000000,0x0000007a400000000},
+ { 0x0000000000003bb1,0x00000062a81cc391f,0x0000000000013b6e,0x00000000001326190,0x0000000000000000,0x00000062c00000000,0x0000000000010000,0x00000000001328000},
+ { 0x0000000000001986,0x002e776710249683c,0x0000000004c6bac8,0x000000001cac91a89,0x0000000000000000,0x002e8000000000000,0x0000000004800000,0x000000001cb000000},
+ { 0x000000000d8c8f39,0x00000c90e87c97ed1,0x000000013f796245,0x0000061d04ccbb692,0x0000000000000000,0x00000c94000000000,0x0000000000000000,0x0000061e000000000},
+ { 0x0000000000095d05,0x0001213d91aef755d,0x0000000f7a00d1ba,0x000000025dc39309b,0x0000000000000000,0x00012180000000000,0x0000000f78000000,0x000000025e0000000},
+ { 0x0000000075f5fb36,0x0e90174d353d218a0,0x0000000801e9580e,0x00003ff155cde26c5,0x0000000000000000,0x0e940000000000000,0x0000000000000000,0x00004000000000000},
+ { 0x00000000000000c7,0x006b1bd5cd1ff3afd,0x00000000000041d9,0x000001994bf24eb7b,0x0000000000000000,0x006b2000000000000,0x0000000000000000,0x00000199800000000},
+ { 0x0000000000000008,0x000000adb0a8134f4,0x000000000000567b,0x00000000000006c72,0x0000000000000000,0x000000adc00000000,0x0000000000005678,0x00000000000006c78},
+ { 0x00000000000005bb,0x00000149741289404,0x00000000000f5439,0x000000009be3eacbe,0x0000000000000000,0x00000149800000000,0x0000000000000000,0x000000009c0000000},
+ { 0x0000000000001b3d,0x00560af9ea7d70039,0x0000000b9fc92c22,0x000007c5bcc8d6a92,0x0000000000000000,0x00562000000000000,0x0000000000000000,0x000007c6000000000},
+ { 0x00000003749b9fa7,0x00043abb2cf5b7432,0x0000003932a06893,0x00000021eeadce793,0x0000000000000000,0x00043c00000000000,0x0000003900000000,0x00000021f00000000},
+ { 0x00000000000002c4,0x000037ab4d351e8c0,0x0000000000033d27,0x0000000000006fc3a,0x0000000000000000,0x000037b0000000000,0x0000000000033d00,0x0000000000006fd00},
+ { 0x0000000000000004,0x00003efadca33640b,0x0000007ce0ac313d,0x0000000f4ad8d985c,0x0000000000000000,0x00003f00000000000,0x0000007ce0000000,0x0000000f4c0000000},
+ { 0x0000000000000001,0x00ff9af20df9d0bb6,0x000000000002b093,0x0000000007569a68f,0x0000000000000000,0x00ffc000000000000,0x0000000000000000,0x00000000075800000},
+ { 0x00000000001442f7,0x00000254234fe6e1c,0x0000000021ecfebc,0x000000001d473b086,0x0000000000000000,0x00000255000000000,0x0000000021800000,0x000000001d4800000},
+ { 0x000000000000000d,0x0001018db18cd3db6,0x00000000000008a0,0x00001934fcfdc43e5,0x0000000000000000,0x00010200000000000,0x0000000000000000,0x00001938000000000},
+ { 0x000000000000004f,0x00e30e76954264e5d,0x0000000000000165,0x000000001d7d485af,0x0000000000000000,0x00e34000000000000,0x0000000000000000,0x000000001d8000000},
+ { 0x0000000000000003,0x000050371d2148581,0x0000000000000008,0x0000003c8b15028b7,0x0000000000000000,0x00005040000000000,0x0000000000000000,0x0000003c900000000},
+ { 0x00000000000000fd,0x000000001521ed688,0x000000000000abfa,0x000000000035f13ca,0x0000000000000000,0x00000000152800000,0x0000000000000000,0x00000000003600000},
+ { 0x000000000000000c,0x03bbe52af400a4e2f,0x0000000000004249,0x0000026f928eaeac5,0x0000000000000000,0x03bc0000000000000,0x0000000000000000,0x00000270000000000},
+ { 0x00000000002d4757,0x011d095dc89cb1ee0,0x00000001620c6b27,0x0005b39c351b93d38,0x0000000000000000,0x011d8000000000000,0x0000000000000000,0x0005b400000000000},
+ { 0x000000010b0e6a0d,0x0fdc44dfb9d016994,0x000001cdda2ff3f9,0x004d81700519d2aee,0x0000000000000000,0x0fe00000000000000,0x0000000000000000,0x004da000000000000},
+ { 0x0000000000000017,0x00000e3666ac76d85,0x00000000000740e9,0x00000000000e1ea48,0x0000000000000000,0x00000e38000000000,0x0000000000074000,0x00000000000e20000},
+ { 0x0000000000006735,0x0000044e0df30d795,0x00000034792b3d15,0x000000fcc0b41368e,0x0000000000000000,0x00000450000000000,0x0000003400000000,0x000000fd000000000},
+ { 0x0000000000000090,0x00000000000e68e41,0x00000000000000d8,0x0000000000002aa73,0x0000000000000000,0x00000000000e6c000,0x0000000000000000,0x0000000000002ab00},
+ { 0x00000000000066cc,0x000093c9225f70653,0x000000000000caaa,0x0000000000007fdff,0x0000000000000000,0x00009400000000000,0x000000000000ca00,0x0000000000007fe00},
+ { 0x0000000000000006,0x00fd41dd79ebf13d1,0x0000029ff303d63b,0x0000c693cc5395b8d,0x0000000000000000,0x00fd8000000000000,0x0000000000000000,0x0000c6c0000000000},
+ { 0x0000000000000003,0x002984d1bd963d46a,0x00000000000114b4,0x0000000007af8f100,0x0000000000000000,0x00299000000000000,0x0000000000000000,0x0000000007b000000},
+ { 0x00000000008fd9df,0x000f2a0f71284ab37,0x0000005b8c515d8c,0x000ab61dcf5d676fb,0x0000000000000000,0x000f2c00000000000,0x0000000000000000,0x000ab800000000000},
+ { 0x000001bd85b357eb,0x00acde0cd0d10e05e,0x00120c9a1ccab539,0x0016a4ec4d4ba3ed2,0x0000000000000000,0x00ad0000000000000,0x0012000000000000,0x0016a800000000000},
+ { 0x0000000000000000,0x05e9f19ca6e2b30dd,0x00000002cf0ae5b6,0x00003c9ea0dd0a664,0x0000000000000000,0x05ea0000000000000,0x0000000000000000,0x00003ca0000000000},
+ { 0x000000000000000a,0x05b95a16e22d94a86,0x000000f9a946fb7d,0x00000fbc225e4fddd,0x0000000000000000,0x05ba0000000000000,0x000000c000000000,0x00000fc0000000000},
+ { 0x0000000000001518,0x00000eb9ed1ddeb96,0x0000000000007a37,0x00000001ec8b23eae,0x0000000000000000,0x00000ebc000000000,0x0000000000000000,0x00000001ed0000000},
+ { 0x000000000289ab31,0x019f4a4cd8202fb27,0x00000f234a4b1222,0x0004de4e743b3670b,0x0000000000000000,0x019f8000000000000,0x0000000000000000,0x0004e000000000000},
+ { 0x000000017c1692ec,0x0000daa7af03062f6,0x000000035aadb44c,0x0000a387d9e1f51a5,0x0000000000000000,0x0000dac0000000000,0x0000000000000000,0x0000a3c0000000000},
+ { 0x000000000000005f,0x00000331cee5207b8,0x0000000000dc4bd7,0x000000000075672e9,0x0000000000000000,0x00000332000000000,0x0000000000dc0000,0x00000000007580000},
+ { 0x00000000000340c8,0x0001cd9be6aeb2e8c,0x0000000000da53cd,0x000001fefcc706c00,0x0000000000000000,0x0001ce00000000000,0x0000000000000000,0x000001ff000000000},
+ { 0x00000030c74c3f47,0x014a7c68e18005fd6,0x0000006bbe356ef0,0x00030c8e89b153eab,0x0000000000000000,0x014a8000000000000,0x0000000000000000,0x00030d00000000000},
+ { 0x0000000000000001,0x00000935271c5264f,0x0000000000000269,0x00000539adabf3eb2,0x0000000000000000,0x00000938000000000,0x0000000000000000,0x0000053a000000000},
+ { 0x000000000000025f,0x000053fd3184944a2,0x000000000000043c,0x000000000b5838db4,0x0000000000000000,0x00005400000000000,0x0000000000000000,0x000000000b5c00000},
+ { 0x00000000374bef4b,0x008840fd358a7121a,0x00000014a6676101,0x000044778f8afbae6,0x0000000000000000,0x00888000000000000,0x0000000000000000,0x00004480000000000},
+ { 0x0000000000150a9e,0x000eb9e3cb0af0b63,0x000e29fbf7308dd8,0x000af2a9c2c185d28,0x0000000000000000,0x000ebc00000000000,0x000e000000000000,0x000af400000000000},
+ { 0x0000000000001cf4,0x0009325a41821ba32,0x00000000000032df,0x0000005e489460bea,0x0000000000000000,0x00093400000000000,0x0000000000000000,0x0000005e600000000},
+ { 0x0000000000571ea0,0x0f4c73b51ed586850,0x003d046ee568a86b,0x056d8bfda22339258,0x0000000000000000,0x0f500000000000000,0x0020000000000000,0x056e0000000000000},
+ { 0x00000000005152a7,0x000000270567f9cf2,0x00000002adf3c7ff,0x0000000d8c7484b90,0x0000000000000000,0x00000027100000000,0x0000000280000000,0x0000000d900000000},
+ { 0x000000000000000e,0x000e332b98b3075a1,0x0000000000000028,0x0002b9ab0bc3677c2,0x0000000000000000,0x000e3400000000000,0x0000000000000000,0x0002ba00000000000},
+ { 0x00000000000006da,0x00000540270d93480,0x0000000000d136fc,0x000000000012af5b0,0x0000000000000000,0x00000542000000000,0x0000000000d12000,0x000000000012b0000},
+ { 0x0000000000000185,0x0000c5b3856271927,0x0000000000001467,0x000000000032e089b,0x0000000000000000,0x0000c5c0000000000,0x0000000000000000,0x000000000032f0000},
+ { 0x0000000000000006,0x000005efc90427ac6,0x0000000000000081,0x000000083e0e1d648,0x0000000000000000,0x000005f0000000000,0x0000000000000000,0x00000008400000000},
+ { 0x0000000000000005,0x00000000f9dc97463,0x0000000000000006,0x000000000000000ef,0x0000000000000000,0x00000000fa0000000,0x0000000000000006,0x000000000000000ef},
+ { 0x0000000000000022,0x0004c1906c8a0e81a,0x00000000000005d1,0x00013eee3ede8fd28,0x0000000000000000,0x0004c200000000000,0x0000000000000000,0x00013f00000000000},
+ { 0x000001f8c262be6a,0x03fbbf535d2efbe2f,0x0000045ba65405c2,0x033ea97d5078c37dc,0x0000000000000000,0x03fc0000000000000,0x0000000000000000,0x033f0000000000000},
+ { 0x0000000000000000,0x00000000001a0bb93,0x0000000000000001,0x0000000000003fac3,0x0000000000000000,0x00000000001a10000,0x0000000000000000,0x0000000000003fb00},
+ { 0x0000000000000001,0x000001d98d309ec72,0x0000000000d3a37a,0x0000001714c5b51b0,0x0000000000000000,0x000001da000000000,0x0000000000000000,0x00000017180000000},
+ { 0x00000000000071b1,0x00014a2730a044aff,0x000000000000b36d,0x000094f1e05642ad2,0x0000000000000000,0x00014a80000000000,0x0000000000000000,0x00009500000000000},
+ { 0x0000000000000145,0x00041e19fdcd5b114,0x0000000000e0ac7c,0x000023c8f66fc15d4,0x0000000000000000,0x00042000000000000,0x0000000000000000,0x000023d0000000000},
+ { 0x00000000000000d6,0x000000b93ddc0705e,0x0000000005dd1d97,0x00000007554bb3175,0x0000000000000000,0x000000b9400000000,0x0000000000000000,0x00000007560000000},
+ { 0x0000000000000011,0x000000004c063ff7c,0x000000000004441f,0x00000000064f5fcc2,0x0000000000000000,0x000000004c2000000,0x0000000000000000,0x00000000065000000},
+ { 0x000000000000000f,0x00000049bbd058308,0x0000000000000018,0x0000000000dc26501,0x0000000000000000,0x00000049c00000000,0x0000000000000000,0x0000000000dc40000},
+ { 0x00000000000032ee,0x0000bea871a0736f7,0x0000000005e1cc44,0x00000002dfc6ab078,0x0000000000000000,0x0000bec0000000000,0x0000000000000000,0x00000002e00000000},
+ { 0x00000013d7b30be2,0x075830f338a7b0207,0x0000520343ebf2a3,0x00757f2b6acbbc0a7,0x0000000000000000,0x075a0000000000000,0x0000000000000000,0x00758000000000000},
+ { 0x0000000000000072,0x002e737ae007adc02,0x0000000000004aaf,0x00000000004959a9a,0x0000000000000000,0x002e8000000000000,0x0000000000000000,0x00000000004960000},
+ { 0x000000001562aa0c,0x0005bfbb54dd1acdf,0x0000001b3e19973b,0x000000022867a5d4d,0x0000000000000000,0x0005c000000000000,0x0000001b3e000000,0x00000002288000000},
+ { 0x0000000000000001,0x000009ba3fdb16c44,0x000000000006bad5,0x0000000003f69e7ce,0x0000000000000000,0x000009bc000000000,0x0000000000000000,0x0000000003f700000},
+ { 0x0000000000000014,0x000000b0d18d817f0,0x0000000000000035,0x00000000000221e36,0x0000000000000000,0x000000b1000000000,0x0000000000000000,0x00000000000222000},
+ { 0x0000000000000024,0x0000001532ef76180,0x00000000000001da,0x00000000000000b46,0x0000000000000000,0x00000015380000000,0x00000000000001da,0x00000000000000b46},
+ { 0x0000000000000003,0x0000008b80819ddcb,0x00000000000002d4,0x00000000c2d5a1345,0x0000000000000000,0x0000008bc00000000,0x0000000000000000,0x00000000c30000000},
+ { 0x0000000000040235,0x000005e91802959db,0x0000000000c04107,0x000000056f8e67b55,0x0000000000000000,0x000005ea000000000,0x0000000000000000,0x00000005700000000},
+ { 0x000000000000001d,0x0000000001496210c,0x000000000007f711,0x0000000000042c98f,0x0000000000000000,0x00000000014980000,0x000000000007f000,0x0000000000042d000},
+ { 0x0000000000030a91,0x00000055f6cb27609,0x0000000022364a3e,0x00000000070aa7e3e,0x0000000000000000,0x00000056000000000,0x0000000022200000,0x00000000070c00000},
+ { 0x000000000000015f,0x0bd93c08d2313e11b,0x008b6a4d0e8a9640,0x05ea73ea8032f4158,0x0000000000000000,0x0bdc0000000000000,0x0080000000000000,0x05ec0000000000000},
+ { 0x00000000026a148e,0x0017e6078e4edfdba,0x0000002da49a8c9e,0x00000023d57650f12,0x0000000000000000,0x0017e800000000000,0x0000002d00000000,0x00000023e00000000},
+ { 0x000000000000053b,0x051bfaae68f40df31,0x000000007a20f4fc,0x00000002c9610f30f,0x0000000000000000,0x051c0000000000000,0x0000000070000000,0x00000002ca0000000},
+ { 0x0000000000000033,0x0000000d6fa1338fc,0x00000000000001ed,0x0000000000000c04d,0x0000000000000000,0x0000000d700000000,0x00000000000001c0,0x0000000000000c080},
+ { 0x0000000000000004,0x0a1cacc16482a8d68,0x000000002668cadb,0x000973c9c6d118133,0x0000000000000000,0x0a200000000000000,0x0000000000000000,0x00097400000000000},
+ { 0x0000000000002ed8,0x0000003369275e1ad,0x00000000000a328b,0x0000000009213589d,0x0000000000000000,0x00000033700000000,0x0000000000000000,0x00000000092400000},
+ { 0x0000000000000094,0x030f0a9d96e28d644,0x0000000000001bc7,0x0000000008930bc3a,0x0000000000000000,0x03100000000000000,0x0000000000000000,0x00000000089400000},
+ { 0x000000000038605d,0x00faa7205ac6837fb,0x00000001eeba51e6,0x00000001209d3f380,0x0000000000000000,0x00fac000000000000,0x00000001e8000000,0x00000001210000000},
+ { 0x000000000000003e,0x000000000005ba15d,0x000000000009a298,0x000000000002bcf21,0x0000000000000000,0x000000000005bc000,0x000000000009a000,0x000000000002bd000},
+ { 0x000000000000003b,0x00672a57ee1e2b8c8,0x0000000000b7d8af,0x000000008cc25d69a,0x0000000000000000,0x00674000000000000,0x0000000000000000,0x000000008d0000000},
+ { 0x0000000000002d84,0x039f4ad3b88e3c441,0x00000000000078cf,0x0010af3907e606f6e,0x0000000000000000,0x03a00000000000000,0x0000000000000000,0x0010b000000000000},
+ { 0x000000000000078c,0x0006c735bc162a11e,0x00000000000284c0,0x00000000002862dc4,0x0000000000000000,0x0006c800000000000,0x0000000000020000,0x00000000002870000},
+ { 0x0000000000000097,0x0000000000bd8f79e,0x0000000000000156,0x0000000000000c968,0x0000000000000000,0x0000000000bdc0000,0x0000000000000140,0x0000000000000c980},
+ { 0x0000000011945bd6,0x000028ce838ce0429,0x00000000c3590546,0x0000002a31c8d757c,0x0000000000000000,0x000028d0000000000,0x0000000000000000,0x0000002a400000000},
+ { 0x00000012656e3f1a,0x0000fcfd56ade82a6,0x000007288d2b3851,0x00003c09f85dee533,0x0000000000000000,0x0000fd00000000000,0x0000070000000000,0x00003c10000000000},
+ { 0x0000000000000008,0x020b8f9369f464fc5,0x00000000008ce361,0x0000001b913fbc91a,0x0000000000000000,0x020c0000000000000,0x0000000000000000,0x0000001b980000000},
+ { 0x0000000000003bd5,0x000149d2584e11dbf,0x0000000000005c14,0x00005f83f1c25c9b7,0x0000000000000000,0x00014a00000000000,0x0000000000000000,0x00005fa0000000000},
+ { 0x000000000730091c,0x00239ca6e26f289c7,0x0000001f931284ee,0x000ff4fdbe4eb9b42,0x0000000000000000,0x0023a000000000000,0x0000000000000000,0x000ff800000000000},
+ { 0x0000000000002344,0x030a5dc6a8c2d066e,0x000000000001fa9c,0x00000000000026a45,0x0000000000000000,0x030b0000000000000,0x000000000001fa80,0x00000000000026a60},
+ { 0x0000000000086050,0x00005c33d1ea1d35b,0x00000003297fab22,0x0000380d803f98192,0x0000000000000000,0x00005c40000000000,0x0000000000000000,0x00003810000000000},
+ { 0x0000000000000003,0x0002a8d0240c2079f,0x000000000156b34d,0x0000000017837dc29,0x0000000000000000,0x0002a900000000000,0x0000000001000000,0x00000000178800000},
+ { 0x0000000000005ba4,0x000000353278db3ae,0x0000000000090746,0x000000001c6a69b58,0x0000000000000000,0x00000035400000000,0x0000000000000000,0x000000001c7000000},
+ { 0x0000000000000043,0x000017ec4c74a4d65,0x0000000000000214,0x000000000014a49f4,0x0000000000000000,0x000017f0000000000,0x0000000000000000,0x000000000014a8000},
+ { 0x0000000000000001,0x0124b75508e5a9589,0x000000000000c775,0x000000014782e1ae2,0x0000000000000000,0x01250000000000000,0x0000000000000000,0x00000001480000000},
+ { 0x0000000000000024,0x00000119a7387d01e,0x000000000148c203,0x0000000009379636b,0x0000000000000000,0x0000011a000000000,0x0000000001400000,0x00000000093800000},
+ { 0x0000000000000074,0x06d37d8d170fd63b7,0x00000000e3e0db75,0x000e6b2f88087f778,0x0000000000000000,0x06d40000000000000,0x0000000000000000,0x000e6c00000000000},
+ { 0x0000000000001d0c,0x0000ba3c0db15904f,0x00000000003f562a,0x0000099fad35bfc84,0x0000000000000000,0x0000ba40000000000,0x0000000000000000,0x000009a0000000000},
+ { 0x0000000000003df9,0x00008673dde7126eb,0x00000000004e1999,0x00000000239d39f49,0x0000000000000000,0x00008680000000000,0x0000000000000000,0x0000000023a000000},
+ { 0x00000001d07987d9,0x0000fe8588109ded2,0x0000000b91d398e4,0x000000220f019cd56,0x0000000000000000,0x0000fec0000000000,0x0000000b00000000,0x00000022100000000},
+ { 0x0000000000000117,0x000000155f4c9f259,0x00000000001010aa,0x000000000d3ca7aff,0x0000000000000000,0x00000015600000000,0x0000000000000000,0x000000000d4000000},
+ { 0x00000000000018ea,0x02f1e5f14c1c6bcf2,0x00000ba61cb986cf,0x000028785064d493d,0x0000000000000000,0x02f20000000000000,0x00000b0000000000,0x00002880000000000},
+ { 0x0000000000000001,0x000074a338221f889,0x00000000b3300994,0x00000000354009b41,0x0000000000000000,0x000074c0000000000,0x00000000b3000000,0x00000000355000000},
+ { 0x0000000df8f5b69b,0x002390afc227d7b59,0x000000ab3ffbb2e1,0x0000000b8428a1c39,0x0000000000000000,0x0023a000000000000,0x000000ab3c000000,0x0000000b844000000},
+ { 0x000000000f123724,0x0000026344d4378fe,0x00000001f08fe45d,0x0000001154b881415,0x0000000000000000,0x00000264000000000,0x0000000180000000,0x00000011580000000},
+ { 0x00000000000013f3,0x0000cfdaf5a3197e4,0x000000000010b2dc,0x0000000e11c766671,0x0000000000000000,0x0000d000000000000,0x0000000000000000,0x0000000e140000000},
+ { 0x0000000000075388,0x0000ee7a4bdd3ae79,0x0000000000a48671,0x000006f8bb15fbf85,0x0000000000000000,0x0000ee80000000000,0x0000000000000000,0x000006fa000000000},
+ { 0x0000000000001894,0x000500225733f7683,0x0000000eb5af01b5,0x0000019ffb255e671,0x0000000000000000,0x00050200000000000,0x0000000800000000,0x000001a0000000000},
+ { 0x0000000000007a20,0x0669b451966637ea1,0x000000000000df25,0x00000000000023650,0x0000000000000000,0x066a0000000000000,0x000000000000df00,0x00000000000023680},
+ { 0x0000000000000004,0x000000000000005a4,0x000000000000000e,0x00000000000000317,0x0000000000000004,0x000000000000005a4,0x000000000000000e,0x00000000000000317},
+ { 0x0000000019dd8aa3,0x00005b8a16b01cba2,0x00000c43e1bc3451,0x0000010bf95c5b0dd,0x0000000000000000,0x00005ba0000000000,0x00000c4200000000,0x0000010c000000000},
+ { 0x0000000000000005,0x0000007107e9c2197,0x000000000000028d,0x0000000000fab3501,0x0000000000000000,0x00000071200000000,0x0000000000000000,0x0000000000fac0000},
+ { 0x0000000000000fab,0x0b14737c1a1c9d7b3,0x00007868c8f597b8,0x001f68f50b6e2e454,0x0000000000000000,0x0b180000000000000,0x0000000000000000,0x001f7000000000000},
+ { 0x00000000000002cf,0x00005df0346b64f91,0x0000000000005a4f,0x0000000000017f15d,0x0000000000000000,0x00005e00000000000,0x0000000000005800,0x0000000000017f800},
+ { 0x0000000000000001,0x00acbdad820c89cb4,0x0000000000db1e7d,0x000000568abc11af0,0x0000000000000000,0x00acc000000000000,0x0000000000000000,0x00000056a00000000},
+ { 0x0000000000000002,0x000000000000a5245,0x0000000000000005,0x00000000000000159,0x0000000000000000,0x000000000000a5400,0x0000000000000005,0x00000000000000159},
+ { 0x0000000000000001,0x00000000006416c0f,0x00000000000000fe,0x0000000000009f77a,0x0000000000000000,0x00000000006420000,0x0000000000000000,0x0000000000009f800},
+ { 0x0000000000000000,0x0000000000007b113,0x000000000000172d,0x000000000000101a9,0x0000000000000000,0x0000000000007b200,0x0000000000001700,0x000000000000101c0},
+ { 0x000000000000001a,0x0000a73ed0a12fed0,0x00000031185dc77f,0x0000707be1aeac652,0x0000000000000000,0x0000a740000000000,0x0000000000000000,0x00007080000000000},
+ { 0x00000000000000f4,0x0000f13196fcc8e05,0x000000003d76a87c,0x000000cb743c91d59,0x0000000000000000,0x0000f140000000000,0x0000000000000000,0x000000cb800000000},
+ { 0x00000000000007a2,0x001a67f3ef87ceb0e,0x00000589d5b1632e,0x00001cb11b69bdf77,0x0000000000000000,0x001a6800000000000,0x0000058000000000,0x00001cb8000000000},
+ { 0x000000000000a9dc,0x000000061462593cf,0x000000006b8daa0e,0x00000001f4a39fc5e,0x0000000000000000,0x00000006160000000,0x0000000068000000,0x00000001f50000000},
+ { 0x000000000000000f,0x005f25165fcde9821,0x000000000000d853,0x00000000a91c370c5,0x0000000000000000,0x005f4000000000000,0x0000000000000000,0x00000000a94000000},
+ { 0x0000000000000009,0x007c7bf58e2579a3d,0x0000000000363bcb,0x0000be887aaeb7040,0x0000000000000000,0x007c8000000000000,0x0000000000000000,0x0000bec0000000000},
+ { 0x0000000000000006,0x00000001298b7015e,0x00000000000002b7,0x000000000000127ae,0x0000000000000000,0x000000012a0000000,0x0000000000000280,0x00000000000012800},
+ { 0x0000000000000054,0x000000fbeff5acc55,0x0000000000004edb,0x00000000048f99e11,0x0000000000000000,0x000000fc000000000,0x0000000000000000,0x00000000049000000},
+ { 0x000000000000001b,0x0632af9856fe609ac,0x0002c38f45b8d922,0x00be29a0514c51b91,0x0000000000000000,0x06340000000000000,0x0000000000000000,0x00be4000000000000},
+ { 0x0000000013f1ebe7,0x000001dbd32592cac,0x000000001bd5479f,0x0000000cbd458c555,0x0000000000000000,0x000001dc000000000,0x0000000000000000,0x0000000cc00000000},
+ { 0x00000000000005b9,0x0015a36a88ae8dd66,0x0000008caf9dc8dd,0x000001e15dc5cad6f,0x0000000000000000,0x0015a800000000000,0x0000008800000000,0x000001e1800000000},
+ { 0x000000000000e247,0x00a8c224321584275,0x0000000000aa504a,0x000000003a31615dd,0x0000000000000000,0x00a90000000000000,0x0000000000000000,0x000000003a4000000},
+ { 0x0000000000000063,0x0000000001f4d41e7,0x0000000000000a4d,0x00000000000001701,0x0000000000000000,0x0000000001f500000,0x0000000000000a4d,0x00000000000001701},
+ { 0x0000000000181254,0x000002ac2c766c95e,0x0000000000be00a5,0x000000000092f7d64,0x0000000000000000,0x000002ad000000000,0x0000000000bc0000,0x00000000009300000},
+ { 0x0000000000007123,0x00f7144c9ba248505,0x00000000000096c9,0x0001eca522d59e0f3,0x0000000000000000,0x00f74000000000000,0x0000000000000000,0x0001ed00000000000},
+ { 0x000000000000000b,0x020c2af615adb9d4e,0x00001840e7237706,0x000bb6245d9d63702,0x0000000000000000,0x020d0000000000000,0x0000000000000000,0x000bb800000000000},
+ { 0x0000000000000070,0x0000006d43131899b,0x00000000001551bb,0x00000002d01417a39,0x0000000000000000,0x0000006d600000000,0x0000000000000000,0x00000002d10000000},
+ { 0x0000000000000061,0x069555f334094a98b,0x0000001cd408e4b3,0x0000032c5f0dc4928,0x0000000000000000,0x06960000000000000,0x0000001000000000,0x0000032d000000000},
+ { 0x000000000000260f,0x0001c257f93785cff,0x00000000896626ce,0x000000003832846fc,0x0000000000000000,0x0001c280000000000,0x0000000089000000,0x00000000384000000},
+ { 0x000000000005ed0f,0x00063a2abe8193325,0x00000000000d91e1,0x0003481a42a1c3bf3,0x0000000000000000,0x00063c00000000000,0x0000000000000000,0x00034900000000000},
+ { 0x0000000000000a18,0x00000000007ca5b3a,0x000000000000d6b0,0x000000000037b101d,0x0000000000000000,0x00000000007cc0000,0x0000000000000000,0x000000000037c0000},
+ { 0x000000000000000c,0x000000015b3000b70,0x0000000000000860,0x0000000003aa80aed,0x0000000000000000,0x000000015b8000000,0x0000000000000000,0x0000000003ab00000},
+ { 0x00000000001b7f57,0x00000033c9db123b9,0x0000000000e554bd,0x00000000d76b24d77,0x0000000000000000,0x00000033d00000000,0x0000000000000000,0x00000000d78000000},
+ { 0x000000000018e914,0x00018885fe2fb84b8,0x00000185d489ce47,0x000000b82f1da2428,0x0000000000000000,0x00018900000000000,0x0000018400000000,0x000000b8400000000},
+ { 0x0000000002dce3ec,0x001b5f9667ffc7cc5,0x000000039927ac74,0x0000000079c2eb325,0x0000000000000000,0x001b6000000000000,0x0000000398000000,0x0000000079e000000},
+ { 0x0000000000000004,0x0000001d513229a18,0x0000000028c41f3c,0x0000000027b1f0cf8,0x0000000000000000,0x0000001d580000000,0x0000000028000000,0x0000000027c000000},
+ { 0x0000000000001305,0x02b1c82945741710a,0x00000050267f77b7,0x0000000a50e47deeb,0x0000000000000000,0x02b20000000000000,0x0000005020000000,0x0000000a520000000},
+ { 0x0000000000000001,0x02901385ce3deede4,0x000000000000001e,0x000000000332b5168,0x0000000000000000,0x02910000000000000,0x0000000000000000,0x00000000033300000},
+ { 0x0000000000000035,0x00000005c480e2771,0x0000000000001ef4,0x000000000007b109d,0x0000000000000000,0x00000005c60000000,0x0000000000000000,0x000000000007b2000},
+ { 0x0000000000000016,0x0000000006e637373,0x0000000000000640,0x0000000000004a15c,0x0000000000000000,0x0000000006e800000,0x0000000000000600,0x0000000000004a200},
+ { 0x0000000000000000,0x00004afb1db43fa28,0x0000000000000008,0x000000000103074ed,0x0000000000000000,0x00004b00000000000,0x0000000000000000,0x00000000010380000},
+ { 0x0000000000008821,0x00000024f822539e6,0x00000000000e830c,0x00000000e223e25d6,0x0000000000000000,0x00000025000000000,0x0000000000000000,0x00000000e24000000},
+ { 0x0000000000000f73,0x00000017451d19d8b,0x0000000000002ca9,0x00000000003a3bb9e,0x0000000000000000,0x00000017480000000,0x0000000000000000,0x00000000003a40000},
+ { 0x000000000010fa7d,0x0000078551fdd34c1,0x00000049280bd95c,0x0000006c0ffaa6226,0x0000000000000000,0x00000786000000000,0x0000004800000000,0x0000006c200000000},
+ { 0x0000000000b6fba3,0x02fdc04290749fabd,0x0000000006bf12a1,0x000010169fee9c41b,0x0000000000000000,0x02fe0000000000000,0x0000000000000000,0x00001018000000000},
+ { 0x0000000000015bca,0x00000007de2f26b6d,0x0000000000170251,0x0000000000099f096,0x0000000000000000,0x00000007e00000000,0x0000000000170000,0x000000000009a0000},
+ { 0x0000000000002943,0x00000053648269f3b,0x000000000138a54a,0x0000003a145cc1791,0x0000000000000000,0x00000053800000000,0x0000000000000000,0x0000003a200000000},
+ { 0x0000000000000012,0x00000f3a412a31fd9,0x0000000000000ac8,0x000000001ae8788ca,0x0000000000000000,0x00000f3c000000000,0x0000000000000000,0x000000001af000000},
+ { 0x000000000000000c,0x000000000302f2232,0x0000000000000044,0x0000000000001bc19,0x0000000000000000,0x00000000030300000,0x0000000000000000,0x0000000000001bc80},
+ { 0x00000000000051fb,0x0000116d3ab6e49c0,0x0000000000863f5e,0x0000000001d568f68,0x0000000000000000,0x00001170000000000,0x0000000000800000,0x0000000001d580000},
+ { 0x0000000000001d90,0x0000e3e6dc4d208a6,0x00000000157002ac,0x00000006f5f8d9fc7,0x0000000000000000,0x0000e400000000000,0x0000000000000000,0x00000006f60000000},
+ { 0x000000000000d33e,0x00000000006b4ef9c,0x000000000001d915,0x000000000015c1d62,0x0000000000000000,0x00000000006b60000,0x0000000000018000,0x000000000015c8000},
+ { 0x000000000000059d,0x0000000001caa2448,0x00000000001c2b00,0x00000000007e06511,0x0000000000000000,0x0000000001cb00000,0x00000000001c0000,0x00000000007e20000},
+ { 0x0000000000000090,0x000031545e83804b1,0x0000000000003d75,0x00001a30920c93b76,0x0000000000000000,0x00003160000000000,0x0000000000000000,0x00001a38000000000},
+ { 0x000000000000004e,0x00a456ca4a41286c2,0x000000000000038a,0x00002d4232721ec1c,0x0000000000000000,0x00a48000000000000,0x0000000000000000,0x00002d50000000000},
+ { 0x0000000000d7953a,0x000006c4ec9288d6f,0x00000021ff469a00,0x00000392e84a36c63,0x0000000000000000,0x000006c6000000000,0x0000002000000000,0x00000393000000000},
+ { 0x00000005e8d7defa,0x0000d24336a535690,0x0000083481efe4ba,0x000077e4039b418bc,0x0000000000000000,0x0000d280000000000,0x0000080000000000,0x00007800000000000},
+ { 0x00000000000048ef,0x00000003f947de053,0x0000000000572bfe,0x00000000455392d72,0x0000000000000000,0x00000003fa0000000,0x0000000000000000,0x00000000456000000},
+ { 0x0000002da46938dc,0x0000007d22d5d592a,0x000001288a4d2323,0x0000005c59e1d29f8,0x0000002c00000000,0x0000007d400000000,0x0000012800000000,0x0000005c600000000},
+ { 0x000000000000148b,0x02d3412cd769176e4,0x00000000f6bac20b,0x0000000b519aa4469,0x0000000000000000,0x02d40000000000000,0x00000000c0000000,0x0000000b540000000},
+ { 0x0000000000000197,0x00134d194c7f3bd48,0x0000001bb3cd8f67,0x000087c856f4af462,0x0000000000000000,0x00135000000000000,0x0000000000000000,0x00008800000000000},
+ { 0x000000000000002e,0x0a48f8ca07ea33834,0x00547fda890b9b6a,0x01182e6ebac2d882b,0x0000000000000000,0x0a4c0000000000000,0x0050000000000000,0x01188000000000000},
+ { 0x0000000000000089,0x0002c1733d08f6528,0x0000000052dc00ee,0x0000000006947a71e,0x0000000000000000,0x0002c200000000000,0x0000000052d80000,0x00000000069480000},
+ { 0x0000000000000042,0x000007ac63f766a03,0x000000000001d721,0x00000000024c266c8,0x0000000000000000,0x000007ae000000000,0x0000000000000000,0x00000000024d00000},
+ { 0x000000000033c35c,0x00000000d7ff3ffde,0x00000000017871a1,0x0000000036996d214,0x0000000000000000,0x00000000d80000000,0x0000000001000000,0x0000000036a000000},
+ { 0x000000000829beaf,0x000f73c0d058a98c8,0x000000000b875857,0x00002c1f6794c5cd3,0x0000000000000000,0x000f7400000000000,0x0000000000000000,0x00002c20000000000},
+ { 0x00000000000000be,0x0000000005001c8e6,0x000000000cca2a96,0x000000000292b5b75,0x0000000000000000,0x00000000050200000,0x000000000cc80000,0x00000000029300000},
+ { 0x0000000000058645,0x00000020eb8f058ad,0x000000000356305e,0x00000000634978a93,0x0000000000000000,0x00000020f00000000,0x0000000002000000,0x00000000636000000},
+ { 0x00000000000006e9,0x0000011c48e29d2d5,0x000000334a5c93d4,0x000000aca35e47d6d,0x0000000000000000,0x0000011c800000000,0x0000003000000000,0x000000acc00000000},
+ { 0x0000000000000b75,0x01d4ea36a928f6b17,0x000000000000a72a,0x000006d3bdb31ae1e,0x0000000000000000,0x01d50000000000000,0x0000000000000000,0x000006d4000000000},
+ { 0x000000000fc3785d,0x000000012678a8692,0x00000000337674f2,0x00000000054e1457f,0x0000000008000000,0x00000001268000000,0x0000000033700000,0x00000000054f00000},
+ { 0x0000000000000000,0x00000000430077e18,0x0000000007e4e6af,0x0000000000bb217a1,0x0000000000000000,0x00000000432000000,0x0000000007e40000,0x0000000000bb30000},
+ { 0x0000000000000043,0x032d3e1c3dd3636fc,0x00a981fc22a65a5a,0x01388e03ab7d914a1,0x0000000000000000,0x032e0000000000000,0x00a8000000000000,0x01390000000000000},
+ { 0x0000000000000003,0x00bb69039be045162,0x0000000000000005,0x000000000000000ef,0x0000000000000000,0x00bb8000000000000,0x0000000000000005,0x000000000000000ef},
+ { 0x000000000000007a,0x0db06a583ac53e306,0x0000000247cf4a79,0x0779f4ad356a6b471,0x0000000000000000,0x0db40000000000000,0x0000000000000000,0x077a0000000000000},
+ { 0x000000000000006c,0x000032ac31077cac2,0x00000000002fe004,0x00000165ce02924b2,0x0000000000000000,0x000032b0000000000,0x0000000000000000,0x00000166000000000},
+ { 0x0000000000000001,0x00000000334109764,0x000000000000000a,0x00000000003487f5d,0x0000000000000000,0x00000000335000000,0x0000000000000000,0x00000000003490000},
+ { 0x0000000000000002,0x00000002d76a61a67,0x0000000000000013,0x000000000000019b3,0x0000000000000000,0x00000002d80000000,0x0000000000000010,0x000000000000019b8},
+ { 0x000000000000000f,0x00000130e82f518ad,0x0000000000009b4f,0x00000033566f047fd,0x0000000000000000,0x00000131000000000,0x0000000000000000,0x00000033600000000},
+ { 0x0000000000000009,0x05d4a180b2d6bdb86,0x00001ea24e85602b,0x00e5da1261b703f40,0x0000000000000000,0x05d60000000000000,0x0000000000000000,0x00e60000000000000},
+ { 0x0000000000001b5f,0x0016febe062ef4f1a,0x00000000b26b2667,0x0000011056ef5c031,0x0000000000000000,0x00170000000000000,0x0000000000000000,0x00000110800000000},
+ { 0x000000000000000f,0x033d44ef22f50cb50,0x0000000000046d71,0x000e7da39fcea1201,0x0000000000000000,0x033e0000000000000,0x0000000000000000,0x000e8000000000000},
+ { 0x0000000000000000,0x00000062dbfbb9973,0x0000000000000015,0x000000000000222e0,0x0000000000000000,0x00000062e00000000,0x0000000000000000,0x00000000000022300},
+ { 0x0000000000000005,0x000000859e93c13ef,0x0000000000000e84,0x000000003c9e945ec,0x0000000000000000,0x00000085c00000000,0x0000000000000000,0x000000003ca000000},
+ { 0x0000000000000007,0x000000000072520d4,0x0000000000006d23,0x00000000003529db6,0x0000000000000000,0x00000000007260000,0x0000000000000000,0x00000000003530000},
+ { 0x000000000000012e,0x00db8296ec32827d5,0x00000000000001a5,0x0000000000074d6c6,0x0000000000000000,0x00dbc000000000000,0x0000000000000000,0x0000000000074e000},
+ { 0x00000001ccedfe19,0x010e4ac805e8e39f0,0x0000096e56a9e1ae,0x00029ddc127a07d1a,0x0000000000000000,0x010e8000000000000,0x0000000000000000,0x00029e00000000000},
+ { 0x000000000001cc2a,0x00000238b26e061c1,0x0000000177ce0c77,0x000000bbb41e7ae69,0x0000000000000000,0x00000239000000000,0x0000000000000000,0x000000bbc00000000},
+ { 0x0000000000000006,0x000000003517aa33d,0x0000000000001ca5,0x00000000000222f1c,0x0000000000000000,0x00000000352000000,0x0000000000001000,0x00000000000223000},
+ { 0x0000000000000003,0x0002f5040c78cf46d,0x0000000000000aec,0x00001c9a77fc9ed2d,0x0000000000000000,0x0002f600000000000,0x0000000000000000,0x00001ca0000000000},
+ { 0x000000000000003d,0x000000006fe19b9c9,0x0000000000048d29,0x0000000000015f321,0x0000000000000000,0x00000000700000000,0x0000000000048800,0x0000000000015f800},
+ { 0x0000000000000010,0x00ef8c382d09fb8b8,0x0000000000011522,0x00000075df35d9536,0x0000000000000000,0x00efc000000000000,0x0000000000000000,0x00000075e00000000},
+ { 0x0000000000000002,0x00000005b6a940f16,0x0000000000000003,0x0000000000000019a,0x0000000000000000,0x00000005b80000000,0x0000000000000003,0x0000000000000019a},
+ { 0x0000000000000006,0x000000000001256d4,0x0000000000000013,0x000000000000001fc,0x0000000000000000,0x00000000000125800,0x0000000000000013,0x000000000000001fc},
+ { 0x000000000001e0e5,0x067775d73a8661a56,0x0000000000d7291b,0x00000036c5d13ecec,0x0000000000000000,0x06780000000000000,0x0000000000000000,0x00000036d00000000},
+ { 0x000000000000001f,0x000001a50c6962eb1,0x0000000000000c5a,0x00000000b7b4fd57b,0x0000000000000000,0x000001a5800000000,0x0000000000000000,0x00000000b7c000000},
+ { 0x000000000000006a,0x00000002252e04953,0x000000000000065d,0x00000000000020d20,0x0000000000000000,0x00000002260000000,0x0000000000000600,0x00000000000020e00},
+ { 0x000000000000021a,0x0000000000001d6f1,0x0000000000000515,0x0000000000000227e,0x0000000000000200,0x0000000000001d700,0x0000000000000510,0x00000000000002280},
+ { 0x0000000000008994,0x0047e013f529d3731,0x00000000000b1414,0x000000000b2ade36e,0x0000000000000000,0x00480000000000000,0x0000000000000000,0x000000000b2c00000},
+ { 0x00000000579728f6,0x0000700cb86d6759d,0x0000001aa49dde86,0x0000003e3fda2ef11,0x0000000000000000,0x00007020000000000,0x0000001a00000000,0x0000003e400000000},
+ { 0x0000000000000005,0x0000013d111fe1e06,0x00000000000002fb,0x000000000000dd55d,0x0000000000000000,0x0000013d800000000,0x0000000000000000,0x000000000000dd800},
+ { 0x000000000000000d,0x001afb92db26b5f7d,0x0000000000ad2486,0x00000000a8f749941,0x0000000000000000,0x001b0000000000000,0x0000000000000000,0x00000000a90000000},
+ { 0x00000000000006e2,0x000001835d57adfa8,0x0000000003111b44,0x000000244b53b9dfc,0x0000000000000000,0x00000183800000000,0x0000000000000000,0x00000024500000000},
+ { 0x0000000000000011,0x00c78d363ba55f16f,0x00000000000002e1,0x0000000006f1a4d9d,0x0000000000000000,0x00c7c000000000000,0x0000000000000000,0x0000000006f200000},
+ { 0x00000000000c4e5e,0x001d78bad0162af32,0x00000006b1227f37,0x0001ed204e3b5f3f6,0x0000000000000000,0x001d8000000000000,0x0000000000000000,0x0001ed80000000000},
+ { 0x00000000000003af,0x00000c128dedff595,0x000000000fddafe9,0x0000002d93343ef10,0x0000000000000000,0x00000c14000000000,0x0000000000000000,0x0000002da00000000},
+ { 0x0000000000000056,0x00000026a266453f6,0x00000000000000d3,0x000000000000e9b44,0x0000000000000000,0x00000026b00000000,0x0000000000000000,0x000000000000e9c00},
+ { 0x0000009a5355e98e,0x0163bbbfdb31f0c14,0x0011db33d9cc6e32,0x0008c132c744afda7,0x0000000000000000,0x01640000000000000,0x0011c00000000000,0x0008c200000000000},
+ { 0x0000000000000005,0x077c68305b79a1330,0x0000006d3ee51ce9,0x0063ac06a39f6fefd,0x0000000000000000,0x077e0000000000000,0x0000000000000000,0x0063c000000000000},
+ { 0x000000000000000e,0x0000001e21e025556,0x0000000000027edb,0x0000000001c069196,0x0000000000000000,0x0000001e280000000,0x0000000000000000,0x0000000001c080000},
+ { 0x00000000000002d6,0x001751ab6f9c7a32c,0x00000000e2d5d6ef,0x0000160909f015795,0x0000000000000000,0x00175800000000000,0x0000000000000000,0x00001610000000000},
+ { 0x0000000000172d94,0x00085825f805c4c37,0x0000000000554b78,0x0000002af1c90c7e4,0x0000000000000000,0x00085c00000000000,0x0000000000000000,0x0000002b000000000},
+ { 0x000000000017add8,0x00000e5c423b5826c,0x00000000c02e32c5,0x0000000aa9329adcf,0x0000000000000000,0x00000e60000000000,0x00000000c0000000,0x0000000aac0000000},
+ { 0x000000000003fa6d,0x00a9ffc3de5f9bc8d,0x00000284ed9e6aed,0x000041c0941f6bb18,0x0000000000000000,0x00aa0000000000000,0x0000020000000000,0x000041e0000000000},
+ { 0x0000000000000018,0x0000001e9c7b7e47c,0x0000000000000249,0x00000000057d81508,0x0000000000000000,0x0000001ea00000000,0x0000000000000000,0x00000000057e00000},
+ { 0x00000000000000da,0x00000e85a46fc4b1b,0x0000000003dae16e,0x00000000042fc1eff,0x0000000000000000,0x00000e88000000000,0x0000000003d00000,0x00000000043000000},
+ { 0x000000000000004f,0x000000002c8fde0ba,0x000000000000028d,0x000000001838fdefe,0x0000000000000000,0x000000002c9000000,0x0000000000000000,0x00000000184000000},
+ { 0x00000000001d9733,0x0001b3d207d8b6add,0x000000000173c61d,0x000004d7561b35f84,0x0000000000000000,0x0001b400000000000,0x0000000000000000,0x000004d8000000000},
+ { 0x0000000000000011,0x000000e43197dd277,0x0000000000005deb,0x0000000182785563d,0x0000000000000000,0x000000e4400000000,0x0000000000000000,0x00000001828000000},
+ { 0x0000000000131840,0x00093c3d825c16870,0x00001bcbee524f5c,0x0003f92ffe03a4f07,0x0000000000000000,0x00094000000000000,0x0000100000000000,0x0003fa00000000000},
+ { 0x0000000000000046,0x00000fb95d5560285,0x000000b218d9d71e,0x00000013f669af384,0x0000000000000000,0x00000fbc000000000,0x000000b200000000,0x00000013f80000000},
+ { 0x0000000000000073,0x0001ceb03a8715146,0x0000000024d291bb,0x000000033d793c77e,0x0000000000000000,0x0001cf00000000000,0x0000000020000000,0x000000033e0000000},
+ { 0x0000000000000001,0x000004f6f038e9501,0x000000000000000f,0x0000000028b499b31,0x0000000000000000,0x000004f8000000000,0x0000000000000000,0x0000000028c000000},
+ { 0x0000000000000008,0x0091af2021b744e8f,0x00000000001bde17,0x0000000291379198d,0x0000000000000000,0x0091c000000000000,0x0000000000000000,0x00000002920000000},
+ { 0x00000000000004d4,0x036bfe347538388aa,0x001d34d8ecedb072,0x00448736b90d1c6d5,0x0000000000000000,0x036c0000000000000,0x001c000000000000,0x0044a000000000000},
+ { 0x000000000000a58a,0x0000000032dba06d5,0x000000000000fa10,0x000000000012697ac,0x0000000000000000,0x0000000032e000000,0x0000000000008000,0x00000000001270000},
+ { 0x0000000000000002,0x0000000038b60ff89,0x0000000000003e50,0x00000000000028503,0x0000000000000000,0x0000000038c000000,0x0000000000003e00,0x00000000000028600},
+ { 0x00000000000003b9,0x0000007e9a615eec0,0x00000000000017d9,0x000000000000f40e4,0x0000000000000000,0x0000007ea00000000,0x0000000000001400,0x000000000000f4400},
+ { 0x00000000000d3115,0x00000b0e9fc12aa5c,0x00000000001f1932,0x000000000037997a2,0x0000000000000000,0x00000b10000000000,0x00000000001f0000,0x000000000037a0000},
+ { 0x0000000000035bf5,0x0027505160900648a,0x0000000011507f1a,0x000ff6dba4fe8433b,0x0000000000000000,0x00276000000000000,0x0000000000000000,0x000ff800000000000},
+ { 0x0000000000000103,0x0000000000328752d,0x0000000000007462,0x00000000002d3f55a,0x0000000000000000,0x00000000003290000,0x0000000000000000,0x00000000002d40000},
+ { 0x00000000000064db,0x00000000006f4b59a,0x0000000000017b12,0x0000000000068d4a2,0x0000000000000000,0x00000000006f60000,0x0000000000016000,0x0000000000068e000},
+ { 0x000000000000043c,0x003d940192c4b3453,0x0000000006f61d29,0x00000002b0bd59e92,0x0000000000000000,0x003da000000000000,0x0000000000000000,0x00000002b10000000},
+ { 0x0000000000000036,0x00001292640a70a48,0x0000000000000055,0x000000d1fe03472a2,0x0000000000000000,0x00001298000000000,0x0000000000000000,0x000000d2000000000},
+ { 0x0000000000000005,0x00054a0cee29b2d60,0x0000002c093348cb,0x00028ff7798253893,0x0000000000000000,0x00054c00000000000,0x0000000000000000,0x00029000000000000},
+ { 0x00000329d46ecdd4,0x01b0e024b3d5139e2,0x0003f630824aa6ed,0x00df806a57865624d,0x0000000000000000,0x01b10000000000000,0x0000000000000000,0x00dfc000000000000},
+ { 0x0000000004f642b8,0x00000abe228656de9,0x0000003b7fae174d,0x00000035782e31faa,0x0000000000000000,0x00000ac0000000000,0x0000003b00000000,0x00000035800000000},
+ { 0x0000000001a1257c,0x000000ed8c824e19b,0x0000000008bdbe1f,0x0000000103ca32264,0x0000000000000000,0x000000edc00000000,0x0000000008000000,0x00000001040000000},
+ { 0x0000000000000033,0x005e64e78c9131aed,0x0000000007723a1c,0x00004c244ec2a02b2,0x0000000000000000,0x005e8000000000000,0x0000000000000000,0x00004c40000000000},
+ { 0x0000002cbc180608,0x00986e4905efa3690,0x008b9cc805a79255,0x0008cc031fa689f4d,0x0000000000000000,0x00988000000000000,0x008b9c8000000000,0x0008cc08000000000},
+ { 0x00000000000004b7,0x000023cc3f0ee3b14,0x000007369c995096,0x000003308ec39fb1f,0x0000000000000000,0x000023d0000000000,0x0000073000000000,0x00000331000000000},
+ { 0x0000000002c214a5,0x00000dfd4bfb6ff31,0x0000005328b21913,0x0000000f58a4014a9,0x0000000000000000,0x00000e00000000000,0x0000005300000000,0x0000000f5c0000000},
+ { 0x0000000000000006,0x06836ed5e9d939801,0x00000000000002c9,0x000000000000020fc,0x0000000000000000,0x06840000000000000,0x00000000000002c8,0x00000000000002100},
+ { 0x00000000000000b9,0x015c7dba0b32bab25,0x000000001fe37e57,0x00000000282909cd2,0x0000000000000000,0x015c8000000000000,0x000000001f000000,0x00000000283000000},
+ { 0x000000000000002e,0x00001aaeb100af218,0x00000000000007fd,0x000000360a467f291,0x0000000000000000,0x00001ab0000000000,0x0000000000000000,0x00000036100000000},
+ { 0x0000000000000028,0x00158ed11365dbb21,0x000075881348b6b9,0x0000e0a22eaba07c0,0x0000000000000000,0x00159000000000000,0x0000740000000000,0x0000e0c0000000000},
+ { 0x0000000000000033,0x0000eda9bf7fd1647,0x0000000000000035,0x00000001da32b2287,0x0000000000000000,0x0000edc0000000000,0x0000000000000000,0x00000001da8000000},
+ { 0x0000000000000b03,0x075fb991d5acdd040,0x0043a5c7b2babb59,0x00144d6cf94048277,0x0000000000000000,0x07600000000000000,0x0043800000000000,0x00145000000000000},
+ { 0x0000000000001154,0x00029a53edad9353f,0x0000000000015d42,0x0000000000c08e291,0x0000000000000000,0x00029b00000000000,0x0000000000000000,0x0000000000c0c0000},
+ { 0x00000000000063eb,0x0000000000339209c,0x000000000006c4b1,0x000000000015af16a,0x0000000000000000,0x000000000033a0000,0x0000000000068000,0x000000000015b0000},
+ { 0x0000000000b3d8bd,0x0022dd0eb7c993861,0x00000000498474c4,0x000007937c5c2917e,0x0000000000000000,0x0022e000000000000,0x0000000000000000,0x00000794000000000},
+ { 0x0000000000002342,0x0003afed05772681f,0x00000184bd5fa81c,0x0000ebfee2d561b94,0x0000000000000000,0x0003b000000000000,0x0000000000000000,0x0000ec00000000000},
+ { 0x0000000000000000,0x001d3124bade797d6,0x00000000000028a9,0x00001f053c9cb11b8,0x0000000000000000,0x001d3800000000000,0x0000000000000000,0x00001f08000000000},
+ { 0x0000000000016cf6,0x000001893ff8b5412,0x00000122aa19a5e3,0x000000e675fd541d1,0x0000000000000000,0x00000189800000000,0x0000012000000000,0x000000e6800000000},
+ { 0x00000000000007d5,0x00000328b19f3a9c8,0x00000000001b13fd,0x0000000000035437d,0x0000000000000000,0x00000329000000000,0x00000000001b1000,0x00000000000354800},
+ { 0x00000000000003d8,0x0070dce7c2229d5d8,0x0000000000d892ab,0x0000000000a8e137b,0x0000000000000000,0x0070e000000000000,0x0000000000d80000,0x0000000000a900000},
+ { 0x000000000019a4fa,0x0002000e57bfe8a36,0x0000017b373b40a5,0x0000acf03797be564,0x0000000000000000,0x00020100000000000,0x0000000000000000,0x0000ad00000000000},
+ { 0x0000000000000070,0x000006975e3c04717,0x000000000fdf4c5d,0x00000009e8deec773,0x0000000000000000,0x00000698000000000,0x0000000000000000,0x00000009ec0000000},
+ { 0x000000002786ef01,0x00b7cf190f348e7a7,0x000000d8b795fb29,0x00001c19870bc05c5,0x0000000000000000,0x00b80000000000000,0x0000008000000000,0x00001c20000000000},
+ { 0x0000000000001990,0x00fd4bcb1392714fb,0x000000000001dffc,0x0000000025e8b1ce8,0x0000000000000000,0x00fd8000000000000,0x0000000000000000,0x0000000025f000000},
+ { 0x00000000000183e9,0x0000027db6720a8c8,0x0000000001cf3a62,0x0000001af21855737,0x0000000000000000,0x0000027e000000000,0x0000000000000000,0x0000001af80000000},
+ { 0x0000000000000000,0x000393160ced45efd,0x0000000000000006,0x0000001527eb7c075,0x0000000000000000,0x00039400000000000,0x0000000000000000,0x00000015280000000},
+ { 0x0000000000000049,0x000088fbd1aa68ace,0x0000000000000555,0x000000089299328f1,0x0000000000000000,0x00008900000000000,0x0000000000000000,0x00000008940000000},
+ { 0x0000000000000003,0x01c3229e771e6543c,0x0000000000e3a7cb,0x0000004a34f53c35e,0x0000000000000000,0x01c38000000000000,0x0000000000000000,0x0000004a400000000},
+ { 0x000000000000000b,0x000000012b0601d22,0x0000000000000019,0x0000000043a59e84c,0x0000000000000000,0x000000012b8000000,0x0000000000000000,0x0000000043c000000},
+ { 0x00000000001f4915,0x028a5443ceb5b3e1f,0x0000000070730b6e,0x000000000d8fee99b,0x0000000000000000,0x028b0000000000000,0x0000000070600000,0x000000000d9000000},
+ { 0x00000017fd9fc5e9,0x000026ea8a01028fb,0x0000b66169fda12a,0x000010346c1310c71,0x0000000000000000,0x000026f0000000000,0x0000b66000000000,0x00001036000000000},
+ { 0x0000000000000078,0x0000008d25d356ab6,0x0000000000052c60,0x000000000789f7f12,0x0000000000000000,0x0000008d400000000,0x0000000000000000,0x00000000078a00000},
+ { 0x000000000e7a4e6b,0x0016384d6f0ded33d,0x0000075349ef6ef1,0x000009d68b1501cc3,0x0000000000000000,0x00164000000000000,0x0000074000000000,0x000009d8000000000},
+ { 0x000000000077a23d,0x000061e3b896da867,0x0000000000e1eded,0x0000000009e5294de,0x0000000000000000,0x00006200000000000,0x0000000000c00000,0x0000000009e800000},
+ { 0x0000000000000078,0x000000b2d512286c8,0x000000048fe3c08b,0x00000019a1f1070d0,0x0000000000000000,0x000000b3000000000,0x0000000480000000,0x00000019a80000000},
+ { 0x0000000000000003,0x00000012b6707b3f7,0x00000000000096b0,0x000000014d5a107af,0x0000000000000000,0x00000012b80000000,0x0000000000000000,0x000000014d8000000},
+ { 0x0000000000000123,0x000000000b0937dac,0x00000000006169ad,0x00000000005f6e299,0x0000000000000000,0x000000000b0c00000,0x0000000000600000,0x00000000005f80000},
+ { 0x00000000000068f9,0x003ea516a96fe44bb,0x00000001cb1d8097,0x000007b8984414af5,0x0000000000000000,0x003eb000000000000,0x0000000000000000,0x000007ba000000000},
+ { 0x00000000000003b7,0x00376e504aa410ba4,0x0000000371cc6392,0x000015b1ff59d8b98,0x0000000000000000,0x00377000000000000,0x0000000000000000,0x000015b8000000000},
+ { 0x0000000000000000,0x011af7b38f3cf0137,0x0000000000000031,0x000000000000048d6,0x0000000000000000,0x011b0000000000000,0x0000000000000020,0x000000000000048e0},
+ { 0x000000000000a07c,0x0010c0b03541a8309,0x0000e8d530496778,0x000186b3d8d8b93c9,0x0000000000000000,0x0010c800000000000,0x0000e80000000000,0x00018700000000000},
+ { 0x000000000000061e,0x002ca71c36f418f45,0x00000005eaa1be7d,0x000000f7b4a321de5,0x0000000000000000,0x002cb000000000000,0x0000000400000000,0x000000f7c00000000},
+ { 0x0000000000000006,0x000f6ee48f0b53659,0x000000000000dec2,0x00001f1b625b36ac3,0x0000000000000000,0x000f7000000000000,0x0000000000000000,0x00001f20000000000},
+ { 0x000000000010369f,0x0e9e25f2f5e2baec9,0x0000000000b46f9c,0x0000000001eda2f31,0x0000000000000000,0x0ea00000000000000,0x0000000000b00000,0x0000000001ee00000},
+ { 0x000000007de45857,0x000000061f4a9c055,0x0000000c345d782d,0x000000011e93cc8c7,0x0000000060000000,0x00000006200000000,0x0000000c34000000,0x000000011ea000000},
+ { 0x0000000000000018,0x0001ef5ca300f1ab7,0x00000000000014cc,0x0000a4d99bbb1329e,0x0000000000000000,0x0001ef80000000000,0x0000000000000000,0x0000a500000000000},
+ { 0x0000000000000531,0x00001e6a77b577e9c,0x00000000476d82c4,0x000000001142e21fa,0x0000000000000000,0x00001e70000000000,0x0000000047400000,0x00000000114400000},
+ { 0x0000000000009578,0x0000003b9e6e9fe77,0x0000000001772e16,0x000000000eba2a91c,0x0000000000000000,0x0000003ba00000000,0x0000000001400000,0x000000000ebc00000},
+ { 0x000000000005c6d0,0x000003b870faa2c35,0x000000001348f0d4,0x000000000558ea501,0x0000000000000000,0x000003b9000000000,0x0000000013400000,0x00000000055a00000},
+ { 0x0000000000001706,0x00aac0412823c42bc,0x00000000000025f2,0x000001b25d4c7037d,0x0000000000000000,0x00ab0000000000000,0x0000000000000000,0x000001b2800000000},
+ { 0x000000000000007d,0x00000002410443f98,0x00000000019e3189,0x000000000cc34caef,0x0000000000000000,0x00000002420000000,0x0000000001800000,0x000000000cc400000},
+ { 0x00000000000000cc,0x0000000006a34f60a,0x000000000000a8c8,0x00000000000027dd2,0x0000000000000000,0x0000000006a400000,0x000000000000a880,0x00000000000027e00},
+ { 0x00000000000012f8,0x000dc77322b2b4468,0x000000000000166e,0x00000000003ce3a0b,0x0000000000000000,0x000dc800000000000,0x0000000000000000,0x00000000003cf0000},
+ { 0x0000000000000000,0x00000018781cfad3a,0x0000000000000603,0x0000000079aa0f826,0x0000000000000000,0x00000018800000000,0x0000000000000000,0x0000000079c000000},
+ { 0x0000021a7e711365,0x00ebb85d3404e8724,0x00d3a9999a595f39,0x006ac135a0b13fc54,0x0000000000000000,0x00ebc000000000000,0x00d2000000000000,0x006ae000000000000},
+ { 0x0000000000000039,0x0000bea6c421527a4,0x0000000000061fc8,0x000000000ad48bbc5,0x0000000000000000,0x0000bec0000000000,0x0000000000000000,0x000000000ad800000},
+ { 0x0000000000010428,0x000000598339d807a,0x000000000084293d,0x0000000000ca483d4,0x0000000000000000,0x00000059a00000000,0x0000000000840000,0x0000000000ca80000},
+ { 0x00000000000396a5,0x0027323de74684142,0x002ed684d78fa4ce,0x00093dcdbd3b5f02b,0x0000000000000000,0x00274000000000000,0x002ec00000000000,0x00093e00000000000},
+ { 0x000000007617939d,0x0228c33066bedaa8f,0x000000015768cc92,0x000000001b71a4a36,0x0000000000000000,0x02290000000000000,0x0000000157600000,0x000000001b7200000},
+ { 0x0000000000000001,0x0002eb279c32cf03e,0x0000000000052ef2,0x000136d15e703c55c,0x0000000000000000,0x0002ec00000000000,0x0000000000000000,0x00013700000000000},
+ { 0x000000000000003a,0x000bc3a53d8a11ece,0x000000001dbc886e,0x000000001fc1682d4,0x0000000000000000,0x000bc400000000000,0x000000001d800000,0x000000001fc800000},
+ { 0x00000000070022f8,0x00008789c04498579,0x00000505d7e2b7c8,0x00000122f7dccaba3,0x0000000000000000,0x000087c0000000000,0x0000050400000000,0x00000123000000000},
+ { 0x000000000000001d,0x0000fb69964e2af9a,0x000000015a0acb8d,0x000000028de47bbd1,0x0000000000000000,0x0000fb80000000000,0x0000000150000000,0x000000028e0000000},
+ { 0x000001963c7d106b,0x00cda390fcfcdd4a3,0x000002619781b838,0x0000005f3a460794b,0x0000000000000000,0x00cdc000000000000,0x0000026100000000,0x0000005f400000000},
+ { 0x0000000000000039,0x000003aea7444f504,0x00000000000000bc,0x0000000000000069c,0x0000000000000000,0x000003af000000000,0x00000000000000bc,0x0000000000000069c},
+ { 0x000000000001e857,0x000778d79905a30ea,0x0000000000071816,0x0000000000072c7de,0x0000000000000000,0x00077a00000000000,0x0000000000070000,0x0000000000072e000},
+ { 0x0000000000000003,0x000386948c864504d,0x00003afa6f51788e,0x0000e34d2f95b446d,0x0000000000000000,0x00038700000000000,0x0000380000000000,0x0000e380000000000},
+ { 0x00000000000065a5,0x0000000007cfbe64f,0x000000000000d1e7,0x0000000000006417c,0x0000000000000000,0x0000000007d000000,0x000000000000d000,0x00000000000064200},
+ { 0x0000000000075d9d,0x01f58cde766efedb3,0x00000000543c6940,0x007ad1d7651fda8ed,0x0000000000000000,0x01f60000000000000,0x0000000000000000,0x007ae000000000000},
+ { 0x0000000000000006,0x000000000bc73137b,0x0000000000000031,0x000000000000057bf,0x0000000000000000,0x000000000bc800000,0x0000000000000020,0x000000000000057c0},
+ { 0x0000000000000019,0x000f9ef82d8a5a9d2,0x0000000000a41877,0x00000a76313bcac46,0x0000000000000000,0x000fa000000000000,0x0000000000000000,0x00000a78000000000},
+ { 0x0000000000000000,0x001ea88cd52d05c15,0x0000000000000019,0x0000000000000092c,0x0000000000000000,0x001eb000000000000,0x0000000000000019,0x0000000000000092c},
+ { 0x0000000000000002,0x02bbd755a35286238,0x0000000000000c45,0x000000003479aa762,0x0000000000000000,0x02bc0000000000000,0x0000000000000000,0x00000000348000000},
+ { 0x0000000012e8d797,0x05f09006941d7d167,0x00002c8badb5a9e0,0x000012572c7949fd8,0x0000000000000000,0x05f20000000000000,0x00002c8000000000,0x00001258000000000},
+ { 0x000000000053c37b,0x013136e8c78a2d43c,0x00000000005660bf,0x000002a20696aa5f4,0x0000000000000000,0x01318000000000000,0x0000000000000000,0x000002a3000000000},
+ { 0x000000000032e277,0x000000015666e09d9,0x000000003793a113,0x0000000012e0c541a,0x0000000000000000,0x00000001568000000,0x0000000037800000,0x0000000012e400000},
+ { 0x000000000002690e,0x00007c92b3a375221,0x0000002914c0d1bc,0x0000004d70404dba0,0x0000000000000000,0x00007ca0000000000,0x0000002800000000,0x0000004d800000000},
+ { 0x00000000000000ba,0x00000a04f27330a44,0x0000000000003163,0x00000000000100186,0x0000000000000000,0x00000a08000000000,0x0000000000003000,0x00000000000100400},
+ { 0x0000000000000000,0x005e2f39b2ff328ba,0x0000000000000002,0x0000277990172cba5,0x0000000000000000,0x005e4000000000000,0x0000000000000000,0x00002780000000000},
+ { 0x0000000000e0c60c,0x000048145ea67f84f,0x0000000b016297ab,0x0000009e00cbf3a02,0x0000000000000000,0x00004820000000000,0x0000000800000000,0x0000009e400000000},
+ { 0x0000000000001dd5,0x000dce412e0e2eb0f,0x0000000000055d9b,0x000000037730bcbcf,0x0000000000000000,0x000dd000000000000,0x0000000000000000,0x00000003780000000},
+ { 0x000000088a94879d,0x0fcf65a4bd28b22bf,0x00000047f8c1f0e5,0x000000052012fc822,0x0000000000000000,0x0fd00000000000000,0x00000047f8000000,0x00000005204000000},
+ { 0x0000000000000001,0x00001f34f239a6ec8,0x0000000000000298,0x000000f927f21c505,0x0000000000000000,0x00001f38000000000,0x0000000000000000,0x000000f9400000000},
+ { 0x0000000000000051,0x05dac2589710b428e,0x016fdaa2cc3dbe63,0x01ce023824ff2f169,0x0000000000000000,0x05dc0000000000000,0x0168000000000000,0x01ce8000000000000},
+ { 0x000000000000003b,0x00000016e7266d033,0x0000000000002f7e,0x0000000000000705c,0x0000000000000000,0x00000016e80000000,0x0000000000002f60,0x00000000000007060},
+ { 0x0000000000000053,0x0000007724a1cfd0e,0x000000000135ba44,0x0000000808ad242a2,0x0000000000000000,0x00000077400000000,0x0000000000000000,0x000000080c0000000},
+ { 0x0000000000025655,0x00a1386b06a830cf3,0x0000000000723398,0x0000005bdee1cbab2,0x0000000000000000,0x00a14000000000000,0x0000000000000000,0x0000005be00000000},
+ { 0x0000000000000011,0x014369edb68153248,0x00000000001a86fb,0x0001ca5192c7e3a44,0x0000000000000000,0x01438000000000000,0x0000000000000000,0x0001ca80000000000},
+ { 0x000000000001ae43,0x004a686a518ec4fe0,0x000000000018c50f,0x0000000a28f390dd8,0x0000000000000000,0x004a8000000000000,0x0000000000000000,0x0000000a2c0000000},
+ { 0x0000000000000002,0x0012c9ef64fab1eaa,0x000000000000000b,0x00000004211e56807,0x0000000000000000,0x0012d000000000000,0x0000000000000000,0x00000004220000000},
+ { 0x000000000000000b,0x01e16777138556c2c,0x00000000000a3453,0x00000000000e836dc,0x0000000000000000,0x01e18000000000000,0x00000000000a0000,0x00000000000e84000},
+ { 0x000000000251573b,0x00086a50411185a55,0x000001696cc3a995,0x0001fcaf236745b13,0x0000000000000000,0x00086c00000000000,0x0000000000000000,0x0001fd00000000000},
+ { 0x0000000000000001,0x0000000000002d634,0x00000000000006ca,0x0000000000000c48b,0x0000000000000000,0x0000000000002d700,0x00000000000006c0,0x0000000000000c4c0},
+ { 0x00000000061c8516,0x0001634a8d50723e9,0x000000002a8f0715,0x000000007bc54c889,0x0000000000000000,0x00016380000000000,0x000000002a000000,0x000000007be000000},
+ { 0x000000000000032f,0x000000143879f5f8a,0x0000000000007ad8,0x00000000187801f64,0x0000000000000000,0x00000014400000000,0x0000000000000000,0x00000000188000000},
+ { 0x000000000007471a,0x0000000ba38d2b305,0x00000000017b262e,0x0000000060ba7ca72,0x0000000000000000,0x0000000ba40000000,0x0000000000000000,0x0000000060c000000},
+ { 0x000000000132ebe3,0x00003e3be63073bc5,0x00000000284fa58f,0x000000b4e14a19174,0x0000000000000000,0x00003e40000000000,0x0000000000000000,0x000000b5000000000},
+ { 0x000000000003fe78,0x00030b0113ec47c6f,0x000000000282c699,0x00000003374b516b8,0x0000000000000000,0x00030c00000000000,0x0000000000000000,0x00000003380000000},
+ { 0x00000000001e8af0,0x0726e45757565fc6b,0x0000006a6498e546,0x000000aefd6fabdb6,0x0000000000000000,0x07280000000000000,0x0000006800000000,0x000000af000000000},
+ { 0x00000000003c1ef6,0x00000058b52aa8e54,0x0000000010438330,0x000000163adfe9dd2,0x0000000000000000,0x00000058c00000000,0x0000000000000000,0x00000016400000000},
+ { 0x00000000016f4a46,0x009d744dc9fb9dd34,0x00000ae6ef96094d,0x00084029e54b8d9fa,0x0000000000000000,0x009d8000000000000,0x0000000000000000,0x00084400000000000},
+ { 0x0000000001b8fc11,0x0000391043fd0a818,0x00000002c222b5cc,0x000000007417389ec,0x0000000000000000,0x00003920000000000,0x00000002c2000000,0x00000000742000000},
+ { 0x0000000000000000,0x000003ab54bcf33ef,0x0000000000240f8b,0x00000000000567a34,0x0000000000000000,0x000003ac000000000,0x0000000000240000,0x00000000000568000},
+ { 0x0000000000001d3f,0x000000564d880bb4b,0x000000000000cf4d,0x00000000510b80d4e,0x0000000000000000,0x00000056600000000,0x0000000000000000,0x00000000512000000},
+ { 0x00000000000aa56b,0x00739ebe20cc73399,0x00000000002b1e20,0x000000000b523d32a,0x0000000000000000,0x0073a000000000000,0x0000000000000000,0x000000000b5400000},
+ { 0x00000000001bf290,0x00506b36063bc9eae,0x00000000dc2c5870,0x000057994e6092ef7,0x0000000000000000,0x00508000000000000,0x0000000000000000,0x000057a0000000000},
+ { 0x0000000000000bd1,0x011a6446921a353e4,0x00000000009b2cc7,0x0000000014ebec6ae,0x0000000000000000,0x011a8000000000000,0x0000000000800000,0x0000000014f000000},
+ { 0x0000000000000835,0x00098754f6e65dac3,0x00000000001d130f,0x00000001179c68516,0x0000000000000000,0x00098800000000000,0x0000000000000000,0x00000001180000000},
+ { 0x000000000000aa87,0x0672b55283dc9f923,0x00000000000799af,0x0000000000a3ab5da,0x0000000000000000,0x06740000000000000,0x0000000000040000,0x0000000000a3c0000},
+ { 0x0000000000000a73,0x000387943407da6bc,0x00003066acf98b4b,0x000025282ec80eb05,0x0000000000000000,0x00038800000000000,0x0000300000000000,0x00002530000000000},
+ { 0x0000000000000067,0x0000060849c5fc1ae,0x00000000006d8c24,0x000000e25b9933b5f,0x0000000000000000,0x0000060a000000000,0x0000000000000000,0x000000e2800000000},
+ { 0x0000000000000001,0x0000000000007dd2d,0x000000000000082c,0x00000000000026cb6,0x0000000000000000,0x0000000000007de00,0x0000000000000800,0x00000000000026d00},
+ { 0x0000000000006a94,0x03cb1499f6a181bf9,0x0000000000014cf0,0x000000000004b66fb,0x0000000000000000,0x03cc0000000000000,0x0000000000014000,0x000000000004b8000},
+ { 0x0000000000005713,0x000974865886923e5,0x000000000667684a,0x000000006734a74a7,0x0000000000000000,0x00097800000000000,0x0000000006000000,0x00000000674000000},
+ { 0x000000000000562b,0x000072098c44c3f18,0x0000000005e82488,0x00000570e837adfd5,0x0000000000000000,0x00007220000000000,0x0000000000000000,0x00000572000000000},
+ { 0x000000000000000c,0x000005dcf3fd88e47,0x000000000000002a,0x0000000000000eb84,0x0000000000000000,0x000005de000000000,0x0000000000000000,0x0000000000000ebc0},
+ { 0x0000000000000d18,0x000000000052ef298,0x0000000000000d43,0x000000000004c1d6b,0x0000000000000000,0x00000000005300000,0x0000000000000000,0x000000000004c2000},
+ { 0x00000000000009ca,0x000000001d9330042,0x0000000000001bf1,0x00000000005375454,0x0000000000000000,0x000000001d9800000,0x0000000000000000,0x00000000005380000},
+ { 0x0000000001a9befb,0x003045ca2759852e6,0x00000000e30bece4,0x00000004a4a22b593,0x0000000000000000,0x00305000000000000,0x00000000e0000000,0x00000004a60000000},
+ { 0x0000000000000003,0x01b3008bfa511cefd,0x0000b3839679de7d,0x000ce53bd5aeb0347,0x0000000000000000,0x01b38000000000000,0x0000800000000000,0x000ce800000000000},
+ { 0x00000000180100d7,0x000000011bcd9052b,0x00000000ae7bf19c,0x000000001561ac6c9,0x0000000018000000,0x000000011c0000000,0x00000000ae400000,0x00000000156400000},
+ { 0x000000000000028d,0x000000322c79972a8,0x0000000000004777,0x0000000000345256a,0x0000000000000000,0x00000032300000000,0x0000000000000000,0x00000000003460000},
+ { 0x00000000027ded0c,0x01b367f0586056266,0x000000003e5917be,0x014d59947de5de90b,0x0000000000000000,0x01b38000000000000,0x0000000000000000,0x014d8000000000000},
+ { 0x000129264a5c5903,0x00e743bf739301a14,0x007b644dbe45b0dc,0x0054f3ac757747b30,0x0000000000000000,0x00e78000000000000,0x007a000000000000,0x00550000000000000},
+ { 0x0000000046015249,0x0005be11d4e953e92,0x000000038d421106,0x0002dba597092b9a4,0x0000000000000000,0x0005c000000000000,0x0000000000000000,0x0002dc00000000000},
+ { 0x00000000006a0e5d,0x0000000368e8015c4,0x0000000004ae7223,0x00000000498e0de6e,0x0000000000000000,0x00000003690000000,0x0000000004000000,0x0000000049a000000},
+ { 0x0000000000be8216,0x00fa1226eb7fe44da,0x000021c4078e51fc,0x00000393f521b114d,0x0000000000000000,0x00fa4000000000000,0x000021c000000000,0x00000394000000000},
+ { 0x0000000000000019,0x000000000025625dd,0x00000000000000e0,0x0000000000000ca16,0x0000000000000000,0x00000000002570000,0x00000000000000c0,0x0000000000000ca40},
+ { 0x0000000000018c1b,0x001e8284466c9596a,0x0000000000063ef0,0x000ee8585e24f662d,0x0000000000000000,0x001e8800000000000,0x0000000000000000,0x000eec00000000000},
+ { 0x0000000026e66a70,0x05166aecb31d497d5,0x00000000da60a9ef,0x00000023afbffdd31,0x0000000000000000,0x05180000000000000,0x0000000000000000,0x00000023b00000000},
+ { 0x0000000003ee04e9,0x003e85f4f100fb08b,0x0000000006e47792,0x000175c1d637183c1,0x0000000000000000,0x003e9000000000000,0x0000000000000000,0x00017600000000000},
+ { 0x0000000000043d59,0x00b2d1011bff8ce07,0x0000000000b18c36,0x00000002460b44272,0x0000000000000000,0x00b30000000000000,0x0000000000000000,0x00000002470000000},
+ { 0x000000000007a45b,0x00007fa2ed6a2841d,0x000000000040dd28,0x0000000000245ac53,0x0000000000000000,0x00007fc0000000000,0x0000000000400000,0x00000000002460000},
+ { 0x00000000000067e3,0x01771fd910d143aea,0x0000000009262cfc,0x00000041e2b75b68b,0x0000000000000000,0x01778000000000000,0x0000000000000000,0x00000042000000000},
+ { 0x0000000000000006,0x00040bcc8de43be85,0x00000000000f9d3c,0x00000007b9ec0d159,0x0000000000000000,0x00040c00000000000,0x0000000000000000,0x00000007ba0000000},
+ { 0x0000000000007258,0x00000000cce91e0a6,0x00000000027b9b4d,0x0000000001747ccb0,0x0000000000000000,0x00000000cd0000000,0x0000000002780000,0x00000000017480000},
+ { 0x0000000000128e96,0x02040cbe63c541602,0x00000000113228a1,0x00000000028321e9d,0x0000000000000000,0x02050000000000000,0x0000000011300000,0x00000000028380000},
+ { 0x0000000000000002,0x0000000024f6eee2c,0x000000000000015e,0x0000000000000065b,0x0000000000000000,0x00000000250000000,0x000000000000015e,0x0000000000000065b},
+ { 0x0000000000000011,0x0003dfff3ce119239,0x0000000000005ff8,0x0000000002083a39b,0x0000000000000000,0x0003e000000000000,0x0000000000000000,0x00000000020900000},
+ { 0x000000000fb86ed1,0x0000100ea66d9dabd,0x0000000030dcdb7a,0x000000168b4725eed,0x0000000000000000,0x00001010000000000,0x0000000000000000,0x00000016900000000},
+ { 0x0000000000000003,0x0019d3a332c34c327,0x0000000021f62317,0x0000000b11435d718,0x0000000000000000,0x0019d800000000000,0x0000000000000000,0x0000000b140000000},
+ { 0x000000000057987f,0x00000beba768fb516,0x00000007e94ed7b2,0x0000066c14216f01f,0x0000000000000000,0x00000bec000000000,0x0000000000000000,0x0000066e000000000},
+ { 0x000000000344d640,0x000000038d1c514dc,0x0000000033cfcf10,0x00000000d253f2847,0x0000000000000000,0x000000038e0000000,0x0000000030000000,0x00000000d28000000},
+ { 0x00000000032b6ed2,0x0001621eaabf3d140,0x0000000012c6cdd7,0x00000002a0a18edcf,0x0000000000000000,0x00016280000000000,0x0000000010000000,0x00000002a10000000},
+ { 0x000000001fa01923,0x035e9fc212eefcec6,0x000000bf0d0bd3c3,0x001527950defce2de,0x0000000000000000,0x035f0000000000000,0x0000000000000000,0x00152800000000000},
+ { 0x000000b0ffc66b2e,0x016ada55c76dab8d7,0x0000a72ec8a5101d,0x0003fb39611867b93,0x0000000000000000,0x016b0000000000000,0x0000a00000000000,0x0003fc00000000000},
+ { 0x000000000000006c,0x00003508fb20f0b06,0x000000000056a0d4,0x000006147f825d085,0x0000000000000000,0x00003510000000000,0x0000000000000000,0x00000616000000000},
+ { 0x0000000000000005,0x00277f93d0d34fee1,0x0000000000000168,0x000000000223d119b,0x0000000000000000,0x00278000000000000,0x0000000000000000,0x00000000022400000},
+ { 0x00000000000001c2,0x0000e365bced5fc9a,0x000000056dcc26b5,0x00004626f68cc3b19,0x0000000000000000,0x0000e380000000000,0x0000000000000000,0x00004640000000000},
+ { 0x0000000000000057,0x0000000019f75b303,0x00000000000cbf93,0x00000000006b29fe3,0x0000000000000000,0x0000000019f800000,0x00000000000c0000,0x00000000006b40000},
+ { 0x0000000000000007,0x00001728766d8d306,0x000000000000007f,0x000000000000c7255,0x0000000000000000,0x00001730000000000,0x0000000000000000,0x000000000000c7400},
+ { 0x0000000000000ff3,0x00002f9b548589833,0x0000000000ae1585,0x000000181c30cf287,0x0000000000000000,0x00002fa0000000000,0x0000000000000000,0x00000018200000000},
+ { 0x0000000000029aab,0x004bd7a6612b0ea39,0x0000006509270f29,0x00384aeee962953a5,0x0000000000000000,0x004be000000000000,0x0000000000000000,0x00385000000000000},
+ { 0x00000000000000c7,0x00004ce256b177916,0x0000006a71927106,0x00000a4a4321309c8,0x0000000000000000,0x00004d00000000000,0x0000004000000000,0x00000a4c000000000},
+ { 0x0000000000000050,0x00d9a83a141000056,0x0000005cdaff930f,0x00000102fff27f05e,0x0000000000000000,0x00d9c000000000000,0x0000005c00000000,0x00000103000000000},
+ { 0x00000003b205da69,0x001d93242cd43a0d1,0x0000161b33c88dce,0x000003dec2353a3d8,0x0000000000000000,0x001d9800000000000,0x0000161000000000,0x000003df000000000},
+ { 0x0000000000000002,0x00cabb8a07772a44f,0x0000000000000004,0x000009ed4bd499b35,0x0000000000000000,0x00cac000000000000,0x0000000000000000,0x000009f0000000000},
+ { 0x0000000000020381,0x0000005ead114e876,0x0000001ffe0b697f,0x000000059a1068daf,0x0000000000000000,0x0000005ec00000000,0x0000001ff0000000,0x000000059b0000000},
+ { 0x00000000000001ed,0x000019e9990ccbe4e,0x0000000000007fdf,0x000000000b73b2e08,0x0000000000000000,0x000019f0000000000,0x0000000000000000,0x000000000b7400000},
+ { 0x00000000125354ee,0x05dbcb2f7db62971a,0x0000008c5a1ac898,0x0006d210c6ce1991d,0x0000000000000000,0x05dc0000000000000,0x0000000000000000,0x0006d400000000000},
+ { 0x000000006f98e371,0x000006e6110abda16,0x0000002909df8d76,0x000000499848d9066,0x0000000000000000,0x000006e8000000000,0x0000002800000000,0x00000049a00000000},
+ { 0x00000000000a1ac1,0x0000d72d01ddafa7b,0x00000000174c0e4a,0x0000039b7d98c5372,0x0000000000000000,0x0000d740000000000,0x0000000000000000,0x0000039c000000000},
+ { 0x000000000000054c,0x0006e0a0b828081e3,0x000000076a7d41d1,0x00000038adf812418,0x0000000000000000,0x0006e200000000000,0x0000000700000000,0x00000038b00000000},
+ { 0x0000000000000006,0x00000000f93776ecd,0x00000000000002f1,0x0000000000072304e,0x0000000000000000,0x00000000f94000000,0x0000000000000000,0x00000000000724000},
+ { 0x000000000004e823,0x005e5280952eb38a8,0x00004c7365abd2fc,0x00539ce01266f5bc1,0x0000000000000000,0x005e6000000000000,0x0000000000000000,0x0053a000000000000},
+ { 0x0000000000001366,0x00000000081ec4b21,0x0000000000057ee2,0x0000000000164f16a,0x0000000000000000,0x00000000082000000,0x0000000000050000,0x00000000001650000},
+ { 0x00000000000000ea,0x00002bec82d1c32a6,0x000000000007acd9,0x000000001db8a3dde,0x0000000000000000,0x00002bf0000000000,0x0000000000000000,0x000000001dc000000},
+ { 0x0000000000001645,0x0000006b7414be877,0x0000000312510026,0x0000003df486c85d0,0x0000000000000000,0x0000006b800000000,0x0000000300000000,0x0000003e000000000},
+ { 0x0000069661866846,0x07b66c660b756418f,0x0005708bbfad6e9d,0x07a7cfab8ecfb4381,0x0000000000000000,0x07b80000000000000,0x0000000000000000,0x07a80000000000000},
+ { 0x00000001c6bdf8cd,0x00009fcb9d08b3e51,0x00000007c56b773d,0x00000418aa196bcda,0x0000000000000000,0x0000a000000000000,0x0000000000000000,0x0000041a000000000},
+ { 0x0000000000020fe9,0x0009fa89e030df960,0x000000000006b8d3,0x00000ef516abde8ae,0x0000000000000000,0x0009fc00000000000,0x0000000000000000,0x00000ef8000000000},
+ { 0x0000000000000639,0x00629c4447eb00b65,0x0000000000561cf9,0x000000000019664fc,0x0000000000000000,0x0062a000000000000,0x0000000000560000,0x00000000001968000},
+ { 0x000000000000000f,0x000000000dcce3d0d,0x000000000f8ca7bb,0x0000000006c2b41c7,0x0000000000000000,0x000000000dd000000,0x000000000f800000,0x0000000006c400000},
+ { 0x000000000013fe86,0x000997ec8835d7420,0x0000000bec7fe343,0x000049146c0ac6443,0x0000000000000000,0x00099800000000000,0x0000000000000000,0x00004920000000000},
+ { 0x0000000000080446,0x000693cbfbb8df7dd,0x00000000001a4426,0x000000000002e1354,0x0000000000000000,0x00069400000000000,0x00000000001a4000,0x000000000002e1800},
+ { 0x0000000000000003,0x002fbce706131600b,0x00000000000039fc,0x00000000316b535db,0x0000000000000000,0x002fc000000000000,0x0000000000000000,0x00000000317000000},
+ { 0x0000000000000012,0x09e72ae0d6bcc0a3e,0x000561819ddc4c32,0x00e7db8da01c05939,0x0000000000000000,0x09e80000000000000,0x0004000000000000,0x00e80000000000000},
+ { 0x000000097107cbba,0x00013c394aecae683,0x000001043a311528,0x000006c7259fd3144,0x0000000000000000,0x00013c80000000000,0x0000010000000000,0x000006c8000000000},
+ { 0x000000000000000a,0x0000110e1ed277863,0x0000000170666b6c,0x00000478645b9b379,0x0000000000000000,0x00001110000000000,0x0000000000000000,0x0000047a000000000},
+ { 0x000000000000013e,0x004c6d344e9a38348,0x0000003a7f3f9ad5,0x00006d62a0d58732f,0x0000000000000000,0x004c8000000000000,0x0000000000000000,0x00006d80000000000},
+ { 0x0000000001d855dd,0x08b2a992e0d800aab,0x00000eb6a89575f6,0x005504a517dc8f9ea,0x0000000000000000,0x08b40000000000000,0x0000000000000000,0x00552000000000000},
+ { 0x0000000000001dff,0x000003e8c98edb659,0x00000002dd604368,0x00000000b15eeef4b,0x0000000000000000,0x000003e9000000000,0x00000002dc000000,0x00000000b18000000},
+ { 0x00000000977b5a8c,0x0d1cf1f26c41bf835,0x000000796a3b2c2d,0x007a46e7d1e069603,0x0000000000000000,0x0d200000000000000,0x0000000000000000,0x007a6000000000000},
+ { 0x000000000004a488,0x0000667e15d5be53b,0x000000088fcf2c54,0x0000000ce5ae87bff,0x0000000000000000,0x00006680000000000,0x0000000880000000,0x0000000ce80000000},
+ { 0x0000000001820861,0x0000000821d4fece8,0x00000000092b4c3e,0x0000000053badac1e,0x0000000000000000,0x00000008240000000,0x0000000008000000,0x0000000053c000000},
+ { 0x00000000000015f9,0x00000006de0710f0f,0x00000001096be5f6,0x00000005af32f52b0,0x0000000000000000,0x00000006e00000000,0x0000000100000000,0x00000005b00000000},
+ { 0x0000000000000114,0x0000dda3170c2cd39,0x000000000000f11d,0x000000005ddba3741,0x0000000000000000,0x0000ddc0000000000,0x0000000000000000,0x000000005de000000},
+ { 0x0000000000000005,0x01b8dc809c7c072ad,0x000000000000015e,0x000000312c97a2dcc,0x0000000000000000,0x01b90000000000000,0x0000000000000000,0x00000031300000000},
+ { 0x0000000000000009,0x01722c2259bd5cbdf,0x000000000001ef65,0x00006629f1d1ac527,0x0000000000000000,0x01728000000000000,0x0000000000000000,0x00006640000000000},
+ { 0x0000000000013012,0x006830c15c633c31d,0x00000000003800a2,0x000005350bc65fbc7,0x0000000000000000,0x00684000000000000,0x0000000000000000,0x00000536000000000},
+ { 0x000000000006e80c,0x00001df1c2c821ca3,0x000000000009f4f4,0x0000044adf760ecb9,0x0000000000000000,0x00001df8000000000,0x0000000000000000,0x0000044c000000000},
+ { 0x000000000000072d,0x000115f9fa9855b35,0x000000000515444a,0x000000016af82a260,0x0000000000000000,0x00011600000000000,0x0000000000000000,0x000000016b0000000},
+ { 0x0000000000000000,0x0000000001e894ce6,0x0000000000000013,0x000000000000f9de6,0x0000000000000000,0x0000000001e900000,0x0000000000000000,0x000000000000fa000},
+ { 0x000000000005f5c8,0x06a14ee673c892a61,0x0000001cca52adaf,0x0000006085e498502,0x0000000000000000,0x06a20000000000000,0x0000001c00000000,0x00000060a00000000},
+ { 0x0000000000000003,0x00000000000067191,0x000000000000006a,0x000000000000078d9,0x0000000000000000,0x00000000000067200,0x0000000000000060,0x000000000000078e0},
+ { 0x0000000000000000,0x0859288c4f90478dc,0x00000000000acbfa,0x000036ffae3ec9067,0x0000000000000000,0x085c0000000000000,0x0000000000000000,0x00003700000000000},
+ { 0x000000000000000b,0x00001fa96f9319d9a,0x00000015409b563a,0x0000007a7aed7fcd5,0x0000000000000000,0x00001fb0000000000,0x0000001400000000,0x0000007a800000000},
+ { 0x000000000000009d,0x000006d1a822251a7,0x0000000000003163,0x000000312b66803ab,0x0000000000000000,0x000006d2000000000,0x0000000000000000,0x00000031300000000},
+ { 0x00000000000024fd,0x000000000000a1ee1,0x00000000000077f5,0x00000000000008e99,0x0000000000002400,0x000000000000a2000,0x00000000000077f0,0x00000000000008ea0},
+ { 0x0000000000000003,0x00000000000095fe0,0x000000000000001f,0x00000000000006c43,0x0000000000000000,0x00000000000096000,0x0000000000000000,0x00000000000006c60},
+ { 0x0000000000000004,0x000000007e1f03faf,0x0000000000004561,0x000000000001a1de2,0x0000000000000000,0x000000007e2000000,0x0000000000004000,0x000000000001a2000},
+ { 0x0000000000000027,0x000000000000c7ac8,0x000000000000009f,0x00000000000000854,0x0000000000000000,0x000000000000c7c00,0x000000000000009f,0x00000000000000854},
+ { 0x0000000000006a58,0x0367b553b91b20ccc,0x0000fca0359dd31a,0x000ffe84b285bb22d,0x0000000000000000,0x03680000000000000,0x0000c00000000000,0x00100000000000000},
+ { 0x00000000000001f0,0x000000cc8ad012a29,0x000000000000aa72,0x000000123b7cf7576,0x0000000000000000,0x000000ccc00000000,0x0000000000000000,0x00000012400000000},
+ { 0x000000000000003d,0x03cc1cb42fed2ab34,0x00000000000169c8,0x0000000002651623b,0x0000000000000000,0x03cd0000000000000,0x0000000000000000,0x00000000026600000},
+ { 0x0000000000000363,0x030c03fd0a96bded4,0x00c4ba27d7d04190,0x000dfa2d0136f46e4,0x0000000000000000,0x030d0000000000000,0x00c4b80000000000,0x000dfa80000000000},
+ { 0x0000000000000023,0x0000153ff550ddb88,0x000005f3621849ba,0x000006330d94e1c0d,0x0000000000000000,0x00001540000000000,0x000005e000000000,0x00000634000000000},
+ { 0x000000000000000d,0x00000040a483f96b4,0x0000000001e11368,0x00000000007fbde2f,0x0000000000000000,0x00000040c00000000,0x0000000001e00000,0x00000000007fc0000},
+ { 0x00000000000e3b18,0x00000054450faa039,0x0000000003a849a0,0x0000000002dbdcb1d,0x0000000000000000,0x00000054600000000,0x0000000003a00000,0x0000000002dc00000},
+ { 0x000000000000000e,0x00000d3269e8cf730,0x0000000003107e75,0x000000025019239b5,0x0000000000000000,0x00000d34000000000,0x0000000000000000,0x00000002510000000},
+ { 0x000000000000bd88,0x006ee540e826ed36e,0x000000000003ec02,0x000000000000e3987,0x0000000000000000,0x006f0000000000000,0x000000000003ec00,0x000000000000e3c00},
+ { 0x0000000000000673,0x0002031d2e3bfbe5b,0x000000000000272c,0x0000000000000358b,0x0000000000000000,0x00020400000000000,0x000000000000272c,0x0000000000000358b},
+ { 0x0000000000b44d58,0x000021d91aa0f3a5a,0x0000018d0d0b9925,0x0000002e97d0cdc0b,0x0000000000000000,0x000021e0000000000,0x0000018d00000000,0x0000002e980000000},
+ { 0x0000000000000001,0x0000029b9d4ccd035,0x000000000a6b3b14,0x00000001bb5f7c1ba,0x0000000000000000,0x0000029c000000000,0x0000000008000000,0x00000001bb8000000},
+ { 0x000000000000007a,0x0001d0b804c8d25ba,0x00000000000002e2,0x000000002a3898fca,0x0000000000000000,0x0001d100000000000,0x0000000000000000,0x000000002a4000000},
+ { 0x0000000000008f40,0x00006cc83c8ba51fa,0x000000000b6bd5e3,0x00000000047d649b2,0x0000000000000000,0x00006ce0000000000,0x000000000b600000,0x00000000047e00000},
+ { 0x0000000000000002,0x0001cc22b0f135dd3,0x0000000bb6e019f7,0x000000054d4b883e2,0x0000000000000000,0x0001cc80000000000,0x0000000ba0000000,0x000000054e0000000},
+ { 0x0000000000000892,0x00a96d5c190a17f55,0x00000001ff8382d1,0x000f13b6fe3a40af2,0x0000000000000000,0x00a98000000000000,0x0000000000000000,0x000f1400000000000},
+ { 0x0000000000000003,0x0000000ddaf4e32eb,0x0000000000000014,0x0000000000001672c,0x0000000000000000,0x0000000ddc0000000,0x0000000000000000,0x00000000000016780},
+ { 0x00000000000000a9,0x007c8d3949c0999a3,0x0000000a166977dd,0x0007238a4702e8118,0x0000000000000000,0x007ca000000000000,0x0000000000000000,0x00072400000000000},
+ { 0x0000002de6188164,0x01ba881eef9d8ba59,0x000e1c93c642c136,0x00684fe75873ec532,0x0000000000000000,0x01bb0000000000000,0x000e000000000000,0x00686000000000000},
+ { 0x0000000000014928,0x0000000012ca98743,0x00000000008bc919,0x0000000000f412638,0x0000000000000000,0x0000000012d000000,0x0000000000880000,0x0000000000f440000},
+ { 0x00000000000136c2,0x035679487278ab713,0x00000000000e549a,0x00000000000918c56,0x0000000000000000,0x03570000000000000,0x00000000000e4000,0x0000000000091c000},
+ { 0x00000000000009e8,0x001b20878c5f1174f,0x00000000038e4a58,0x0000000fcc5bcd544,0x0000000000000000,0x001b2800000000000,0x0000000000000000,0x0000000fd00000000},
+ { 0x0000000000005ac0,0x00203e30e805ed64f,0x00000000001bb18f,0x00164bd326b3b7d3e,0x0000000000000000,0x00204000000000000,0x0000000000000000,0x00165000000000000},
+ { 0x000000000000fb01,0x0812ac8a113f4742c,0x0751c4c655a79872,0x008b4d53b758b4136,0x0000000000000000,0x08140000000000000,0x0751800000000000,0x008b5000000000000},
+ { 0x0000000000000000,0x00003add22e000331,0x0000000000000009,0x0000001e7dc22d51a,0x0000000000000000,0x00003ae0000000000,0x0000000000000000,0x0000001e800000000},
+ { 0x00000000000000d4,0x0000a8cf192ff101f,0x0000054cb9b03c82,0x00009833358865744,0x0000000000000000,0x0000a900000000000,0x0000040000000000,0x00009840000000000},
+ { 0x0000000000000012,0x000081c1b773ec144,0x0000000009bedd15,0x00000001beb0d9194,0x0000000000000000,0x00008200000000000,0x0000000008000000,0x00000001bf0000000},
+ { 0x00000000000003c5,0x0000037d734ecb6d6,0x00000000b3bb29d1,0x00000367da3a76674,0x0000000000000000,0x0000037e000000000,0x0000000000000000,0x00000368000000000},
+ { 0x0000000000000015,0x0f2b0e2772585d94b,0x0000000016aef6b0,0x0734b41aed8e9642d,0x0000000000000000,0x0f2c0000000000000,0x0000000000000000,0x07360000000000000},
+ { 0x0000000000000217,0x00bed983e1edb405e,0x0000000000003f94,0x0000000060f876a63,0x0000000000000000,0x00bf0000000000000,0x0000000000000000,0x00000000610000000},
+ { 0x0000000000000001,0x00000000111b86977,0x0000000000fba046,0x0000000001134de01,0x0000000000000000,0x00000000112000000,0x0000000000f80000,0x00000000011380000},
+ { 0x0000000000000056,0x0000187c4811e9ba8,0x00000000030c251e,0x0000007725d0000ee,0x0000000000000000,0x00001880000000000,0x0000000000000000,0x00000077400000000},
+ { 0x000000000000000a,0x000017dd20d6972f0,0x00000022d30acef6,0x00000004eeba18f6c,0x0000000000000000,0x000017e0000000000,0x00000022d0000000,0x00000004ef0000000},
+ { 0x0000000000001569,0x00096adae1bc3e3d8,0x000000005328e291,0x00000000e595f34c6,0x0000000000000000,0x00096c00000000000,0x0000000050000000,0x00000000e5c000000},
+ { 0x00000000000036e0,0x00000000028c72d05,0x00000000000100bd,0x00000000000d326f5,0x0000000000000000,0x00000000028d00000,0x0000000000010000,0x00000000000d34000},
+ { 0x000000000032d3c9,0x002efc62cb68036dd,0x000000001e873e84,0x00000bc668ec875e0,0x0000000000000000,0x002f0000000000000,0x0000000000000000,0x00000bc8000000000},
+ { 0x0000000000000038,0x0000e796a1f0e02c5,0x000000000021632e,0x00000e58c8fd7ad92,0x0000000000000000,0x0000e7c0000000000,0x0000000000000000,0x00000e5c000000000},
+ { 0x0000000000012775,0x0002331d6ac27bdec,0x000000000007d6eb,0x00000000002954cce,0x0000000000000000,0x00023400000000000,0x0000000000070000,0x00000000002960000},
+ { 0x0000000000000001,0x03b40326c573679ce,0x0000000000001809,0x00000000001b3634a,0x0000000000000000,0x03b50000000000000,0x0000000000000000,0x00000000001b38000},
+ { 0x0000001800f6a099,0x00622ac27b145bbc5,0x0000001a4acd04b0,0x0000004a6fafe6950,0x0000000000000000,0x00624000000000000,0x0000001a00000000,0x0000004a800000000},
+ { 0x00000000000000a1,0x000000000001b240d,0x000000000000136e,0x000000000000ba91c,0x0000000000000000,0x000000000001b2800,0x0000000000001000,0x000000000000bac00},
+ { 0x00000000000f8d5b,0x07abae08f949a2af7,0x0000000002982562,0x0000000004d079c91,0x0000000000000000,0x07ac0000000000000,0x0000000002800000,0x0000000004d200000},
+ { 0x000000000000027b,0x0002c4e5704b38a9f,0x000000b5635c3600,0x0000003f7db53d582,0x0000000000000000,0x0002c500000000000,0x000000b500000000,0x0000003f800000000},
+ { 0x00000000000004b6,0x000000000d6dec55a,0x0000000000001f58,0x00000000021447f38,0x0000000000000000,0x000000000d7000000,0x0000000000000000,0x00000000021500000},
+ { 0x000000000000000e,0x0003cbe56be4d6db3,0x0000000000016491,0x00007f4305dc351b1,0x0000000000000000,0x0003cc00000000000,0x0000000000000000,0x00007f60000000000},
+ { 0x000000000000000f,0x000000a2b32bea14b,0x000000000000078e,0x00000010b33134036,0x0000000000000000,0x000000a2c00000000,0x0000000000000000,0x00000010b80000000},
+ { 0x000000000015cf07,0x00000007dedb68f9c,0x0000000004ca59c1,0x0000000001fc822fe,0x0000000000000000,0x00000007e00000000,0x0000000004c80000,0x0000000001fd00000},
+ { 0x000003ceba7acdbd,0x05a10b8fa8a9f633b,0x00068e1fc377b9f0,0x000195b006877caea,0x0000000000000000,0x05a20000000000000,0x0006880000000000,0x00019600000000000},
+ { 0x00000000000005cc,0x0001b3d91feeb29af,0x00000000014211ce,0x00000000001b6a8e1,0x0000000000000000,0x0001b400000000000,0x0000000001420000,0x00000000001b6c000},
+ { 0x000000fa16042b64,0x0001e9e69f8db228d,0x0000529eb3ccaba0,0x000115d8d0e7189a6,0x0000000000000000,0x0001ea00000000000,0x0000500000000000,0x00011600000000000},
+ { 0x0000000000000fe6,0x000000000672d5e51,0x000000000007318b,0x0000000000015240b,0x0000000000000000,0x00000000067400000,0x0000000000073000,0x00000000000152800},
+ { 0x00000000000ae1e9,0x0011b1715fcae61f9,0x00000751930db82a,0x0007f14c2552ab218,0x0000000000000000,0x0011b800000000000,0x0000000000000000,0x0007f200000000000},
+ { 0x0000000000000005,0x00000000039a111db,0x0000000000172ca2,0x000000000058e87d0,0x0000000000000000,0x00000000039b00000,0x0000000000160000,0x00000000005900000},
+ { 0x0000000000002a18,0x00cb6dfb5f4cc0ddc,0x00000000012ea870,0x000000005ec43d315,0x0000000000000000,0x00cb8000000000000,0x0000000000000000,0x000000005ee000000},
+ { 0x0000000002626f50,0x000002db2ca87b7ad,0x000000398537fbd2,0x0000001f3d5163094,0x0000000000000000,0x000002dc000000000,0x0000003980000000,0x0000001f400000000},
+ { 0x00000000000007a4,0x0003057ea7a9e94ae,0x00000000000014f1,0x00000cf689f8fd183,0x0000000000000000,0x00030600000000000,0x0000000000000000,0x00000cf8000000000},
+ { 0x000000000000dc45,0x00000002ee9494f53,0x00000000005681b4,0x00000000321a01008,0x0000000000000000,0x00000002ef0000000,0x0000000000000000,0x00000000322000000},
+ { 0x00000000000c28d2,0x0391819eb6d077016,0x000000000074a5a3,0x00000002b8b0cae38,0x0000000000000000,0x03920000000000000,0x0000000000000000,0x00000002b90000000},
+ { 0x0000000000000003,0x01cb7741e0fd510df,0x000033cbcc24e10f,0x000f265f753ed0245,0x0000000000000000,0x01cb8000000000000,0x0000000000000000,0x000f2800000000000},
+ { 0x00000000000009d4,0x00007fd3ed28a0005,0x00000000001cf128,0x0000294f768571bdf,0x0000000000000000,0x00007fe0000000000,0x0000000000000000,0x00002950000000000},
+ { 0x0000000000320189,0x0e91aa035c4fe6537,0x000000001a62a80e,0x00000cad803651f36,0x0000000000000000,0x0e940000000000000,0x0000000000000000,0x00000cb0000000000},
+ { 0x0000000000000013,0x00000000344dc7157,0x00000000000006f7,0x0000000000286f3d2,0x0000000000000000,0x00000000345000000,0x0000000000000000,0x00000000002870000},
+ { 0x0000000000000105,0x0003f39a407a2ac9f,0x000000097db043e8,0x00000028e2400b753,0x0000000000000000,0x0003f400000000000,0x0000000900000000,0x00000028f00000000},
+ { 0x0000000000000033,0x00039fac5636d9a31,0x000000000064fc41,0x00000000009db7a4a,0x0000000000000000,0x0003a000000000000,0x0000000000640000,0x00000000009dc0000},
+ { 0x0000000000000195,0x0000000b6a22fb752,0x0000000000000250,0x000000000001a259e,0x0000000000000000,0x0000000b6c0000000,0x0000000000000000,0x000000000001a2800},
+ { 0x000000000000001f,0x00000008ff9cce1b9,0x0000000000000646,0x00000000000003678,0x0000000000000000,0x00000009000000000,0x0000000000000640,0x00000000000003680},
+ { 0x000000000000000a,0x0000000000a95757b,0x000000000000000a,0x00000000000f88407,0x0000000000000000,0x0000000000a980000,0x0000000000000000,0x00000000000f8c000},
+ { 0x000000000000020c,0x000000715f4c0410e,0x0000000000000d29,0x0000000c2b38c349a,0x0000000000000000,0x00000071600000000,0x0000000000000000,0x0000000c2c0000000},
+ { 0x000000ccbca3cb6f,0x00022cac9d7db08ea,0x0000a0be7603c69e,0x0001cb82b411b0927,0x0000000000000000,0x00022d00000000000,0x0000a00000000000,0x0001cc00000000000},
+ { 0x0000000000000036,0x000000000071be9ce,0x0000000000000b1f,0x00000000000206716,0x0000000000000000,0x000000000071c0000,0x0000000000000000,0x00000000000207000},
+ { 0x000000000000000d,0x000000312ec08654a,0x00000000000002e1,0x0000000000000c35d,0x0000000000000000,0x00000031300000000,0x00000000000002c0,0x0000000000000c380},
+ { 0x0000000000000019,0x000000000024cf93d,0x0000000000006838,0x0000000000008d8e5,0x0000000000000000,0x000000000024d0000,0x0000000000006800,0x0000000000008dc00},
+ { 0x00000000000000ea,0x000000656ea63c0e1,0x0000000000000298,0x0000000000258016c,0x0000000000000000,0x00000065800000000,0x0000000000000000,0x00000000002590000},
+ { 0x0000000000000849,0x005cf503612efa8b9,0x0000000000010b03,0x00000000fa7033509,0x0000000000000000,0x005d0000000000000,0x0000000000000000,0x00000000fa8000000},
+ { 0x0000000000000096,0x03f643bdc71989ddb,0x00000000bf0bb612,0x0000000120ab50fec,0x0000000000000000,0x03f70000000000000,0x00000000b8000000,0x00000001210000000},
+ { 0x000000018908ca78,0x0a6d6e2380722a994,0x000059ba4ac460ed,0x018460bceedbc81c9,0x0000000000000000,0x0a700000000000000,0x0000000000000000,0x01848000000000000},
+ { 0x0000000000000027,0x000190c8c53f94d52,0x0000000000242028,0x00000006d479a9420,0x0000000000000000,0x00019100000000000,0x0000000000000000,0x00000006d60000000},
+ { 0x000000000000003c,0x0107cc988ed5ed331,0x00000000000062a0,0x00000000202fc36ea,0x0000000000000000,0x01080000000000000,0x0000000000000000,0x00000000203000000},
+ { 0x000000025fa0defc,0x000001b7112a8fdd1,0x0000018afb69af74,0x000000313591a52ce,0x0000000000000000,0x000001b7800000000,0x0000018a80000000,0x00000031380000000},
+ { 0x0000c5795d4d3a27,0x016893fc733ff1457,0x000c4813685e0d41,0x000b94dac5af9703f,0x0000000000000000,0x01690000000000000,0x000c400000000000,0x000b9800000000000},
+ { 0x0000000000000033,0x00000021fd175861f,0x000000007f8aba65,0x00000000beaf30c57,0x0000000000000000,0x00000022000000000,0x000000007c000000,0x00000000bec000000},
+ { 0x00000000000001e3,0x000000468c6e4bc98,0x000000000017adf4,0x000000000006ecbb7,0x0000000000000000,0x00000046a00000000,0x000000000017a000,0x000000000006ee000},
+ { 0x0000000000000026,0x0001f5a824771ae54,0x000000000222093d,0x000000001d333d690,0x0000000000000000,0x0001f600000000000,0x0000000002000000,0x000000001d3800000},
+ { 0x0000000000000004,0x00d9d3cc798b1c07a,0x00000000006567c7,0x00000019c8e5804fa,0x0000000000000000,0x00da0000000000000,0x0000000000000000,0x00000019d00000000},
+ { 0x00000000000000fa,0x000034c0ccec97cd6,0x0000000000eafd50,0x00000000036d1d6e9,0x0000000000000000,0x000034d0000000000,0x0000000000e00000,0x00000000036e00000},
+ { 0x0000000000000002,0x018f29fc64b957410,0x0000000000f9ac2a,0x00000000007ee4aab,0x0000000000000000,0x018f8000000000000,0x0000000000f80000,0x00000000007f00000},
+ { 0x00000000000005f8,0x00000927c78052e94,0x000000000000068f,0x0000000980dccbe3f,0x0000000000000000,0x00000928000000000,0x0000000000000000,0x00000009840000000},
+ { 0x000000000000257c,0x0000000007fcff31d,0x00000000000c4df2,0x000000000787fa4ae,0x0000000000000000,0x0000000007fe00000,0x0000000000000000,0x00000000078800000},
+ { 0x0000000000000136,0x0000073b15500f724,0x0000000000002fc4,0x0000000003d9fc11e,0x0000000000000000,0x0000073c000000000,0x0000000000000000,0x0000000003da00000},
+ { 0x00000000000000e4,0x000004f397c0d23da,0x0000000000004c0a,0x000000067fc5e9e15,0x0000000000000000,0x000004f4000000000,0x0000000000000000,0x00000006800000000},
+ { 0x000000000000007f,0x0002b3322e5cb81ae,0x0000000000000676,0x00005c8cc110fbc36,0x0000000000000000,0x0002b400000000000,0x0000000000000000,0x00005ca0000000000},
+ { 0x00000000000004e6,0x02081407083a4903b,0x0000003a22c490e9,0x0129848bb180310d5,0x0000000000000000,0x02090000000000000,0x0000000000000000,0x012a0000000000000},
+ { 0x000000322dad6249,0x015685e13ae889199,0x0001c4d7030a5abf,0x003943b27f9ec4e12,0x0000000000000000,0x01570000000000000,0x0001000000000000,0x00395000000000000},
+ { 0x000000000000003e,0x000004e0fa0044bc5,0x00000000004d1446,0x000000000006a4e5b,0x0000000000000000,0x000004e2000000000,0x00000000004d1000,0x000000000006a5000},
+ { 0x000000000000001d,0x000153e32e37c7f4d,0x0000000000697eea,0x00000002f3f93c10f,0x0000000000000000,0x00015400000000000,0x0000000000000000,0x00000002f40000000},
+ { 0x00000000000000f1,0x000000037d27e9a2a,0x0000000000000159,0x000000034b317827c,0x0000000000000000,0x000000037e0000000,0x0000000000000000,0x000000034c0000000},
+ { 0x00000000017b8ed5,0x000845892e9581aa7,0x00000000286216ea,0x0000000061a5c217a,0x0000000000000000,0x00084800000000000,0x0000000028000000,0x0000000061c000000},
+ { 0x0000000000000af6,0x000004df375bc1b0f,0x000000035f690f4c,0x000000008ee94a176,0x0000000000000000,0x000004e0000000000,0x000000035e000000,0x000000008f0000000},
+ { 0x000000000000064f,0x00050bcde77e974a9,0x00000000036f73db,0x0001d69b6faadb8bd,0x0000000000000000,0x00050c00000000000,0x0000000000000000,0x0001d700000000000},
+ { 0x0000000000000001,0x02a541feae025dd75,0x00000000277fb85b,0x00000001add3850b8,0x0000000000000000,0x02a60000000000000,0x0000000020000000,0x00000001ae0000000},
+ { 0x000000000000015f,0x0000005f8b0d03456,0x0000000002098504,0x000000062868be0c2,0x0000000000000000,0x0000005fa00000000,0x0000000000000000,0x000000062a0000000},
+ { 0x00000000000001e5,0x00160d33a06e93d94,0x0000000000018488,0x00000033dadc3ba42,0x0000000000000000,0x00161000000000000,0x0000000000000000,0x00000033e00000000},
+ { 0x0000000000008678,0x0000a366956cea07e,0x00000000000ac62b,0x00000000071727cea,0x0000000000000000,0x0000a380000000000,0x0000000000000000,0x00000000071800000},
+ { 0x00000000000ba801,0x0000000390e42e462,0x000000005c7470b5,0x00000000142660fe7,0x0000000000000000,0x00000003910000000,0x000000005c400000,0x00000000142800000},
+ { 0x0000000001da289f,0x00000016b37ddf1c1,0x000000008b45faec,0x00000000d7f0fef69,0x0000000000000000,0x00000016b80000000,0x0000000088000000,0x00000000d80000000},
+ { 0x0000000000000041,0x0000154b6f6b89108,0x0000000000037c12,0x00000000001d6caaa,0x0000000000000000,0x00001550000000000,0x0000000000030000,0x00000000001d70000},
+ { 0x00000000000006ec,0x0001af566891fd2a5,0x0000000006294648,0x00000611282a2d474,0x0000000000000000,0x0001af80000000000,0x0000000000000000,0x00000612000000000},
+ { 0x00000000000000bf,0x000038e2f62d711bc,0x00000000000005bb,0x0000000000000a6e2,0x0000000000000000,0x000038f0000000000,0x0000000000000580,0x0000000000000a700},
+ { 0x0000000000000007,0x0000000002101b613,0x00000000000000bb,0x0000000000000045e,0x0000000000000000,0x00000000021100000,0x00000000000000bb,0x0000000000000045e},
+ { 0x000000000000026f,0x00000751ea0f0c120,0x000000000000d215,0x0000000006d4ddf77,0x0000000000000000,0x00000752000000000,0x0000000000000000,0x0000000006d600000},
+ { 0x000000017a111a7b,0x0000001370e4fb133,0x00000004fd6e4224,0x0000000110aea61d7,0x0000000100000000,0x00000013780000000,0x00000004fc000000,0x0000000110c000000},
+ { 0x0000000000000073,0x000001e43f6db9055,0x000000013ef4e25c,0x00000039ebdb7f5b7,0x0000000000000000,0x000001e4800000000,0x0000000100000000,0x00000039f00000000},
+ { 0x000000000003636e,0x007d4e57b7d71a2b2,0x001771c930b557e3,0x00024042f718675be,0x0000000000000000,0x007d6000000000000,0x0017700000000000,0x00024080000000000},
+ { 0x000000000000cc98,0x001b3c38cb17f5557,0x000031df03d18fb6,0x001849148da6632f7,0x0000000000000000,0x001b4000000000000,0x0000000000000000,0x00185000000000000},
+ { 0x0000000000000011,0x00000084644aeae0d,0x0000000000000b37,0x0000000000734537b,0x0000000000000000,0x00000084800000000,0x0000000000000000,0x00000000007360000},
+ { 0x0000000000028128,0x0000012725d690b9a,0x000000000006ee20,0x000000198328006b3,0x0000000000000000,0x00000127800000000,0x0000000000000000,0x00000019880000000},
+ { 0x0000000000053fd0,0x0035284dbe66c177d,0x0000000003c69502,0x0000023bd5452820f,0x0000000000000000,0x00353000000000000,0x0000000000000000,0x0000023c000000000},
+ { 0x00000000000079d4,0x000000077ebd1efb4,0x000000000001200f,0x000000000953dee9b,0x0000000000000000,0x00000007800000000,0x0000000000000000,0x00000000095400000},
+ { 0x0000000000000002,0x000aff771c5941a3a,0x00000fd39d051055,0x000053df71c675ed1,0x0000000000000000,0x000b0000000000000,0x00000e0000000000,0x000053e0000000000},
+ { 0x0000000000000018,0x070dfb937db5a8463,0x0000003891411e1e,0x000b3dc68afafc77f,0x0000000000000000,0x070e0000000000000,0x0000000000000000,0x000b4000000000000},
+ { 0x0000000000007111,0x0065c470e4f4566ae,0x0000000064aa1974,0x00000002b3e6e3764,0x0000000000000000,0x0065e000000000000,0x0000000060000000,0x00000002b40000000},
+ { 0x0000000000000012,0x000447b10ee68d3e4,0x000000000002fd6e,0x000000001b80e1ec6,0x0000000000000000,0x00044800000000000,0x0000000000000000,0x000000001b8800000},
+ { 0x0000000000000331,0x000017bbc850aa39c,0x00000000000009c9,0x000000000005b2c65,0x0000000000000000,0x000017c0000000000,0x0000000000000000,0x000000000005b4000},
+ { 0x0000003096166488,0x00059b5962b49e040,0x000007665dc17b8c,0x00000c76e2e29e81f,0x0000000000000000,0x00059c00000000000,0x0000074000000000,0x00000c78000000000},
+ { 0x0000000000000037,0x00043be4289b15be8,0x000000064bbd9dd8,0x0004220effabf702d,0x0000000000000000,0x00043c00000000000,0x0000000000000000,0x00042400000000000},
+ { 0x0000000000000004,0x00000000f1b9fd595,0x00000000005d3de4,0x0000000018cb04e52,0x0000000000000000,0x00000000f1c000000,0x0000000000000000,0x0000000018d000000},
+ { 0x0000000000000001,0x00164ea1f5cea496f,0x00000000000c707d,0x0000000598e0f67d9,0x0000000000000000,0x00165000000000000,0x0000000000000000,0x000000059a0000000},
+ { 0x000000000000017e,0x03b2e731fec250806,0x000000006dcd9a14,0x001fa8775b79d1411,0x0000000000000000,0x03b30000000000000,0x0000000000000000,0x001fb000000000000},
+ { 0x000000000779e27b,0x0000ff5e262973698,0x000001c9b0860144,0x0000014d34cf152e0,0x0000000000000000,0x0000ff80000000000,0x000001c800000000,0x0000014d800000000},
+ { 0x0000000000000155,0x0003ef01990502f67,0x0000000000000e9b,0x000000000005d2c96,0x0000000000000000,0x0003f000000000000,0x0000000000000000,0x000000000005d4000},
+ { 0x0000000000001e3b,0x00000d438ee9f3e96,0x0000000026a3b90b,0x0000000074c6d6751,0x0000000000000000,0x00000d44000000000,0x0000000026000000,0x0000000074e000000},
+ { 0x00000000001a9f39,0x00004f29b2a3b7881,0x0000000002bf85dd,0x0000015bf840127ae,0x0000000000000000,0x00004f40000000000,0x0000000000000000,0x0000015c000000000},
+ { 0x0000000006dbb270,0x053938366c6c9f394,0x00000000cea092a6,0x0017d5a9d48a92555,0x0000000000000000,0x053a0000000000000,0x0000000000000000,0x0017d800000000000},
+ { 0x00000000000001bd,0x00a951f27630ef025,0x0000000001033021,0x0006fda4ad779a765,0x0000000000000000,0x00a98000000000000,0x0000000000000000,0x0006fe00000000000},
+ { 0x0000000000001320,0x003a7e22af5fb0e63,0x0000000000009f13,0x0000000000007e1b0,0x0000000000000000,0x003a8000000000000,0x0000000000009e00,0x0000000000007e200},
+ { 0x0000000000008c43,0x00000001e3ef4644c,0x00000000000a5e90,0x000000000049ea39c,0x0000000000000000,0x00000001e40000000,0x00000000000a0000,0x00000000004a00000},
+ { 0x0000000000000007,0x00369b1bc4b6b8c88,0x0000000000000028,0x0000000000025047f,0x0000000000000000,0x0036a000000000000,0x0000000000000000,0x00000000000251000},
+ { 0x00000000000012a3,0x000000005cbc5efd7,0x0000000000006f08,0x000000000000c776e,0x0000000000000000,0x000000005cc000000,0x0000000000006c00,0x000000000000c7800},
+ { 0x000000000000e4b5,0x015ba9c15fb5c6d42,0x00000fbafee32d14,0x000015db089d4c252,0x0000000000000000,0x015c0000000000000,0x00000f8000000000,0x000015e0000000000},
+ { 0x000000000000c4a4,0x0001d4140501e97c4,0x00000000003c6f39,0x0000000007d1eb689,0x0000000000000000,0x0001d480000000000,0x0000000000200000,0x0000000007d200000},
+ { 0x000000034d1694ee,0x006826d0a618af356,0x00001432ee91c7ba,0x0008190129caf9820,0x0000000000000000,0x00684000000000000,0x0000000000000000,0x00081c00000000000},
+ { 0x0000000000000002,0x00000007ebe00a867,0x000000000000071a,0x0000000000238ad65,0x0000000000000000,0x00000007ec0000000,0x0000000000000000,0x00000000002390000},
+ { 0x0000000000000005,0x00000470e80a52e23,0x000000000000007e,0x0000000000008ddcd,0x0000000000000000,0x00000472000000000,0x0000000000000000,0x0000000000008e000},
+ { 0x0000000000000001,0x000ed942e6d97cfd6,0x0000000000000015,0x000000000000000d7,0x0000000000000000,0x000edc00000000000,0x0000000000000015,0x000000000000000d7},
+ { 0x000000000000002f,0x0000da9dc440172ac,0x00000000001946ca,0x000000000e4646a63,0x0000000000000000,0x0000dac0000000000,0x0000000000000000,0x000000000e4800000},
+ { 0x00000000000000ab,0x012e00163634a61f0,0x0000000002c8a860,0x000007d9d87f80e90,0x0000000000000000,0x012e8000000000000,0x0000000000000000,0x000007da000000000},
+ { 0x0000000000000024,0x000a6bdec21cb40db,0x0000000000000037,0x000000018b0652da8,0x0000000000000000,0x000a6c00000000000,0x0000000000000000,0x000000018b8000000},
+ { 0x0000000000000377,0x008acea11bd327e8d,0x00000000000193e5,0x000000000000a1323,0x0000000000000000,0x008b0000000000000,0x0000000000019000,0x000000000000a1400},
+ { 0x00000000071dc59f,0x005bc3188418ab8ea,0x0000002a1b497d34,0x000061f30876da5fd,0x0000000000000000,0x005be000000000000,0x0000000000000000,0x00006200000000000},
+ { 0x00000000000002af,0x0000117eb02e64428,0x0000000000000548,0x00000000060fd64da,0x0000000000000000,0x00001180000000000,0x0000000000000000,0x00000000061000000},
+ { 0x000000036373ad5d,0x00c24f1ce31343c51,0x000513ec8f2f3ff9,0x0090374ef42619b34,0x0000000000000000,0x00c28000000000000,0x0004000000000000,0x00904000000000000},
+ { 0x000000000000002a,0x00001a94fe75eb274,0x00000000000000a0,0x000000000000118f1,0x0000000000000000,0x00001a98000000000,0x0000000000000080,0x00000000000011900},
+ { 0x000000000000005b,0x000000138d0dfc0c7,0x00000000000004d0,0x00000000000000de5,0x0000000000000000,0x00000013900000000,0x00000000000004d0,0x00000000000000de5},
+ { 0x0000000000000001,0x0000000000025d7aa,0x0000000000000007,0x00000000000000108,0x0000000000000000,0x0000000000025e000,0x0000000000000007,0x00000000000000108},
+ { 0x000000000000009c,0x00000000000f170a6,0x0000000000006f6b,0x0000000000000b9d0,0x0000000000000000,0x00000000000f18000,0x0000000000006f60,0x0000000000000b9e0},
+ { 0x0000000001917d41,0x0074f9197aa8b542c,0x0000001fb008ef72,0x00003f56189f1e646,0x0000000000000000,0x00750000000000000,0x0000000000000000,0x00003f60000000000},
+ { 0x00000035815aed75,0x0270ada7a85f05ffc,0x00000122fdda6556,0x00000065d455b49ad,0x0000000000000000,0x02710000000000000,0x0000012200000000,0x00000065e00000000},
+ { 0x0000000003ce28f2,0x00554cf6fa3e1d3b5,0x000000000a6e9e05,0x000000152a40963a7,0x0000000000000000,0x00556000000000000,0x0000000000000000,0x00000015300000000},
+ { 0x0000000000000002,0x0000008a3c195f641,0x000000000073dd47,0x000000027999ba5bf,0x0000000000000000,0x0000008a400000000,0x0000000000000000,0x000000027a0000000},
+ { 0x0000000001eb9fdc,0x0000cbd1d5ab52bea,0x0000000007c5254c,0x00000000013f39aa2,0x0000000000000000,0x0000cc00000000000,0x0000000007c40000,0x00000000013f40000},
+ { 0x00000033a51080b5,0x00cdd98a681986da9,0x0000005f8339439a,0x00008292fda8cfbfe,0x0000000000000000,0x00ce0000000000000,0x0000000000000000,0x000082c0000000000},
+ { 0x0000000000000002,0x0000000002259239e,0x0000000000000294,0x00000000000000ad4,0x0000000000000000,0x00000000022600000,0x0000000000000294,0x00000000000000ad4},
+ { 0x00000000000000c6,0x003f9129783362149,0x00000000000031a3,0x00000000000b5a23c,0x0000000000000000,0x003fa000000000000,0x0000000000000000,0x00000000000b5c000},
+ { 0x0000000000000373,0x0000005f5e8ab5948,0x000000004c081913,0x0000000032bf4d4f9,0x0000000000000000,0x0000005f600000000,0x000000004c000000,0x0000000032c000000},
+ { 0x0000000000000000,0x00000000035332c68,0x000000000000003b,0x0000000001b87719d,0x0000000000000000,0x00000000035400000,0x0000000000000000,0x0000000001b880000},
+ { 0x000000000000012f,0x0000003dd50215046,0x000000000081de7d,0x000000039f288e536,0x0000000000000000,0x0000003de00000000,0x0000000000000000,0x00000003a00000000},
+ { 0x000000000000dad7,0x000fdafdedbab2148,0x0000000045a7981d,0x0006764a3857f7f2b,0x0000000000000000,0x000fdc00000000000,0x0000000000000000,0x00067800000000000},
+ { 0x0000000000000005,0x00099b7ed9c1be2c7,0x000000233fbda6a5,0x0002e1a5613e89a36,0x0000000000000000,0x00099c00000000000,0x0000000000000000,0x0002e200000000000},
+ { 0x00000000002e5354,0x0000012dddb9c8d37,0x000000001d8c3ee8,0x000000000673b5a12,0x0000000000000000,0x0000012e000000000,0x000000001d800000,0x00000000067400000},
+ { 0x000000000004f459,0x000001b501ecbc37b,0x0000018f0108e776,0x0000001b9bcebfde5,0x0000000000000000,0x000001b5800000000,0x0000018f00000000,0x0000001b9c0000000},
+ { 0x0000000000000002,0x00000772e4779b8ec,0x00000000000a6d49,0x000000000000dc476,0x0000000000000000,0x00000774000000000,0x00000000000a6d00,0x000000000000dc500},
+ { 0x0000000000008053,0x0000004b8c45f9910,0x0000000000010a00,0x00000000000d308c4,0x0000000000000000,0x0000004ba00000000,0x0000000000010000,0x00000000000d34000},
+ { 0x00000000000002e1,0x00000014a7a37f3d4,0x0000000000000589,0x0000000000001f0a3,0x0000000000000000,0x00000014a80000000,0x0000000000000580,0x0000000000001f100},
+ { 0x0000000058992ef5,0x00000351abbd3aa75,0x00000001adae839f,0x0000014f10154e829,0x0000000000000000,0x00000352000000000,0x0000000000000000,0x0000014f800000000},
+ { 0x000000000c940107,0x092715447a0e2acdc,0x000001f7ff3580a9,0x00000eba6d965c39a,0x0000000000000000,0x09280000000000000,0x000001c000000000,0x00000ebc000000000},
+ { 0x000000000000f7cd,0x0007ee682a08de747,0x000000000001a02e,0x000000034dfaa189d,0x0000000000000000,0x0007f000000000000,0x0000000000000000,0x000000034e0000000},
+ { 0x0000000000012ef1,0x000015c91834650a5,0x000000008f1d0e00,0x000000001d9620f7b,0x0000000000000000,0x000015d0000000000,0x000000008f000000,0x000000001d9800000},
+ { 0x000000000000000c,0x00271452b55eaa82f,0x000000000000000f,0x00000000000016fb8,0x0000000000000000,0x00272000000000000,0x0000000000000000,0x00000000000017000},
+ { 0x0000000000000031,0x0432e3993e3121548,0x0000000007dcae10,0x00000002a4449015a,0x0000000000000000,0x04340000000000000,0x0000000000000000,0x00000002a50000000},
+ { 0x00000000000000d7,0x00000124d350c9405,0x00000000005e42ae,0x00000000271499d08,0x0000000000000000,0x00000125000000000,0x0000000000000000,0x00000000272000000},
+ { 0x0000000000000003,0x0000004f50c439442,0x0000000000000004,0x000000000002b20c4,0x0000000000000000,0x0000004f600000000,0x0000000000000000,0x000000000002b3000},
+ { 0x0000000000000005,0x0320d22b796883408,0x000000000000000f,0x000000000091bb109,0x0000000000000000,0x03210000000000000,0x0000000000000000,0x000000000091c0000},
+ { 0x00000e6cc9afddfb,0x00b9a324369bad41b,0x0002e39b08a5760d,0x00051cdcae7abfede,0x0000000000000000,0x00b9c000000000000,0x0002e00000000000,0x00051e00000000000},
+ { 0x0000000000011e0b,0x000000311943a05fc,0x0000000000038370,0x00000000cadc2bb37,0x0000000000000000,0x00000031200000000,0x0000000000000000,0x00000000cb0000000},
+ { 0x00000000000000c4,0x00000e10e737ae1eb,0x00000000125b918c,0x0000001fcf3843b1b,0x0000000000000000,0x00000e14000000000,0x0000000000000000,0x0000001fd00000000},
+ { 0x0000000000000000,0x00000000000004fb3,0x000000000000003a,0x00000000000000044,0x0000000000000000,0x00000000000004fc0,0x000000000000003a,0x00000000000000044},
+ { 0x00000a4d6ea2c78b,0x000774d64a1de99fc,0x0000fa7ed1e64aaf,0x0000caee91c4ce4f3,0x0000000000000000,0x00077600000000000,0x0000f80000000000,0x0000cb00000000000},
+ { 0x0000000000000568,0x008a93a2275702d21,0x0000000029952821,0x0000007acbf7e38a5,0x0000000000000000,0x008ac000000000000,0x0000000000000000,0x0000007ae00000000},
+ { 0x000000000000001b,0x000005ebc078ce598,0x0000000000000087,0x00000000000009838,0x0000000000000000,0x000005ec000000000,0x0000000000000080,0x00000000000009840},
+ { 0x000000000008ec0f,0x00000077bde2d4418,0x000000000009434d,0x00000001dc503f9af,0x0000000000000000,0x00000077c00000000,0x0000000000000000,0x00000001dc8000000},
+ { 0x000000000000baa1,0x0000060564ce84bc6,0x00000237c08ce507,0x000000628e7a4147c,0x0000000000000000,0x00000606000000000,0x0000023700000000,0x00000062900000000},
+ { 0x000000000000009e,0x095d597ddd49ab1e7,0x0000000002db2194,0x0000000011eb93b29,0x0000000000000000,0x09600000000000000,0x0000000002800000,0x0000000011f000000},
+ { 0x0000000000000002,0x00001d9a3d60188f7,0x0000000000000023,0x000000000008f1da4,0x0000000000000000,0x00001da0000000000,0x0000000000000000,0x000000000008f4000},
+ { 0x000000000000000e,0x007085eeff2a58ca5,0x00000000005dbf9f,0x000000002f13d8030,0x0000000000000000,0x0070a000000000000,0x0000000000000000,0x000000002f2000000},
+ { 0x000000000001c224,0x00001844c835ca70e,0x00000009a9d7dee6,0x000004a866561292b,0x0000000000000000,0x00001848000000000,0x0000000000000000,0x000004aa000000000},
+ { 0x00000000000043b9,0x03668eab849235769,0x0000003aa70ba92f,0x000000b358c6463c0,0x0000000000000000,0x03670000000000000,0x0000003800000000,0x000000b3800000000},
+ { 0x0000000000eef6c6,0x000329fa1e235e15d,0x0000000004df981c,0x000000044ae5b4630,0x0000000000000000,0x00032a00000000000,0x0000000000000000,0x000000044c0000000},
+ { 0x0000000000000001,0x0000008c15bd38444,0x00000000c7e4d6e7,0x00000000d659c457e,0x0000000000000000,0x0000008c400000000,0x00000000c4000000,0x00000000d68000000},
+ { 0x0000000000018a7d,0x007e67e851d0582e8,0x000000000001c814,0x00000040d1cf143d0,0x0000000000000000,0x007e8000000000000,0x0000000000000000,0x00000040e00000000},
+ { 0x00000000001527a2,0x000006b32336dcd9d,0x00000000014321cc,0x00000000011284633,0x0000000000000000,0x000006b4000000000,0x0000000001400000,0x000000000112c0000},
+ { 0x0000000000000740,0x000042e1b44f55274,0x0000000000225fc5,0x000000001b9fdc361,0x0000000000000000,0x00004300000000000,0x0000000000000000,0x000000001ba000000},
+ { 0x0000000000000065,0x000000001efcc2b52,0x000000000001b441,0x000000000001ece4a,0x0000000000000000,0x000000001f0000000,0x000000000001b000,0x000000000001ed000},
+ { 0x0000000000000099,0x000000000cc603543,0x0000000000038f11,0x00000000000071e45,0x0000000000000000,0x000000000cc800000,0x0000000000038f00,0x00000000000071f00},
+ { 0x00000000000006f2,0x00006c3ba60c290e0,0x000026b13094abde,0x00000f302e4df5f91,0x0000000000000000,0x00006c40000000000,0x0000268000000000,0x00000f34000000000},
+ { 0x0000000000000042,0x000000ad385105962,0x0000000000031011,0x00000000000105d71,0x0000000000000000,0x000000ad400000000,0x0000000000031000,0x00000000000106000},
+ { 0x000000000000001f,0x0000309e3934afb91,0x000000000003c7d4,0x0000000002e389ed2,0x0000000000000000,0x000030a0000000000,0x0000000000000000,0x0000000002e400000},
+ { 0x0000000000000018,0x00000000a81d5449b,0x0000000000bbede6,0x000000001b204881c,0x0000000000000000,0x00000000a84000000,0x0000000000800000,0x000000001b2800000},
+ { 0x0000000000000069,0x00000000030fdaec9,0x000000000049b2c6,0x0000000000736acd1,0x0000000000000000,0x00000000031000000,0x0000000000480000,0x00000000007380000},
+ { 0x0000000000014e80,0x0001edf54c294d7a7,0x0000000000157369,0x000014e410c015b87,0x0000000000000000,0x0001ee00000000000,0x0000000000000000,0x000014e8000000000},
+ { 0x0000000000000a74,0x00003e4c8cd9afe27,0x000000000012cab4,0x00000178e2c9781a2,0x0000000000000000,0x00003e50000000000,0x0000000000000000,0x00000179000000000},
+ { 0x00000000000006c2,0x00427592bb025612e,0x00000000007558de,0x0000002a4839fde4d,0x0000000000000000,0x00428000000000000,0x0000000000000000,0x0000002a500000000},
+ { 0x0000000000000004,0x0000042a406d7a2b1,0x00000000018ff1ca,0x00000000f7fcf709d,0x0000000000000000,0x0000042c000000000,0x0000000000000000,0x00000000f80000000},
+ { 0x0000000000000003,0x00b5f25cee795f8f1,0x0000000001a14ce4,0x0000000231e49dc67,0x0000000000000000,0x00b60000000000000,0x0000000000000000,0x00000002320000000},
+ { 0x0000000000000003,0x0000559b5ed605498,0x00000000035185cf,0x00000cad416141e37,0x0000000000000000,0x000055a0000000000,0x0000000000000000,0x00000cb0000000000},
+ { 0x0000000000000023,0x00863c191f202957e,0x00000000000000ab,0x00000000fe573c097,0x0000000000000000,0x00864000000000000,0x0000000000000000,0x00000000fe8000000},
+ { 0x0000000003a08f8a,0x0000278cc6bfba353,0x0000168cab6470b1,0x00000503422e1650f,0x0000000000000000,0x00002790000000000,0x0000168000000000,0x00000504000000000},
+ { 0x0000000000000007,0x0000bf67ff2cb1188,0x0000000000025c29,0x00002ffe724af8c81,0x0000000000000000,0x0000bf80000000000,0x0000000000000000,0x00003000000000000},
+ { 0x00000000000039ce,0x00177ca879c09bd8e,0x000000000000c57b,0x000af5cebbdcb2a48,0x0000000000000000,0x00178000000000000,0x0000000000000000,0x000af800000000000},
+ { 0x000000000000000b,0x0000349f62b9a39ef,0x0000000000002bd8,0x0000000000056677e,0x0000000000000000,0x000034a0000000000,0x0000000000002000,0x00000000000568000},
+ { 0x00000001b7ddee26,0x001e5e0dd85713897,0x0000002047c52a71,0x000012f5032cd39d8,0x0000000000000000,0x001e6000000000000,0x0000000000000000,0x000012f8000000000},
+ { 0x0000000000000122,0x0000000c2b0a926ba,0x0000000002749aa8,0x0000000019f349b4d,0x0000000000000000,0x0000000c2c0000000,0x0000000002000000,0x0000000019f800000},
+ { 0x0000000000000364,0x0000000e173ad2cbf,0x000000000000141d,0x00000000000e9e811,0x0000000000000000,0x0000000e180000000,0x0000000000000000,0x00000000000ea0000},
+ { 0x0000000000000002,0x06a536720c9cd08ed,0x0001415c6ed65ef3,0x0000bbb4ed924ebec,0x0000000000000000,0x06a60000000000000,0x0001400000000000,0x0000bbc0000000000},
+ { 0x0000000000000001,0x0000000000000e7e2,0x0000000000000f60,0x00000000000001bb5,0x0000000000000000,0x0000000000000e800,0x0000000000000f60,0x00000000000001bb5},
+ { 0x0000000001918846,0x0028b5c9010f1b71a,0x0000002ea13b074f,0x000214185e6e3b68f,0x0000000000000000,0x0028c000000000000,0x0000000000000000,0x00021500000000000},
+ { 0x000000000241df48,0x0a6ce911d3024975e,0x000000000b61be06,0x0000000001187b8d5,0x0000000000000000,0x0a700000000000000,0x000000000b600000,0x00000000011880000},
+ { 0x00000054b2555d3b,0x00007f01da9feeef9,0x000006d7f7341fcc,0x00001f273f2069b49,0x0000000000000000,0x00007f20000000000,0x0000068000000000,0x00001f28000000000},
+ { 0x0000000000000048,0x0000007ca538f9614,0x0000000000000121,0x0000000003a317bca,0x0000000000000000,0x0000007cc00000000,0x0000000000000000,0x0000000003a400000},
+ { 0x000000795ccf3289,0x0003c0c8dc7f350e1,0x0005c99d31fc9e9b,0x00008101ad94594dc,0x0000000000000000,0x0003c100000000000,0x0005c90000000000,0x00008110000000000},
+ { 0x0000000000000004,0x002f6c8db2348d637,0x000000000000000a,0x0000000f3cf596c91,0x0000000000000000,0x002f7000000000000,0x0000000000000000,0x0000000f400000000},
+ { 0x0004b3aa01b298c9,0x01f6d8260c8533499,0x001b0b9770c9b924,0x002dae574003b6df6,0x0000000000000000,0x01f70000000000000,0x001b000000000000,0x002db000000000000},
+ { 0x000000000007f28b,0x002edbb62f3fff25f,0x00000000c3601601,0x00000003dc0848424,0x0000000000000000,0x002ee000000000000,0x00000000c0000000,0x00000003dd0000000},
+ { 0x0000000000007de1,0x000000008cd4cf973,0x0000000000761c71,0x000000001f6cb2873,0x0000000000000000,0x000000008d0000000,0x0000000000000000,0x000000001f7000000},
+ { 0x00000000000002fb,0x0000000ecd3509d6e,0x0000000000000302,0x00000007b7f01a853,0x0000000000000000,0x0000000ed00000000,0x0000000000000000,0x00000007b80000000},
+ { 0x00000000335cbaf7,0x0063b872a9a3b50e2,0x0002020530ed3e6b,0x0003082021e354440,0x0000000000000000,0x0063c000000000000,0x0002000000000000,0x00030900000000000},
+ { 0x0000000006ba5216,0x05647158968f07b3a,0x000007ccc0b118ba,0x019a039233621fdf8,0x0000000000000000,0x05660000000000000,0x0000000000000000,0x019a8000000000000},
+ { 0x00000000000000f2,0x0304acca794cecd1e,0x000000000000281e,0x0006448b6b23dfbc2,0x0000000000000000,0x03050000000000000,0x0000000000000000,0x00064600000000000},
+ { 0x0000000000000030,0x00025145bc980702f,0x00000000048605b2,0x000000003a0d8bedc,0x0000000000000000,0x00025200000000000,0x0000000004000000,0x000000003a1000000},
+ { 0x000000754b9ef324,0x0669a7b836ded4fb2,0x0000036279aee725,0x000003d24094a39f6,0x0000000000000000,0x066a0000000000000,0x0000036000000000,0x000003d3000000000},
+ { 0x0000000007fa1201,0x00395f29a60b6960a,0x00023a4360eb09f2,0x00308b0a2c4bf46be,0x0000000000000000,0x00396000000000000,0x0002000000000000,0x00309000000000000},
+ { 0x00000000000003bd,0x00016f83847cbc075,0x000000000000cf5a,0x0000003d221e4af3e,0x0000000000000000,0x00017000000000000,0x0000000000000000,0x0000003d300000000},
+ { 0x00000000000007d3,0x00000612fc10a8b71,0x000000000009776b,0x000000000420785e1,0x0000000000000000,0x00000614000000000,0x0000000000000000,0x00000000042200000},
+ { 0x00000000000008ea,0x0ca01e2fbbd2735f0,0x0000000000000b21,0x0000000f8bf33e6bf,0x0000000000000000,0x0ca40000000000000,0x0000000000000000,0x0000000f8c0000000},
+ { 0x0000000000000001,0x000000000154113cc,0x000000000000080b,0x000000000000e1d89,0x0000000000000000,0x00000000015480000,0x0000000000000800,0x000000000000e2000},
+ { 0x0000000287714ff9,0x0000bf7b91317f0c9,0x000001a30acb19cb,0x000006f6cc159e39d,0x0000000000000000,0x0000bf80000000000,0x000001a000000000,0x000006f8000000000},
+ { 0x0000000000000000,0x00009e79373071d7e,0x000000023a1c1ddf,0x000005a7e183ed59e,0x0000000000000000,0x00009e80000000000,0x0000000000000000,0x000005a8000000000},
+ { 0x00000000000baf94,0x01c067e4f6840ffc1,0x000000009cb3c0a0,0x006942d56ed9b81ab,0x0000000000000000,0x01c08000000000000,0x0000000000000000,0x00696000000000000},
+ { 0x0000000004749564,0x00a010deab58a54ab,0x0000000048ac97e8,0x0000034ef1c23839d,0x0000000000000000,0x00a04000000000000,0x0000000000000000,0x0000034f000000000},
+ { 0x0000000000012c33,0x0000000ed1b3edd11,0x0000000000101cc2,0x00000000a296dad57,0x0000000000000000,0x0000000ed40000000,0x0000000000000000,0x00000000a2c000000},
+ { 0x0000000000000007,0x000000300f4ec5677,0x0000000000000075,0x00000012ac4a01a29,0x0000000000000000,0x00000030100000000,0x0000000000000000,0x00000012b00000000},
+ { 0x000000000000003f,0x000001a0b8ccfdc1b,0x000000000036d445,0x0000000004b478392,0x0000000000000000,0x000001a1000000000,0x0000000000200000,0x0000000004b600000},
+ { 0x0000000000000018,0x000000000005f2984,0x0000000000000176,0x0000000000000b261,0x0000000000000000,0x000000000005f4000,0x0000000000000140,0x0000000000000b280},
+ { 0x000000015e6c4b77,0x03d11deb092936477,0x00000046498c5c67,0x02a906fdbd43bf591,0x0000000000000000,0x03d20000000000000,0x0000000000000000,0x02aa0000000000000},
+ { 0x0000000000000004,0x00000000007af0d20,0x00000000000000f4,0x00000000000000bd8,0x0000000000000000,0x00000000007b00000,0x00000000000000f4,0x00000000000000bd8},
+ { 0x000000000000000e,0x0000348dcddb7997c,0x0000000000000014,0x00000000000000020,0x0000000000000000,0x00003490000000000,0x0000000000000014,0x00000000000000020},
+ { 0x0000000000000009,0x00000000cbae249e7,0x0000000000066a04,0x0000000018ffc10d6,0x0000000000000000,0x00000000cbc000000,0x0000000000000000,0x00000000190000000},
+ { 0x0000000000032091,0x0a7d1080ec224d280,0x0000006e5843ebde,0x000032aa4f269ffe0,0x0000000000000000,0x0a800000000000000,0x0000000000000000,0x000032b0000000000},
+ { 0x0071b25a5e674984,0x02fee3929236293e0,0x009e7882eeaab47f,0x000fe45960d2473d3,0x0070000000000000,0x02ff0000000000000,0x009e600000000000,0x000fe600000000000},
+ { 0x00000002bd1238a4,0x0caa05d3a08bcd06f,0x000000942ef6481b,0x0001aa5d720c3e937,0x0000000000000000,0x0cac0000000000000,0x0000000000000000,0x0001aa80000000000},
+ { 0x00000000015f2103,0x000627f1178285baf,0x0000000002ebce37,0x00000007ab95932fd,0x0000000000000000,0x00062800000000000,0x0000000000000000,0x00000007ac0000000},
+ { 0x000000000614809e,0x0241ff175cb9d7b95,0x00000b8826c1ddfc,0x00000aa59bec501ca,0x0000000000000000,0x02420000000000000,0x00000b8000000000,0x00000aa8000000000},
+ { 0x0000000000000006,0x000000000eb609890,0x000000000000009b,0x00000000007851583,0x0000000000000000,0x000000000eb800000,0x0000000000000000,0x00000000007860000},
+ { 0x0000000000000002,0x0000000013b074191,0x0000000000000422,0x000000000000ae1d9,0x0000000000000000,0x0000000013b800000,0x0000000000000400,0x000000000000ae400},
+ { 0x0000000002129cfd,0x0000001ef0f0cd162,0x00000000072f98e5,0x0000000000e656a6c,0x0000000000000000,0x0000001ef80000000,0x00000000072e0000,0x0000000000e660000},
+ { 0x000000007f07b241,0x00046f2540003bf12,0x0000000202ef9f31,0x0000012fce8d6292d,0x0000000000000000,0x00047000000000000,0x0000000000000000,0x00000130000000000},
+ { 0x00000000000005d1,0x000011d45ee6c1bce,0x0000000006bdeaf4,0x000000d694762f05c,0x0000000000000000,0x000011d8000000000,0x0000000000000000,0x000000d6c00000000},
+ { 0x00000000000010de,0x033eff2ece289037d,0x000206f8366c392b,0x0019e85bf705bfe2e,0x0000000000000000,0x033f0000000000000,0x0002000000000000,0x0019f000000000000},
+ { 0x0000000000000027,0x00296815c2831c879,0x0000091a30299448,0x0000186e7916db643,0x0000000000000000,0x00297000000000000,0x0000090000000000,0x00001870000000000},
+ { 0x000000000000000d,0x0495ac19bab058bf1,0x0001b174672aa512,0x0000348697484aa6f,0x0000000000000000,0x04960000000000000,0x0001b10000000000,0x00003488000000000},
+ { 0x0000000000002f83,0x00000000009dddcb9,0x00000000007cd4a6,0x00000000006547ca3,0x0000000000000000,0x00000000009e00000,0x00000000007c0000,0x00000000006560000},
+ { 0x00000000000001d9,0x00cfc6b4d0ffa7797,0x000000001778be60,0x000000009bfb171cf,0x0000000000000000,0x00d00000000000000,0x0000000014000000,0x000000009c0000000},
+ { 0x0000000000036b54,0x097b839584994cd31,0x00000023e5bd9069,0x00000007e6cfbd546,0x0000000000000000,0x097c0000000000000,0x00000023e0000000,0x00000007e80000000},
+ { 0x00000000000462a1,0x003f01dc69e9e3f3b,0x00000b9ef8cfdd4c,0x0001f91b55e1c15ba,0x0000000000000000,0x003f1000000000000,0x0000080000000000,0x0001f980000000000},
+ { 0x000000000002dec8,0x0035dcfea6e2b84ea,0x000000092903ce4b,0x0001b37caacea2e15,0x0000000000000000,0x0035e000000000000,0x0000000000000000,0x0001b380000000000},
+ { 0x00000000019e9ae0,0x0000007b02f28ed13,0x0000000005c09e01,0x000000007f6606514,0x0000000000000000,0x0000007b200000000,0x0000000004000000,0x000000007f8000000},
+ { 0x000000000000a4a7,0x001890c24be5a07ed,0x00000005a21c0d13,0x0000001e31910704f,0x0000000000000000,0x00189800000000000,0x0000000580000000,0x0000001e380000000},
+ { 0x00000000ac57de7a,0x000027f61e4076a99,0x000000013b369230,0x000000073353f98cb,0x0000000000000000,0x00002800000000000,0x0000000120000000,0x00000007340000000},
+ { 0x0000000001d4fb6e,0x0000000d5e862af66,0x0000000094b5795b,0x0000000031fe95c21,0x0000000000000000,0x0000000d600000000,0x0000000094000000,0x00000000320000000},
+ { 0x000000000000000e,0x00000000007a8b01a,0x0000000000008e7f,0x00000000000bc16cf,0x0000000000000000,0x00000000007aa0000,0x0000000000008000,0x00000000000bc4000},
+ { 0x0000000000000722,0x0c8b1d25a8f77185f,0x004557745c737b0f,0x018040cab11cd96ad,0x0000000000000000,0x0c8c0000000000000,0x0040000000000000,0x01808000000000000},
+ { 0x000000000000c759,0x02a7b72f7058552a2,0x000000000002f701,0x0000000596de4d218,0x0000000000000000,0x02a80000000000000,0x0000000000000000,0x00000005980000000},
+ { 0x0000000000000008,0x011ab10201f4b77f7,0x00000000001a08be,0x00185f3c002122aa3,0x0000000000000000,0x011b0000000000000,0x0000000000000000,0x00186000000000000},
+ { 0x00000000000d2a99,0x000795228b39ba7f0,0x000000000015ae05,0x000000edb8147f1dc,0x0000000000000000,0x00079600000000000,0x0000000000000000,0x000000edc00000000},
+ { 0x0000000000000174,0x0ebc51c36d5bea9d0,0x000000000001e6ed,0x00002d345ade27ee1,0x0000000000000000,0x0ec00000000000000,0x0000000000000000,0x00002d40000000000},
+ { 0x000000000000000e,0x00ff94aacf94aaced,0x000017fc1d198604,0x00188e40287b56d3f,0x0000000000000000,0x00ffc000000000000,0x0000000000000000,0x00189000000000000},
+ { 0x0000000000031ed0,0x0002e1109b5af9ae0,0x00000000001b7453,0x000000000013589b9,0x0000000000000000,0x0002e200000000000,0x00000000001b0000,0x00000000001360000},
+ { 0x0000000000000001,0x0000775bbdf57b57a,0x0000000000000054,0x0000000000000bd4b,0x0000000000000000,0x00007760000000000,0x0000000000000040,0x0000000000000bd80},
+ { 0x00000000000edfe0,0x000000142bf90db29,0x0000000000cdeb78,0x0000000016882d201,0x0000000000000000,0x00000014300000000,0x0000000000800000,0x00000000169000000},
+ { 0x000000000000000a,0x00001e932cecf933e,0x00000000000db502,0x000000000811a191f,0x0000000000000000,0x00001e98000000000,0x0000000000000000,0x00000000081400000},
+ { 0x0000000a24663262,0x07d802ebeeda8640e,0x000005db297465dd,0x00888e6a9e6b8f370,0x0000000000000000,0x07da0000000000000,0x0000000000000000,0x0088c000000000000},
+ { 0x0000000000000001,0x0000023b0d7c6f38c,0x00000000000000b6,0x0000000dc9c92454b,0x0000000000000000,0x0000023c000000000,0x0000000000000000,0x0000000dcc0000000},
+ { 0x0000000000000006,0x00ea17685bb156c1c,0x0000000000000b74,0x00000000000004153,0x0000000000000000,0x00ea4000000000000,0x0000000000000b70,0x00000000000004160},
+ { 0x0000000000157b4e,0x00e32b9940dbdd157,0x00000002cef26d53,0x000008a8f59b44970,0x0000000000000000,0x00e34000000000000,0x0000000000000000,0x000008ac000000000},
+ { 0x0000000000000002,0x000001db287514478,0x000000000000000d,0x0000000000000020c,0x0000000000000000,0x000001db800000000,0x000000000000000d,0x0000000000000020c},
+ { 0x000000000000000f,0x000005903612a3868,0x00000000000000ac,0x00000000001293b8e,0x0000000000000000,0x00000592000000000,0x0000000000000000,0x00000000001298000},
+ { 0x0000000000000003,0x01b656ca2ddf122e9,0x000000000019ef87,0x00000002516e519d3,0x0000000000000000,0x01b68000000000000,0x0000000000000000,0x00000002520000000},
+ { 0x000000000030db8d,0x001c40ff58b8c221d,0x000000000106db4c,0x000000000184d6ddf,0x0000000000000000,0x001c4800000000000,0x0000000001000000,0x00000000018500000},
+ { 0x0000000000000032,0x000000000d5344c56,0x0000000000000ff6,0x000000000042d096b,0x0000000000000000,0x000000000d5400000,0x0000000000000000,0x000000000042e0000},
+ { 0x000000000000000a,0x094b4df9f7329583e,0x0000000000004f02,0x000000000000cd9cc,0x0000000000000000,0x094c0000000000000,0x0000000000004c00,0x000000000000cdc00},
+ { 0x0000000f3767902e,0x000003bab2c5f583f,0x000000bc90eba204,0x000000244106e9269,0x0000000000000000,0x000003bb000000000,0x000000bc80000000,0x00000024480000000},
+ { 0x00000000f88ce643,0x0b2ebec037847fd15,0x00004b53952f9c12,0x009768db289891fc9,0x0000000000000000,0x0b300000000000000,0x0000000000000000,0x00978000000000000},
+ { 0x00000000000dcc55,0x01512fd05a6a1d118,0x0000002d71d0d52e,0x00000ed5719d9e70a,0x0000000000000000,0x01518000000000000,0x0000000000000000,0x00000ed8000000000},
+ { 0x0000000000001899,0x00022a9daed93d1da,0x000000000001c021,0x00000005cfba577cc,0x0000000000000000,0x00022b00000000000,0x0000000000000000,0x00000005d00000000},
+ { 0x000000000000748e,0x0b862f1b7a40273e2,0x000000000000d391,0x00000000805ff8613,0x0000000000000000,0x0b880000000000000,0x0000000000000000,0x00000000808000000},
+ { 0x0000000000046b08,0x000700592e5ddabad,0x0000000000071b68,0x0000000000060f039,0x0000000000000000,0x00070200000000000,0x0000000000070000,0x00000000000610000},
+ { 0x0000000000035574,0x00b1ef8e99805dff4,0x000000000449d63b,0x00000000bdc098526,0x0000000000000000,0x00b20000000000000,0x0000000004000000,0x00000000be0000000},
+ { 0x0000000000017cc6,0x0900953c1874df52f,0x0000000a5214861a,0x00017043a0e0201bb,0x0000000000000000,0x09040000000000000,0x0000000000000000,0x00017080000000000},
+ { 0x0000000000000003,0x00000001955e748f3,0x0000000000000c6e,0x0000000000000459c,0x0000000000000000,0x00000001958000000,0x0000000000000c60,0x000000000000045a0},
+ { 0x00000000001c36c8,0x0001df293d82ae63d,0x000000002dabe506,0x00000000c50eabc2a,0x0000000000000000,0x0001df80000000000,0x000000002c000000,0x00000000c54000000},
+ { 0x000000000001badb,0x00190f01e3adedf3f,0x000000002a9bc845,0x00000044f2fe3ba58,0x0000000000000000,0x00191000000000000,0x0000000000000000,0x00000045000000000},
+ { 0x0000000000000009,0x0000730f433f26aec,0x000000000000d069,0x000004c812301e51e,0x0000000000000000,0x00007320000000000,0x0000000000000000,0x000004ca000000000},
+ { 0x0000000000000000,0x0253d5d89bedbc020,0x0000000000000007,0x000000000030b34df,0x0000000000000000,0x02540000000000000,0x0000000000000000,0x000000000030c0000},
+ { 0x000000000000dfa6,0x0000003fba1cf69d3,0x0000000000ee4c0d,0x00000000004680b87,0x0000000000000000,0x0000003fc00000000,0x0000000000ee0000,0x00000000004690000},
+ { 0x0000000000000001,0x0011278e80a8e7a51,0x0000000051b0daf1,0x00015dd241015509f,0x0000000000000000,0x00112800000000000,0x0000000000000000,0x00015e00000000000},
+ { 0x0000000000000517,0x00000cb2eb6fa60b3,0x0000000000002322,0x00000bd102ec53e3f,0x0000000000000000,0x00000cb4000000000,0x0000000000000000,0x00000bd4000000000},
+ { 0x000000000000090e,0x00005cc0b29e3cdfb,0x0000000000002ae4,0x00000013c69c18ed8,0x0000000000000000,0x00005ce0000000000,0x0000000000000000,0x00000013c80000000},
+ { 0x000000001f5edf83,0x0024c7f502f0b8d23,0x00000010089e5534,0x00000001b7264fa1b,0x0000000000000000,0x0024d000000000000,0x0000001008000000,0x00000001b74000000},
+ { 0x000000000000000c,0x019383289f53333ff,0x0000000889e80a95,0x00000890ad4fc7ed6,0x0000000000000000,0x01940000000000000,0x0000000000000000,0x00000894000000000},
+ { 0x0000000000000001,0x00000095adf024277,0x0000000000000002,0x0000000001c7e0b61,0x0000000000000000,0x00000095c00000000,0x0000000000000000,0x0000000001c800000},
+ { 0x000000000000001b,0x00000cbd43fb1290b,0x0000000000002cbc,0x0000000a614dddfac,0x0000000000000000,0x00000cc0000000000,0x0000000000000000,0x0000000a640000000},
+ { 0x0000000000000020,0x0007e3062e70694fe,0x000000000000faa1,0x000000000002cc433,0x0000000000000000,0x0007e400000000000,0x000000000000f000,0x000000000002cd000},
+ { 0x0000000000000573,0x0000d18ed8cc930f9,0x0000000000004d18,0x0000002ce50b40512,0x0000000000000000,0x0000d1c0000000000,0x0000000000000000,0x0000002cf00000000},
+ { 0x0000000000000007,0x0006dd6d78933509d,0x000000000002dcfa,0x0000000041c933fae,0x0000000000000000,0x0006de00000000000,0x0000000000000000,0x0000000041e000000},
+ { 0x000000000000004f,0x0380394da44f837d3,0x00000000012c0076,0x00f7fb667adb7dcf0,0x0000000000000000,0x03810000000000000,0x0000000000000000,0x00f80000000000000},
+ { 0x0000000000000015,0x0006310e633bc53d2,0x0000000010a348de,0x00002493f58515721,0x0000000000000000,0x00063200000000000,0x0000000000000000,0x000024a0000000000},
+ { 0x000000002e9b6f5b,0x0040752250d14971e,0x000000a33a7ed779,0x00000f534bbf04eca,0x0000000000000000,0x00408000000000000,0x0000008000000000,0x00000f54000000000},
+ { 0x0000000000093e1b,0x0000090f4e393643c,0x00000000001a3b0c,0x00000000f4d905e39,0x0000000000000000,0x00000910000000000,0x0000000000000000,0x00000000f50000000},
+ { 0x00000000000001af,0x0005df454063c7a14,0x0000000000000407,0x000000966047230e9,0x0000000000000000,0x0005e000000000000,0x0000000000000000,0x00000096800000000},
+ { 0x00000000000007fc,0x000400afc19f9f89d,0x000001e7e9d0992f,0x00000a198243e09d3,0x0000000000000000,0x00040200000000000,0x000001c000000000,0x00000a1c000000000},
+ { 0x000000000000006b,0x001ae01da0e0dfc7a,0x000000000003a0dd,0x0000000000a202033,0x0000000000000000,0x001ae800000000000,0x0000000000000000,0x0000000000a240000},
+ { 0x0000000000000003,0x03ef9d9ee5b24459a,0x0000000f8367008f,0x000003ecf19119b85,0x0000000000000000,0x03f00000000000000,0x0000000000000000,0x000003ed000000000},
+ { 0x0000000000000053,0x0000d9c193e0f9188,0x00000000003d5de6,0x00000000004e5067d,0x0000000000000000,0x0000da00000000000,0x00000000003c0000,0x00000000004e60000},
+ { 0x000000000000001e,0x0113a2bb3c60f9756,0x0000000000109f60,0x000a71f6cc8bff859,0x0000000000000000,0x01140000000000000,0x0000000000000000,0x000a7400000000000},
+ { 0x000000000000000a,0x0667ca1b4b7e1a588,0x00000000000005bf,0x00002a786dce3f49b,0x0000000000000000,0x06680000000000000,0x0000000000000000,0x00002a80000000000},
+ { 0x0000000000000000,0x0bb350a20c3671c94,0x00076980afd72220,0x00cc24cccb1271548,0x0000000000000000,0x0bb40000000000000,0x0004000000000000,0x00cc4000000000000},
+ { 0x000000000000008d,0x000cc2c271fb9a120,0x000005c17259833d,0x00000c2cf3274ff33,0x0000000000000000,0x000cc400000000000,0x000005c000000000,0x00000c30000000000},
+ { 0x0000000000000009,0x00c901877d1b905ed,0x0000000000284ad6,0x000000005b8d6b136,0x0000000000000000,0x00c94000000000000,0x0000000000000000,0x000000005ba000000},
+ { 0x0000000000000003,0x00000361cf2d65c4e,0x000000000000000c,0x000000000001c7b05,0x0000000000000000,0x00000362000000000,0x0000000000000000,0x000000000001c8000},
+ { 0x000000000003e037,0x0004cc451ae8497ff,0x000000d9ad67e83d,0x0000074e43c11cc1f,0x0000000000000000,0x0004ce00000000000,0x000000c000000000,0x00000750000000000},
+ { 0x0000000000014846,0x046fc727e93a75aa6,0x00000000000a83a3,0x000000000035f7887,0x0000000000000000,0x04700000000000000,0x00000000000a0000,0x00000000003600000},
+ { 0x0000000000001167,0x0001bd684a2a760d5,0x000000000000924e,0x00000000003a7327d,0x0000000000000000,0x0001bd80000000000,0x0000000000000000,0x00000000003a80000},
+ { 0x0000000000000000,0x000012626ad1be7d4,0x0000000007b143ae,0x0000000000cf3e12e,0x0000000000000000,0x00001268000000000,0x0000000007b00000,0x0000000000cf40000},
+ { 0x0000000058434962,0x000124d6edfb0ae87,0x00000011c7a7da34,0x000064aa10b09e26e,0x0000000000000000,0x00012500000000000,0x0000000000000000,0x000064c0000000000},
+ { 0x000000000000000d,0x00013cc4bb6b8dff1,0x00000000000926a2,0x00000000000ffdf88,0x0000000000000000,0x00013d00000000000,0x0000000000090000,0x00000000001000000},
+ { 0x0000000000000023,0x00004872eaf325ee9,0x00000000a408141f,0x00000000bfb735d83,0x0000000000000000,0x00004880000000000,0x00000000a4000000,0x00000000bfc000000},
+ { 0x0000000000000024,0x001e304691013a136,0x00000000000000ea,0x0000281f3a0cf2dcd,0x0000000000000000,0x001e3800000000000,0x0000000000000000,0x00002820000000000},
+ { 0x000000000044e264,0x000000044563653fb,0x000000000f81fc6a,0x000000000a48cc635,0x0000000000000000,0x00000004460000000,0x000000000f800000,0x000000000a4c00000},
+ { 0x000000000000000f,0x0000000df866375eb,0x0000000000000019,0x000000000c15a7d0b,0x0000000000000000,0x0000000dfc0000000,0x0000000000000000,0x000000000c1800000},
+ { 0x0000000000000003,0x0001f3e549ef845d9,0x0000000000001511,0x0000170cebcb3dabb,0x0000000000000000,0x0001f400000000000,0x0000000000000000,0x00001710000000000},
+ { 0x0000000000000002,0x00d06ac22ecccbcc1,0x000006fbc1128f55,0x000025a711e0be087,0x0000000000000000,0x00d08000000000000,0x0000060000000000,0x000025b0000000000},
+ { 0x00000000000000d1,0x034cd270cde38a3b8,0x0000008e93ed170a,0x0000050743d193014,0x0000000000000000,0x034d0000000000000,0x0000008000000000,0x00000508000000000},
+ { 0x000000000052ef47,0x0000000f970355b17,0x000000000146959c,0x000000011a919f09a,0x0000000000000000,0x0000000f980000000,0x0000000000000000,0x000000011b0000000},
+ { 0x000000000016e4fa,0x000015e7146af8f66,0x00000000001b6be8,0x0000007551daf9e3e,0x0000000000000000,0x000015e8000000000,0x0000000000000000,0x00000075600000000},
+ { 0x0000000000000144,0x00003509eae66aa8c,0x00000000001a4d3d,0x0000000d805558cad,0x0000000000000000,0x00003510000000000,0x0000000000000000,0x0000000d840000000},
+ { 0x0000000000000004,0x000001b8029cc8fd4,0x0000000000000014,0x00000000000149e98,0x0000000000000000,0x000001b8800000000,0x0000000000000000,0x0000000000014a000},
+ { 0x0000000000018b30,0x0ee028616572ec1e8,0x000000001b66b3d2,0x00000a156cd8a4a95,0x0000000000000000,0x0ee40000000000000,0x0000000000000000,0x00000a18000000000},
+ { 0x0000000000000006,0x0000000686c275b03,0x00000000000076f9,0x0000000000de449be,0x0000000000000000,0x00000006880000000,0x0000000000000000,0x0000000000de80000},
+ { 0x0000000000001f4d,0x059f2fc1a3b0273b0,0x000000000575369b,0x000fe8b53f03ea460,0x0000000000000000,0x05a00000000000000,0x0000000000000000,0x000fec00000000000},
+ { 0x00000000000010ff,0x00000ce9ba551aea3,0x0000000000307455,0x000000004ef1126af,0x0000000000000000,0x00000cec000000000,0x0000000000000000,0x000000004f0000000},
+ { 0x000000000263d99d,0x0004fa90487fc7a8b,0x000000001d5b052d,0x000022e8c213f6c50,0x0000000000000000,0x0004fc00000000000,0x0000000000000000,0x000022f0000000000},
+ { 0x00000000000001be,0x00000159c4c221652,0x0000000000000e12,0x00000008a6593e264,0x0000000000000000,0x0000015a000000000,0x0000000000000000,0x00000008a80000000},
+ { 0x000000000000004f,0x0005f375be3eb65f6,0x00000008f07a3760,0x00000cddbe29b3e25,0x0000000000000000,0x0005f400000000000,0x0000000000000000,0x00000ce0000000000},
+ { 0x000000000000001d,0x00483f87b17ce60d9,0x000000000000072a,0x0000ee8dd82a2bb5c,0x0000000000000000,0x00484000000000000,0x0000000000000000,0x0000eec0000000000},
+ { 0x0000000000000033,0x035557841134e633a,0x000000001adcb53e,0x0000003cde0aceeee,0x0000000000000000,0x03560000000000000,0x0000000000000000,0x0000003ce00000000},
+ { 0x0000000193a57957,0x000d4d7c42b14b51d,0x0000000d9f309cbe,0x0000005080c867cc3,0x0000000000000000,0x000d5000000000000,0x0000000c00000000,0x00000050a00000000},
+ { 0x0000000000009713,0x0000000297276950d,0x000000000211150d,0x00000000797e0dd48,0x0000000000000000,0x00000002980000000,0x0000000002000000,0x00000000798000000},
+ { 0x0000000000000022,0x000000034fdd58589,0x000000000005ac40,0x00000000000a6208e,0x0000000000000000,0x00000003500000000,0x0000000000058000,0x00000000000a64000},
+ { 0x0000000000000028,0x0000001931b7c7256,0x0000000000000035,0x0000000c7a7c54d78,0x0000000000000000,0x00000019380000000,0x0000000000000000,0x0000000c7c0000000},
+ { 0x0000000000000007,0x000cf53862551874e,0x00000001a0bb2a7c,0x0000ea85db0eb4483,0x0000000000000000,0x000cf800000000000,0x0000000000000000,0x0000eac0000000000},
+ { 0x0000000000000003,0x00003d06a3f1dd016,0x0000000000004ad2,0x00000000000009cb8,0x0000000000000000,0x00003d10000000000,0x0000000000004ac0,0x00000000000009cc0},
+ { 0x00000000000054bd,0x00000054f6b9cf0e8,0x0000000000036f0e,0x00000000026c8c6e8,0x0000000000000000,0x00000055000000000,0x0000000000000000,0x00000000026d00000},
+ { 0x0000000000000040,0x000065bd7c8a89e7c,0x0000000054952bf6,0x00000006302948b86,0x0000000000000000,0x000065c0000000000,0x0000000040000000,0x00000006320000000},
+ { 0x000000001f96a0b0,0x004add85f3cf11fb1,0x00000002fb3821a4,0x00001de69c67dc167,0x0000000000000000,0x004ae000000000000,0x0000000000000000,0x00001de8000000000},
+ { 0x0000000000000ae2,0x009c9a7b734da2f71,0x00000000000fbc82,0x000000a574abb4533,0x0000000000000000,0x009cc000000000000,0x0000000000000000,0x000000a5800000000},
+ { 0x0000000000000f57,0x035e374ce3e88cab1,0x000000000017f645,0x0000007149c58ba92,0x0000000000000000,0x035f0000000000000,0x0000000000000000,0x00000071600000000},
+ { 0x0000000000000025,0x000000001101d46bb,0x00000000000004ad,0x00000000000000776,0x0000000000000000,0x00000000110800000,0x00000000000004ad,0x00000000000000776},
+ { 0x0000003820708a1d,0x05b98ae7b127df469,0x000002ff1f0384f6,0x0000054bdefc4dbff,0x0000000000000000,0x05ba0000000000000,0x000002e000000000,0x0000054c000000000},
+ { 0x00000000000001c0,0x037f12804e5e608dc,0x00000000068d34be,0x00001460f354a99db,0x0000000000000000,0x03800000000000000,0x0000000000000000,0x00001468000000000},
+ { 0x000000000000009e,0x0000333d3301eafda,0x0000000000656e3a,0x0000004a1c9733e98,0x0000000000000000,0x00003340000000000,0x0000000000000000,0x0000004a200000000},
+ { 0x0000000000c0d18a,0x0396953cf5109a0d4,0x000000927d0bd12f,0x000001d4bdf82a31f,0x0000000000000000,0x03970000000000000,0x0000009000000000,0x000001d5000000000},
+ { 0x0000000000001e16,0x00e483a87805f0f42,0x00000d63c634c81f,0x00019dee29e576b49,0x0000000000000000,0x00e4c000000000000,0x0000080000000000,0x00019e00000000000},
+ { 0x0000000000000003,0x034f45ced9a25ee4a,0x0000000000000167,0x00000000001c65b93,0x0000000000000000,0x03500000000000000,0x0000000000000000,0x00000000001c68000},
+ { 0x000000000000002d,0x000bf96d4aee546b6,0x00000ca4762c6089,0x0006da5fb6b68cf18,0x0000000000000000,0x000bfc00000000000,0x0000000000000000,0x0006dc00000000000},
+ { 0x0000000000028322,0x0397f00c33ed1c568,0x0000000fcc95ac63,0x0000002bac58322be,0x0000000000000000,0x03980000000000000,0x0000000f00000000,0x0000002bb00000000},
+ { 0x0000000000000000,0x00000fb5f9a6aac0b,0x0000000000000006,0x00000000000137b51,0x0000000000000000,0x00000fb8000000000,0x0000000000000000,0x00000000000138000},
+ { 0x00000000000006bb,0x0091c2fa1eba3333e,0x00005df51f864dd8,0x002720c4be3da1ff7,0x0000000000000000,0x00920000000000000,0x0000000000000000,0x00273000000000000},
+ { 0x0000000000000001,0x00000c7c540e177e0,0x000000000052956c,0x000000000071018dd,0x0000000000000000,0x00000c80000000000,0x0000000000520000,0x00000000007120000},
+ { 0x0000000000016bea,0x00bd586a6d03acde7,0x000000000002e6eb,0x0000000b2cfe5f32b,0x0000000000000000,0x00bd8000000000000,0x0000000000000000,0x0000000b300000000},
+ { 0x0000000000487027,0x08a9e0926b9943386,0x0000a700fe02e219,0x00002eb0683de7df3,0x0000000000000000,0x08ac0000000000000,0x0000a70000000000,0x00002ec0000000000},
+ { 0x000000000285e717,0x000fcc9aca5196b46,0x000000006b17d4b4,0x000000008817db7b4,0x0000000000000000,0x000fd000000000000,0x0000000068000000,0x00000000884000000},
+ { 0x000000000000e588,0x0937d32243c4a6aaa,0x000005dd0230bd52,0x001c658923d83baf1,0x0000000000000000,0x09380000000000000,0x0000000000000000,0x001c6800000000000},
+ { 0x0000000c70d3f1ec,0x0017cb82f4d7fe1e0,0x000033bec9a580b4,0x0000a8a6d9146b8b4,0x0000000000000000,0x0017d000000000000,0x0000300000000000,0x0000a8c0000000000},
+ { 0x0000000000000000,0x07846944bd409ca57,0x000000000000017e,0x01ef0e7c52ef62862,0x0000000000000000,0x07860000000000000,0x0000000000000000,0x01ef8000000000000},
+ { 0x00000000000046ee,0x000224bc4a29c02fa,0x00000000000609e7,0x0000000001d658846,0x0000000000000000,0x00022500000000000,0x0000000000000000,0x0000000001d680000},
+ { 0x00000000000a64f1,0x007becf421f8a83de,0x000000000a0b23a1,0x0000003cc0364e908,0x0000000000000000,0x007c0000000000000,0x0000000000000000,0x0000003cd00000000},
+ { 0x000000000000001a,0x00000001fe7f9f92e,0x0000000000016d71,0x0000000000183057a,0x0000000000000000,0x00000001fe8000000,0x0000000000010000,0x00000000001838000},
+ { 0x0000000000000002,0x0000000000983f767,0x00000000000000c6,0x00000000001c73f41,0x0000000000000000,0x00000000009840000,0x0000000000000000,0x00000000001c78000},
+ { 0x00000000008f828e,0x000002aef74cc4ba5,0x0000000364726111,0x0000023868403f6f1,0x0000000000000000,0x000002af000000000,0x0000000000000000,0x00000239000000000},
+ { 0x0000000003ba2fce,0x000000820bc002354,0x00000000045273c1,0x00000000006faf8ce,0x0000000000000000,0x00000082400000000,0x0000000004520000,0x00000000006fb0000},
+ { 0x0000000000000009,0x0000001446eecc03a,0x0000000000000035,0x0000000000142b3bd,0x0000000000000000,0x00000014480000000,0x0000000000000000,0x00000000001430000},
+ { 0x0000000000000000,0x000000005e9770b9c,0x0000000000611d54,0x00000000347f12ad8,0x0000000000000000,0x000000005ea000000,0x0000000000000000,0x00000000348000000},
+ { 0x00000000000002f3,0x01ebf3fb81366ab5e,0x000000001c739193,0x0000000017ab5e1c7,0x0000000000000000,0x01ec0000000000000,0x000000001c000000,0x0000000017b000000},
+ { 0x0000000000006fe6,0x07b674ce9a6f49bd8,0x00000000000102ef,0x0000000000005505c,0x0000000000000000,0x07b80000000000000,0x0000000000010200,0x00000000000055200},
+ { 0x0000000000000265,0x0212347b05c1eff06,0x00000017c80020b7,0x0006b4441ac0c4f73,0x0000000000000000,0x02130000000000000,0x0000000000000000,0x0006b600000000000},
+ { 0x0000000000000006,0x00000000033e816cd,0x0000000000000091,0x000000000055e283a,0x0000000000000000,0x00000000033f00000,0x0000000000000000,0x00000000005600000},
+ { 0x0000000000002d87,0x000000000bd6a9250,0x000000000002cc0e,0x0000000000010f619,0x0000000000000000,0x000000000bd800000,0x000000000002cc00,0x0000000000010f800},
+ { 0x0000000000000013,0x0000000000321ff6d,0x0000000000008156,0x0000000000000be62,0x0000000000000000,0x00000000003220000,0x0000000000008150,0x0000000000000be70},
+ { 0x0000000000001c02,0x000000e291f73fa43,0x000000651a74cacc,0x00000022488717402,0x0000000000000000,0x000000e2c00000000,0x0000006500000000,0x00000022500000000},
+ { 0x00001670d9b16010,0x0e4b4f871fd5d4831,0x000073b8b415dc13,0x0000b2ee025de0fdf,0x0000000000000000,0x0e4c0000000000000,0x0000700000000000,0x0000b300000000000},
+ { 0x0000000000000003,0x018f43985453dda82,0x00003f93afa2ea4a,0x00d345818d0afe02c,0x0000000000000000,0x018f8000000000000,0x0000000000000000,0x00d38000000000000},
+ { 0x0000000000000006,0x00000000000005170,0x000000000000000e,0x0000000000000003a,0x0000000000000000,0x00000000000005180,0x000000000000000e,0x0000000000000003a},
+ { 0x000000001c4cdac2,0x00007c13c18f785cf,0x0000000657d6305a,0x0000000502959af66,0x0000000000000000,0x00007c20000000000,0x0000000640000000,0x00000005040000000},
+ { 0x000000000000000d,0x00012cd8fead40e60,0x0000000000002a50,0x000000000076c5bdf,0x0000000000000000,0x00012d00000000000,0x0000000000000000,0x000000000076e0000},
+ { 0x00000000000000cf,0x000046c92a63281e8,0x00000000000460cb,0x00000015af4d8768c,0x0000000000000000,0x000046e0000000000,0x0000000000000000,0x00000015b00000000},
+ { 0x0000000000000047,0x00000004c42babd87,0x00000000000005a0,0x000000000008b9f07,0x0000000000000000,0x00000004c60000000,0x0000000000000000,0x000000000008bc000},
+ { 0x00000000000003c8,0x000000d6727f1de09,0x0000000000112151,0x00000000001f0a84d,0x0000000000000000,0x000000d6800000000,0x0000000000110000,0x00000000001f10000},
+ { 0x0000000000000bc7,0x00001fbf7fa9b0507,0x0000000755d5846e,0x0000000359747dabc,0x0000000000000000,0x00001fc0000000000,0x0000000750000000,0x000000035a0000000},
+ { 0x00000000000002ba,0x00006a10c5a6b3c3a,0x00000000539f6e47,0x00000000531f81558,0x0000000000000000,0x00006a20000000000,0x0000000052000000,0x00000000532000000},
+ { 0x000000000000013c,0x000000b046321b47d,0x0000000000016564,0x000000008472594eb,0x0000000000000000,0x000000b0800000000,0x0000000000000000,0x00000000848000000},
+ { 0x0000000000000a90,0x086725e49c9712498,0x0000000000a73ae2,0x0000a2cf237b04df1,0x0000000000000000,0x08680000000000000,0x0000000000000000,0x0000a300000000000},
+ { 0x00000000000000df,0x0000768eba7769078,0x0000000005cfd5a6,0x00000001a8f3c9855,0x0000000000000000,0x000076a0000000000,0x0000000000000000,0x00000001a90000000},
+ { 0x00000000000649b2,0x0094011f72af8bfd8,0x00000000000ed92e,0x000000d2f924a052e,0x0000000000000000,0x00944000000000000,0x0000000000000000,0x000000d3000000000},
+ { 0x00000000c7251675,0x000305e25875b700b,0x0000000c6a9fbbf5,0x0000000233f522796,0x0000000000000000,0x00030600000000000,0x0000000c68000000,0x00000002340000000},
+ { 0x000000000000002c,0x00002abe36587b5a7,0x0000000000009d95,0x000003d45824cd837,0x0000000000000000,0x00002ac0000000000,0x0000000000000000,0x000003d5000000000},
+ { 0x0000000000000002,0x078ec9dfd6072469f,0x0000000000000121,0x000206e34ed979880,0x0000000000000000,0x07900000000000000,0x0000000000000000,0x00020700000000000},
+ { 0x0000000000000702,0x04893d6a3543e9ff5,0x000000000d3565a4,0x02e2364f20cd45e49,0x0000000000000000,0x048a0000000000000,0x0000000000000000,0x02e30000000000000},
+ { 0x000000000000001c,0x003c7a86b2a5113e0,0x000000000000007f,0x0027aec62fa1c225f,0x0000000000000000,0x003c8000000000000,0x0000000000000000,0x0027b000000000000},
+ { 0x0000000000000007,0x001a3f509289497e5,0x000000000003de03,0x000000000003812db,0x0000000000000000,0x001a4000000000000,0x000000000003d000,0x00000000000382000},
+ { 0x00000000f3b2c7ff,0x000aa99e0c1f4fcda,0x00000f5b2d02f38b,0x0008148af3b2e1f35,0x0000000000000000,0x000aac00000000000,0x0000000000000000,0x00081800000000000},
+ { 0x00000061de154be8,0x0172a0879a217bcd0,0x000054f94da35149,0x00016506b37474b65,0x0000000000000000,0x01730000000000000,0x0000500000000000,0x00016580000000000},
+ { 0x0000000000000003,0x000000c49c8f8ad7c,0x0000000000003b19,0x000000000266bc982,0x0000000000000000,0x000000c4c00000000,0x0000000000000000,0x00000000026700000},
+ { 0x0000000000000356,0x0000878389921f6b1,0x0000095c3939681e,0x000015e77887fa5ea,0x0000000000000000,0x000087c0000000000,0x0000090000000000,0x000015e8000000000},
+ { 0x000000000000005c,0x003981aea12d3d786,0x000000000cf0af93,0x000774ebf299620e0,0x0000000000000000,0x00399000000000000,0x0000000000000000,0x00077600000000000},
+ { 0x00000000000009e4,0x00001c5c92943a66e,0x000002c09e7e3a48,0x000003409ac549a88,0x0000000000000000,0x00001c60000000000,0x000002c000000000,0x00000341000000000},
+ { 0x0000000000000c47,0x0001784691ece6fa6,0x00000000003383e8,0x00000e17f1e8e205c,0x0000000000000000,0x00017880000000000,0x0000000000000000,0x00000e18000000000},
+ { 0x0000000000000199,0x000000000001744e8,0x0000000000000336,0x000000000000838e9,0x0000000000000000,0x00000000000174800,0x0000000000000000,0x00000000000083c00},
+ { 0x000000000000e1ec,0x00000001b739efe89,0x00000000000e17f8,0x0000000000446d12a,0x0000000000000000,0x00000001b78000000,0x00000000000e0000,0x00000000004480000},
+ { 0x00000000001c3147,0x044e04db40d576fd7,0x0000a07d28771c4e,0x0070902310111dd2a,0x0000000000000000,0x04500000000000000,0x0000000000000000,0x0070a000000000000},
+ { 0x0000000000000146,0x0002a8e8f6a4be67c,0x000000000013dfda,0x0000000006893f1c9,0x0000000000000000,0x0002a900000000000,0x0000000000000000,0x00000000068a00000},
+ { 0x00009dbda73d55f7,0x07f31a81b077151cf,0x01506c10323fcfa4,0x005f962e506ae49e9,0x0000000000000000,0x07f40000000000000,0x0150000000000000,0x005fa000000000000},
+ { 0x0000000000000003,0x00000016e062850d5,0x0000000000001267,0x0000000000003d46f,0x0000000000000000,0x00000016e80000000,0x0000000000001200,0x0000000000003d500},
+ { 0x0000000000000003,0x000062d193a885d06,0x00000000002ece3e,0x000000001495cd712,0x0000000000000000,0x000062e0000000000,0x0000000000000000,0x00000000149800000},
+ { 0x0000000000000065,0x0715669cf31d0bfa4,0x00000001aa385d75,0x0000000065cd87c06,0x0000000000000000,0x07160000000000000,0x00000001aa000000,0x0000000065e000000},
+ { 0x0000000000000002,0x0000002c701dc06d9,0x0000000000000010,0x0000000000000003b,0x0000000000000000,0x0000002c800000000,0x0000000000000010,0x0000000000000003b},
+ { 0x0000000000005e95,0x0350f6a06128b69b6,0x00000a1529c6ea8b,0x0000064a1724c3dbd,0x0000000000000000,0x03510000000000000,0x00000a0000000000,0x0000064c000000000},
+ { 0x0000000000450153,0x0000c1eb805e7143c,0x00000000bb44d9d1,0x00000002f144cf780,0x0000000000000000,0x0000c200000000000,0x00000000b0000000,0x00000002f20000000},
+ { 0x0000000000000094,0x00000000007fb7153,0x0000000000001d3e,0x00000000000052c76,0x0000000000000000,0x00000000007fc0000,0x0000000000001c00,0x00000000000052e00},
+ { 0x0000000000000ead,0x00000000afacd8b8d,0x000000001f7c0f31,0x0000000014707eb20,0x0000000000000000,0x00000000afc000000,0x000000001f000000,0x00000000147800000},
+ { 0x00000000005159d9,0x0000001b8d12d0cb1,0x0000000002dafce5,0x0000000103064ef1d,0x0000000000000000,0x0000001b900000000,0x0000000000000000,0x00000001038000000},
+ { 0x0000000000018558,0x0000000002b205265,0x000000000273b5d9,0x0000000000c99529c,0x0000000000000000,0x0000000002b300000,0x0000000002700000,0x0000000000c9c0000},
+ { 0x000000000003965b,0x0006c458046343b12,0x0000000a5c0b9b64,0x00000000de4655493,0x0000000000000000,0x0006c600000000000,0x0000000a5c000000,0x00000000de5000000},
+ { 0x0000000001be3c30,0x0000000005c750fad,0x000000000813bc84,0x0000000002626725f,0x0000000001a00000,0x0000000005c800000,0x0000000008100000,0x00000000026280000},
+ { 0x00000000003f6743,0x0000157f9423f5f75,0x0000000002a3d253,0x0000000689135d4c1,0x0000000000000000,0x00001580000000000,0x0000000000000000,0x000000068a0000000},
+ { 0x0000000000000e28,0x001540b4811ce08d2,0x000000000114b7ec,0x0000007945fcc176f,0x0000000000000000,0x00154800000000000,0x0000000000000000,0x00000079600000000},
+ { 0x00000000000f59c6,0x06eca885c3126bd84,0x0000000003e20a7b,0x00000005387038e9a,0x0000000000000000,0x06ee0000000000000,0x0000000000000000,0x000000053a0000000},
+ { 0x0000000000000030,0x00075d742dfff5b03,0x00000000013d4b70,0x0001ed3cd4b4c8854,0x0000000000000000,0x00075e00000000000,0x0000000000000000,0x0001ed80000000000},
+ { 0x0000000000000003,0x097bf17440b1a8eb8,0x0000000020bdd086,0x0000075a522cf132c,0x0000000000000000,0x097c0000000000000,0x0000000000000000,0x0000075c000000000},
+ { 0x0000000001ba1116,0x009648663de793442,0x0019e5916b3a9476,0x000c9d92095df74c5,0x0000000000000000,0x00968000000000000,0x0019c00000000000,0x000ca000000000000},
+ { 0x0000000005e03e8b,0x0023cfcf60f96a781,0x00000a30ea07e4ec,0x00044dc7e1a79adf8,0x0000000000000000,0x0023d000000000000,0x0000000000000000,0x00044e00000000000},
+ { 0x0000000000000009,0x0000000000063b772,0x000000000000000b,0x000000000003a41b1,0x0000000000000000,0x0000000000063c000,0x0000000000000000,0x000000000003a5000},
+ { 0x0000000000061733,0x0069b57fa1817741e,0x0000001bb55eece1,0x00006dfec5ac01f7f,0x0000000000000000,0x0069c000000000000,0x0000000000000000,0x00006e00000000000},
+ { 0x000000000000000b,0x01d9a2e2f4e433397,0x0000000000006ffc,0x000000069fc48ce64,0x0000000000000000,0x01da0000000000000,0x0000000000000000,0x00000006a00000000},
+ { 0x0000000006dd01a3,0x0063c15e6b6275360,0x000007e4f57d89cc,0x00280828cb954b76f,0x0000000000000000,0x0063e000000000000,0x0000000000000000,0x00281000000000000},
+ { 0x0000000000011454,0x000000b454be404d4,0x0000000001b70ded,0x00000012d7127a394,0x0000000000000000,0x000000b4800000000,0x0000000000000000,0x00000012d80000000},
+ { 0x000000000381060e,0x0003c3c097d6590c4,0x00000000adf3ef5d,0x0000000a9f5a4d989,0x0000000000000000,0x0003c400000000000,0x0000000080000000,0x0000000aa00000000},
+ { 0x0000000006ac5278,0x00052dd85da3427ba,0x00000001ac543f9b,0x00000003d17f9737b,0x0000000000000000,0x00052e00000000000,0x00000001a0000000,0x00000003d20000000},
+ { 0x000000000005478f,0x00000c16a6a307933,0x00000000002fb959,0x0000000001812c216,0x0000000000000000,0x00000c18000000000,0x0000000000280000,0x00000000018180000},
+ { 0x0000000000000000,0x000014e561fd1f508,0x0000000000000005,0x000001eb5fadde71b,0x0000000000000000,0x000014e8000000000,0x0000000000000000,0x000001eb800000000},
+ { 0x00000001409b5dc4,0x006453925da484695,0x0000000a2fc9119d,0x00078adf5bc53467d,0x0000000000000000,0x00646000000000000,0x0000000000000000,0x00078c00000000000},
+ { 0x0000000000000003,0x00000276a23dd65b4,0x0000000002e1ff3d,0x0000000007a5b710f,0x0000000000000000,0x00000277000000000,0x0000000002e00000,0x0000000007a600000},
+ { 0x00000000004ed4cb,0x000000680aa71911c,0x00000001e04a61d8,0x00000007efb3ffd5a,0x0000000000000000,0x00000068200000000,0x00000001e0000000,0x00000007f00000000},
+ { 0x00000000000004af,0x0000000011ae7a16a,0x0000000000000bfb,0x000000000104dfd6c,0x0000000000000000,0x0000000011b000000,0x0000000000000000,0x00000000010500000},
+ { 0x00000000000016f4,0x03216ce1dd6883002,0x0000000000f912d8,0x00001f37ad48bc948,0x0000000000000000,0x03220000000000000,0x0000000000000000,0x00001f38000000000},
+ { 0x00000000003a38f6,0x00eb4aaf6ab91ec52,0x0000000001107806,0x0000000001df68653,0x0000000000000000,0x00eb8000000000000,0x0000000001100000,0x0000000001df80000},
+ { 0x0000000000000003,0x044244caf83a11902,0x00000000000000c4,0x0000000000000342c,0x0000000000000000,0x04440000000000000,0x00000000000000c0,0x00000000000003430},
+ { 0x000000000000000c,0x0000000065118c968,0x00000000cf990b7c,0x000000000ead80ec0,0x0000000000000000,0x00000000652000000,0x00000000cf980000,0x000000000eae00000},
+ { 0x00000000001817f7,0x04a5cf14d4c30c758,0x0000f4853f79548a,0x00f15f5584fc0f638,0x0000000000000000,0x04a60000000000000,0x0000000000000000,0x00f18000000000000},
+ { 0x0000000000000002,0x0000000000886ef4d,0x0000000000000003,0x0000000000017e3b6,0x0000000000000000,0x00000000008880000,0x0000000000000000,0x0000000000017e800},
+ { 0x00000003c02bc5db,0x01b1cfbb171c47db3,0x000000c0fac3e640,0x00a5bac261dfc6788,0x0000000000000000,0x01b20000000000000,0x0000000000000000,0x00a5c000000000000},
+ { 0x00000000000006ec,0x01b561861fe0cb997,0x000000000000612e,0x00000000064f57ef4,0x0000000000000000,0x01b58000000000000,0x0000000000000000,0x00000000065000000},
+ { 0x000000000000000d,0x00d7c5e08bcde68b9,0x000000003833878f,0x0000046e63a39c042,0x0000000000000000,0x00d80000000000000,0x0000000000000000,0x00000470000000000},
+ { 0x000000000000002f,0x0005d6b2654a7b6ae,0x0000000000001b40,0x000043c83798e2301,0x0000000000000000,0x0005d800000000000,0x0000000000000000,0x000043e0000000000},
+ { 0x000000182b039bd0,0x00c2486beee51ece3,0x0083c1abf4aa526d,0x00ab786fe391e7052,0x0000000000000000,0x00c28000000000000,0x0080000000000000,0x00ab8000000000000},
+ { 0x000000000000001d,0x0000188b723e81de6,0x000003ae29f8a7c6,0x00000ac88a552c0cf,0x0000000000000000,0x00001890000000000,0x0000038000000000,0x00000acc000000000},
+ { 0x000000000000005c,0x00002ebf78dabf813,0x00000000b8de5d58,0x0000204d1d8c5b8c8,0x0000000000000000,0x00002ec0000000000,0x0000000000000000,0x00002050000000000},
+ { 0x000000000000099e,0x0003291cb656bea7a,0x000000000000539b,0x0000f6cf5441fbed9,0x0000000000000000,0x00032a00000000000,0x0000000000000000,0x0000f700000000000},
+ { 0x00000000000c2b88,0x000082053180fbce1,0x000000074b60d600,0x000000013523c51b6,0x0000000000000000,0x00008240000000000,0x0000000748000000,0x00000001354000000},
+ { 0x000000000003e5c3,0x005c06b6b81f676d8,0x00000000002a1834,0x0000000000af95e0a,0x0000000000000000,0x005c2000000000000,0x0000000000280000,0x0000000000afc0000},
+ { 0x000000000000000d,0x00000552f5ed2e95c,0x00000000000003bd,0x0000000000154a853,0x0000000000000000,0x00000554000000000,0x0000000000000000,0x00000000001550000},
+ { 0x000000000000030a,0x00b1c515c47e1d240,0x0000000000007105,0x000dc687435594304,0x0000000000000000,0x00b20000000000000,0x0000000000000000,0x000dc800000000000},
+ { 0x000000000000002a,0x0003b1007a5a932ef,0x0000000000000116,0x00000000000002152,0x0000000000000000,0x0003b200000000000,0x0000000000000110,0x00000000000002160},
+ { 0x000000000000f2eb,0x000000165e7f605ca,0x000000000007e820,0x0000000000008a08e,0x0000000000000000,0x00000016600000000,0x000000000007e800,0x0000000000008a0c0},
+ { 0x000000000000032b,0x000000dfd6a304e69,0x000000007f70ef88,0x0000000035e790589,0x0000000000000000,0x000000e0000000000,0x000000007f000000,0x0000000035f000000},
+ { 0x0000000000000250,0x0000000006bddcfc5,0x00000000000c0a37,0x0000000000104e3b4,0x0000000000000000,0x0000000006be00000,0x00000000000c0000,0x00000000001050000},
+ { 0x00000000000949ec,0x011d709c18605121f,0x00000ec74b1ce497,0x00b46f53a48888d96,0x0000000000000000,0x011d8000000000000,0x0000000000000000,0x00b48000000000000},
+ { 0x0000000000000cd3,0x0000011f3ed48a31b,0x00000000009df6d6,0x00000009d93757a8e,0x0000000000000000,0x0000011f800000000,0x0000000000000000,0x00000009dc0000000},
+ { 0x0000000000000047,0x0000000086a39f37f,0x00000000000000ac,0x00000000001bb52f7,0x0000000000000000,0x0000000086c000000,0x0000000000000000,0x00000000001bb8000},
+ { 0x0000000000000005,0x0bdb0d1e74fe4d336,0x00000000000003e4,0x0201c687ab7f7503e,0x0000000000000000,0x0bdc0000000000000,0x0000000000000000,0x02020000000000000},
+ { 0x00000000000007cd,0x0085532e419f17997,0x000cd37f1da5b505,0x0074f948bce0dfae7,0x0000000000000000,0x00858000000000000,0x000c000000000000,0x00750000000000000},
+ { 0x000000000000000f,0x000d3895fa40c2996,0x000000000051c386,0x00001dd4e2f3dd3b2,0x0000000000000000,0x000d3c00000000000,0x0000000000000000,0x00001dd8000000000},
+ { 0x0000000000000395,0x0000000b1031e1384,0x0000000018f88a98,0x0000000002eefb5ec,0x0000000000000000,0x0000000b140000000,0x0000000018f80000,0x0000000002ef00000},
+ { 0x00000000000125c1,0x000000c4f64f51b5a,0x000000000005639e,0x00000000087349b74,0x0000000000000000,0x000000c5000000000,0x0000000000000000,0x00000000087400000},
+ { 0x00000000006b5b33,0x01e413ac2462fb6a6,0x00000817a039e0a7,0x00003c6fefd09c542,0x0000000000000000,0x01e48000000000000,0x0000080000000000,0x00003c70000000000},
+ { 0x0000000000000002,0x001ab6a8bba183512,0x0000000000000003,0x0000025f5b9c2af62,0x0000000000000000,0x001ab800000000000,0x0000000000000000,0x00000260000000000},
+ { 0x0000000000000002,0x000102a10d238f176,0x00000003d1e39596,0x0000015d8559758f2,0x0000000000000000,0x00010300000000000,0x0000000000000000,0x0000015e000000000},
+ { 0x000000000000030e,0x000128a387a87b65f,0x0000000000a7fc4a,0x0000000012b3613db,0x0000000000000000,0x00012900000000000,0x0000000000800000,0x0000000012b800000},
+ { 0x0000000000000071,0x000107d19992f43d7,0x000000000000007e,0x00000000001236f5b,0x0000000000000000,0x00010800000000000,0x0000000000000000,0x00000000001238000},
+ { 0x0000003ec05d5d82,0x002942412d436d373,0x000000f8bf0ed16c,0x00042b6254524debd,0x0000000000000000,0x00295000000000000,0x0000000000000000,0x00042c00000000000},
+ { 0x00000000000000e5,0x011e20b8097985077,0x001fa35500dea058,0x0015174d078a0bab2,0x0000000000000000,0x011e8000000000000,0x001f800000000000,0x00151800000000000},
+ { 0x0000000000000032,0x000a54fcab90edef5,0x00000000000001f4,0x0000000000820983f,0x0000000000000000,0x000a5800000000000,0x0000000000000000,0x00000000008240000},
+ { 0x0000018fdb87d313,0x05e7655183b280930,0x002450d4d62c0404,0x00e692058263a9d29,0x0000000000000000,0x05e80000000000000,0x0024000000000000,0x00e6c000000000000},
+ { 0x000000000000023a,0x00000244d32b8b49a,0x000000000000302a,0x0000000041a7ab3be,0x0000000000000000,0x00000245000000000,0x0000000000000000,0x0000000041c000000},
+ { 0x0000000000000000,0x00000000000015f41,0x000000000000001d,0x00000000000000653,0x0000000000000000,0x00000000000015f80,0x000000000000001d,0x00000000000000653},
+ { 0x0000000000000522,0x000affd7d0d7c4e0f,0x000173327daa5071,0x0000497150a7bfb23,0x0000000000000000,0x000b0000000000000,0x0001730000000000,0x00004980000000000},
+ { 0x000000000000b606,0x0ce67dbbf1cb43181,0x00770af539848cbb,0x05dbca43035a59f61,0x0000000000000000,0x0ce80000000000000,0x0060000000000000,0x05dc0000000000000},
+ { 0x0000000000000003,0x000000000009838ca,0x000000000000016f,0x000000000000004df,0x0000000000000000,0x00000000000984000,0x000000000000016f,0x000000000000004df},
+ { 0x0000000000000003,0x000008a1b30ec2381,0x00000000fd24ee28,0x00000605bc24a5e66,0x0000000000000000,0x000008a4000000000,0x0000000000000000,0x00000606000000000},
+ { 0x000000000000000f,0x0000113ac2975b75f,0x00000000000524f3,0x0000000000031096a,0x0000000000000000,0x00001140000000000,0x0000000000052000,0x00000000000311000},
+ { 0x00000000000010be,0x06deb1ad1ef6059e9,0x000000000135df89,0x000000000186f400e,0x0000000000000000,0x06e00000000000000,0x0000000001300000,0x00000000018700000},
+ { 0x0000000000000000,0x000004f2686a87610,0x000000000000c209,0x000000000001adccf,0x0000000000000000,0x000004f4000000000,0x000000000000c000,0x000000000001ae000},
+ { 0x0000000000000000,0x000004d3588187ae8,0x00000000000005a6,0x0000000002715dae1,0x0000000000000000,0x000004d4000000000,0x0000000000000000,0x00000000027200000},
+ { 0x00007af9c91df467,0x011491ae5508b262d,0x0001e75cc71f9d6f,0x00008e9dbdc8a2153,0x0000000000000000,0x01150000000000000,0x0001e60000000000,0x00008ea0000000000},
+ { 0x000000000ea8d07a,0x0a5766c9ffc902ab8,0x00001c69d59c30eb,0x012349c6e50e17bc7,0x0000000000000000,0x0a580000000000000,0x0000000000000000,0x01238000000000000},
+ { 0x0000000000000008,0x002fcc0d66a0229e9,0x000000001ccde517,0x0000000aa92217786,0x0000000000000000,0x002fd000000000000,0x0000000000000000,0x0000000aac0000000},
+ { 0x0000000000045284,0x00006eb3e9979bbc2,0x00000000003b5af4,0x0000000007ac22493,0x0000000000000000,0x00006ec0000000000,0x0000000000200000,0x0000000007ae00000},
+ { 0x00000000000043da,0x00000000796b83cd9,0x000000000000d632,0x00000000012be3820,0x0000000000000000,0x00000000798000000,0x0000000000000000,0x00000000012c00000},
+ { 0x000000000000001b,0x00000000200ffa8ad,0x0000000000300c52,0x000000000ce074ae9,0x0000000000000000,0x00000000201000000,0x0000000000000000,0x000000000ce400000},
+ { 0x00000000012a6ba7,0x0006b4709faf7dcdc,0x00000019f1df0e90,0x0000c83b1fc30c6ef,0x0000000000000000,0x0006b600000000000,0x0000000000000000,0x0000c840000000000},
+ { 0x0000000004c3d53e,0x001347f64e02eaaca,0x00000000066a6455,0x000e3cc064e3fbd32,0x0000000000000000,0x00134800000000000,0x0000000000000000,0x000e4000000000000},
+ { 0x00000000000073fa,0x002942ee37c005226,0x00000000002a005e,0x000000000d9b9d140,0x0000000000000000,0x00295000000000000,0x0000000000000000,0x000000000d9c00000},
+ { 0x0000000000000008,0x00002f1e8ec9075b1,0x000000031d105780,0x000000065afb8ee87,0x0000000000000000,0x00002f20000000000,0x0000000300000000,0x000000065c0000000},
+ { 0x0000000000003597,0x0000051f4c57b6487,0x00000000185ef0b5,0x0000000006df3d96d,0x0000000000000000,0x00000520000000000,0x0000000018400000,0x0000000006e000000},
+ { 0x0000000000000001,0x0000001e93eece747,0x00000000441c7018,0x000000088da32c8c7,0x0000000000000000,0x0000001e980000000,0x0000000040000000,0x00000008900000000},
+ { 0x000000003bdc0d40,0x000001632fd84ee23,0x00000333b39c05d7,0x00000076b19113438,0x0000000000000000,0x00000163800000000,0x0000033200000000,0x00000076c00000000},
+ { 0x000000000000c37f,0x01167074fe75dc100,0x000000069af0ce51,0x00161b1e723dab1ca,0x0000000000000000,0x01168000000000000,0x0000000000000000,0x00162000000000000},
+ { 0x0000000000012902,0x000000e7e5cdee90e,0x000000005beace4b,0x00000000e2f7d4ba9,0x0000000000000000,0x000000e8000000000,0x0000000058000000,0x00000000e30000000},
+ { 0x0000000000000139,0x000731648d765257d,0x00000b83909e5cf5,0x00054cc487b13604f,0x0000000000000000,0x00073200000000000,0x0000000000000000,0x00054e00000000000},
+ { 0x0000000000000003,0x000000000038e173c,0x0000000000000706,0x000000000005d0caf,0x0000000000000000,0x000000000038f0000,0x0000000000000000,0x000000000005d2000},
+ { 0x0000000000000002,0x0002e24fd403ff1fb,0x00000003a687af01,0x000005908614bc737,0x0000000000000000,0x0002e300000000000,0x0000000000000000,0x00000592000000000},
+ { 0x0000000000000034,0x013b696b22d848217,0x00000000000007a3,0x00000000000001460,0x0000000000000000,0x013b8000000000000,0x00000000000007a3,0x00000000000001460},
+ { 0x000000000003a1a7,0x0000002c63758ff0e,0x0000000004414ae9,0x00000004e72e9a034,0x0000000000000000,0x0000002c700000000,0x0000000000000000,0x00000004e80000000},
+ { 0x000000000000002b,0x000000000b7446e11,0x0000000000000c21,0x00000000001ebf90d,0x0000000000000000,0x000000000b7800000,0x0000000000000000,0x00000000001ec0000},
+ { 0x0000000001636e50,0x0003d21cdd54dc23a,0x0019f80f2c2e7f47,0x0002f0da68b23bbe8,0x0000000000000000,0x0003d300000000000,0x0019f80000000000,0x0002f100000000000},
+ { 0x00000000000001f5,0x00ef5f5a775099303,0x000000001b84c575,0x0000081df8bbe4b94,0x0000000000000000,0x00ef8000000000000,0x0000000000000000,0x00000820000000000},
+ { 0x0000000000000142,0x00000005a38681591,0x0000000000008d3e,0x00000000006f08fd7,0x0000000000000000,0x00000005a40000000,0x0000000000000000,0x00000000006f20000},
+ { 0x0000000000014450,0x00001e3908db4d274,0x0000103ef9d54120,0x00000d7b853a08c28,0x0000000000000000,0x00001e40000000000,0x0000100000000000,0x00000d7c000000000},
+ { 0x0000000000000b14,0x000000f0822c04549,0x000000002c5d9d1f,0x0000000028ab21841,0x0000000000000000,0x000000f0c00000000,0x000000002c000000,0x0000000028b000000},
+ { 0x0000000000019d5e,0x0000000ffb4209e93,0x0000000004dec3a6,0x0000000000db061a8,0x0000000000000000,0x0000000ffc0000000,0x0000000004dc0000,0x0000000000db40000},
+ { 0x0000000000183660,0x000ae20790e0da9c1,0x0000000001654995,0x00000000067e8c0e1,0x0000000000000000,0x000ae400000000000,0x0000000001600000,0x00000000068000000},
+ { 0x0000000000000005,0x00000000b44646589,0x0000000000000006,0x000000000000034fc,0x0000000000000000,0x00000000b48000000,0x0000000000000000,0x00000000000003500},
+ { 0x00000000000003fd,0x000000fc74df043ba,0x0000000000034e88,0x0000000000039c3ad,0x0000000000000000,0x000000fc800000000,0x0000000000034000,0x0000000000039d000},
+ { 0x000000000000000e,0x000000051f22712a0,0x0000000000462ef6,0x00000000021a94acb,0x0000000000000000,0x00000005200000000,0x0000000000400000,0x00000000021b00000},
+ { 0x0000000000000007,0x01a46ecab47e652a9,0x00004dfbbe3ca571,0x00000512836707b28,0x0000000000000000,0x01a48000000000000,0x00004dfb00000000,0x00000512900000000},
+ { 0x00000000000000c8,0x065f34f75052ec34d,0x000001e1311ccf0e,0x000000fa6bb4d5052,0x0000000000000000,0x06600000000000000,0x000001e000000000,0x000000fa800000000},
+ { 0x0000000000000389,0x0000013806486230d,0x00000000000111ac,0x00000010b2d2392c3,0x0000000000000000,0x00000138800000000,0x0000000000000000,0x00000010b80000000},
+ { 0x0000000000007f80,0x0000000128bea3ea6,0x0000000000024173,0x000000000001091f9,0x0000000000000000,0x00000001290000000,0x0000000000024000,0x00000000000109400},
+ { 0x0000000000000001,0x00000064f3b06681e,0x000000000000ff12,0x0000000002ffe41ab,0x0000000000000000,0x00000065000000000,0x0000000000000000,0x00000000030000000},
+ { 0x000000024b0f822e,0x0001b7479a2340bca,0x0000000ce595deaf,0x0000a1bdcd05d1186,0x0000000000000000,0x0001b780000000000,0x0000000000000000,0x0000a1c0000000000},
+ { 0x0000000f339289c6,0x00252d8208da1e2f7,0x000002b78c6c68d9,0x000012cfff1f555fd,0x0000000000000000,0x00253000000000000,0x0000028000000000,0x000012d0000000000},
+ { 0x00001202641bc66e,0x0f0d22354ff2c1565,0x0000284fac2588d8,0x001711b23e7820baa,0x0000000000000000,0x0f100000000000000,0x0000000000000000,0x00171800000000000},
+ { 0x0000000000008f8c,0x0002ff675a9e42a69,0x0000017e7c087413,0x000000660db53280b,0x0000000000000000,0x00030000000000000,0x0000017e00000000,0x00000066200000000},
+ { 0x0000000000000001,0x008c88415bb25d08e,0x000000000cb920c9,0x00000002a8122a083,0x0000000000000000,0x008cc000000000000,0x0000000000000000,0x00000002a90000000},
+ { 0x0000002f5d041c30,0x000003edaf1f70a9c,0x0000006616fbe89a,0x0000000df83fdcfd6,0x0000002000000000,0x000003ee000000000,0x0000006600000000,0x0000000dfa0000000},
+ { 0x0000000000000001,0x00000004f3cd57906,0x000000000027a847,0x0000000038a8c6860,0x0000000000000000,0x00000004f40000000,0x0000000000000000,0x0000000038b000000},
+ { 0x000000000000037f,0x00000000000003185,0x00000000000009db,0x00000000000001970,0x0000000000000370,0x00000000000003190,0x00000000000009db,0x00000000000001970},
+ { 0x00000000025348c3,0x0150f5282ec42d001,0x0000f556f142f91f,0x00001494dbc4ab655,0x0000000000000000,0x01510000000000000,0x0000f54000000000,0x00001496000000000},
+ { 0x00000000515f8ed8,0x003b46e854c1c47fb,0x000000360b8bfb9b,0x000003bb3dc8c33f8,0x0000000000000000,0x003b5000000000000,0x0000003000000000,0x000003bc000000000},
+ { 0x0000000000006698,0x0000000200ccce302,0x000000000193b5c1,0x000000000f9f71417,0x0000000000000000,0x00000002010000000,0x0000000001800000,0x000000000fa000000},
+ { 0x0000000000000006,0x000faddb0c4a55e1a,0x0000000000000015,0x000000afc076a8e88,0x0000000000000000,0x000fb000000000000,0x0000000000000000,0x000000b0000000000},
+ { 0x0000000000000020,0x00017d1dc45591ca2,0x000000000000040b,0x00004659ab885e795,0x0000000000000000,0x00017d80000000000,0x0000000000000000,0x00004660000000000},
+ { 0x0000000000000003,0x000085940388cfb99,0x00001aa19635c62e,0x00000d152649fb6fb,0x0000000000000000,0x000085c0000000000,0x00001a8000000000,0x00000d18000000000},
+ { 0x0000000001721d1d,0x000009bcf6f832a7b,0x000010aea28e17f4,0x0000010fd45080bb7,0x0000000000000000,0x000009c0000000000,0x000010aea0000000,0x0000010fd60000000},
+ { 0x000000000069ac75,0x0002b1774aee2908d,0x000000013388c2e1,0x000051abc405d7bcf,0x0000000000000000,0x0002b200000000000,0x0000000000000000,0x000051c0000000000},
+ { 0x00000000000002e8,0x000000096903a3fac,0x00000000000007d6,0x0000000150a14e580,0x0000000000000000,0x000000096c0000000,0x0000000000000000,0x00000001510000000},
+ { 0x0000000000000022,0x000000016956db334,0x00000000002dd57d,0x000000000017ce65b,0x0000000000000000,0x00000001698000000,0x00000000002d8000,0x000000000017d0000},
+ { 0x0000000000000005,0x02faaf865d93486c2,0x00005f3e81d3a710,0x007d1883f8e992014,0x0000000000000000,0x02fb0000000000000,0x0000000000000000,0x007d2000000000000},
+ { 0x0000000000136b14,0x040829d4280ea9fd9,0x000000002c4a967d,0x0005e20877b1e7c41,0x0000000000000000,0x040a0000000000000,0x0000000000000000,0x0005e400000000000},
+ { 0x00000000000157af,0x00027082064864f38,0x00000000010aa59a,0x000000000011a40fe,0x0000000000000000,0x00027100000000000,0x00000000010aa400,0x000000000011a4400},
+ { 0x0000000000000002,0x000000000000001b1,0x0000000000000002,0x0000000000000006f,0x0000000000000002,0x000000000000001b1,0x0000000000000002,0x0000000000000006f},
+ { 0x000000012b23037f,0x00005c448a408f4c2,0x00000071d39eb1f3,0x0000353476838ec83,0x0000000000000000,0x00005c60000000000,0x0000000000000000,0x00003540000000000},
+ { 0x00000000000213fd,0x000b84d3a17ce4f1a,0x0000000000e6ef65,0x0001c44f66adb9a60,0x0000000000000000,0x000b8800000000000,0x0000000000000000,0x0001c480000000000},
+ { 0x0000000000000007,0x00000000d9de13001,0x0000000000075742,0x000000000bf0b695d,0x0000000000000000,0x00000000da0000000,0x0000000000000000,0x000000000bf400000},
+ { 0x0000000000000003,0x057ce7807d3a96f54,0x000000000001a1dc,0x00030ffe200283b30,0x0000000000000000,0x057e0000000000000,0x0000000000000000,0x00031000000000000},
+ { 0x0000000007385b2b,0x00000180251e57551,0x0000000075dfb125,0x0000003cb895bc9b5,0x0000000000000000,0x00000180800000000,0x0000000000000000,0x0000003cc00000000},
+ { 0x0000000000000baf,0x0000000ad7f868858,0x0000000005164f3a,0x0000000000acbca87,0x0000000000000000,0x0000000ad80000000,0x0000000005160000,0x0000000000acc0000},
+ { 0x0000000000006faf,0x00000166d69c8b0a6,0x0000000012b63de6,0x00000001f5900a203,0x0000000000000000,0x00000167000000000,0x0000000010000000,0x00000001f60000000},
+ { 0x0000000000000290,0x0000071c139d0ffe8,0x0000000000136540,0x0000001c7ce5e77af,0x0000000000000000,0x0000071e000000000,0x0000000000000000,0x0000001c800000000},
+ { 0x0000000000039f1d,0x0000174813e8436ee,0x000000000074276f,0x00000036c8c8dd3a8,0x0000000000000000,0x00001750000000000,0x0000000000000000,0x00000036d00000000},
+ { 0x000000000000000e,0x065ac570caee1b1c2,0x0000000003b5a652,0x000000037280f71b2,0x0000000000000000,0x065c0000000000000,0x0000000000000000,0x00000003730000000},
+ { 0x00000000000005c6,0x015d3ee10ac508ed4,0x00000000001e6059,0x0004b4144ec9f7939,0x0000000000000000,0x015d8000000000000,0x0000000000000000,0x0004b600000000000},
+ { 0x0000000000009dac,0x04da32c6bf767bc01,0x00000008886c1d73,0x0006283b23e080e58,0x0000000000000000,0x04dc0000000000000,0x0000000000000000,0x00062a00000000000},
+ { 0x0000000000043469,0x00ba7515a5eeb7a5b,0x000000000030ed62,0x00000000d9b8c71c1,0x0000000000000000,0x00ba8000000000000,0x0000000000000000,0x00000000d9c000000},
+ { 0x0000000000000003,0x00000000000092449,0x000000000000007a,0x00000000000000e6a,0x0000000000000000,0x00000000000092800,0x000000000000007a,0x00000000000000e6a},
+ { 0x00000000010defdd,0x0000000d8865cbe88,0x00000006545656da,0x0000000109421d4ff,0x0000000000000000,0x0000000d8c0000000,0x0000000654000000,0x00000001098000000},
+ { 0x00000000150ef970,0x0a224b57e6068709d,0x00039dbb0917c765,0x0055dbd665eeefc8d,0x0000000000000000,0x0a240000000000000,0x0002000000000000,0x0055e000000000000},
+ { 0x00000000000000be,0x0000000000000343c,0x0000000000001402,0x00000000000002e15,0x00000000000000b0,0x00000000000003440,0x0000000000001400,0x00000000000002e18},
+ { 0x0000000000000031,0x001f1ee5ff6853bd4,0x00000000502589d6,0x00135cd9fd0c4c0eb,0x0000000000000000,0x001f2000000000000,0x0000000000000000,0x00136000000000000},
+ { 0x0000000000000111,0x0019ee4a5eb421395,0x00000000000008c4,0x00000000005fffdc2,0x0000000000000000,0x0019f000000000000,0x0000000000000000,0x00000000006000000},
+ { 0x0000000000000018,0x0001f4f9924de4c17,0x000000000000003e,0x0000000001f9219e3,0x0000000000000000,0x0001f500000000000,0x0000000000000000,0x0000000001f980000},
+ { 0x000000000093e017,0x000000005f3b93a5c,0x00000000124c6920,0x00000000081e4c948,0x0000000000000000,0x000000005f4000000,0x0000000012400000,0x00000000082000000},
+ { 0x0000000000000321,0x0242a5ecf744cd28f,0x0000000a60dec77f,0x001d8958a55f03fa3,0x0000000000000000,0x02430000000000000,0x0000000000000000,0x001d9000000000000},
+ { 0x000000000000004e,0x00000000b61c10a19,0x0000000000002494,0x0000000012223bd55,0x0000000000000000,0x00000000b64000000,0x0000000000000000,0x00000000122800000},
+ { 0x000000000000044c,0x0000000000264f783,0x000000000018cbba,0x0000000000148bc0b,0x0000000000000000,0x00000000002650000,0x0000000000188000,0x00000000001490000},
+ { 0x000000000000000c,0x0001afd8773a29927,0x0000000000288948,0x0000290f0bae318d6,0x0000000000000000,0x0001b000000000000,0x0000000000000000,0x00002910000000000},
+ { 0x0000000000003d1b,0x001dd230afa62da38,0x0000000000033399,0x0000000000164eb8a,0x0000000000000000,0x001dd800000000000,0x0000000000030000,0x00000000001650000},
+ { 0x000000000000240e,0x0000be36a6a881c42,0x000000001a10b372,0x0000000011ce7e2aa,0x0000000000000000,0x0000be40000000000,0x000000001a000000,0x0000000011d000000},
+ { 0x0000000ad59175a5,0x00008db45f6d4be5e,0x0000007a625959ae,0x00000038e648dedbf,0x0000000000000000,0x00008dc0000000000,0x0000007a00000000,0x00000038f00000000},
+ { 0x0000000000000001,0x00001bfc52cf690da,0x0000000004fd072c,0x0000006c666909e51,0x0000000000000000,0x00001c00000000000,0x0000000000000000,0x0000006c800000000},
+ { 0x0000000000000011,0x000ff2d0173be84a6,0x0000000000000018,0x00000000000000064,0x0000000000000000,0x000ff400000000000,0x0000000000000018,0x00000000000000064},
+ { 0x000000000000003b,0x000a77e81aa770923,0x0000000000000c24,0x00000000000074b6d,0x0000000000000000,0x000a7800000000000,0x0000000000000c00,0x00000000000074c00},
+ { 0x00000000307fcd4b,0x0000026123a97bf8c,0x00000016aaf699eb,0x00000013e7d8a2cf1,0x0000000000000000,0x00000262000000000,0x0000001680000000,0x00000013e80000000},
+ { 0x0000000000000009,0x00080073b7f23714e,0x000000000028156c,0x00000001ac14418d0,0x0000000000000000,0x00080400000000000,0x0000000000000000,0x00000001ac8000000},
+ { 0x0000000000000747,0x000fa2bb2d2e44f8d,0x00000000003472ac,0x0000000623bdcc6d7,0x0000000000000000,0x000fa400000000000,0x0000000000000000,0x00000006240000000},
+ { 0x000000037e4ad4a9,0x0f84181c6444b0ca6,0x0000353f7faa0bed,0x0be5a20efa59cca28,0x0000000000000000,0x0f880000000000000,0x0000000000000000,0x0be80000000000000},
+ { 0x000000000000002f,0x002dbfae980f21648,0x00000000000000c8,0x00000000022ce3686,0x0000000000000000,0x002dc000000000000,0x0000000000000000,0x00000000022d00000},
+ { 0x0000000000047685,0x00956f7a81a67820b,0x000000000024ab86,0x000000018a8eb21ee,0x0000000000000000,0x00958000000000000,0x0000000000000000,0x000000018b0000000},
+ { 0x0000000000000008,0x0000000110026101f,0x000000000000000a,0x000000000000011d4,0x0000000000000000,0x00000001108000000,0x0000000000000008,0x000000000000011d8},
+ { 0x00000000000000c5,0x00000ab806c5abb45,0x0000000000002789,0x0000000000061256e,0x0000000000000000,0x00000abc000000000,0x0000000000002000,0x00000000000614000},
+ { 0x00000000000983c3,0x0011ea107361987d3,0x0000000000559368,0x00000000031b119fe,0x0000000000000000,0x0011f000000000000,0x0000000000500000,0x00000000031c00000},
+ { 0x0000000000019b32,0x0006212e58a5acc5d,0x000007e85118a846,0x0003ff6f8e2552855,0x0000000000000000,0x00062200000000000,0x0000000000000000,0x00040000000000000},
+ { 0x0000000000001f09,0x00000000195f20175,0x0000000000545909,0x0000000000644d9b0,0x0000000000000000,0x00000000196000000,0x0000000000540000,0x00000000006460000},
+ { 0x000000000004afe4,0x0390470528c1a0ca9,0x000000ddd5ca671f,0x0000718287dd96b3a,0x0000000000000000,0x03910000000000000,0x0000000000000000,0x000071a0000000000},
+ { 0x0000000000000005,0x00017ee180d452577,0x0000000000bb0e54,0x000004af63961f276,0x0000000000000000,0x00017f00000000000,0x0000000000000000,0x000004b0000000000},
+ { 0x0000000000005129,0x000006c187d7c2cb7,0x000000000d85ebe1,0x0000029b16c5e6ce5,0x0000000000000000,0x000006c2000000000,0x0000000000000000,0x0000029c000000000},
+ { 0x000000000176ef58,0x000000003c7996990,0x000000000752aed9,0x00000000007cede69,0x0000000001000000,0x000000003c8000000,0x000000000752a000,0x00000000007cee000},
+ { 0x0000000000000007,0x0035981d7f80b00a6,0x0000000000000007,0x00000000001670278,0x0000000000000000,0x0035a000000000000,0x0000000000000000,0x00000000001678000},
+ { 0x0000000000000009,0x01e5c7897aae5c3ed,0x00000000000711ca,0x0000000000017d7f7,0x0000000000000000,0x01e60000000000000,0x0000000000071000,0x0000000000017d800},
+ { 0x0000000000000003,0x00096c93bf663eedd,0x000000000000fe93,0x000000090a19e889c,0x0000000000000000,0x00097000000000000,0x0000000000000000,0x000000090c0000000},
+ { 0x00000000000011f6,0x0001cbadad5e7f85d,0x0000000003acf1ef,0x00000007d1718215f,0x0000000000000000,0x0001cc00000000000,0x0000000000000000,0x00000007d20000000},
+ { 0x0000000000000003,0x002bf634bf299dad9,0x00000000000001da,0x000000000000030d3,0x0000000000000000,0x002c0000000000000,0x00000000000001d0,0x000000000000030e0},
+ { 0x00000000000006be,0x0000039d13be29698,0x000000000019b221,0x000000000983d6624,0x0000000000000000,0x0000039e000000000,0x0000000000000000,0x00000000098400000},
+ { 0x0000000000000041,0x0070af63dfc0e0e9f,0x0000000000000052,0x000000a355cc9ea6e,0x0000000000000000,0x0070c000000000000,0x0000000000000000,0x000000a3800000000},
+ { 0x0000000397e5e003,0x000000970a0cecceb,0x00000003d6631f84,0x00000001342f23ecb,0x0000000000000000,0x00000097400000000,0x00000003d4000000,0x00000001344000000},
+ { 0x00000000003f8954,0x00003ddec4ea33791,0x000000000d122020,0x0000003c574da967f,0x0000000000000000,0x00003de0000000000,0x0000000000000000,0x0000003c600000000},
+ { 0x0000000000000005,0x000000000217b56d3,0x0000000000ecf929,0x00000000003510b33,0x0000000000000000,0x00000000021800000,0x0000000000ec0000,0x00000000003520000},
+ { 0x0000000000000002,0x000000d135e98c3fd,0x0000000000001a44,0x0000000354680f264,0x0000000000000000,0x000000d1400000000,0x0000000000000000,0x00000003550000000},
+ { 0x000000000000034f,0x0219c262385e38820,0x00000000ff56b46b,0x0025843f6d24c4952,0x0000000000000000,0x021a0000000000000,0x0000000000000000,0x00259000000000000},
+ { 0x0000000000001ddf,0x000028197636b2854,0x0000000000087057,0x00000000000987775,0x0000000000000000,0x00002820000000000,0x0000000000084000,0x00000000000988000},
+ { 0x000000000000031f,0x00000bdfad5ff050a,0x00000000115cf51b,0x00000000015199a91,0x0000000000000000,0x00000be0000000000,0x00000000115c0000,0x000000000151a0000},
+ { 0x00000000000019a7,0x000413dbadb2d260a,0x0000000007f35d61,0x00000000018121608,0x0000000000000000,0x00041400000000000,0x0000000007f00000,0x00000000018180000},
+ { 0x00000000011589d7,0x0000695ccb1c5ea53,0x0000000fcbc61936,0x0000001b4cb6748d7,0x0000000000000000,0x00006960000000000,0x0000000f80000000,0x0000001b500000000},
+ { 0x0000000006dabe3c,0x00000cced3954060d,0x0000007675320eee,0x000005d86c453eee4,0x0000000000000000,0x00000cd0000000000,0x0000006000000000,0x000005da000000000},
+ { 0x0000000000000002,0x000000056b845e435,0x0000000000f0637b,0x000000012cd5b6a33,0x0000000000000000,0x000000056c0000000,0x0000000000000000,0x000000012d0000000},
+ { 0x000000000026832e,0x01939dd91eaed62b1,0x0000000000d2a51a,0x00000000026ccdfe4,0x0000000000000000,0x01940000000000000,0x0000000000d00000,0x00000000026d00000},
+ { 0x0000000000000106,0x00a89cd16998fe33d,0x000000052ca050cc,0x000023a695c36a4c0,0x0000000000000000,0x00a8c000000000000,0x0000000000000000,0x000023b0000000000},
+ { 0x00000000000006fa,0x0003ec2a63360d767,0x000000000026d811,0x000000000012b898b,0x0000000000000000,0x0003ed00000000000,0x0000000000268000,0x000000000012c0000},
+ { 0x000000000228a35c,0x0000000522cb41f85,0x0000000013550323,0x0000000016dfa0b2d,0x0000000000000000,0x00000005240000000,0x0000000013000000,0x0000000016e000000},
+ { 0x00000079eee95aeb,0x00f5b2d17de9cae86,0x0013aa6963c9e869,0x007920ea701465291,0x0000000000000000,0x00f5c000000000000,0x0012000000000000,0x00794000000000000},
+ { 0x0000000002fa7ab2,0x00000038abeae3105,0x000000066b11af49,0x00000000ec4f57ce6,0x0000000000000000,0x00000038b00000000,0x0000000668000000,0x00000000ec8000000},
+ { 0x00000000000000cf,0x0035c7c5505adfa9e,0x000000000a907df4,0x00007edfec82e11f3,0x0000000000000000,0x0035d000000000000,0x0000000000000000,0x00007ee0000000000},
+ { 0x0000000000007e7d,0x0002574092a356120,0x00000000000cf0fa,0x0000000bc961927f0,0x0000000000000000,0x00025800000000000,0x0000000000000000,0x0000000bcc0000000},
+ { 0x0000000000000053,0x0005fca9103ff2f4c,0x000001f646ddae31,0x00000181c4b0b25cb,0x0000000000000000,0x0005fe00000000000,0x000001f000000000,0x00000182000000000},
+ { 0x0000000000000019,0x000000001d1ff6356,0x00000000000feb86,0x00000000000292507,0x0000000000000000,0x000000001d2000000,0x00000000000fe800,0x00000000000292800},
+ { 0x00000000000003a2,0x000005bdb91477cf1,0x00000000000008ba,0x00000000000000e48,0x0000000000000000,0x000005be000000000,0x00000000000008ba,0x00000000000000e48},
+ { 0x00000000000288a3,0x01027276a4beffd23,0x000000000020ecc5,0x000b145c54496c067,0x0000000000000000,0x01028000000000000,0x0000000000000000,0x000b1800000000000},
+ { 0x0000000000000006,0x063ec6af8b60dbe32,0x000000000000030c,0x00000000000165a17,0x0000000000000000,0x06400000000000000,0x0000000000000000,0x00000000000166000},
+ { 0x0000000000000037,0x00000036f88b84930,0x0000000000000054,0x00000000000000f0e,0x0000000000000000,0x00000037000000000,0x0000000000000054,0x00000000000000f0e},
+ { 0x000000000000c503,0x0004ebf0fa884ca05,0x000000000000ffc7,0x00000000037063788,0x0000000000000000,0x0004ec00000000000,0x0000000000000000,0x00000000037100000},
+ { 0x0000000000000001,0x0000038ea4eba14fc,0x00000000000575a7,0x00000000a4313b516,0x0000000000000000,0x0000038f000000000,0x0000000000000000,0x00000000a44000000},
+ { 0x000000000000000b,0x0289765034939be15,0x0000000000000058,0x00264b2a24fcfea65,0x0000000000000000,0x028a0000000000000,0x0000000000000000,0x00265000000000000},
+ { 0x0000000000000035,0x0010594012b2b17ee,0x0000000002a6930b,0x0000000e15a9f8d80,0x0000000000000000,0x00106000000000000,0x0000000000000000,0x0000000e180000000},
+ { 0x0000000000035625,0x0000000003e06505a,0x0000000000c60f09,0x0000000000d953146,0x0000000000000000,0x0000000003e100000,0x0000000000c40000,0x0000000000d980000},
+ { 0x0000000000001938,0x006f13e47d3c05d3c,0x00000000681adab9,0x000044301f36fffc9,0x0000000000000000,0x006f2000000000000,0x0000000000000000,0x00004440000000000},
+ { 0x0000000000000423,0x000000000001198c2,0x00000000000004d7,0x000000000000064a1,0x0000000000000000,0x0000000000011a000,0x00000000000004c0,0x000000000000064c0},
+ { 0x000000000000e3d1,0x0040a3b2fcb2c1849,0x00000de9a27b132c,0x0000069ec0b0886ab,0x0000000000000000,0x0040c000000000000,0x00000de000000000,0x000006a0000000000},
+ { 0x0000000000000003,0x000000fc0c8e9ce9a,0x000000011743368d,0x00000000815bd1c1a,0x0000000000000000,0x000000fc400000000,0x0000000116000000,0x00000000816000000},
+ { 0x00000000000000f3,0x000000ebbda0444fa,0x0000000007f3946e,0x00000000d1d9860a9,0x0000000000000000,0x000000ebc00000000,0x0000000004000000,0x00000000d20000000},
+ { 0x0000000000000394,0x0000000e08cee45d9,0x00000000000003f5,0x0000000000176a212,0x0000000000000000,0x0000000e0c0000000,0x0000000000000000,0x00000000001770000},
+ { 0x00000000000001d0,0x00000029009a85bfc,0x0000000004c6181f,0x0000000000f5e2867,0x0000000000000000,0x00000029100000000,0x0000000004c40000,0x0000000000f600000},
+ { 0x000000000000003f,0x00000000000079e13,0x00000000000000c7,0x000000000000007b7,0x0000000000000000,0x0000000000007a000,0x00000000000000c7,0x000000000000007b7},
+ { 0x0000000a70213f80,0x000018788370c4d25,0x0000001ad9845cc2,0x00000339f5ff233d1,0x0000000000000000,0x00001880000000000,0x0000001000000000,0x0000033a000000000},
+ { 0x000000000000000b,0x000728982572beccb,0x00000000000dc57a,0x000000000001234e5,0x0000000000000000,0x00072a00000000000,0x00000000000dc400,0x00000000000123600},
+ { 0x0000009230db6db8,0x00bc972d21b96f314,0x00000b652cabe155,0x0000d816f16c17b5c,0x0000000000000000,0x00bcc000000000000,0x0000080000000000,0x0000d840000000000},
+ { 0x00000000000000b2,0x000000000287fc594,0x000000000000593f,0x000000000016cb663,0x0000000000000000,0x00000000028800000,0x0000000000000000,0x000000000016d0000},
+ { 0x000000000000e81e,0x000002818a20424e5,0x000000000011b279,0x000000000051f25eb,0x0000000000000000,0x00000282000000000,0x0000000000100000,0x00000000005200000},
+ { 0x0000000000000006,0x02239f442b8b2938e,0x000000002100335e,0x00000002ce306d3ab,0x0000000000000000,0x02240000000000000,0x0000000020000000,0x00000002cf0000000},
+ { 0x0000020aad127f2e,0x0034ca908109c4123,0x0001bcb4b3cbfe2a,0x000061a422d57d3ac,0x0000000000000000,0x0034d000000000000,0x0001bc0000000000,0x000061c0000000000},
+ { 0x0000000000020852,0x0002cf2d59f9ee66c,0x000000000075ee0d,0x00000c2c876f1b73c,0x0000000000000000,0x0002d000000000000,0x0000000000000000,0x00000c30000000000},
+ { 0x00000000055ff3b3,0x000018791ff1c7b4f,0x00000000f94441a8,0x000000460d082597e,0x0000000000000000,0x00001880000000000,0x0000000000000000,0x00000046200000000},
+ { 0x0000000029eb3b9f,0x075c74c65f57df84c,0x0000178c83f278fc,0x0012a1bf39d5249bb,0x0000000000000000,0x075e0000000000000,0x0000000000000000,0x0012a800000000000},
+ { 0x0000000000000afe,0x00004eba4b305d892,0x00000000003688c4,0x0000000021adb5141,0x0000000000000000,0x00004ec0000000000,0x0000000000000000,0x0000000021b000000},
+ { 0x0000000000000003,0x000ff7eac793b3555,0x0000000000000b4f,0x0006ac4b397773815,0x0000000000000000,0x000ff800000000000,0x0000000000000000,0x0006ae00000000000},
+ { 0x00000000000004dc,0x0000000040925949f,0x00000000000d682d,0x0000000000a181a36,0x0000000000000000,0x0000000040a000000,0x00000000000c0000,0x0000000000a1c0000},
+ { 0x00000000000139cd,0x00000aa8a8ca97b45,0x0000000000ce1489,0x00000000006fcac83,0x0000000000000000,0x00000aac000000000,0x0000000000ce0000,0x00000000006fe0000},
+ { 0x0000000000d048f1,0x000000c4114860e3f,0x00000053ed4af669,0x00000006c40acbb02,0x0000000000000000,0x000000c4400000000,0x00000053e8000000,0x00000006c48000000},
+ { 0x0000000000003d6b,0x00004fdb3ff96d8d1,0x00000048258ceba9,0x00000026c36e63773,0x0000000000000000,0x00004fe0000000000,0x0000004800000000,0x00000026d00000000},
+ { 0x0000000000000001,0x0001b7ca611dd310a,0x0000000006a31d76,0x00000002de6eedb5d,0x0000000000000000,0x0001b800000000000,0x0000000000000000,0x00000002df0000000},
+ { 0x000000000014c125,0x0000c6ef0eb9db91a,0x0000000001f73ada,0x00000029d3bc8fe44,0x0000000000000000,0x0000c700000000000,0x0000000000000000,0x00000029e00000000},
+ { 0x0000000000000003,0x0000001a68a8052c9,0x0000001fc6588abf,0x0000000d767f240fe,0x0000000000000000,0x0000001a700000000,0x0000001fc0000000,0x0000000d780000000},
+ { 0x00000a42d1668564,0x011e36d8c80458573,0x002ad476b33248e7,0x0059e0d76ddec010a,0x0000000000000000,0x011e8000000000000,0x002a000000000000,0x005a0000000000000},
+ { 0x0000000000000018,0x000041a5272eee29f,0x00000000de4dd826,0x00000007578fd0451,0x0000000000000000,0x000041c0000000000,0x00000000c0000000,0x00000007580000000},
+ { 0x00000000000001da,0x01ed56fd043f78458,0x0000002a328cd42b,0x0000019f82a4960d2,0x0000000000000000,0x01ed8000000000000,0x0000002800000000,0x000001a0000000000},
+ { 0x000000000000a191,0x00000004823ff0d00,0x000000000000a85a,0x0000000173a7b7801,0x0000000000000000,0x00000004840000000,0x0000000000000000,0x00000001740000000},
+ { 0x000000000fe87bbb,0x018bf917727da850b,0x0000000092a29561,0x0000404e42d30aacb,0x0000000000000000,0x018c0000000000000,0x0000000000000000,0x00004060000000000},
+ { 0x000000001f7de46b,0x0008a881832eb2415,0x00000012570c7b7c,0x000000362652c5c16,0x0000000000000000,0x0008ac00000000000,0x0000001200000000,0x00000036300000000},
+ { 0x0000000000000001,0x000002c8b20ca2b3c,0x00000000000000e9,0x000000177a895027e,0x0000000000000000,0x000002c9000000000,0x0000000000000000,0x00000017800000000},
+ { 0x0000000000000009,0x000000000dfa11dbc,0x000000000001ba59,0x0000000000001bbed,0x0000000000000000,0x000000000dfc00000,0x000000000001ba59,0x0000000000001bbed},
+ { 0x000000013f674f67,0x00ccb28f85bf2cf75,0x0000002e9fb0a096,0x000000049a4030b82,0x0000000000000000,0x00ccc000000000000,0x0000002e98000000,0x000000049a8000000},
+ { 0x00000000000068a0,0x00053164ce0b738b8,0x00000000200b194f,0x000000013c424ee95,0x0000000000000000,0x00053200000000000,0x0000000020000000,0x000000013c8000000},
+ { 0x0000000000000000,0x00000000000006128,0x00000000000000cc,0x000000000000000e2,0x0000000000000000,0x00000000000006140,0x00000000000000cc,0x000000000000000e2},
+ { 0x00000000000009ba,0x00150bf178deb23d3,0x0000000000109d8a,0x00000001a5d16729b,0x0000000000000000,0x00151000000000000,0x0000000000000000,0x00000001a60000000},
+ { 0x000000000107dcec,0x0007c93c01b5d538b,0x0000000001ac980a,0x0000000748dde7633,0x0000000000000000,0x0007ca00000000000,0x0000000000000000,0x000000074a0000000},
+ { 0x00000096750440d3,0x0029e3d5fb7501c11,0x009bf74a379eaf2e,0x000fd5abfd7ec5c11,0x0000000000000000,0x0029f000000000000,0x009be00000000000,0x000fd600000000000},
+ { 0x00000000000004a5,0x0000013a15271c1d5,0x000000706127b259,0x0000001076066c92c,0x0000000000000000,0x0000013a800000000,0x0000007040000000,0x00000010780000000},
+ { 0x00000000000000ae,0x00008454fb823ce72,0x000000000004c9d8,0x000000022419c7321,0x0000000000000000,0x00008480000000000,0x0000000000000000,0x00000002250000000},
+ { 0x00000000271743ab,0x001139fbb3084553f,0x00000001c0f1c061,0x0000a273d32b07857,0x0000000000000000,0x00114000000000000,0x0000000000000000,0x0000a280000000000},
+ { 0x0000000000000005,0x0000000048bdeaeb9,0x000000000000006c,0x00000000000073859,0x0000000000000000,0x0000000048c000000,0x0000000000000000,0x00000000000073a00},
+ { 0x00000000048f9ae5,0x054f61896e6b4fdfb,0x000000bc46132268,0x0001d16df6b082967,0x0000000000000000,0x05500000000000000,0x0000000000000000,0x0001d180000000000},
+ { 0x0000000000000001,0x000000048c8d7aab5,0x000000000000007b,0x00000000000071886,0x0000000000000000,0x000000048e0000000,0x0000000000000000,0x00000000000071a00},
+ { 0x0000000000002411,0x000952b405b59e86e,0x00000000071d0799,0x0001fc5051566f461,0x0000000000000000,0x00095400000000000,0x0000000000000000,0x0001fc80000000000},
+ { 0x000000000000000b,0x0000665691d91c615,0x0000000000000346,0x0000000000009ae68,0x0000000000000000,0x00006660000000000,0x0000000000000000,0x0000000000009b000},
+ { 0x000000001daf7521,0x00054f866c2541986,0x0000000040a467bb,0x000070e497d2953a2,0x0000000000000000,0x00055000000000000,0x0000000000000000,0x00007100000000000},
+ { 0x0000000000185c5c,0x00006a02e6e6a4805,0x00000001c4b22aea,0x0000000064cae69d8,0x0000000000000000,0x00006a20000000000,0x00000001c4000000,0x0000000064e000000},
+ { 0x0000000000000103,0x00000006f6db76f8a,0x000000003a7ba9e3,0x00000000fcdb046be,0x0000000000000000,0x00000006f80000000,0x0000000038000000,0x00000000fd0000000},
+ { 0x0000000000003fcb,0x000b2c1393463a4d6,0x0000000000009950,0x00000000000545839,0x0000000000000000,0x000b3000000000000,0x0000000000008000,0x00000000000546000},
+ { 0x00000000000026be,0x00cae35d6e02ef189,0x00000000a4f13697,0x00000000476010f0d,0x0000000000000000,0x00cb0000000000000,0x00000000a4000000,0x00000000477000000},
+ { 0x0000000000000007,0x00001d7fd50e7b5ed,0x000000000b76aec6,0x0000000012bd86544,0x0000000000000000,0x00001d80000000000,0x000000000b000000,0x0000000012c000000},
+ { 0x00000000000004fe,0x001e49886e72d11b4,0x00000000000010df,0x0011a2445129d59d7,0x0000000000000000,0x001e5000000000000,0x0000000000000000,0x0011a800000000000},
+ { 0x00000000000d6b6c,0x01edfbebd955c7083,0x003034d0b9a944d3,0x0008eccf950cb1aae,0x0000000000000000,0x01ee0000000000000,0x0030200000000000,0x0008ee00000000000},
+ { 0x0000000000000016,0x00000000563393e7f,0x0000000000050b19,0x0000000000006fd54,0x0000000000000000,0x00000000564000000,0x0000000000050b00,0x0000000000006fd80},
+ { 0x00000000000001fe,0x000000001f27075dc,0x00000000019af8d4,0x0000000000755926c,0x0000000000000000,0x000000001f2800000,0x00000000019a0000,0x00000000007560000},
+ { 0x00000000000049eb,0x0084ad1b3274afaf4,0x000000000002550a,0x000000005fa183c65,0x0000000000000000,0x0084c000000000000,0x0000000000000000,0x000000005fc000000},
+ { 0x0000000000026235,0x00c2c136576cae9c8,0x0000000000fce039,0x00002f12050ffdaa7,0x0000000000000000,0x00c30000000000000,0x0000000000000000,0x00002f20000000000},
+ { 0x0000000000000000,0x003a5721d855e7f4c,0x0000000000e9fe10,0x0000025b8d84375e2,0x0000000000000000,0x003a6000000000000,0x0000000000000000,0x0000025c000000000},
+ { 0x000000000a6b1b42,0x0000628e20e83e874,0x000000002f4ab5b1,0x00000003d9d640cb6,0x0000000000000000,0x000062a0000000000,0x0000000020000000,0x00000003da0000000},
+ { 0x0000000000000005,0x00001d5c46ed68875,0x00000001e676de70,0x000000024ca1b4f40,0x0000000000000000,0x00001d60000000000,0x00000001e0000000,0x000000024d0000000},
+ { 0x0000000000000039,0x0000005394c316e94,0x000000001018b3f7,0x00000013b65d930b5,0x0000000000000000,0x00000053a00000000,0x0000000000000000,0x00000013b80000000},
+ { 0x00000000000001d8,0x000654d41f603b8c5,0x0000000001d5504f,0x00036f254687fc655,0x0000000000000000,0x00065600000000000,0x0000000000000000,0x00037000000000000},
+ { 0x0000000000000001,0x0003f670e4c43d896,0x00000000000074e2,0x0000003e46c4d1dd4,0x0000000000000000,0x0003f700000000000,0x0000000000000000,0x0000003e500000000},
+ { 0x0000000000000476,0x00030f8d56814907c,0x00000bc5dfa9a997,0x000005f2de792ce0e,0x0000000000000000,0x00031000000000000,0x00000bc000000000,0x000005f4000000000},
+ { 0x0000000000000095,0x01808c4ef0820d495,0x0000000000044498,0x0000000000040b1a6,0x0000000000000000,0x01810000000000000,0x0000000000044000,0x0000000000040c000},
+ { 0x0000000000000003,0x00000000000002866,0x000000000000006e,0x00000000000001a7f,0x0000000000000000,0x00000000000002870,0x0000000000000068,0x00000000000001a80},
+ { 0x0000000000e3282e,0x0fd49b37eea1cf9c3,0x00000008468647a6,0x00000000b2c93531e,0x0000000000000000,0x0fd80000000000000,0x0000000846000000,0x00000000b2d000000},
+ { 0x000000000000009c,0x0000008b280400d11,0x0000000000128e1d,0x00000000016daaca8,0x0000000000000000,0x0000008b400000000,0x0000000000100000,0x00000000016e00000},
+ { 0x000000000000000c,0x0727e4cdc8fb8276b,0x0000000000001df1,0x0000009275b5855dd,0x0000000000000000,0x07280000000000000,0x0000000000000000,0x00000092800000000},
+ { 0x0000000000000062,0x00f005725bc870a2f,0x0000000000041c64,0x000058063d6d0c61f,0x0000000000000000,0x00f04000000000000,0x0000000000000000,0x00005820000000000},
+ { 0x00000000000000c0,0x021e33cbda4b6f981,0x00000853219166c6,0x0002b346a0a53d29f,0x0000000000000000,0x021f0000000000000,0x0000000000000000,0x0002b400000000000},
+ { 0x00000000000c2004,0x0c9770e0a9b43ee4f,0x000000000272bffb,0x01ec2c8dd940a58a5,0x0000000000000000,0x0c980000000000000,0x0000000000000000,0x01ec8000000000000},
+ { 0x00000000000125f5,0x004602fa79b6a45ce,0x000000000d8c8a67,0x0000002845da5d094,0x0000000000000000,0x00462000000000000,0x0000000000000000,0x00000028500000000},
+ { 0x0000000000031d93,0x000000f23b466a8a5,0x0000000003d8acd4,0x00000007e4dd2ad85,0x0000000000000000,0x000000f2400000000,0x0000000000000000,0x00000007e60000000},
+ { 0x0000000000000d35,0x011505fef9da29db0,0x0000000000000db8,0x0000000000cc5ba9c,0x0000000000000000,0x01158000000000000,0x0000000000000000,0x0000000000cc80000},
+ { 0x00000000000003fc,0x00000000000076e50,0x00000000000008c0,0x000000000000027af,0x0000000000000200,0x00000000000077000,0x00000000000008c0,0x000000000000027b0},
+ { 0x0000000000000012,0x00000126d1dbb73f4,0x0000000091011ae8,0x000000000cc4e2384,0x0000000000000000,0x00000127000000000,0x0000000091000000,0x000000000cc500000},
+ { 0x00000000000002c6,0x000000000000f54fc,0x00000000000003f8,0x000000000000006dd,0x0000000000000000,0x000000000000f5800,0x00000000000003f8,0x000000000000006dd},
+ { 0x0000000000000324,0x00000c9e7513c7d18,0x00000000000078df,0x000000001f67f974d,0x0000000000000000,0x00000ca0000000000,0x0000000000000000,0x000000001f6800000},
+ { 0x00000000000037f6,0x0002006674cc56bbe,0x0000000000010260,0x0000000002b603b8e,0x0000000000000000,0x00020100000000000,0x0000000000000000,0x0000000002b700000},
+ { 0x000000000000000b,0x0bd5acdd3d78a1f78,0x00000000000066b1,0x00001919c134e49e4,0x0000000000000000,0x0bd80000000000000,0x0000000000000000,0x00001920000000000},
+ { 0x000000000000001c,0x00000000021c54860,0x0000000000002c8c,0x000000000111d8fd7,0x0000000000000000,0x00000000021d00000,0x0000000000000000,0x00000000011200000},
+ { 0x000000000109cafc,0x000000c38a5f4b6fa,0x000000018ee92015,0x0000000238c8ad098,0x0000000000000000,0x000000c3c00000000,0x0000000180000000,0x00000002390000000},
+ { 0x000000000000003c,0x0003561936ef77b51,0x000000000c7e4606,0x000000448a42902c9,0x0000000000000000,0x00035700000000000,0x0000000000000000,0x00000044a00000000},
+ { 0x00000000000000f6,0x0001e8290814af181,0x00000000000011ee,0x000000000000beaaf,0x0000000000000000,0x0001e880000000000,0x0000000000001000,0x000000000000bec00},
+ { 0x000000000000004d,0x000007f23f39c7471,0x000000000000007c,0x00000000000037c21,0x0000000000000000,0x000007f4000000000,0x0000000000000000,0x00000000000037d00},
+ { 0x0000000000006471,0x00821e0591470ec6c,0x00000000001a185e,0x0000005c2c00170af,0x0000000000000000,0x00824000000000000,0x0000000000000000,0x0000005c400000000},
+ { 0x0000000000000005,0x00000a85e8fa67315,0x0000000000000d52,0x00000000274fb2274,0x0000000000000000,0x00000a88000000000,0x0000000000000000,0x00000000275000000},
+ { 0x0000000000000002,0x005114a4bc04cb1b4,0x0000000000cb99e1,0x00000000d5f17533e,0x0000000000000000,0x00512000000000000,0x0000000000000000,0x00000000d60000000},
+ { 0x00000000000001ca,0x03dc51cec9b63d7c9,0x000000000032f2cf,0x000001f31dbe509d5,0x0000000000000000,0x03dd0000000000000,0x0000000000000000,0x000001f3800000000},
+ { 0x0000000000000007,0x000058cb1e0c474eb,0x000000000006e4f3,0x000000db492e3e74e,0x0000000000000000,0x000058e0000000000,0x0000000000000000,0x000000db800000000},
+ { 0x0000000000000004,0x0ca4239772a61d53f,0x00000000a953afaa,0x000000011e51c1c57,0x0000000000000000,0x0ca80000000000000,0x00000000a8000000,0x000000011e8000000},
+ { 0x0000000005aca55c,0x0653ed36cfc6b0932,0x0000000101ca921e,0x0000001d4c00c508f,0x0000000000000000,0x06540000000000000,0x0000000100000000,0x0000001d500000000},
+ { 0x0000000000000019,0x00000034438e257e0,0x00000014982a4d9e,0x00000003ea4fb211d,0x0000000000000000,0x00000034500000000,0x0000001490000000,0x00000003eb0000000},
+ { 0x000000000000000a,0x000009180d5fd06e0,0x0000000000000638,0x0000000040c7e5ffd,0x0000000000000000,0x0000091c000000000,0x0000000000000000,0x0000000040e000000},
+ { 0x000000000000001b,0x00064f154b6b914b0,0x0000000000001d93,0x00004fa4324e94223,0x0000000000000000,0x00065000000000000,0x0000000000000000,0x00004fc0000000000},
+ { 0x0000000000000009,0x0fcf8d842597ed184,0x00000035409cf5ac,0x0000006db1abc9893,0x0000000000000000,0x0fd00000000000000,0x0000003400000000,0x0000006dc00000000},
+ { 0x0000000000000149,0x014f3e7ebebb566c6,0x00000000000042af,0x000000000007aceef,0x0000000000000000,0x014f8000000000000,0x0000000000004000,0x000000000007ae000},
+ { 0x00000000000e1e91,0x0000000f53a49ba7c,0x0000000000191736,0x000000029e2b00aba,0x0000000000000000,0x0000000f540000000,0x0000000000000000,0x000000029f0000000},
+ { 0x0000000000000438,0x0005b28e95180cafc,0x00000c86f99bbd3f,0x0000ee233d099c6ce,0x0000000000000000,0x0005b400000000000,0x00000c0000000000,0x0000ee40000000000},
+ { 0x00000616f5b5d83e,0x006c4186c6180d4e3,0x0000b4162098fa5d,0x00001271478e532d6,0x0000000000000000,0x006c6000000000000,0x0000b40000000000,0x00001272000000000},
+ { 0x0000000000000002,0x00017d79a1b3c2cad,0x0000000000012995,0x00000000000018ffe,0x0000000000000000,0x00017d80000000000,0x0000000000012980,0x00000000000019000},
+ { 0x0000000000360fbe,0x01ad53df227c76782,0x0192da8dd9e1d580,0x0020e318bf7a30642,0x0000000000000000,0x01ad8000000000000,0x0192c00000000000,0x0020e400000000000},
+ { 0x0000000000000013,0x000029043ab9089c3,0x000000007dd00a91,0x0000000014db05cac,0x0000000000000000,0x00002910000000000,0x000000007dc00000,0x0000000014dc00000},
+ { 0x0000000000000125,0x0012359543bf3b161,0x0000000a3234ddd2,0x0000000e767156ef1,0x0000000000000000,0x00123800000000000,0x0000000a00000000,0x0000000e780000000},
+ { 0x0000000000000005,0x00001b7495e06ff00,0x0000000000000007,0x000000002a3bf8139,0x0000000000000000,0x00001b78000000000,0x0000000000000000,0x000000002a4000000},
+ { 0x00000000c1eb3743,0x003b72179295725b6,0x00000092cfda8113,0x000c65971411fae73,0x0000000000000000,0x003b8000000000000,0x0000000000000000,0x000c6800000000000},
+ { 0x0000000000000008,0x00000000000053ef0,0x0000000000001821,0x00000000000003322,0x0000000000000000,0x00000000000054000,0x0000000000001820,0x00000000000003328},
+ { 0x000000000000000e,0x00000000000009a8f,0x0000000000002d57,0x000000000000074c1,0x0000000000000000,0x00000000000009ac0,0x0000000000002d40,0x000000000000074e0},
+ { 0x000000000000057c,0x02de179bff45ba5a8,0x000054e1ee21cd0c,0x00000b902c69e1f8f,0x0000000000000000,0x02df0000000000000,0x000054e000000000,0x00000b92000000000},
+ { 0x0000000000000006,0x000000007fad36236,0x0000000000f27791,0x00000000319667d63,0x0000000000000000,0x000000007fc000000,0x0000000000000000,0x0000000031a000000},
+ { 0x0000000000001857,0x00a3411bfe39c45b0,0x000000007d37c5d9,0x000002210900b3310,0x0000000000000000,0x00a38000000000000,0x0000000000000000,0x00000222000000000},
+ { 0x00000000008f102a,0x0000282c0efe7c3fa,0x000000573787e1bc,0x0000002933405a64d,0x0000000000000000,0x00002830000000000,0x0000005700000000,0x00000029400000000},
+ { 0x000000000001c2b9,0x00a1622063ddeb02e,0x00000000000637b5,0x00000000000cf1b55,0x0000000000000000,0x00a18000000000000,0x0000000000060000,0x00000000000cf4000},
+ { 0x0000000000969a43,0x00000201ecce96260,0x00000005e5521ce4,0x000000006ef91b894,0x0000000000000000,0x00000202000000000,0x00000005e5000000,0x000000006f0000000},
+ { 0x0000000000005606,0x0000072761c71ad0f,0x0000006fe3066af7,0x0000004657a9b8bea,0x0000000000000000,0x00000728000000000,0x0000006f00000000,0x00000046600000000},
+ { 0x0000000000000003,0x08947ffebe1ee790f,0x0000000000394875,0x000008b0b60ff3eb9,0x0000000000000000,0x08980000000000000,0x0000000000000000,0x000008b4000000000},
+ { 0x0000000000002ef7,0x0000000067dab863b,0x00000000003cb822,0x0000000001dfbad6f,0x0000000000000000,0x0000000067e000000,0x0000000000380000,0x0000000001e000000},
+ { 0x000000000003f662,0x0018a3c5d9fe414fc,0x000000000900373b,0x0000000a36798ae0e,0x0000000000000000,0x0018a800000000000,0x0000000000000000,0x0000000a380000000},
+ { 0x000000000026379d,0x000177ecda013ef04,0x000000007bb1f830,0x000000ca148baa67e,0x0000000000000000,0x00017800000000000,0x0000000000000000,0x000000ca400000000},
+ { 0x000000000000015d,0x000062de42e3c6a3a,0x0000000056052c48,0x0000000032cb34eba,0x0000000000000000,0x000062e0000000000,0x0000000056000000,0x0000000032d000000},
+ { 0x0000000000000e02,0x0021c210ae160166d,0x000000000295ce44,0x00000000007fbb2f6,0x0000000000000000,0x0021d000000000000,0x0000000002940000,0x00000000007fc0000},
+ { 0x000000000007729e,0x0000bb693de3ed11a,0x000000002e8dec37,0x0000000d84bbdaf90,0x0000000000000000,0x0000bb80000000000,0x0000000000000000,0x0000000d880000000},
+ { 0x000000000001ee4f,0x00000122e6bc43580,0x0000003bfe327327,0x000000e0f9f3580f3,0x0000000000000000,0x00000123000000000,0x0000003800000000,0x000000e1000000000},
+ { 0x000000000009831a,0x007ac3726e19612fb,0x000000042b6a0eca,0x000000184eb8663e2,0x0000000000000000,0x007ae000000000000,0x0000000400000000,0x00000018500000000},
+ { 0x00000000000005a3,0x00094887537d5664a,0x0000000000073a28,0x00000007dcf7053d9,0x0000000000000000,0x00094c00000000000,0x0000000000000000,0x00000007de0000000},
+ { 0x000000000a107913,0x00c203cf0c6abaec5,0x0011a9c433328452,0x0005d347c90dc5ba0,0x0000000000000000,0x00c24000000000000,0x0011a00000000000,0x0005d400000000000},
+ { 0x000000000004f61b,0x000b733b3ba6ed859,0x00000000005bcbc1,0x00000000000ec00d9,0x0000000000000000,0x000b7400000000000,0x00000000005bc000,0x00000000000ec4000},
+ { 0x0000000000000004,0x00000002c3490d80b,0x0000000007305e59,0x000000001e88c5896,0x0000000000000000,0x00000002c40000000,0x0000000007000000,0x000000001e9000000},
+ { 0x0000000000002c5e,0x00157a1d453c00a0c,0x00000000000036ce,0x000000292fabfc50c,0x0000000000000000,0x00158000000000000,0x0000000000000000,0x00000029300000000},
+ { 0x0000000000000072,0x00f1c26bd94207333,0x0000000000000076,0x0000000000000059d,0x0000000000000000,0x00f20000000000000,0x0000000000000076,0x0000000000000059d},
+ { 0x0000000000000002,0x000000d33de93318a,0x000000000003fd26,0x00000000410116a1a,0x0000000000000000,0x000000d3400000000,0x0000000000000000,0x00000000412000000},
+ { 0x0000000000003543,0x00002f14a61919aa2,0x000000000000872f,0x000000000001c4932,0x0000000000000000,0x00002f20000000000,0x0000000000008000,0x000000000001c5000},
+ { 0x00000000000001df,0x000000000007e1cc3,0x0000000000000726,0x0000000000002028f,0x0000000000000000,0x000000000007e2000,0x0000000000000700,0x00000000000020300},
+ { 0x000000000000001a,0x00080d419b4480431,0x000001bf2e6d806a,0x0001a0646b0e7715a,0x0000000000000000,0x00081000000000000,0x0000000000000000,0x0001a080000000000},
+ { 0x000000000000000c,0x0020121de2f71e473,0x000000000000000f,0x0000000000000067b,0x0000000000000000,0x00202000000000000,0x000000000000000f,0x0000000000000067b},
+ { 0x000000005a81fb64,0x050d45c767aaff1b4,0x00000003810db111,0x0000054182cf44e60,0x0000000000000000,0x050e0000000000000,0x0000000000000000,0x00000542000000000},
+ { 0x0000000000008ddf,0x000007e0fb1ade4d0,0x000000011502695d,0x0000000018170bb3c,0x0000000000000000,0x000007e2000000000,0x0000000115000000,0x00000000181800000},
+ { 0x0000000000000129,0x013b4e7f61e9a473e,0x00000000001b4987,0x00b3b4263f5b2ace5,0x0000000000000000,0x013b8000000000000,0x0000000000000000,0x00b3c000000000000},
+ { 0x0000000000000002,0x00768b8a421d74153,0x0000000000000010,0x000000000002be903,0x0000000000000000,0x0076a000000000000,0x0000000000000000,0x000000000002bf000},
+ { 0x0000000000000012,0x000094d3807b5347f,0x0000000000382899,0x000000002c9e19dd3,0x0000000000000000,0x00009500000000000,0x0000000000000000,0x000000002ca000000},
+ { 0x000000000000007b,0x00000000f495fdbf2,0x000000003f52648c,0x0000000009d425010,0x0000000000000000,0x00000000f4c000000,0x000000003f400000,0x0000000009d600000},
+ { 0x0000000000000001,0x02f700a8960c7e60e,0x000173c77725a420,0x00038b0bb32ca5a9e,0x0000000000000000,0x02f80000000000000,0x0001700000000000,0x00038c00000000000},
+ { 0x00000000000033aa,0x00003d8769c9509bb,0x000000002db0983f,0x00000777782ff8d69,0x0000000000000000,0x00003d90000000000,0x0000000000000000,0x00000778000000000},
+ { 0x000000000000046e,0x00036a82204735eb4,0x0000000000003dd0,0x00016383dab0eae93,0x0000000000000000,0x00036b00000000000,0x0000000000000000,0x00016400000000000},
+ { 0x00000000000560d7,0x0079d61b9d39dbf6c,0x000000000276ee64,0x0000000006ccf8ce6,0x0000000000000000,0x0079e000000000000,0x0000000002600000,0x0000000006ce00000},
+ { 0x0000000000000006,0x0000000000128cdc2,0x000000000000011c,0x000000000000017c1,0x0000000000000000,0x00000000001290000,0x0000000000000118,0x000000000000017c8},
+ { 0x000000000000000a,0x00003e8207b4d38b9,0x000000000000002d,0x000000000000000ab,0x0000000000000000,0x00003e90000000000,0x000000000000002d,0x000000000000000ab},
+ { 0x0000000000000013,0x000f45bfea9f460a8,0x000069761976eff8,0x00000be1ba87858fc,0x0000000000000000,0x000f4800000000000,0x0000696000000000,0x00000be2000000000},
+ { 0x0000000000000003,0x00ffc08126fc105db,0x000000002a305632,0x00000003e3325dcbf,0x0000000000000000,0x01000000000000000,0x0000000020000000,0x00000003e40000000},
+ { 0x0000000047635b13,0x00000de7fb740f1d3,0x000000d015fee08a,0x00000bc8b5b22dda2,0x0000000000000000,0x00000de8000000000,0x000000c000000000,0x00000bcc000000000},
+ { 0x0000000000000005,0x0000a9395211a3667,0x0000023c1a214bef,0x00004cb531e04c343,0x0000000000000000,0x0000a940000000000,0x0000020000000000,0x00004cc0000000000},
+ { 0x000000000352f837,0x0000689ceb891fdec,0x00000002e9ef6cf9,0x000006fab14892b46,0x0000000000000000,0x000068a0000000000,0x0000000000000000,0x000006fc000000000},
+ { 0x000000000000005a,0x01956fd5000701c96,0x0000000000000254,0x0002ed06362b974fa,0x0000000000000000,0x01958000000000000,0x0000000000000000,0x0002ee00000000000},
+ { 0x0000000003b751e3,0x0000a8abacbb4120f,0x00000003991b4a17,0x000000f61e6a6ba38,0x0000000000000000,0x0000a8c0000000000,0x0000000000000000,0x000000f6400000000},
+ { 0x000000000001daa5,0x01cf502132aee619a,0x0000000001e7b384,0x0000005e85097059b,0x0000000000000000,0x01cf8000000000000,0x0000000000000000,0x0000005ea00000000},
+ { 0x000000000000001c,0x0000000addc57d504,0x00000000000001a3,0x000000000000055dc,0x0000000000000000,0x0000000ae00000000,0x00000000000001a0,0x000000000000055e0},
+ { 0x0000000000000015,0x000306b8b400d7f29,0x0000000000038ee5,0x000000001b8bb2dde,0x0000000000000000,0x00030700000000000,0x0000000000000000,0x000000001b9000000},
+ { 0x0000000000000beb,0x0005f011f5563d340,0x00000000000154ef,0x0000000000009869c,0x0000000000000000,0x0005f200000000000,0x0000000000015400,0x00000000000098800},
+ { 0x000000000fd167cc,0x0032b86e15e88b96f,0x00000048ea12edbb,0x000000d676a91abc1,0x0000000000000000,0x0032c000000000000,0x0000004800000000,0x000000d6800000000},
+ { 0x0000000000000009,0x0000007da8cba9511,0x00000000001f4af9,0x0000001085888c547,0x0000000000000000,0x0000007dc00000000,0x0000000000000000,0x00000010880000000},
+ { 0x0000000000000090,0x000000f70e3a843cf,0x000000000052bfc2,0x00000000003fe2e23,0x0000000000000000,0x000000f7400000000,0x0000000000520000,0x00000000003ff0000},
+ { 0x0000000000000018,0x0000db54df270bfc1,0x000000c193fde777,0x0000001c5005ab304,0x0000000000000000,0x0000db80000000000,0x000000c180000000,0x0000001c580000000},
+ { 0x00000000000000cd,0x00000f3bc25e0daaf,0x0000000001164bcb,0x0000000000da3240e,0x0000000000000000,0x00000f3c000000000,0x0000000001140000,0x0000000000da40000},
+ { 0x0000000000000004,0x075dca0cc31e96986,0x0000000000141125,0x000000000b5199602,0x0000000000000000,0x075e0000000000000,0x0000000000000000,0x000000000b5400000},
+ { 0x000000000000bcce,0x000000970fa7683a6,0x0000000000317168,0x00000000003b08663,0x0000000000000000,0x00000097400000000,0x0000000000310000,0x00000000003b10000},
+ { 0x0000000000000063,0x0016ffd1d714753d4,0x0000000000000a51,0x00000000000001cdb,0x0000000000000000,0x00170000000000000,0x0000000000000a50,0x00000000000001ce0},
+ { 0x00000000000154e5,0x00000139789d98599,0x0000000038152109,0x0000000fac573ad3e,0x0000000000000000,0x00000139800000000,0x0000000000000000,0x0000000fb00000000},
+ { 0x0000000000000051,0x00077e15226326add,0x0000002600fd195f,0x0000000d2dff20144,0x0000000000000000,0x00078000000000000,0x0000002600000000,0x0000000d300000000},
+ { 0x00000000000010cc,0x0000008c3bb284734,0x00000000365d6d2b,0x00000000125a92d08,0x0000000000000000,0x0000008c400000000,0x0000000036400000,0x00000000125c00000},
+ { 0x0000000000002aa3,0x0000ac049122be71c,0x0000066f69d75f7d,0x0000007391bd751a9,0x0000000000000000,0x0000ac40000000000,0x0000066f40000000,0x00000073940000000},
+ { 0x00000000000003bd,0x0093c282f63bac44e,0x0000000000032c3b,0x000000153f42cd46c,0x0000000000000000,0x00940000000000000,0x0000000000000000,0x00000015400000000},
+ { 0x0000000000063950,0x0153ece88ca0d7017,0x0000000007d6dc8b,0x0000006942fe838aa,0x0000000000000000,0x01540000000000000,0x0000000000000000,0x00000069600000000},
+ { 0x000000000000002f,0x0002f2f3f48a6bad4,0x000000000000004b,0x0000000000006795f,0x0000000000000000,0x0002f300000000000,0x0000000000000000,0x00000000000067a00},
+ { 0x0000000000017ba8,0x000000117d49288e4,0x0000000000047803,0x00000000049c7f0d0,0x0000000000000000,0x00000011800000000,0x0000000000000000,0x00000000049e00000},
+ { 0x00000000000018b9,0x000ee08256724ae9d,0x00000003ec61ff6d,0x00000000e3b166dba,0x0000000000000000,0x000ee400000000000,0x00000003ec000000,0x00000000e3c000000},
+ { 0x0000000000000000,0x0000000003fe80950,0x0000000000000154,0x00000000000f7815b,0x0000000000000000,0x0000000003ff00000,0x0000000000000000,0x00000000000f7c000},
+ { 0x0000000000000025,0x00318fd7ba45323a9,0x000000000032bccd,0x00000006af4f24b55,0x0000000000000000,0x00319000000000000,0x0000000000000000,0x00000006b00000000},
+ { 0x00000000000008c7,0x003613b9622dbbeca,0x00000000002eac33,0x0001d15cf463864fa,0x0000000000000000,0x00362000000000000,0x0000000000000000,0x0001d180000000000},
+ { 0x0000000000000082,0x0000008d43c099069,0x00000000000000ac,0x000000000000463d1,0x0000000000000000,0x0000008d800000000,0x0000000000000000,0x00000000000046400},
+ { 0x0000000000003930,0x000006284b8416269,0x0000000003076efd,0x00000027ef9394b2f,0x0000000000000000,0x0000062a000000000,0x0000000000000000,0x00000027f00000000},
+ { 0x0002b39ca9963405,0x001f47d103dfb6518,0x0006154553dc22c9,0x0001ada23cb2b0ba3,0x0002800000000000,0x001f4800000000000,0x0006100000000000,0x0001ae00000000000},
+ { 0x0000000000000006,0x08a3152bed5adffc7,0x0000640461013670,0x00001f879613d782e,0x0000000000000000,0x08a40000000000000,0x0000640000000000,0x00001f88000000000},
+ { 0x0000000000010781,0x00197e41ccd34cb63,0x0000ce4340086b25,0x0002939de7a451dd9,0x0000000000000000,0x00198000000000000,0x0000c00000000000,0x00029400000000000},
+ { 0x0000000000000002,0x0005eb5ffbe5c9d59,0x00000000000619ef,0x000008dcf4c7d4ffd,0x0000000000000000,0x0005ec00000000000,0x0000000000000000,0x000008e0000000000},
+ { 0x0000000000000029,0x00002d22aabb09d6b,0x0000000000002873,0x00000c8f3e4d5c19e,0x0000000000000000,0x00002d30000000000,0x0000000000000000,0x00000c90000000000},
+ { 0x00000000085df366,0x000006e457534d0c2,0x00000000b1f4a60c,0x000000278a52d73b5,0x0000000000000000,0x000006e6000000000,0x0000000000000000,0x00000027900000000},
+ { 0x00000000001ed6d0,0x0029a44a6407c1d40,0x00000000492f396e,0x00000b08adf55209b,0x0000000000000000,0x0029b000000000000,0x0000000000000000,0x00000b0c000000000},
+ { 0x00000000162b30a2,0x000d952d605e4c607,0x0002e79c9668ff66,0x0009e89101dd64ff7,0x0000000000000000,0x000d9800000000000,0x0002c00000000000,0x0009ec00000000000},
+ { 0x0000000000000c3d,0x0000185e7154f762a,0x00000000000017c7,0x0000000000025be3f,0x0000000000000000,0x00001860000000000,0x0000000000001000,0x0000000000025c000},
+ { 0x00000000000000a6,0x0000006be137fa361,0x00000000000001a1,0x00000003202647f17,0x0000000000000000,0x0000006c000000000,0x0000000000000000,0x00000003210000000},
+ { 0x0000000000000035,0x00c12f3e5a590d8d2,0x000000000000004b,0x00000000000006160,0x0000000000000000,0x00c14000000000000,0x0000000000000040,0x00000000000006160},
+ { 0x000000000000a132,0x00001c65b554b58ac,0x0000000077c21b64,0x000000491601148d9,0x0000000000000000,0x00001c68000000000,0x0000000000000000,0x00000049200000000},
+ { 0x000000000000001d,0x000ff362504986ea5,0x000000037604a98c,0x0000001a2d86abb4b,0x0000000000000000,0x000ff400000000000,0x0000000300000000,0x0000001a300000000},
+ { 0x00000000000001aa,0x0019a78e805df48c5,0x000000000003eb0e,0x00000000b7a9b1738,0x0000000000000000,0x0019a800000000000,0x0000000000000000,0x00000000b7c000000},
+ { 0x00000000000001d4,0x00000d85ba22acb65,0x00000000004c2fc0,0x00000001a33872daa,0x0000000000000000,0x00000d88000000000,0x0000000000000000,0x00000001a38000000},
+ { 0x00000007e00f6570,0x0160a1f8587684537,0x00001d721d611772,0x0000b5bc5798e3f3e,0x0000000000000000,0x01610000000000000,0x00001c0000000000,0x0000b5c0000000000},
+ { 0x000000000015a725,0x000001a258a8b7272,0x000007c7306d085f,0x00000090dc06c7ef5,0x0000000000000000,0x000001a2800000000,0x000007c700000000,0x00000090e00000000},
+ { 0x0000005c1e2ffb26,0x032e5001bc4d7e710,0x0025ec148ec071e7,0x007a508b7557fbb6c,0x0000000000000000,0x032f0000000000000,0x0024000000000000,0x007a6000000000000},
+ { 0x000000000024a5e1,0x0006152d0e097e852,0x00000006e18b499b,0x000000856da126ebc,0x0000000000000000,0x00061600000000000,0x0000000400000000,0x00000085800000000},
+ { 0x0000000000005f3d,0x001b0b8cb8753e7e4,0x0005dc933eb2e07f,0x000252ceca3e398c7,0x0000000000000000,0x001b1000000000000,0x0005d80000000000,0x00025300000000000},
+ { 0x0000000000078c18,0x006a4ea7a543dae1c,0x0000000014b528de,0x0000000083ef61656,0x0000000000000000,0x006a6000000000000,0x0000000014000000,0x00000000840000000},
+ { 0x0000000000000004,0x00001c2e1760fdc56,0x00000000000075b4,0x0000002834bc5d738,0x0000000000000000,0x00001c30000000000,0x0000000000000000,0x00000028400000000},
+ { 0x0000000000000047,0x00001dce77d86b1e9,0x00000000001a1e9b,0x000001463b4182fc8,0x0000000000000000,0x00001dd0000000000,0x0000000000000000,0x00000146800000000},
+ { 0x0000000000000032,0x00000000f7b575a40,0x000000006faf62c3,0x00000000250c1c703,0x0000000000000000,0x00000000f7c000000,0x000000006f800000,0x00000000251000000},
+ { 0x00000000000471dc,0x000c3897e3186480b,0x00000017f50dc5fc,0x0006eb7962bd172dd,0x0000000000000000,0x000c3c00000000000,0x0000000000000000,0x0006ec00000000000},
+ { 0x00000000000000ba,0x0000000f5e70c7272,0x0000000017ff18fc,0x0000000373a69bc29,0x0000000000000000,0x0000000f600000000,0x0000000010000000,0x00000003740000000},
+ { 0x0000000000000032,0x01236064378c044c3,0x00000000079cf939,0x000003e648400726b,0x0000000000000000,0x01238000000000000,0x0000000000000000,0x000003e7000000000},
+ { 0x000000000002838e,0x0000162fa4e32e786,0x0000000019732bce,0x00000004730b7c80f,0x0000000000000000,0x00001630000000000,0x0000000000000000,0x00000004740000000},
+ { 0x0000000000005f64,0x00ed1f039769a8f61,0x0000000101f83bf6,0x005b6ce663c2d07ec,0x0000000000000000,0x00ed4000000000000,0x0000000000000000,0x005b8000000000000},
+ { 0x0000000000000012,0x00003f0d478b0a9f6,0x000000000b30d616,0x000000002bed06699,0x0000000000000000,0x00003f10000000000,0x000000000b000000,0x000000002bf000000},
+ { 0x000000007d29bb0b,0x029285fad5098fc64,0x00000002f2f3d2ad,0x00000006b88878d5c,0x0000000000000000,0x02930000000000000,0x00000002e0000000,0x00000006ba0000000},
+ { 0x0000000000000000,0x0000099c23ecec7d8,0x0000000000000001,0x00000000000000c05,0x0000000000000000,0x000009a0000000000,0x0000000000000001,0x00000000000000c05},
+ { 0x0000000000000003,0x0000000000b089103,0x0000000000000020,0x000000000004de038,0x0000000000000000,0x0000000000b0c0000,0x0000000000000000,0x000000000004e0000},
+ { 0x00000000000000d9,0x000000000000ded91,0x0000000000002ff1,0x00000000000092cb7,0x0000000000000000,0x000000000000df000,0x0000000000002c00,0x00000000000093000},
+ { 0x000000000000003e,0x0e1cbd07c1d918228,0x00000000003411bc,0x00000007d368ba6cf,0x0000000000000000,0x0e200000000000000,0x0000000000000000,0x00000007d40000000},
+ { 0x000000000000000c,0x0000000009d1fc466,0x000000000cd9c6db,0x0000000003f6d1896,0x0000000000000000,0x0000000009d400000,0x000000000cd00000,0x0000000003f700000},
+ { 0x0000000000000577,0x0090df98d594b296f,0x0000000d169d696b,0x00000002b17abc4ca,0x0000000000000000,0x00910000000000000,0x0000000d10000000,0x00000002b18000000},
+ { 0x0000000000001ac2,0x0000000043a911200,0x0000000000035d1b,0x000000000001f287f,0x0000000000000000,0x0000000043c000000,0x0000000000035800,0x000000000001f3000},
+ { 0x00000000000a5b69,0x0000020374d017629,0x00000000e4777615,0x000000003d5b060db,0x0000000000000000,0x00000204000000000,0x00000000e4000000,0x000000003d6000000},
+ { 0x0000000000000017,0x0000001e4ef9d3f8d,0x00000000e0ee1f46,0x000000004a18d46c2,0x0000000000000000,0x0000001e500000000,0x00000000e0000000,0x000000004a2000000},
+ { 0x0000000000000002,0x00000000060c27a09,0x0000000000000994,0x00000000000000b26,0x0000000000000000,0x00000000060e00000,0x0000000000000994,0x00000000000000b26},
+ { 0x0000000000628fa5,0x03ef5f8fb1a7b04e3,0x0000000001e55452,0x02439db6d01a2cd46,0x0000000000000000,0x03f00000000000000,0x0000000000000000,0x02440000000000000},
+ { 0x0000000000145d50,0x003ccbae59a7f7fec,0x000a0518b6edd3e7,0x0006c859b21b1434b,0x0000000000000000,0x003cd000000000000,0x000a000000000000,0x0006ca00000000000},
+ { 0x0000000000000002,0x0000224aa19f7b33a,0x000000001d4578ac,0x00001474a79eb47fd,0x0000000000000000,0x00002250000000000,0x0000000000000000,0x00001478000000000},
+ { 0x000000000000002f,0x058d5309be8db6dad,0x00013e3b2ddb5823,0x033250f54f104e580,0x0000000000000000,0x058e0000000000000,0x0000000000000000,0x03330000000000000},
+ { 0x0000000000000038,0x0000000002c12435d,0x000000000001a214,0x000000000013504ca,0x0000000000000000,0x0000000002c200000,0x0000000000018000,0x00000000001358000},
+ { 0x0000000000004fe6,0x000000fec6d4a6dba,0x0000000001f3456a,0x0000005c2c397bfc1,0x0000000000000000,0x000000ff000000000,0x0000000000000000,0x0000005c400000000},
+ { 0x0000000000000355,0x000015f95972943a5,0x00000001d7af9bd6,0x000001d208fb71024,0x0000000000000000,0x00001600000000000,0x0000000000000000,0x000001d2800000000},
+ { 0x000000000000856e,0x000034a8c120d830b,0x00000000000c9d44,0x00000069a7bb37ae4,0x0000000000000000,0x000034b0000000000,0x0000000000000000,0x00000069c00000000},
+ { 0x0000000000000000,0x0002f1f547c2adc46,0x0000000000000217,0x00000000000000eb6,0x0000000000000000,0x0002f200000000000,0x0000000000000217,0x00000000000000eb6},
+ { 0x00000000000e4727,0x087238adce8b0dcb2,0x00000000183115f0,0x0000000717c155ce4,0x0000000000000000,0x08740000000000000,0x0000000000000000,0x00000007180000000},
+ { 0x0000000000004eb1,0x004c651a21182adfd,0x0000003064531d0b,0x003bd924ec6c23b6a,0x0000000000000000,0x004c8000000000000,0x0000000000000000,0x003be000000000000},
+ { 0x0000000000000002,0x000da5a30a5602562,0x0000000000000006,0x000000000000c0eff,0x0000000000000000,0x000da800000000000,0x0000000000000000,0x000000000000c1000},
+ { 0x000000000000009d,0x000019d8744b9e666,0x0000000013ef7a48,0x00000014eef971bc0,0x0000000000000000,0x000019e0000000000,0x0000000000000000,0x00000014f00000000},
+ { 0x00000000002cd74b,0x00164dd782b2e1dbc,0x00000000b1942a06,0x0000014b6f2b097e2,0x0000000000000000,0x00165000000000000,0x0000000000000000,0x0000014b800000000},
+ { 0x000000000000d0e8,0x00037f5646623bcc4,0x00000004c249421f,0x00025205478a17579,0x0000000000000000,0x00038000000000000,0x0000000000000000,0x00025300000000000},
+ { 0x00000001e8665244,0x01f84dfa8965c92f0,0x00000004745139ed,0x0006433c5453dec97,0x0000000000000000,0x01f88000000000000,0x0000000000000000,0x00064400000000000},
+ { 0x0000000000000002,0x000018cdd01167a2d,0x000000000ffab3fd,0x00000006b4720432c,0x0000000000000000,0x000018d0000000000,0x0000000000000000,0x00000006b60000000},
+ { 0x00000000026122f2,0x021f080af438ba10c,0x0000000646d4e4d8,0x000000023e1aa63a3,0x0000000000000000,0x02200000000000000,0x0000000640000000,0x000000023e8000000},
+ { 0x000000000000046e,0x00060bb65503f356d,0x0000000000003b7e,0x000007002e749a223,0x0000000000000000,0x00060c00000000000,0x0000000000000000,0x00000702000000000},
+ { 0x0000000000000014,0x0000002e7588a3729,0x000000000388a8b2,0x00000010e1fdb248e,0x0000000000000000,0x0000002e800000000,0x0000000000000000,0x00000010e80000000},
+ { 0x0000000000000003,0x000000000b5b945b3,0x0000000000000025,0x00000000090d3274e,0x0000000000000000,0x000000000b5c00000,0x0000000000000000,0x00000000091000000},
+ { 0x000000000000005b,0x001ea1394cf567335,0x00000000000000a5,0x000000000000250a2,0x0000000000000000,0x001ea800000000000,0x0000000000000000,0x00000000000025100},
+ { 0x0000000000000002,0x001fe072cc3967b6e,0x000000000000074e,0x00000000000003e13,0x0000000000000000,0x001fe800000000000,0x0000000000000740,0x00000000000003e20},
+ { 0x000000000002bcdd,0x01b1b2d03d3d9d05c,0x000000001c279251,0x0000f29e4f80b21e4,0x0000000000000000,0x01b20000000000000,0x0000000000000000,0x0000f2c0000000000},
+ { 0x0000000000000016,0x0059cacc83b893311,0x0000000000001dde,0x0014723d004dadb93,0x0000000000000000,0x0059e000000000000,0x0000000000000000,0x00147800000000000},
+ { 0x0000000000000017,0x000e7e1ddd0ddb0a7,0x00000002cdb4e31b,0x000000048958c5b55,0x0000000000000000,0x000e8000000000000,0x00000002c0000000,0x000000048a0000000},
+ { 0x0000000000000008,0x000f658c9ae23af57,0x0000000bea0ca909,0x00005a881f9ff48fb,0x0000000000000000,0x000f6800000000000,0x0000000000000000,0x00005aa0000000000},
+ { 0x0000000000000014,0x0000010689318aead,0x00000000660159e6,0x0000001e7e604a7c9,0x0000000000000000,0x00000107000000000,0x0000000000000000,0x0000001e800000000},
+ { 0x00000004ffdba255,0x07f85c635220bee90,0x000000056c56da1d,0x0002aaf1ee9e2fe88,0x0000000000000000,0x07fa0000000000000,0x0000000000000000,0x0002ab00000000000},
+ { 0x000000003911632b,0x000000038986f9829,0x00000000fc477c6e,0x000000016566c9094,0x0000000030000000,0x000000038a0000000,0x00000000f8000000,0x00000001658000000},
+ { 0x0000000000000000,0x0000010e5ddd5b7cb,0x00000000000006e4,0x0000000000035398d,0x0000000000000000,0x0000010e800000000,0x0000000000000000,0x00000000000354000},
+ { 0x000000000366928d,0x00eb9db009fba8612,0x0000000008bb3066,0x000000007ee913026,0x0000000000000000,0x00ebc000000000000,0x0000000008000000,0x000000007f0000000},
+ { 0x0000000000000004,0x0016636a08f6c59b9,0x0000000000000038,0x0000000bd10a14ab9,0x0000000000000000,0x00166800000000000,0x0000000000000000,0x0000000bd40000000},
+ { 0x0000000001e4866c,0x006544553594b52e7,0x000000032b8c860c,0x000000095911d82c6,0x0000000000000000,0x00656000000000000,0x0000000300000000,0x000000095c0000000},
+ { 0x0000000000000003,0x00df56c7842167c64,0x00000000000053e8,0x0000000000f9e1235,0x0000000000000000,0x00df8000000000000,0x0000000000000000,0x0000000000fa00000},
+ { 0x0000000000000005,0x00001b69226555494,0x00000107db82d319,0x00000705be120856e,0x0000000000000000,0x00001b70000000000,0x0000010000000000,0x00000706000000000},
+ { 0x0000000000000226,0x0003cf7ba2c096096,0x0000000000000732,0x000000000002ae1f0,0x0000000000000000,0x0003d000000000000,0x0000000000000000,0x000000000002af000},
+ { 0x00000000000006aa,0x005b2bbb54bd73e9f,0x0003d9be44d38f4c,0x0001381ea588fef89,0x0000000000000000,0x005b4000000000000,0x0003d80000000000,0x00013840000000000},
+ { 0x00000000076de662,0x000027a320094ebc0,0x00000010d2da31fd,0x00000bdc545f39648,0x0000000000000000,0x000027b0000000000,0x0000000000000000,0x00000be0000000000},
+ { 0x000000000000014e,0x000e294ab3db1d4e0,0x00073333fcc87c2f,0x00038825d64004deb,0x0000000000000000,0x000e2c00000000000,0x0007300000000000,0x00038900000000000},
+ { 0x0000000000000001,0x00000009344759301,0x0000000000000061,0x000000004dae9bcce,0x0000000000000000,0x00000009380000000,0x0000000000000000,0x000000004dc000000},
+ { 0x00000000006a7392,0x00280add82fe4d1de,0x00009314aa9dd291,0x00061d6fa74533bbe,0x0000000000000000,0x00281000000000000,0x0000800000000000,0x00061e00000000000},
+ { 0x0000000000000000,0x00000000f5ff2bf0c,0x00000000000001ce,0x0000000000001321b,0x0000000000000000,0x00000000f60000000,0x0000000000000180,0x00000000000013280},
+ { 0x0000001e098125e8,0x0005396c914587d7e,0x000000560aa1db07,0x00005a8811ebf69d5,0x0000000000000000,0x00053a00000000000,0x0000000000000000,0x00005aa0000000000},
+ { 0x0000000000000001,0x000000000d85d2bd5,0x000000000001b93f,0x000000000006d3158,0x0000000000000000,0x000000000d8800000,0x000000000001a000,0x000000000006d4000},
+ { 0x0000005bfbf71c8b,0x00209e0433ba94c0b,0x0000743b657849d8,0x0000efbd54cd104d3,0x0000000000000000,0x0020a000000000000,0x0000740000000000,0x0000efc0000000000},
+ { 0x0000000001f7244c,0x0001c8ab0d61d2c03,0x00000000032a13e9,0x000000fe79c1a9f3f,0x0000000000000000,0x0001c900000000000,0x0000000000000000,0x000000fe800000000},
+ { 0x000000000006717d,0x00000197f8b2eef1f,0x000000024f744d28,0x0000008e4c4e06a0d,0x0000000000000000,0x00000198000000000,0x0000000000000000,0x0000008e800000000},
+ { 0x0000000022bbd25f,0x0000cb6dce2e52200,0x000186c1a1c62772,0x00003f47ba4fd0eff,0x0000000000000000,0x0000cb80000000000,0x0001860000000000,0x00003f50000000000},
+ { 0x00000000000003e1,0x029208cacafcb1afb,0x000000000305472b,0x000000000ce52598a,0x0000000000000000,0x02930000000000000,0x0000000003000000,0x000000000ce800000},
+ { 0x0000000000000063,0x0003e6c3e00ef38ca,0x00000000000000a3,0x000000000216efc87,0x0000000000000000,0x0003e700000000000,0x0000000000000000,0x00000000021700000},
+ { 0x0000000000000028,0x00011885e52691068,0x00000000000c1c44,0x00000000038dc0ff9,0x0000000000000000,0x00011900000000000,0x0000000000000000,0x00000000038e00000},
+ { 0x0000000000000023,0x000000024ba77cef2,0x0000000000001f96,0x00000000000014cda,0x0000000000000000,0x000000024c0000000,0x0000000000001f80,0x00000000000014d00},
+ { 0x0000000000000001,0x000000c44ede9bae3,0x000000000000005c,0x0000000000006689f,0x0000000000000000,0x000000c4800000000,0x0000000000000000,0x00000000000066a00},
+ { 0x000000000000002c,0x005f9e0212caa40c8,0x000000000000073a,0x0000000001f2aa14b,0x0000000000000000,0x005fa000000000000,0x0000000000000000,0x0000000001f300000},
+ { 0x0000000000acea4d,0x00000785155c965ed,0x0000000049db65cd,0x00000345af58dd3bb,0x0000000000000000,0x00000786000000000,0x0000000000000000,0x00000346000000000},
+ { 0x00000006300a8f9a,0x02dbfc9002fb66eb2,0x0000031a56074511,0x006445eff2fefcc68,0x0000000000000000,0x02dc0000000000000,0x0000000000000000,0x00646000000000000},
+ { 0x00000000000cc41a,0x000004f1b36d9f96b,0x000000000040cc9a,0x0000000000781016f,0x0000000000000000,0x000004f2000000000,0x0000000000400000,0x00000000007820000},
+ { 0x000000000000000a,0x0000020b65cd41fd4,0x00000000004ced88,0x000000009e154eeb3,0x0000000000000000,0x0000020c000000000,0x0000000000000000,0x000000009e4000000},
+ { 0x0000000008fc18b7,0x00135981c746bd9b1,0x000000006598364a,0x0000013d1fed0dc9a,0x0000000000000000,0x00136000000000000,0x0000000000000000,0x0000013d800000000},
+ { 0x000000000000004b,0x00000015148f7dc91,0x00000006b9b93c0f,0x00000001c3462fb2b,0x0000000000000000,0x00000015180000000,0x00000006b8000000,0x00000001c38000000},
+ { 0x00000000000ced7f,0x017e2e3f19a717f9c,0x00000000009e4910,0x0000000002590edac,0x0000000000000000,0x017e8000000000000,0x0000000000900000,0x00000000025a00000},
+ { 0x000000000083a2f2,0x00000d5d5b499759a,0x000000000347cbb6,0x0000001be133c4b3d,0x0000000000000000,0x00000d60000000000,0x0000000000000000,0x0000001be80000000},
+ { 0x00000000010a910b,0x02b15d3451c9c98ce,0x000000002f79e7d5,0x00013854a4de27cfc,0x0000000000000000,0x02b20000000000000,0x0000000000000000,0x00013880000000000},
+ { 0x00000000000010b0,0x006f9b1dcd6456171,0x00000000000855f3,0x00000000005e9728d,0x0000000000000000,0x006fa000000000000,0x0000000000080000,0x00000000005ea0000},
+ { 0x0000000000000db9,0x00000000fb247c051,0x0000000000007d17,0x000000000159e67e4,0x0000000000000000,0x00000000fb4000000,0x0000000000000000,0x00000000015a00000},
+ { 0x00000000002cb4b4,0x058cc91f340e710bd,0x000000000e8f26fc,0x000000e3ea8cf64f6,0x0000000000000000,0x058e0000000000000,0x0000000000000000,0x000000e4000000000},
+ { 0x000000109501d4ec,0x00006e9e32e0e11d4,0x0000018d2b578dfa,0x000017583c8cd345f,0x0000000000000000,0x00006ea0000000000,0x0000018000000000,0x00001760000000000},
+ { 0x0000000000001808,0x000dff91c2c2b096d,0x00000002dc1de2c6,0x0002db402ea00f5e2,0x0000000000000000,0x000e0000000000000,0x0000000000000000,0x0002dc00000000000},
+ { 0x0000000000000112,0x000856e6c0794f3a4,0x00000000000002fb,0x000178d9fcd5061b0,0x0000000000000000,0x00085800000000000,0x0000000000000000,0x00017900000000000},
+ { 0x00000000000000ab,0x0005157494c96ad89,0x0000001c15a3f3af,0x0000006b6bd6e5313,0x0000000000000000,0x00051600000000000,0x0000001c00000000,0x0000006b800000000},
+ { 0x000000000000ff26,0x0000fb151259db711,0x000001abedff82bc,0x000030fe56e16de21,0x0000000000000000,0x0000fb40000000000,0x0000010000000000,0x00003100000000000},
+ { 0x000000000000ed22,0x000020b22158dee89,0x0000001e3660f111,0x00000e0aba6610133,0x0000000000000000,0x000020c0000000000,0x0000000000000000,0x00000e0c000000000},
+ { 0x0000000000000017,0x00000004677608c8a,0x0000000000000dd1,0x000000000001e91ff,0x0000000000000000,0x00000004680000000,0x0000000000000800,0x000000000001e9800},
+ { 0x00000000000099d2,0x00bea9fed84335868,0x000000000002064f,0x000000000000342d3,0x0000000000000000,0x00bec000000000000,0x0000000000020600,0x00000000000034300},
+ { 0x00000000000000b9,0x000059fbaec5bd678,0x0000000000000846,0x000001e56503a465d,0x0000000000000000,0x00005a00000000000,0x0000000000000000,0x000001e5800000000},
+ { 0x0000000000000018,0x01c06039f15d1625f,0x000000000000180f,0x000000980cc161b0a,0x0000000000000000,0x01c08000000000000,0x0000000000000000,0x00000098400000000},
+ { 0x0000000000019028,0x0009c0e1abe3a1052,0x0000000000918b78,0x000000003e7e80bbd,0x0000000000000000,0x0009c400000000000,0x0000000000000000,0x000000003e8000000},
+ { 0x000000000000a712,0x00006d1b0fd4a1dbc,0x0000000028ad8f49,0x000007e11cf77e14e,0x0000000000000000,0x00006d20000000000,0x0000000000000000,0x000007e2000000000},
+ { 0x0000000000000000,0x02136f8cb234f777f,0x0000000000005582,0x0000000000ad8af9d,0x0000000000000000,0x02140000000000000,0x0000000000000000,0x0000000000adc0000},
+ { 0x0000000000000000,0x000f7e6d0d805114c,0x000000000000072f,0x000000000c6a5a5fb,0x0000000000000000,0x000f8000000000000,0x0000000000000000,0x000000000c6c00000},
+ { 0x0000000000000337,0x0000066a29e33a623,0x000000000001046f,0x000000002a26ec21a,0x0000000000000000,0x0000066c000000000,0x0000000000000000,0x000000002a3000000},
+ { 0x0000000000000000,0x000dcd24e90edaedd,0x000000000147dff9,0x00001ccc18e368659,0x0000000000000000,0x000dd000000000000,0x0000000000000000,0x00001cd0000000000},
+ { 0x0000000000001f7d,0x000000000006b94a4,0x00000000000757e5,0x0000000000019bdcc,0x0000000000000000,0x000000000006ba000,0x0000000000075000,0x0000000000019c000},
+ { 0x0000000000000000,0x0000000041fdae070,0x0000000000000003,0x00000000000490504,0x0000000000000000,0x00000000420000000,0x0000000000000000,0x00000000000492000},
+ { 0x000000000000006c,0x000000089b5314cb8,0x0000000000001514,0x0000000000000db67,0x0000000000000000,0x000000089c0000000,0x0000000000001500,0x0000000000000db80},
+ { 0x000000d8eabe5d84,0x00306e895f662c7ee,0x00001e101b625d4b,0x002acc6e316a3c70b,0x0000000000000000,0x00307000000000000,0x0000000000000000,0x002ad000000000000},
+ { 0x0000000000121b3a,0x0001357dd17b6cccb,0x00000007e1069c5e,0x0000808f288391123,0x0000000000000000,0x00013580000000000,0x0000000000000000,0x000080c0000000000},
+ { 0x0000000000000003,0x000000000023d83e3,0x000000000000070f,0x000000000000f1386,0x0000000000000000,0x000000000023e0000,0x0000000000000400,0x000000000000f1400},
+ { 0x0000000000000007,0x03200e8b350389b9f,0x00000000000000e3,0x0000000001baae88c,0x0000000000000000,0x03210000000000000,0x0000000000000000,0x0000000001bb00000},
+ { 0x000000000003bbef,0x02676bc610f608635,0x0052e5a92e2f69d5,0x00f74e5fc20d70b54,0x0000000000000000,0x02680000000000000,0x0050000000000000,0x00f78000000000000},
+ { 0x000000000000f77c,0x00457def87c5d2e7a,0x000000000006aabe,0x000000000036848af,0x0000000000000000,0x00458000000000000,0x0000000000060000,0x00000000003690000},
+ { 0x00000000000001fa,0x0213a6c617f9fcf31,0x000000000014250d,0x001c3507cba9cb5f2,0x0000000000000000,0x02140000000000000,0x0000000000000000,0x001c3800000000000},
+ { 0x000000007d13ae5e,0x001689d8e2aa32adb,0x0000000131955018,0x00000b05e036ad438,0x0000000000000000,0x00169000000000000,0x0000000000000000,0x00000b08000000000},
+ { 0x000000000000004c,0x000000978cb4e3779,0x00000000598f8e5d,0x00000000224c5ec47,0x0000000000000000,0x00000097c00000000,0x0000000059800000,0x00000000225000000},
+ { 0x000458c2d8634fa4,0x00ec90a081d5a2cef,0x00069a16f3f14f20,0x000392fe50ea1d3f9,0x0004000000000000,0x00ecc000000000000,0x0006900000000000,0x00039300000000000},
+ { 0x0000000000000296,0x001b7bc9591139a4d,0x000000000000040c,0x000000000027306e8,0x0000000000000000,0x001b8000000000000,0x0000000000000000,0x00000000002740000},
+ { 0x00000014f0f9f948,0x0050db3ed33d53101,0x000000c947bd1c0f,0x000003105c3cee9c2,0x0000000000000000,0x0050e000000000000,0x000000c000000000,0x00000311000000000},
+ { 0x0000003a27a2eeb1,0x01b185faa760d8ac1,0x0000ccc5612eb7d8,0x00258b3ab05507d3f,0x0000000000000000,0x01b20000000000000,0x0000000000000000,0x00259000000000000},
+ { 0x0000000000000000,0x005d404e9118078b9,0x000000000000021b,0x000000000000003ea,0x0000000000000000,0x005d6000000000000,0x000000000000021b,0x000000000000003ea},
+ { 0x0000000000000017,0x004befc7602350d13,0x0000000bdc4fae51,0x00000000df3d2d954,0x0000000000000000,0x004c0000000000000,0x0000000bdc000000,0x00000000df4000000},
+ { 0x000000000000000d,0x00c4b70135cda4bf5,0x00000001285cd224,0x001003d18c8ae364c,0x0000000000000000,0x00c4c000000000000,0x0000000000000000,0x00100800000000000},
+ { 0x00000000000029e9,0x01d45baad4227290d,0x00000002637dff2e,0x004f9420eeeb9b4a9,0x0000000000000000,0x01d48000000000000,0x0000000000000000,0x004fa000000000000},
+ { 0x0000000000000000,0x004389143c086b3c9,0x0000000000000001,0x00000000002a34a10,0x0000000000000000,0x0043a000000000000,0x0000000000000000,0x00000000002a40000},
+ { 0x0000000000000002,0x000002562b9b01de4,0x0000000456cf91c8,0x0000000fd5b686e27,0x0000000000000000,0x00000257000000000,0x0000000440000000,0x0000000fd80000000},
+ { 0x0000000000007f17,0x01d26d42475463323,0x00000000005b0b46,0x0000635aa88cd9104,0x0000000000000000,0x01d28000000000000,0x0000000000000000,0x00006360000000000},
+ { 0x0000000000000002,0x00001fd63b4e23350,0x0000000000000019,0x0000000000000001e,0x0000000000000000,0x00001fd8000000000,0x0000000000000019,0x0000000000000001e},
+ { 0x0000000000000002,0x00000000007e34a20,0x000000000000005a,0x000000000003bb3cc,0x0000000000000000,0x00000000007e40000,0x0000000000000000,0x000000000003bc000},
+ { 0x0000000000002609,0x000002f972b2fcb04,0x00000000af0e5c69,0x000000014907de937,0x0000000000000000,0x000002fa000000000,0x00000000a8000000,0x00000001498000000},
+ { 0x000000000000000f,0x00000000134af8320,0x000000000000ec5a,0x000000000fa70486b,0x0000000000000000,0x00000000135000000,0x0000000000000000,0x000000000fa800000},
+ { 0x0000000000064c80,0x0000041bdc82fe1b7,0x00000000000c856b,0x0000006b1f04a1de7,0x0000000000000000,0x0000041c000000000,0x0000000000000000,0x0000006b200000000},
+ { 0x0000000000000023,0x0000016e89d844c37,0x0000000090354459,0x0000001fb32909876,0x0000000000000000,0x0000016f000000000,0x0000000080000000,0x0000001fb80000000},
+ { 0x0000000000000865,0x07a3f85e196e679a9,0x00000000009c4a57,0x00000000001839eb4,0x0000000000000000,0x07a40000000000000,0x00000000009c4000,0x0000000000183c000},
+ { 0x0000000000000003,0x00028a2098c0f0f21,0x000000000000001e,0x000002bdaba26f36f,0x0000000000000000,0x00028b00000000000,0x0000000000000000,0x000002be000000000},
+ { 0x000000000000619d,0x0003227a61830ba13,0x000000001184fb88,0x00000000f6dff54f2,0x0000000000000000,0x00032300000000000,0x0000000010000000,0x00000000f70000000},
+ { 0x0000000000000103,0x000020a8d2669be8b,0x0000000005d72247,0x000004cdea2df923b,0x0000000000000000,0x000020b0000000000,0x0000000000000000,0x000004ce000000000},
+ { 0x0000000000000004,0x00007bb6b71d76a14,0x000000000000597c,0x0000000dbce174ffd,0x0000000000000000,0x00007bc0000000000,0x0000000000000000,0x0000000dc00000000},
+ { 0x0000000000001415,0x0769350986dc47c94,0x0000000000001bba,0x0000000004a608145,0x0000000000000000,0x076a0000000000000,0x0000000000000000,0x0000000004a800000},
+ { 0x000000000000007b,0x000000001a330eb74,0x0000000000002fbc,0x000000000000032cc,0x0000000000000000,0x000000001a3800000,0x0000000000002fbc,0x000000000000032cc},
+ { 0x0000000000001695,0x0001f4e2d9dea7d59,0x000000000000775e,0x0000074bab1e72210,0x0000000000000000,0x0001f500000000000,0x0000000000000000,0x0000074c000000000},
+ { 0x0000000000000194,0x0000dc2a570d31910,0x0000000000057163,0x00000001d86e6f1eb,0x0000000000000000,0x0000dc40000000000,0x0000000000000000,0x00000001d88000000},
+ { 0x00000000000000ab,0x00000174836c66c9f,0x0000000000018d44,0x000000000793c9ea7,0x0000000000000000,0x00000175000000000,0x0000000000000000,0x00000000079400000},
+ { 0x000000000000001e,0x0000000000b0dbef2,0x0000000000000782,0x00000000001814858,0x0000000000000000,0x0000000000b100000,0x0000000000000000,0x00000000001818000},
+ { 0x000000000000049c,0x0001717ee95727766,0x000000637d40f6d7,0x00000078b6d4fe599,0x0000000000000000,0x00017180000000000,0x0000006200000000,0x00000078c00000000},
+ { 0x0000000001a77acd,0x000017f641a88baf7,0x00001fd2d0051c47,0x0000090d2bcdc05e2,0x0000000000000000,0x000017f8000000000,0x00001fc000000000,0x0000090e000000000},
+ { 0x0000000006672575,0x0000b6648dd8e99c4,0x000000375d85067c,0x0000002dc37e99a84,0x0000000000000000,0x0000b680000000000,0x0000003700000000,0x0000002dd00000000},
+ { 0x000000000000783a,0x00000bea2e7d78334,0x0000000000072eaf,0x00000000314a4f455,0x0000000000000000,0x00000bec000000000,0x0000000000000000,0x00000000315000000},
+ { 0x0000000000000669,0x00009c035105bdcba,0x0000000000007771,0x00000005d930f8584,0x0000000000000000,0x00009c40000000000,0x0000000000000000,0x00000005da0000000},
+ { 0x00000006758f53dd,0x0005e41fa49711985,0x0003e54c3a9cc004,0x00007b54271f42a60,0x0000000000000000,0x0005e600000000000,0x0003e50000000000,0x00007b60000000000},
+ { 0x0000000000010c32,0x000000000104c78a8,0x00000000061ac5bb,0x0000000000d9add94,0x0000000000000000,0x00000000010500000,0x00000000061a0000,0x0000000000d9c0000},
+ { 0x0000000000000da2,0x028ad0fcf86ff185c,0x000000000c0bf4e4,0x000028b3e779435d7,0x0000000000000000,0x028b0000000000000,0x0000000000000000,0x000028c0000000000},
+ { 0x0000000000001465,0x053777fa02a5a7ab3,0x0000000001d09cb5,0x00000000047feb162,0x0000000000000000,0x05380000000000000,0x0000000001c00000,0x00000000048000000},
+ { 0x00000000023157d8,0x0003c9162ec748dee,0x0000000007bdeb6d,0x00000016c32f309fd,0x0000000000000000,0x0003ca00000000000,0x0000000000000000,0x00000016c80000000},
+ { 0x0000000000000003,0x000000045e38202bd,0x000000000002137a,0x0000000000fa46bb5,0x0000000000000000,0x00000004600000000,0x0000000000000000,0x0000000000fa80000},
+ { 0x0000000000000019,0x0783044d6ac1d9d28,0x000000000044213d,0x0000000002a7e092c,0x0000000000000000,0x07840000000000000,0x0000000000400000,0x0000000002a800000},
+ { 0x000000000001fc2b,0x06f20942ed9ca1765,0x00000000002de127,0x01853ea414687bb91,0x0000000000000000,0x06f40000000000000,0x0000000000000000,0x01858000000000000},
+ { 0x0000000000000073,0x00000a6bca9a42707,0x000000000000fe30,0x00000000011c5f077,0x0000000000000000,0x00000a6c000000000,0x0000000000000000,0x00000000011c80000},
+ { 0x0000000000011c40,0x00018a229bc8eee87,0x00000001fcb4b2c7,0x00000029706fea76d,0x0000000000000000,0x00018a80000000000,0x0000000100000000,0x00000029800000000},
+ { 0x000002e88e54f811,0x00001ce17b60a0074,0x0000173a5f96dda9,0x0000044c4d07538c2,0x0000028000000000,0x00001ce8000000000,0x0000173000000000,0x0000044d000000000},
+ { 0x0000000006fcb9dc,0x08855a617f12c6598,0x00000012c3af5140,0x00000165e0eec0346,0x0000000000000000,0x08880000000000000,0x0000001000000000,0x00000166000000000},
+ { 0x0000006725a89835,0x0000daf21796f6d56,0x000000dbf994579a,0x00005b1ea515f5881,0x0000000000000000,0x0000db00000000000,0x0000000000000000,0x00005b20000000000},
+ { 0x0000000000000010,0x00263cbe25d179f3e,0x000000004561ba0b,0x000003dbc5cd7c8be,0x0000000000000000,0x00264000000000000,0x0000000000000000,0x000003dc000000000},
+ { 0x00000000000001d6,0x000003d0d63511cda,0x00000000001f3c33,0x0000023f83c0b0938,0x0000000000000000,0x000003d1000000000,0x0000000000000000,0x00000240000000000},
+ { 0x000000000000026a,0x0000000000210c57a,0x000000000000775f,0x00000000000743072,0x0000000000000000,0x00000000002110000,0x0000000000006000,0x00000000000744000},
+ { 0x0000000000c5ae6a,0x0000de970b16cd9fe,0x000001a6509ff814,0x000098c318134dc15,0x0000000000000000,0x0000dec0000000000,0x0000000000000000,0x00009900000000000},
+ { 0x0000000000000ad6,0x00018e5be90d5b1e9,0x00000000004cfb6a,0x00000000000d063c4,0x0000000000000000,0x00018e80000000000,0x00000000004cc000,0x00000000000d08000},
+ { 0x0000000000000e4a,0x0000002faf8a3caeb,0x00000000000aec4a,0x0000000001a08f310,0x0000000000000000,0x0000002fb00000000,0x0000000000080000,0x0000000001a100000},
+ { 0x0000000000000000,0x000003bebffb1ff14,0x0000000000000006,0x00000000000fabda6,0x0000000000000000,0x000003bf000000000,0x0000000000000000,0x00000000000fac000},
+ { 0x00000000000000d2,0x00000000658832a3a,0x000000000008f8fd,0x00000000079c8510a,0x0000000000000000,0x0000000065a000000,0x0000000000000000,0x00000000079e00000},
+ { 0x0000000000000001,0x0000000007fee1e87,0x0000000000000003,0x000000000000005dd,0x0000000000000000,0x00000000080000000,0x0000000000000003,0x000000000000005dd},
+ { 0x000000000000f207,0x000007f00d6c0ca54,0x000000000001a919,0x0000022320d6089f6,0x0000000000000000,0x000007f2000000000,0x0000000000000000,0x00000224000000000},
+ { 0x000000000000005c,0x0000000000161dca2,0x000000000051ef54,0x000000000007f06d9,0x0000000000000000,0x00000000001620000,0x000000000051e000,0x000000000007f1000},
+ { 0x00000000001f1625,0x00000b26aa76830b4,0x0000000001a8c797,0x00000000752fefc31,0x0000000000000000,0x00000b28000000000,0x0000000000000000,0x00000000754000000},
+ { 0x0000000000000b85,0x0008f7056e531e9cd,0x0000000000000f15,0x000000000000b8684,0x0000000000000000,0x0008f800000000000,0x0000000000000c00,0x000000000000b8800},
+ { 0x00000000000007c3,0x001d9721e9b8c38e1,0x0000f96a03e6f3e5,0x001a8027514869220,0x0000000000000000,0x001d9800000000000,0x0000800000000000,0x001a8800000000000},
+ { 0x0000000000000002,0x00002abe8c0b1911a,0x0000000000010677,0x0000000000cd4df01,0x0000000000000000,0x00002ac0000000000,0x0000000000000000,0x0000000000cd80000},
+ { 0x0000000000001abf,0x0000006ebde547896,0x00000000001e05c4,0x0000000000174f132,0x0000000000000000,0x0000006ec00000000,0x00000000001e0000,0x00000000001750000},
+ { 0x000000000000413b,0x0000c37f86b87eb7d,0x00000000005a7da9,0x00005644978fa31d5,0x0000000000000000,0x0000c380000000000,0x0000000000000000,0x00005660000000000},
+ { 0x00000000000000fd,0x00000002bd424e13a,0x0000000001696ceb,0x0000000002daa969c,0x0000000000000000,0x00000002be0000000,0x0000000001600000,0x0000000002db00000},
+ { 0x0000000000000005,0x00000001d96fdfa31,0x0000000000033a41,0x00000000025a762f2,0x0000000000000000,0x00000001d98000000,0x0000000000000000,0x00000000025b00000},
+ { 0x0000000000000328,0x000000054fa1cd944,0x00000000001d89d0,0x000000000a34898c4,0x0000000000000000,0x00000005500000000,0x0000000000000000,0x000000000a3800000},
+ { 0x0000000000024d4e,0x000004951ba31c4b0,0x000000011664da81,0x00000002fcdfdeb32,0x0000000000000000,0x00000496000000000,0x0000000110000000,0x00000002fd0000000},
+ { 0x0000000000000004,0x0011924a662d403f1,0x0000000efc2620ad,0x000247cced9ab2747,0x0000000000000000,0x00119800000000000,0x0000000000000000,0x00024800000000000},
+ { 0x0000000000000577,0x0000001f7e177ff19,0x0000000000089e0b,0x0000000011312c0cf,0x0000000000000000,0x0000001f800000000,0x0000000000000000,0x00000000113800000},
+ { 0x000000000005d004,0x034ca012fe0ca8474,0x00000007a0cadfe2,0x000055091dfa7e801,0x0000000000000000,0x034d0000000000000,0x0000000000000000,0x00005520000000000},
+ { 0x0000000000001ba4,0x0013c13230638273a,0x0000000000006230,0x00000000308c5e3c3,0x0000000000000000,0x0013c800000000000,0x0000000000000000,0x00000000309000000},
+ { 0x000000000000057e,0x089a1c58b2cc22425,0x000000000054d9ad,0x00000001654578fa0,0x0000000000000000,0x089c0000000000000,0x0000000000000000,0x00000001658000000},
+ { 0x00000000000000d4,0x00d1b69db43324caf,0x00000000000004b9,0x0000002034e285917,0x0000000000000000,0x00d1c000000000000,0x0000000000000000,0x00000020400000000},
+ { 0x000000034a9b16b0,0x038962db7e79b672e,0x007c502e0106b78e,0x03531941a64f8f4d0,0x0000000000000000,0x038a0000000000000,0x0070000000000000,0x03540000000000000},
+ { 0x0000000000000055,0x0000012ff1c2ad5d6,0x0000000000000c21,0x000000000000017ba,0x0000000000000000,0x00000130000000000,0x0000000000000c21,0x000000000000017ba},
+ { 0x00000000004ef6de,0x0001c64526b955f6a,0x000000d6b5043d6a,0x00000018db0cd490a,0x0000000000000000,0x0001c680000000000,0x000000d680000000,0x00000018dc0000000},
+ { 0x00000000003275ed,0x00003fa09b3a99311,0x000000001c8aad50,0x0000001131b9ba4f3,0x0000000000000000,0x00003fb0000000000,0x0000000000000000,0x00000011380000000},
+ { 0x0000000000004753,0x00065c273d380e4e2,0x0000dbf43ea4de03,0x00007f17f6b446eb6,0x0000000000000000,0x00065e00000000000,0x0000da0000000000,0x00007f20000000000},
+ { 0x000000000000001b,0x000aa4e0e03f758d2,0x00000000000b7c43,0x000a997bba75caf03,0x0000000000000000,0x000aa800000000000,0x0000000000000000,0x000a9c00000000000},
+ { 0x000000000000000e,0x00007e3324804af54,0x000000000000f41b,0x000000000006b36b2,0x0000000000000000,0x00007e40000000000,0x000000000000e000,0x000000000006b4000},
+ { 0x0000000000000054,0x00003066cf6ed415c,0x00000000000005f6,0x000000000db3a911a,0x0000000000000000,0x00003070000000000,0x0000000000000000,0x000000000db400000},
+ { 0x0000000000c80229,0x000000000b7e5d2fa,0x0000000000e6959e,0x000000000ab7cc8fc,0x0000000000c00000,0x000000000b8000000,0x0000000000c00000,0x000000000ab800000},
+ { 0x0000000000015fdb,0x0000a3ad19e253c78,0x0000000016043176,0x00006deeebc18f0ba,0x0000000000000000,0x0000a3c0000000000,0x0000000000000000,0x00006e00000000000},
+ { 0x00000000000000d8,0x00000fb1c82f65c0e,0x00000000eebf8c55,0x00000058677ab4833,0x0000000000000000,0x00000fb4000000000,0x0000000000000000,0x00000058800000000},
+ { 0x0000000004c6db3c,0x014e9729eaae9626a,0x000000000df7a599,0x0000000576ab0e543,0x0000000000000000,0x014f0000000000000,0x0000000000000000,0x00000005780000000},
+ { 0x0000000000002282,0x0000000006e879a8c,0x00000000003215e9,0x0000000000091e377,0x0000000000000000,0x0000000006ea00000,0x0000000000320000,0x00000000000920000},
+ { 0x000000036a276fd8,0x00000ae482dfd6cb9,0x0000055f945f52f8,0x000002e64c437767b,0x0000000000000000,0x00000ae8000000000,0x0000055000000000,0x000002e7000000000},
+ { 0x0000000000000003,0x00025184cb089aa0a,0x0000000002b45a72,0x00000741402861600,0x0000000000000000,0x00025200000000000,0x0000000000000000,0x00000742000000000},
+ { 0x00000000001ebbc2,0x00a63ca5ea6f23903,0x000026b96304366c,0x000017a34e8051c50,0x0000000000000000,0x00a64000000000000,0x0000268000000000,0x000017a8000000000},
+ { 0x0000000000002e6c,0x0000000003d172db2,0x0000000000003ec6,0x0000000000010252b,0x0000000000000000,0x0000000003d200000,0x0000000000003c00,0x00000000000102800},
+ { 0x000000000021230e,0x00e0eb8dea54a0a5a,0x0000001fcb789f0d,0x0000003889c315602,0x0000000000000000,0x00e10000000000000,0x0000001f00000000,0x00000038900000000},
+ { 0x000000000000001c,0x0000000518bca601c,0x0000000001796f72,0x0000000014cecc61b,0x0000000000000000,0x000000051a0000000,0x0000000001000000,0x0000000014d000000},
+ { 0x00000000000009bc,0x00001c52e301fdb58,0x0000000000001263,0x0000000001610b2c8,0x0000000000000000,0x00001c58000000000,0x0000000000000000,0x00000000016180000},
+ { 0x000000000000000b,0x00000000b2d292fa0,0x00000000000002cb,0x0000000000007ef33,0x0000000000000000,0x00000000b30000000,0x0000000000000200,0x0000000000007f000},
+ { 0x0000014f1c708d8d,0x00d726291ada1c5dd,0x00010e1e667026e1,0x0000528685cf1fcdd,0x0000000000000000,0x00d74000000000000,0x00010e0000000000,0x000052a0000000000},
+ { 0x00000000000003d3,0x0000439e2a1c9780d,0x000000000136d20c,0x000000001358bcde6,0x0000000000000000,0x000043a0000000000,0x0000000001000000,0x00000000136000000},
+ { 0x00000000000025f2,0x00007419c1f41c67e,0x000000000f34794b,0x00000000260d4011f,0x0000000000000000,0x00007420000000000,0x000000000f000000,0x00000000261000000},
+ { 0x000000000006a9e3,0x0000005903d060846,0x000000000af390e5,0x00000000028d0d924,0x0000000000000000,0x00000059200000000,0x000000000af00000,0x00000000028d80000},
+ { 0x00000000000011d4,0x0000005109560ece4,0x00000000001cb276,0x000000003e8a6e6c5,0x0000000000000000,0x00000051200000000,0x0000000000000000,0x000000003e9000000},
+ { 0x000000002fa5f3df,0x0000000071ffeb9f1,0x0000000038f903d7,0x00000000047a047ce,0x000000002e000000,0x00000000720000000,0x0000000038f80000,0x00000000047a40000},
+ { 0x00000005591d4ab4,0x0006f310d541ddcd2,0x000006d559e7bd8e,0x0000412f4a032bda1,0x0000000000000000,0x0006f400000000000,0x0000060000000000,0x00004140000000000},
+ { 0x0000000000001974,0x00000864cab944e4f,0x000000000003e530,0x0000000007a3d7ad3,0x0000000000000000,0x00000868000000000,0x0000000000000000,0x0000000007a400000},
+ { 0x0000000000054ecd,0x0047bc4b884c01901,0x00007219b8fbcd19,0x00071b1158c2a128f,0x0000000000000000,0x0047c000000000000,0x0000600000000000,0x00071c00000000000},
+ { 0x0000000000000026,0x000000a77f2a436c7,0x000000006d38063d,0x00000000083e9f990,0x0000000000000000,0x000000a7800000000,0x000000006d380000,0x00000000083f00000},
+ { 0x000000000000252c,0x00e7a7c7cf73dd02a,0x0000000007a6efc1,0x0004cf715d9f2946b,0x0000000000000000,0x00e7c000000000000,0x0000000000000000,0x0004d000000000000},
+ { 0x0000000000000414,0x000002fe6845e5637,0x00000000173aa958,0x00000039b22ecd5f1,0x0000000000000000,0x000002ff000000000,0x0000000000000000,0x00000039c00000000},
+ { 0x000000000000000a,0x0069592218ca62a56,0x000006af97dc22ef,0x000000b7e6823c966,0x0000000000000000,0x00696000000000000,0x000006ae00000000,0x000000b8000000000},
+ { 0x0000000000000063,0x0006b8d73eb85cc14,0x00000000000003c0,0x0000000000039ddd2,0x0000000000000000,0x0006ba00000000000,0x0000000000000000,0x0000000000039e000},
+ { 0x0000000000000b03,0x00000eb5da8db72ae,0x0000000002844ae9,0x0000000000f923289,0x0000000000000000,0x00000eb8000000000,0x0000000002840000,0x0000000000f940000},
+ { 0x0000000000000002,0x0000002470b521fc6,0x00000000000000e5,0x000000000000c5ded,0x0000000000000000,0x00000024800000000,0x0000000000000000,0x000000000000c6000},
+ { 0x0000000072cf37a6,0x0194ed411292a40f5,0x000004222b2e0ea9,0x005003146e5a52364,0x0000000000000000,0x01950000000000000,0x0000000000000000,0x00502000000000000},
+ { 0x00000000001b5d6a,0x0000000bc884019e8,0x00000000295ac50c,0x000000088bd86a8e6,0x0000000000000000,0x0000000bcc0000000,0x0000000000000000,0x000000088c0000000},
+ { 0x0000000000000001,0x0000000000000e855,0x0000000000000097,0x00000000000000f2b,0x0000000000000000,0x0000000000000e880,0x0000000000000097,0x00000000000000f2b},
+ { 0x0000000bee108af4,0x000140f5b44f4754d,0x000002eca09b52fa,0x000002b977a3f93fb,0x0000000000000000,0x00014100000000000,0x000002e000000000,0x000002ba000000000},
+ { 0x0000000bfcca613c,0x00090b23549d51614,0x0000094c2512e39f,0x000001565d1f57f31,0x0000000000000000,0x00090c00000000000,0x0000094c00000000,0x00000156800000000},
+ { 0x0000000000000096,0x0031d0c76c99c966e,0x0000000003b89642,0x000006d4be697f489,0x0000000000000000,0x0031e000000000000,0x0000000000000000,0x000006d6000000000},
+ { 0x000000000000018f,0x0c93a5bc9693adc22,0x0000002afe78ac9b,0x00000013ce18ddeb6,0x0000000000000000,0x0c940000000000000,0x0000002a80000000,0x00000013d00000000},
+ { 0x0000000000000052,0x00388f6d4e0fc8880,0x0000000275e344f0,0x00007a85ba5064853,0x0000000000000000,0x00389000000000000,0x0000000000000000,0x00007aa0000000000},
+ { 0x0000000000000009,0x0047ed693c8623d94,0x0000000000048fc6,0x000000001aba14441,0x0000000000000000,0x00480000000000000,0x0000000000000000,0x000000001ac000000},
+ { 0x000000000002f419,0x000030fc3567eb1eb,0x00000000001368cb,0x00000000279abbdab,0x0000000000000000,0x00003100000000000,0x0000000000000000,0x0000000027a000000},
+ { 0x0000000000000156,0x00000000001e122f5,0x000000000000106b,0x00000000000002f98,0x0000000000000000,0x00000000001e18000,0x0000000000001068,0x00000000000002f98},
+ { 0x0000000000000043,0x000322d6ead77081e,0x00000000000372c0,0x000000012437c60a4,0x0000000000000000,0x00032300000000000,0x0000000000000000,0x00000001248000000},
+ { 0x00000000c93a2753,0x000002227aca39949,0x00000011ccb6f32b,0x0000000b0a3458f97,0x0000000000000000,0x00000223000000000,0x00000011c0000000,0x0000000b0c0000000},
+ { 0x0000000000000412,0x002178df1ec72e159,0x000000002a6d5084,0x000005881d127a9c0,0x0000000000000000,0x00218000000000000,0x0000000000000000,0x0000058a000000000},
+ { 0x0000000000000007,0x0000000000010ccb7,0x000000000000067c,0x000000000000009fc,0x0000000000000000,0x0000000000010d000,0x000000000000067c,0x000000000000009fc},
+ { 0x000000000000004d,0x024fda513f52b932b,0x00000f4143c322df,0x0000147cee9b6da37,0x0000000000000000,0x02500000000000000,0x00000f0000000000,0x00001480000000000},
+ { 0x0000000000000036,0x02acbc4a958c48c7d,0x0000000000003739,0x00000006d37f5fd72,0x0000000000000000,0x02ad0000000000000,0x0000000000000000,0x00000006d40000000},
+ { 0x00000000000000d3,0x002854e4175d442da,0x0000000000020a59,0x00030695169d130e9,0x0000000000000000,0x00286000000000000,0x0000000000000000,0x00030700000000000},
+ { 0x00000000000000b1,0x000000000ad27c927,0x0000000000000cc3,0x00000000000000dfb,0x0000000000000000,0x000000000ad400000,0x0000000000000cc3,0x00000000000000dfb},
+ { 0x000001ecd54f60fe,0x0009ee4125f20b366,0x000072c33574e387,0x00000931b9702d7fe,0x0000000000000000,0x0009f000000000000,0x000072c000000000,0x00000932000000000},
+ { 0x00000000001579df,0x0002b65db7de27ccc,0x000000515f22db04,0x000000c6a5e70c4eb,0x0000000000000000,0x0002b700000000000,0x0000005000000000,0x000000c6c00000000},
+ { 0x000000000faec314,0x00000064fa3d261ca,0x000000002f9f73d8,0x000000011f20d2662,0x0000000000000000,0x00000065000000000,0x0000000028000000,0x000000011f8000000},
+ { 0x000000003f3352d4,0x00007ec91efed36f1,0x000000e76ff8e935,0x00005927eaa414775,0x0000000000000000,0x00007ee0000000000,0x0000000000000000,0x00005940000000000},
+ { 0x000000000de35f5c,0x0000bfbab78d2aa76,0x000000003bca1979,0x000000037b50f2c06,0x0000000000000000,0x0000bfc0000000000,0x0000000030000000,0x000000037c0000000},
+ { 0x0000000000000b9b,0x00000033a524975e8,0x0000000000001dc6,0x00000000001ac1b30,0x0000000000000000,0x00000033b00000000,0x0000000000000000,0x00000000001ac8000},
+ { 0x0000000000000173,0x00000356851fcf6ae,0x00000036ab89fd86,0x000000a2e90d473fc,0x0000000000000000,0x00000357000000000,0x0000003400000000,0x000000a3000000000},
+ { 0x0000001452922955,0x03a65b1b7016a8fdd,0x0003fcae3d269210,0x0000454f6d9268a5d,0x0000000000000000,0x03a70000000000000,0x0003fca000000000,0x00004550000000000},
+ { 0x0000000000000000,0x001ae35ac6202c7df,0x0000004c5ec3d611,0x0000024be0a9ae205,0x0000000000000000,0x001ae800000000000,0x0000004000000000,0x0000024c000000000},
+ { 0x000000000008835a,0x00cf648ebea00dd37,0x000000001c03861e,0x00000005ce7acc02a,0x0000000000000000,0x00cf8000000000000,0x0000000000000000,0x00000005d00000000},
+ { 0x0000000000000004,0x04e834a17c7b1e60a,0x00000e16cf0ac883,0x025207920a8507fc8,0x0000000000000000,0x04ea0000000000000,0x0000000000000000,0x02530000000000000},
+ { 0x00000000000000e7,0x00000001f94543c47,0x000000000000010f,0x000000000013bded9,0x0000000000000000,0x00000001f98000000,0x0000000000000000,0x000000000013c0000},
+ { 0x000087bc9b77e5a7,0x00fbfd31512e98901,0x0002909aad1699c1,0x001ef3706939f5141,0x0000000000000000,0x00fc0000000000000,0x0002800000000000,0x001ef800000000000},
+ { 0x0000000000000007,0x0000006d64a155dd9,0x0000000000008e04,0x00000000000f0e21e,0x0000000000000000,0x0000006d800000000,0x0000000000008000,0x00000000000f10000},
+ { 0x0000000000000002,0x037a01174add0c777,0x0003bfff9b3ec653,0x000918abbf064e309,0x0000000000000000,0x037b0000000000000,0x0003800000000000,0x00091c00000000000},
+ { 0x0000000000000008,0x0028f016fe6c4cddc,0x0000000000000041,0x000000003c8de14ca,0x0000000000000000,0x00290000000000000,0x0000000000000000,0x000000003c9000000},
+ { 0x00000000000011c5,0x07672c0cb96326603,0x0000001b6ce541a8,0x0000491fb10abb0be,0x0000000000000000,0x07680000000000000,0x0000000000000000,0x00004920000000000},
+ { 0x0000000000003fee,0x07c9d10b741c11681,0x00039a649fed6476,0x003e47fa755635686,0x0000000000000000,0x07ca0000000000000,0x0003000000000000,0x003e5000000000000},
+ { 0x0000000000000003,0x000000000005e4dde,0x00000000000000d2,0x0000000000000a76a,0x0000000000000000,0x000000000005e6000,0x00000000000000c0,0x0000000000000a780},
+ { 0x000000000865e138,0x000000b676303c0c7,0x0000001f71b78a9b,0x0000001d4093058cd,0x0000000000000000,0x000000b6800000000,0x0000001f00000000,0x0000001d480000000},
+ { 0x00000000000000f7,0x00000000038993423,0x00000000000086d8,0x000000000002615e5,0x0000000000000000,0x00000000038a00000,0x0000000000008000,0x00000000000262000},
+ { 0x0000000000000580,0x0000000000373c81e,0x0000000000002337,0x00000000000013211,0x0000000000000000,0x00000000003740000,0x0000000000002300,0x00000000000013280},
+ { 0x000000000000a660,0x0000191afd720bd59,0x000000000072d34f,0x00000000016e8a39e,0x0000000000000000,0x00001920000000000,0x0000000000700000,0x00000000016f00000},
+ { 0x0000000000622c23,0x0009c82fe347002ac,0x0000000005c1c535,0x000009f0b77ec8d85,0x0000000000000000,0x0009cc00000000000,0x0000000000000000,0x000009f4000000000},
+ { 0x000000000007985c,0x0000000000edcab41,0x00000000001ad4d0,0x0000000000052c3c3,0x0000000000040000,0x0000000000ee00000,0x00000000001ad000,0x0000000000052d000},
+ { 0x0000000000013ebc,0x01d5d49aa15bde7d0,0x00000015d3e0561a,0x000000cb670e80624,0x0000000000000000,0x01d60000000000000,0x0000001400000000,0x000000cb800000000},
+ { 0x000085817adbaf51,0x0e1136355983cff9d,0x00f343381a87304f,0x001b67f2fbdf3278f,0x0000000000000000,0x0e140000000000000,0x00f3400000000000,0x001b6800000000000},
+ { 0x000000000000005d,0x0002de4506d65543a,0x0000000010c99ced,0x00000f9424335b037,0x0000000000000000,0x0002df00000000000,0x0000000000000000,0x00000f98000000000},
+ { 0x0000000454814bac,0x06f08264cacfdfbe8,0x00000008cea0ae41,0x000a00ebf7f610cd6,0x0000000000000000,0x06f20000000000000,0x0000000000000000,0x000a0400000000000},
+ { 0x0000000000000184,0x0000001c6862f9f47,0x0000000000000260,0x0000000000015e4ed,0x0000000000000000,0x0000001c700000000,0x0000000000000000,0x0000000000015e800},
+ { 0x000000000000002d,0x0b33d58e4602b144c,0x00000037b09b63ef,0x01746650b50b1c383,0x0000000000000000,0x0b340000000000000,0x0000000000000000,0x01748000000000000},
+ { 0x000000000000014c,0x04ba46ccb8d745c36,0x0000000000038e9b,0x0000000000d162229,0x0000000000000000,0x04bc0000000000000,0x0000000000000000,0x0000000000d180000},
+ { 0x0000000000000704,0x0000048fe7523c541,0x0000000009b7c455,0x0000000006cf1cfa3,0x0000000000000000,0x00000490000000000,0x0000000009a00000,0x0000000006d000000},
+ { 0x000000000000c8ed,0x00b6bec732d06c100,0x0000000000c6ca8b,0x000a3eff536d263d9,0x0000000000000000,0x00b6c000000000000,0x0000000000000000,0x000a4000000000000},
+ { 0x001a02c2a755fc2a,0x001f057e9fc5bda56,0x002b013a93592be0,0x00079357faf74210d,0x001a000000000000,0x001f0800000000000,0x002b000000000000,0x00079400000000000},
+ { 0x0000000000000002,0x000000000a819cc92,0x0000000000000180,0x0000000000026c695,0x0000000000000000,0x000000000a8400000,0x0000000000000000,0x0000000000026d000},
+ { 0x0000000000000b96,0x000004bb8e0cf303a,0x0000005fb65dfa4f,0x00000175aec0b0444,0x0000000000000000,0x000004bc000000000,0x0000005800000000,0x00000176000000000},
+ { 0x0000000000000bdc,0x0000000007bdf0426,0x0000000002b9e11a,0x0000000007a7341a5,0x0000000000000000,0x0000000007be00000,0x0000000002a00000,0x0000000007a800000},
+ { 0x00000000000000bf,0x0000b82b49c300d4b,0x00000000000001d4,0x000005eed8341476f,0x0000000000000000,0x0000b840000000000,0x0000000000000000,0x000005f0000000000},
+ { 0x000000000000110e,0x000003d6c450b38d8,0x0000000000001a44,0x00000000006447914,0x0000000000000000,0x000003d7000000000,0x0000000000000000,0x00000000006460000},
+ { 0x0000001eed26cf74,0x038e676569c2d11bc,0x00274bd73fc4fc45,0x0060e4a0c9bf41320,0x0000000000000000,0x038f0000000000000,0x0026000000000000,0x00610000000000000},
+ { 0x000000000000051f,0x000005f2c4c233c42,0x0000000000f4cb5a,0x0000000010a351f8c,0x0000000000000000,0x000005f4000000000,0x0000000000800000,0x0000000010a800000},
+ { 0x000000000000002f,0x0d9ffc02d3ea65740,0x00042ccd5cb667d3,0x00f47a5fd43dd96d8,0x0000000000000000,0x0da00000000000000,0x0004000000000000,0x00f48000000000000},
+ { 0x000000000000001a,0x00016cebc9647731d,0x00000000000367fd,0x000000000000ca01b,0x0000000000000000,0x00016d00000000000,0x0000000000036400,0x000000000000ca400},
+ { 0x000000000000eab1,0x06637a6458d5ed5aa,0x0000000000051dc0,0x0000e950fe1cf9ffc,0x0000000000000000,0x06640000000000000,0x0000000000000000,0x0000e980000000000},
+ { 0x0000000000000019,0x00003b922084a6d87,0x0000000001eb6b21,0x00000000136061b46,0x0000000000000000,0x00003ba0000000000,0x0000000001800000,0x00000000136800000},
+ { 0x0000000000002978,0x0000000029876ce42,0x0000000000028b75,0x000000000087e2271,0x0000000000000000,0x00000000299000000,0x0000000000000000,0x00000000008800000},
+ { 0x000000000163eaa6,0x0027175d6966edeb3,0x000c41bcf350dce1,0x000268543c8a38b2c,0x0000000000000000,0x00272000000000000,0x000c400000000000,0x00026880000000000},
+ { 0x000000000000002b,0x00000000f48f7ec4c,0x0000000001f97292,0x000000000037f5325,0x0000000000000000,0x00000000f4c000000,0x0000000001f90000,0x000000000037f8000},
+ { 0x000000000000001e,0x015e75d796e616a9c,0x000000004c3a9a75,0x0000017afe079d3e0,0x0000000000000000,0x015e8000000000000,0x0000000000000000,0x0000017b000000000},
+ { 0x0000000000000005,0x000002a912bc47110,0x000000000105bd8d,0x0000001dec133d819,0x0000000000000000,0x000002aa000000000,0x0000000000000000,0x0000001df00000000},
+ { 0x0000000000000005,0x001704cd6bc3d763b,0x0000000000000d69,0x00000000000001ec7,0x0000000000000000,0x00170800000000000,0x0000000000000d68,0x00000000000001ec8},
+ { 0x000000000001cd59,0x0031841fd3c160511,0x00000000000723d4,0x00000015f10372433,0x0000000000000000,0x00319000000000000,0x0000000000000000,0x00000015f80000000},
+ { 0x0000000000000015,0x000da39d51be7ddbc,0x0000000000000139,0x000000000006f10ad,0x0000000000000000,0x000da400000000000,0x0000000000000000,0x000000000006f2000},
+ { 0x0000000000000001,0x0000a1013dfe3f03f,0x0000000000b86864,0x0000000000a253758,0x0000000000000000,0x0000a140000000000,0x0000000000b80000,0x0000000000a280000},
+ { 0x00000000000199d6,0x000000682cad47305,0x000000000027fe33,0x000000000dceb8782,0x0000000000000000,0x00000068400000000,0x0000000000000000,0x000000000dd000000},
+ { 0x0000000000000b69,0x090031f7f9160cee5,0x0000002e1b448f9c,0x0008bbe005bdeb371,0x0000000000000000,0x09040000000000000,0x0000000000000000,0x0008bc00000000000},
+ { 0x000000000000000a,0x0000a451ffe9dede8,0x0000003746856e9f,0x00000f179c6350fe1,0x0000000000000000,0x0000a480000000000,0x0000000000000000,0x00000f18000000000},
+ { 0x0000000000b20b6d,0x00578557f007c8ed3,0x00006cad68d3a935,0x0000d81cb160a607e,0x0000000000000000,0x0057a000000000000,0x00006c0000000000,0x0000d840000000000},
+ { 0x000000000013c213,0x01a6763413b6511ea,0x0000000006a3af91,0x0000006f132d1f516,0x0000000000000000,0x01a68000000000000,0x0000000000000000,0x0000006f200000000},
+ { 0x0000000000002ff1,0x030dd8f7c7dede72e,0x00000037d35ebc15,0x0053fb45038d0af8b,0x0000000000000000,0x030e0000000000000,0x0000000000000000,0x00540000000000000},
+ { 0x00000000000001be,0x00000ab73692c8992,0x000000001bb00656,0x00000011c5f177d39,0x0000000000000000,0x00000ab8000000000,0x0000000000000000,0x00000011c80000000},
+ { 0x0000000000000001,0x0035e2830622ff6d5,0x00000000005fc58d,0x00000004df8c80f5d,0x0000000000000000,0x0035f000000000000,0x0000000000000000,0x00000004e00000000},
+ { 0x000000000000001f,0x000000a6b4daa31cf,0x00000000000064b4,0x000000000001a1439,0x0000000000000000,0x000000a6c00000000,0x0000000000006000,0x000000000001a1800},
+ { 0x0000000000003b65,0x00000022de630d6e1,0x0000000000ab9b98,0x0000000000a82f804,0x0000000000000000,0x00000022e00000000,0x0000000000a80000,0x0000000000a840000},
+ { 0x0000000000000002,0x0238293f32df5286f,0x0000000000061f79,0x00000000002bdc639,0x0000000000000000,0x02390000000000000,0x0000000000060000,0x00000000002be0000},
+ { 0x0000000000000028,0x00211699f4fc77ed8,0x000000000062fa32,0x001c1302da069f98a,0x0000000000000000,0x00212000000000000,0x0000000000000000,0x001c1800000000000},
+ { 0x000000000003b528,0x0000000c78548c414,0x0000000000096df9,0x0000000c47b6c33d0,0x0000000000000000,0x0000000c7c0000000,0x0000000000000000,0x0000000c480000000},
+ { 0x0000000000000ab1,0x0000009a62b9d9ecb,0x00000000003ddd33,0x000000000fb7970a4,0x0000000000000000,0x0000009a800000000,0x0000000000000000,0x000000000fb800000},
+ { 0x00000000000000d9,0x0000001a191f58eba,0x00000000000000f8,0x0000000006e1d0c5f,0x0000000000000000,0x0000001a200000000,0x0000000000000000,0x0000000006e200000},
+ { 0x000000161c03cd29,0x0f7f45004118fc584,0x0000003cac1dfe81,0x007ba8573b693295f,0x0000000000000000,0x0f800000000000000,0x0000000000000000,0x007bc000000000000},
+ { 0x0000000000000058,0x002445a47f68026ac,0x0000000000000dc5,0x00000057a5311506f,0x0000000000000000,0x00245000000000000,0x0000000000000000,0x00000057c00000000},
+ { 0x00000000004d0267,0x0000030b0568cf4d4,0x000000000524c727,0x00000004b0998091c,0x0000000000000000,0x0000030c000000000,0x0000000000000000,0x00000004b20000000},
+ { 0x0000000000000055,0x017bb59a955563210,0x0000000000006281,0x0000000003e68c518,0x0000000000000000,0x017c0000000000000,0x0000000000000000,0x0000000003e700000},
+ { 0x0000000000000001,0x019fe4ec67a422958,0x0000000000198b45,0x0000001c297e85e8f,0x0000000000000000,0x01a00000000000000,0x0000000000000000,0x0000001c300000000},
+ { 0x0000000000000031,0x0378d01638ea2dde6,0x0000000000001831,0x0000000000000f479,0x0000000000000000,0x03790000000000000,0x0000000000001800,0x0000000000000f480},
+ { 0x0000000000000001,0x00008526260584ab7,0x000000000000779b,0x00002675e7239352d,0x0000000000000000,0x00008540000000000,0x0000000000000000,0x00002680000000000},
+ { 0x00000000000000cc,0x000000007686e6cdc,0x00000000000003a0,0x00000000000007d48,0x0000000000000000,0x0000000076a000000,0x00000000000003a0,0x00000000000007d60},
+ { 0x0000000000000939,0x022968156f3d57e4b,0x000000002657149e,0x0000000157d8d78f8,0x0000000000000000,0x022a0000000000000,0x0000000020000000,0x00000001580000000},
+ { 0x000000000000002a,0x00000756de44f54aa,0x00000001c912b9ae,0x000000035b6769874,0x0000000000000000,0x00000758000000000,0x00000001c0000000,0x000000035c0000000},
+ { 0x0000000000000002,0x00000000318b13714,0x000000000000fd05,0x00000000280c6e0cc,0x0000000000000000,0x00000000319000000,0x0000000000000000,0x00000000281000000},
+ { 0x00000000000203ff,0x000000e952835378d,0x0000000001348244,0x00000000004891114,0x0000000000000000,0x000000e9800000000,0x0000000001340000,0x000000000048a0000},
+ { 0x0000000000001daa,0x00546c2219e705005,0x000028f70aedb739,0x0000c385ec8a198f7,0x0000000000000000,0x00548000000000000,0x0000280000000000,0x0000c3c0000000000},
+ { 0x00000000001224cb,0x002e4715965e94b03,0x000000000077d980,0x000000dd2afd5f9b4,0x0000000000000000,0x002e5000000000000,0x0000000000000000,0x000000dd400000000},
+ { 0x000000000000000b,0x0000000000013a5fc,0x0000000000002127,0x0000000000007a73b,0x0000000000000000,0x0000000000013a800,0x0000000000002000,0x0000000000007a800},
+ { 0x0000000006175517,0x00027659b0380081b,0x000017231afc06e4,0x00000ee450755293e,0x0000000000000000,0x00027700000000000,0x0000170000000000,0x00000ee8000000000},
+ { 0x0000000000000018,0x000000303f52f9415,0x00000000923074c2,0x000000000fd6fb4db,0x0000000000000000,0x00000030400000000,0x0000000092200000,0x000000000fd800000},
+ { 0x0000000000000626,0x0000000000eaae6ab,0x00000000003de92f,0x0000000000de5fbdd,0x0000000000000000,0x0000000000eac0000,0x00000000003c0000,0x0000000000de80000},
+ { 0x0000000069b23385,0x0337d84cebf5fafc4,0x0000006e2dbec9a8,0x000bc34751fea6bfb,0x0000000000000000,0x03380000000000000,0x0000000000000000,0x000bc400000000000},
+ { 0x0000000000000029,0x0000073c438a07862,0x0000000000000f7c,0x00000000000000fe1,0x0000000000000000,0x0000073e000000000,0x0000000000000f7c,0x00000000000000fe1},
+ { 0x0000000000000eed,0x0000001e173e19fce,0x000000000033cbd8,0x00000000002647099,0x0000000000000000,0x0000001e180000000,0x0000000000330000,0x00000000002650000},
+ { 0x0000000002df7b6e,0x0024713397acb615c,0x0000046753b1438e,0x000184b6ff85a8485,0x0000000000000000,0x00248000000000000,0x0000000000000000,0x00018500000000000},
+ { 0x0000000000000000,0x0000004d651976d92,0x0000000000000003,0x0000002b44dee87bc,0x0000000000000000,0x0000004d800000000,0x0000000000000000,0x0000002b500000000},
+ { 0x000000000000000c,0x00000000000aa19a3,0x00000000000000a3,0x000000000000010cb,0x0000000000000000,0x00000000000aa4000,0x00000000000000a0,0x000000000000010d0},
+ { 0x0000000000091a1e,0x0000000042172c3ff,0x00000000036afa69,0x000000000071810af,0x0000000000000000,0x00000000422000000,0x00000000036a0000,0x00000000007190000},
+ { 0x0000000000000011,0x0000000000154b4ff,0x000000000003e254,0x0000000000017ba99,0x0000000000000000,0x00000000001550000,0x000000000003e000,0x0000000000017c000},
+ { 0x000000000000004e,0x000002349223a2e76,0x000000000b64b9ff,0x0000006b78b5a0443,0x0000000000000000,0x00000235000000000,0x0000000000000000,0x0000006b800000000},
+ { 0x00000000000004ba,0x0001fc088a359f4f7,0x0000000000004343,0x00000001b0a3be4d3,0x0000000000000000,0x0001fc80000000000,0x0000000000000000,0x00000001b10000000},
+ { 0x000000000000000e,0x0000f067a06f6ae32,0x000000000000003d,0x00000060bfc8e295e,0x0000000000000000,0x0000f080000000000,0x0000000000000000,0x00000060c00000000},
+ { 0x000000000005dca9,0x00374fc8d6b685b19,0x000000067b59f08c,0x000000bebfe2b8e40,0x0000000000000000,0x00375000000000000,0x0000000400000000,0x000000bec00000000},
+ { 0x0000000000000075,0x00001af684f8e19e4,0x0000000014cbf6ac,0x000007dbab7d84087,0x0000000000000000,0x00001af8000000000,0x0000000000000000,0x000007dc000000000},
+ { 0x0000000000000078,0x0003d3eb3bae9d723,0x0000000000032147,0x0000000004d916ba3,0x0000000000000000,0x0003d400000000000,0x0000000000000000,0x0000000004da00000},
+ { 0x0000000000000022,0x0008fd79560f90d63,0x0000000000000730,0x00000000000001393,0x0000000000000000,0x00090000000000000,0x0000000000000730,0x00000000000001393},
+ { 0x000000000000000c,0x000000038d04e35d4,0x000000002ce2eb91,0x00000000704ed267e,0x0000000000000000,0x000000038e0000000,0x000000002c000000,0x00000000706000000},
+ { 0x00000220c475c119,0x0a1d428e00966bbb8,0x0000195fc83e9558,0x03f95fb8855d893a3,0x0000000000000000,0x0a200000000000000,0x0000000000000000,0x03fa0000000000000},
+ { 0x000000000000000d,0x00fcfe55c789010a8,0x0000000006be772c,0x00000f11b02955f19,0x0000000000000000,0x00fd0000000000000,0x0000000000000000,0x00000f14000000000},
+ { 0x000000000000000d,0x0010ddd0a2cf1aac5,0x00003112efee3335,0x000fb0480181b4f36,0x0000000000000000,0x0010e000000000000,0x0000000000000000,0x000fb400000000000},
+ { 0x000000000000019d,0x00001cd4d496ac6e8,0x0000000000000a48,0x0000000007eb339ae,0x0000000000000000,0x00001cd8000000000,0x0000000000000000,0x0000000007ec00000},
+ { 0x0000000000000001,0x0688462eaca0e4cda,0x000038a1ded3d8a8,0x0033ff6aa9d962994,0x0000000000000000,0x068a0000000000000,0x0000000000000000,0x00340000000000000},
+ { 0x000000000000949c,0x0000000000c656723,0x000000000007affe,0x00000000000b504d1,0x0000000000000000,0x0000000000c680000,0x0000000000078000,0x00000000000b54000},
+ { 0x0000000010f9a29c,0x00ff1f1260d276d82,0x00c26d91f0175aa9,0x00f1adfd5b366bbaf,0x0000000000000000,0x00ff4000000000000,0x00c0000000000000,0x00f1c000000000000},
+ { 0x000000000000001e,0x000032513385174b9,0x0000000000000094,0x000000000007e0db5,0x0000000000000000,0x00003260000000000,0x0000000000000000,0x000000000007e2000},
+ { 0x0000000000000033,0x00a3b0ea6b8436e90,0x000000000000003b,0x000000009ef0fe0cd,0x0000000000000000,0x00a3c000000000000,0x0000000000000000,0x000000009f0000000},
+ { 0x00000000000045c6,0x000003b0156dbfa25,0x000000014959aa4a,0x00000054d4733433f,0x0000000000000000,0x000003b1000000000,0x0000000000000000,0x00000054e00000000},
+ { 0x0000000000000f88,0x0017ab243b99c5f90,0x000047a144e43990,0x000126a57890dc983,0x0000000000000000,0x0017b000000000000,0x0000400000000000,0x00012700000000000},
+ { 0x0000000000000025,0x000000040ded72c97,0x0000000001a3f9a8,0x00000000791deb940,0x0000000000000000,0x000000040e0000000,0x0000000000000000,0x00000000792000000},
+ { 0x0000000000000046,0x046c963345d84a768,0x00000000125d167c,0x00000002a0fbd14e2,0x0000000000000000,0x046e0000000000000,0x0000000010000000,0x00000002a10000000},
+ { 0x0000000000000005,0x077ebd74c45d651df,0x000000000000013f,0x000000000019c6aba,0x0000000000000000,0x07800000000000000,0x0000000000000000,0x000000000019c8000},
+ { 0x00000000761437fa,0x000123ab55b339bfd,0x0000002d9f13ce0d,0x0000087e774ceb96a,0x0000000000000000,0x00012400000000000,0x0000000000000000,0x00000880000000000},
+ { 0x0000000000000d60,0x00025d35a109464d5,0x00000000002fb3b7,0x000000184e685116f,0x0000000000000000,0x00025e00000000000,0x0000000000000000,0x00000018500000000},
+ { 0x00000009253121e9,0x09b4765570156b523,0x000004041c4f9b3c,0x000016f4104d7682b,0x0000000000000000,0x09b80000000000000,0x0000040000000000,0x000016f8000000000},
+ { 0x0000000000000231,0x0000000747b12470f,0x00000000004143a4,0x000000001857ed1e3,0x0000000000000000,0x00000007480000000,0x0000000000000000,0x00000000185800000},
+ { 0x0000000000000005,0x0001406de212aafc4,0x00000000000002e3,0x000000006b9abfdcd,0x0000000000000000,0x00014080000000000,0x0000000000000000,0x000000006ba000000},
+ { 0x0000000000009ca3,0x00000f713499abde4,0x000000001825e26e,0x0000000022f02243b,0x0000000000000000,0x00000f74000000000,0x0000000018000000,0x00000000230000000},
+ { 0x00000000000078f4,0x000001a681efe2b52,0x0000000000032c2f,0x000000003b9de4c86,0x0000000000000000,0x000001a7000000000,0x0000000000000000,0x000000003ba000000},
+ { 0x000000000000000c,0x000008b7b9d968d6a,0x0000001cf37e3f7f,0x0000000800297f2d8,0x0000000000000000,0x000008b8000000000,0x0000001ce0000000,0x00000008020000000},
+ { 0x00000a68ca0ee2a8,0x014c2690b902c379f,0x00165e966cd12cf0,0x001064c1e50723716,0x0000000000000000,0x014c8000000000000,0x0016400000000000,0x00106800000000000},
+ { 0x000000000002ccef,0x000000000019b11d2,0x000000000002fef9,0x000000000003c70fd,0x0000000000028000,0x000000000019b8000,0x000000000002f000,0x000000000003c8000},
+ { 0x00000000004cdf60,0x033de5a8664cd4437,0x00000000004e896b,0x000000001b4b9affe,0x0000000000000000,0x033e0000000000000,0x0000000000000000,0x000000001b5000000},
+ { 0x0000000000000002,0x00000227bd5cedba2,0x00000000000ca3b9,0x00000000000432b00,0x0000000000000000,0x00000228000000000,0x00000000000ca000,0x00000000000433000},
+ { 0x000000007764b9a7,0x01d46587afa822557,0x00000001209dd72d,0x0000064a4ca4a2d1d,0x0000000000000000,0x01d48000000000000,0x0000000000000000,0x0000064c000000000},
+ { 0x0000000000000068,0x0000000a3acca4d83,0x0000000000224ccd,0x00000000000231a6c,0x0000000000000000,0x0000000a3c0000000,0x0000000000224cc0,0x00000000000231a80},
+ { 0x000000000001090d,0x000073e7069fbc249,0x0000001e28110a71,0x00000c35b2c9c0df1,0x0000000000000000,0x00007400000000000,0x0000000000000000,0x00000c38000000000},
+ { 0x0000000000000005,0x000000001420f36d0,0x0000000000002778,0x000000000000bb90f,0x0000000000000000,0x00000000142800000,0x0000000000002400,0x000000000000bbc00},
+ { 0x0000000000001f61,0x0000759963fba419e,0x00000000001aed66,0x0000757d7671ce5c9,0x0000000000000000,0x000075a0000000000,0x0000000000000000,0x00007580000000000},
+ { 0x0000000000000072,0x032a01ae32413627e,0x000000019b087bba,0x000396c62e8e46ef1,0x0000000000000000,0x032b0000000000000,0x0000000000000000,0x00039700000000000},
+ { 0x000003cbc793ece9,0x0003f872cce06f0c4,0x0000b5628ee25f14,0x00001ee404bfd3145,0x0000000000000000,0x0003f900000000000,0x0000b50000000000,0x00001ee8000000000},
+ { 0x0000000000000661,0x0001a15f370adf2d5,0x00000000ff17b62f,0x000000007edf02b7e,0x0000000000000000,0x0001a180000000000,0x00000000fe000000,0x000000007ee000000},
+ { 0x000000000272f514,0x018ee795e00f8a6fa,0x00741ee932a06ecd,0x00a4dad010781bf42,0x0000000000000000,0x018f0000000000000,0x0074000000000000,0x00a50000000000000},
+ { 0x00000000003fcace,0x000064262af87d427,0x00000089c330bf93,0x0000003e14f9b8bb5,0x0000000000000000,0x00006440000000000,0x0000008900000000,0x0000003e200000000},
+ { 0x000000000000000f,0x000648e04ce6eeb96,0x000000000034e928,0x00058cfcbd6c1ce39,0x0000000000000000,0x00064a00000000000,0x0000000000000000,0x00058e00000000000},
+ { 0x00000000000033da,0x00000017cd105fe64,0x000000002a8f7900,0x000000000a503b9aa,0x0000000000000000,0x00000017d00000000,0x000000002a800000,0x000000000a5200000},
+ { 0x0000000000000037,0x0000681c5b9d9c658,0x0000000087dc74dd,0x0000000fb3abb12f3,0x0000000000000000,0x00006820000000000,0x0000000080000000,0x0000000fb40000000},
+ { 0x000000000000009f,0x0000303732faa05ae,0x00000000000c5477,0x00000000007d50c84,0x0000000000000000,0x00003040000000000,0x00000000000c0000,0x00000000007d60000},
+ { 0x0000000000000031,0x0070ae431c9059bbd,0x00000000000000bc,0x005ddb7ad4cb98370,0x0000000000000000,0x0070c000000000000,0x0000000000000000,0x005de000000000000},
+ { 0x0000000000000b80,0x0006ef4e320088a8b,0x0000000002cb25e9,0x00000000054e423ea,0x0000000000000000,0x0006f000000000000,0x0000000002c00000,0x00000000055000000},
+ { 0x0000000000000009,0x00000007246ef4bc4,0x00000000e9c77cb7,0x000000007e217e99d,0x0000000000000000,0x00000007260000000,0x00000000e8000000,0x000000007e4000000},
+ { 0x000000000000024d,0x00000349e127dbcae,0x0000000000045268,0x000000000007824e6,0x0000000000000000,0x0000034a000000000,0x0000000000044000,0x00000000000784000},
+ { 0x0000000000000064,0x000000856c7ebff9d,0x000000000000b5e9,0x00000018d47e687a7,0x0000000000000000,0x00000085800000000,0x0000000000000000,0x00000018d80000000},
+ { 0x0000000000000006,0x00000000b211e7dee,0x00000000001192a6,0x000000000032a6776,0x0000000000000000,0x00000000b24000000,0x0000000000110000,0x000000000032b0000},
+ { 0x0000000002587dc5,0x0056fe7df614aa93e,0x000000000ff6a0db,0x000000211be566b70,0x0000000000000000,0x00570000000000000,0x0000000000000000,0x00000021200000000},
+ { 0x000000000000000a,0x00ebe0b138f6603fe,0x000000000002b164,0x000025bff04010be9,0x0000000000000000,0x00ec0000000000000,0x0000000000000000,0x000025c0000000000},
+ { 0x000000116ae7ed32,0x016d0e5fdab49aeac,0x0000022f994cd18b,0x00000146be1e4b52b,0x0000000000000000,0x016d8000000000000,0x0000022800000000,0x00000147000000000},
+ { 0x0000000000005b1c,0x0003f485a1ef50642,0x000000000b8efab7,0x000001d3574684d90,0x0000000000000000,0x0003f500000000000,0x0000000000000000,0x000001d3800000000},
+ { 0x0000000000000004,0x010dda1b67a12d40c,0x0000000000000484,0x000002e3c849921b2,0x0000000000000000,0x010e0000000000000,0x0000000000000000,0x000002e4000000000},
+ { 0x0000000000000044,0x0000030241bc39155,0x000000000006490d,0x000000000000b1c4c,0x0000000000000000,0x00000303000000000,0x0000000000064800,0x000000000000b1e00},
+ { 0x0000000000000013,0x003de89a778ef1b2f,0x0000000000000033,0x00000000037ba77d5,0x0000000000000000,0x003df000000000000,0x0000000000000000,0x00000000037c00000},
+ { 0x0000000000000028,0x0115da92d8c32d206,0x00000000000000c0,0x00000005503e6e27b,0x0000000000000000,0x01160000000000000,0x0000000000000000,0x00000005520000000},
+ { 0x0000000000027a73,0x0015ddcd0fc16edb7,0x000000003bb014f8,0x00000dcbd525020f0,0x0000000000000000,0x0015e000000000000,0x0000000000000000,0x00000dcc000000000},
+ { 0x0000000000000004,0x0002fa5ef2c58bfb8,0x000000000000044f,0x000000000524f124a,0x0000000000000000,0x0002fb00000000000,0x0000000000000000,0x00000000052600000},
+ { 0x000000000000159e,0x0000547ee0755da36,0x0000004c29162b30,0x000000076218a1be1,0x0000000000000000,0x00005480000000000,0x0000004c20000000,0x00000007630000000},
+ { 0x00000000000016f0,0x030a2543e4e4abf3f,0x004bbb818e9a912c,0x0034ddde612454466,0x0000000000000000,0x030b0000000000000,0x004b000000000000,0x0034e000000000000},
+ { 0x0000000000000005,0x00021b616261f19df,0x00000000000004dd,0x000000001f66c73eb,0x0000000000000000,0x00021c00000000000,0x0000000000000000,0x000000001f6800000},
+ { 0x00000000341464ea,0x06c6e3ab6c7e76658,0x0000003f6287340a,0x00000fc6a666537ac,0x0000000000000000,0x06c80000000000000,0x0000000000000000,0x00000fc8000000000},
+ { 0x0000000000000d18,0x000000e39a25551c0,0x0000000000094556,0x000000596d29c6b3d,0x0000000000000000,0x000000e3c00000000,0x0000000000000000,0x00000059800000000},
+ { 0x0000000000000024,0x06611070c21442ccb,0x00000000000f06b8,0x0000000d44ba9e8b0,0x0000000000000000,0x06620000000000000,0x0000000000000000,0x0000000d480000000},
+ { 0x0000000000000002,0x01c2b7199506936f8,0x0000000000002163,0x000000000003a0cd6,0x0000000000000000,0x01c30000000000000,0x0000000000002000,0x000000000003a1000},
+ { 0x00000000000fb7c8,0x0000010d5ea0f3bad,0x00000000161dabdc,0x000000051f65b7c8e,0x0000000000000000,0x0000010d800000000,0x0000000000000000,0x00000005200000000},
+ { 0x0000000000000b90,0x000747691b62dab30,0x0000001bef1c3b59,0x00000004cfd4c232c,0x0000000000000000,0x00074800000000000,0x0000001be0000000,0x00000004d00000000},
+ { 0x0000000017a132f2,0x0000039e2deebaa94,0x000000006ea6dd3c,0x0000000c6543f7986,0x0000000000000000,0x0000039f000000000,0x0000000040000000,0x0000000c680000000},
+ { 0x0000000000000002,0x0000000006155ca7c,0x000000000002e238,0x0000000003ed08618,0x0000000000000000,0x00000000061600000,0x0000000000000000,0x0000000003ee00000},
+ { 0x0000000000000002,0x0012f78c48123c111,0x00021035daef390b,0x0001d36d2594777c6,0x0000000000000000,0x0012f800000000000,0x0002100000000000,0x0001d380000000000},
+ { 0x0000000000000003,0x0008e460c20f938e0,0x00000044124d77f5,0x0000002bb78497b1f,0x0000000000000000,0x0008e800000000000,0x0000004400000000,0x0000002bc00000000},
+ { 0x0000000014f20001,0x07fa917849b407428,0x00000002cee06932,0x000028883b8e15fa0,0x0000000000000000,0x07fc0000000000000,0x0000000000000000,0x00002890000000000},
+ { 0x0000000000000000,0x0016c6ff14dc331ae,0x0000000000000001,0x00000000c409b4490,0x0000000000000000,0x0016c800000000000,0x0000000000000000,0x00000000c44000000},
+ { 0x00000000016392c2,0x01902b995c1a43705,0x00006f58bca22e77,0x00039e38c8c52fb65,0x0000000000000000,0x01908000000000000,0x0000600000000000,0x00039f00000000000},
+ { 0x000000000009a64b,0x031e9a02cd747661e,0x00000000003add48,0x0000000009747dadf,0x0000000000000000,0x031f0000000000000,0x0000000000000000,0x00000000097800000},
+ { 0x0000000000000067,0x00000002e3d6c4a2e,0x00000000b648d636,0x000000002060e4dd0,0x0000000000000000,0x00000002e40000000,0x00000000b6000000,0x00000000206800000},
+ { 0x000000000000187b,0x0000000c45744d1f2,0x00000000637fe3ff,0x00000001c6b3f9d5d,0x0000000000000000,0x0000000c480000000,0x0000000060000000,0x00000001c70000000},
+ { 0x00000000540a47bb,0x033b244f5bb506129,0x000000009802bed8,0x000000f428d50c307,0x0000000000000000,0x033c0000000000000,0x0000000000000000,0x000000f4400000000},
+ { 0x0000000000000004,0x00071584853607eea,0x0000000000000534,0x0000000000003f0a1,0x0000000000000000,0x00071600000000000,0x0000000000000500,0x0000000000003f100},
+ { 0x000000000000008d,0x00000189205b97833,0x0000000773e44447,0x000000f3a47bcb374,0x0000000000000000,0x00000189800000000,0x0000000400000000,0x000000f3c00000000},
+ { 0x0000000000002a27,0x013a323aa3991aa68,0x0000000000064858,0x0000000a478878751,0x0000000000000000,0x013a8000000000000,0x0000000000000000,0x0000000a480000000},
+ { 0x0000000000012639,0x0384aefa364d85816,0x00000000001f1ff1,0x0000000000244897f,0x0000000000000000,0x03850000000000000,0x00000000001f0000,0x00000000002450000},
+ { 0x0000000000000012,0x00001fdb8d7328216,0x000000000002d408,0x00000000007590e4b,0x0000000000000000,0x00001fe0000000000,0x0000000000020000,0x000000000075a0000},
+ { 0x00000000035744e8,0x019c23eda5e5e04b3,0x000000000fc2c6e0,0x00004dc49b3bbd28c,0x0000000000000000,0x019c8000000000000,0x0000000000000000,0x00004de0000000000},
+ { 0x000000000000005a,0x00228461bcd7662b8,0x000e9361e66bf9af,0x00025af52edfa03e0,0x0000000000000000,0x00229000000000000,0x000e900000000000,0x00025b00000000000},
+ { 0x0000000000000097,0x00090a97191825765,0x000000000001982b,0x0000001119ebc72b2,0x0000000000000000,0x00090c00000000000,0x0000000000000000,0x00000011200000000},
+ { 0x0000000000001c18,0x000007c3849d75eaf,0x0000000000009cc1,0x000000001365696c9,0x0000000000000000,0x000007c4000000000,0x0000000000000000,0x00000000136800000},
+ { 0x000000000000000c,0x00064bd333026c6d3,0x0000000000000011,0x00000623a225eced7,0x0000000000000000,0x00064c00000000000,0x0000000000000000,0x00000624000000000},
+ { 0x0000000002f4f0e2,0x00f5c177821a367ff,0x000000ff5adc857e,0x000001d4a6e5a8b05,0x0000000000000000,0x00f60000000000000,0x000000f800000000,0x000001d5000000000},
+ { 0x0000000000000170,0x000012ad69f460d65,0x0000000074c2819a,0x000006b6e79452230,0x0000000000000000,0x000012b0000000000,0x0000000000000000,0x000006b8000000000},
+ { 0x000000000019ccc3,0x00016f54c32e45a70,0x0000008a78fd41c8,0x0000001188ffe46fd,0x0000000000000000,0x00016f80000000000,0x0000008a40000000,0x000000118c0000000},
+ { 0x0000000000000004,0x02a36db61c9337cda,0x0000000000000056,0x00000002ff7d591ac,0x0000000000000000,0x02a40000000000000,0x0000000000000000,0x00000003000000000},
+ { 0x0000000000003a1b,0x00001076c73b11695,0x000000000003990f,0x000000000d31c06ef,0x0000000000000000,0x00001078000000000,0x0000000000000000,0x000000000d3400000},
+ { 0x00000000266bf89a,0x021387ae5a7877ae4,0x0000000868feadeb,0x002202ad97810ff5a,0x0000000000000000,0x02140000000000000,0x0000000000000000,0x00221000000000000},
+ { 0x0000000000006ce0,0x0ce2e624cfe2a0c46,0x0000000000006e40,0x0000000000096dac5,0x0000000000000000,0x0ce40000000000000,0x0000000000004000,0x00000000000970000},
+ { 0x0000000000000cf6,0x0043802ddd4541318,0x0000000001ca441e,0x0000001f59bcd8bea,0x0000000000000000,0x0043a000000000000,0x0000000000000000,0x0000001f600000000},
+ { 0x000000000330f553,0x0004e69f6bef77e25,0x00000217ea655b29,0x000001eefb076f28d,0x0000000000000000,0x0004e800000000000,0x0000021000000000,0x000001ef000000000},
+ { 0x0000000001090c53,0x00bdab987c8321dab,0x000002d798998f64,0x000001f0e8c519751,0x0000000000000000,0x00bdc000000000000,0x000002d000000000,0x000001f1000000000},
+ { 0x0000000000539e01,0x000000001419622e2,0x0000000000c508ec,0x00000000001b87b6b,0x0000000000000000,0x00000000142000000,0x0000000000c50000,0x00000000001b88000},
+ { 0x0000000000000004,0x020693eb016942247,0x00000000001f4029,0x00000000016873894,0x0000000000000000,0x02070000000000000,0x0000000000180000,0x00000000016880000},
+ { 0x00000000015bb74f,0x0000389c0d4191005,0x00000001e1a1c3aa,0x0000030855b54a21c,0x0000000000000000,0x000038a0000000000,0x0000000000000000,0x00000309000000000},
+ { 0x000000000000005f,0x0000000000052edb3,0x0000000000000747,0x000000000000011d5,0x0000000000000000,0x00000000000530000,0x0000000000000747,0x000000000000011d5},
+ { 0x000000000000002f,0x0000299630e799930,0x0000000000069da1,0x00000058fc20480c9,0x0000000000000000,0x000029a0000000000,0x0000000000000000,0x00000059000000000},
+ { 0x0000000000000001,0x0016bfada87c32bd8,0x000000000000002f,0x0000000000590710c,0x0000000000000000,0x0016c000000000000,0x0000000000000000,0x00000000005920000},
+ { 0x0000000000000001,0x000004508c41e46d8,0x00000000002c4d5b,0x0000000001ede1264,0x0000000000000000,0x00000452000000000,0x0000000000280000,0x0000000001ee00000},
+ { 0x0000000000095f5f,0x0288841b2d024311d,0x00000000051764d9,0x00000000006cc5f2a,0x0000000000000000,0x02890000000000000,0x0000000005170000,0x00000000006cc8000},
+ { 0x0000000000128703,0x007b8d8335f2e31a6,0x00000000002f78b2,0x00000000057dff044,0x0000000000000000,0x007ba000000000000,0x0000000000200000,0x00000000057e00000},
+ { 0x0000000000000249,0x0000410443bbccc12,0x000000007918c230,0x000000048199f2e14,0x0000000000000000,0x00004120000000000,0x0000000060000000,0x00000004820000000},
+ { 0x0000000000000093,0x00052d3859c40baee,0x00000000001d1f51,0x000000000530f6ee9,0x0000000000000000,0x00052e00000000000,0x0000000000000000,0x00000000053200000},
+ { 0x0000000077c485e3,0x011f3cd4816eb9445,0x00000000786619ec,0x0007b5cfc8378d259,0x0000000000000000,0x011f8000000000000,0x0000000000000000,0x0007b600000000000},
+ { 0x000000000093aeca,0x000070bc040a759cf,0x00000000ac016873,0x0000186dfb822e8c5,0x0000000000000000,0x000070c0000000000,0x0000000000000000,0x00001870000000000},
+ { 0x000000000000000c,0x0027c2ba4f63f58fd,0x0000000000061d2d,0x00036ea1efa7819c7,0x0000000000000000,0x0027d000000000000,0x0000000000000000,0x00036f00000000000},
+ { 0x0000000191cc0fd2,0x0066b6cd0a2c6c630,0x001499c3b9d9f5be,0x003a41fddd89f5618,0x0000000000000000,0x0066c000000000000,0x0014000000000000,0x003a5000000000000},
+ { 0x0000000003a75c5b,0x00000002cf8e5842c,0x000000000674c886,0x00000000031b25ab8,0x0000000000000000,0x00000002d00000000,0x0000000006700000,0x00000000031c00000},
+ { 0x00000000000064d3,0x09377f176e1440cac,0x0000000027c64f3b,0x000678c7fc1a02189,0x0000000000000000,0x09380000000000000,0x0000000000000000,0x00067a00000000000},
+ { 0x0000000000000000,0x0003cfe4853fc4d9f,0x0000000000000007,0x0000000000000005b,0x0000000000000000,0x0003d000000000000,0x0000000000000007,0x0000000000000005b},
+ { 0x0000000000000002,0x06051abacb330c8a8,0x0000000000000745,0x000000000000215ef,0x0000000000000000,0x06060000000000000,0x0000000000000700,0x00000000000021600},
+ { 0x0000000000000002,0x000521e270af96f73,0x0000000000000422,0x0000000000000406a,0x0000000000000000,0x00052200000000000,0x0000000000000420,0x00000000000004070},
+ { 0x0000000000000003,0x00000000015fd6073,0x0000000000017c37,0x0000000000077b422,0x0000000000000000,0x00000000016000000,0x0000000000016000,0x0000000000077c000},
+ { 0x00000000001cf007,0x000000000d57f5d92,0x00000000010ba4a5,0x00000000022a2ead2,0x0000000000000000,0x000000000d5800000,0x0000000001000000,0x00000000022b00000},
+ { 0x0000000000000009,0x00d6d8ba2c1d8d5f8,0x00000000009f6014,0x0000002dac0dd2bf0,0x0000000000000000,0x00d70000000000000,0x0000000000000000,0x0000002db00000000},
+ { 0x0000000000000000,0x0003943bb3506ea3b,0x0000000000000006,0x00000001795f8878e,0x0000000000000000,0x00039500000000000,0x0000000000000000,0x00000001798000000},
+ { 0x00000000000df852,0x007452e2df72ff355,0x00000185674e368b,0x00039f1fea3d3773b,0x0000000000000000,0x00746000000000000,0x0000000000000000,0x0003a000000000000},
+ { 0x0000000000006f13,0x000a56861c2568d13,0x000000000000b6c1,0x00002494f679a89b6,0x0000000000000000,0x000a5800000000000,0x0000000000000000,0x000024a0000000000},
+ { 0x0000000000000001,0x000005115a9da27dd,0x000000000003a863,0x000001a90b8372698,0x0000000000000000,0x00000512000000000,0x0000000000000000,0x000001a9800000000},
+ { 0x00000000000001b2,0x000307121d39a6038,0x00000000d9fe7e4c,0x00000580510c072be,0x0000000000000000,0x00030800000000000,0x0000000000000000,0x00000582000000000},
+ { 0x000000000000af64,0x00000000003e71e85,0x000000000000fce1,0x00000000000f05f65,0x0000000000000000,0x00000000003e80000,0x000000000000c000,0x00000000000f08000},
+ { 0x000000000000000e,0x0001059b78a9ca328,0x00000000de741364,0x000000001d510bb2f,0x0000000000000000,0x00010600000000000,0x00000000de400000,0x000000001d5400000},
+ { 0x00000000008b89e9,0x000004aa8da480f67,0x0000000006c69cb2,0x0000000333ee410a7,0x0000000000000000,0x000004ac000000000,0x0000000000000000,0x00000003340000000},
+ { 0x000000000000000e,0x00010dc06599af7cf,0x000000000002b10c,0x00000000120b6a841,0x0000000000000000,0x00010e00000000000,0x0000000000000000,0x00000000121000000},
+ { 0x0000000000000030,0x000000018d763be91,0x00000000b5dc81b0,0x000000001da3f3ce1,0x0000000000000000,0x000000018d8000000,0x00000000b5800000,0x000000001da800000},
+ { 0x0000000000000004,0x01f7c3d680946e3d5,0x0000000051f42b48,0x00000ec7627bdeea7,0x0000000000000000,0x01f80000000000000,0x0000000000000000,0x00000ec8000000000},
+ { 0x00000000000002fe,0x00000001b223c592b,0x0000000000000434,0x00000000dde361b4d,0x0000000000000000,0x00000001b28000000,0x0000000000000000,0x00000000de0000000},
+ { 0x0000000000000007,0x000031ff56dd9f453,0x000000000000005d,0x00000000fc82b9725,0x0000000000000000,0x00003200000000000,0x0000000000000000,0x00000000fcc000000},
+ { 0x0000000000000001,0x0000315a0a49fc417,0x00000005e3b3867b,0x00000008c8756b42b,0x0000000000000000,0x00003160000000000,0x00000005c0000000,0x00000008cc0000000},
+ { 0x0000000000ebee75,0x00009b0e65ef8b7f7,0x000000002dff66f3,0x0000000052c2e705f,0x0000000000000000,0x00009b40000000000,0x000000002c000000,0x0000000052e000000},
+ { 0x000000000001b807,0x000001cedb990d503,0x000000000183e3b4,0x000000733a5bd2cd8,0x0000000000000000,0x000001cf000000000,0x0000000000000000,0x00000073400000000},
+ { 0x0000000000000596,0x0000000009aa25121,0x0000000000000733,0x00000000000000f51,0x0000000000000000,0x0000000009ac00000,0x0000000000000733,0x00000000000000f51},
+ { 0x0000000000002935,0x00421e22769f8c960,0x00000046a85e7cf6,0x000001564f39ea864,0x0000000000000000,0x00422000000000000,0x0000004000000000,0x00000156800000000},
+ { 0x00000000001272bf,0x06484043afa637659,0x000000060f811795,0x000001ff70a78aff0,0x0000000000000000,0x064a0000000000000,0x0000000000000000,0x000001ff800000000},
+ { 0x0000000006626c8d,0x01057cc541d7fd76a,0x0000000157b4d20d,0x00001609dd6153055,0x0000000000000000,0x01058000000000000,0x0000000000000000,0x00001610000000000},
+ { 0x0000000000004deb,0x00000378c5f4a0eff,0x0000000000022ffe,0x0000001a163be8e9d,0x0000000000000000,0x00000379000000000,0x0000000000000000,0x0000001a180000000},
+ { 0x000000000000000c,0x00000000004efce27,0x0000000000000022,0x0000000000000006c,0x0000000000000000,0x00000000004f00000,0x0000000000000022,0x0000000000000006c},
+ { 0x000000018f296bee,0x025133ca6e1211d9d,0x00000007b1d7e86f,0x000000e82b8d649bf,0x0000000000000000,0x02520000000000000,0x0000000400000000,0x000000e8400000000},
+ { 0x0000000007402b9c,0x077cce29e441a91a7,0x4f4e2391cbcedbbf,0x0717453f3f8ed3bcc,0x0000000000000000,0x077e0000000000000,0x4f40000000000000,0x07180000000000000},
+ { 0x0000000000000e94,0x0001afe060b7a1926,0x0000000000004592,0x0000000c6ba48a9f3,0x0000000000000000,0x0001b000000000000,0x0000000000000000,0x0000000c6c0000000},
+ { 0x0000000000000173,0x00a9263a2921b9033,0x0000000006a3ac41,0x00000dadeb615284e,0x0000000000000000,0x00a94000000000000,0x0000000000000000,0x00000db0000000000},
+ { 0x0000000000000016,0x0009784f0e1340de4,0x000000000421641d,0x0000000000d6e2013,0x0000000000000000,0x00097c00000000000,0x0000000004200000,0x0000000000d700000},
+ { 0x000000001429c255,0x0032177c7fec12058,0x00000017909d4610,0x000000149a35c900a,0x0000000000000000,0x00322000000000000,0x0000001780000000,0x00000014a00000000},
+ { 0x0000000000000005,0x00000001c6f23b6a8,0x0000000000000018,0x00000000000000045,0x0000000000000000,0x00000001c70000000,0x0000000000000018,0x00000000000000045},
+ { 0x0000000000310f74,0x00b0a6897a441ace3,0x00000038b970b28c,0x00002d2ccf27dc26f,0x0000000000000000,0x00b0c000000000000,0x0000000000000000,0x00002d30000000000},
+ { 0x0000000000191841,0x00e6dc09940d1ce2b,0x00000001b8951153,0x0000003c41d1d669f,0x0000000000000000,0x00e70000000000000,0x0000000100000000,0x0000003c500000000},
+ { 0x0000000000b42355,0x0001b7f3df3436484,0x00000000380ac10a,0x0000001229d22ef8f,0x0000000000000000,0x0001b800000000000,0x0000000000000000,0x00000012300000000},
+ { 0x00000000000000ab,0x0002e6ff2cf5f9b7d,0x0000000648595681,0x00001fcbb95ef8c08,0x0000000000000000,0x0002e700000000000,0x0000000000000000,0x00001fd0000000000},
+ { 0x0000000000001e12,0x000017115088ebbcb,0x0000000009983731,0x000000014a755d1f7,0x0000000000000000,0x00001718000000000,0x0000000008000000,0x000000014a8000000},
+ { 0x000000000001a9e2,0x0000007322c5b78de,0x000000000796c338,0x000000000098ed3e8,0x0000000000000000,0x00000073400000000,0x0000000007968000,0x000000000098f0000},
+ { 0x00000000000000c4,0x0035d125597b3a2e1,0x002f2a3fe11eb800,0x0003dfddde81e994e,0x0000000000000000,0x0035e000000000000,0x002f280000000000,0x0003e000000000000},
+ { 0x0000000000000009,0x012a82136bb1d9f80,0x00000000064fff42,0x000000001e7e0bab5,0x0000000000000000,0x012b0000000000000,0x0000000006000000,0x000000001e8000000},
+ { 0x000000000000001a,0x000001879b362071a,0x000000000000001f,0x000000000013185d9,0x0000000000000000,0x00000188000000000,0x0000000000000000,0x00000000001320000},
+ { 0x00000000000000d9,0x0000001779e534510,0x0000000002fe0a8a,0x0000000007ef6ffb1,0x0000000000000000,0x00000017800000000,0x0000000002e00000,0x0000000007f000000},
+ { 0x0000000000000071,0x000000101dedf76d0,0x0000000000022d20,0x00000000d964837a3,0x0000000000000000,0x00000010200000000,0x0000000000000000,0x00000000d98000000},
+ { 0x0000000a45dce718,0x005bb9e1a3f0ad972,0x00000610f9ab0000,0x000001757756a2c4c,0x0000000000000000,0x005bc000000000000,0x0000061000000000,0x00000175800000000},
+ { 0x000000004a843f47,0x001ada30ad07c75f5,0x0000000e67a3e0a7,0x0000389170a7ec94f,0x0000000000000000,0x001ae000000000000,0x0000000000000000,0x000038a0000000000},
+ { 0x0000000000d1d1db,0x0000062c25fba305b,0x0000000002798492,0x00000002f29e1b212,0x0000000000000000,0x0000062e000000000,0x0000000000000000,0x00000002f30000000},
+ { 0x00000000005d8218,0x0086cac155538c961,0x000000002b037171,0x0001a054e317c2218,0x0000000000000000,0x00870000000000000,0x0000000000000000,0x0001a080000000000},
+ { 0x0000000000000005,0x0000000037d4b2922,0x00000000000084cb,0x000000000000c6c21,0x0000000000000000,0x0000000037e000000,0x0000000000008400,0x000000000000c7000},
+ { 0x0000000000008b82,0x0002b27e10a34e889,0x0000000000027f19,0x000000073af92f08f,0x0000000000000000,0x0002b300000000000,0x0000000000000000,0x000000073c0000000},
+ { 0x0000000000000033,0x00000000218416deb,0x00000000000051e4,0x00000000002efa7fe,0x0000000000000000,0x00000000219000000,0x0000000000000000,0x00000000002f00000},
+ { 0x000000000032d3f6,0x0000001778a3fcafc,0x0000000000c1cbd4,0x00000000003321e97,0x0000000000000000,0x00000017800000000,0x0000000000c10000,0x00000000003330000},
+ { 0x0000000000000021,0x003f47b252cc3c23d,0x00000000000001ef,0x000000000000146d2,0x0000000000000000,0x003f5000000000000,0x0000000000000180,0x00000000000014700},
+ { 0x000000000010a9b9,0x00dafaba619e199bc,0x00000000180b8829,0x000110b2f365d98aa,0x0000000000000000,0x00db0000000000000,0x0000000000000000,0x00011100000000000},
+ { 0x00000039b588f423,0x00ba51f98f4e7af92,0x000293cc5c48fd0b,0x006d39bcc61cc6481,0x0000000000000000,0x00ba8000000000000,0x0002000000000000,0x006d4000000000000},
+ { 0x00000000000011c1,0x000e9717a8b4451a4,0x00000000027e7051,0x000c2dc718ab766e3,0x0000000000000000,0x000e9800000000000,0x0000000000000000,0x000c3000000000000},
+ { 0x000000407122b156,0x0000027c3ec31d939,0x000000968a03953e,0x000000b4a6e7fcb73,0x0000004000000000,0x0000027d000000000,0x0000009400000000,0x000000b4c00000000},
+ { 0x00000000000002c1,0x0015e216bc83f2954,0x00000028c36bd0c8,0x00008f3e7a05f6bff,0x0000000000000000,0x0015e800000000000,0x0000000000000000,0x00008f40000000000},
+ { 0x000000000000000a,0x000000ef877c255f1,0x000000000000e674,0x0000006da16b9357b,0x0000000000000000,0x000000efc00000000,0x0000000000000000,0x0000006dc00000000},
+ { 0x0000000005bedeb6,0x00f3acf00111d4a88,0x000000000dfe2407,0x00000000261501358,0x0000000000000000,0x00f3c000000000000,0x000000000d000000,0x00000000262000000},
+ { 0x00000000000000d5,0x0000000ba848dbbcf,0x0000000000001c85,0x000000010e47acba4,0x0000000000000000,0x0000000bac0000000,0x0000000000000000,0x000000010e8000000},
+ { 0x0000000062606088,0x00004f73dca96a5b4,0x00000015df6f05dd,0x0000000335ff42b42,0x0000000000000000,0x00004f80000000000,0x00000015d8000000,0x00000003360000000},
+ { 0x0000000000000015,0x0003cabc561a3962c,0x00000000000000f5,0x0000001e3c3c92a28,0x0000000000000000,0x0003cb00000000000,0x0000000000000000,0x0000001e400000000},
+ { 0x000000000000010d,0x000000a202ea6d56a,0x0000000000002db4,0x00000000006c0c2b4,0x0000000000000000,0x000000a2400000000,0x0000000000000000,0x00000000006c20000},
+ { 0x000000000000003c,0x00b7120c2d069b08e,0x0000000000000391,0x000009b109e56af2a,0x0000000000000000,0x00b74000000000000,0x0000000000000000,0x000009b4000000000},
+ { 0x0000000000007638,0x0171a9c0a7079e88c,0x00061cee060bacd4,0x0000cfc8570ee0026,0x0000000000000000,0x01720000000000000,0x00061c0000000000,0x0000cfe0000000000},
+ { 0x0000000000000018,0x00000184192d50d1e,0x0000000144b24edc,0x0000000ff356757f3,0x0000000000000000,0x00000184800000000,0x0000000140000000,0x0000000ff40000000},
+ { 0x0000000000017cac,0x000396ee46940e087,0x000000247f90908d,0x0000014572549152a,0x0000000000000000,0x00039700000000000,0x0000002000000000,0x00000145800000000},
+ { 0x00000000000000d3,0x009f0738402f70f94,0x0000028460097d09,0x00000395245e9bcfd,0x0000000000000000,0x009f4000000000000,0x0000028000000000,0x00000396000000000},
+ { 0x000000000003afe0,0x00024bb1e1d0329a4,0x000000000179bb24,0x0000000000a3628d6,0x0000000000000000,0x00024c00000000000,0x0000000001780000,0x0000000000a380000},
+ { 0x000000000000000f,0x0000000b031400a5a,0x00000000000d3462,0x0000000031ff2f34b,0x0000000000000000,0x0000000b040000000,0x0000000000000000,0x00000000320000000},
+ { 0x000000000000001f,0x000003ed92da78dfa,0x000000000000953b,0x00000000015e58219,0x0000000000000000,0x000003ee000000000,0x0000000000000000,0x00000000015e80000},
+ { 0x00000000000002ff,0x00781be9fa53f3590,0x0003ca0780fadc9d,0x00005c1996cba5778,0x0000000000000000,0x00782000000000000,0x0003ca0000000000,0x00005c20000000000},
+ { 0x0000000000000a98,0x00000000058075089,0x000000000000b892,0x0000000000005633c,0x0000000000000000,0x00000000058200000,0x000000000000b800,0x00000000000056400},
+ { 0x00000000000001c7,0x0b5fdc765cca86f40,0x0000000309dfe212,0x00000001b22a9ccc0,0x0000000000000000,0x0b600000000000000,0x0000000308000000,0x00000001b28000000},
+ { 0x0000000000000006,0x0938db1f5df308e08,0x00000000000017b8,0x000000000002f3590,0x0000000000000000,0x093c0000000000000,0x0000000000001000,0x000000000002f4000},
+ { 0x000000000000000c,0x00be01caf5190f8ea,0x00000000003bbecf,0x00000005a9a748f7a,0x0000000000000000,0x00be4000000000000,0x0000000000000000,0x00000005aa0000000},
+ { 0x000000000000000c,0x00119f4868e2de654,0x00000000000006bf,0x0000000414ffe2a1b,0x0000000000000000,0x0011a000000000000,0x0000000000000000,0x00000004160000000},
+ { 0x00000001a34721f7,0x05db44dd8a6286da1,0x0000000f6b86e1fe,0x00000143c188a8c2c,0x0000000000000000,0x05dc0000000000000,0x0000000800000000,0x00000144000000000},
+ { 0x0000000000000041,0x004233849a332c576,0x000000000042ba88,0x00000000b4d79fa5a,0x0000000000000000,0x00424000000000000,0x0000000000000000,0x00000000b50000000},
+ { 0x000000000000000c,0x035b59056ee738648,0x0000000000001030,0x0005258f193c80ac1,0x0000000000000000,0x035c0000000000000,0x0000000000000000,0x00052600000000000},
+ { 0x0000000000003e56,0x0000000fa51c3eab5,0x000000000005c074,0x000000000f1654efe,0x0000000000000000,0x0000000fa80000000,0x0000000000000000,0x000000000f1800000},
+ { 0x000007e113e1d76a,0x03f13cb9be5c40706,0x015999492e705619,0x0252950819a28d948,0x0000000000000000,0x03f20000000000000,0x0150000000000000,0x02530000000000000},
+ { 0x00000000000000ae,0x0004eb7da5488c14b,0x0000000000532aae,0x0000000003fac502c,0x0000000000000000,0x0004ec00000000000,0x0000000000500000,0x0000000003fb00000},
+ { 0x00000000658117da,0x00000014e1751b1c7,0x00000000ca4656f0,0x0000000038b9bc4f9,0x0000000000000000,0x00000014e80000000,0x00000000ca000000,0x0000000038c000000},
+ { 0x00000000000000a2,0x067a5ccf575b76935,0x000000000000bd3f,0x001968d810f03d0a9,0x0000000000000000,0x067c0000000000000,0x0000000000000000,0x00197000000000000},
+ { 0x0000000000000003,0x01f2a55b4c3f24a57,0x0070247378b4e07b,0x00284369faef13c37,0x0000000000000000,0x01f30000000000000,0x0070000000000000,0x00285000000000000},
+ { 0x0000000000000007,0x0172baf53cc3c1ba5,0x000000000001cd34,0x000004e6e356f7ae7,0x0000000000000000,0x01730000000000000,0x0000000000000000,0x000004e8000000000},
+ { 0x0000000000000087,0x03163058c1ee278e6,0x000000000124a84b,0x006440ed305b42870,0x0000000000000000,0x03170000000000000,0x0000000000000000,0x00646000000000000},
+ { 0x0000000000003a7e,0x0093d15061cff1417,0x0000000000005106,0x0000b9e9f62f3770d,0x0000000000000000,0x00940000000000000,0x0000000000000000,0x0000ba00000000000},
+ { 0x0000000000002c67,0x00003cc7e0e84a6e3,0x0000000000008c06,0x000001d0d6677d485,0x0000000000000000,0x00003cd0000000000,0x0000000000000000,0x000001d1000000000},
+ { 0x0000000000000001,0x000042346887d1bbd,0x000000000154a50b,0x000000001318a7be5,0x0000000000000000,0x00004240000000000,0x0000000001000000,0x00000000132000000},
+ { 0x0000000001477f65,0x051bfdf0c1ab2ae55,0x00000000025382af,0x00006b1c21474df45,0x0000000000000000,0x051c0000000000000,0x0000000000000000,0x00006b20000000000},
+ { 0x000000000097c221,0x001f099aaa7ee0821,0x000000000b8f2d40,0x00000000046f68ea2,0x0000000000000000,0x001f1000000000000,0x000000000b800000,0x00000000047000000},
+ { 0x000000000009d391,0x00000005bed520dab,0x0000000849dbfda6,0x00000003f1d31483c,0x0000000000000000,0x00000005c00000000,0x0000000840000000,0x00000003f20000000},
+ { 0x0000000000002f26,0x006aa32c10f6a5edf,0x0000000000070cb2,0x0000001f407e624e1,0x0000000000000000,0x006ac000000000000,0x0000000000000000,0x0000001f480000000},
+ { 0x000000000036e7a1,0x0000833ef53a03e4b,0x0000006be66f5174,0x000001aca43b2da80,0x0000000000000000,0x00008340000000000,0x0000006800000000,0x000001ad000000000},
+ { 0x000000af2a3d671a,0x01a58f1a906e835a8,0x0000023d9fca29b1,0x00001a2f4a58ac2a7,0x0000000000000000,0x01a60000000000000,0x0000020000000000,0x00001a30000000000},
+ { 0x0000000000000302,0x000d19fe73f3d4593,0x0000f63ba4ee2d27,0x000b1c8b843b58f48,0x0000000000000000,0x000d1c00000000000,0x0000c00000000000,0x000b2000000000000},
+ { 0x0000000000000074,0x000af0dac51ce1dd6,0x0000000017885f8b,0x0000002f8d8f2aab8,0x0000000000000000,0x000af400000000000,0x0000000000000000,0x0000002f900000000},
+ { 0x0000000000007697,0x006df0ce971919213,0x0000000000053892,0x00000000004385264,0x0000000000000000,0x006e0000000000000,0x0000000000040000,0x000000000043a0000},
+ { 0x000000000000001d,0x0000000000f774091,0x0000000000021263,0x00000000001fee702,0x0000000000000000,0x0000000000f780000,0x0000000000020000,0x00000000001ff0000},
+ { 0x0000000000000031,0x00001167ec9f0f1ae,0x0000000000000a29,0x0000000b4af57ecd8,0x0000000000000000,0x00001168000000000,0x0000000000000000,0x0000000b4c0000000},
+ { 0x0000000003d8a173,0x000713b7470a33949,0x0000000564c14b36,0x000004bf6fae8c760,0x0000000000000000,0x00071400000000000,0x0000000000000000,0x000004c0000000000},
+ { 0x0000000000000072,0x024fff07f4d08aef9,0x000076e1499b112c,0x0011b5ca6938a4633,0x0000000000000000,0x02500000000000000,0x0000000000000000,0x0011b800000000000},
+ { 0x000000000000610d,0x000a33879469be4f9,0x0000000000665c0b,0x00000000a50f5d8f6,0x0000000000000000,0x000a3400000000000,0x0000000000000000,0x00000000a54000000},
+ { 0x000000006f17817b,0x000001924a63a3d73,0x00000000ce0e9cb7,0x00000019e5cf6df4b,0x0000000000000000,0x00000192800000000,0x0000000080000000,0x00000019e80000000},
+ { 0x0000000000000002,0x00000345b1379211f,0x0000000000000302,0x0000000004d7154f9,0x0000000000000000,0x00000346000000000,0x0000000000000000,0x0000000004d800000},
+ { 0x0000000011d115ed,0x039cec9d2bf2d0045,0x000000158ed85ba6,0x0000000dbf0725bc2,0x0000000000000000,0x039d0000000000000,0x0000001580000000,0x0000000dc00000000},
+ { 0x0000000558cfafbb,0x0e0c404fb0f176fdb,0x0000e8b6983fb1cb,0x000148ac80feb5d29,0x0000000000000000,0x0e100000000000000,0x0000e80000000000,0x00014900000000000},
+ { 0x000000000000160c,0x0030921c6c5f66aa8,0x00000002ae46e7a3,0x0001f7c3ec03841b9,0x0000000000000000,0x0030a000000000000,0x0000000000000000,0x0001f800000000000},
+ { 0x0000000000000035,0x00fd9741bf635a630,0x000001ed69bb7125,0x00000091fa54e6ed2,0x0000000000000000,0x00fdc000000000000,0x000001ec00000000,0x00000092000000000},
+ { 0x0000000000000002,0x004835430cf8eb052,0x00000000000e5bd7,0x00000000680bf2a2e,0x0000000000000000,0x00484000000000000,0x0000000000000000,0x00000000682000000},
+ { 0x0000000000000f8d,0x0379076af2f3976bf,0x00000000010af3dd,0x000000010b3a1dd83,0x0000000000000000,0x037a0000000000000,0x0000000000000000,0x000000010b8000000},
+ { 0x0000000000000a52,0x04c94b359796b11be,0x00003985a7fe43dc,0x03ce9739ae0081c47,0x0000000000000000,0x04ca0000000000000,0x0000000000000000,0x03cf0000000000000},
+ { 0x00000000002b139f,0x0008ef4d090d90734,0x00000000d834ec9b,0x000004ee3a63e3982,0x0000000000000000,0x0008f000000000000,0x0000000000000000,0x000004f0000000000},
+ { 0x0000000000000106,0x000343655b7cbf6c2,0x00000000000007bc,0x000000000000547a1,0x0000000000000000,0x00034400000000000,0x0000000000000600,0x00000000000054800},
+ { 0x0000000000000002,0x000000503940a843b,0x00000000000028b0,0x000000000006a17c6,0x0000000000000000,0x00000050400000000,0x0000000000002000,0x000000000006a2000},
+ { 0x00000000000356ff,0x00000000ccbc040f8,0x00000000000bb750,0x0000000000024801d,0x0000000000000000,0x00000000ccc000000,0x00000000000bb000,0x00000000000248800},
+ { 0x0000000000000bda,0x000263ecd5e04d9bb,0x0000000013b41290,0x00002ca673af7368b,0x0000000000000000,0x00026400000000000,0x0000000000000000,0x00002cb0000000000},
+ { 0x00000000000000c1,0x0000065047aee67b9,0x0000002e0954a48f,0x000000381e35af234,0x0000000000000000,0x00000652000000000,0x0000002e00000000,0x00000038200000000},
+ { 0x0000000000000011,0x02c5c3bb207a95eae,0x0000000000000fc0,0x00000632c0c711733,0x0000000000000000,0x02c60000000000000,0x0000000000000000,0x00000634000000000},
+ { 0x000000000000810c,0x0007623b3d13653c2,0x0000067ed8c527be,0x000018bfeeb24a56f,0x0000000000000000,0x00076400000000000,0x0000060000000000,0x000018c0000000000},
+ { 0x00000000000000be,0x0000643e03bdae6f6,0x00000000003c7690,0x000000a9cbfe81b38,0x0000000000000000,0x00006440000000000,0x0000000000000000,0x000000aa000000000},
+ { 0x000000000000000a,0x0000638b2fe44782e,0x00000000000511d1,0x000000007ed9a5773,0x0000000000000000,0x000063a0000000000,0x0000000000000000,0x000000007ee000000},
+ { 0x000000000000042c,0x0000000072d833610,0x0000000000000d84,0x0000000000003b4ab,0x0000000000000000,0x0000000072e000000,0x0000000000000d00,0x0000000000003b500},
+ { 0x0000000000000510,0x00000d60751e92446,0x000000000000172d,0x0000000000003e289,0x0000000000000000,0x00000d64000000000,0x0000000000001700,0x0000000000003e300},
+ { 0x0000000000000999,0x000000001d31d2c34,0x000000000aa51524,0x00000000097906b5d,0x0000000000000000,0x000000001d3800000,0x000000000a800000,0x00000000097c00000},
+ { 0x0000000000000003,0x000e6035552a44630,0x00000178bd9c4b25,0x0000144f73f439b88,0x0000000000000000,0x000e6400000000000,0x0000010000000000,0x00001450000000000},
+ { 0x000000000000d0aa,0x000001cee2955031b,0x00000000003b9545,0x0000001cf9d84c407,0x0000000000000000,0x000001cf000000000,0x0000000000000000,0x0000001d000000000},
+ { 0x000000000000000e,0x0000e8d0f68cc2dd3,0x0000000000008237,0x00000000006d7e010,0x0000000000000000,0x0000e900000000000,0x0000000000000000,0x00000000006d80000},
+ { 0x0000000000016fd0,0x0000003b6b0067f0f,0x00000000067894cd,0x000000001f5925306,0x0000000000000000,0x0000003b700000000,0x0000000006000000,0x000000001f6000000},
+ { 0x0000000000018e22,0x000032ec682535640,0x00000000a772c866,0x0000000402baa807f,0x0000000000000000,0x000032f0000000000,0x00000000a0000000,0x00000004030000000},
+ { 0x0000000000001c16,0x000000f39d173afe4,0x0000000731df5d0c,0x0000000b1c7a56d8b,0x0000000000000000,0x000000f3c00000000,0x0000000700000000,0x0000000b200000000},
+ { 0x0000000002d76dc8,0x00010c08b5fbdb61d,0x00000003d192074a,0x000000479f6a9b51e,0x0000000000000000,0x00010c80000000000,0x0000000200000000,0x00000047a00000000},
+ { 0x0000000000000528,0x00037ae6759e378fd,0x0000000000000c18,0x000009d12caa95398,0x0000000000000000,0x00037b00000000000,0x0000000000000000,0x000009d4000000000},
+ { 0x0000000000000012,0x03feb2db900ca6630,0x00000001cfab6109,0x000000006bacebae3,0x0000000000000000,0x03ff0000000000000,0x00000001ce000000,0x000000006bc000000},
+ { 0x0000000000009b4f,0x00010f77d6dcf2c22,0x00000000000559f7,0x00003f94f0b5ad7a4,0x0000000000000000,0x00010f80000000000,0x0000000000000000,0x00003fa0000000000},
+ { 0x0000000000000122,0x05dc1ca2ee08f1519,0x00000000000001dc,0x00000295352e98e64,0x0000000000000000,0x05de0000000000000,0x0000000000000000,0x00000296000000000},
+ { 0x000000000002210c,0x059e527e53aaebe9f,0x000000005019e995,0x004bbaa83e1a9e499,0x0000000000000000,0x05a00000000000000,0x0000000000000000,0x004bc000000000000},
+ { 0x0000000000000003,0x00d6a9d443e31e6ac,0x000000000006cd2a,0x00008023ee59f1cb6,0x0000000000000000,0x00d6c000000000000,0x0000000000000000,0x00008040000000000},
+ { 0x000000000005d54f,0x046ed5c3d119cc32c,0x000000006c0016c7,0x0060c066d8e3e28be,0x0000000000000000,0x04700000000000000,0x0000000000000000,0x0060e000000000000},
+ { 0x0000000000000037,0x0000000005d95a88c,0x000000000001ebd9,0x0000000000005ddbb,0x0000000000000000,0x0000000005da00000,0x000000000001eb00,0x0000000000005de00},
+ { 0x00000000119c97f5,0x00000034b59e71255,0x000000003558dda8,0x000000004e2e458d7,0x0000000000000000,0x00000034c00000000,0x0000000034000000,0x000000004e4000000},
+ { 0x000000000000000a,0x000000000011761bd,0x000000000000000a,0x00000000000012921,0x0000000000000000,0x00000000001178000,0x0000000000000000,0x00000000000012980},
+ { 0x0000000000000001,0x00a423203a1db33c6,0x000000000412d83d,0x00008af61c0f14885,0x0000000000000000,0x00a44000000000000,0x0000000000000000,0x00008b00000000000},
+ { 0x0000000000000253,0x00d91f18404705173,0x000000507fcc6c8f,0x00000fe7ba705def1,0x0000000000000000,0x00d94000000000000,0x0000004000000000,0x00000fe8000000000},
+ { 0x000000000003ac23,0x0216a0dd68d778654,0x0001696c3ab76b05,0x00021b46cf58428d9,0x0000000000000000,0x02170000000000000,0x0001600000000000,0x00021c00000000000},
+ { 0x0000000000000313,0x036ea97d9e7a388cf,0x00000000000005ea,0x00000000000001bec,0x0000000000000000,0x036f0000000000000,0x00000000000005e8,0x00000000000001bf0},
+ { 0x0000000000310b0a,0x0027627f6ac5e61eb,0x0000000010de71ca,0x00000002c2cb24d7b,0x0000000000000000,0x00277000000000000,0x0000000010000000,0x00000002c30000000},
+ { 0x0000000000000046,0x0000003e1f00fe7fe,0x0000000000002b30,0x00000000000191e7c,0x0000000000000000,0x0000003e200000000,0x0000000000002800,0x00000000000192000},
+ { 0x00000000e43761ab,0x00068f9a9590c42da,0x000099da460116e6,0x00000b22df97a5a49,0x0000000000000000,0x00069000000000000,0x000099d800000000,0x00000b23000000000},
+ { 0x00000000000089c3,0x007cb21b4194eb0bc,0x0000003c1ed2fba1,0x000004e5eb23e4c16,0x0000000000000000,0x007cc000000000000,0x0000002000000000,0x000004e6000000000},
+ { 0x0000000002a65d0a,0x00000000d50bcdd11,0x0000000002b8af2c,0x0000000002eec533e,0x0000000000000000,0x00000000d54000000,0x0000000002b00000,0x0000000002ef00000},
+ { 0x000000000000a101,0x0000256887e261c1a,0x000000000017116b,0x0000086467c3f5fe2,0x0000000000000000,0x00002570000000000,0x0000000000000000,0x00000868000000000},
+ { 0x00000000000000d8,0x000005d32938f8b57,0x00000000000001dc,0x000000000008d571a,0x0000000000000000,0x000005d4000000000,0x0000000000000000,0x000000000008d8000},
+ { 0x0000000000000004,0x0008efc2e74e70767,0x0000000000003ebc,0x00000000000e55c7c,0x0000000000000000,0x0008f000000000000,0x0000000000000000,0x00000000000e58000},
+ { 0x0000000000000001,0x000000000eb79ea2f,0x00000000000038b2,0x00000000041a975f3,0x0000000000000000,0x000000000eb800000,0x0000000000000000,0x00000000041c00000},
+ { 0x0000000000301653,0x00000000004e64c0f,0x00000000004934f7,0x00000000000bc0061,0x0000000000300000,0x00000000004e80000,0x0000000000492000,0x00000000000bc2000},
+ { 0x0000000000000001,0x00001323e7f6a9f0f,0x0000001e503ef3ee,0x0000000696cc8b2d6,0x0000000000000000,0x00001328000000000,0x0000001e40000000,0x00000006980000000},
+ { 0x0000000000029f54,0x0000a35174d201e88,0x0000000004a23137,0x0000000195e3499f1,0x0000000000000000,0x0000a380000000000,0x0000000000000000,0x00000001960000000},
+ { 0x0000000000004d1f,0x003b3545571f25855,0x000000000000d8b2,0x00000000000014b68,0x0000000000000000,0x003b4000000000000,0x000000000000d8a0,0x00000000000014b80},
+ { 0x0000001c46e5eae1,0x01c74de6496bb31d2,0x00000537f4222167,0x000c6b182450c6f69,0x0000000000000000,0x01c78000000000000,0x0000000000000000,0x000c6c00000000000},
+ { 0x0000000000000009,0x06fbb2d7e561f11f7,0x0000000000007047,0x0000103584c38b317,0x0000000000000000,0x06fc0000000000000,0x0000000000000000,0x00001038000000000},
+ { 0x0000000000000003,0x000015ffbc1d4fd6a,0x0000000006f4bdb3,0x0000000157f7a4fc1,0x0000000000000000,0x00001600000000000,0x0000000000000000,0x00000001580000000},
+ { 0x000000000067d1be,0x0000000003e04d0d3,0x000000000079c95d,0x00000000008546978,0x0000000000600000,0x0000000003e100000,0x0000000000780000,0x00000000008560000},
+ { 0x0000000000000237,0x0000044a07c8b7a67,0x00000000000039de,0x00000000089fb2142,0x0000000000000000,0x0000044c000000000,0x0000000000000000,0x0000000008a000000},
+ { 0x000001591c69199a,0x0002c5b9d086583e6,0x0000249d40f9b662,0x00001b7d6994c3f8c,0x0000000000000000,0x0002c600000000000,0x0000248000000000,0x00001b80000000000},
+ { 0x000000000000027f,0x0024657ab2410e5b4,0x0000000000048478,0x00000000319893be5,0x0000000000000000,0x00247000000000000,0x0000000000000000,0x0000000031a000000},
+ { 0x000000000000004e,0x02ee269de707cafd3,0x003695ba41271175,0x00186d19f4c0f0360,0x0000000000000000,0x02ef0000000000000,0x0036800000000000,0x00187000000000000},
+ { 0x000000000000111e,0x00000003f46ef6467,0x000000000042e980,0x000000000028e5c7a,0x0000000000000000,0x00000003f50000000,0x0000000000420000,0x000000000028f0000},
+ { 0x0000000000000003,0x00000005ba2f640b6,0x0000000000060bb3,0x000000000fb3f59ab,0x0000000000000000,0x00000005bc0000000,0x0000000000000000,0x000000000fb400000},
+ { 0x0000000000000003,0x000250c414173fe99,0x00000000000000a2,0x00000000000001e91,0x0000000000000000,0x00025100000000000,0x00000000000000a0,0x00000000000001e98},
+ { 0x00000000c92c8855,0x01f948165c84c91f1,0x016384ac5e027079,0x001d3bb7102115b51,0x0000000000000000,0x01f98000000000000,0x0163800000000000,0x001d3c00000000000},
+ { 0x0000000000000330,0x0299c4a8a5e9b73de,0x000017781a4a804b,0x01995ea9a44130063,0x0000000000000000,0x029a0000000000000,0x0000000000000000,0x01998000000000000},
+ { 0x0000000000000201,0x002dd1040fd3a365a,0x000000000003600d,0x0000000000047a111,0x0000000000000000,0x002de000000000000,0x0000000000036000,0x0000000000047c000},
+ { 0x0000000000000000,0x00003581f32d69453,0x000000000005f420,0x0000000000035e0f0,0x0000000000000000,0x00003590000000000,0x000000000005f000,0x0000000000035f000},
+ { 0x0000000105208f49,0x003e650905bb5ec7c,0x000000017c73b866,0x0000000022972dd2f,0x0000000000000000,0x003e7000000000000,0x000000017c400000,0x00000000229800000},
+ { 0x0000000000036645,0x00118095151320513,0x000000059daa0af3,0x000001f1a4f5ae72e,0x0000000000000000,0x00118800000000000,0x0000000000000000,0x000001f2000000000},
+ { 0x00e612b5aeee807f,0x06f67d6c6423537e1,0x012d174907d5ab8e,0x01207d926526fa3ef,0x00e0000000000000,0x06f80000000000000,0x0128000000000000,0x01208000000000000},
+ { 0x0000000000000021,0x0000000221bba1e74,0x000000000783047a,0x0000000008d3331c6,0x0000000000000000,0x00000002220000000,0x0000000007800000,0x0000000008d400000},
+ { 0x00000000000000c9,0x03d538aa102148693,0x00000000309ed19e,0x003441b6dc479f383,0x0000000000000000,0x03d60000000000000,0x0000000000000000,0x00345000000000000},
+ { 0x00000000000000ed,0x0000d428b5116e014,0x0000000000003dc6,0x00000d891b23864cb,0x0000000000000000,0x0000d440000000000,0x0000000000000000,0x00000d8c000000000},
+ { 0x000000000000000d,0x06606e714c2103e99,0x0000000000000474,0x00000000000017c55,0x0000000000000000,0x06620000000000000,0x0000000000000400,0x00000000000017c80},
+ { 0x000000000000006c,0x00d84f01209bd16e8,0x0000000044046e4f,0x0002c83b76f97a775,0x0000000000000000,0x00d88000000000000,0x0000000000000000,0x0002c900000000000},
+ { 0x000000007630fbe5,0x000104b32d972d498,0x00000017351dd767,0x0000ef2403f88c111,0x0000000000000000,0x00010500000000000,0x0000000000000000,0x0000ef40000000000},
+ { 0x000000000002a226,0x000b08337c5e3d660,0x000000000014841f,0x000000012bce794c1,0x0000000000000000,0x000b0c00000000000,0x0000000000000000,0x000000012c0000000},
+ { 0x0000000000000038,0x03202310a8579c693,0x0000028ddb8ec907,0x0000099e18a0ed690,0x0000000000000000,0x03210000000000000,0x0000028000000000,0x000009a0000000000},
+ { 0x000000000001e2b9,0x0000a36490917d902,0x00000006825f9202,0x0000002cc4a6e9fdb,0x0000000000000000,0x0000a380000000000,0x0000000600000000,0x0000002cd00000000},
+ { 0x0000000000000078,0x0006a56be21d92fc1,0x00000000000bd382,0x000005058fcf945b6,0x0000000000000000,0x0006a600000000000,0x0000000000000000,0x00000506000000000},
+ { 0x000000000001e43d,0x000000001e3657c2b,0x00000000001df9b5,0x0000000001efdcaea,0x0000000000000000,0x000000001e3800000,0x0000000000180000,0x0000000001f000000},
+ { 0x0000000000000001,0x004d1c9fe09438d06,0x0000000000000003,0x0000000007c1dc103,0x0000000000000000,0x004d2000000000000,0x0000000000000000,0x0000000007c200000},
+ { 0x0000000000000013,0x00007548e582ac41d,0x00000000028decc1,0x00000020db84d778d,0x0000000000000000,0x00007560000000000,0x0000000000000000,0x00000020e00000000},
+ { 0x00000000004e212b,0x0000e5858f388da15,0x000000001ab960bd,0x0000001e15fe66aef,0x0000000000000000,0x0000e5c0000000000,0x0000000000000000,0x0000001e180000000},
+ { 0x0000000000000d33,0x00001f48c02b119eb,0x00000000018f17e7,0x000009dc2cb6d0255,0x0000000000000000,0x00001f50000000000,0x0000000000000000,0x000009e0000000000},
+ { 0x0000000000000002,0x0000050ea2c74f32e,0x00000000000000d4,0x00000000095becd7c,0x0000000000000000,0x00000510000000000,0x0000000000000000,0x00000000095c00000},
+ { 0x0000000000000010,0x00098f01cae8bf8a2,0x0000000000504dc0,0x0000036dbd722e37e,0x0000000000000000,0x00099000000000000,0x0000000000000000,0x0000036e000000000},
+ { 0x0000000000260705,0x00b350795c2f83aca,0x000176a37305be97,0x0006b278e0410d7b2,0x0000000000000000,0x00b38000000000000,0x0001600000000000,0x0006b400000000000},
+ { 0x000000000e4a4b27,0x0820abaa7a6421be1,0x0000006bae53ce0f,0x000000bb05b31140d,0x0000000000000000,0x08240000000000000,0x0000006800000000,0x000000bb400000000},
+ { 0x00000000000005fc,0x000000030b766c27d,0x0000000000003154,0x000000001b71c185e,0x0000000000000000,0x000000030c0000000,0x0000000000000000,0x000000001b7800000},
+ { 0x0000000000000001,0x0000000000326eec0,0x0000000000000082,0x0000000000000251a,0x0000000000000000,0x00000000003270000,0x0000000000000080,0x00000000000002520},
+ { 0x0000000000002e7a,0x0000000fe800f98b0,0x00000000036c9410,0x000000010508255e8,0x0000000000000000,0x0000000fec0000000,0x0000000000000000,0x00000001058000000},
+ { 0x00000000004113f3,0x0152357dfa2b8821f,0x00000000062fbc88,0x00000013f8bc108ad,0x0000000000000000,0x01528000000000000,0x0000000000000000,0x00000014000000000},
+ { 0x0000000000000000,0x008470b4a74269b29,0x00000000000013fd,0x0004113da592d6657,0x0000000000000000,0x00848000000000000,0x0000000000000000,0x00041200000000000},
+ { 0x00000000000bc51a,0x0000bb2f054837144,0x000000056551d624,0x00000001e936407ac,0x0000000000000000,0x0000bb40000000000,0x0000000560000000,0x00000001e98000000},
+ { 0x000000000ca01090,0x00a9e128af0e30d16,0x0000b52d408cf42e,0x0035bfb560d8a0fc8,0x0000000000000000,0x00aa0000000000000,0x0000000000000000,0x0035c000000000000},
+ { 0x0000000000000009,0x000000001141da190,0x0000000000020c36,0x00000000001d3caf2,0x0000000000000000,0x00000000114800000,0x0000000000020000,0x00000000001d40000},
+ { 0x0000000000000000,0x0000000014c745ae4,0x000000000000004c,0x00000000000074e3c,0x0000000000000000,0x0000000014c800000,0x0000000000000000,0x00000000000075000},
+ { 0x000000000000001d,0x00000001c29e222a0,0x000000000000005e,0x000000000000001bd,0x0000000000000000,0x00000001c30000000,0x000000000000005e,0x000000000000001bd},
+ { 0x000000000000000f,0x000006838bb06162b,0x00000000a5cd6d27,0x0000004be32883df7,0x0000000000000000,0x00000684000000000,0x0000000000000000,0x0000004c000000000},
+ { 0x00000000000009d7,0x00002a05abe07acb3,0x000000000005f8ab,0x000000000000a7fb6,0x0000000000000000,0x00002a10000000000,0x000000000005f800,0x000000000000a8000},
+ { 0x000000000000c4a6,0x00179527455840fc7,0x000000000017caf6,0x0000000000177939c,0x0000000000000000,0x00179800000000000,0x0000000000178000,0x00000000001780000},
+ { 0x000000000077e8a1,0x0002006d2607d8f1e,0x0000000079d0849f,0x00007c9044a18832c,0x0000000000000000,0x00020100000000000,0x0000000000000000,0x00007ca0000000000},
+ { 0x00000000004b4ea7,0x0062b10cc806c24c8,0x000037f67ee4ecf7,0x0000e66071cd98093,0x0000000000000000,0x0062c000000000000,0x0000340000000000,0x0000e680000000000},
+ { 0x000000000000001a,0x000000000deb1d2d2,0x00000000000004a8,0x00000000000000c61,0x0000000000000000,0x000000000dec00000,0x00000000000004a8,0x00000000000000c61},
+ { 0x0000000000000041,0x00000000020e606f2,0x0000000000001828,0x00000000000002eef,0x0000000000000000,0x00000000020f00000,0x0000000000001828,0x00000000000002ef0},
+ { 0x0000000000000000,0x0034c770bbb98e187,0x00000002313ccb17,0x0000007d2d42716c1,0x0000000000000000,0x0034d000000000000,0x0000000200000000,0x0000007d400000000},
+ { 0x00000000d1c18d8a,0x00000b488c7b14098,0x000000023e6a6f95,0x000001f5d7d6498c7,0x0000000000000000,0x00000b4c000000000,0x0000000000000000,0x000001f6000000000},
+ { 0x00000000023079b7,0x000000063f7cf8115,0x0000000002d8e1c0,0x00000003aaff5e8eb,0x0000000000000000,0x00000006400000000,0x0000000000000000,0x00000003ab0000000},
+ { 0x0000000000000000,0x00025b4b466df5b32,0x0000000000000001,0x00000000000004e8f,0x0000000000000000,0x00025c00000000000,0x0000000000000000,0x00000000000004ea0},
+ { 0x0000000031977f7f,0x0004c2fd9c962627c,0x00000000669cf002,0x0000000153868e378,0x0000000000000000,0x0004c400000000000,0x0000000060000000,0x00000001540000000},
+ { 0x0000000000000003,0x0000000000039052e,0x000000000000000d,0x00000000000000861,0x0000000000000000,0x00000000000391000,0x000000000000000d,0x00000000000000861},
+ { 0x0000000000000031,0x006529ef846a46d52,0x00000000000010de,0x0013bb8895cb4e3ce,0x0000000000000000,0x00654000000000000,0x0000000000000000,0x0013c000000000000},
+ { 0x00000000017898cd,0x000000003263e540f,0x000000000463e9c5,0x00000000006f3bf3d,0x0000000001000000,0x00000000327000000,0x0000000004630000,0x00000000006f40000},
+ { 0x0000000000000005,0x01541b47101c30ea6,0x00000000001b9b3e,0x000000000001c2260,0x0000000000000000,0x01548000000000000,0x00000000001b9b00,0x000000000001c2280},
+ { 0x000000000000000c,0x00046009869161801,0x0000000000000037,0x0000185e7d6ecc41f,0x0000000000000000,0x00046200000000000,0x0000000000000000,0x00001860000000000},
+ { 0x0000000000001d87,0x06d92f452e94a86d5,0x000000118bc36830,0x0000001a7c6c304b4,0x0000000000000000,0x06da0000000000000,0x0000001180000000,0x0000001a800000000},
+ { 0x00000000000006ca,0x01756ee18a2693807,0x0000000001152f5b,0x00000000006835806,0x0000000000000000,0x01758000000000000,0x0000000001140000,0x00000000006840000},
+ { 0x0000000031150982,0x00073793766f6d342,0x000000011fa8adde,0x000000046d46515aa,0x0000000000000000,0x00073800000000000,0x0000000100000000,0x000000046e0000000},
+ { 0x0000000000005da7,0x00308448537dfe9b4,0x0000000417fef145,0x000d4bb7ae0ddb4dd,0x0000000000000000,0x00309000000000000,0x0000000000000000,0x000d4c00000000000},
+ { 0x0000000325224f3c,0x0002098c553aae966,0x0001498b95f55fdb,0x00014b9b1e5beb087,0x0000000000000000,0x00020a00000000000,0x0001480000000000,0x00014c00000000000},
+ { 0x000000000000000b,0x0003941e1131dc9f0,0x0000000052c1dbd0,0x00007b0f406bf7f7c,0x0000000000000000,0x00039500000000000,0x0000000000000000,0x00007b20000000000},
+ { 0x0000000000000005,0x00000000005e13870,0x0000000000000006,0x000000000005677d3,0x0000000000000000,0x00000000005e20000,0x0000000000000000,0x00000000000568000},
+ { 0x00000000001d73ae,0x000003b400ca6b4f1,0x000000000031515f,0x00000000b2279117e,0x0000000000000000,0x000003b5000000000,0x0000000000000000,0x00000000b24000000},
+ { 0x0000000000006560,0x0016e09daa3b86142,0x000000000029fe30,0x000068d0202e6a207,0x0000000000000000,0x0016e800000000000,0x0000000000000000,0x000068e0000000000},
+ { 0x0000000000006326,0x0000005008b7870b0,0x000000000044add0,0x00000000070bb2145,0x0000000000000000,0x00000050200000000,0x0000000000400000,0x00000000070c00000},
+ { 0x000000000000067f,0x00015119aee20daec,0x000000000000e6ab,0x00000000000e9dbb6,0x0000000000000000,0x00015180000000000,0x000000000000c000,0x00000000000ea0000},
+ { 0x0000000032b9e12b,0x00061f17fdc9ba474,0x00009e08561b943b,0x000016c3772065d64,0x0000000000000000,0x00062000000000000,0x00009e0000000000,0x000016c4000000000},
+ { 0x0000000000000055,0x00000000da4d7644e,0x0000000000000065,0x0000000002387845a,0x0000000000000000,0x00000000da8000000,0x0000000000000000,0x00000000023900000},
+ { 0x0000000000000019,0x012d09ed87b5442b3,0x000000000000014b,0x0000338bac1876dbc,0x0000000000000000,0x012d8000000000000,0x0000000000000000,0x00003390000000000},
+ { 0x000000000000037b,0x04185c088018a99bb,0x000000000000a1fb,0x000000000000c5adf,0x0000000000000000,0x041a0000000000000,0x000000000000a000,0x000000000000c5c00},
+ { 0x0000000000000024,0x0000671bed53695f7,0x0000000002538bea,0x000000000e725357b,0x0000000000000000,0x00006720000000000,0x0000000002400000,0x000000000e7400000},
+ { 0x0000000000000004,0x000000057571e0f4e,0x0000000001fefbd1,0x00000000ffe92c4d1,0x0000000000000000,0x00000005760000000,0x0000000000000000,0x00000001000000000},
+ { 0x0000000000000008,0x0000316b550ce8e80,0x000000000000dd3c,0x000000c62e3626a43,0x0000000000000000,0x00003170000000000,0x0000000000000000,0x000000c6400000000},
+ { 0x00000000000004ff,0x03da3cfb2fdab333c,0x0000000000114e1a,0x00000000000fc188e,0x0000000000000000,0x03db0000000000000,0x0000000000114000,0x00000000000fc4000},
+ { 0x0000000000000078,0x003cd347b132954c2,0x000000000221ac24,0x00000000336e6e604,0x0000000000000000,0x003ce000000000000,0x0000000002000000,0x00000000337000000},
+ { 0x0000000000000008,0x0007b11c19907e652,0x0000000000004c50,0x00000000ea967e3e5,0x0000000000000000,0x0007b200000000000,0x0000000000000000,0x00000000eac000000},
+ { 0x000000000000000d,0x000000049e37e7b51,0x0000000000000049,0x00000000000002e1e,0x0000000000000000,0x00000004a00000000,0x0000000000000040,0x00000000000002e20},
+ { 0x000000000000074e,0x007f002b6ab8af69e,0x00000014b40d2b57,0x001c9bca4caf36436,0x0000000000000000,0x007f2000000000000,0x0000000000000000,0x001ca000000000000},
+ { 0x0000003e0eaa0e2f,0x000579411a3784db1,0x0000038b0a77c433,0x00005368d3ff3aced,0x0000000000000000,0x00057a00000000000,0x0000020000000000,0x00005380000000000},
+ { 0x000000000000000a,0x0009dded76945140d,0x0000000000049198,0x0000000003c51582b,0x0000000000000000,0x0009e000000000000,0x0000000000000000,0x0000000003c600000},
+ { 0x0000000000000002,0x0000000000890acb4,0x00000000000000f6,0x000000000000b5193,0x0000000000000000,0x00000000008940000,0x0000000000000000,0x000000000000b5400},
+ { 0x0000000000000013,0x00ce70d77c2d3ec65,0x000000000001cd81,0x000000d446a1dd0f0,0x0000000000000000,0x00ce8000000000000,0x0000000000000000,0x000000d4800000000},
+ { 0x0000049e77796fbc,0x0064162f8daa217a2,0x00045cd75207aa34,0x0001e66cecbd7c9e9,0x0000000000000000,0x00642000000000000,0x0004580000000000,0x0001e680000000000},
+ { 0x0000000000000058,0x000003016a11ceb91,0x00000000000006a4,0x00000000000015b81,0x0000000000000000,0x00000302000000000,0x0000000000000680,0x00000000000015c00},
+ { 0x0000000000000000,0x00000020f6b7926ab,0x0000000000000000,0x0000000000000022c,0x0000000000000000,0x00000021000000000,0x0000000000000000,0x0000000000000022c},
+ { 0x0000000000000006,0x000000000018f0044,0x000000000000010a,0x000000000000005e6,0x0000000000000000,0x000000000018f8000,0x000000000000010a,0x000000000000005e6},
+ { 0x0000000000000016,0x00003680d1d4253a6,0x00000000000a5433,0x0000000000aeb7100,0x0000000000000000,0x00003690000000000,0x0000000000080000,0x0000000000aec0000},
+ { 0x0000000000000005,0x02e06de9db15ff49d,0x00000008bf9f5d18,0x00d39410fe12d2d6e,0x0000000000000000,0x02e10000000000000,0x0000000000000000,0x00d3c000000000000},
+ { 0x000000000580d91e,0x00031910713b56936,0x000000006b01294c,0x00000002aaf3dfedb,0x0000000000000000,0x00031a00000000000,0x0000000060000000,0x00000002ab0000000},
+ { 0x000000000002847a,0x0000701744aa03235,0x0000000006f6ce43,0x000000271e2b118d2,0x0000000000000000,0x00007020000000000,0x0000000000000000,0x00000027200000000},
+ { 0x00000000000a8006,0x02f31d774f688436c,0x0014ee9ea0a0ce5d,0x020f9e4fa35133348,0x0000000000000000,0x02f40000000000000,0x0010000000000000,0x02100000000000000},
+ { 0x000000000000003e,0x0003665f30a0708db,0x00000000000001d0,0x000005bb61a04037a,0x0000000000000000,0x00036700000000000,0x0000000000000000,0x000005bc000000000},
+ { 0x0000000000000001,0x00b5acc55c8e1bf2b,0x00000000000000fe,0x00000cd451bc10ba1,0x0000000000000000,0x00b5c000000000000,0x0000000000000000,0x00000cd8000000000},
+ { 0x00000000000001d9,0x003895297d46b12b9,0x000000000006f938,0x0000000000007e898,0x0000000000000000,0x0038a000000000000,0x000000000006f900,0x0000000000007e8c0},
+ { 0x00000000000000dd,0x00000000273171fa4,0x00000000000004a1,0x00000000000009d60,0x0000000000000000,0x00000000274000000,0x0000000000000480,0x00000000000009d80},
+ { 0x0000000000000009,0x0000003282096c5a7,0x0000000000001a2b,0x00000000000326e4f,0x0000000000000000,0x00000032900000000,0x0000000000001000,0x00000000000327000},
+ { 0x000000000001a1e7,0x0b4e90dc656c600ff,0x000000019987f8b4,0x00000003227eaa8b1,0x0000000000000000,0x0b500000000000000,0x0000000190000000,0x00000003230000000},
+ { 0x000000000000001c,0x053649c5efa12cc6f,0x000000000edbbad6,0x03dbd3b6795f26748,0x0000000000000000,0x05380000000000000,0x0000000000000000,0x03dc0000000000000},
+ { 0x0000000000000037,0x06759fe74c88f7839,0x00000019ee6b1b44,0x000000056548b239f,0x0000000000000000,0x06760000000000000,0x00000019e0000000,0x00000005660000000},
+ { 0x000000000004cb86,0x0039dbc6bea18ee91,0x0000000062c86889,0x001dbda3c8e9d7bda,0x0000000000000000,0x0039e000000000000,0x0000000000000000,0x001dc000000000000},
+ { 0x00000000075bce5c,0x002df5229935eb786,0x000000000f239039,0x00000b23cbb71c206,0x0000000000000000,0x002e0000000000000,0x0000000000000000,0x00000b24000000000},
+ { 0x000000000102af7e,0x0000177135415782a,0x0000000031d5d59b,0x000000a913e0f309e,0x0000000000000000,0x00001778000000000,0x0000000000000000,0x000000a9400000000},
+ { 0x00000000016e7efa,0x000082e6edb3b0854,0x0000003dd8f90ca5,0x0000002427e8fe59e,0x0000000000000000,0x00008300000000000,0x0000003d00000000,0x00000024300000000},
+ { 0x0000000000000006,0x0002a4e1c1babba94,0x00000000000014a1,0x000000000001b859b,0x0000000000000000,0x0002a500000000000,0x0000000000001000,0x000000000001b8800},
+ { 0x000000394a92aeee,0x000f649800a3c522d,0x00001ea1f890fc2b,0x00003e10ed141b134,0x0000000000000000,0x000f6800000000000,0x00001e0000000000,0x00003e20000000000},
+ { 0x0000000000000002,0x00000000c781d3de5,0x000000000000001a,0x000000007433cb619,0x0000000000000000,0x00000000c7c000000,0x0000000000000000,0x00000000744000000},
+ { 0x0000000000000007,0x0000025b7fc6459c0,0x000000004f1457d2,0x0000000ebca16420f,0x0000000000000000,0x0000025c000000000,0x0000000040000000,0x0000000ec00000000},
+ { 0x0000000000000079,0x000000018d584d958,0x000000000115cc97,0x00000000001dd2dec,0x0000000000000000,0x000000018d8000000,0x000000000115c000,0x00000000001dd4000},
+ { 0x00000001fb43b6ab,0x00500ef436fb23329,0x000005cb40dcb70e,0x0000c5e894a400273,0x0000000000000000,0x00502000000000000,0x0000040000000000,0x0000c600000000000},
+ { 0x0000000000000154,0x00b5e6c3f93ef61e2,0x00000000000dcfa0,0x0000000001b648dcb,0x0000000000000000,0x00b60000000000000,0x0000000000080000,0x0000000001b680000},
+ { 0x00000000000002e5,0x00000019bd6c92d06,0x000000000070017c,0x0000000912bf0af79,0x0000000000000000,0x00000019c00000000,0x0000000000000000,0x00000009140000000},
+ { 0x0000000000000002,0x0553b9ebd83f9a36c,0x000000000000266b,0x00002446326058f0d,0x0000000000000000,0x05540000000000000,0x0000000000000000,0x00002450000000000},
+ { 0x000000000000015d,0x000000023c00a5bd4,0x0000000000000214,0x0000000000212daa8,0x0000000000000000,0x000000023d0000000,0x0000000000000000,0x00000000002130000},
+ { 0x000000000000016a,0x07242ddaa005f9da6,0x000000000000f3d6,0x0000006223ed5883f,0x0000000000000000,0x07260000000000000,0x0000000000000000,0x00000062400000000},
+ { 0x00000000000025f6,0x0000c8ae3591d1720,0x000000000007060d,0x0000005c14ea341bf,0x0000000000000000,0x0000c8c0000000000,0x0000000000000000,0x0000005c200000000},
+ { 0x0000000000000004,0x000001a59fcf76da4,0x0000000000018067,0x0000000000251c32a,0x0000000000000000,0x000001a6000000000,0x0000000000010000,0x00000000002520000},
+ { 0x000000000051adeb,0x0011540e3f4b7040c,0x00000000040b3d2f,0x00000001ad267a998,0x0000000000000000,0x00115800000000000,0x0000000000000000,0x00000001ad8000000},
+ { 0x0000000000000efe,0x000005287896b4737,0x00000000282a95e8,0x0000001c674882c2f,0x0000000000000000,0x0000052a000000000,0x0000000000000000,0x0000001c680000000},
+ { 0x000000000707a24d,0x00000000a39d9ba8d,0x000000003df7ebca,0x000000000b0a3d642,0x0000000004000000,0x00000000a3c000000,0x000000003de00000,0x000000000b0c00000},
+ { 0x0000000000000ead,0x00e9f29540d1a6747,0x0000000dd6264b91,0x00003e59b49d685ec,0x0000000000000000,0x00ea0000000000000,0x0000000000000000,0x00003e60000000000},
+ { 0x0000000000000085,0x0000c1f2b2f1d1f27,0x000000000001c984,0x000000000000fb7a9,0x0000000000000000,0x0000c200000000000,0x000000000001c800,0x000000000000fb800},
+ { 0x0000000e6faa0726,0x000f9f1d550822be6,0x00000036cab29452,0x00000003a547d64b3,0x0000000000000000,0x000fa000000000000,0x00000036ca000000,0x00000003a55000000},
+ { 0x0000000000000004,0x000966e7f04e4ca29,0x00000000000001ff,0x0000000000000056e,0x0000000000000000,0x00096800000000000,0x00000000000001ff,0x0000000000000056e},
+ { 0x0000000000000050,0x000000d3729c33bb1,0x0000000001226cb7,0x000000000172d43fe,0x0000000000000000,0x000000d3800000000,0x0000000001200000,0x00000000017300000},
+ { 0x0000000000001fa0,0x0000096a4f7200c34,0x0000000000027469,0x00000000000234a96,0x0000000000000000,0x0000096c000000000,0x0000000000027000,0x00000000000235000},
+ { 0x000000000003e088,0x000025503d8fd2692,0x0000000018581711,0x000007cf4b1e20b13,0x0000000000000000,0x00002560000000000,0x0000000000000000,0x000007d0000000000},
+ { 0x00000000007b7406,0x0001c4e61d006f5da,0x0000007bbd8beb7c,0x00007d00b79bfad2a,0x0000000000000000,0x0001c500000000000,0x0000000000000000,0x00007d20000000000},
+ { 0x000000000000000f,0x04ffa641656ad2f82,0x0000000000003a20,0x000000033b434f39b,0x0000000000000000,0x05000000000000000,0x0000000000000000,0x000000033c0000000},
+ { 0x000000000006c480,0x0000000000d982cb5,0x000000000039721b,0x000000000005d18f8,0x0000000000040000,0x0000000000d9c0000,0x0000000000397000,0x000000000005d2000},
+ { 0x0000000002fa7c3b,0x0232609e8344d26f3,0x00000001182e5971,0x00000c604cbf32e19,0x0000000000000000,0x02330000000000000,0x0000000000000000,0x00000c64000000000},
+ { 0x0000000000000000,0x000000098ec8c3f2b,0x00000000000006fb,0x00000000000146e93,0x0000000000000000,0x00000009900000000,0x0000000000000000,0x00000000000147000},
+ { 0x00000000016092e6,0x00016be6f2f778df0,0x0000000203bb4533,0x000000310846b24f0,0x0000000000000000,0x00016c00000000000,0x0000000200000000,0x00000031100000000},
+ { 0x0000000000000071,0x00cc47f83bbf920a4,0x0000000000000d44,0x00000000001b22476,0x0000000000000000,0x00cc8000000000000,0x0000000000000000,0x00000000001b28000},
+ { 0x000000000000000d,0x00000003e2eb5ed76,0x0000000000000055,0x00000000204fba5cc,0x0000000000000000,0x00000003e30000000,0x0000000000000000,0x00000000205000000},
+ { 0x0000000000000a75,0x000000002b4ccdfae,0x00000000005b101a,0x0000000000ffc8bc9,0x0000000000000000,0x000000002b5000000,0x0000000000580000,0x00000000010000000},
+ { 0x0000001ffd67ec90,0x0563cb0a9755aa60e,0x00005a0bb13b7376,0x000024e3221658d0a,0x0000000000000000,0x05640000000000000,0x00005a0000000000,0x000024e8000000000},
+ { 0x00000000011b36d2,0x000000161888a0dfa,0x000000000e9c0f96,0x00000000e9ee4c17a,0x0000000000000000,0x00000016200000000,0x000000000c000000,0x00000000ea0000000},
+ { 0x0000000000002103,0x0017a6c946d3e066c,0x0000000001d895fe,0x00000000013b494c4,0x0000000000000000,0x0017a800000000000,0x0000000001d80000,0x00000000013b80000},
+ { 0x00000000000000cc,0x0000c0ec2747a2107,0x00000bb181c68d95,0x000004f9a42262d27,0x0000000000000000,0x0000c100000000000,0x00000ba000000000,0x000004fa000000000},
+ { 0x00000000000655d5,0x0036960a80ed75a9b,0x00000003818bb1f5,0x0000004f77bcea4db,0x0000000000000000,0x0036a000000000000,0x0000000200000000,0x0000004f800000000},
+ { 0x00000000000001d6,0x000000000dc1cf39e,0x00000000002d8796,0x0000000000057b4ab,0x0000000000000000,0x000000000dc400000,0x00000000002d8000,0x0000000000057c000},
+ { 0x00000000002e1358,0x00102d4e4bc509c19,0x000002557b521bf7,0x0001b10a630f87473,0x0000000000000000,0x00103000000000000,0x0000000000000000,0x0001b180000000000},
+ { 0x0000000000000705,0x004c2322231948b4d,0x0000000001721d52,0x0000011e9b0bc21b8,0x0000000000000000,0x004c4000000000000,0x0000000000000000,0x0000011f000000000},
+ { 0x0000000000000f28,0x000504374aeabef71,0x00001c5ee34741bb,0x000002253b95edfb7,0x0000000000000000,0x00050600000000000,0x00001c5e00000000,0x00000225400000000},
+ { 0x00000014da8731da,0x063fe7ca776e52b65,0x00009257184b4574,0x0012e1b081dddf143,0x0000000000000000,0x06400000000000000,0x0000800000000000,0x0012e800000000000},
+ { 0x000000000a96c2b0,0x0082bf5166b905ef2,0x000000388ce82b83,0x000000e5d78e6c0ad,0x0000000000000000,0x0082c000000000000,0x0000003800000000,0x000000e6000000000},
+ { 0x00000000d1e56409,0x001cccf5db025e3ce,0x000006c5d9f6e46e,0x0000038d0cc5b7779,0x0000000000000000,0x001cd000000000000,0x000006c000000000,0x0000038e000000000},
+ { 0x00000000000002bc,0x00c18c10836a22ddf,0x0000000001387cc6,0x0000178a3be37eab4,0x0000000000000000,0x00c1c000000000000,0x0000000000000000,0x00001790000000000},
+ { 0x0000000000001998,0x000000000001ac140,0x0000000000003937,0x0000000000000e749,0x0000000000001800,0x000000000001ac800,0x0000000000003900,0x0000000000000e780},
+ { 0x000000000001e072,0x07f3f4d1b4046d2c2,0x00000001b99d0da3,0x0000023db88984a02,0x0000000000000000,0x07f40000000000000,0x0000000000000000,0x0000023e000000000},
+ { 0x000000003fa1a4eb,0x093c25cc3796e83a3,0x0003ba011584e60a,0x00519289f4474ca98,0x0000000000000000,0x09400000000000000,0x0002000000000000,0x0051a000000000000},
+ { 0x0000000000003e58,0x0000249fea09e6425,0x0000000042bf7d11,0x0000000199c503c07,0x0000000000000000,0x000024a0000000000,0x0000000040000000,0x000000019a0000000},
+ { 0x0000000000000a0f,0x0000801456ab7564c,0x0000000000078142,0x000000569b0e3743e,0x0000000000000000,0x00008040000000000,0x0000000000000000,0x00000056a00000000},
+ { 0x000000000237c25b,0x0794abe3c30f82428,0x000000000d93592f,0x00000000013246498,0x0000000000000000,0x07960000000000000,0x000000000d920000,0x00000000013260000},
+ { 0x0000000000007e33,0x00000001de514935f,0x00000000000220bd,0x00000001379959783,0x0000000000000000,0x00000001de8000000,0x0000000000000000,0x00000001380000000},
+ { 0x0000000561b68e13,0x000007c41d05e54db,0x0000000f034abbb5,0x00000606cc9fff59b,0x0000000000000000,0x000007c6000000000,0x0000000000000000,0x00000608000000000},
+ { 0x000000000000d56c,0x0003fb46bc25f9017,0x00000030dad04b33,0x0000e77b7e7482cb3,0x0000000000000000,0x0003fc00000000000,0x0000000000000000,0x0000e780000000000},
+ { 0x0000000000000000,0x007e415ca9c935d07,0x00000000000007b1,0x00000000003614e35,0x0000000000000000,0x007e6000000000000,0x0000000000000000,0x00000000003620000},
+ { 0x000000000098e041,0x020be883f82e92a89,0x000000a2699e121f,0x0000034bfa8efb510,0x0000000000000000,0x020c0000000000000,0x000000a000000000,0x0000034c000000000},
+ { 0x0000000003e7330f,0x006c5142b053e9595,0x000002de522285a9,0x000005e80d7e92e06,0x0000000000000000,0x006c6000000000000,0x000002c000000000,0x000005ea000000000},
+ { 0x0000000000045d4e,0x003430bff5db23c2f,0x0000002aeaa46358,0x0000044539fa4c05e,0x0000000000000000,0x00344000000000000,0x0000002000000000,0x00000446000000000},
+ { 0x000000000000056b,0x001c49d485d859055,0x00000000884e82b7,0x0000001e322ed400d,0x0000000000000000,0x001c5000000000000,0x0000000080000000,0x0000001e380000000},
+ { 0x000000000000001b,0x00002307a717f1c62,0x0000000000003018,0x00000000000004a8d,0x0000000000000000,0x00002310000000000,0x0000000000003018,0x00000000000004a90},
+ { 0x00000000000000ee,0x003583b80be32dee3,0x00000000000eaa98,0x00007036cd9a62eef,0x0000000000000000,0x00359000000000000,0x0000000000000000,0x00007040000000000},
+ { 0x000000000000000b,0x000006cf56a3d8105,0x0000000031f8fe73,0x000000126b635f65f,0x0000000000000000,0x000006d0000000000,0x0000000000000000,0x00000012700000000},
+ { 0x000000001a516087,0x06ff792420e5b0414,0x00000002238091a9,0x0000037c6fc5db7a9,0x0000000000000000,0x07000000000000000,0x0000000000000000,0x0000037d000000000},
+ { 0x0000000000034139,0x00000de44d86c26e5,0x0000000405b4b14e,0x000000422e935aaac,0x0000000000000000,0x00000de8000000000,0x0000000400000000,0x00000042400000000},
+ { 0x000000000000006e,0x044b51ac0041b6562,0x00000000002ca42e,0x000000424a6812a2a,0x0000000000000000,0x044c0000000000000,0x0000000000000000,0x00000042600000000},
+ { 0x000000000001ab3f,0x00504aab9111da70e,0x000006cc930818ca,0x00000ec3e0f8f22e5,0x0000000000000000,0x00506000000000000,0x000006c000000000,0x00000ec4000000000},
+ { 0x00000000601fdb9f,0x000e3e1aee444fe35,0x00000003f1f3f8eb,0x0000050b542ea7476,0x0000000000000000,0x000e4000000000000,0x0000000000000000,0x0000050c000000000},
+ { 0x0000000000000002,0x00e492e02158c19dc,0x000000030769945e,0x000000003c4acba10,0x0000000000000000,0x00e4c000000000000,0x0000000307400000,0x000000003c4c00000},
+ { 0x0000000000000013,0x000d4dbb53fb81091,0x000000000032307d,0x00007e9284e843650,0x0000000000000000,0x000d5000000000000,0x0000000000000000,0x00007ea0000000000},
+ { 0x000000000000001e,0x000fa10cbf70c3b90,0x00000004d83bda6a,0x000001b436632e484,0x0000000000000000,0x000fa400000000000,0x0000000000000000,0x000001b4800000000},
+ { 0x0000000000104692,0x00000000005588e6c,0x00000000002c5bbb,0x000000000012b4fc3,0x0000000000100000,0x000000000055a0000,0x00000000002c4000,0x000000000012b8000},
+ { 0x00000000000000d3,0x0016f69020e643b78,0x00000000000005d2,0x000000003acb24317,0x0000000000000000,0x0016f800000000000,0x0000000000000000,0x000000003ad000000},
+ { 0x00000000fa6669f7,0x00c605d5cded55b29,0x00131e9fb3b65270,0x001f425bffec57938,0x0000000000000000,0x00c64000000000000,0x0013000000000000,0x001f4800000000000},
+ { 0x0000000000000050,0x000000000036bad47,0x00000000000015a3,0x000000000000a9543,0x0000000000000000,0x000000000036c0000,0x0000000000001400,0x000000000000a9800},
+ { 0x000000000000d13f,0x0002fef0f3e922ed4,0x0000000002d8b83c,0x000000057434fa26b,0x0000000000000000,0x0002ff00000000000,0x0000000000000000,0x00000005760000000},
+ { 0x000000000014f62a,0x014454ac3b62c3b93,0x00000000053ba15c,0x0000003f5df581965,0x0000000000000000,0x01448000000000000,0x0000000000000000,0x0000003f600000000},
+ { 0x0000000000000002,0x016dfc8d9a5662da8,0x000000000006fda5,0x0000174dcd5520e77,0x0000000000000000,0x016e0000000000000,0x0000000000000000,0x00001750000000000},
+ { 0x00000000168ea5ff,0x00000037eb5734a90,0x000000007d7cbb02,0x0000000b87109352f,0x0000000000000000,0x00000037f00000000,0x0000000040000000,0x0000000b880000000},
+ { 0x000000000000014f,0x002f09074b130611c,0x000000046ffc59e0,0x000004fd6b8fe090c,0x0000000000000000,0x002f1000000000000,0x0000000000000000,0x000004fe000000000},
+ { 0x00000000000002de,0x00000075600094797,0x00000001cc4a0900,0x00000001d3965e79b,0x0000000000000000,0x00000075800000000,0x00000001c8000000,0x00000001d40000000},
+ { 0x0000000000000601,0x00000000bf0ca1f55,0x00000000000016df,0x0000000028858359b,0x0000000000000000,0x00000000bf4000000,0x0000000000000000,0x00000000289000000},
+ { 0x0000000000000003,0x0000e7b7e20624d19,0x000000000000002c,0x0000004446be900f4,0x0000000000000000,0x0000e7c0000000000,0x0000000000000000,0x00000044600000000},
+ { 0x00000005c6808dcf,0x05108099de320a691,0x00000005f66061e0,0x0237ac1f221bb9ac2,0x0000000000000000,0x05120000000000000,0x0000000000000000,0x02380000000000000},
+ { 0x0000000000000035,0x00e2c9ee5d7f72af8,0x0000000000000055,0x000a40dda5a8ab493,0x0000000000000000,0x00e30000000000000,0x0000000000000000,0x000a4400000000000},
+ { 0x0000000000009ebf,0x000000013afa06a7b,0x0000000000355834,0x0000000001cfea1b7,0x0000000000000000,0x000000013b0000000,0x0000000000300000,0x0000000001d000000},
+ { 0x000000000005730a,0x0026c56eea995159d,0x000016c339637702,0x000003bed72a3bde0,0x0000000000000000,0x0026d000000000000,0x000016c000000000,0x000003bf000000000},
+ { 0x0000000000000176,0x00021143244ad8134,0x0000000004d9cda4,0x00000000086c08925,0x0000000000000000,0x00021200000000000,0x0000000004c00000,0x00000000087000000},
+ { 0x000000000000000e,0x00006c06e02df9036,0x0000000000001914,0x00000000000007d14,0x0000000000000000,0x00006c20000000000,0x0000000000001900,0x00000000000007d20},
+ { 0x0000000000000056,0x004b7931a6d923990,0x0000000000000187,0x00000000001400623,0x0000000000000000,0x004b8000000000000,0x0000000000000000,0x00000000001408000},
+ { 0x0000000000037379,0x000038a0639b1baa8,0x0000cdb6acb550e9,0x00001b947186d1b32,0x0000000000000000,0x000038b0000000000,0x0000cd8000000000,0x00001b98000000000},
+ { 0x000000000007046e,0x001d19c7e191d5cc3,0x00000000718f02fe,0x0000008a0c2633a40,0x0000000000000000,0x001d2000000000000,0x0000000000000000,0x0000008a400000000},
+ { 0x000000000000028e,0x000000000078c7142,0x0000000000000380,0x0000000000000075a,0x0000000000000000,0x000000000078e0000,0x0000000000000380,0x0000000000000075a},
+ { 0x0000000000000d09,0x00000000019b9b33e,0x000000000002fe43,0x000000000005b6156,0x0000000000000000,0x00000000019c00000,0x000000000002e000,0x000000000005b8000},
+ { 0x000009416ebb1670,0x000087363e60543fb,0x0001236e300e81f2,0x000053e53ef044696,0x0000080000000000,0x00008740000000000,0x0001220000000000,0x00005400000000000},
+ { 0x000000000000002c,0x00000204468b05dce,0x000000003341880b,0x0000009bfc37b067a,0x0000000000000000,0x00000205000000000,0x0000000000000000,0x0000009c000000000},
+ { 0x0000000000000003,0x00361f48876d94f96,0x000000000280c1ed,0x0000414dd8a3541c6,0x0000000000000000,0x00362000000000000,0x0000000000000000,0x00004160000000000},
+ { 0x0000000000000058,0x0002bd3e2ee92421a,0x000000000006ad2c,0x00000000003ceda6e,0x0000000000000000,0x0002be00000000000,0x0000000000060000,0x00000000003cf0000},
+ { 0x000000002f126580,0x0c5310cf1c32cedf6,0x00000368c43cd23c,0x0000017aa2b42313c,0x0000000000000000,0x0c540000000000000,0x0000036800000000,0x0000017b000000000},
+ { 0x0000000000000000,0x0000000000be9c45a,0x0000000000000003,0x000000000001a3696,0x0000000000000000,0x0000000000bec0000,0x0000000000000000,0x000000000001a3800},
+ { 0x000000000001b40e,0x000001a229fb4cb30,0x000000001ed2528a,0x0000000fa5d6d09fd,0x0000000000000000,0x000001a2800000000,0x0000000000000000,0x0000000fa80000000},
+ { 0x000000000882301a,0x000001a893882fd65,0x00000000e3f5e00b,0x000000c4c8ab90ea7,0x0000000000000000,0x000001a9000000000,0x0000000000000000,0x000000c5000000000},
+ { 0x0000000000000002,0x000064aeb44816a1e,0x000000000000000b,0x00000000000d98925,0x0000000000000000,0x000064c0000000000,0x0000000000000000,0x00000000000d9c000},
+ { 0x0000000058cabfd0,0x0001e3bfdc3de2d49,0x000005813f65d993,0x000006b64ae9897d7,0x0000000000000000,0x0001e400000000000,0x0000058000000000,0x000006b8000000000},
+ { 0x000000000000009e,0x0000000ed95c5e1f4,0x000000000002b232,0x000000001a31d17f0,0x0000000000000000,0x0000000edc0000000,0x0000000000000000,0x000000001a3800000},
+ { 0x0000000000001e0f,0x000000f6f61f6a084,0x00000002c45747c6,0x0000000394ff8bb01,0x0000000000000000,0x000000f7000000000,0x00000002c0000000,0x00000003950000000},
+ { 0x000000000000001c,0x0001242fbba1d4934,0x0000001a7bb8d691,0x000040833de848414,0x0000000000000000,0x00012480000000000,0x0000000000000000,0x000040a0000000000},
+ { 0x0000001a90b44363,0x002a646a11f360589,0x000000ebdc55c090,0x0000003e18bdbdeb6,0x0000000000000000,0x002a7000000000000,0x000000eb00000000,0x0000003e200000000},
+ { 0x0000000000000000,0x00072eaf24165cf1b,0x000000000000e77b,0x00000002585c4b3ae,0x0000000000000000,0x00073000000000000,0x0000000000000000,0x00000002590000000},
+ { 0x0000000000901596,0x00a6186a439228f29,0x001aeab88e285f0e,0x005ab5b6ef7b129e6,0x0000000000000000,0x00a64000000000000,0x001a000000000000,0x005ac000000000000},
+ { 0x0000000000000552,0x01f377c3f3fa0e43d,0x0000000003fbbf83,0x000004e1f53a75a3e,0x0000000000000000,0x01f38000000000000,0x0000000000000000,0x000004e2000000000},
+ { 0x0000000000000621,0x00001534a0d191662,0x0000000000005e41,0x000001c086f010385,0x0000000000000000,0x00001538000000000,0x0000000000000000,0x000001c1000000000},
+ { 0x0000000000000001,0x00a606924418a3e56,0x0000000000000037,0x000d4b39ee8d385e0,0x0000000000000000,0x00a64000000000000,0x0000000000000000,0x000d4c00000000000},
+ { 0x0000000000000001,0x0000005d55584e82c,0x00000000000033f5,0x00000000000ea8d00,0x0000000000000000,0x0000005d600000000,0x0000000000000000,0x00000000000eac000},
+ { 0x0000000000000022,0x000f12fa906c5d987,0x000000000060cfad,0x0007918978eb9b51c,0x0000000000000000,0x000f1400000000000,0x0000000000000000,0x00079200000000000},
+ { 0x0000000000000000,0x01bd0baec2134f9bb,0x000000000000001f,0x00000000048f5a12e,0x0000000000000000,0x01bd8000000000000,0x0000000000000000,0x00000000049000000},
+ { 0x0000000000623167,0x0259903dbc4dd2ffb,0x0000004e1498ed4c,0x0000159b3ba90cf23,0x0000000000000000,0x025a0000000000000,0x0000000000000000,0x000015a0000000000},
+ { 0x0000000000000265,0x028668a2a5c17a4aa,0x000000000033f97b,0x0000e83cb3c7d2529,0x0000000000000000,0x02870000000000000,0x0000000000000000,0x0000e840000000000},
+ { 0x0000000000000153,0x000e98c6a57a44351,0x0000000159701128,0x000af42e54b92f700,0x0000000000000000,0x000e9c00000000000,0x0000000000000000,0x000af800000000000},
+ { 0x00000000000001c7,0x00030dac4457839e6,0x000000000913e8ac,0x0000000001faf2b1d,0x0000000000000000,0x00030e00000000000,0x0000000009100000,0x0000000001fb00000},
+ { 0x000000000000ad07,0x000003ff78111930e,0x0000000000cdcbbb,0x0000002e6ff166f3a,0x0000000000000000,0x00000400000000000,0x0000000000000000,0x0000002e700000000},
+ { 0x000000018b80b9ef,0x00001af45add34532,0x0000007648896d93,0x00000007b72b5b99b,0x0000000000000000,0x00001af8000000000,0x0000007648000000,0x00000007b74000000},
+ { 0x0000000000000252,0x0004f6801d96df35d,0x0000000000002387,0x0000000001819ccc1,0x0000000000000000,0x0004f800000000000,0x0000000000000000,0x00000000018200000},
+ { 0x00000000009b4a77,0x000000309b72c266a,0x00000000b4fa7ba0,0x000000178bf902f5b,0x0000000000000000,0x00000030a00000000,0x0000000080000000,0x00000017900000000},
+ { 0x0000000000000001,0x0cf41a519b19f918f,0x003cbd479dfa48e8,0x00c4b6b80370aafbb,0x0000000000000000,0x0cf80000000000000,0x003c000000000000,0x00c4c000000000000},
+ { 0x000000000000005b,0x00000018e8bbc8fba,0x00000000000c2e4a,0x00000000b5bbf0493,0x0000000000000000,0x00000018f00000000,0x0000000000000000,0x00000000b5c000000},
+ { 0x0000000000000003,0x0000000806b4dbed4,0x000000000000000d,0x000000000000001ed,0x0000000000000000,0x00000008080000000,0x000000000000000d,0x000000000000001ed},
+ { 0x0000000000000005,0x001a81b9cc1bf2823,0x00000000000078e0,0x000000000001e23f9,0x0000000000000000,0x001a8800000000000,0x0000000000007800,0x000000000001e2800},
+ { 0x0000000000000cab,0x00099b98a27026c00,0x0000001079c34177,0x000000068ae6b8541,0x0000000000000000,0x00099c00000000000,0x0000001060000000,0x000000068c0000000},
+ { 0x000000000000000d,0x000000004c66a6e02,0x00000000000a333c,0x0000000007177112a,0x0000000000000000,0x000000004c8000000,0x0000000000000000,0x00000000071800000},
+ { 0x0000000000000034,0x00000000000000971,0x00000000000001f5,0x000000000000007b4,0x0000000000000034,0x00000000000000971,0x00000000000001f5,0x000000000000007b4},
+ { 0x0000000000022b38,0x00178ec4137ead06e,0x0000000054c3f4a1,0x0000d946728cb6660,0x0000000000000000,0x00179000000000000,0x0000000000000000,0x0000d980000000000},
+ { 0x000000000005681c,0x0000002a387b71cc9,0x0000000010993ebb,0x0000000001640d31e,0x0000000000000000,0x0000002a400000000,0x0000000010980000,0x00000000016420000},
+ { 0x00000000000005f1,0x000000003f582b086,0x000000000044544c,0x0000000001f8a1d0e,0x0000000000000000,0x000000003f6000000,0x0000000000400000,0x0000000001f900000},
+ { 0x000000000000001e,0x0000000000000c96e,0x0000000000000bda,0x00000000000001463,0x0000000000000000,0x0000000000000c980,0x0000000000000bda,0x00000000000001463},
+ { 0x00000000000000d8,0x0062e11f20b4e154c,0x000000eb3e639947,0x0000f50e035e84048,0x0000000000000000,0x00630000000000000,0x0000000000000000,0x0000f540000000000},
+ { 0x000000005ab2c880,0x0169236388dfdc133,0x0000a0bb75c61eb2,0x0090a71d0dc5e5bce,0x0000000000000000,0x01698000000000000,0x0000000000000000,0x0090c000000000000},
+ { 0x000000000000002f,0x07df0d7d30a548cf3,0x000000000000366e,0x0000000000034b72e,0x0000000000000000,0x07e00000000000000,0x0000000000003000,0x0000000000034c000},
+ { 0x00002ec05f08fd89,0x00002c6116bd851bb,0x000152cff1b04a74,0x000028672e93b8bc8,0x00002e0000000000,0x00002c70000000000,0x0001528000000000,0x00002868000000000},
+ { 0x0000000000000003,0x0003592ce455905b1,0x000000003f7d2f8d,0x000153c2bcdbeb9d5,0x0000000000000000,0x00035a00000000000,0x0000000000000000,0x00015400000000000},
+ { 0x0000000000000046,0x06e06fee2d77fef94,0x0000000000000093,0x00002b4b1fc71667c,0x0000000000000000,0x06e20000000000000,0x0000000000000000,0x00002b50000000000},
+ { 0x000000000000020f,0x004257cda43eedeca,0x000000003b9666db,0x0005145e72a6e2c2e,0x0000000000000000,0x00426000000000000,0x0000000000000000,0x00051600000000000},
+ { 0x000000000000002a,0x0000000007ff2f981,0x00000000000000ac,0x0000000000000033c,0x0000000000000000,0x00000000080000000,0x00000000000000ac,0x0000000000000033c},
+ { 0x0000000000000001,0x00000055db917e083,0x00000000008b2db1,0x00000009b00050169,0x0000000000000000,0x00000055e00000000,0x0000000000000000,0x00000009b40000000},
+ { 0x0000000000003c17,0x0dafa59678748183d,0x0000098bbc9cad7f,0x007b24b09677c726c,0x0000000000000000,0x0db00000000000000,0x0000000000000000,0x007b4000000000000},
+ { 0x0000000000000002,0x000003f2ffca66300,0x0000000000e8d729,0x0000000005356183b,0x0000000000000000,0x000003f3000000000,0x0000000000e00000,0x00000000053600000},
+ { 0x0000000000000004,0x000d47df1d1901b53,0x00000000000000a8,0x00001d81b80308fba,0x0000000000000000,0x000d4800000000000,0x0000000000000000,0x00001d88000000000},
+ { 0x00000000000005aa,0x0002fb83d96f11fd2,0x000004c433cc1977,0x0000005fd2f72ceb3,0x0000000000000000,0x0002fc00000000000,0x000004c400000000,0x0000005fd80000000},
+ { 0x000000000330f117,0x07e80ae79a87fc565,0x000000014ef36b70,0x000000687ecf6e171,0x0000000000000000,0x07ea0000000000000,0x0000000000000000,0x00000068800000000},
+ { 0x000000000021f2d0,0x0000000000642c2f6,0x0000000000908eac,0x00000000000d5537a,0x0000000000200000,0x00000000006440000,0x0000000000908000,0x00000000000d56000},
+ { 0x0000000000000003,0x00026eba07417aa81,0x000000000000001a,0x00000039620189563,0x0000000000000000,0x00026f00000000000,0x0000000000000000,0x00000039700000000},
+ { 0x000000000000000d,0x000000007e8d9d6db,0x00000000042f2ead,0x0000000009ace7bd0,0x0000000000000000,0x000000007ea000000,0x0000000004000000,0x0000000009b000000},
+ { 0x00000000000003e4,0x006d7d0a47e718673,0x00000000fc115b04,0x0002e358f46334076,0x0000000000000000,0x006d8000000000000,0x0000000000000000,0x0002e400000000000},
+ { 0x0000000000000004,0x000000001edf87fe0,0x000000000000000a,0x0000000000000119f,0x0000000000000000,0x000000001ee000000,0x0000000000000008,0x000000000000011a0},
+ { 0x0000000000000001,0x0065da67f7323225a,0x00000000000063a4,0x000000278541631ef,0x0000000000000000,0x0065e000000000000,0x0000000000000000,0x00000027900000000},
+ { 0x000000000000197c,0x00037ff45002083b9,0x000000000000ec31,0x00000000000156ba2,0x0000000000000000,0x00038000000000000,0x000000000000e800,0x00000000000157000},
+ { 0x0000000000006cc5,0x0015a35198413af66,0x0000000000007337,0x000089413e9ba6dbb,0x0000000000000000,0x0015a800000000000,0x0000000000000000,0x00008980000000000},
+ { 0x0000000000000032,0x000003db96818ae35,0x00000000000efdc2,0x0000012b9febeb6d6,0x0000000000000000,0x000003dc000000000,0x0000000000000000,0x0000012c000000000},
+ { 0x0000000000000001,0x00029ab4c85b7b891,0x0000000000006ac9,0x00000000002625508,0x0000000000000000,0x00029b00000000000,0x0000000000000000,0x00000000002630000},
+ { 0x0000000000000035,0x000000001ff651113,0x00000000000182a0,0x00000000000a280ed,0x0000000000000000,0x000000001ff800000,0x0000000000018000,0x00000000000a2c000},
+ { 0x0000000000000004,0x000000472cc9ac140,0x00000000000004f4,0x000000000000cfa00,0x0000000000000000,0x00000047400000000,0x0000000000000400,0x000000000000cfc00},
+ { 0x0000000000000044,0x00001f75fdd2a9846,0x000000000000630f,0x0000009c26f39b295,0x0000000000000000,0x00001f78000000000,0x0000000000000000,0x0000009c400000000},
+ { 0x0000000000000015,0x00000000bcb6343ce,0x0000000000000740,0x0000000021202cbdf,0x0000000000000000,0x00000000bcc000000,0x0000000000000000,0x00000000213000000},
+ { 0x000000000115e794,0x000019f695ab1a45f,0x0000000046805912,0x0000000005419d6d0,0x0000000000000000,0x000019f8000000000,0x0000000046800000,0x000000000541c0000},
+ { 0x0000000000019158,0x00002e3893aab33cd,0x000000002d469c74,0x00000001135604511,0x0000000000000000,0x00002e40000000000,0x0000000028000000,0x00000001138000000},
+ { 0x0000000000010a5b,0x000000dafd82ed136,0x000000001700ea94,0x0000000029485c506,0x0000000000000000,0x000000db000000000,0x0000000017000000,0x00000000295000000},
+ { 0x000000000000000b,0x0000da8c8e1af0062,0x0000000000002735,0x000000000003ca3ad,0x0000000000000000,0x0000dac0000000000,0x0000000000002000,0x000000000003cb000},
+ { 0x0000000037788693,0x09863126792cd978a,0x00000ebe269ade6d,0x000073bb6685871d2,0x0000000000000000,0x09880000000000000,0x00000e0000000000,0x000073c0000000000},
+ { 0x0000000000000021,0x00000033d1af0302c,0x000000568f6aea6b,0x00000032322e16104,0x0000000000000000,0x00000033e00000000,0x0000005600000000,0x00000032400000000},
+ { 0x00000000000a39ed,0x000004c1997a20c96,0x00000092a4d13a1c,0x00000441d3146fbe0,0x0000000000000000,0x000004c2000000000,0x0000008000000000,0x00000442000000000},
+ { 0x0000000000000002,0x00030b2530ac1e5a1,0x000000061b85bc5b,0x000183a3c827796f1,0x0000000000000000,0x00030c00000000000,0x0000000000000000,0x00018400000000000},
+ { 0x00000000000000f9,0x00013ab3621915465,0x0000003718a33112,0x00000036bd0063470,0x0000000000000000,0x00013b00000000000,0x0000003700000000,0x00000036c00000000},
+ { 0x000000000026754d,0x0000e985eefc904da,0x0000000123e509d0,0x000001ed69ca278f7,0x0000000000000000,0x0000e9c0000000000,0x0000000000000000,0x000001ed800000000},
+ { 0x0000000000000004,0x0453e30cd72e836f9,0x000000001f8db050,0x002942d15ffaadf09,0x0000000000000000,0x04540000000000000,0x0000000000000000,0x00295000000000000},
+ { 0x0000000000006715,0x00fa44e8952e9887e,0x00018983f0cd3ac8,0x000b7058844e0986d,0x0000000000000000,0x00fa8000000000000,0x0001800000000000,0x000b7400000000000},
+ { 0x0000000000001fa5,0x0cddaf0ffac935123,0x0000004774b158b0,0x000017f28d867ac80,0x0000000000000000,0x0ce00000000000000,0x0000000000000000,0x000017f8000000000},
+ { 0x000000000100c339,0x00000ecefff8bd29b,0x00000000173b715d,0x00000cf449ce1ab88,0x0000000000000000,0x00000ed0000000000,0x0000000000000000,0x00000cf8000000000},
+ { 0x00000000000000d7,0x000025e1436b0bbcd,0x00000000580c1fdb,0x000000070f9d6c04a,0x0000000000000000,0x000025f0000000000,0x0000000040000000,0x00000007100000000},
+ { 0x000000000000000c,0x00000014b7772a2f9,0x0000000000000038,0x0000000c30b262b42,0x0000000000000000,0x00000014b80000000,0x0000000000000000,0x0000000c340000000},
+ { 0x000000000271e4e7,0x02524fa177ea7c3fb,0x000000a042964bea,0x0027782544cdb549e,0x0000000000000000,0x02530000000000000,0x0000000000000000,0x00278000000000000},
+ { 0x0000000000000085,0x04032c5b865b8bb7d,0x00000000038029cf,0x0000000019f7028c7,0x0000000000000000,0x04040000000000000,0x0000000003800000,0x0000000019f800000},
+ { 0x0000000000000036,0x0000001bb3cc84a02,0x000000000001720a,0x0000000012faf1de5,0x0000000000000000,0x0000001bb80000000,0x0000000000000000,0x00000000130000000},
+ { 0x000000000004c68a,0x000124c77be29a3bc,0x00000000007dd82a,0x0000003190ccf3fee,0x0000000000000000,0x00012500000000000,0x0000000000000000,0x00000031a00000000},
+ { 0x000000000000c294,0x0028ef1a86909157f,0x0000000005401047,0x00000000007862080,0x0000000000000000,0x0028f000000000000,0x0000000005400000,0x00000000007870000},
+ { 0x0000000003005814,0x0006cc4e8bc377120,0x000005bee797760c,0x00007df0230b85a33,0x0000000000000000,0x0006ce00000000000,0x0000040000000000,0x00007e00000000000},
+ { 0x0000000000007a81,0x000508bdb220cdbbe,0x0000000331bc4930,0x0000a7073f3d43357,0x0000000000000000,0x00050a00000000000,0x0000000000000000,0x0000a740000000000},
+ { 0x0000000000000023,0x00044f245d98ee977,0x0000000001795754,0x000024597f31fd009,0x0000000000000000,0x00045000000000000,0x0000000000000000,0x00002460000000000},
+ { 0x000000000000010a,0x0033fbdf23a4c6018,0x0007f1c8d8d269e0,0x00027424c6f36d002,0x0000000000000000,0x00340000000000000,0x0007f00000000000,0x00027480000000000},
+ { 0x0000000000000073,0x00000000f8be8eb0e,0x00000000000000b3,0x000000000000003d1,0x0000000000000000,0x00000000f8c000000,0x00000000000000b3,0x000000000000003d1},
+ { 0x00000000000033b2,0x0bc8ea7ef234b878d,0x0000000000bcb91d,0x0000078b7b951a4a4,0x0000000000000000,0x0bcc0000000000000,0x0000000000000000,0x0000078c000000000},
+ { 0x000000000000007d,0x0000004b92c39038b,0x0000000000010719,0x00000000000e9e828,0x0000000000000000,0x0000004ba00000000,0x0000000000010000,0x00000000000ea0000},
+ { 0x0000000730ab6ee7,0x01e9d5979aae189f7,0x000000b8eb53ed46,0x0000593246bb8750a,0x0000000000000000,0x01ea0000000000000,0x0000000000000000,0x00005940000000000},
+ { 0x0000000000000006,0x001b2f3b72bcecaa8,0x00000000000000cd,0x000000001da9daf7d,0x0000000000000000,0x001b3000000000000,0x0000000000000000,0x000000001db000000},
+ { 0x0000000000476117,0x0009c2e78d177aa51,0x0000000000addd89,0x000000000794bde6a,0x0000000000000000,0x0009c400000000000,0x0000000000a00000,0x00000000079600000},
+ { 0x0000000000000352,0x029d9980fe2a2f424,0x0000000000108c5d,0x00000000c25660367,0x0000000000000000,0x029e0000000000000,0x0000000000000000,0x00000000c28000000},
+ { 0x000000000000000b,0x0000074cb3cdfebba,0x000000000264fdbb,0x0000001842ae53b17,0x0000000000000000,0x0000074e000000000,0x0000000000000000,0x00000018480000000},
+ { 0x00000000000018a3,0x00b8399b475338472,0x0000001c54737bb6,0x00000001d58afb403,0x0000000000000000,0x00b84000000000000,0x0000001c54000000,0x00000001d59000000},
+ { 0x0000000000000249,0x00000000000916853,0x0000000000006a06,0x0000000000008aee5,0x0000000000000000,0x00000000000918000,0x0000000000006800,0x0000000000008b000},
+ { 0x000000000730c349,0x0002bfb4441b1b971,0x0000019a01291be3,0x00004994e6cbe00ab,0x0000000000000000,0x0002c000000000000,0x0000000000000000,0x000049a0000000000},
+ { 0x0000000000000088,0x0a3f6209025ea9c4a,0x00000000016969e4,0x0000000024083dac7,0x0000000000000000,0x0a400000000000000,0x0000000001000000,0x00000000241000000},
+ { 0x00000042f609c622,0x034ccaf639fc9bca7,0x00000049023a6c69,0x0000445d3a3fd26ba,0x0000000000000000,0x034d0000000000000,0x0000000000000000,0x00004460000000000},
+ { 0x0000000000000005,0x000016511c98d6853,0x00000000000000f2,0x000001cbfc05658dc,0x0000000000000000,0x00001658000000000,0x0000000000000000,0x000001cc000000000},
+ { 0x0000000000000003,0x0000015ebabb02c6e,0x0000000000032622,0x00000007f64d58b70,0x0000000000000000,0x0000015f000000000,0x0000000000000000,0x00000007f80000000},
+ { 0x0000000000000773,0x00093042e2a9cd8be,0x00000001264a1ddf,0x000000002ab6b40c8,0x0000000000000000,0x00093400000000000,0x0000000126000000,0x000000002ab800000},
+ { 0x00000003bad2a7d9,0x001ca0e4779a1360d,0x0000001ad0fd7655,0x000000045b377529b,0x0000000000000000,0x001ca800000000000,0x0000001ad0000000,0x000000045c0000000},
+ { 0x000000000027d103,0x05e5f180a569a1dd5,0x000000001453ccaa,0x000000100d2457202,0x0000000000000000,0x05e60000000000000,0x0000000000000000,0x00000010100000000},
+ { 0x000000000000012d,0x00001401bcb0987a8,0x0000000000000226,0x000000007572ea5b7,0x0000000000000000,0x00001408000000000,0x0000000000000000,0x00000000758000000},
+ { 0x00000000000001da,0x099dc5f87ea55acc1,0x00000000000574b0,0x000000000000f2e92,0x0000000000000000,0x09a00000000000000,0x0000000000057400,0x000000000000f3000},
+ { 0x000000000000002e,0x000489ccb4e087fd3,0x00000002310a1245,0x00001d40600f6de7c,0x0000000000000000,0x00048a00000000000,0x0000000000000000,0x00001d48000000000},
+ { 0x000000000010cc1e,0x0002468cfe95bacd8,0x0000006644653265,0x000002baa5a330862,0x0000000000000000,0x00024700000000000,0x0000006000000000,0x000002bb000000000},
+ { 0x000000000000014d,0x003681b3a3cdffb4b,0x0052642261756bb4,0x0006568d7366a0c10,0x0000000000000000,0x00369000000000000,0x0052600000000000,0x00065700000000000},
+ { 0x000000000000f3fc,0x0015da2684bf51f4d,0x00000000242eae97,0x00000002244787e18,0x0000000000000000,0x0015e000000000000,0x0000000020000000,0x00000002250000000},
+ { 0x0000000000610932,0x0002db215a6cbd475,0x000000003a31a2ec,0x000000000dbae1dbc,0x0000000000000000,0x0002dc00000000000,0x000000003a000000,0x000000000dbc00000},
+ { 0x000000000000077a,0x00000323ac7e37cba,0x0000000000001f62,0x00000000acef84e65,0x0000000000000000,0x00000324000000000,0x0000000000000000,0x00000000ad0000000},
+ { 0x000000000f9cc533,0x01dfae9eb0b4bb947,0x00000000714b0410,0x00000c1fa5ff21901,0x0000000000000000,0x01e00000000000000,0x0000000000000000,0x00000c20000000000},
+ { 0x000000000f04e706,0x07ead5c6b32d6b15b,0x0000008bc8d31072,0x0000014d9eaff5c72,0x0000000000000000,0x07ec0000000000000,0x0000008800000000,0x0000014e000000000},
+ { 0x0000000000035327,0x00001a499f3be263d,0x0000000000091bff,0x0000000007758c98f,0x0000000000000000,0x00001a50000000000,0x0000000000000000,0x00000000077600000},
+ { 0x0000000000000002,0x0002bdca229c023bd,0x0000000000000003,0x000000c5f35bcee4b,0x0000000000000000,0x0002be00000000000,0x0000000000000000,0x000000c6000000000},
+ { 0x00000000000000b5,0x000075596de2b5dd0,0x00000000000d0a7e,0x00000000000784df9,0x0000000000000000,0x00007560000000000,0x00000000000d0000,0x00000000000786000},
+ { 0x000000000000166d,0x000084175a91b1c8a,0x000000001782ba82,0x000002d723050258d,0x0000000000000000,0x00008440000000000,0x0000000000000000,0x000002d8000000000},
+ { 0x00000000000417c9,0x006af50d5e704cd8a,0x0000013b7732e8eb,0x0001a4cd08f3b6f4f,0x0000000000000000,0x006b0000000000000,0x0000000000000000,0x0001a500000000000},
+ { 0x00000000000d69fd,0x000019c15846114b5,0x00000000001992dd,0x0000101af43bf4905,0x0000000000000000,0x000019c8000000000,0x0000000000000000,0x00001020000000000},
+ { 0x000000000014a514,0x03a3957dd1961080c,0x00012eb290f09fee,0x00009fed94aeb8180,0x0000000000000000,0x03a40000000000000,0x00012c0000000000,0x0000a000000000000},
+ { 0x00000000000001f8,0x0347c18108a72a124,0x0000000000202d9e,0x00000000008b2aa3b,0x0000000000000000,0x03480000000000000,0x0000000000200000,0x00000000008b40000},
+ { 0x00000000000026f1,0x00000825aa5ef5a49,0x000000000001941f,0x000003b7af434dc71,0x0000000000000000,0x00000828000000000,0x0000000000000000,0x000003b8000000000},
+ { 0x0000000000000c7e,0x000007532b01ccfe0,0x0000000000012ebf,0x000000004b38bcc41,0x0000000000000000,0x00000754000000000,0x0000000000000000,0x000000004b4000000},
+ { 0x0000000000003719,0x0025a273da3add610,0x0000000000014af4,0x000000022f31215d4,0x0000000000000000,0x0025b000000000000,0x0000000000000000,0x00000002300000000},
+ { 0x000000000000000a,0x00010244c14bff73a,0x0000000000087abf,0x0000000136b09d4d9,0x0000000000000000,0x00010280000000000,0x0000000000000000,0x00000001370000000},
+ { 0x000000000000052d,0x006f0118346a64b12,0x001b69476109320d,0x00288105b20f55875,0x0000000000000000,0x006f2000000000000,0x001b000000000000,0x00289000000000000},
+ { 0x000000000000000d,0x0000145eabca07d1b,0x0000000012c93fac,0x00000078c4a4412f1,0x0000000000000000,0x00001460000000000,0x0000000000000000,0x00000078e00000000},
+ { 0x000000000000001d,0x000000000ec061bba,0x000000000000bda3,0x0000000000000e7f4,0x0000000000000000,0x000000000ec400000,0x000000000000bda0,0x0000000000000e800},
+ { 0x000000000017bc27,0x0000144e9453b436d,0x0000000000cba0e3,0x00000008fa45803bc,0x0000000000000000,0x00001450000000000,0x0000000000000000,0x00000008fc0000000},
+ { 0x000000000000018e,0x00048369d8487ec6a,0x000000dc8954600b,0x000000c2b76c6163e,0x0000000000000000,0x00048400000000000,0x000000dc00000000,0x000000c2c00000000},
+ { 0x00000000001c0bf9,0x0100f9a25c143ef25,0x00000002195bdd2d,0x0000141c5d1d5f86a,0x0000000000000000,0x01010000000000000,0x0000000000000000,0x00001420000000000},
+ { 0x0000000000001b7c,0x0fbf014ff278a0517,0x0000006e90e28611,0x0005b4829b889b1a4,0x0000000000000000,0x0fc00000000000000,0x0000000000000000,0x0005b600000000000},
+ { 0x0000000000000317,0x00000017c4c4d7de0,0x0000000000564e96,0x000000001c6d9c622,0x0000000000000000,0x00000017c80000000,0x0000000000000000,0x000000001c7000000},
+ { 0x0000000006766a6c,0x001c6e5a4e2f57c6c,0x000000006e264210,0x0000022be2d5b8a9a,0x0000000000000000,0x001c7000000000000,0x0000000000000000,0x0000022c000000000},
+ { 0x000000002083b47d,0x041d0771ac37d21d8,0x0000000076c6dc91,0x000003998ab5c12f9,0x0000000000000000,0x041e0000000000000,0x0000000000000000,0x0000039a000000000},
+ { 0x0000000000000451,0x000000279d81cebfb,0x00000000006cc1bc,0x00000000928434353,0x0000000000000000,0x00000027a00000000,0x0000000000000000,0x0000000092c000000},
+ { 0x000000000000351e,0x008ce9381dce7c200,0x000001f4fc5ae762,0x00000dd049b3aaec6,0x0000000000000000,0x008d0000000000000,0x000001c000000000,0x00000dd4000000000},
+ { 0x0000000000675a04,0x00004ce78819bf865,0x0000000008bab4d1,0x000000002b4ee5887,0x0000000000000000,0x00004d00000000000,0x0000000008000000,0x000000002b5000000},
+ { 0x0000000000000084,0x0000017451311864c,0x0000000000022a92,0x0000000000655e51d,0x0000000000000000,0x00000174800000000,0x0000000000020000,0x00000000006560000},
+ { 0x0000000000001756,0x0000000006fddccf7,0x0000000000012e5a,0x000000000011eb093,0x0000000000000000,0x0000000006fe00000,0x0000000000010000,0x000000000011f0000},
+ { 0x0000000000000003,0x000173b6469efefbf,0x00000063cf7b162b,0x0000d50d776c92a96,0x0000000000000000,0x00017400000000000,0x0000000000000000,0x0000d540000000000},
+ { 0x000000000005009d,0x0000000001cb30d67,0x00000000027d21c8,0x00000000016b234a9,0x0000000000000000,0x0000000001cb80000,0x0000000002780000,0x00000000016b80000},
+ { 0x000031114e499847,0x0386a4681b853af25,0x00de59fe9d74ea1d,0x00be6159017e94d1f,0x0000000000000000,0x03870000000000000,0x00dc000000000000,0x00be8000000000000},
+ { 0x000000000000014f,0x000c0d7a42e83670c,0x0000000000005500,0x000002ecad9af76d1,0x0000000000000000,0x000c1000000000000,0x0000000000000000,0x000002ed000000000},
+ { 0x0000000000000065,0x0000000000011fcd9,0x00000000000011e4,0x00000000000064e3d,0x0000000000000000,0x00000000000120000,0x0000000000001000,0x00000000000065000},
+ { 0x0000000000000004,0x00001232238cc43de,0x000000000000006a,0x00000001a8f747921,0x0000000000000000,0x00001238000000000,0x0000000000000000,0x00000001a90000000},
+ { 0x0000000000004809,0x000000000145af391,0x000000000000aa04,0x000000000000d6d54,0x0000000000000000,0x00000000014600000,0x000000000000a800,0x000000000000d7000},
+ { 0x000000000000004b,0x01167318c5958ba2f,0x000000000000f042,0x0000000114c851ba4,0x0000000000000000,0x01168000000000000,0x0000000000000000,0x00000001150000000},
+ { 0x000000000000003a,0x01059ce8d4e9090cc,0x000000000000bea0,0x000000000000b37fd,0x0000000000000000,0x01060000000000000,0x000000000000bc00,0x000000000000b3800},
+ { 0x000000000000001a,0x022d12703126bc759,0x00000000000000f3,0x0000000f9c2683cc1,0x0000000000000000,0x022e0000000000000,0x0000000000000000,0x0000000fa00000000},
+ { 0x000000000000000f,0x00709e00ad62afe20,0x0000000000023aa4,0x00000038bc9f14b47,0x0000000000000000,0x0070a000000000000,0x0000000000000000,0x00000038c00000000},
+ { 0x0000000000000006,0x000001e6c83e5be8d,0x0000001cfe43d3d1,0x0000000e455e9b42c,0x0000000000000000,0x000001e7000000000,0x0000001cc0000000,0x0000000e480000000},
+ { 0x0000000000000029,0x000f042c545bedc9b,0x000000000000003b,0x000000000012893dc,0x0000000000000000,0x000f0800000000000,0x0000000000000000,0x00000000001290000},
+ { 0x000000000000cf04,0x08ebecc688a43f5b8,0x000a05ef295529f8,0x0006439f2813ce482,0x0000000000000000,0x08ec0000000000000,0x000a000000000000,0x00064400000000000},
+ { 0x000000000000346f,0x01bbc8d3885081700,0x00000000643da837,0x00000000a8e8b9217,0x0000000000000000,0x01bc0000000000000,0x0000000064000000,0x00000000a90000000},
+ { 0x0000000000000ebd,0x0056b6542675df086,0x000007d08d7036f9,0x0000367745fd41b5b,0x0000000000000000,0x0056c000000000000,0x0000070000000000,0x00003680000000000},
+ { 0x0000000000000017,0x001e1b44658a34029,0x000000000000056a,0x000e99823fb7000f4,0x0000000000000000,0x001e2000000000000,0x0000000000000000,0x000e9c00000000000},
+ { 0x0000000000000160,0x0417e47e0fd88f14e,0x000000000000c924,0x000000000016b0970,0x0000000000000000,0x04180000000000000,0x0000000000008000,0x000000000016b8000},
+ { 0x00000000000555cb,0x03b9ab2ac1a2b3525,0x000000009b28fe55,0x000000078695fd50e,0x0000000000000000,0x03ba0000000000000,0x0000000080000000,0x00000007880000000},
+ { 0x0000000000001520,0x00000834eaa1af0a3,0x0000000000011607,0x00000000002f3876c,0x0000000000000000,0x00000838000000000,0x0000000000010000,0x00000000002f40000},
+ { 0x00000000000035c5,0x01b25b79723f90a65,0x0000184dc5228db8,0x000005c7932d493f9,0x0000000000000000,0x01b28000000000000,0x0000184000000000,0x000005c8000000000},
+ { 0x00000000000001b0,0x000b4cdd9539e02dc,0x0000000005404b9e,0x0000067d36b6ad1fd,0x0000000000000000,0x000b5000000000000,0x0000000000000000,0x0000067e000000000},
+ { 0x00000000003abd4a,0x0002af7662fbb4592,0x0000000001d7e30f,0x0000161efcf0a599e,0x0000000000000000,0x0002b000000000000,0x0000000000000000,0x00001620000000000},
+ { 0x0000000000000003,0x006dea5e3db66dfe3,0x000000ed467602cc,0x000034ee2b88b5963,0x0000000000000000,0x006e0000000000000,0x0000000000000000,0x000034f0000000000},
+ { 0x0000000000000028,0x000758b69f19f3a2c,0x00000558e674d2a6,0x00000058d303f9f26,0x0000000000000000,0x00075a00000000000,0x00000558e0000000,0x00000058d40000000},
+ { 0x0000000000000006,0x02388dba5ea096298,0x0000000607968716,0x000040e18b0c19287,0x0000000000000000,0x02390000000000000,0x0000000000000000,0x00004100000000000},
+ { 0x000000000000041c,0x002bbb0e327a6dee2,0x00000000002451f0,0x00262d3f3ee9d7e76,0x0000000000000000,0x002bc000000000000,0x0000000000000000,0x00263000000000000},
+ { 0x0000000000000014,0x00138af52ed40c357,0x0000000153f3bf08,0x0000000810c5c2741,0x0000000000000000,0x00139000000000000,0x0000000140000000,0x00000008120000000},
+ { 0x000000000000006a,0x00396d0dfab08a86d,0x000000041b434878,0x000ea78143855fc2a,0x0000000000000000,0x00397000000000000,0x0000000000000000,0x000ea800000000000},
+ { 0x000000000003d89c,0x00000000f563bd9e4,0x000000006a46d8b4,0x000000001bea8464c,0x0000000000000000,0x00000000f58000000,0x000000006a000000,0x000000001bf000000},
+ { 0x00000002251084d6,0x0007c0d31f85d1c74,0x000000da0125ada4,0x000001993730f24bd,0x0000000000000000,0x0007c200000000000,0x000000d800000000,0x00000199800000000},
+ { 0x000000000333cf8f,0x000000038061d9975,0x00000019a7cc6230,0x00000001cf1d38459,0x0000000000000000,0x00000003810000000,0x00000019a7000000,0x00000001cf2000000},
+ { 0x000000000000541e,0x00ad254523e8435a6,0x0003a2dcbda58e38,0x00032c9d47d660631,0x0000000000000000,0x00ad4000000000000,0x0003a00000000000,0x00032d00000000000},
+ { 0x000000000000ee8e,0x00002141252d78668,0x00000000091bd261,0x0000000e87ce72237,0x0000000000000000,0x00002150000000000,0x0000000000000000,0x0000000e880000000},
+ { 0x0000000000000000,0x0000231f061282d06,0x00000000000006a9,0x000000001da91b76a,0x0000000000000000,0x00002320000000000,0x0000000000000000,0x000000001db000000},
+ { 0x0000000000002017,0x0dd79defb14f07ab0,0x00000000000181a4,0x0000000003ae93d87,0x0000000000000000,0x0dd80000000000000,0x0000000000000000,0x0000000003af00000},
+ { 0x0000000000000bbd,0x0000039db2cdd2ad8,0x0000000311824079,0x000000012a1f3e1fa,0x0000000000000000,0x0000039e000000000,0x0000000310000000,0x000000012a4000000},
+ { 0x0000000000002097,0x000001cdb94e902cb,0x000000000037cdc1,0x0000000e6c77a6887,0x0000000000000000,0x000001ce000000000,0x0000000000000000,0x0000000e700000000},
+ { 0x000000000754f074,0x00b7e128c5844d855,0x0003fc7c4ab03529,0x0002b2322b8009cf7,0x0000000000000000,0x00b80000000000000,0x0003f00000000000,0x0002b300000000000},
+ { 0x0000000000000ead,0x0001980cebe9ffecb,0x0000000000055b51,0x00000004fb3978f29,0x0000000000000000,0x00019880000000000,0x0000000000000000,0x00000004fc0000000},
+ { 0x0000000000000042,0x00000039b9ab476f5,0x0000000000027edc,0x0000000000015d04d,0x0000000000000000,0x00000039c00000000,0x0000000000027800,0x0000000000015d800},
+ { 0x0000000000001916,0x000a289a2baff0645,0x00000000000112e0,0x0000000000006435b,0x0000000000000000,0x000a2c00000000000,0x0000000000011200,0x00000000000064400},
+ { 0x000000000000001d,0x0017ecc1e0e712cfa,0x0000000000000107,0x000007a705e7d3817,0x0000000000000000,0x0017f000000000000,0x0000000000000000,0x000007a8000000000},
+ { 0x0000000000000003,0x00004c7426415de07,0x0000000000000027,0x0000000000007050c,0x0000000000000000,0x00004c80000000000,0x0000000000000000,0x00000000000070600},
+ { 0x0000000000d8be4e,0x00399e6ceba1a766b,0x00000000034e98e2,0x000000010f5821d11,0x0000000000000000,0x0039a000000000000,0x0000000000000000,0x000000010f8000000},
+ { 0x0000000000000d82,0x00000003550ad04d2,0x0000000000004254,0x000000003c5dc75fd,0x0000000000000000,0x00000003560000000,0x0000000000000000,0x000000003c6000000},
+ { 0x0000000000000aa7,0x02c936c2761955d29,0x000000000000627e,0x00000000002dab8c3,0x0000000000000000,0x02ca0000000000000,0x0000000000000000,0x00000000002db0000},
+ { 0x00000000000337f0,0x0064c69296ca0f886,0x000000000032069d,0x0000000f24b5fd64d,0x0000000000000000,0x0064e000000000000,0x0000000000000000,0x0000000f280000000},
+ { 0x000000000000ddc8,0x000022a55f452d159,0x0000000bc3289603,0x0000000ab3a6fc552,0x0000000000000000,0x000022b0000000000,0x0000000bc0000000,0x0000000ab40000000},
+ { 0x0000000000000f90,0x0009080b122be6e98,0x00000000cda697e4,0x0000199aeee2b23d2,0x0000000000000000,0x00090c00000000000,0x0000000000000000,0x000019a0000000000},
+ { 0x000000009bf93e63,0x00000097678555845,0x00000001854b7912,0x0000001172abeb846,0x0000000000000000,0x00000097800000000,0x0000000180000000,0x00000011780000000},
+ { 0x00000000fd1e168c,0x00c65024e96ef70a0,0x00000161dcbb847d,0x000d12bfd0a34d00e,0x0000000000000000,0x00c68000000000000,0x0000000000000000,0x000d1400000000000},
+ { 0x0000000000000258,0x002c0b99a54e06270,0x0000000000355934,0x00000186c7cde50d3,0x0000000000000000,0x002c1000000000000,0x0000000000000000,0x00000187000000000},
+ { 0x0000000000000006,0x00741a1fb75e95bff,0x0000000000000078,0x000000fd644e64156,0x0000000000000000,0x00742000000000000,0x0000000000000000,0x000000fd800000000},
+ { 0x0000000000000005,0x00000b38e1dfeae67,0x000000000008606b,0x0000000000019bee9,0x0000000000000000,0x00000b3c000000000,0x0000000000086000,0x0000000000019c000},
+ { 0x0000000000000004,0x000000000000631b7,0x0000000000000010,0x0000000000000013e,0x0000000000000000,0x00000000000063200,0x0000000000000010,0x0000000000000013e},
+ { 0x0000000000000014,0x0004b3ad3c4c1c6fb,0x000000009636d20f,0x00032256d32ce7a5e,0x0000000000000000,0x0004b400000000000,0x0000000000000000,0x00032300000000000},
+ { 0x000000000000be26,0x00ab3f62052fa47d9,0x0000000000fdcca7,0x000cd3f94fcbbfb61,0x0000000000000000,0x00ab4000000000000,0x0000000000000000,0x000cd400000000000},
+ { 0x0000000000000439,0x000010f7fe1448dc7,0x00000000003846ba,0x0000000001a84644d,0x0000000000000000,0x000010f8000000000,0x0000000000380000,0x0000000001a880000},
+ { 0x000000000000000c,0x00000000012ada0bc,0x0000000000000046,0x000000000000000fb,0x0000000000000000,0x00000000012b00000,0x0000000000000046,0x000000000000000fb},
+ { 0x000000000001ad07,0x0000000003c3d277e,0x000000000008064e,0x00000000037a47b49,0x0000000000000000,0x0000000003c400000,0x0000000000000000,0x00000000037b00000},
+ { 0x00000000d758d640,0x00e60d8c074e1005f,0x0000001fb1a4eb55,0x00000b0bd2f45c5e4,0x0000000000000000,0x00e64000000000000,0x0000000000000000,0x00000b0c000000000},
+ { 0x0000000fcb126507,0x007573e51f8bf1dad,0x0120ef9f3e9dfa6b,0x00715315e1ebf7d07,0x0000000000000000,0x00758000000000000,0x0120000000000000,0x00716000000000000},
+ { 0x00000000000103b0,0x000001cc35cfbe833,0x000000000287568c,0x0000004ef56e71f00,0x0000000000000000,0x000001cc800000000,0x0000000000000000,0x0000004f000000000},
+ { 0x0000000000010ea4,0x00000000076340330,0x0000000000675451,0x00000000003448de9,0x0000000000000000,0x00000000076400000,0x0000000000670000,0x00000000003450000},
+ { 0x0000000000000019,0x0004a170f280212e2,0x0000000000000e98,0x00000929cfc2f3f26,0x0000000000000000,0x0004a200000000000,0x0000000000000000,0x0000092c000000000},
+ { 0x000000000000009e,0x00000002e0422191c,0x0000000000191975,0x00000000000dd56ad,0x0000000000000000,0x00000002e10000000,0x0000000000190000,0x00000000000dd8000},
+ { 0x0000000000000001,0x01eff2c23994b8086,0x000000098c5d8e2e,0x000022445c1e8897c,0x0000000000000000,0x01f00000000000000,0x0000000000000000,0x00002250000000000},
+ { 0x00000000000000e3,0x00000000004f87b66,0x0000000000000113,0x00000000003cf1a19,0x0000000000000000,0x00000000004fa0000,0x0000000000000000,0x00000000003d00000},
+ { 0x0000000000080d1f,0x0001af1498cbafa79,0x000000bd207a095b,0x00000713f24cd293b,0x0000000000000000,0x0001af80000000000,0x000000a000000000,0x00000714000000000},
+ { 0x0000000000187ff9,0x0003886672d70244a,0x00000000039bd466,0x00000e1d1f49fb217,0x0000000000000000,0x00038900000000000,0x0000000000000000,0x00000e20000000000},
+ { 0x0000006f95e80743,0x0745ad5e70cf62fd6,0x00000200f05fbbd7,0x0005b9ae60fb11fea,0x0000000000000000,0x07460000000000000,0x0000000000000000,0x0005ba00000000000},
+ { 0x0000000000000055,0x01c212c1ffd23debf,0x000000000062d4fa,0x0000000000205428c,0x0000000000000000,0x01c28000000000000,0x0000000000628000,0x00000000002058000},
+ { 0x0000000000000000,0x0000000000001a5ec,0x0000000000000044,0x00000000000000493,0x0000000000000000,0x0000000000001a600,0x0000000000000044,0x00000000000000493},
+ { 0x0000000007efc273,0x0067ca9f0e7c41a9f,0x0000000047e89503,0x000000028a803c47f,0x0000000000000000,0x0067e000000000000,0x0000000040000000,0x000000028b0000000},
+ { 0x0000000000002fc9,0x000000927dbcd116b,0x0000000000007c4a,0x00000025fe5cbe75e,0x0000000000000000,0x00000092800000000,0x0000000000000000,0x00000026000000000},
+ { 0x000000026396ede3,0x002d1e9ed55658ecc,0x000000031055af94,0x00000ef6ec60328b3,0x0000000000000000,0x002d2000000000000,0x0000000000000000,0x00000ef8000000000},
+ { 0x0000000000000029,0x0006d65f68a290930,0x000000000000004b,0x0000000120cfffc30,0x0000000000000000,0x0006d800000000000,0x0000000000000000,0x00000001210000000},
+ { 0x0000000000b7680b,0x00a532aaf12ca5f84,0x00000067aed79b7f,0x0049a69fcc93ff53c,0x0000000000000000,0x00a54000000000000,0x0000000000000000,0x0049c000000000000},
+ { 0x00000000000001ce,0x04e8c29c943bf7959,0x00026ae22dd3423c,0x00e3720f6c3e8d71d,0x0000000000000000,0x04ea0000000000000,0x0000000000000000,0x00e38000000000000},
+ { 0x00000000010e5e2f,0x000001aad35b530e3,0x0000000019ff701d,0x000000000a7cdd0f6,0x0000000000000000,0x000001ab000000000,0x0000000019c00000,0x000000000a8000000},
+ { 0x0000000004d4328f,0x0e109262cb246cf49,0x0000000089e62b6b,0x00014394b414b8b6d,0x0000000000000000,0x0e140000000000000,0x0000000000000000,0x00014400000000000},
+ { 0x0000000000000fa7,0x000000770254a09e8,0x0000000000158665,0x00000002d6fb1e87e,0x0000000000000000,0x00000077200000000,0x0000000000000000,0x00000002d70000000},
+ { 0x000000000023659e,0x0000116892c7d9229,0x000000000fc01d9e,0x000000130051873f1,0x0000000000000000,0x00001170000000000,0x0000000000000000,0x00000013080000000},
+ { 0x000000000000030c,0x078406d3cfe304b1a,0x0000000148170eaf,0x000000c75c1409c8d,0x0000000000000000,0x07860000000000000,0x0000000000000000,0x000000c7800000000},
+ { 0x000000006838c5af,0x000001ef69a0981a9,0x00000b32d3f0d595,0x000001ae1034badc4,0x0000000000000000,0x000001ef800000000,0x00000b3000000000,0x000001ae400000000},
+ { 0x000000000000000c,0x000000001945cbf2e,0x000000000000013c,0x0000000001f8f2383,0x0000000000000000,0x00000000194800000,0x0000000000000000,0x0000000001f900000},
+ { 0x0000000000810067,0x0000002414285c08d,0x00000000fdf09fb2,0x0000000084484c59f,0x0000000000000000,0x00000024200000000,0x00000000fc000000,0x00000000846000000},
+ { 0x00000000a7a4e2e7,0x0003af86c1976f359,0x0000009a784bb105,0x0000155bb59200969,0x0000000000000000,0x0003b000000000000,0x0000008000000000,0x00001560000000000},
+ { 0x0000000008d541a7,0x02d6e98829b4b073a,0x0040f281c0017b16,0x024331675b46a7fe7,0x0000000000000000,0x02d70000000000000,0x0040000000000000,0x02440000000000000},
+ { 0x0000000000000001,0x0018cea394827697c,0x0000000000000006,0x00000000000010541,0x0000000000000000,0x0018d000000000000,0x0000000000000000,0x00000000000010580},
+ { 0x0000000000000006,0x00000b885eb953529,0x0000000000000026,0x0000000d5bf467722,0x0000000000000000,0x00000b8c000000000,0x0000000000000000,0x0000000d5c0000000},
+ { 0x0000000007047251,0x0153b971cb4149d64,0x000000006e2a1ec3,0x0000000a166ac6c6e,0x0000000000000000,0x01540000000000000,0x0000000040000000,0x0000000a180000000},
+ { 0x000000000001714c,0x0000000111702cccb,0x0000000007499f08,0x00000000028679da2,0x0000000000000000,0x00000001118000000,0x0000000007400000,0x00000000028700000},
+ { 0x0000000000feb8b5,0x000079e70496388a8,0x00000000afad10c6,0x0000000060a1aac0d,0x0000000000000000,0x00007a00000000000,0x00000000ae000000,0x0000000060c000000},
+ { 0x0000000000000106,0x019a00435ebfca73e,0x0000000000080762,0x0000000000059cdb7,0x0000000000000000,0x019a8000000000000,0x0000000000080000,0x0000000000059e000},
+ { 0x0000470fda6020dc,0x0016a8b804bf81a4d,0x0007485d744d88a1,0x0002d76279f06ba3e,0x0000000000000000,0x0016b000000000000,0x0007400000000000,0x0002d800000000000},
+ { 0x0000000000000044,0x00008db98ad5db558,0x00000000000005ac,0x000000017f15641ba,0x0000000000000000,0x00008dc0000000000,0x0000000000000000,0x000000017f8000000},
+ { 0x000000000003e56b,0x0000bb63369377afb,0x000000002f8f3c4f,0x00001601fb53d545b,0x0000000000000000,0x0000bb80000000000,0x0000000000000000,0x00001608000000000},
+ { 0x00000000005b6165,0x00001644448a060d9,0x0000262009fac65a,0x000006580b9067d9a,0x0000000000000000,0x00001648000000000,0x0000262000000000,0x00000659000000000},
+ { 0x0000000000000006,0x0000000000001e6d7,0x000000000000002e,0x0000000000000dcaf,0x0000000000000000,0x0000000000001e700,0x0000000000000000,0x0000000000000dcc0},
+ { 0x0000000000000961,0x00001d85e13d44140,0x000000000b49f535,0x000000000886e8e1b,0x0000000000000000,0x00001d88000000000,0x000000000b400000,0x00000000088800000},
+ { 0x0000000000000113,0x000000000001704c4,0x0000000000000a2d,0x0000000000001e869,0x0000000000000000,0x00000000000170800,0x0000000000000a00,0x0000000000001e880},
+ { 0x0000000004a976ad,0x000000a658eddb934,0x000000007ae63dfc,0x000000000c597d273,0x0000000000000000,0x000000a6800000000,0x000000007ae00000,0x000000000c5a00000},
+ { 0x0000000000017896,0x00020bc081a3ba3a9,0x00000000034c60a9,0x00000005c08cfa4dc,0x0000000000000000,0x00020c00000000000,0x0000000000000000,0x00000005c20000000},
+ { 0x0000000022b385b6,0x00006883768e5e6f1,0x000000010ce892b0,0x000000007f195ce6c,0x0000000000000000,0x000068a0000000000,0x000000010c000000,0x000000007f2000000},
+ { 0x000000000006c22c,0x00186f5ab9f3d2b5a,0x0000000ed659c86b,0x000000c2e9f069202,0x0000000000000000,0x00187000000000000,0x0000000c00000000,0x000000c3000000000},
+ { 0x00000000000000ea,0x0004663d28e4e06b0,0x00005377802784c0,0x000007b602a1bcebe,0x0000000000000000,0x00046800000000000,0x0000537000000000,0x000007b7000000000},
+ { 0x00000000000002d2,0x0315d526545b38f05,0x00000000000007eb,0x000000009a11f4088,0x0000000000000000,0x03160000000000000,0x0000000000000000,0x000000009a4000000},
+ { 0x00000000000182ba,0x00069e981ecff8e38,0x00000000064fa56a,0x00000000006d5a5bb,0x0000000000000000,0x0006a000000000000,0x00000000064f8000,0x00000000006d5c000},
+ { 0x00000000000000c7,0x06ff656681339c17c,0x00000000000000c9,0x0000193c9cb8b27e1,0x0000000000000000,0x07000000000000000,0x0000000000000000,0x00001940000000000},
+ { 0x0000000000000242,0x0000002b7e01c246f,0x0000000000000c6f,0x000000000000ab0f0,0x0000000000000000,0x0000002b800000000,0x0000000000000c00,0x000000000000ab400},
+ { 0x0000000000005850,0x00009f22746f1e14f,0x00000000000836d3,0x00000001f5ad1c48c,0x0000000000000000,0x00009f40000000000,0x0000000000000000,0x00000001f60000000},
+ { 0x000000000000002f,0x0fad96537f3beb34d,0x00000000000002fb,0x011289051b3785455,0x0000000000000000,0x0fb00000000000000,0x0000000000000000,0x01130000000000000},
+ { 0x0000000000000001,0x00061eac7b09ce7d2,0x000000000000004a,0x00000000000004d2c,0x0000000000000000,0x00062000000000000,0x0000000000000040,0x00000000000004d40},
+ { 0x000000000000003e,0x004e128c947401861,0x00000000001d3a22,0x0000000bed3f1d66e,0x0000000000000000,0x004e2000000000000,0x0000000000000000,0x0000000bf00000000},
+ { 0x000000000000000d,0x000060f054ebd639b,0x000000000000003e,0x00000000000112b0d,0x0000000000000000,0x00006100000000000,0x0000000000000000,0x00000000000113000},
+ { 0x00000000000094ac,0x0000000ee6b99682a,0x000000000b2b01de,0x0000000b53ef9a8eb,0x0000000000000000,0x0000000ee80000000,0x0000000000000000,0x0000000b540000000},
+ { 0x0000000000000006,0x000002d65436f3635,0x0000000000006d14,0x000000000001c797a,0x0000000000000000,0x000002d7000000000,0x0000000000006800,0x000000000001c8000},
+ { 0x0000000000000006,0x000000000fd2ac991,0x00000000000f242d,0x000000000037b842d,0x0000000000000000,0x000000000fd400000,0x00000000000f0000,0x000000000037c0000},
+ { 0x000000000000000b,0x000003140ea744c61,0x0000000000000ca8,0x00000000811d98d22,0x0000000000000000,0x00000315000000000,0x0000000000000000,0x00000000814000000},
+ { 0x000000000012936f,0x0000075a87eeb1b24,0x0000001292102ca6,0x0000003f2e661d443,0x0000000000000000,0x0000075c000000000,0x0000001200000000,0x0000003f300000000},
+ { 0x000000000021c1db,0x001f873d578b673f2,0x0000000098a18fd4,0x0006156e33cc8791e,0x0000000000000000,0x001f8800000000000,0x0000000000000000,0x00061600000000000},
+ { 0x0000000000000038,0x000136545676e1ff5,0x000000002f7a6bd9,0x0000042d80f4928f7,0x0000000000000000,0x00013680000000000,0x0000000000000000,0x0000042e000000000},
+ { 0x00000000000000ad,0x00126f0ceff124993,0x0000029722d6e730,0x0001e900e489cfb84,0x0000000000000000,0x00127000000000000,0x0000000000000000,0x0001e980000000000},
+ { 0x00000000000000c8,0x0111ad018260d32c8,0x0000000b2d87e1c1,0x00000792b1539933a,0x0000000000000000,0x01120000000000000,0x0000000000000000,0x00000794000000000},
+ { 0x0000000000000005,0x053870a61a92fe55c,0x000000b3aacb055b,0x0000001b5343e6043,0x0000000000000000,0x053a0000000000000,0x000000b380000000,0x0000001b580000000},
+ { 0x000000000c259776,0x0000037ff313557ba,0x000000007fbea69d,0x000000183b4b9ba47,0x0000000000000000,0x00000380000000000,0x0000000000000000,0x00000018400000000},
+ { 0x000000c5cc0879ad,0x0248c9eb592ee3b5d,0x000030a73e6cc0e2,0x001ba6e50b1ff3af2,0x0000000000000000,0x02490000000000000,0x0000000000000000,0x001ba800000000000},
+ { 0x00000000000001f6,0x00000111d50727938,0x000000007d690f88,0x00000003871346659,0x0000000000000000,0x00000112000000000,0x0000000070000000,0x00000003880000000},
+ { 0x0000000000000055,0x00001cb867c97131a,0x0000000000000079,0x0000001807c075c84,0x0000000000000000,0x00001cc0000000000,0x0000000000000000,0x00000018080000000},
+ { 0x0000000005d32dfd,0x0000179047d4d09a6,0x0000000008dacb93,0x000002baa4567a3eb,0x0000000000000000,0x00001798000000000,0x0000000000000000,0x000002bb000000000},
+ { 0x0000000000000078,0x013a0e19ad66dd9d6,0x00000000000001eb,0x00278658c22554d24,0x0000000000000000,0x013a8000000000000,0x0000000000000000,0x00279000000000000},
+ { 0x0000000000006b48,0x00068a7fbd81ff2ff,0x0000028eb0a66905,0x00001d6c19b020fc4,0x0000000000000000,0x00068c00000000000,0x0000028000000000,0x00001d70000000000},
+ { 0x0000000000000001,0x0000d9ac75a34afea,0x0000000000000931,0x0000002bd5cc53cee,0x0000000000000000,0x0000d9c0000000000,0x0000000000000000,0x0000002be00000000},
+ { 0x0000000000000573,0x0000c760dce2961a7,0x000000000001d110,0x0000000000e03d036,0x0000000000000000,0x0000c780000000000,0x0000000000000000,0x0000000000e040000},
+ { 0x0000000000a72cbe,0x000000f41140af7b7,0x0000000000f4e52d,0x000000016ee610b33,0x0000000000000000,0x000000f4400000000,0x0000000000000000,0x000000016f0000000},
+ { 0x0000000000000bdd,0x000000238b3bea82d,0x000000000000d6a5,0x00000000003e858ac,0x0000000000000000,0x00000023900000000,0x0000000000000000,0x00000000003e90000},
+ { 0x0000000000436d36,0x00049e1e1ce1b6b0e,0x0000019f93179584,0x000000f48899c7a94,0x0000000000000000,0x0004a000000000000,0x0000019c00000000,0x000000f4c00000000},
+ { 0x000000000030faee,0x0000005b77efc1f10,0x00000000004e462b,0x000000002f0557b74,0x0000000000000000,0x0000005b800000000,0x0000000000000000,0x000000002f1000000},
+ { 0x0000000000000000,0x000000055baad41e1,0x0000000000000006,0x000000000f380d474,0x0000000000000000,0x000000055c0000000,0x0000000000000000,0x000000000f3c00000},
+ { 0x0000000000000000,0x000030563686dfefb,0x00000000372e25ad,0x000000000b434cf70,0x0000000000000000,0x00003060000000000,0x0000000037200000,0x000000000b4400000},
+ { 0x0000000000000002,0x0000000011f46a345,0x0000000000000003,0x000000000000002a7,0x0000000000000000,0x0000000011f800000,0x0000000000000003,0x000000000000002a7},
+ { 0x000000001935d8ed,0x00002f1a168a40791,0x00000002a3caebcf,0x000000068a6c1c3b2,0x0000000000000000,0x00002f20000000000,0x00000002a0000000,0x000000068c0000000},
+ { 0x0000000000000320,0x0000b863d5b936087,0x000000000000361e,0x00000000000005ccb,0x0000000000000000,0x0000b880000000000,0x0000000000003610,0x00000000000005cd0},
+ { 0x000000000007335d,0x001f6abdabe74d861,0x00000029a1ba6af7,0x00000127b61ff5498,0x0000000000000000,0x001f7000000000000,0x0000002800000000,0x00000128000000000},
+ { 0x000000000000a817,0x0043a6fecc86a846f,0x000000000d777b75,0x0000003850094dcbd,0x0000000000000000,0x0043c000000000000,0x0000000000000000,0x00000038600000000},
+ { 0x00000000005588ca,0x00000035a77df4397,0x0000000ae89a9739,0x00000018974736b26,0x0000000000000000,0x00000035b00000000,0x0000000a80000000,0x00000018980000000},
+ { 0x0000000000000000,0x0008afeb5b121d6de,0x00070eea994d7e79,0x00026dfecb82610b7,0x0000000000000000,0x0008b000000000000,0x0007080000000000,0x00026e00000000000},
+ { 0x000000000000001b,0x01750098c202cbdef,0x0000000000000247,0x00000df64fcda0d41,0x0000000000000000,0x01758000000000000,0x0000000000000000,0x00000df8000000000},
+ { 0x000000000000000b,0x000000036a61a6522,0x0000000000000012,0x00000000000000396,0x0000000000000000,0x000000036b0000000,0x0000000000000012,0x00000000000000396},
+ { 0x0000000000000044,0x0000cd379bcdd9df6,0x0000000000000064,0x000000000105140ff,0x0000000000000000,0x0000cd40000000000,0x0000000000000000,0x00000000010580000},
+ { 0x0000000000000288,0x00000063d16fcb948,0x00000000000053a2,0x00000000000bf16a0,0x0000000000000000,0x00000063e00000000,0x0000000000004000,0x00000000000bf4000},
+ { 0x0000000000000035,0x06af2e939b1f83147,0x00000000000005e0,0x00000000001f8bad8,0x0000000000000000,0x06b00000000000000,0x0000000000000000,0x00000000001f90000},
+ { 0x000000000006c615,0x0000000014290ffe2,0x000000000331e1f2,0x0000000000dc76923,0x0000000000000000,0x00000000143000000,0x0000000003300000,0x0000000000dc80000},
+ { 0x0000000000024c50,0x00783b6ca7a060a0d,0x0000003bf56366ab,0x000196870c4153505,0x0000000000000000,0x00784000000000000,0x0000000000000000,0x00019700000000000},
+ { 0x0000000000000000,0x00000000b58069197,0x00000000000a934c,0x000000000003b4b68,0x0000000000000000,0x00000000b5c000000,0x00000000000a9000,0x000000000003b5000},
+ { 0x0000000000048713,0x000000000289a0d6c,0x000000000447ed41,0x00000000007ad5913,0x0000000000000000,0x00000000028a00000,0x0000000004470000,0x00000000007ae0000},
+ { 0x00000000000002ff,0x0000000eb4ffd504c,0x0000000000052b27,0x00000000028d599cb,0x0000000000000000,0x0000000eb80000000,0x0000000000000000,0x00000000028e00000},
+ { 0x0000000000000072,0x0000070c3aef2e6c2,0x0000000000006775,0x0000000001938df8c,0x0000000000000000,0x0000070e000000000,0x0000000000000000,0x00000000019400000},
+ { 0x000000000612f6bf,0x0cc4ae3c8f3f16e3e,0x0000006aedda05b6,0x00003d83c37aad004,0x0000000000000000,0x0cc80000000000000,0x0000000000000000,0x00003d90000000000},
+ { 0x00000000000008c8,0x0001afb0f32a659cf,0x0000000000012088,0x00000000000033b12,0x0000000000000000,0x0001b000000000000,0x0000000000012000,0x00000000000033c00},
+ { 0x0000000000001099,0x0000305fb9e6aa206,0x000000029d3937a3,0x00000a5e84bc305dd,0x0000000000000000,0x00003060000000000,0x0000000000000000,0x00000a60000000000},
+ { 0x0000000000000003,0x01262ac1ccc0c2d71,0x000000000000070a,0x00000000000000f59,0x0000000000000000,0x01268000000000000,0x000000000000070a,0x00000000000000f59},
+ { 0x000000000001dfa4,0x00000000005faeb17,0x0000000000032163,0x000000000000bea94,0x0000000000000000,0x00000000005fc0000,0x0000000000032000,0x000000000000bec00},
+ { 0x00000000000032b6,0x0000001fdd96c1ae6,0x0000000000021920,0x000000000000264bf,0x0000000000000000,0x0000001fe00000000,0x0000000000021920,0x000000000000264c0},
+ { 0x000000000000002e,0x000003710e202c3a7,0x0000000001f7360b,0x0000001fdcc06dcdb,0x0000000000000000,0x00000372000000000,0x0000000000000000,0x0000001fe00000000},
+ { 0x0000000000000566,0x000000005661ef5c9,0x000000000000baa5,0x000000000320ff273,0x0000000000000000,0x00000000568000000,0x0000000000000000,0x00000000032100000},
+ { 0x0000000000002858,0x0000000001f03b533,0x00000000000c9ff9,0x0000000000315a57a,0x0000000000000000,0x0000000001f080000,0x00000000000c0000,0x00000000003160000},
+ { 0x000000119b2ae004,0x000000f183e055cfe,0x000000198e1ddec5,0x0000006ef926b5a1c,0x0000001000000000,0x000000f1c00000000,0x0000001800000000,0x0000006f000000000},
+ { 0x000000000000000f,0x000527cb1423361fa,0x00000000000009be,0x000009411fca84608,0x0000000000000000,0x00052800000000000,0x0000000000000000,0x00000944000000000},
+ { 0x000000094872751e,0x0000c8d30d9d7af18,0x0000002d7ed34684,0x000032ba1df2942ff,0x0000000000000000,0x0000c900000000000,0x0000000000000000,0x000032c0000000000},
+ { 0x000000024a4ad1f6,0x00005b30759fa6b27,0x00000004a23594cd,0x00000066e899748de,0x0000000000000000,0x00005b40000000000,0x0000000400000000,0x00000067000000000},
+ { 0x0000001b99aed022,0x0051e78ed8ac0d27d,0x00004e1836fde437,0x00000d487c90a9748,0x0000000000000000,0x00520000000000000,0x00004e0000000000,0x00000d4c000000000},
+ { 0x0000000000000f53,0x00000aea224af8556,0x0000000000055862,0x00000003f84f34a06,0x0000000000000000,0x00000aec000000000,0x0000000000000000,0x00000003f90000000},
+ { 0x007887b6021bec45,0x0f0063af80b88074f,0x009197f6d9c03ba4,0x002d23fbfb744fddc,0x0040000000000000,0x0f040000000000000,0x0091000000000000,0x002d3000000000000},
+ { 0x0000000000000012,0x09d014e8820a9403d,0x0000000000000030,0x000000000005cf9a3,0x0000000000000000,0x09d40000000000000,0x0000000000000000,0x000000000005d0000},
+ { 0x000000000672395e,0x0057292174f683b44,0x000000004a90845b,0x00110a3cee6678d51,0x0000000000000000,0x00574000000000000,0x0000000000000000,0x00111000000000000},
+ { 0x000000000000328c,0x0000000000146fe39,0x0000000000249533,0x000000000006efde7,0x0000000000000000,0x00000000001470000,0x0000000000248000,0x000000000006f0000},
+ { 0x0000000000000015,0x00000000076abed50,0x00000000000005b1,0x00000000000006b04,0x0000000000000000,0x00000000076c00000,0x00000000000005a0,0x00000000000006b20},
+ { 0x0000000000000004,0x0003cb6afc563e382,0x0000000005434b3d,0x0000065eaa91fe6c8,0x0000000000000000,0x0003cc00000000000,0x0000000000000000,0x00000660000000000},
+ { 0x0000000000000476,0x018d80e0a093aced0,0x0000000001e3d022,0x00000006e61a182b6,0x0000000000000000,0x018e0000000000000,0x0000000000000000,0x00000006e80000000},
+ { 0x000000000000006c,0x00006303709e90907,0x00000000000000fd,0x00000d46cb3d2b3da,0x0000000000000000,0x00006320000000000,0x0000000000000000,0x00000d48000000000},
+ { 0x0000000000000013,0x00000ff84834dafb9,0x00000000000735f5,0x000000ff8f7f6a89c,0x0000000000000000,0x00000ffc000000000,0x0000000000000000,0x000000ffc00000000},
+ { 0x0000000000000075,0x0177da9158db4cfaf,0x000ddef787cde5ac,0x000151a94760b0218,0x0000000000000000,0x01780000000000000,0x000dde0000000000,0x000151c0000000000},
+ { 0x000000000000019f,0x000000186e3e53e49,0x000000001408f212,0x00000002781a1ee9d,0x0000000000000000,0x00000018700000000,0x0000000010000000,0x00000002790000000},
+ { 0x00000000000014cd,0x0006135e8de71a4b7,0x0000000000170b87,0x000000000092e86bd,0x0000000000000000,0x00061400000000000,0x0000000000140000,0x00000000009300000},
+ { 0x000000000f976431,0x001fbb49cead8d0fd,0x00000000faf4870f,0x00000015f6c0dd860,0x0000000000000000,0x001fc000000000000,0x0000000080000000,0x00000015f80000000},
+ { 0x000000000002aa7f,0x0000032681ae085a0,0x00000024e031a663,0x000000e890926c4ea,0x0000000000000000,0x00000327000000000,0x0000002400000000,0x000000e8c00000000},
+ { 0x0000000000000002,0x000409090e1d49bd9,0x0000000000000123,0x000011d8debce7eaa,0x0000000000000000,0x00040a00000000000,0x0000000000000000,0x000011e0000000000},
+ { 0x0000000000000006,0x027920ce755bcdb8a,0x0000000000039507,0x00005c1d9a00fbf7a,0x0000000000000000,0x027a0000000000000,0x0000000000000000,0x00005c20000000000},
+ { 0x00000000a935e0b9,0x0002b6310d91f407e,0x0000006ee2a9584c,0x000000077d44f2a56,0x0000000000000000,0x0002b700000000000,0x0000006ee0000000,0x000000077d8000000},
+ { 0x0000000000000000,0x000ddb987393b29fb,0x000000000000002c,0x000000000000dcb66,0x0000000000000000,0x000ddc00000000000,0x0000000000000000,0x000000000000dcc00},
+ { 0x000000000054e018,0x000000527adfe7fb0,0x0000000000fc5073,0x00000000015df3e74,0x0000000000000000,0x00000052800000000,0x0000000000f80000,0x00000000015e00000},
+ { 0x0000000000000011,0x00004182a7e03444f,0x00000000000000c4,0x000001df0c3d4bee5,0x0000000000000000,0x000041a0000000000,0x0000000000000000,0x000001df800000000},
+ { 0x00000000000f1dbf,0x000151c29142caf46,0x00000000000fb46d,0x000000008136509a2,0x0000000000000000,0x00015200000000000,0x0000000000000000,0x00000000814000000},
+ { 0x00000000000007d3,0x000000baf0e3ba3e5,0x0000000000002395,0x00000000014a64e57,0x0000000000000000,0x000000bb000000000,0x0000000000000000,0x00000000014a80000},
+ { 0x0000000000752908,0x000000016dcb9b59c,0x0000000019fb36a1,0x000000000786270f3,0x0000000000000000,0x000000016e0000000,0x0000000019e00000,0x00000000078800000},
+ { 0x000000000000028c,0x0134a27ecd57bbc8f,0x0000000006609e12,0x0000f61f63f3ec0ad,0x0000000000000000,0x01350000000000000,0x0000000000000000,0x0000f640000000000},
+ { 0x000000000000001b,0x009cd616bccd98ec8,0x0000000001477221,0x0000092a54017de20,0x0000000000000000,0x009d0000000000000,0x0000000000000000,0x0000092c000000000},
+ { 0x0000000106233121,0x0d828adcfa2133f8f,0x00000007b2502d5f,0x00000032d42336175,0x0000000000000000,0x0d840000000000000,0x0000000700000000,0x00000032e00000000},
+ { 0x0000000000000022,0x00000026853b9f859,0x00000000000eabfa,0x000000004350107b7,0x0000000000000000,0x00000026900000000,0x0000000000000000,0x00000000436000000},
+ { 0x0000000000000747,0x01a0db6480167aa1f,0x0000000000001eb8,0x00000000000111e84,0x0000000000000000,0x01a10000000000000,0x0000000000001800,0x00000000000112000},
+ { 0x0000000000000119,0x00000b916c4dd1b19,0x0000000000448a28,0x00000006fc69c1153,0x0000000000000000,0x00000b94000000000,0x0000000000000000,0x00000006fe0000000},
+ { 0x00000014893ce494,0x02d63f0d09ac216d1,0x0000024cdbb641c7,0x000fdd6d75be0e239,0x0000000000000000,0x02d70000000000000,0x0000000000000000,0x000fe000000000000},
+ { 0x0000000027090aa9,0x0000648a97516388f,0x0000018ec4b9cd6b,0x0000002b52af8c7d5,0x0000000000000000,0x000064a0000000000,0x0000018e80000000,0x0000002b580000000},
+ { 0x0000000000000226,0x000002e0d0d0a8f4a,0x0000000001234384,0x000000001a58d6031,0x0000000000000000,0x000002e1000000000,0x0000000001000000,0x000000001a6000000},
+ { 0x000000002d1beff5,0x001f93eaa978d7f3a,0x000000083b3fff75,0x000000066a0da2b35,0x0000000000000000,0x001f9800000000000,0x0000000820000000,0x000000066c0000000},
+ { 0x0000000001e62792,0x0002f32a26dd1a94b,0x000000001bd69fff,0x0000002f74918ae40,0x0000000000000000,0x0002f400000000000,0x0000000000000000,0x0000002f800000000},
+ { 0x000000e7e3dbd018,0x000014e2e80f1c4fa,0x00001cd30c9044b1,0x00000d9ce841c3580,0x0000008000000000,0x000014e8000000000,0x00001cc000000000,0x00000da0000000000},
+ { 0x00000000000064f1,0x000000b546049889e,0x000000000bdf9513,0x0000000000ee71977,0x0000000000000000,0x000000b5800000000,0x000000000bdf0000,0x0000000000ee80000},
+ { 0x00000000000005ba,0x000078e25386e8f4a,0x00000000000006ba,0x000000000000047c8,0x0000000000000000,0x00007900000000000,0x00000000000006a0,0x000000000000047e0},
+ { 0x000000000454e48f,0x0007b3b92ade109c6,0x0000000afa6bf208,0x00000017141931c1d,0x0000000000000000,0x0007b400000000000,0x0000000a80000000,0x00000017180000000},
+ { 0x00000000000d2778,0x00027436e0fac5eed,0x00000077ada7031d,0x0002497c80fd083cf,0x0000000000000000,0x00027500000000000,0x0000000000000000,0x00024a00000000000},
+ { 0x000000000705f5bc,0x0d5ee7d027808f9b7,0x0000000018b9610d,0x0000041bbea1e53c7,0x0000000000000000,0x0d600000000000000,0x0000000000000000,0x0000041c000000000},
+ { 0x0000000000000031,0x0000022b152f3d09b,0x00000000012b3123,0x00000007091da519e,0x0000000000000000,0x0000022c000000000,0x0000000000000000,0x000000070a0000000},
+ { 0x00000000095d5c99,0x0000335b87a7cd1c7,0x0000000028017fed,0x00000012c737aeabc,0x0000000000000000,0x00003360000000000,0x0000000000000000,0x00000012c80000000},
+ { 0x00000000003a9430,0x000000003e2b02867,0x000000000f8f98a8,0x000000000596a9d3e,0x0000000000000000,0x000000003e3000000,0x000000000f800000,0x00000000059800000},
+ { 0x0000000000001657,0x00000000904d6f11a,0x00000000000522ff,0x0000000000013f008,0x0000000000000000,0x00000000908000000,0x0000000000052000,0x0000000000013f400},
+ { 0x0000000000000002,0x00000030eb8a3190c,0x00000000007a93b8,0x0000000000137fcf0,0x0000000000000000,0x00000030f00000000,0x00000000007a8000,0x00000000001380000},
+ { 0x00000000000067b9,0x0106391c270d816fa,0x0000000035b8f39a,0x00000000254930d1f,0x0000000000000000,0x01068000000000000,0x0000000035000000,0x00000000255000000},
+ { 0x00000000000492f6,0x000000003f04aa3cf,0x000000000f138664,0x000000000e6b7fe5c,0x0000000000000000,0x000000003f1000000,0x000000000f000000,0x000000000e6c00000},
+ { 0x000000000000000f,0x0001624102d764caa,0x0000000000000034,0x0000000d35cb88ebe,0x0000000000000000,0x00016280000000000,0x0000000000000000,0x0000000d380000000},
+ { 0x00000000c55554a5,0x0000011b1c8021f6c,0x00000002200cf5ea,0x00000115bd17e3602,0x0000000000000000,0x0000011b800000000,0x0000000000000000,0x00000116000000000},
+ { 0x0000000000000017,0x00003c47f209e3ea5,0x00000003d0878cf3,0x00000000ce6e9c470,0x0000000000000000,0x00003c50000000000,0x00000003d0000000,0x00000000ce8000000},
+ { 0x00000000000001d0,0x0b4e555ea8051d317,0x00000000000036fb,0x00001af171d1222aa,0x0000000000000000,0x0b500000000000000,0x0000000000000000,0x00001af8000000000},
+ { 0x000000000000475f,0x000000fb8e14a7671,0x000000000001de3e,0x000000036037e6c92,0x0000000000000000,0x000000fbc00000000,0x0000000000000000,0x00000003610000000},
+ { 0x0000000000000005,0x00003ddbb55d26b42,0x000000000018cd03,0x00000000387531363,0x0000000000000000,0x00003de0000000000,0x0000000000000000,0x00000000388000000},
+ { 0x0000000000000754,0x000075ee5fdf9f2eb,0x0000000000eed19c,0x00003a0aaf2a0cd76,0x0000000000000000,0x00007600000000000,0x0000000000000000,0x00003a10000000000},
+ { 0x000000000000001f,0x00000f92e698d60c3,0x0000000000005177,0x0000000057a4ce97e,0x0000000000000000,0x00000f94000000000,0x0000000000000000,0x0000000057c000000},
+ { 0x00000000016e1098,0x0054dccddb581e468,0x000054c1ea1df586,0x000193d720eef35a9,0x0000000000000000,0x0054e000000000000,0x0000500000000000,0x00019400000000000},
+ { 0x0000000000000003,0x0120f010d2a5b642f,0x00000000000007f4,0x0000001dfc21049e9,0x0000000000000000,0x01210000000000000,0x0000000000000000,0x0000001e000000000},
+ { 0x000000000000000d,0x0b7e81cfc56ad158f,0x0000000000000010,0x00000000000000017,0x0000000000000000,0x0b800000000000000,0x0000000000000010,0x00000000000000017},
+ { 0x000000000000005e,0x0004ed31d72c22be5,0x00000000000003f0,0x000000000071e6c96,0x0000000000000000,0x0004ee00000000000,0x0000000000000000,0x00000000007200000},
+ { 0x0000000000000a00,0x000063d15a645e53e,0x0000000098bb3843,0x00000025e445fd44a,0x0000000000000000,0x000063e0000000000,0x0000000000000000,0x00000025f00000000},
+ { 0x0000000084bbee11,0x0ab21eab31802d3c0,0x00000002087c84a0,0x0000118f89dd45777,0x0000000000000000,0x0ab40000000000000,0x0000000000000000,0x00001190000000000},
+ { 0x0000000000000003,0x024aa8de43d5ee218,0x0000000174f4dc61,0x0000000288a1c02c9,0x0000000000000000,0x024b0000000000000,0x0000000170000000,0x00000002890000000},
+ { 0x00000000000002c5,0x0b36a074191bc18ae,0x000000000e29a30b,0x00b4769b527059e08,0x0000000000000000,0x0b380000000000000,0x0000000000000000,0x00b48000000000000},
+ { 0x0000000000005d2c,0x0000165dce82afb28,0x00000032d078394f,0x000004e5b6203423c,0x0000000000000000,0x00001660000000000,0x0000002000000000,0x000004e6000000000},
+ { 0x000000077a26093e,0x001614174180de3a5,0x0003b956b77031c2,0x0000c6b54674eed68,0x0000000000000000,0x00161800000000000,0x0003b80000000000,0x0000c6c0000000000},
+ { 0x0000000000000002,0x03786d270340be2c4,0x0000000000000019,0x00000001950f1f93b,0x0000000000000000,0x03790000000000000,0x0000000000000000,0x00000001958000000},
+ { 0x0000000000000060,0x00001d202527151a1,0x0000000000000afb,0x000000000000f71f9,0x0000000000000000,0x00001d28000000000,0x0000000000000800,0x000000000000f7400},
+ { 0x0000000000070f0d,0x00034105843697741,0x00000005bad73a93,0x000002db9035b365e,0x0000000000000000,0x00034200000000000,0x0000000000000000,0x000002dc000000000},
+ { 0x0000000000065593,0x081d74b171bf2eb5b,0x00000e4a2c9bc218,0x000cf9148f522c453,0x0000000000000000,0x08200000000000000,0x0000000000000000,0x000cfc00000000000},
+ { 0x0000000000000847,0x00000835690f423ca,0x00000b8d1fd5dac7,0x00000682ae717db06,0x0000000000000000,0x00000838000000000,0x00000b8000000000,0x00000684000000000},
+ { 0x0000000000000714,0x00f7e77cce6870fe9,0x0000000050810182,0x0000001cd616e1198,0x0000000000000000,0x00f80000000000000,0x0000000000000000,0x0000001cd80000000},
+ { 0x000000000000244d,0x00000003767975851,0x0000000000166197,0x00000000003469625,0x0000000000000000,0x00000003770000000,0x0000000000160000,0x00000000003470000},
+ { 0x0000000000000002,0x0000210ec13c4edc9,0x000000000009ffdf,0x000011a202b9ab6da,0x0000000000000000,0x00002110000000000,0x0000000000000000,0x000011a8000000000},
+ { 0x000000005fdfc387,0x00984f3820f22635a,0x0000000303256954,0x0002529411653757c,0x0000000000000000,0x00988000000000000,0x0000000000000000,0x00025300000000000},
+ { 0x00000000000c3c85,0x001dca1009f09ec53,0x0000000000a483c8,0x0000000000788a5bd,0x0000000000000000,0x001dd000000000000,0x0000000000a40000,0x000000000078a0000},
+ { 0x0000000000002a96,0x02574cff90232a564,0x0000001835c91ec0,0x002bbaf8908f4b1bf,0x0000000000000000,0x02580000000000000,0x0000000000000000,0x002bc000000000000},
+ { 0x000000000000057f,0x000033319b8db9a20,0x000000000096a5d3,0x000000001e2ee28aa,0x0000000000000000,0x00003340000000000,0x0000000000800000,0x000000001e3000000},
+ { 0x0000000000000468,0x00029febd0ec0d3d5,0x000000003431c07d,0x00000871228bdb9f3,0x0000000000000000,0x0002a000000000000,0x0000000000000000,0x00000874000000000},
+ { 0x000000000000000a,0x0000000000056b838,0x0000000000000a59,0x000000000000138a5,0x0000000000000000,0x0000000000056c000,0x0000000000000a00,0x00000000000013900},
+ { 0x0000000000000008,0x00003ad63cc95b553,0x00000000005b3843,0x000000000010a8cf5,0x0000000000000000,0x00003ae0000000000,0x00000000005b0000,0x000000000010ac000},
+ { 0x000000000000034f,0x01fb2bec1260d995e,0x0000000f31013fb8,0x000074a1a2a9dfef4,0x0000000000000000,0x01fb8000000000000,0x0000000000000000,0x000074c0000000000},
+ { 0x00000000000a7d1a,0x0000010efcb01cc35,0x000000007d745bcf,0x000000007f266e9e3,0x0000000000000000,0x0000010f000000000,0x000000007c000000,0x000000007f4000000},
+ { 0x00000000d22da2a8,0x000ce01f66c8812b8,0x000001548ae8fd15,0x000020c7a6fc34448,0x0000000000000000,0x000ce400000000000,0x0000010000000000,0x000020d0000000000},
+ { 0x000000000000004e,0x0000013be1fcd4294,0x000000000000007f,0x0000000059b79131e,0x0000000000000000,0x0000013c000000000,0x0000000000000000,0x0000000059c000000},
+ { 0x000000000000000e,0x00000000000300551,0x000000000000001f,0x00000000000000062,0x0000000000000000,0x00000000000301000,0x000000000000001f,0x00000000000000062},
+ { 0x00000000001f1f75,0x00011ea660af04368,0x00000000176b68c7,0x0000000337fa79e8e,0x0000000000000000,0x00011f00000000000,0x0000000010000000,0x00000003380000000},
+ { 0x00000001b156e8f5,0x000058b17e07827a1,0x000010f93fe0e7e0,0x000007576d3a2cf2b,0x0000000000000000,0x000058c0000000000,0x000010e000000000,0x00000758000000000},
+ { 0x00000000015bbca3,0x07c86c28f944d24b0,0x000000c5ea27c710,0x0000000e70f0ba988,0x0000000000000000,0x07ca0000000000000,0x000000c5e0000000,0x0000000e710000000},
+ { 0x0000000000000006,0x00000189df857aa02,0x00000000000133ab,0x000000000001b4d47,0x0000000000000000,0x0000018a000000000,0x0000000000013000,0x000000000001b5000},
+ { 0x00000000007bdbad,0x00000bedbc1c2a7af,0x0000000004657922,0x000000004f427e450,0x0000000000000000,0x00000bf0000000000,0x0000000004000000,0x000000004f6000000},
+ { 0x0000000000000001,0x00140639b0c201240,0x00000000000001fc,0x0000000033356699d,0x0000000000000000,0x00140800000000000,0x0000000000000000,0x00000000334000000},
+ { 0x000000000000005a,0x04ee6910f5f0f1da1,0x0000000000000b47,0x00000000019ed52b1,0x0000000000000000,0x04f00000000000000,0x0000000000000000,0x00000000019f00000},
+ { 0x00000014700ef870,0x000743add088fe2f0,0x0000008e66fbbcf9,0x00000043b4986ab29,0x0000000000000000,0x00074400000000000,0x0000008e00000000,0x00000043c00000000},
+ { 0x000000000004bf9a,0x0b2713bc8b6c9f5ae,0x000000003e2d0afa,0x0001e9cd7b256dd7c,0x0000000000000000,0x0b280000000000000,0x0000000000000000,0x0001ea00000000000},
+ { 0x000000000024de58,0x00006baac9835087e,0x000002db44c855f9,0x0000022c6b7f9170e,0x0000000000000000,0x00006bc0000000000,0x000002d800000000,0x0000022c800000000},
+ { 0x0000000000000cba,0x000333430ef4103f8,0x000000000000a3af,0x00000b29fa0bb1725,0x0000000000000000,0x00033400000000000,0x0000000000000000,0x00000b2c000000000},
+ { 0x00000000000018c1,0x003b17881251a0733,0x000000000000b026,0x0000590916f7e8a8d,0x0000000000000000,0x003b2000000000000,0x0000000000000000,0x00005920000000000},
+ { 0x0000000000000013,0x000000000000dfdad,0x00000000000002ea,0x0000000000000fe3a,0x0000000000000000,0x000000000000e0000,0x00000000000002c0,0x0000000000000fe40},
+ { 0x000000ae43685e6e,0x07f6a8155277fc7a3,0x000000fce64a90df,0x00028649d8b5fc824,0x0000000000000000,0x07f80000000000000,0x0000000000000000,0x00028700000000000},
+ { 0x0000001101c9a09d,0x003890303ed0b5fc6,0x00000149810d19b4,0x000026d8670427d3c,0x0000000000000000,0x0038a000000000000,0x0000010000000000,0x000026e0000000000},
+ { 0x00000000000cd779,0x0001fdb5c14d73473,0x0000000009c75aee,0x0000014012ec42780,0x0000000000000000,0x0001fe00000000000,0x0000000000000000,0x00000140800000000},
+ { 0x0000000000000009,0x0b2624ba45ab853b2,0x000000000000002a,0x0000001fe8a5d56a5,0x0000000000000000,0x0b280000000000000,0x0000000000000000,0x0000001ff00000000},
+ { 0x0000000000000002,0x00000346c57ff530f,0x000000000000000f,0x00000000000065bee,0x0000000000000000,0x00000347000000000,0x0000000000000000,0x00000000000065c00},
+ { 0x00000000000dfad1,0x003062a60f62dec3e,0x0000327ee8572512,0x00008e75b32ed47d8,0x0000000000000000,0x00307000000000000,0x0000300000000000,0x00008e80000000000},
+ { 0x000000000000003d,0x000000001bd436a86,0x00000000000000ce,0x0000000000002c0ef,0x0000000000000000,0x000000001bd800000,0x0000000000000000,0x0000000000002c100},
+ { 0x0000000000064091,0x0000000311654d396,0x00000000001e091b,0x000000000007d0fd5,0x0000000000000000,0x00000003120000000,0x00000000001e0000,0x000000000007d2000},
+ { 0x000000000007ce23,0x000001c83cc870c1c,0x0000000003f38156,0x0000000006bbf25f9,0x0000000000000000,0x000001c8800000000,0x0000000003e00000,0x0000000006bc00000},
+ { 0x0000000000000004,0x0000000c7b444de53,0x0000000000005044,0x00000000000007bd4,0x0000000000000000,0x0000000c7c0000000,0x0000000000005040,0x00000000000007be0},
+ { 0x000000000000001a,0x00af5a6d3b3911dec,0x00000000001d5339,0x0000000000eec3945,0x0000000000000000,0x00af8000000000000,0x00000000001c0000,0x0000000000ef00000},
+ { 0x00000000000018d6,0x0016f763a96da9423,0x000000000079920a,0x00000000027492986,0x0000000000000000,0x0016f800000000000,0x0000000000700000,0x00000000027500000},
+ { 0x00000000000535f2,0x003df1a1d296f9bbd,0x00000004a016aeaa,0x0000000aa87abfddb,0x0000000000000000,0x003e0000000000000,0x0000000480000000,0x0000000aac0000000},
+ { 0x0000000000000003,0x000002654e8010b3f,0x0000000000004d94,0x00000002ec5bc7352,0x0000000000000000,0x00000266000000000,0x0000000000000000,0x00000002ed0000000},
+ { 0x0000000000000243,0x00000007126554637,0x000000000039911b,0x00000004fc927cb7f,0x0000000000000000,0x00000007140000000,0x0000000000000000,0x00000004fe0000000},
+ { 0x000000016971b643,0x000bed7dc2af4e74e,0x00000008b256598d,0x00000008f70180f8b,0x0000000000000000,0x000bf000000000000,0x0000000880000000,0x00000008f80000000},
+ { 0x000000000000289f,0x00000021ffa381fff,0x0000000000006e9d,0x0000000000089b3b5,0x0000000000000000,0x00000022000000000,0x0000000000004000,0x0000000000089c000},
+ { 0x000000000286cbac,0x0000605bdccd82152,0x0000000012c19882,0x00004fe6d5d312f20,0x0000000000000000,0x00006060000000000,0x0000000000000000,0x00005000000000000},
+ { 0x0000000006aff9ef,0x0773fcf4f7f45a96d,0x0000f5bde52a684a,0x000fdfdf9a01a773f,0x0000000000000000,0x07740000000000000,0x0000c00000000000,0x000fe000000000000},
+ { 0x00000000021dd453,0x000a5a10fb3216699,0x000000005ed975c4,0x000002c38e8387e0c,0x0000000000000000,0x000a5c00000000000,0x0000000000000000,0x000002c4000000000},
+ { 0x000000010c8d53aa,0x00000cac6fa080e1c,0x0000026c8cb3005e,0x0000058123bdf9ece,0x0000000000000000,0x00000cb0000000000,0x0000026000000000,0x00000582000000000},
+ { 0x0000000000000009,0x00002f8abc3ae40b1,0x0000000000000426,0x00000003168421883,0x0000000000000000,0x00002f90000000000,0x0000000000000000,0x00000003170000000},
+ { 0x000000000000001c,0x0edcf2927b9a2f51d,0x000000000003068a,0x0000000006fb3a856,0x0000000000000000,0x0ee00000000000000,0x0000000000000000,0x0000000006fc00000},
+ { 0x000000000003e594,0x000003a132b175525,0x000000000012d020,0x00000000085d4727c,0x0000000000000000,0x000003a2000000000,0x0000000000000000,0x00000000086000000},
+ { 0x0000000000002fcf,0x000a4d7fd1d9ed535,0x0000000000006835,0x00000367f57bcefa0,0x0000000000000000,0x000a5000000000000,0x0000000000000000,0x00000368000000000},
+ { 0x0000000000000000,0x0000018f5390d64b2,0x0000000000076364,0x0000000000007fd2d,0x0000000000000000,0x0000018f800000000,0x0000000000076340,0x0000000000007fd40},
+ { 0x0000000000000036,0x000000043a7b8d787,0x000000000000049f,0x000000000001d2e40,0x0000000000000000,0x000000043c0000000,0x0000000000000000,0x000000000001d3000},
+ { 0x0000000000000002,0x0000a959868eb4528,0x0000000da18c0d62,0x000002dcfd2097356,0x0000000000000000,0x0000a980000000000,0x0000000000000000,0x000002dd000000000},
+ { 0x00000001d083f955,0x00184e39e4b218fa9,0x00000001e4bc69f1,0x000011abbad2b75e1,0x0000000000000000,0x00185000000000000,0x0000000000000000,0x000011b0000000000},
+ { 0x0000000000000e81,0x000000000131e6daf,0x0000000000b54b9e,0x00000000005c4b98d,0x0000000000000000,0x00000000013200000,0x0000000000b40000,0x00000000005c60000},
+ { 0x0000000000000000,0x000048e9e93d962a5,0x0000000000001772,0x00000000000029303,0x0000000000000000,0x00004900000000000,0x0000000000001700,0x00000000000029400},
+ { 0x0000000000001ed2,0x0013a71ae74baa310,0x0000000096d71bbb,0x000036866dc9a915f,0x0000000000000000,0x0013a800000000000,0x0000000000000000,0x00003690000000000},
+ { 0x000000000000002c,0x000000006e3eabbe9,0x0000000000001c0e,0x000000000991cfbb0,0x0000000000000000,0x000000006e4000000,0x0000000000000000,0x00000000099400000},
+ { 0x0000000000000006,0x00000000003cc8e73,0x0000000000000013,0x000000000000000eb,0x0000000000000000,0x00000000003cd0000,0x0000000000000013,0x000000000000000eb},
+ { 0x000000000004a042,0x003c94859438cbf6a,0x000000000008d376,0x000000005fe4ba9ef,0x0000000000000000,0x003ca000000000000,0x0000000000000000,0x00000000600000000},
+ { 0x0000000000000470,0x00e5e63108793850d,0x000000063ed2f148,0x00065df6a9f00b4db,0x0000000000000000,0x00e60000000000000,0x0000000000000000,0x00065e00000000000},
+ { 0x0000000000000038,0x0055f61a6381ade1c,0x000000000000009f,0x0000014eca37ef19f,0x0000000000000000,0x00560000000000000,0x0000000000000000,0x0000014f000000000},
+ { 0x00000000000023a7,0x05baa6a757461437d,0x000079b428265e84,0x000017bf17847ca78,0x0000000000000000,0x05bc0000000000000,0x0000798000000000,0x000017c0000000000},
+ { 0x0000000000000003,0x003c8ec53e6b0fe65,0x00000144acf60e53,0x00064f13bf5002a19,0x0000000000000000,0x003c9000000000000,0x0000000000000000,0x00065000000000000},
+ { 0x00000000000002c2,0x00000000005b04ce5,0x0000000000014cdb,0x0000000000013f012,0x0000000000000000,0x00000000005b20000,0x0000000000014800,0x0000000000013f800},
+ { 0x0000000000000027,0x0039613dd557698ea,0x0000000000001055,0x000000000002e3d92,0x0000000000000000,0x00397000000000000,0x0000000000001000,0x000000000002e4000},
+ { 0x0000000000000067,0x00000000060f5ee26,0x00000000002c059f,0x0000000000043c35d,0x0000000000000000,0x00000000061000000,0x00000000002c0000,0x0000000000043c800},
+ { 0x000000000000096a,0x000000000041220de,0x00000000001c9f41,0x00000000003c14595,0x0000000000000000,0x00000000004140000,0x00000000001c0000,0x00000000003c20000},
+ { 0x0000000000000002,0x000000000003e8686,0x0000000000000004,0x00000000000000185,0x0000000000000000,0x000000000003e9000,0x0000000000000004,0x00000000000000185},
+ { 0x0000000062a9f663,0x0017e9ce3f8bdcf01,0x00000013fbcf16b3,0x000003f7ba86c1356,0x0000000000000000,0x0017f000000000000,0x0000001000000000,0x000003f8000000000},
+ { 0x00000000000000a8,0x000076d4833b7fbf8,0x000000000006eb47,0x0000000000747c6ef,0x0000000000000000,0x000076e0000000000,0x0000000000060000,0x00000000007480000},
+ { 0x0000000000000f2d,0x002cce0bf47f0d993,0x0000000000003530,0x002c90c046b626ec3,0x0000000000000000,0x002cd000000000000,0x0000000000000000,0x002ca000000000000},
+ { 0x0000000000000000,0x00000de517f87954c,0x0000000391868f40,0x0000000a7599b6985,0x0000000000000000,0x00000de8000000000,0x0000000380000000,0x0000000a780000000},
+ { 0x000000000000000c,0x000001978fb0a50a5,0x0000068b03fa9838,0x0000006add2ab20d8,0x0000000000000000,0x00000198000000000,0x0000068b00000000,0x0000006ade0000000},
+ { 0x0000000000000027,0x00253668581369ca3,0x0000000000007eac,0x0000019aacd4513d6,0x0000000000000000,0x00254000000000000,0x0000000000000000,0x0000019b000000000},
+ { 0x000000007629c10e,0x02fa6b10f2793a666,0x000000009e83210c,0x0000fee31abbf644a,0x0000000000000000,0x02fb0000000000000,0x0000000000000000,0x0000ff00000000000},
+ { 0x0000000000000e6e,0x0000004ba2536067d,0x0000000000001a8e,0x000000000002eb140,0x0000000000000000,0x0000004bc00000000,0x0000000000001000,0x000000000002ec000},
+ { 0x0000000000000000,0x0000016b4ca15f626,0x0000000000000236,0x000000000f9bcddd8,0x0000000000000000,0x0000016b800000000,0x0000000000000000,0x000000000f9c00000},
+ { 0x0000000000000005,0x0000bb3988eaa91f3,0x0000000000000053,0x0000005ded75a8efc,0x0000000000000000,0x0000bb40000000000,0x0000000000000000,0x0000005e000000000},
+ { 0x00000000000029af,0x00003cd1f9c0a4722,0x00000000024ffe71,0x00000275a04bde290,0x0000000000000000,0x00003ce0000000000,0x0000000000000000,0x00000276000000000},
+ { 0x00000000000352eb,0x0000001f6fe49044c,0x0000000000a0f218,0x000000123b90a5f7b,0x0000000000000000,0x0000001f700000000,0x0000000000000000,0x00000012400000000},
+ { 0x0000000000000019,0x013a6b36ca95821b0,0x000000000003f510,0x0000000d447e6d98b,0x0000000000000000,0x013a8000000000000,0x0000000000000000,0x0000000d480000000},
+ { 0x0000000000000006,0x00000000065231fb5,0x0000000000037810,0x0000000000065fd2b,0x0000000000000000,0x00000000065400000,0x0000000000036000,0x00000000000660000},
+ { 0x000000001410391f,0x0000007274dabcc4a,0x0000001f51d4d919,0x000000717d1f9e0cf,0x0000000000000000,0x00000072800000000,0x0000001e00000000,0x00000071800000000},
+ { 0x000000000000000f,0x07ba59810c45ac762,0x00000003c976ea95,0x000007b89963da13d,0x0000000000000000,0x07bc0000000000000,0x0000000000000000,0x000007ba000000000},
+ { 0x000000000028d6f5,0x002c6d33b780c3b83,0x00000000012bbdf6,0x000000001fa191323,0x0000000000000000,0x002c7000000000000,0x0000000001000000,0x000000001fa800000},
+ { 0x0000000000000002,0x000000000001c551b,0x00000000000007b6,0x0000000000013ff32,0x0000000000000000,0x000000000001c5800,0x0000000000000000,0x00000000000140000},
+ { 0x000000000265c603,0x0000620062229cbe5,0x000000002979e411,0x00000001ff7df7e30,0x0000000000000000,0x00006220000000000,0x0000000028000000,0x00000001ff8000000},
+ { 0x0000000001e95ab0,0x00f016c014127743e,0x000000b8e7e82c26,0x0000001d3828a8678,0x0000000000000000,0x00f04000000000000,0x000000b880000000,0x0000001d400000000},
+ { 0x0000000000000002,0x0000a5884bbcc91c6,0x00000000000012cf,0x0000000000000b8a1,0x0000000000000000,0x0000a5c0000000000,0x00000000000012c0,0x0000000000000b8c0},
+ { 0x0000000000000086,0x000137b375eda82d0,0x0000000000002246,0x0000000006e967a35,0x0000000000000000,0x00013800000000000,0x0000000000000000,0x0000000006ea00000},
+ { 0x000000000000fce0,0x000000f8cae946a20,0x0000000000032221,0x00000000048d5da57,0x0000000000000000,0x000000f9000000000,0x0000000000000000,0x00000000048e00000},
+ { 0x000000000003c6da,0x073fcdb42fb0c52a7,0x00000000001e72c7,0x000000007b17d16b1,0x0000000000000000,0x07400000000000000,0x0000000000000000,0x000000007b2000000},
+ { 0x0000000080988565,0x00009c3ff35ccb4bd,0x000000088449273a,0x00000b73d25ef4b1f,0x0000000000000000,0x00009c40000000000,0x0000000000000000,0x00000b74000000000},
+ { 0x0000000000000012,0x00012d32753e0ad98,0x0000000000c8c210,0x0000002bbe36b3142,0x0000000000000000,0x00012d80000000000,0x0000000000000000,0x0000002bc00000000},
+ { 0x0000000000001ef5,0x00000000368a7d019,0x00000000004d67ca,0x00000000007e1a6de,0x0000000000000000,0x00000000369000000,0x00000000004c0000,0x00000000007e20000},
+ { 0x0000000000000272,0x00013b15a3d3f1dc5,0x000000fff265ffc5,0x0000039d8e3b5ad86,0x0000000000000000,0x00013b80000000000,0x000000f000000000,0x0000039e000000000},
+ { 0x0000000000016efb,0x000006f71215e040d,0x0000000008a91c95,0x000000000a315472f,0x0000000000000000,0x000006f8000000000,0x0000000008800000,0x000000000a3400000},
+ { 0x000000000000005f,0x00000004a3efbb905,0x0000000000003945,0x00000000000007b72,0x0000000000000000,0x00000004a40000000,0x0000000000003940,0x00000000000007b80},
+ { 0x00000000030b17b7,0x03c9e8f310b4c9360,0x0000d23922d69c30,0x00001ac7073ec4324,0x0000000000000000,0x03ca0000000000000,0x0000d20000000000,0x00001ac8000000000},
+ { 0x000000017eaaa04b,0x00ae87119b4cb7a0d,0x000036294b464d39,0x000207d5501f32d73,0x0000000000000000,0x00aec000000000000,0x0000300000000000,0x00020800000000000},
+ { 0x0000000000001d24,0x0000002a2294fdd05,0x0000000000013808,0x0000000000a94def4,0x0000000000000000,0x0000002a300000000,0x0000000000000000,0x0000000000a980000},
+ { 0x0000000000024659,0x000127cd4c0f95399,0x0000001ef1262425,0x000000050a3508df1,0x0000000000000000,0x00012800000000000,0x0000001ef0000000,0x000000050b0000000},
+ { 0x0000000000000055,0x0000000125eae33de,0x000000000005c265,0x0000000124bc17e64,0x0000000000000000,0x00000001260000000,0x0000000000000000,0x00000001250000000},
+ { 0x0000000000000e28,0x002e19f7173951ad4,0x000000000023d654,0x000037de12f605620,0x0000000000000000,0x002e2000000000000,0x0000000000000000,0x000037e0000000000},
+ { 0x0000000000000000,0x03ab9548fcc08e36a,0x00000001bedee6a0,0x000dbbc0c6195cc33,0x0000000000000000,0x03ac0000000000000,0x0000000000000000,0x000dbc00000000000},
+ { 0x000000000a796917,0x01988fb116bb778f2,0x00001796e425dfb1,0x00005a4693f66f9b0,0x0000000000000000,0x01990000000000000,0x0000160000000000,0x00005a60000000000},
+ { 0x0000000000000186,0x000000006ce2a3a77,0x000000000812d67d,0x0000000008cab5390,0x0000000000000000,0x000000006d0000000,0x0000000008000000,0x0000000008cc00000},
+ { 0x000000000000009f,0x0000015a509e5f990,0x0000000000001895,0x0000002be0f9ada06,0x0000000000000000,0x0000015a800000000,0x0000000000000000,0x0000002bf00000000},
+ { 0x000000000003b9dc,0x00000000291b6fddd,0x000000001c1c4019,0x00000000036587b77,0x0000000000000000,0x00000000292000000,0x000000001c180000,0x00000000036600000},
+ { 0x0000000000000001,0x000001f18dc2bd607,0x000000000000070d,0x00000000042fd1df9,0x0000000000000000,0x000001f2000000000,0x0000000000000000,0x00000000043000000},
+ { 0x0000000e125aa25f,0x0001972be3aacead2,0x0000096f3d88cb02,0x000004b31992f9bca,0x0000000000000000,0x00019780000000000,0x0000096000000000,0x000004b4000000000},
+ { 0x00000000000011d8,0x0000031692b1f884e,0x000000001a1a2603,0x0000005cdecaf757e,0x0000000000000000,0x00000317000000000,0x0000000000000000,0x0000005ce00000000},
+ { 0x0000000000000007,0x0000005741a091ae7,0x0000000000000433,0x000000000001759dc,0x0000000000000000,0x00000057600000000,0x0000000000000000,0x00000000000176000},
+ { 0x000000000000009c,0x000000785ce0d438c,0x00000000000000f3,0x00000000311ad590f,0x0000000000000000,0x00000078600000000,0x0000000000000000,0x00000000312000000},
+ { 0x000000000020f5dd,0x0020e14660ff5f312,0x0000000000351d82,0x00000017122ffffd5,0x0000000000000000,0x0020f000000000000,0x0000000000000000,0x00000017180000000},
+ { 0x0000000000001a42,0x000000fd64124422b,0x0000000000232297,0x0000000000276f68b,0x0000000000000000,0x000000fd800000000,0x0000000000230000,0x00000000002770000},
+ { 0x000000000000153e,0x00000267e2b88bef7,0x000000000000a4e7,0x0000000000006fe2a,0x0000000000000000,0x00000268000000000,0x000000000000a400,0x00000000000070000},
+ { 0x00000000006be9db,0x000005126f8e668a3,0x000000000667454a,0x00000000dd372e465,0x0000000000000000,0x00000514000000000,0x0000000004000000,0x00000000dd4000000},
+ { 0x0000000000011d9f,0x000000007ee0e0bbd,0x0000000000b2263d,0x00000000036dfb6ad,0x0000000000000000,0x000000007f0000000,0x0000000000b00000,0x00000000036e00000},
+ { 0x0000000000006dbc,0x0003916100a19d02b,0x0000000000d46be7,0x0000028e27d4ea9ae,0x0000000000000000,0x00039200000000000,0x0000000000000000,0x0000028f000000000},
+ { 0x00000000003a553f,0x06b90dd85ac9cc408,0x00000642511df91b,0x0000688f84372c962,0x0000000000000000,0x06ba0000000000000,0x0000060000000000,0x000068a0000000000},
+ { 0x000000000014c7d9,0x07add4fd4dd5f029c,0x000000019074bd55,0x00099d7a890c33e48,0x0000000000000000,0x07ae0000000000000,0x0000000000000000,0x0009a000000000000},
+ { 0x0000000001cb47ba,0x000008e74811dc63d,0x00000000472e5ba1,0x000000eda149de91e,0x0000000000000000,0x000008e8000000000,0x0000000000000000,0x000000edc00000000},
+ { 0x0000000037a54d39,0x0000307a44acbf924,0x000000013f16dc1d,0x000003b6619d01f3e,0x0000000000000000,0x00003080000000000,0x0000000000000000,0x000003b7000000000},
+ { 0x00000000023a82e8,0x000000ce31dd4866c,0x000000a631aa483b,0x00000037f7b34f69e,0x0000000000000000,0x000000ce400000000,0x000000a600000000,0x00000038000000000},
+ { 0x0000000000000029,0x00b512aef6bbeb366,0x000000000000bb29,0x0000000006bf2f3c1,0x0000000000000000,0x00b54000000000000,0x0000000000000000,0x0000000006c000000},
+ { 0x000000000000000b,0x0000000379e0dee45,0x000000000000000f,0x000000007973b503f,0x0000000000000000,0x000000037a0000000,0x0000000000000000,0x00000000798000000},
+ { 0x00000000000000fb,0x0331cacbaf774004e,0x00000000000182d1,0x00000000000041795,0x0000000000000000,0x03320000000000000,0x0000000000018200,0x00000000000041800},
+ { 0x000006027155fd62,0x00371a9a7a936a1b6,0x0000f4a18386cf6d,0x00001d62070a1534b,0x0000000000000000,0x00372000000000000,0x0000f48000000000,0x00001d64000000000},
+ { 0x00000000000021ad,0x000117478564b4318,0x00000000025e69bb,0x0000007d2ebd80560,0x0000000000000000,0x00011780000000000,0x0000000000000000,0x0000007d400000000},
+ { 0x0000000000000003,0x0000000543b3cb980,0x0000000000000063,0x0000000000021a09b,0x0000000000000000,0x00000005440000000,0x0000000000000000,0x0000000000021b000},
+ { 0x0000000000000007,0x01b099ab2a6ab0764,0x00000000003dcdcf,0x000050bb82f34cd38,0x0000000000000000,0x01b10000000000000,0x0000000000000000,0x000050c0000000000},
+ { 0x00000000000006fc,0x0203b60ad953fbe3c,0x0051595f81e843a4,0x00c3f09d3dc4792b4,0x0000000000000000,0x02040000000000000,0x0050000000000000,0x00c40000000000000},
+ { 0x000000000000004f,0x000005ec7f03ddb6f,0x00000000009dd8c4,0x000000c37adbe7cbd,0x0000000000000000,0x000005ee000000000,0x0000000000000000,0x000000c3800000000},
+ { 0x0000000000000000,0x0051e4946cdc4be37,0x0000000000000573,0x00000000000fb9bec,0x0000000000000000,0x00520000000000000,0x0000000000000000,0x00000000000fbc000},
+ { 0x00000000000000a0,0x000000007ba61066d,0x00000000000baf41,0x00000000000854b78,0x0000000000000000,0x000000007bc000000,0x00000000000ba000,0x00000000000856000},
+ { 0x0000000000044c8c,0x005956792bead4f62,0x00000000001e2dad,0x00005b07e8dd7e4ad,0x0000000000000000,0x00596000000000000,0x0000000000000000,0x00005b20000000000},
+ { 0x000000000000017f,0x006c479e461af8304,0x000000000742c73c,0x000000000077a1b8c,0x0000000000000000,0x006c6000000000000,0x000000000742c000,0x000000000077a2000},
+ { 0x0000000000000001,0x007ce211992029d51,0x0000015dc667bbad,0x00048a8664065e1d8,0x0000000000000000,0x007d0000000000000,0x0000000000000000,0x00048c00000000000},
+ { 0x00000000000b0f30,0x00082c94aad30a02a,0x000000000d28d383,0x0000000336b5b719f,0x0000000000000000,0x00083000000000000,0x0000000000000000,0x00000003370000000},
+ { 0x0000000000002bca,0x0000000074b4f6ce5,0x0000000000044a24,0x00000000001def399,0x0000000000000000,0x0000000074c000000,0x0000000000040000,0x00000000001df0000},
+ { 0x0000000000de56a5,0x0000e6e8c3c39f18e,0x000000b5344078b6,0x0000003151715168d,0x0000000000000000,0x0000e700000000000,0x000000b500000000,0x00000031600000000},
+ { 0x0000000000003fe6,0x00000f2a96c353963,0x000001cdf686e66e,0x000000266cc6d4486,0x0000000000000000,0x00000f2c000000000,0x000001cdc0000000,0x00000026700000000},
+ { 0x000000000000d6f0,0x01aa4510a25074468,0x000000000a356d62,0x000007b72360f018f,0x0000000000000000,0x01aa8000000000000,0x0000000000000000,0x000007b8000000000},
+ { 0x0000000000000031,0x00000000001857f9d,0x000000000000017f,0x000000000001c5a1b,0x0000000000000000,0x00000000001858000,0x0000000000000000,0x000000000001c6000},
+ { 0x0000000000000029,0x07ad918af92295641,0x0000000784932a78,0x0000012758303ae1b,0x0000000000000000,0x07ae0000000000000,0x0000000000000000,0x00000127800000000},
+ { 0x000000000000000c,0x00003a778d4a7a805,0x00000000002e15d4,0x0000003bfa5bbf2f5,0x0000000000000000,0x00003a80000000000,0x0000000000000000,0x0000003c000000000},
+ { 0x0000000000000027,0x0002d28812bf23640,0x0000000000008212,0x000000029553b67df,0x0000000000000000,0x0002d300000000000,0x0000000000000000,0x00000002960000000},
+ { 0x000000000000106a,0x000000001b80d991e,0x0000000022abc4bc,0x0000000003a47a6bf,0x0000000000000000,0x000000001b8800000,0x0000000022a80000,0x0000000003a480000},
+ { 0x000000000443d1ba,0x02a7afe4e720822dc,0x01f9a1cbc0511443,0x002ce4b639b71533a,0x0000000000000000,0x02a80000000000000,0x01f9800000000000,0x002ce800000000000},
+ { 0x0000000006d93c83,0x02071037172407834,0x0000001c870be632,0x000000f5749cf42b4,0x0000000000000000,0x02080000000000000,0x0000001c00000000,0x000000f5800000000},
+ { 0x00000000021f50a2,0x00161e865b195d29f,0x000064017b37220b,0x0006c0c4698db1c47,0x0000000000000000,0x00162000000000000,0x0000600000000000,0x0006c200000000000},
+ { 0x000000000000001d,0x000000b57bcfc9569,0x0000000000011e5b,0x00000000000062bbc,0x0000000000000000,0x000000b5800000000,0x0000000000011e00,0x00000000000062c00},
+ { 0x0000000003c66467,0x002f8645cd879463b,0x00000041af0e1747,0x0004d0eb382d9278d,0x0000000000000000,0x002f9000000000000,0x0000000000000000,0x0004d200000000000},
+ { 0x000000000000010f,0x0000000000845f623,0x0000000000045086,0x00000000006f9377f,0x0000000000000000,0x00000000008480000,0x0000000000040000,0x00000000006fa0000},
+ { 0x0000000000000587,0x0006730747ed7fbe8,0x00000000095ac667,0x00000001de7a9c743,0x0000000000000000,0x00067400000000000,0x0000000008000000,0x00000001de8000000},
+ { 0x0000000000000006,0x000277137615c88d0,0x0000000000163bd1,0x0000000001c5541f5,0x0000000000000000,0x00027800000000000,0x0000000000100000,0x0000000001c580000},
+ { 0x0000000000000a9c,0x0000090781db125e3,0x00000009cca22d84,0x0000000523967457a,0x0000000000000000,0x00000908000000000,0x00000009c0000000,0x00000005240000000},
+ { 0x00000000000003e7,0x007dc2ff6734b1731,0x000001c61d6af9ec,0x00000038c9ed26adf,0x0000000000000000,0x007de000000000000,0x000001c600000000,0x00000038d00000000},
+ { 0x00000003c566b973,0x000ee5bc596b7dcc1,0x00000ae8ce53afc8,0x000001cdfef43d123,0x0000000000000000,0x000ee800000000000,0x00000ae800000000,0x000001ce000000000},
+ { 0x0000000000000008,0x01201ca6f7fb9b37d,0x00000000000005e7,0x00000000000005fb7,0x0000000000000000,0x01208000000000000,0x00000000000005e0,0x00000000000005fc0},
+ { 0x0000000000000002,0x0000003daa3aa4313,0x0000000000000017,0x000000000001021af,0x0000000000000000,0x0000003db00000000,0x0000000000000000,0x00000000000102800},
+ { 0x00000000000001ce,0x0000000000d9a78e0,0x0000000000007be2,0x000000000000606b0,0x0000000000000000,0x0000000000d9c0000,0x0000000000007a00,0x00000000000060800},
+ { 0x00000000000000e3,0x000000000688ce946,0x00000000000003ae,0x00000000000720308,0x0000000000000000,0x00000000068a00000,0x0000000000000000,0x00000000000722000},
+ { 0x0000000000000003,0x000000005a027fa99,0x00000000000f6f68,0x00000000000344746,0x0000000000000000,0x000000005a2000000,0x00000000000f6000,0x00000000000345000},
+ { 0x0000000000000006,0x01d26dcd9610a3d6c,0x0000000000000f9c,0x0000398bc9146dd31,0x0000000000000000,0x01d28000000000000,0x0000000000000000,0x00003990000000000},
+ { 0x000000000024238e,0x02c3636d7c4d2e09b,0x0000000001502beb,0x00000b8a3c5213f00,0x0000000000000000,0x02c40000000000000,0x0000000000000000,0x00000b8c000000000},
+ { 0x00000000015e25f3,0x07e7b79caf953d40d,0x0005058043401b44,0x00007ec78eb804fd9,0x0000000000000000,0x07e80000000000000,0x0005050000000000,0x00007ed0000000000},
+ { 0x000000000000253a,0x001a7a3627fb9998b,0x0000000c08f6d5e1,0x000002ba80ab19a77,0x0000000000000000,0x001a8000000000000,0x0000000000000000,0x000002bb000000000},
+ { 0x0000000000000166,0x0000e58156bda4d9d,0x00000000088f299f,0x0000367a0df6033cc,0x0000000000000000,0x0000e5c0000000000,0x0000000000000000,0x00003680000000000},
+ { 0x0000000000001782,0x048e1d17dcfc972bb,0x0000000000002f9b,0x000000004f063c54b,0x0000000000000000,0x04900000000000000,0x0000000000000000,0x000000004f2000000},
+ { 0x0000000000173811,0x02889a04cace5e748,0x00005fdf7c19263e,0x00b29a280446c1df9,0x0000000000000000,0x02890000000000000,0x0000000000000000,0x00b2c000000000000},
+ { 0x0000000000000002,0x000001e35607bec09,0x000000000000002e,0x0000000000378e2e1,0x0000000000000000,0x000001e3800000000,0x0000000000000000,0x00000000003790000},
+ { 0x000000000000000e,0x000018cbe80de3397,0x00000000022e4132,0x00000000006887ce5,0x0000000000000000,0x000018d0000000000,0x00000000022e0000,0x000000000068a0000},
+ { 0x000000000000131b,0x000000105311c5d18,0x00000000001552c7,0x000000002c751e04e,0x0000000000000000,0x00000010580000000,0x0000000000000000,0x000000002c8000000},
+ { 0x000000000002102d,0x000001387767eb2d9,0x00000000724d9d05,0x000000000a3d189b1,0x0000000000000000,0x00000138800000000,0x0000000072400000,0x000000000a3e00000},
+ { 0x0000000000000000,0x000000000d78272cb,0x0000000000000cc6,0x0000000000040d971,0x0000000000000000,0x000000000d7c00000,0x0000000000000000,0x0000000000040e000},
+ { 0x0000000000000006,0x00178ef10d974f0d8,0x000000000000001c,0x00000000000000629,0x0000000000000000,0x00179000000000000,0x000000000000001c,0x00000000000000629},
+ { 0x000000000000077a,0x0001cba12babf9377,0x00000001aeb9c9b4,0x00003fc5c129d1b89,0x0000000000000000,0x0001cc00000000000,0x0000000000000000,0x00003fd0000000000},
+ { 0x00000000000052f3,0x000f80059a057616d,0x00000000cabff061,0x0000157ace2c40107,0x0000000000000000,0x000f8400000000000,0x0000000000000000,0x00001580000000000},
+ { 0x0000000000000000,0x00000001b01abd800,0x0000000000013047,0x0000000000007836e,0x0000000000000000,0x00000001b08000000,0x0000000000013000,0x00000000000078400},
+ { 0x0000000000000026,0x00f32dd44e8eb2b0f,0x00057944fa98221a,0x0003292964db57917,0x0000000000000000,0x00f34000000000000,0x0005700000000000,0x00032a00000000000},
+ { 0x000000000000063d,0x000d2b3e1be5e43d4,0x00000000742da92d,0x00000009b3f008c96,0x0000000000000000,0x000d2c00000000000,0x0000000040000000,0x00000009b40000000},
+ { 0x000000000000021f,0x0002f6a29b0eac1f0,0x0000000001eda885,0x00004f50e871263cd,0x0000000000000000,0x0002f700000000000,0x0000000000000000,0x00004f60000000000},
+ { 0x00000000000001b3,0x00050b289d4cd4dd3,0x000000007d5bd25d,0x000000114acc671ea,0x0000000000000000,0x00050c00000000000,0x0000000000000000,0x00000011500000000},
+ { 0x0000000000000fbd,0x0001cd307ac23a15c,0x000000000000124c,0x0000000797510f13d,0x0000000000000000,0x0001cd80000000000,0x0000000000000000,0x00000007980000000},
+ { 0x0000000000004e83,0x003bb9ff53ee6766d,0x000000031298cb9d,0x00000272aafcb80b5,0x0000000000000000,0x003bc000000000000,0x0000000000000000,0x00000273000000000},
+ { 0x000000000001dfcc,0x00019f8770b1e0b0c,0x00000000007fc560,0x0000f14759070ba58,0x0000000000000000,0x0001a000000000000,0x0000000000000000,0x0000f180000000000},
+ { 0x0000000000000059,0x00030dc341e2b8cff,0x000000000000d093,0x0000000000008b3d4,0x0000000000000000,0x00030e00000000000,0x000000000000d000,0x0000000000008b400},
+ { 0x000000000000005e,0x00000077c2195a8dc,0x0000000000001d10,0x0000000000005bc51,0x0000000000000000,0x00000077e00000000,0x0000000000001c00,0x0000000000005be00},
+ { 0x000000000006e3f1,0x000005c9756dbf50d,0x00000006c5ee60cd,0x0000000ea8dcc0430,0x0000000000000000,0x000005ca000000000,0x00000006c0000000,0x0000000eac0000000},
+ { 0x000000000001d659,0x00000000061ddd408,0x0000000000608a22,0x00000000000f34014,0x0000000000000000,0x00000000061e00000,0x0000000000608000,0x00000000000f38000},
+ { 0x00000000000000f2,0x00000000dae7ceaf1,0x0000000000000d5e,0x000000000000b328a,0x0000000000000000,0x00000000db0000000,0x0000000000000c00,0x000000000000b3400},
+ { 0x0000000001b7272c,0x004d9b93bcf748244,0x00000002c5c911a7,0x00000020013392389,0x0000000000000000,0x004da000000000000,0x0000000280000000,0x00000020080000000},
+ { 0x000000000000972f,0x000000003d0a6770a,0x000000000020deb3,0x00000000004c9f8b6,0x0000000000000000,0x000000003d1000000,0x0000000000200000,0x00000000004ca0000},
+ { 0x0000000001d31831,0x0583621ceb9cbcd51,0x000000000aeca964,0x02186c957ab122f87,0x0000000000000000,0x05840000000000000,0x0000000000000000,0x02190000000000000},
+ { 0x0000000000007f53,0x000c6e40803af6558,0x0000001b69640e85,0x0000003f22263da50,0x0000000000000000,0x000c7000000000000,0x0000001b00000000,0x0000003f300000000},
+ { 0x000000000000000e,0x0000000e9d27e86ea,0x0000000000000cdc,0x000000000000080da,0x0000000000000000,0x0000000ea00000000,0x0000000000000cc0,0x000000000000080e0},
+ { 0x00000000d3a1310b,0x00000101d6c6a3529,0x000000034e1c089b,0x0000006a2b6af09af,0x0000000000000000,0x00000102000000000,0x0000000200000000,0x0000006a400000000},
+ { 0x0000000000000005,0x000000075b38e4c4f,0x0000000050864e6a,0x0000000314e1242db,0x0000000000000000,0x000000075c0000000,0x0000000050000000,0x00000003150000000},
+ { 0x00000000002b2c34,0x000181ccd1cb15b95,0x000000007ecad630,0x0000000027285a839,0x0000000000000000,0x00018200000000000,0x000000007e800000,0x00000000273000000},
+ { 0x00000000000088ed,0x018f511d83239a05d,0x0000000000035076,0x000087547e229d19a,0x0000000000000000,0x018f8000000000000,0x0000000000000000,0x00008780000000000},
+ { 0x000000000000000e,0x00000170d926f68b7,0x0000000003e07db5,0x00000000f082481d2,0x0000000000000000,0x00000171000000000,0x0000000000000000,0x00000000f0c000000},
+ { 0x0000000000000651,0x02e220cdd54a69988,0x0000000003696b10,0x0111b395232e9c3b4,0x0000000000000000,0x02e30000000000000,0x0000000000000000,0x01120000000000000},
+ { 0x0000000001553312,0x0000306d6b15c2e8d,0x00000000238ff3ae,0x000021a2e2065e3a2,0x0000000000000000,0x00003070000000000,0x0000000000000000,0x000021b0000000000},
+ { 0x0000000000000000,0x000fece69a67feb77,0x000000000000024d,0x00000000000e22482,0x0000000000000000,0x000ff000000000000,0x0000000000000000,0x00000000000e24000},
+ { 0x00000002556e8bfa,0x00014bde5f51e7ca6,0x00000005dc8aac8d,0x0000000239f86cf5d,0x0000000000000000,0x00014c00000000000,0x00000005d8000000,0x000000023a0000000},
+ { 0x0000000000000004,0x00000000009fa18b1,0x000000000000d0ef,0x00000000004225807,0x0000000000000000,0x00000000009fc0000,0x0000000000000000,0x00000000004240000},
+ { 0x0000000000035b16,0x000003c308797d8b1,0x0000192f3115c0bc,0x0000034809602d47f,0x0000000000000000,0x000003c4000000000,0x0000192800000000,0x00000348800000000},
+ { 0x00000000000021f3,0x00000005cbc317b1d,0x000000000e1fb152,0x0000000001a99c9c1,0x0000000000000000,0x00000005cc0000000,0x000000000e1c0000,0x0000000001a9c0000},
+ { 0x000000000002f465,0x008b9493f0a186313,0x0000000073e4df99,0x00000001df126b9da,0x0000000000000000,0x008bc000000000000,0x0000000070000000,0x00000001df8000000},
+ { 0x000000000000a300,0x00000000011d25753,0x0000000000b1f30e,0x0000000000c221085,0x0000000000000000,0x00000000011d80000,0x0000000000b00000,0x0000000000c240000},
+ { 0x00000000000033de,0x0000001d12e40f4f5,0x000000000014e7fd,0x00000001e44b1f307,0x0000000000000000,0x0000001d180000000,0x0000000000000000,0x00000001e48000000},
+ { 0x0000000000000007,0x002151346b6955db7,0x0000000000000007,0x0000000000000f283,0x0000000000000000,0x00216000000000000,0x0000000000000000,0x0000000000000f2c0},
+ { 0x000000007e566a49,0x0032fad5982fb5095,0x00169b0080039fb3,0x000d6bae8068baa79,0x0000000000000000,0x00330000000000000,0x0016800000000000,0x000d6c00000000000},
+ { 0x0000000000000009,0x0000000265584e47b,0x0000000000000b4b,0x0000000000000e6e8,0x0000000000000000,0x00000002660000000,0x0000000000000b40,0x0000000000000e700},
+ { 0x0000000000000106,0x000328ab97ee3a843,0x000000000fe9d5f9,0x000000000579af9f2,0x0000000000000000,0x00032900000000000,0x000000000fe00000,0x00000000057a00000},
+ { 0x0000000000000089,0x06927e3b2e3f07390,0x000000000000c26e,0x0000000cefb29fe3a,0x0000000000000000,0x06940000000000000,0x0000000000000000,0x0000000cf00000000},
+ { 0x000000000533b061,0x0040068e790446eca,0x000000001070e3c7,0x00000000031cbc403,0x0000000000000000,0x00402000000000000,0x0000000010700000,0x00000000031d00000},
+ { 0x0000000000000053,0x00090f65482464023,0x0000000000066749,0x0000000003c08b986,0x0000000000000000,0x00091000000000000,0x0000000000000000,0x0000000003c100000},
+ { 0x000000000000293f,0x000e32d65928d12ee,0x000000000003c51d,0x0000008ca8fa9dd6f,0x0000000000000000,0x000e3400000000000,0x0000000000000000,0x0000008cc00000000},
+ { 0x000000000000103d,0x00270182075597f7c,0x0000000000138607,0x000000000001c4247,0x0000000000000000,0x00271000000000000,0x0000000000138400,0x000000000001c4400},
+ { 0x00000000000004e3,0x01098029bc6e5594d,0x00000000000b4d66,0x00060e7060831c0d1,0x0000000000000000,0x010a0000000000000,0x0000000000000000,0x00061000000000000},
+ { 0x000000000000000a,0x007f535c1f9f3be98,0x000000000000000c,0x000000000007456d4,0x0000000000000000,0x007f6000000000000,0x0000000000000000,0x00000000000746000},
+ { 0x000000000000001d,0x00212f747dc7f38f3,0x00000000008758e3,0x000000135b1d5fca6,0x0000000000000000,0x00213000000000000,0x0000000000000000,0x00000013600000000},
+ { 0x0000000000000017,0x0196eab98752820e5,0x000000000000006f,0x00000000000000183,0x0000000000000000,0x01970000000000000,0x000000000000006f,0x00000000000000183},
+ { 0x0000000001bc4b5a,0x000004faf69d388e4,0x000000000c627584,0x000000020eeafd8e4,0x0000000000000000,0x000004fc000000000,0x0000000000000000,0x000000020f0000000},
+ { 0x0000000000001197,0x00000f84931329ba8,0x000000000a1ed20a,0x000000001bf683d53,0x0000000000000000,0x00000f88000000000,0x000000000a000000,0x000000001bf800000},
+ { 0x0000000000000003,0x0118a4223cb5bf45a,0x0000000000001b77,0x000000000000037d8,0x0000000000000000,0x01190000000000000,0x0000000000001b70,0x000000000000037d8},
+ { 0x0000000000000038,0x02d5dbe59175e06d3,0x00000000000e2c07,0x001719316b7caefc3,0x0000000000000000,0x02d60000000000000,0x0000000000000000,0x00172000000000000},
+ { 0x00000000000023b7,0x000419fa3cda92a0f,0x0000000000003f48,0x0003fc5a28f181170,0x0000000000000000,0x00041a00000000000,0x0000000000000000,0x0003fd00000000000},
+ { 0x0000000000000055,0x000040a147d082479,0x00000000fb53053c,0x0000000413b4cf9d3,0x0000000000000000,0x000040c0000000000,0x00000000e0000000,0x00000004140000000},
+ { 0x0000000000000141,0x00000000012d32966,0x0000000000000749,0x0000000000010bee2,0x0000000000000000,0x00000000012d80000,0x0000000000000000,0x0000000000010c000},
+ { 0x000000000002766f,0x0abcccb17e37c3f64,0x000000004b6b0930,0x0000000ca40536094,0x0000000000000000,0x0ac00000000000000,0x0000000040000000,0x0000000ca80000000},
+ { 0x0000000000000ddd,0x00000152819b94b0f,0x000000000003ec8a,0x0000000000c2567ed,0x0000000000000000,0x00000153000000000,0x0000000000000000,0x0000000000c280000},
+ { 0x00000000000000de,0x0000000000ffda245,0x00000000000001cf,0x00000000000007748,0x0000000000000000,0x00000000010000000,0x00000000000001c0,0x00000000000007760},
+ { 0x000000000000008e,0x00b0b616f11268597,0x000000000000021a,0x000000000036a7a18,0x0000000000000000,0x00b0c000000000000,0x0000000000000000,0x000000000036b0000},
+ { 0x0000000000000163,0x000000040e9a61c4c,0x00000000000f111e,0x0000000005027301f,0x0000000000000000,0x00000004100000000,0x0000000000000000,0x00000000050400000},
+ { 0x0000000000000c78,0x00026a1ec9b2f6db4,0x000006259120b7e5,0x00000178e7d66064d,0x0000000000000000,0x00026b00000000000,0x0000062000000000,0x00000179000000000},
+ { 0x0000000000006cd0,0x01bfc53adfaf237cc,0x00000000000356aa,0x0000638a3d2f79236,0x0000000000000000,0x01c00000000000000,0x0000000000000000,0x000063a0000000000},
+ { 0x000000001c53b55d,0x0006f5ef53456460b,0x00000759269dba01,0x0000d496f139e4932,0x0000000000000000,0x0006f600000000000,0x0000040000000000,0x0000d4c0000000000},
+ { 0x0000000000000000,0x00008541e193a3afe,0x0000000000000035,0x0000000000003d44f,0x0000000000000000,0x00008580000000000,0x0000000000000000,0x0000000000003d500},
+ { 0x0000000000000155,0x0000470f7f98df61f,0x000000006c153486,0x00000006c2ba36b01,0x0000000000000000,0x00004720000000000,0x0000000060000000,0x00000006c40000000},
+ { 0x000000000003535d,0x00118f2e71412cb22,0x0000001e6306672e,0x000001ecae8e350e3,0x0000000000000000,0x00119000000000000,0x0000001800000000,0x000001ed000000000},
+ { 0x0000000000000001,0x000001189f56b65ff,0x00000012dd49b664,0x000000b9bae4eea50,0x0000000000000000,0x00000119000000000,0x0000001000000000,0x000000b9c00000000},
+ { 0x000000000000000e,0x07ac7e7436a5ec126,0x00000000030f534a,0x0483555b4912be6f6,0x0000000000000000,0x07ae0000000000000,0x0000000000000000,0x04840000000000000},
+ { 0x0000000000000a7c,0x00181cded157bc8d2,0x000000000000cd5b,0x000fac459be490657,0x0000000000000000,0x00182000000000000,0x0000000000000000,0x000fb000000000000},
+ { 0x000000000000006b,0x0fab53e4259ddb36d,0x000000000000b801,0x00000000000eac348,0x0000000000000000,0x0fac0000000000000,0x0000000000008000,0x00000000000eb0000},
+ { 0x0000000000001c36,0x0000042cc8309207b,0x0000000000003855,0x000000000001eaff7,0x0000000000000000,0x0000042e000000000,0x0000000000003800,0x000000000001eb000},
+ { 0x00000000001e1551,0x000001f072b18e268,0x000000000049e398,0x00000039fc1dc38df,0x0000000000000000,0x000001f0800000000,0x0000000000000000,0x0000003a000000000},
+ { 0x0000000000000000,0x0000000003f6f0126,0x0000000000000099,0x0000000002123d961,0x0000000000000000,0x0000000003f700000,0x0000000000000000,0x00000000021300000},
+ { 0x0000000000000011,0x0000000000481edac,0x0000000000000015,0x00000000000000016,0x0000000000000000,0x00000000004820000,0x0000000000000015,0x00000000000000016},
+ { 0x00000000000004bf,0x000845fe8948d7d27,0x0000000004da5b83,0x00000000ab525a3d4,0x0000000000000000,0x00084800000000000,0x0000000004000000,0x00000000ab8000000},
+ { 0x00000004e3591500,0x000289c76bcc34d71,0x00001b87b8d684c2,0x00001eef786676d46,0x0000000000000000,0x00028a00000000000,0x00001b8000000000,0x00001ef0000000000},
+ { 0x0000000000000227,0x000006b3c0f7844cd,0x000000000003b595,0x00000000021feff01,0x0000000000000000,0x000006b4000000000,0x0000000000000000,0x00000000022000000},
+ { 0x00000000000001e1,0x00002e5a9e4073998,0x00000005a1c02b85,0x0000000fae6aad758,0x0000000000000000,0x00002e60000000000,0x0000000580000000,0x0000000fb00000000},
+ { 0x000000000000013a,0x00000000c38f3325a,0x00000000001422dc,0x00000000044edc43b,0x0000000000000000,0x00000000c3c000000,0x0000000000000000,0x00000000045000000},
+ { 0x0000000000000004,0x00000000000163c85,0x0000000000006a72,0x0000000000009ce64,0x0000000000000000,0x00000000000164000,0x0000000000006800,0x0000000000009d000},
+ { 0x0000000000060390,0x000148a014ee51767,0x0000000004cd2068,0x00000000008ff6638,0x0000000000000000,0x00014900000000000,0x0000000004cc0000,0x00000000009000000},
+ { 0x000000000000000b,0x00109a9911f26fedf,0x0000000000000010,0x0000051fc1a11f0a4,0x0000000000000000,0x0010a000000000000,0x0000000000000000,0x00000520000000000},
+ { 0x00000000000004de,0x0000385595f6782bb,0x000000000000127b,0x000000107c0cf745d,0x0000000000000000,0x00003860000000000,0x0000000000000000,0x00000010800000000},
+ { 0x000136207b688976,0x018e0b93cabc19cf7,0x00740f0c22924059,0x0055f80db28a3de42,0x0000000000000000,0x018e8000000000000,0x0074000000000000,0x00560000000000000},
+ { 0x0000000000638239,0x0166556ec1b87d54e,0x000000003ed6d7b9,0x0000000014c2ddf47,0x0000000000000000,0x01668000000000000,0x000000003e800000,0x0000000014c800000},
+ { 0x0000000d20e53fa5,0x000095693721fc2f3,0x00000e46479bccc3,0x0000011e61017ebda,0x0000000000000000,0x00009580000000000,0x00000e4600000000,0x0000011e700000000},
+ { 0x0000000000000014,0x0000000000000ad97,0x0000000000000221,0x00000000000001848,0x0000000000000000,0x0000000000000adc0,0x0000000000000220,0x00000000000001848},
+ { 0x0000000000000b6f,0x033305cd604a94ee1,0x0000004b39a6fd52,0x0033d04158ef15e18,0x0000000000000000,0x03340000000000000,0x0000000000000000,0x0033e000000000000},
+ { 0x0000000000000000,0x0061b7e0a301b1d88,0x0000000c83ab9f85,0x00000001fdd6155de,0x0000000000000000,0x0061c000000000000,0x0000000c80000000,0x00000001fe0000000},
+ { 0x000000000000c954,0x0c94cda3883a6daf5,0x00000b0e997316bd,0x0007f0acacd1abe60,0x0000000000000000,0x0c980000000000000,0x0000000000000000,0x0007f200000000000},
+ { 0x0000000000000031,0x01f162ce474d769a7,0x0000000031092552,0x00000000724373aa4,0x0000000000000000,0x01f18000000000000,0x0000000030000000,0x00000000726000000},
+ { 0x000000000001fe16,0x0000010a207ef1f01,0x000000000f6e7d1e,0x000000003e5065cb9,0x0000000000000000,0x0000010a800000000,0x000000000f000000,0x000000003e6000000},
+ { 0x00000000000635c4,0x000001bfd7edd329e,0x00000000006bc1ca,0x0000010d700c6bad4,0x0000000000000000,0x000001c0000000000,0x0000000000000000,0x0000010d800000000},
+ { 0x000000000009c5e5,0x0000bc296066f25c0,0x0000000000116e50,0x000000001c6cdff18,0x0000000000000000,0x0000bc40000000000,0x0000000000000000,0x000000001c7000000},
+ { 0x000000000000c010,0x00a2ea13d814d93dd,0x00000000037fdfc5,0x0000004c5a1aa5103,0x0000000000000000,0x00a30000000000000,0x0000000000000000,0x0000004c600000000},
+ { 0x00000000000000c5,0x00000c10766c4c0f0,0x0000000000c93c97,0x000000805aab22d84,0x0000000000000000,0x00000c14000000000,0x0000000000000000,0x00000080800000000},
+ { 0x000000000024551e,0x0000461f6414a0b31,0x000000001bee6731,0x0000000008ab85174,0x0000000000000000,0x00004620000000000,0x000000001be00000,0x0000000008ac00000},
+ { 0x00000000000000e1,0x0f47798b8eb8141ad,0x0000071c238b9141,0x0c3580cd4c0ecc7cb,0x0000000000000000,0x0f480000000000000,0x0000000000000000,0x0c380000000000000},
+ { 0x00000000895a33df,0x006c104bf4d9fb15d,0x00000003446bfec8,0x00000000bcf8faabe,0x0000000000000000,0x006c2000000000000,0x0000000344000000,0x00000000bd0000000},
+ { 0x0000000001cb5409,0x05cc8095c594c52fe,0x0000001ff198bb5b,0x00000004d97cccd93,0x0000000000000000,0x05ce0000000000000,0x0000001ff0000000,0x00000004da0000000},
+ { 0x0000000000000664,0x0101fc9086adceb0e,0x0000000000000675,0x000001b24b3321aec,0x0000000000000000,0x01020000000000000,0x0000000000000000,0x000001b2800000000},
+ { 0x000000000000019e,0x005d8016a68c13e40,0x0000000000011db4,0x0000d1ae410d0f53f,0x0000000000000000,0x005da000000000000,0x0000000000000000,0x0000d1c0000000000},
+ { 0x0000000000000001,0x000039e3f7bb11a91,0x00000001cdbb42d0,0x000024eb3799439b1,0x0000000000000000,0x000039f0000000000,0x0000000000000000,0x000024f0000000000},
+ { 0x0000000000000f13,0x0000000206c4db11d,0x00000000000017cf,0x00000000000001d70,0x0000000000000000,0x00000002070000000,0x00000000000017cf,0x00000000000001d70},
+ { 0x0000000000000241,0x00002944e3defa423,0x0000000001848061,0x0000000093915975c,0x0000000000000000,0x00002950000000000,0x0000000000000000,0x0000000093c000000},
+ { 0x0000000000000002,0x019d3c12cfa405710,0x0000000003ae629b,0x0000b98f3ac797793,0x0000000000000000,0x019d8000000000000,0x0000000000000000,0x0000b9c0000000000},
+ { 0x0000000000015a69,0x0000052834f474c18,0x0000007a2222faae,0x0000009f35e46744b,0x0000000000000000,0x0000052a000000000,0x0000007800000000,0x0000009f400000000},
+ { 0x0000000000000012,0x032257f33b3c474e6,0x0000000000014b00,0x00053867b6ace1c5b,0x0000000000000000,0x03230000000000000,0x0000000000000000,0x00053a00000000000},
+ { 0x0000000000000000,0x00000015d9dc7b236,0x0000000000000010,0x00000000000000095,0x0000000000000000,0x00000015e00000000,0x0000000000000010,0x00000000000000095},
+ { 0x0000000004088066,0x00415a3ecfd0b10fd,0x0000000ac3576042,0x00000a266c2559be4,0x0000000000000000,0x00416000000000000,0x0000000000000000,0x00000a28000000000},
+ { 0x0000000000000075,0x0006b5fdffcdb7811,0x0000000000587038,0x0000000c8bf5076eb,0x0000000000000000,0x0006b600000000000,0x0000000000000000,0x0000000c8c0000000},
+ { 0x0000000000007e4e,0x00000000e6a7a13ac,0x0000000003979deb,0x000000000086bc614,0x0000000000000000,0x00000000e6c000000,0x0000000003960000,0x000000000086c0000},
+ { 0x0000000000000005,0x000001983d15c4208,0x0000000000000015,0x0000000000000003e,0x0000000000000000,0x00000198800000000,0x0000000000000015,0x0000000000000003e},
+ { 0x0000000000000295,0x0000111c617df39fa,0x000000000010ec8f,0x00000010e995531b1,0x0000000000000000,0x00001120000000000,0x0000000000000000,0x00000010f00000000},
+ { 0x0000000000000000,0x002af3e644e0f466e,0x00000000000328a7,0x0000b4da43c319718,0x0000000000000000,0x002b0000000000000,0x0000000000000000,0x0000b500000000000},
+ { 0x0000000000dd7f07,0x0004344c1f3bff05f,0x000000000172ba13,0x00000000b28413925,0x0000000000000000,0x00043600000000000,0x0000000000000000,0x00000000b2c000000},
+ { 0x0000000000000001,0x041f951d942e0e51e,0x0000001d45a7cdf5,0x0000000c3388a4d97,0x0000000000000000,0x04200000000000000,0x0000001d40000000,0x0000000c340000000},
+ { 0x0000000000003398,0x01e9c7194c3b0b77f,0x00000061e8324d8e,0x000061312de20deb2,0x0000000000000000,0x01ea0000000000000,0x0000000000000000,0x00006140000000000},
+ { 0x0000000000000086,0x000ed49f2cc327f4c,0x000024b33d7f6979,0x0003ea28dbc874f0a,0x0000000000000000,0x000ed800000000000,0x0000200000000000,0x0003eb00000000000},
+ { 0x000000000000087b,0x0073a5c346449824c,0x00000000000c457b,0x000000000f2019556,0x0000000000000000,0x0073c000000000000,0x0000000000000000,0x000000000f2400000},
+ { 0x0000000000000002,0x00011c0bf37b4720b,0x000000000000010f,0x000000000000001d3,0x0000000000000000,0x00011c80000000000,0x000000000000010f,0x000000000000001d3},
+ { 0x00000000000095cf,0x000000004f46ac6e2,0x000000000003a6c4,0x000000000830b84aa,0x0000000000000000,0x000000004f6000000,0x0000000000000000,0x00000000083400000},
+ { 0x00000000585a85bb,0x05fc5e4127b6cd8a3,0x000003aa942ecdda,0x002e7d4fa5efaaa96,0x0000000000000000,0x05fe0000000000000,0x0000000000000000,0x002e8000000000000},
+ { 0x000000000000000c,0x000000465320ed270,0x0000000000000a66,0x000000165e8dc9328,0x0000000000000000,0x00000046600000000,0x0000000000000000,0x00000016600000000},
+ { 0x000000000000000a,0x000003e575a8b1d57,0x0000018469ca81e0,0x0000005fe5a503058,0x0000000000000000,0x000003e6000000000,0x0000018400000000,0x00000060000000000},
+ { 0x00000000000000ce,0x0000f08f1245fda79,0x0000000000001c7a,0x000006d52f3ebbad1,0x0000000000000000,0x0000f0c0000000000,0x0000000000000000,0x000006d6000000000},
+ { 0x0000000000000013,0x0000a7ad4f4d34430,0x0000001351ec97d1,0x000000ef25b265d19,0x0000000000000000,0x0000a7c0000000000,0x0000001000000000,0x000000ef400000000},
+ { 0x0000000000000002,0x000d84705862e2f31,0x000000000000000e,0x00000000010ad0238,0x0000000000000000,0x000d8800000000000,0x0000000000000000,0x00000000010b00000},
+ { 0x000000000004e9cf,0x001895176c47b26bb,0x0000000000931a45,0x00000000d0f006d1f,0x0000000000000000,0x00189800000000000,0x0000000000000000,0x00000000d10000000},
+ { 0x00000000000008ba,0x00b514ecc6af3d360,0x0000000000fce1c4,0x0000000c248131350,0x0000000000000000,0x00b54000000000000,0x0000000000000000,0x0000000c280000000},
+ { 0x0000000000000028,0x0007a68620513a7f2,0x00000000005b6ae7,0x000039b0063e85e33,0x0000000000000000,0x0007a800000000000,0x0000000000000000,0x000039c0000000000},
+ { 0x0000000000000000,0x0000001bde40c9142,0x0000000000000004,0x0000000decd2b4561,0x0000000000000000,0x0000001be00000000,0x0000000000000000,0x0000000df00000000},
+ { 0x0000000000000007,0x00000943d2d510b32,0x00000000003108b4,0x00000000006b3e094,0x0000000000000000,0x00000944000000000,0x0000000000300000,0x00000000006b40000},
+ { 0x000000000000002e,0x00086383a31bbb4b3,0x00000000000172b0,0x000000000000b6090,0x0000000000000000,0x00086400000000000,0x0000000000017000,0x000000000000b6400},
+ { 0x0000000000000004,0x0002359541360afbb,0x0000000000000018,0x00000000befd072eb,0x0000000000000000,0x00023600000000000,0x0000000000000000,0x00000000bf0000000},
+ { 0x0000000000000017,0x0001dcade534d78de,0x000000004c66d83f,0x0000000a31da95822,0x0000000000000000,0x0001dd00000000000,0x0000000040000000,0x0000000a340000000},
+ { 0x0000000000001e3b,0x0000040ea9f26be69,0x00000000006ac632,0x0000000000182809e,0x0000000000000000,0x00000410000000000,0x00000000006a8000,0x00000000001830000},
+ { 0x00000000000042a6,0x078ef8a9f2043a586,0x0004a3ea8c5422ba,0x0028b15dc94cb5250,0x0000000000000000,0x07900000000000000,0x0004000000000000,0x0028c000000000000},
+ { 0x0000000000000179,0x0000020de1238dd33,0x00000000018830cd,0x00000000006864261,0x0000000000000000,0x0000020e000000000,0x0000000001880000,0x00000000006880000},
+ { 0x00000000000001ed,0x003ea6aaf2ba257b2,0x0000000000043bfd,0x0000167e3e6472314,0x0000000000000000,0x003eb000000000000,0x0000000000000000,0x00001680000000000},
+ { 0x000003c28e6ee2c3,0x06ece05f1d70c40d3,0x0000ddbe38a740a5,0x008cda9dcd070d18f,0x0000000000000000,0x06ee0000000000000,0x0000000000000000,0x008d0000000000000},
+ { 0x00000000001b7cbc,0x0001b1c9ab577083c,0x0000000000442c2f,0x0000002a8bcc3419e,0x0000000000000000,0x0001b200000000000,0x0000000000000000,0x0000002a900000000},
+ { 0x000000000000032b,0x000001496f7104224,0x0000000001fb47fd,0x00000000033bc6a91,0x0000000000000000,0x00000149800000000,0x0000000001f00000,0x00000000033c00000},
+ { 0x000000000000000c,0x05bc7ade88c7009ea,0x0000000000040168,0x000000000015b35a8,0x0000000000000000,0x05be0000000000000,0x0000000000040000,0x000000000015b8000},
+ { 0x00000000083e0068,0x00003c2b7caabdc67,0x000000018a475475,0x00000001067eb1778,0x0000000000000000,0x00003c30000000000,0x0000000188000000,0x00000001068000000},
+ { 0x0000000000000000,0x0000001aa67d3001a,0x0000000000000291,0x00000000000009e94,0x0000000000000000,0x0000001aa80000000,0x0000000000000280,0x00000000000009ec0},
+ { 0x0000000000000001,0x0000000a23e7d6110,0x0000000008c2c975,0x00000002e3bc8ae98,0x0000000000000000,0x0000000a240000000,0x0000000000000000,0x00000002e40000000},
+ { 0x000000000000007f,0x00000673bff83dd4f,0x00000000018a3c9c,0x0000023fbddea3678,0x0000000000000000,0x00000674000000000,0x0000000000000000,0x00000240000000000},
+ { 0x0000000000000001,0x01fcdf4531da8107d,0x02898e83ee056764,0x003a9c559ac9c2c8f,0x0000000000000000,0x01fd0000000000000,0x0289800000000000,0x003aa000000000000},
+ { 0x0000000000000025,0x00003bcf37361b3e5,0x00000000000000c8,0x00000055e2356c44e,0x0000000000000000,0x00003bd0000000000,0x0000000000000000,0x00000056000000000},
+ { 0x0000000000000022,0x00054c9a92d862bff,0x0000000003791279,0x00038ed5215f93017,0x0000000000000000,0x00054e00000000000,0x0000000000000000,0x00038f00000000000},
+ { 0x000000000000000e,0x000c5530ea54abb06,0x0000000000010eb4,0x00000003f0ba61f23,0x0000000000000000,0x000c5800000000000,0x0000000000000000,0x00000003f10000000},
+ { 0x00000000000d32b8,0x006e65e8639f8089b,0x000002a6fb112769,0x0061461439f88a437,0x0000000000000000,0x006e8000000000000,0x0000000000000000,0x00616000000000000},
+ { 0x0000000065b2fc26,0x007bd0160ccf7f602,0x0000000074b7839e,0x000000003d83467aa,0x0000000000000000,0x007be000000000000,0x0000000074000000,0x000000003d9000000},
+ { 0x0000000000000074,0x0022216d72b0d42d6,0x0000000000000d5a,0x00000000000002b29,0x0000000000000000,0x00223000000000000,0x0000000000000d58,0x00000000000002b30},
+ { 0x0000000000000003,0x000000000007b8b6d,0x000000000000007f,0x00000000000008e58,0x0000000000000000,0x000000000007ba000,0x0000000000000040,0x00000000000008e80},
+ { 0x000000000000006f,0x00f765f412038600e,0x0000000000101a01,0x00000000002cb0028,0x0000000000000000,0x00f78000000000000,0x0000000000100000,0x00000000002cc0000},
+ { 0x0000000000000003,0x000013c5777ae82f4,0x0000000000000018,0x00000000024d67791,0x0000000000000000,0x000013c8000000000,0x0000000000000000,0x00000000024e00000},
+ { 0x000000000000ad92,0x000000000c8adabd3,0x00000000003fbc7d,0x00000000009a7a9cb,0x0000000000000000,0x000000000c8c00000,0x00000000003c0000,0x00000000009a80000},
+ { 0x00000000000011d6,0x07fbaed84f7baa49a,0x00000000002b3496,0x000002512d5b7dc34,0x0000000000000000,0x07fc0000000000000,0x0000000000000000,0x00000252000000000},
+ { 0x000000000000075b,0x0046da91f2c600520,0x0000000000013260,0x00000000001cf978f,0x0000000000000000,0x0046e000000000000,0x0000000000010000,0x00000000001d00000},
+ { 0x000000000000019b,0x073a5bd7ff0121d41,0x000000000002a647,0x00000025a992de7ce,0x0000000000000000,0x073c0000000000000,0x0000000000000000,0x00000025b00000000},
+ { 0x0000000000000006,0x0023ccb5d6de564ec,0x0000000002223ced,0x00020350ad8addddf,0x0000000000000000,0x0023d000000000000,0x0000000000000000,0x00020400000000000},
+ { 0x0000000009754ed4,0x00000006af9217867,0x000000003c8915a5,0x000000000750a32cf,0x0000000000000000,0x00000006b00000000,0x000000003c800000,0x00000000075100000},
+ { 0x000000000001d3d6,0x0000e6a11576b0381,0x0000000000a666b2,0x000000010da72f010,0x0000000000000000,0x0000e6c0000000000,0x0000000000000000,0x000000010e0000000},
+ { 0x0000000000000014,0x013518e530ad49330,0x0000713a46fbe782,0x0011789ca78a1944a,0x0000000000000000,0x01358000000000000,0x0000000000000000,0x00118000000000000},
+ { 0x000000000df218d6,0x00d9e972d11605f0f,0x0000000fd4cd377a,0x0000000fd013a90df,0x0000000000000000,0x00da0000000000000,0x0000000fc0000000,0x0000000fd40000000},
+ { 0x000000000000075f,0x0000007b685e992b1,0x00000000000067bc,0x00000047289a0efc8,0x0000000000000000,0x0000007b800000000,0x0000000000000000,0x00000047400000000},
+ { 0x00000000008a09df,0x0e1069157a0613db2,0x0000074b9d618099,0x0000505e0fba0d7a4,0x0000000000000000,0x0e140000000000000,0x0000060000000000,0x00005060000000000},
+ { 0x000000000001483e,0x0000001c0193126b3,0x00000000022f3fdd,0x000000003f9cc94e2,0x0000000000000000,0x0000001c080000000,0x0000000002000000,0x000000003fa000000},
+ { 0x000000000000000f,0x00000000cde091f0c,0x000000000000e77c,0x00000000003397e2a,0x0000000000000000,0x00000000ce0000000,0x0000000000000000,0x000000000033a0000},
+ { 0x000000000000000e,0x000a5a92940ecd401,0x000000000181860a,0x00000000010f610e9,0x0000000000000000,0x000a5c00000000000,0x0000000001800000,0x00000000010f80000},
+ { 0x000000000000000a,0x0000104280e7427bb,0x00000000000000f7,0x000000000006b9443,0x0000000000000000,0x00001048000000000,0x0000000000000000,0x000000000006ba000},
+ { 0x0000000000021013,0x000005bdd9f05b23b,0x0000000069e9108d,0x000000379c4a874a1,0x0000000000000000,0x000005be000000000,0x0000000000000000,0x00000037a00000000},
+ { 0x00000000000090fb,0x0000f07577e79e183,0x0000000213153e67,0x0000000028ae9578b,0x0000000000000000,0x0000f080000000000,0x0000000213000000,0x0000000028b000000},
+ { 0x0000000000095d0c,0x03997abe2c6fd8711,0x0000000000171b8c,0x00a340dda525b3d15,0x0000000000000000,0x039a0000000000000,0x0000000000000000,0x00a38000000000000},
+ { 0x00000be259f7916a,0x05983f1b660201435,0x000528549f307d0d,0x0007ddc049a4056e2,0x0000000000000000,0x059a0000000000000,0x0005200000000000,0x0007de00000000000},
+ { 0x0000000000000f6f,0x00000002a43b97f1e,0x0000000000021ecb,0x00000000000812648,0x0000000000000000,0x00000002a50000000,0x0000000000020000,0x00000000000814000},
+ { 0x000000005f7505b7,0x0000905cfafad8432,0x00000005e94b40a4,0x0000001f805857821,0x0000000000000000,0x00009080000000000,0x0000000580000000,0x0000001f880000000},
+ { 0x000000000096679f,0x001c8eb5845f62082,0x0000000002571c85,0x000000036c1d3cd88,0x0000000000000000,0x001c9000000000000,0x0000000000000000,0x000000036d0000000},
+ { 0x000000000000066b,0x0000016afe5085d56,0x00000000006968b6,0x000000002f56b1945,0x0000000000000000,0x0000016b000000000,0x0000000000000000,0x000000002f6000000},
+ { 0x0000000000000017,0x0000002478963096c,0x00000000000396b1,0x00000005612b83f5d,0x0000000000000000,0x00000024800000000,0x0000000000000000,0x00000005620000000},
+ { 0x00000000000afc12,0x05cb9369185d22ef1,0x0000000e3aed15cf,0x0000001a837de4055,0x0000000000000000,0x05cc0000000000000,0x0000000e00000000,0x0000001a880000000},
+ { 0x000000000000025c,0x000000000586127ae,0x000000000000211e,0x00000000000078226,0x0000000000000000,0x00000000058800000,0x0000000000002000,0x00000000000078400},
+ { 0x0000000000000017,0x01923a85674175cd4,0x000000000000002e,0x00000000000026132,0x0000000000000000,0x01928000000000000,0x0000000000000000,0x00000000000026200},
+ { 0x0000000000000009,0x0003521ec7ffe8c21,0x00000000000002fa,0x0001cd48737cfbf83,0x0000000000000000,0x00035300000000000,0x0000000000000000,0x0001cd80000000000},
+ { 0x0000000000000003,0x0001c6eaeb09feee1,0x000000000000b6ba,0x0000000000ba7f01b,0x0000000000000000,0x0001c700000000000,0x0000000000000000,0x0000000000ba80000},
+ { 0x000000000000049b,0x000000000000625c5,0x00000000000047ff,0x0000000000000791d,0x0000000000000400,0x00000000000062600,0x00000000000047f0,0x00000000000007920},
+ { 0x00000000b48ea201,0x0387b7ae33afcabe4,0x000000466fae1ba0,0x0001b272516f33c52,0x0000000000000000,0x03880000000000000,0x0000000000000000,0x0001b280000000000},
+ { 0x000000000002bfd5,0x01b827e9fcced157d,0x0000000000069420,0x000bebf802c038b40,0x0000000000000000,0x01b88000000000000,0x0000000000000000,0x000bec00000000000},
+ { 0x00000000001d34c5,0x018f2b58ab4b8ed19,0x00000c737deab9a3,0x00000472d62856c49,0x0000000000000000,0x018f8000000000000,0x00000c7000000000,0x00000473000000000},
+ { 0x0000000000000003,0x002876f93b6f65958,0x0000000000000848,0x0000000000027f575,0x0000000000000000,0x00288000000000000,0x0000000000000000,0x00000000000280000},
+ { 0x0000000000001552,0x0003928cb2c0ca8a3,0x0000000000001e86,0x000000000b28f8da8,0x0000000000000000,0x00039300000000000,0x0000000000000000,0x000000000b2c00000},
+ { 0x000000000000003e,0x0000000060b789bb9,0x00000000000018f7,0x000000000000026d5,0x0000000000000000,0x0000000060c000000,0x00000000000018f7,0x000000000000026d5},
+ { 0x0000000000001fce,0x00f9ebf92431d8b8a,0x000000000000c1d6,0x00b52109068f1a5d4,0x0000000000000000,0x00fa0000000000000,0x0000000000000000,0x00b54000000000000},
+ { 0x0000000000000003,0x00000126a99ebe9fc,0x00000000000002d7,0x000000113446d10cd,0x0000000000000000,0x00000127000000000,0x0000000000000000,0x00000011380000000},
+ { 0x0000000000000001,0x007571264a3c02575,0x00000000003150cf,0x0000782167cbb53fb,0x0000000000000000,0x00758000000000000,0x0000000000000000,0x00007840000000000},
+ { 0x00000000000005fe,0x00003e23de432f16a,0x0000000000001842,0x0000003840726d4bf,0x0000000000000000,0x00003e30000000000,0x0000000000000000,0x00000038500000000},
+ { 0x00000000000000de,0x0001faaba7beca9cc,0x000000000000a470,0x00000e45ed14cbbbf,0x0000000000000000,0x0001fb00000000000,0x0000000000000000,0x00000e48000000000},
+ { 0x00000000000fd440,0x0051d625bafcfc8fb,0x0000012fdd12bfc6,0x0000030d5861dc609,0x0000000000000000,0x0051e000000000000,0x0000012000000000,0x0000030e000000000},
+ { 0x0000000000052bfa,0x00003a6df15199606,0x00000000021c128a,0x0000000000bb3aed7,0x0000000000000000,0x00003a70000000000,0x00000000021c0000,0x0000000000bb40000},
+ { 0x0000000000000005,0x000009913f63e77f8,0x00000000000859b1,0x00000181da366c693,0x0000000000000000,0x00000994000000000,0x0000000000000000,0x00000182000000000},
+ { 0x000000000000014f,0x0000f5e050da44609,0x00000000000009ba,0x00000000000005f57,0x0000000000000000,0x0000f600000000000,0x00000000000009a0,0x00000000000005f60},
+ { 0x0000000000000f22,0x000cb0683f7180a3e,0x0000000b1ce5a99d,0x0000002b71258e51f,0x0000000000000000,0x000cb400000000000,0x0000000b00000000,0x0000002b800000000},
+ { 0x000000000000001c,0x01395746d65ad63f3,0x00000059fe5fc2ed,0x0000022e5d6fa3679,0x0000000000000000,0x01398000000000000,0x0000005000000000,0x0000022f000000000},
+ { 0x000000000000b4a6,0x00013cd1ad3c26900,0x00000b1b6c674105,0x0000079d14a5e6c8d,0x0000000000000000,0x00013d00000000000,0x00000b0000000000,0x0000079e000000000},
+ { 0x000000000504db04,0x00237e71d59c23947,0x0000000359998c3f,0x0003604b835dc0c21,0x0000000000000000,0x00238000000000000,0x0000000000000000,0x00036100000000000},
+ { 0x000000000000005d,0x00000000000000308,0x00000000000001ae,0x000000000000002b1,0x000000000000005d,0x00000000000000308,0x00000000000001ae,0x000000000000002b1},
+ { 0x0000000000000007,0x010da11bec0ea28b4,0x0000000000000030,0x00000001771657192,0x0000000000000000,0x010e0000000000000,0x0000000000000000,0x00000001778000000},
+ { 0x000000000000000a,0x00000780812e37f4c,0x0000000000000e3f,0x00000366c7d161252,0x0000000000000000,0x00000782000000000,0x0000000000000000,0x00000367000000000},
+ { 0x0000000000000036,0x0000049d1b8962afe,0x0000003962b53891,0x000001b763480475d,0x0000000000000000,0x0000049e000000000,0x0000003800000000,0x000001b7800000000},
+ { 0x00000000001b73a9,0x0007892a4bc903dc4,0x000000000d2c1560,0x00000000018f0f1c3,0x0000000000000000,0x00078a00000000000,0x000000000d2c0000,0x00000000018f40000},
+ { 0x000000000000001e,0x00001d9f71e6512ef,0x0000000000f8eba9,0x0000000045edf0626,0x0000000000000000,0x00001da0000000000,0x0000000000000000,0x00000000460000000},
+ { 0x00000000000004d5,0x000004f294a7c344b,0x000000000000145a,0x00000000042197c20,0x0000000000000000,0x000004f4000000000,0x0000000000000000,0x00000000042200000},
+ { 0x0000000000000079,0x00071beacc6006a53,0x00000000040e2717,0x000000000f11edb31,0x0000000000000000,0x00071c00000000000,0x0000000004000000,0x000000000f1400000},
+ { 0x0000000000000002,0x000554ddbfa25134f,0x00000000000e7228,0x00000000670889524,0x0000000000000000,0x00055600000000000,0x0000000000000000,0x00000000672000000},
+ { 0x00000000014d3271,0x0004d8a0d9474f510,0x0000000003f6eea5,0x00003eaffd27fb376,0x0000000000000000,0x0004da00000000000,0x0000000000000000,0x00003eb0000000000},
+ { 0x00000000000000ba,0x0000000000003f23d,0x00000000000002f5,0x0000000000000075f,0x0000000000000000,0x0000000000003f300,0x00000000000002f5,0x0000000000000075f},
+ { 0x0000000000000196,0x0010bd51d55113fc7,0x00000000c5719bb0,0x00000003ec22dadcc,0x0000000000000000,0x0010c000000000000,0x00000000c0000000,0x00000003ed0000000},
+ { 0x000000000000014e,0x000072e0eac0558dc,0x000000000000018d,0x0000000023d247121,0x0000000000000000,0x00007300000000000,0x0000000000000000,0x0000000023e000000},
+ { 0x000000000003c514,0x00ca11ecdb17b4491,0x000001af5f01ea6d,0x000000c4d30c05c72,0x0000000000000000,0x00ca4000000000000,0x000001ac00000000,0x000000c5000000000},
+ { 0x0000000000000000,0x0000692bdfc89ec51,0x0000000000001e58,0x000000000000053b2,0x0000000000000000,0x00006940000000000,0x0000000000001e50,0x000000000000053c0},
+ { 0x000000000019fb80,0x006e462b9b8d8b077,0x000000c5d4b4a08e,0x00084b1b7b63cb810,0x0000000000000000,0x006e6000000000000,0x0000000000000000,0x00084c00000000000},
+ { 0x0000000000000c0d,0x00262d6bcd7b92d10,0x000002cc8417373b,0x0002a79acf3958ea1,0x0000000000000000,0x00263000000000000,0x0000000000000000,0x0002a800000000000},
+ { 0x0000000000000003,0x00000000008f0a17f,0x0000000000000025,0x00000000004d4c84a,0x0000000000000000,0x00000000008f40000,0x0000000000000000,0x00000000004d60000},
+ { 0x0000000000001288,0x000001fa6d107baa4,0x00000006c41f2502,0x0000000e087f15e5a,0x0000000000000000,0x000001fa800000000,0x00000006c0000000,0x0000000e0c0000000},
+ { 0x00000000000bf92b,0x001777aab5553d302,0x0000000591758f30,0x000000038c0e215b6,0x0000000000000000,0x00177800000000000,0x0000000590000000,0x000000038d0000000},
+ { 0x0000000000000000,0x000bbf498ebbbd9ec,0x0000000000000101,0x00001dc16812d895d,0x0000000000000000,0x000bc000000000000,0x0000000000000000,0x00001dc8000000000},
+ { 0x0000000000000005,0x00000000000931d38,0x00000000000bd784,0x00000000000100a40,0x0000000000000000,0x00000000000934000,0x00000000000bd600,0x00000000000100c00},
+ { 0x000000000000329d,0x0006be2aa657bc749,0x00000006d6777a03,0x00001473ceab871e5,0x0000000000000000,0x0006c000000000000,0x0000000000000000,0x00001478000000000},
+ { 0x000000000001e7fe,0x00000581892c6f111,0x000000000014a19d,0x000000e1c3158d902,0x0000000000000000,0x00000582000000000,0x0000000000000000,0x000000e2000000000},
+ { 0x000000025c5f5dc3,0x000003631b5b92f90,0x0000000e09742df0,0x00000004a1e2c811a,0x0000000000000000,0x00000364000000000,0x0000000e00000000,0x00000004a20000000},
+ { 0x00000000000000c7,0x00000093fb410d98d,0x0000000000003def,0x00000000000010c53,0x0000000000000000,0x00000094000000000,0x0000000000003dc0,0x00000000000010c80},
+ { 0x000000000000cde1,0x00000000001198016,0x0000000000015553,0x00000000000044e4d,0x0000000000008000,0x000000000011a0000,0x0000000000015500,0x00000000000044f00},
+ { 0x0000000000e2c9da,0x000066a3001e6b7f8,0x000000000ce10c9a,0x000000000d9713e83,0x0000000000000000,0x000066c0000000000,0x000000000cc00000,0x000000000d9800000},
+ { 0x000000000001a141,0x0005a8e33a1f38278,0x00000000057e0f0e,0x00000001ec8d4f0e8,0x0000000000000000,0x0005aa00000000000,0x0000000000000000,0x00000001ed0000000},
+ { 0x00000000001ecb97,0x0101c43712d5cf9b5,0x0028d91157907070,0x00322ef55ac40e8f9,0x0000000000000000,0x01020000000000000,0x0028000000000000,0x00323000000000000},
+ { 0x0000000000000007,0x000000003cb643163,0x0000000000023b12,0x00000000045acb061,0x0000000000000000,0x000000003cc000000,0x0000000000000000,0x00000000045c00000},
+ { 0x00000000003259b9,0x0000f0b9174de5cdb,0x000000001666dbf6,0x000000273dc4c3995,0x0000000000000000,0x0000f0c0000000000,0x0000000000000000,0x00000027400000000},
+ { 0x000000053cd050b3,0x00006a3fa7d241337,0x00000e80882eda4b,0x00000633e815545c7,0x0000000000000000,0x00006a40000000000,0x00000e8000000000,0x00000634000000000},
+ { 0x0000000000016587,0x000000171a4d55ae4,0x00000000846ddf68,0x000000001cfc1e59d,0x0000000000000000,0x00000017200000000,0x0000000084000000,0x000000001d0000000},
+ { 0x0000000015c293c9,0x000a2727d55d48613,0x0000000599a1aef7,0x00000009577cf247a,0x0000000000000000,0x000a2800000000000,0x0000000580000000,0x00000009580000000},
+ { 0x0000000000bf22fc,0x00000c76744893226,0x000000003109668f,0x00000000052666220,0x0000000000000000,0x00000c78000000000,0x0000000031000000,0x00000000052700000},
+ { 0x000000000000003d,0x00e1cf7a1afdad1ec,0x000000002f86b0f9,0x000006a5999ccd8ba,0x0000000000000000,0x00e20000000000000,0x0000000000000000,0x000006a6000000000},
+ { 0x00000000000002f4,0x000017c6cd9dac09b,0x0000000000fbd4eb,0x00000000028d225b5,0x0000000000000000,0x000017c8000000000,0x0000000000f00000,0x00000000028e00000},
+ { 0x00000000001dd2cf,0x00013e0f64756d3d0,0x000000006a0b4c60,0x000000007ce01a762,0x0000000000000000,0x00013e80000000000,0x000000006a000000,0x000000007d0000000},
+ { 0x000000000000002b,0x00000715ae85fae14,0x00000003463656b6,0x0000000067db9e176,0x0000000000000000,0x00000716000000000,0x0000000346000000,0x0000000067e000000},
+ { 0x000000075907f0b5,0x0ab54fb6957bbeebb,0x00000021c6d5d471,0x000000076747e3e68,0x0000000000000000,0x0ab80000000000000,0x00000021c0000000,0x00000007680000000},
+ { 0x000000000000a126,0x00000fb0b6d463d9a,0x0000000001d586af,0x0000003f669164613,0x0000000000000000,0x00000fb4000000000,0x0000000000000000,0x0000003f700000000},
+ { 0x000000000499feb9,0x000038c364cf2f51f,0x00000000056d7799,0x00000000222b5152f,0x0000000000000000,0x000038d0000000000,0x0000000005000000,0x00000000223000000},
+ { 0x00000000003a95f3,0x02be9e223a89fa50f,0x000000000089e085,0x0000002ffdf5080ec,0x0000000000000000,0x02bf0000000000000,0x0000000000000000,0x00000030000000000},
+ { 0x00000000000000da,0x0000000000f9be96b,0x00000000000462b3,0x00000000001c2f846,0x0000000000000000,0x0000000000f9c0000,0x0000000000040000,0x00000000001c30000},
+ { 0x0000000000000003,0x0000030b8689a8d9b,0x0000000000000007,0x00000000000000007,0x0000000000000000,0x0000030c000000000,0x0000000000000007,0x00000000000000007},
+ { 0x00000000000003e7,0x00000a04b10399953,0x0000000000070218,0x000000fb237e30c6b,0x0000000000000000,0x00000a08000000000,0x0000000000000000,0x000000fb400000000},
+ { 0x0000000000000174,0x0f5bf16362d417bda,0x000000000051fcb3,0x04c596d54b5e2c344,0x0000000000000000,0x0f5c0000000000000,0x0000000000000000,0x04c60000000000000},
+ { 0x000000000000006d,0x000275c2e233c73a8,0x0000000001d0230c,0x000000006ee56e774,0x0000000000000000,0x00027600000000000,0x0000000000000000,0x000000006f0000000},
+ { 0x0000000000042c41,0x0006df37966f1c358,0x0000000000bffe99,0x0000000001b447426,0x0000000000000000,0x0006e000000000000,0x0000000000b80000,0x0000000001b480000},
+ { 0x000000000000007f,0x003331610fc0efe6b,0x0000000000000fd1,0x000000000108454b9,0x0000000000000000,0x00334000000000000,0x0000000000000000,0x00000000010880000},
+ { 0x000000003408a13b,0x00782a5844c0c6818,0x000000017b1916d2,0x0007a9e411543e9eb,0x0000000000000000,0x00784000000000000,0x0000000000000000,0x0007aa00000000000},
+ { 0x0000000000000172,0x0000124762375b10a,0x000000000000bea4,0x000000000189a62e9,0x0000000000000000,0x00001248000000000,0x0000000000000000,0x00000000018a00000},
+ { 0x0001b197b68207d3,0x001049884b1eb64f3,0x0008224cdda1fc8f,0x000105f61ec48eb60,0x0001800000000000,0x00105000000000000,0x0008200000000000,0x00010600000000000},
+ { 0x0000000000000087,0x0000001e52f9b6575,0x0000000000000316,0x000000001562e9281,0x0000000000000000,0x0000001e580000000,0x0000000000000000,0x00000000156800000},
+ { 0x0000000000000005,0x0dfdacbf4f36f68a0,0x0000000000000213,0x0000cfddc59efb1ca,0x0000000000000000,0x0e000000000000000,0x0000000000000000,0x0000d000000000000},
+ { 0x00000000004bf755,0x000000aa8f031df03,0x00000000012dfa5a,0x00000000051ba5d6d,0x0000000000000000,0x000000aac00000000,0x0000000001200000,0x00000000051c00000},
+ { 0x000000002cb851fc,0x016ec56bf9327c85c,0x00000000511379c2,0x0000029b62b69f296,0x0000000000000000,0x016f0000000000000,0x0000000000000000,0x0000029c000000000},
+ { 0x0000000000000001,0x000023a6731a4770d,0x0000000024dacaf0,0x0000001876c9a192b,0x0000000000000000,0x000023b0000000000,0x0000000000000000,0x00000018780000000},
+ { 0x0000000000015155,0x021391cd8c63e6475,0x000005c8a2db66f4,0x0000722c2bbe176d0,0x0000000000000000,0x02140000000000000,0x0000040000000000,0x00007240000000000},
+ { 0x0000000cce8a3fb5,0x00729d3dff1f24d0a,0x0000ce51709c045f,0x0015cd02b09eb6bd7,0x0000000000000000,0x0072a000000000000,0x0000800000000000,0x0015d000000000000},
+ { 0x0000000000000f37,0x000009cb042f5ee56,0x00000000006d5134,0x00000000001062e06,0x0000000000000000,0x000009cc000000000,0x00000000006d4000,0x00000000001064000},
+ { 0x00000000000089d4,0x00000000000663ba4,0x0000000000019ba7,0x00000000000469ed1,0x0000000000008000,0x00000000000664000,0x0000000000018000,0x0000000000046a000},
+ { 0x00000000ef84d26d,0x009ed004b6c8d2fac,0x00000007641b2d1a,0x0013afe96b43d8146,0x0000000000000000,0x009f0000000000000,0x0000000000000000,0x0013b000000000000},
+ { 0x0000000000000014,0x0ad7128a42872fb08,0x0000000000000185,0x0000000000005b09d,0x0000000000000000,0x0ad80000000000000,0x0000000000000000,0x0000000000005b200},
+ { 0x00000000000009a5,0x008b209d9e3f33879,0x00000000192ea6e1,0x000000127def62d3a,0x0000000000000000,0x008b4000000000000,0x0000000000000000,0x00000012800000000},
+ { 0x0000000000000006,0x0007da1e87a0d1c23,0x000000000000000e,0x00000000000001305,0x0000000000000000,0x0007dc00000000000,0x0000000000000008,0x00000000000001308},
+ { 0x00000011f75dc1f3,0x000001b2e5cdfbe7c,0x000000d0cdea89a4,0x000000577447c55fb,0x0000001000000000,0x000001b3000000000,0x000000d000000000,0x00000057800000000},
+ { 0x000000000001800b,0x00004e1f6b0160b74,0x00000000001f726a,0x0000000007acc396d,0x0000000000000000,0x00004e20000000000,0x0000000000000000,0x0000000007ae00000},
+ { 0x000000000015dc5e,0x000001f4ed536d3f7,0x00000000d2d5db8e,0x00000005b60603267,0x0000000000000000,0x000001f5000000000,0x00000000c0000000,0x00000005b80000000},
+ { 0x0000000000000003,0x00000019304f22483,0x0000000000ef30c7,0x000000000fd0a1f49,0x0000000000000000,0x00000019380000000,0x0000000000c00000,0x000000000fd400000},
+ { 0x000000000000000c,0x00035805b061e5df3,0x00000000071837c9,0x000000002fd633fc3,0x0000000000000000,0x00035900000000000,0x0000000007000000,0x000000002fe000000},
+ { 0x0000000000000034,0x001d65bfe1e31b4a3,0x00000005e9de5330,0x000000ff7f36f5406,0x0000000000000000,0x001d6800000000000,0x0000000400000000,0x000000ff800000000},
+ { 0x000000000000034a,0x000098cdeac782b7f,0x00000001c0853092,0x00000004fa5b3b248,0x0000000000000000,0x00009900000000000,0x00000001c0000000,0x00000004fc0000000},
+ { 0x0000000065970866,0x0c724e7b201b932dd,0x000008b8a2c1247a,0x00016cd16bf185339,0x0000000000000000,0x0c740000000000000,0x0000080000000000,0x00016d00000000000},
+ { 0x000000000000000c,0x000040d69a06a0d52,0x00000000000000de,0x000000000000001b3,0x0000000000000000,0x000040e0000000000,0x00000000000000de,0x000000000000001b3},
+ { 0x0000000000000ff0,0x0000365a153914c9d,0x000000000024d286,0x00000000005a8f9da,0x0000000000000000,0x00003660000000000,0x0000000000240000,0x00000000005aa0000},
+ { 0x000000000000002f,0x000000783712f58d0,0x0000000000009cee,0x000000000000372d1,0x0000000000000000,0x00000078400000000,0x0000000000009c00,0x00000000000037300},
+ { 0x000000000000001f,0x012a93a9d499ce175,0x00000079eef43458,0x00f75d65e3946a3e4,0x0000000000000000,0x012b0000000000000,0x0000000000000000,0x00f78000000000000},
+ { 0x000000000000000d,0x0a41f76cbd8e9fe10,0x000000000000ef83,0x00000000000e3b9a3,0x0000000000000000,0x0a440000000000000,0x000000000000c000,0x00000000000e3c000},
+ { 0x0000000000000001,0x0001748a9b527c909,0x0000000144f0f667,0x000001b30e1608c21,0x0000000000000000,0x00017500000000000,0x0000000000000000,0x000001b3800000000},
+ { 0x0000000000001329,0x000adee322dfe7137,0x00000000025a93f7,0x000004893acf8cb16,0x0000000000000000,0x000ae000000000000,0x0000000000000000,0x0000048a000000000},
+ { 0x000000000000a2b6,0x00007f54497ebecab,0x0000086b5bfbb6df,0x000003558d90e46d8,0x0000000000000000,0x00007f60000000000,0x0000086000000000,0x00000356000000000},
+ { 0x00000000000019c6,0x0142ee2338c749532,0x0000000000048501,0x00002729061eb60c6,0x0000000000000000,0x01430000000000000,0x0000000000000000,0x00002730000000000},
+ { 0x000000000000080a,0x00000004943fb91c2,0x0000000000000f68,0x00000000000b9f63d,0x0000000000000000,0x00000004960000000,0x0000000000000000,0x00000000000ba0000},
+ { 0x00000000000a0833,0x0000000000b38c748,0x0000000000763448,0x00000000000fbf36f,0x0000000000080000,0x0000000000b3c0000,0x0000000000760000,0x00000000000fc0000},
+ { 0x0000001b373b79ac,0x005c4588e9a249590,0x00000056179cbd9d,0x0000c08db060deacc,0x0000000000000000,0x005c6000000000000,0x0000000000000000,0x0000c0c0000000000},
+ { 0x0000000000003ac0,0x0000081fbbd7e35ce,0x0000000048891ff8,0x000000000c16ea8c6,0x0000000000000000,0x00000820000000000,0x0000000048800000,0x000000000c1800000},
+ { 0x0000000000000009,0x0014404de0c634654,0x00000000000001cf,0x0000000003f38b646,0x0000000000000000,0x00144800000000000,0x0000000000000000,0x0000000003f400000},
+ { 0x0000000000005e3c,0x000623e010301ca7d,0x0000000000bcdfde,0x00000194450ba2161,0x0000000000000000,0x00062400000000000,0x0000000000000000,0x00000194800000000},
+ { 0x00000000000001de,0x000040c4f024b1500,0x00000000000190c9,0x000019d577f130627,0x0000000000000000,0x000040e0000000000,0x0000000000000000,0x000019d8000000000},
+ { 0x000000000000538a,0x000001ae27526e4f2,0x0000000000b2618c,0x0000001908cc0754c,0x0000000000000000,0x000001ae800000000,0x0000000000000000,0x00000019100000000},
+ { 0x0000000000001f9c,0x0000382ecff5b3f5c,0x000000a3124c6c91,0x000000c945f91c95d,0x0000000000000000,0x00003830000000000,0x000000a000000000,0x000000c9800000000},
+ { 0x00000000000001e0,0x00000441232044261,0x00000000000118f7,0x0000000000017acaa,0x0000000000000000,0x00000442000000000,0x0000000000011800,0x0000000000017b000},
+ { 0x0000000000000991,0x0c556d5ebf36fae8a,0x000000011b75061a,0x0000000024e44d43d,0x0000000000000000,0x0c580000000000000,0x000000011b000000,0x0000000024e800000},
+ { 0x0000000000000002,0x000013c8fc635a0bf,0x0000000000657233,0x000000000033766d8,0x0000000000000000,0x000013d0000000000,0x0000000000650000,0x00000000003380000},
+ { 0x0000000107b662d8,0x0000c7180a911c1fb,0x0000008cd72990d3,0x0000017746260a8c7,0x0000000000000000,0x0000c740000000000,0x0000008800000000,0x00000177800000000},
+ { 0x000000000000000e,0x00000dfe4c98377a5,0x0000000000003492,0x0000000003fb16595,0x0000000000000000,0x00000e00000000000,0x0000000000000000,0x0000000003fc00000},
+ { 0x0000000000000003,0x0000bdff1060d2e59,0x0000000000001649,0x0000003bf3c2e8d40,0x0000000000000000,0x0000be00000000000,0x0000000000000000,0x0000003c000000000},
+ { 0x0000000005fe4c66,0x035e1c52d3ffa84cb,0x000162a6858ee8a6,0x00feb7bc8dfa37a57,0x0000000000000000,0x035f0000000000000,0x0000000000000000,0x00fec000000000000},
+ { 0x00000000b8b15300,0x0000002193dc6eb43,0x00000003aa3f52a8,0x0000000d04ba3c876,0x0000000000000000,0x00000021a00000000,0x0000000380000000,0x0000000d080000000},
+ { 0x0000000000000002,0x000005df0cc83c8c5,0x0000000000000005,0x0000000285e5b1be7,0x0000000000000000,0x000005e0000000000,0x0000000000000000,0x00000002860000000},
+ { 0x0000000041ef56dd,0x000316f596f7c11a7,0x000001a1a609b18d,0x000001d4901863416,0x0000000000000000,0x00031700000000000,0x000001a000000000,0x000001d5000000000},
+ { 0x0000000000000003,0x0008ba05c8e9fbb96,0x0000000571703107,0x0001932b7758be1f8,0x0000000000000000,0x0008bc00000000000,0x0000000000000000,0x00019380000000000},
+ { 0x000000024f4de6d6,0x000000072e7ce42e5,0x0000000a8baf1a8f,0x000000018e6b60199,0x0000000240000000,0x00000007300000000,0x0000000a88000000,0x000000018e8000000},
+ { 0x0000000000000040,0x0009a97d1055599b5,0x000000000038dcba,0x0005191d1de9e9ff8,0x0000000000000000,0x0009ac00000000000,0x0000000000000000,0x00051a00000000000},
+ { 0x0000000000000233,0x00000929293b53bfc,0x0000000000026cdb,0x00000014029112f0d,0x0000000000000000,0x0000092c000000000,0x0000000000000000,0x00000014080000000},
+ { 0x0000000000000001,0x003e91bef066cbecb,0x000000008616fc6e,0x0000003e0c52d04e2,0x0000000000000000,0x003ea000000000000,0x0000000000000000,0x0000003e100000000},
+ { 0x000000000007c2fc,0x088cab402ea389a2d,0x00000000066f65d7,0x00000694ac8b3edd1,0x0000000000000000,0x08900000000000000,0x0000000000000000,0x00000696000000000},
+ { 0x000000000003fb20,0x01acfeaee5f05ec89,0x000000005cc86973,0x0000000031b40b9e4,0x0000000000000000,0x01ad0000000000000,0x000000005c000000,0x0000000031c000000},
+ { 0x00000000000016e1,0x035475f29effdde22,0x000000240e3cead6,0x00000df77e4b69a16,0x0000000000000000,0x03550000000000000,0x0000000000000000,0x00000df8000000000},
+ { 0x00000000000796e3,0x002ae3554a31a02f6,0x000003e82679d219,0x001c7a59ce5b67d17,0x0000000000000000,0x002af000000000000,0x0000000000000000,0x001c8000000000000},
+ { 0x0000000000839afe,0x000032f1a1d985758,0x000025e20c42460c,0x00002a0d3a3950b0f,0x0000000000000000,0x00003300000000000,0x0000250000000000,0x00002a10000000000},
+ { 0x0000000dbfe7f3e1,0x00085b3fcb3f3cd1f,0x0000004fe73070d1,0x0003ba708e5825221,0x0000000000000000,0x00085c00000000000,0x0000000000000000,0x0003bb00000000000},
+ { 0x00000017b74aad21,0x004848007118af32f,0x00b451a1ebd93bc6,0x0015580e70eb641e8,0x0000000000000000,0x00486000000000000,0x00b4400000000000,0x00155c00000000000},
+ { 0x0000000000000001,0x00b65ca90f3b54bd5,0x000000000000ee26,0x000000000004535de,0x0000000000000000,0x00b68000000000000,0x000000000000e000,0x00000000000454000},
+ { 0x00000000000001ab,0x0000000015f7f4c00,0x000000000000c1b3,0x000000000e27c637c,0x0000000000000000,0x0000000015f800000,0x0000000000000000,0x000000000e2800000},
+ { 0x0000000000037c27,0x001aff8bf01f13fa0,0x0000000019b21862,0x00000000039150167,0x0000000000000000,0x001b0000000000000,0x0000000019b00000,0x00000000039180000},
+ { 0x0000000000000088,0x00005f5fd93eaaa0a,0x000000000062ca15,0x0000000079185bbbd,0x0000000000000000,0x00005f60000000000,0x0000000000000000,0x00000000792000000},
+ { 0x00000000000014ce,0x034e238ed69fdfb6d,0x0000000051074e0f,0x00000311116bb667e,0x0000000000000000,0x034f0000000000000,0x0000000000000000,0x00000312000000000},
+ { 0x000000001ff70b9a,0x00000408d211fe077,0x000000003ca934ee,0x00000001aed0c9cf8,0x0000000000000000,0x0000040a000000000,0x0000000038000000,0x00000001af0000000},
+ { 0x0000000000000006,0x037651c7fa88e6579,0x0000089f813196bc,0x00004d48275b9572a,0x0000000000000000,0x03770000000000000,0x0000080000000000,0x00004d60000000000},
+ { 0x0000000000000078,0x0079ada200a72e9bf,0x000000000001a3c8,0x000b7127b00f53c92,0x0000000000000000,0x0079c000000000000,0x0000000000000000,0x000b7400000000000},
+ { 0x00001f149ea3077d,0x00001c59df9e16341,0x0000b5ae7db37080,0x000019b57448efb6d,0x00001f0000000000,0x00001c60000000000,0x0000b58000000000,0x000019b8000000000},
+ { 0x0000000000000000,0x000000000659093c5,0x000000000003323a,0x0000000000288add4,0x0000000000000000,0x00000000065a00000,0x0000000000030000,0x00000000002890000},
+ { 0x0000000000000003,0x0000001a654d3f0a6,0x000000009278fdc0,0x0000000011f544279,0x0000000000000000,0x0000001a680000000,0x0000000092400000,0x0000000011f800000},
+ { 0x000000000000edb9,0x003b5277b4431e614,0x0005a5d5028ea7d0,0x0017f83adc8221431,0x0000000000000000,0x003b6000000000000,0x0005800000000000,0x00180000000000000},
+ { 0x00000000015b3d1e,0x00009a454095277ac,0x000004ac7042b4d8,0x0000007303777dc69,0x0000000000000000,0x00009a80000000000,0x000004ac00000000,0x00000073100000000},
+ { 0x0000000000000c93,0x00000003ab11c72ec,0x00000000001de244,0x0000000051aed90ec,0x0000000000000000,0x00000003ac0000000,0x0000000000000000,0x0000000051c000000},
+ { 0x0000000002229b1a,0x00000af85e339b54b,0x0000000004c3e3e8,0x000008e9a98c97e4f,0x0000000000000000,0x00000afc000000000,0x0000000000000000,0x000008ec000000000},
+ { 0x0000000000000001,0x05fc2a85cb2d7c74d,0x000000000000fdcd,0x00000000128954a7d,0x0000000000000000,0x05fe0000000000000,0x0000000000000000,0x00000000129000000},
+ { 0x000000000109fb58,0x00341af1d6f38e16a,0x0000000170e83937,0x000e5419d4e50079e,0x0000000000000000,0x00342000000000000,0x0000000000000000,0x000e5800000000000},
+ { 0x00000000000357a1,0x0458a1402fc61d8ef,0x000000000a630042,0x00000030c27c9cfd4,0x0000000000000000,0x045a0000000000000,0x0000000000000000,0x00000030d00000000},
+ { 0x000000000000002f,0x0013886b12faa4450,0x0000007d31f7b889,0x0000007127d76dbda,0x0000000000000000,0x00139000000000000,0x0000007c00000000,0x00000071400000000},
+ { 0x0000000000000bbb,0x0003f50ce1e876eec,0x00000000599e570e,0x000001a0a3db0411b,0x0000000000000000,0x0003f600000000000,0x0000000000000000,0x000001a1000000000},
+ { 0x0000000000000c97,0x000001c14cbbfafc0,0x000000000001eea0,0x0000000001750b2b6,0x0000000000000000,0x000001c1800000000,0x0000000000000000,0x00000000017580000},
+ { 0x0000000000003b7a,0x008f1a3d9650bba79,0x00000004764d6e56,0x000000d1b17d7394c,0x0000000000000000,0x008f4000000000000,0x0000000400000000,0x000000d1c00000000},
+ { 0x0000000000000002,0x0028b4f8a488de0b4,0x00000000006f8471,0x0002f61eea616c66d,0x0000000000000000,0x0028c000000000000,0x0000000000000000,0x0002f700000000000},
+ { 0x0000000000000248,0x0000000a813edb4c7,0x0000000000011267,0x00000000017c924aa,0x0000000000000000,0x0000000a840000000,0x0000000000000000,0x00000000017d00000},
+ { 0x0000000000024538,0x03815dc729a6ceaca,0x00016bf75e0cd478,0x00685395bfd9ac9e6,0x0000000000000000,0x03820000000000000,0x0000000000000000,0x00686000000000000},
+ { 0x00000000004c11f4,0x02aff978d3f93ca37,0x00000110dceb8499,0x00000972d90bc59f0,0x0000000000000000,0x02b00000000000000,0x0000010000000000,0x00000974000000000},
+ { 0x00000000000b6494,0x00003a13b48dc3b56,0x000000000016810f,0x000000006ab162886,0x0000000000000000,0x00003a20000000000,0x0000000000000000,0x000000006ac000000},
+ { 0x000000000000027c,0x000002fa5af5efa98,0x0000000d411033f6,0x0000022019c933217,0x0000000000000000,0x000002fb000000000,0x0000000000000000,0x00000221000000000},
+ { 0x000000000000f7bc,0x00d38878690115330,0x0000000000566c2a,0x000013dbd92826302,0x0000000000000000,0x00d3c000000000000,0x0000000000000000,0x000013e0000000000},
+ { 0x000000000006a14f,0x002bdd565bc79c379,0x002f702c80258599,0x001cabd4915fe386c,0x0000000000000000,0x002be000000000000,0x002f000000000000,0x001cb000000000000},
+ { 0x000000000000023a,0x006f72d4317d7fe90,0x00000000004d806d,0x00019cf6ac7af7a3f,0x0000000000000000,0x006f8000000000000,0x0000000000000000,0x00019d00000000000},
+ { 0x00000000003d122c,0x00cf623dd38a4862f,0x000000003d57d757,0x00007a4c3e080b1ac,0x0000000000000000,0x00cf8000000000000,0x0000000000000000,0x00007a60000000000},
+ { 0x000000000000001c,0x00000238cd246f05d,0x0000000000000d02,0x000000000011180f5,0x0000000000000000,0x00000239000000000,0x0000000000000000,0x00000000001120000},
+ { 0x0000000000000037,0x000003dfd4ff20855,0x0000000f4d635a5c,0x000001a5ef6a17cec,0x0000000000000000,0x000003e0000000000,0x0000000800000000,0x000001a6000000000},
+ { 0x0000000000003696,0x017f54b3235449156,0x0000000017165190,0x000000000716e7733,0x0000000000000000,0x017f8000000000000,0x0000000017000000,0x00000000071800000},
+ { 0x0000000000116112,0x055f8561b1c5529dd,0x000009be3a9e996a,0x00000157028361736,0x0000000000000000,0x05600000000000000,0x000009bc00000000,0x00000157400000000},
+ { 0x0000000000000003,0x00006ea1a947362c3,0x000000000000001f,0x0000004747bf865dc,0x0000000000000000,0x00006ec0000000000,0x0000000000000000,0x00000047600000000},
+ { 0x0000000000000212,0x00000000016a3ff8e,0x000000000000d55c,0x00000000002f38761,0x0000000000000000,0x00000000016a80000,0x0000000000000000,0x00000000002f40000},
+ { 0x0000000000000002,0x0000000000000504a,0x0000000000000005,0x00000000000000038,0x0000000000000000,0x00000000000005060,0x0000000000000005,0x00000000000000038},
+ { 0x000000000000b52a,0x00016a278ac84b28e,0x0000000000015809,0x00001ff2750f1760f,0x0000000000000000,0x00016a80000000000,0x0000000000000000,0x00001ff8000000000},
+ { 0x000000000000018c,0x00000153d46bf7643,0x0000000000000429,0x00000000003a75675,0x0000000000000000,0x00000154000000000,0x0000000000000000,0x00000000003a80000},
+ { 0x00000000000038f3,0x00004220e010ea45b,0x0000000000f7b7e6,0x0000001821a3e968a,0x0000000000000000,0x00004240000000000,0x0000000000000000,0x00000018280000000},
+ { 0x00000000000004cb,0x000001ade4b24ccda,0x00000000000b64d3,0x00000000006d0f121,0x0000000000000000,0x000001ae000000000,0x00000000000a0000,0x00000000006d20000},
+ { 0x00000000000001d8,0x0030c8c1d17fe2c21,0x00000000004721d6,0x000272510f2434990,0x0000000000000000,0x0030d000000000000,0x0000000000000000,0x00027300000000000},
+ { 0x0000000015a99fb1,0x025e19b2b066cf22f,0x000000001d6c01b1,0x002d6c4af49d07471,0x0000000000000000,0x025f0000000000000,0x0000000000000000,0x002d7000000000000},
+ { 0x0000000000000125,0x0001c0da8b7c4f50e,0x00001f9859616952,0x0000362b5313180a1,0x0000000000000000,0x0001c100000000000,0x00001f0000000000,0x00003630000000000},
+ { 0x000000000000000a,0x0000000021025729b,0x000000000000023e,0x00000000000872245,0x0000000000000000,0x00000000211000000,0x0000000000000000,0x00000000000874000},
+ { 0x0000000000000924,0x00eac9c3c4ebd6f5f,0x000000000005e1c0,0x0000000000015bd5d,0x0000000000000000,0x00eb0000000000000,0x000000000005e000,0x0000000000015c000},
+ { 0x0000000000000074,0x0000031462e09ed68,0x00000000028743df,0x000000004ad8d88ba,0x0000000000000000,0x00000315000000000,0x0000000002000000,0x000000004ae000000},
+ { 0x0000000000001936,0x000000005b748e78f,0x0000000000002dcf,0x0000000003eaa22c8,0x0000000000000000,0x000000005b8000000,0x0000000000000000,0x0000000003eb00000},
+ { 0x0000000000000003,0x00010acf21fe51985,0x0000000000000183,0x000048d508a03872b,0x0000000000000000,0x00010b00000000000,0x0000000000000000,0x000048e0000000000},
+ { 0x00000000000000cd,0x00001d03ffa99c149,0x0000000000000471,0x0000000000001e35a,0x0000000000000000,0x00001d08000000000,0x0000000000000400,0x0000000000001e380},
+ { 0x0000000000000003,0x00fb0d4c88f53976e,0x00187acc86283d04,0x0004a085a95229f51,0x0000000000000000,0x00fb4000000000000,0x0018700000000000,0x0004a100000000000},
+ { 0x0000000001ff31e1,0x00000135d4cf01b22,0x000000002257cd82,0x0000006e6fb793692,0x0000000000000000,0x00000136000000000,0x0000000000000000,0x0000006e800000000},
+ { 0x0000000000000220,0x0003821c362826286,0x00000000088de52b,0x000000005c2357005,0x0000000000000000,0x00038300000000000,0x0000000008000000,0x000000005c4000000},
+ { 0x000000000003bf43,0x015f1822ed23d03e6,0x0000000000060864,0x000000000000ba94d,0x0000000000000000,0x015f8000000000000,0x0000000000060800,0x000000000000baa00},
+ { 0x000000000000000d,0x00000025b27af0c17,0x00000002ae97f6b4,0x000000006d472430f,0x0000000000000000,0x00000025c00000000,0x00000002ae000000,0x000000006d6000000},
+ { 0x00000000002dc01c,0x00000031af37eba07,0x0000000849355b3e,0x00000003cd804ede8,0x0000000000000000,0x00000031b00000000,0x0000000840000000,0x00000003ce0000000},
+ { 0x0000000000000000,0x01fd895d69f502087,0x000000000000002d,0x000000001fcdc2684,0x0000000000000000,0x01fe0000000000000,0x0000000000000000,0x000000001fd000000},
+ { 0x0000000000000223,0x000002ab1a6f6dfa4,0x000000000000025f,0x0000000c4b493079e,0x0000000000000000,0x000002ac000000000,0x0000000000000000,0x0000000c4c0000000},
+ { 0x00000000000011a0,0x00000000b23c0eb96,0x000000000000ca4b,0x00000000021baefde,0x0000000000000000,0x00000000b24000000,0x0000000000000000,0x00000000021c00000},
+ { 0x0000000000000075,0x0000000760e14651b,0x00000000000002fa,0x000000010f9f20fc1,0x0000000000000000,0x00000007620000000,0x0000000000000000,0x00000001100000000},
+ { 0x0000000000000d1c,0x002aa4ff5413b2818,0x000000000000f34a,0x0022b57322c0f5c3f,0x0000000000000000,0x002ab000000000000,0x0000000000000000,0x0022c000000000000},
+ { 0x000000000001682a,0x000000010379283ad,0x0000000001924d7d,0x0000000000eae4953,0x0000000000000000,0x00000001038000000,0x0000000001900000,0x0000000000eb00000},
+ { 0x00000000000000b0,0x000008ce2a318646d,0x00000000000019c5,0x0000000055bd0f70e,0x0000000000000000,0x000008d0000000000,0x0000000000000000,0x0000000055c000000},
+ { 0x0000000000004921,0x00000000035588d8c,0x0000000000007cd4,0x0000000000000e413,0x0000000000000000,0x00000000035600000,0x0000000000007cc0,0x0000000000000e420},
+ { 0x0000000000000000,0x00000033372bbc4cd,0x000000004392d796,0x0000000698a9c06c7,0x0000000000000000,0x00000033400000000,0x0000000040000000,0x000000069a0000000},
+ { 0x00000000000000bb,0x0001bbd2c1d76cdfe,0x00000000009a4fbc,0x0000000002b1b5727,0x0000000000000000,0x0001bc00000000000,0x0000000000900000,0x0000000002b200000},
+ { 0x0001d14f9f896d0a,0x0045aba6404ad9636,0x0002a654196cae3f,0x000363dc9073fce38,0x0000000000000000,0x0045c000000000000,0x0002a00000000000,0x00036400000000000},
+ { 0x0000000000130c44,0x012ce9132773057dd,0x0000000277d8226f,0x00000ed2d72b1e860,0x0000000000000000,0x012d0000000000000,0x0000000000000000,0x00000ed4000000000},
+ { 0x000000000002de37,0x000ca5ebce5e8020c,0x000000014db81f8d,0x000070c9d61c16bfe,0x0000000000000000,0x000ca800000000000,0x0000000000000000,0x000070e0000000000},
+ { 0x0000000000000000,0x0003d10c3e8630d82,0x0000000000000042,0x000000000000001a3,0x0000000000000000,0x0003d200000000000,0x0000000000000042,0x000000000000001a3},
+ { 0x0000000000056d4f,0x03aaf78bfda00f213,0x0000002b456668b1,0x014fd671433174270,0x0000000000000000,0x03ab0000000000000,0x0000000000000000,0x01500000000000000},
+ { 0x00000000007221df,0x000000ceff182b1b9,0x0000000002c5cc70,0x00000000f256aa4f0,0x0000000000000000,0x000000cf000000000,0x0000000000000000,0x00000000f28000000},
+ { 0x000000000000002f,0x0000000001273db2d,0x000000000000017d,0x0000000000000039f,0x0000000000000000,0x00000000012780000,0x000000000000017d,0x0000000000000039f},
+ { 0x00000000000002e3,0x00000c010e7785066,0x00000001b951afae,0x000000003e6821351,0x0000000000000000,0x00000c04000000000,0x00000001b9000000,0x000000003e7000000},
+ { 0x0000000000044f7c,0x01c9659e22382f47a,0x0000000431f3b037,0x000001560356a8fe4,0x0000000000000000,0x01c98000000000000,0x0000000000000000,0x00000156800000000},
+ { 0x000000000023c0d8,0x00038949ba51bc8bd,0x00002c5a17f83205,0x0000065bc0d48da76,0x0000000000000000,0x00038a00000000000,0x00002c5000000000,0x0000065c000000000},
+ { 0x0000000000000eef,0x00000e95c71b36779,0x0000000000039dc6,0x000000f3786932327,0x0000000000000000,0x00000e98000000000,0x0000000000000000,0x000000f3800000000},
+ { 0x0000000000000b88,0x00060ef2d2025f428,0x000000000004fae2,0x00000000837cb01e7,0x0000000000000000,0x00061000000000000,0x0000000000000000,0x00000000838000000},
+ { 0x000000000000003c,0x003ce715f47c35c7b,0x000000000fd7c008,0x002792ef85ece3766,0x0000000000000000,0x003cf000000000000,0x0000000000000000,0x0027a000000000000},
+ { 0x000000000001efbe,0x00000e52be7630886,0x00000000000cddd9,0x0000007fe1fdcaa6e,0x0000000000000000,0x00000e54000000000,0x0000000000000000,0x00000080000000000},
+ { 0x0000000014e2863b,0x003c6edb7f70da848,0x00000006926f8fb5,0x000e12bec32452417,0x0000000000000000,0x003c7000000000000,0x0000000000000000,0x000e1400000000000},
+ { 0x000000000000649e,0x001374dd7855b4a0b,0x000000000004d182,0x000000d622027c264,0x0000000000000000,0x00137800000000000,0x0000000000000000,0x000000d6400000000},
+ { 0x0000000000000ac7,0x009be86f420f73177,0x0000000006416df7,0x000000136cfa1de98,0x0000000000000000,0x009c0000000000000,0x0000000000000000,0x00000013700000000},
+ { 0x000000000000fd56,0x0000000001c66d1fc,0x0000000000098570,0x000000000163fd187,0x0000000000000000,0x0000000001c680000,0x0000000000080000,0x00000000016400000},
+ { 0x0000000000000009,0x01180d58ab161afc1,0x0000002e58b28475,0x000653e181cf82e5b,0x0000000000000000,0x01188000000000000,0x0000000000000000,0x00065400000000000},
+ { 0x000000000000021c,0x00103f3be3c269794,0x0000000021835b6f,0x0006fdd6dd7e8b741,0x0000000000000000,0x00104000000000000,0x0000000000000000,0x0006fe00000000000},
+ { 0x0000000000004952,0x001394a3448b675ea,0x000000000001a9d4,0x000000000079724d1,0x0000000000000000,0x00139800000000000,0x0000000000000000,0x00000000007980000},
+ { 0x00000000001c4628,0x00000003eafbce23d,0x0000000035880a41,0x000000000f1af3288,0x0000000000000000,0x00000003eb0000000,0x0000000035800000,0x000000000f1c00000},
+ { 0x003297233be3a9f0,0x0850c37692d412fdb,0x0c9d3dfd78219160,0x02baaf23b18e2c296,0x0000000000000000,0x08540000000000000,0x0c98000000000000,0x02bb0000000000000},
+ { 0x0000000000000198,0x00007db7964edee2c,0x0000000003b57adc,0x00000000003cad86f,0x0000000000000000,0x00007dc0000000000,0x0000000003b57800,0x00000000003cae000},
+ { 0x00000004c6d2c71b,0x03af478f1506c7f50,0x00000009c26edc05,0x0312f5a3cbbdee0f0,0x0000000000000000,0x03b00000000000000,0x0000000000000000,0x03130000000000000},
+ { 0x000000000075b6a1,0x00670427bde122bb4,0x000000204ed48a12,0x003ca4d8c22a8f1ca,0x0000000000000000,0x00672000000000000,0x0000000000000000,0x003cb000000000000},
+ { 0x0000000001d19aef,0x00102ee377cb4aa2b,0x00000003dc16b155,0x0000000179e026a07,0x0000000000000000,0x00103000000000000,0x00000003d8000000,0x000000017a0000000},
+ { 0x00000000003aaec3,0x000000022f1d4040b,0x0000000190073562,0x000000001a56f5910,0x0000000000000000,0x00000002300000000,0x0000000190000000,0x000000001a5700000},
+ { 0x00000000002d5de8,0x002953fd3b0339fda,0x000000002be1b8b4,0x000000002abf1cf59,0x0000000000000000,0x00296000000000000,0x000000002b000000,0x000000002ac000000},
+ { 0x000000000000001b,0x000000635c45b8c8c,0x00000000003c97f7,0x0000004e8dbd93547,0x0000000000000000,0x00000063600000000,0x0000000000000000,0x0000004ea00000000},
+ { 0x00000000000000f5,0x00000000215015522,0x000000000003a04e,0x00000000007c010d0,0x0000000000000000,0x00000000216000000,0x0000000000020000,0x00000000007c20000},
+ { 0x00000000000002ae,0x000c8aad0dbb4240c,0x0000000000004a14,0x0007cbddece9d48bb,0x0000000000000000,0x000c8c00000000000,0x0000000000000000,0x0007cc00000000000},
+ { 0x0000000000000001,0x039f169057fe51320,0x0000000000000018,0x00000000006465e31,0x0000000000000000,0x03a00000000000000,0x0000000000000000,0x00000000006480000},
+ { 0x000000000000020b,0x00000003bc7a59479,0x0000000001ef07b7,0x00000000002bfc65e,0x0000000000000000,0x00000003bd0000000,0x0000000001ef0000,0x00000000002c00000},
+ { 0x0000000000000006,0x00000025647bd7896,0x0000000008232c6f,0x0000000001f4a1f59,0x0000000000000000,0x00000025700000000,0x0000000008200000,0x0000000001f500000},
+ { 0x000000000000001d,0x000049b2411f68bb9,0x00000072e1ee2278,0x0000004c1ccdc3de7,0x0000000000000000,0x000049c0000000000,0x0000007200000000,0x0000004c200000000},
+ { 0x000000000000060e,0x0000c61149880b5b9,0x0000000095dff98d,0x000000000ec945271,0x0000000000000000,0x0000c640000000000,0x0000000095c00000,0x000000000eca00000},
+ { 0x000000000018cd62,0x08238132963bcd546,0x00000247a050fe9c,0x00000075421bca87c,0x0000000000000000,0x08240000000000000,0x0000024600000000,0x00000075600000000},
+ { 0x000000000003c550,0x0eceeaf1cf358f24a,0x001e081b54ee1b66,0x000eb8556966cabbf,0x0000000000000000,0x0ed00000000000000,0x001e000000000000,0x000ebc00000000000},
+ { 0x0000000000000003,0x00018ba57bee68415,0x0000000ba38f5847,0x00008eab1b7db4d46,0x0000000000000000,0x00018c00000000000,0x0000000000000000,0x00008ec0000000000},
+ { 0x000000000011b70b,0x0004459457eb5a83a,0x0000000000321b70,0x00003c4658be5f9cb,0x0000000000000000,0x00044600000000000,0x0000000000000000,0x00003c50000000000},
+ { 0x00000000000020b7,0x002131b8641d895e7,0x000000000049d8eb,0x00000001f0325f0cc,0x0000000000000000,0x00214000000000000,0x0000000000000000,0x00000001f08000000},
+ { 0x0000000000000b51,0x06fd3ab02a69e697d,0x0000000149823203,0x004f91a7c575d9b24,0x0000000000000000,0x06fe0000000000000,0x0000000000000000,0x004fa000000000000},
+ { 0x0000000000005d5d,0x0000000000003824b,0x00000000000227e8,0x00000000000029b22,0x0000000000005d00,0x00000000000038300,0x00000000000227e0,0x00000000000029b40},
+ { 0x00000000000b068f,0x00001a8a67075046f,0x000000000038593a,0x0000000cfcdb06177,0x0000000000000000,0x00001a90000000000,0x0000000000000000,0x0000000d000000000},
+ { 0x000000000001e24c,0x01261f428d1a5d03d,0x000003073d1373aa,0x00023e0c303b2bfb4,0x0000000000000000,0x01268000000000000,0x0000000000000000,0x00023f00000000000},
+ { 0x000000000000004e,0x00d971db8dec8600c,0x00000000000085c5,0x0000000000002b1aa,0x0000000000000000,0x00d98000000000000,0x0000000000008500,0x0000000000002b200},
+ { 0x0000000000000048,0x000322cdfa317dfd3,0x0000000000010733,0x0000007874d1ec563,0x0000000000000000,0x00032300000000000,0x0000000000000000,0x00000078800000000},
+ { 0x0000000000001b80,0x00000000c23bfc3b1,0x000000000000b43e,0x000000000031ad984,0x0000000000000000,0x00000000c24000000,0x0000000000000000,0x000000000031b0000},
+ { 0x0000000000000058,0x000351b4449d87f5f,0x0000003ed0d128a3,0x000000e1dc7e031f7,0x0000000000000000,0x00035200000000000,0x0000003c00000000,0x000000e2000000000},
+ { 0x000000000000002d,0x00000000083ad5f17,0x0000000000000310,0x000000000001c2abd,0x0000000000000000,0x00000000083c00000,0x0000000000000000,0x000000000001c3000},
+ { 0x000000000000006a,0x0000181d09f7343cf,0x000000000000061c,0x00000000016c250ac,0x0000000000000000,0x00001820000000000,0x0000000000000000,0x00000000016c80000},
+ { 0x0000000000000019,0x03a9abc0df9083640,0x0000000005ba6171,0x0004b8abe56a75bff,0x0000000000000000,0x03aa0000000000000,0x0000000000000000,0x0004ba00000000000},
+ { 0x0000000015f15e8c,0x000a1cb16dcaffb13,0x0000000161de46db,0x000006cb7254cb5a1,0x0000000000000000,0x000a2000000000000,0x0000000000000000,0x000006cc000000000},
+ { 0x00000000000017e5,0x068e8e3b45e817819,0x000000007af5fd78,0x000529fd140eecfef,0x0000000000000000,0x06900000000000000,0x0000000000000000,0x00052a00000000000},
+ { 0x00000000000000a4,0x0000000000148cc62,0x000000000000389d,0x00000000000e71d0e,0x0000000000000000,0x00000000001490000,0x0000000000000000,0x00000000000e74000},
+ { 0x000000003b6ce3dd,0x06cd1a3e1a4645832,0x0000000706fc8892,0x000002c400853c67c,0x0000000000000000,0x06ce0000000000000,0x0000000000000000,0x000002c5000000000},
+ { 0x000000000000002e,0x000000000388076eb,0x0000000000000162,0x00000000010f52dc2,0x0000000000000000,0x00000000038900000,0x0000000000000000,0x00000000010f80000},
+ { 0x00000000000000e6,0x0000029ad6018e9a8,0x0000000000001317,0x000000000002e5ff4,0x0000000000000000,0x0000029b000000000,0x0000000000001000,0x000000000002e6000},
+ { 0x000030b035bc1ffa,0x001cf5984d708746a,0x00488a470cbf4cd0,0x00067f6caff97fc4c,0x0000000000000000,0x001cf800000000000,0x0048880000000000,0x00067f80000000000},
+ { 0x000000000000b9b4,0x0001c7651f95e10cd,0x000045af0fbc1b18,0x0000dde044bf6ba9e,0x0000000000000000,0x0001c780000000000,0x0000440000000000,0x0000de00000000000},
+ { 0x0000000000000128,0x0010c0ab20e8dccf4,0x00000000013fd38d,0x000000ffca9d56bd5,0x0000000000000000,0x0010c800000000000,0x0000000000000000,0x00000100000000000},
+ { 0x000000000000279d,0x0065a086561b03c9e,0x000000000000e722,0x001748bcdb0bd8ff2,0x0000000000000000,0x0065c000000000000,0x0000000000000000,0x00175000000000000},
+ { 0x0000000000003766,0x00001161def728c7e,0x00000000003f6e35,0x000000000007736cd,0x0000000000000000,0x00001168000000000,0x00000000003f6000,0x00000000000774000},
+ { 0x0000000000000006,0x0000000069dd94996,0x0000000000000023,0x000000000005ab7db,0x0000000000000000,0x0000000069e000000,0x0000000000000000,0x000000000005ac000},
+ { 0x000000000000454a,0x000d34c45b123317d,0x0000000000032d55,0x0000000000dec333a,0x0000000000000000,0x000d3800000000000,0x0000000000000000,0x0000000000df00000},
+ { 0x00000000091920db,0x000014e8d01fdbeb2,0x00000005ea7ded0f,0x0000009f187fd5df6,0x0000000000000000,0x000014f0000000000,0x0000000400000000,0x0000009f400000000},
+ { 0x0000010a661c5bbe,0x02c45c8ab98019cca,0x0000f148ea334f81,0x009e6397527e36404,0x0000000000000000,0x02c50000000000000,0x0000000000000000,0x009e8000000000000},
+ { 0x000000012f091d30,0x00000e9061d8036bc,0x00000003bc47d7d7,0x0000011c47d2df862,0x0000000000000000,0x00000e94000000000,0x0000000000000000,0x0000011c800000000},
+ { 0x0000000000000006,0x00078fb6cba72650e,0x0000001e117329bc,0x0001753f97005a047,0x0000000000000000,0x00079000000000000,0x0000000000000000,0x00017580000000000},
+ { 0x00000000000005a1,0x00011d73a82f63cc5,0x00000000001c20d3,0x0000000000ba97e0c,0x0000000000000000,0x00011d80000000000,0x00000000001c0000,0x0000000000bac0000},
+ { 0x0000000000002d53,0x00000001b0e3b2aec,0x0000000000002e85,0x0000000008fbb89e4,0x0000000000000000,0x00000001b10000000,0x0000000000000000,0x0000000008fc00000},
+ { 0x00000000000003a3,0x00000000162bd06ea,0x0000000000000412,0x00000000003c5e466,0x0000000000000000,0x00000000163000000,0x0000000000000000,0x00000000003c60000},
+ { 0x0000000000000934,0x01354139dd1bc9393,0x0000000000001141,0x00000000687afca3d,0x0000000000000000,0x01358000000000000,0x0000000000000000,0x00000000688000000},
+ { 0x0000003c4a610894,0x00011841e13a0e4d7,0x000039a197e1f19c,0x000005b201973b058,0x0000000000000000,0x00011880000000000,0x000039a000000000,0x000005b3000000000},
+ { 0x000000000002fe0a,0x00136f66f65d3dd23,0x00000002579e991b,0x000005f7f4d078737,0x0000000000000000,0x00137000000000000,0x0000000000000000,0x000005f8000000000},
+ { 0x0000000000011371,0x0002b79ab35fd915e,0x00000003c733bf08,0x000000045661075b4,0x0000000000000000,0x0002b800000000000,0x00000003c0000000,0x00000004580000000},
+ { 0x0000000000000001,0x02d14e8f7f5791c77,0x000000000000007b,0x0000000000a63c63d,0x0000000000000000,0x02d20000000000000,0x0000000000000000,0x0000000000a640000},
+ { 0x000000000041c8b7,0x0006c2fb3df4c127e,0x0000000004cdeb97,0x000010b3a914497d1,0x0000000000000000,0x0006c400000000000,0x0000000000000000,0x000010b8000000000},
+ { 0x0000000000000003,0x00000013be84590a1,0x00000000000000b5,0x0000000000000010d,0x0000000000000000,0x00000013c00000000,0x00000000000000b5,0x0000000000000010d},
+ { 0x0000000009a92e58,0x070c032c67fb6d999,0x0000001dd6be1239,0x034fb5864b9181d22,0x0000000000000000,0x070e0000000000000,0x0000000000000000,0x03500000000000000},
+ { 0x00000000095129d7,0x0718764883c3db53e,0x000002858e3cd3ee,0x00003df55073746e7,0x0000000000000000,0x071a0000000000000,0x0000020000000000,0x00003e00000000000},
+ { 0x000000000000daff,0x000578321ca884c00,0x0000004647b20521,0x000074488fe55f5d9,0x0000000000000000,0x00057a00000000000,0x0000000000000000,0x00007460000000000},
+ { 0x0000000000000010,0x0000000953f5c999d,0x00000000000004ed,0x00000000d4d0e7fb0,0x0000000000000000,0x00000009540000000,0x0000000000000000,0x00000000d50000000},
+ { 0x000000000015d196,0x000001497efb7fa1e,0x0000000002f43182,0x00000118fbc2723fc,0x0000000000000000,0x00000149800000000,0x0000000000000000,0x00000119000000000},
+ { 0x000000000001e368,0x0000037fa491b4d6b,0x00000000004731af,0x000000daf618d1333,0x0000000000000000,0x00000380000000000,0x0000000000000000,0x000000db000000000},
+ { 0x000000000000002f,0x005affa4cf22dd107,0x000000000000013a,0x000000ee73596ccd0,0x0000000000000000,0x005b0000000000000,0x0000000000000000,0x000000ee800000000},
+ { 0x00000000000005a6,0x00000157857fcc852,0x0000000001ced85b,0x0000000009b51de09,0x0000000000000000,0x00000158000000000,0x0000000001c00000,0x0000000009b800000},
+ { 0x00000000000652a5,0x016897cb231e268aa,0x0000000000131cc0,0x000000000069aa73d,0x0000000000000000,0x01690000000000000,0x0000000000120000,0x000000000069c0000},
+ { 0x0000000000008c1b,0x01d923a25def92641,0x0012897d21ac199b,0x00044c348a4d04ab2,0x0000000000000000,0x01d98000000000000,0x0012800000000000,0x00044d00000000000},
+ { 0x000000000000006f,0x0000001fbdd7efdaa,0x00000000000006c8,0x0000000196e3c9304,0x0000000000000000,0x0000001fc00000000,0x0000000000000000,0x00000001970000000},
+ { 0x00000000000003e1,0x00701f372489c688f,0x0000000000001419,0x0000000006509bd54,0x0000000000000000,0x00702000000000000,0x0000000000000000,0x00000000065200000},
+ { 0x0000000000000007,0x000c0aaa33e82eed7,0x00000000001c782d,0x0000032353be1f91a,0x0000000000000000,0x000c0c00000000000,0x0000000000000000,0x00000324000000000},
+ { 0x00000000000003ee,0x00000271b693ce7a3,0x00000000000ce5ef,0x000000a5139f3071f,0x0000000000000000,0x00000272000000000,0x0000000000000000,0x000000a5400000000},
+ { 0x0000000000000004,0x00000001a59b3daa6,0x000000001dbc6847,0x000000007d457b493,0x0000000000000000,0x00000001a60000000,0x000000001c000000,0x000000007d6000000},
+ { 0x0000000000000039,0x00102e41e2961bbad,0x0000000dc778f438,0x0000011beb4cc2337,0x0000000000000000,0x00103000000000000,0x0000000800000000,0x0000011c000000000},
+ { 0x000000000000000c,0x00000001cc57a288a,0x00000000002c297f,0x00000000462fa2dca,0x0000000000000000,0x00000001cc8000000,0x0000000000000000,0x00000000464000000},
+ { 0x000000000000011e,0x000000d245f1f1ff1,0x00000000000007b8,0x00000000007f68f81,0x0000000000000000,0x000000d2800000000,0x0000000000000000,0x00000000007f80000},
+ { 0x0000000000000aa6,0x00000b4d27066d1bb,0x0000000003a0a3ba,0x00000007a8a735c89,0x0000000000000000,0x00000b50000000000,0x0000000000000000,0x00000007aa0000000},
+ { 0x000000000005b15b,0x0001817ecf5b2dc3d,0x00000000003a35fe,0x0000000013547ad35,0x0000000000000000,0x00018180000000000,0x0000000000000000,0x00000000135800000},
+ { 0x0000000000022a75,0x000017a3e2d6d3b05,0x0000000069e3d919,0x000000048d9b421a9,0x0000000000000000,0x000017a8000000000,0x0000000060000000,0x000000048e0000000},
+ { 0x0000000000000123,0x0000000000000c9c7,0x00000000000002ca,0x0000000000000147f,0x0000000000000100,0x0000000000000ca00,0x00000000000002c8,0x00000000000001480},
+ { 0x0000000000000000,0x00000001a25b18c82,0x0000000000039c5f,0x0000000003e671207,0x0000000000000000,0x00000001a28000000,0x0000000000000000,0x0000000003e700000},
+ { 0x00000000002df6ff,0x026933d73e2eb9391,0x000028ce0f806576,0x0008e6b42a7bf674b,0x0000000000000000,0x026a0000000000000,0x0000000000000000,0x0008e800000000000},
+ { 0x0000000005cc5f34,0x0000001f4f9246fbb,0x000000004cde9e24,0x00000000177395659,0x0000000000000000,0x0000001f500000000,0x000000004c800000,0x00000000177800000},
+ { 0x0000000000000000,0x000444f644049f099,0x0000013c84030ba1,0x000001831f210bf14,0x0000000000000000,0x00044600000000000,0x0000013800000000,0x00000183800000000},
+ { 0x00000000000026a5,0x000e62753ce2b65e5,0x000000036eb88692,0x00034d49242dae52a,0x0000000000000000,0x000e6400000000000,0x0000000000000000,0x00034e00000000000},
+ { 0x0000000000000ac5,0x000d9db3bd70b51e6,0x00000000000f103d,0x00002b6d6ab1f03f2,0x0000000000000000,0x000da000000000000,0x0000000000000000,0x00002b70000000000},
+ { 0x0000000000000435,0x0007441f19df70a53,0x000000086df52b03,0x00000030d8e058532,0x0000000000000000,0x00074600000000000,0x0000000800000000,0x00000030e00000000},
+ { 0x00000000000000b8,0x006f3eb7941cbba7c,0x00000000001d892a,0x000011c6c584a47eb,0x0000000000000000,0x006f4000000000000,0x0000000000000000,0x000011c8000000000},
+ { 0x000000000000423a,0x0000d1547e4446cd6,0x0000000001a831f5,0x000001da9b34cb2fd,0x0000000000000000,0x0000d180000000000,0x0000000000000000,0x000001db000000000},
+ { 0x0000000000000197,0x0000000886d695f99,0x0000000000000610,0x0000000000e5f38e2,0x0000000000000000,0x00000008880000000,0x0000000000000000,0x0000000000e600000},
+ { 0x0000000001088b63,0x00002cf2b4a9b8031,0x00000000cdf2cf15,0x0000005ed74d343f9,0x0000000000000000,0x00002d00000000000,0x0000000000000000,0x0000005ee00000000},
+ { 0x000000000001855a,0x007b1ea6e2726ddf7,0x0000000000066599,0x000000dac7e165403,0x0000000000000000,0x007b2000000000000,0x0000000000000000,0x000000db000000000},
+ { 0x000000000000000a,0x00000000000205646,0x00000000000223fa,0x000000000000c7800,0x0000000000000000,0x00000000000206000,0x0000000000022000,0x000000000000c7800},
+ { 0x0000000000005dda,0x0000000005c072509,0x0000000000009ee0,0x000000000040ce13c,0x0000000000000000,0x0000000005c200000,0x0000000000000000,0x000000000040e0000},
+ { 0x000000000000000b,0x0000000001eca29cc,0x000000000000aa9c,0x000000000001373ea,0x0000000000000000,0x0000000001ed00000,0x000000000000a800,0x00000000000137800},
+ { 0x0000000000000136,0x00020e82c69ab5d99,0x0000000025e3cb6c,0x0000000013dc2281b,0x0000000000000000,0x00020f00000000000,0x0000000025800000,0x0000000013e000000},
+ { 0x0000000000000027,0x0017638cc2307e3ae,0x00000000006ac60c,0x000000001e5409131,0x0000000000000000,0x00176800000000000,0x0000000000000000,0x000000001e5800000},
+ { 0x0000000000001922,0x00178fab23d8a4aa7,0x0000000000001e7d,0x0000000060148dc06,0x0000000000000000,0x00179000000000000,0x0000000000000000,0x00000000602000000},
+ { 0x0000000000000074,0x01147d72937ed355f,0x0000000000e8626d,0x00000005aacc1e952,0x0000000000000000,0x01148000000000000,0x0000000000000000,0x00000005ac0000000},
+ { 0x000000000000007d,0x03d391540c4a83094,0x00000000003f16b9,0x000000000047026d9,0x0000000000000000,0x03d40000000000000,0x00000000003e0000,0x00000000004720000},
+ { 0x000000000000182b,0x0034c3a513d2304e3,0x00007481d3c16b22,0x0005d2d9281a1a336,0x0000000000000000,0x0034d000000000000,0x0000600000000000,0x0005d400000000000},
+ { 0x0000000000000011,0x000000afb76a5f1e6,0x000000000000a2a7,0x00000001910f8b5c9,0x0000000000000000,0x000000afc00000000,0x0000000000000000,0x00000001918000000},
+ { 0x000000000000004b,0x000109f012fef6013,0x000000000000056c,0x000000001ab0b0c69,0x0000000000000000,0x00010a00000000000,0x0000000000000000,0x000000001ab800000},
+ { 0x0000000000039b6f,0x000000000477aac1c,0x000000000e488915,0x0000000001c68253f,0x0000000000000000,0x00000000047800000,0x000000000e480000,0x0000000001c6c0000},
+ { 0x000000000000007a,0x000000000b4e32bfb,0x0000000000000225,0x00000000000006b6f,0x0000000000000000,0x000000000b5000000,0x0000000000000220,0x00000000000006b80},
+ { 0x0000000000000006,0x0000000000000b4a8,0x000000000000001f,0x00000000000000064,0x0000000000000000,0x0000000000000b4c0,0x000000000000001f,0x00000000000000064},
+ { 0x000000000000001d,0x000be273d25f4095f,0x0000000000e36405,0x000000001c53b8227,0x0000000000000000,0x000be400000000000,0x0000000000800000,0x000000001c5800000},
+ { 0x00000000000206d4,0x00597b39a06306ab1,0x0000000000052c45,0x000000059c73ec49f,0x0000000000000000,0x00598000000000000,0x0000000000000000,0x000000059e0000000},
+ { 0x0000000000000183,0x0000153efd255d3de,0x00000000001a9745,0x000000000d71aac4e,0x0000000000000000,0x00001540000000000,0x0000000000000000,0x000000000d7400000},
+ { 0x0000000000000002,0x001bdb5d41f4ffaa4,0x000000000014917c,0x0000006e11b3a30f3,0x0000000000000000,0x001be000000000000,0x0000000000000000,0x0000006e200000000},
+ { 0x000000000000eb6b,0x000167efc38973ae3,0x000009346332c8a8,0x000001feafe29f7bd,0x0000000000000000,0x00016800000000000,0x0000093000000000,0x000001ff000000000},
+ { 0x0000000000000009,0x00000018536587da5,0x0000000000621a83,0x00000000dbc2cd2e6,0x0000000000000000,0x00000018580000000,0x0000000000000000,0x00000000dc0000000},
+ { 0x0000000000000002,0x018b8604fb9f7981b,0x00000000058da54a,0x000000000c6b55845,0x0000000000000000,0x018c0000000000000,0x0000000005800000,0x000000000c6c00000},
+ { 0x0000000000000036,0x01c347d510f10d6bb,0x0000000000451c83,0x0000000a77832d3cb,0x0000000000000000,0x01c38000000000000,0x0000000000000000,0x0000000a780000000},
+ { 0x00000000190c8430,0x002171e46ba995a71,0x000000020717e4ed,0x00000278bbd4fc504,0x0000000000000000,0x00218000000000000,0x0000000000000000,0x00000279000000000},
+ { 0x00000000089f6691,0x000006f1735c22cf5,0x000000001c5b7b08,0x00000008985c4d897,0x0000000000000000,0x000006f2000000000,0x0000000000000000,0x000000089c0000000},
+ { 0x00000000000833db,0x06547e69b9c1c8344,0x0000000003fd02b3,0x000029afcf8a4da5d,0x0000000000000000,0x06560000000000000,0x0000000000000000,0x000029b0000000000},
+ { 0x0000000000014655,0x000001020d0ea5a64,0x00000001d2c98236,0x00000006ef63d54f8,0x0000000000000000,0x00000102800000000,0x00000001c0000000,0x00000006f00000000},
+ { 0x00000003784f1a57,0x05482dee6adec69c2,0x0000920057848fec,0x02adcfeee2748d774,0x0000000000000000,0x054a0000000000000,0x0000000000000000,0x02ae0000000000000},
+ { 0x000000000000000d,0x000000100a0f8133a,0x000000000000001b,0x000000000199082be,0x0000000000000000,0x00000010100000000,0x0000000000000000,0x00000000019980000},
+ { 0x000000000a52a7e7,0x00000046da6c5736a,0x00000000164c9ecf,0x0000000007c8f9600,0x0000000000000000,0x00000046e00000000,0x0000000016400000,0x0000000007ca00000},
+ { 0x000000000000058e,0x050cad6049ff104dc,0x000000000be2efe8,0x0000b46c47492ebee,0x0000000000000000,0x050e0000000000000,0x0000000000000000,0x0000b480000000000},
+ { 0x00000001c0cff3fb,0x076327781024f1a48,0x00000041cace3600,0x0000002020e8d50df,0x0000000000000000,0x07640000000000000,0x0000004180000000,0x00000020280000000},
+ { 0x0000000000008e22,0x00001f7fd57ae8ed9,0x0000000000027acc,0x000000001b4feefe4,0x0000000000000000,0x00001f80000000000,0x0000000000000000,0x000000001b5000000},
+ { 0x0000000000001c96,0x00004e8e11af4ef6c,0x00000000071b9bcc,0x0000002d4cacc87fd,0x0000000000000000,0x00004ea0000000000,0x0000000000000000,0x0000002d500000000},
+ { 0x0000000000000000,0x00000000366d5097a,0x0000000000003583,0x00000000000019851,0x0000000000000000,0x00000000367000000,0x0000000000003580,0x00000000000019880},
+ { 0x000000000001f006,0x000535beaaa410549,0x0000000c062ccfb6,0x000000e3338e8ffc9,0x0000000000000000,0x00053600000000000,0x0000000c00000000,0x000000e3400000000},
+ { 0x000000000075874e,0x000477fd3caf7e441,0x000007e3c7f956f7,0x00007abaa27ff761a,0x0000000000000000,0x00047800000000000,0x0000060000000000,0x00007ac0000000000},
+ { 0x0000000000000d6a,0x000000237ee987bce,0x0000000000029f78,0x00000000002396c1a,0x0000000000000000,0x00000023800000000,0x0000000000020000,0x000000000023a0000},
+ { 0x0000000000000055,0x00000000000689e91,0x00000000000000ae,0x0000000000002e6b5,0x0000000000000000,0x0000000000068a000,0x0000000000000000,0x0000000000002e700},
+ { 0x0000000000000001,0x000007d4e68b3b9b5,0x00000000000001b8,0x0000000001cf3362d,0x0000000000000000,0x000007d6000000000,0x0000000000000000,0x0000000001cf80000},
+ { 0x000000000000d2a9,0x000003756c26051a6,0x0000000016512386,0x000000000d9da4836,0x0000000000000000,0x00000376000000000,0x0000000016400000,0x000000000da000000},
+ { 0x0000000000009ef8,0x00095f247a43b3f95,0x0000000000058e29,0x00000000031f2db36,0x0000000000000000,0x00096000000000000,0x0000000000000000,0x00000000032000000},
+ { 0x00000000018dbfec,0x00007bea8fa98d735,0x00000031c4e14434,0x0000001312f84bd48,0x0000000000000000,0x00007c00000000000,0x00000031c0000000,0x00000013140000000},
+ { 0x0000000000000078,0x0000025b81a3d7a1f,0x0000000000000426,0x00000000000024814,0x0000000000000000,0x0000025c000000000,0x0000000000000400,0x00000000000024900},
+ { 0x0000000000000001,0x000039fd13fe788bc,0x000000000f95f2e4,0x000000000207ad075,0x0000000000000000,0x00003a00000000000,0x000000000f900000,0x00000000020800000},
+ { 0x0000000000000005,0x000a5cea59c5d7096,0x0000000000110bc5,0x000096c631a82d186,0x0000000000000000,0x000a6000000000000,0x0000000000000000,0x00009700000000000},
+ { 0x0000000000000338,0x03da4b8df19b0f437,0x0000000005b84f49,0x00000ccd1934ce23d,0x0000000000000000,0x03db0000000000000,0x0000000000000000,0x00000cd0000000000},
+ { 0x000000000000000a,0x0000b8ab3086a87dd,0x0000078b2f88f16a,0x00000757e16fbb760,0x0000000000000000,0x0000b8c0000000000,0x0000078000000000,0x00000758000000000},
+ { 0x0000000000000663,0x0000001edf1b3a1b9,0x000000000013aefa,0x00000000000204e18,0x0000000000000000,0x0000001ee00000000,0x000000000013ac00,0x00000000000205000},
+ { 0x00000000000002c4,0x0b4c4c2da01baa5a3,0x0000000000000347,0x0000000000091b5c0,0x0000000000000000,0x0b500000000000000,0x0000000000000000,0x0000000000091c000},
+ { 0x0000000000000010,0x0245b23aad57fcdec,0x00016131061e7e4d,0x000053014909d57e9,0x0000000000000000,0x02460000000000000,0x0001610000000000,0x00005310000000000},
+ { 0x00000000000002aa,0x000cc09395eb5cc01,0x0000000000000cb8,0x00000000003926518,0x0000000000000000,0x000cc400000000000,0x0000000000000000,0x00000000003930000},
+ { 0x0000000003c366a8,0x00000695fdc74a91b,0x000000001e6e85f2,0x0000003ba6a52b113,0x0000000000000000,0x00000696000000000,0x0000000000000000,0x0000003bb00000000},
+ { 0x0000000000000018,0x000002ef2045e7a08,0x000000000000147b,0x000000000000260ea,0x0000000000000000,0x000002f0000000000,0x0000000000001400,0x00000000000026100},
+ { 0x00000000000c0e49,0x00009a90a551b6c3b,0x000000003fda0c7a,0x0000054d9c96c7d44,0x0000000000000000,0x00009ac0000000000,0x0000000000000000,0x0000054e000000000},
+ { 0x000000000000001f,0x0000000002850389d,0x000000000001fa39,0x000000000147166c7,0x0000000000000000,0x00000000028600000,0x0000000000000000,0x00000000014780000},
+ { 0x0000000000000006,0x00006091f9115ca0d,0x0000000000000007,0x00000000000000012,0x0000000000000000,0x000060a0000000000,0x0000000000000007,0x00000000000000012},
+ { 0x0000000000000002,0x0000001f020c7e31c,0x00000075748147ac,0x0000000f28e6375ae,0x0000000000000000,0x0000001f080000000,0x0000007560000000,0x0000000f2a0000000},
+ { 0x000000000000000d,0x00000000000005239,0x00000000000001a5,0x0000000000000094e,0x0000000000000000,0x00000000000005240,0x00000000000001a5,0x0000000000000094e},
+ { 0x0000000000002a4b,0x0000039620ef87c0f,0x00000002344e2f3d,0x000000003595af699,0x0000000000000000,0x00000397000000000,0x0000000234000000,0x00000000359800000},
+ { 0x0000000000000005,0x030957eaf13e3bf8a,0x00000000a9d532b5,0x00020310bc07c2000,0x0000000000000000,0x030a0000000000000,0x0000000000000000,0x00020400000000000},
+ { 0x000000000014ff71,0x0005d72006c7ab59a,0x00000000001f7386,0x000001bc0fe96c834,0x0000000000000000,0x0005d800000000000,0x0000000000000000,0x000001bc800000000},
+ { 0x0000000000000e45,0x00000001323c8627e,0x00000000006bc6bc,0x000000003892d849f,0x0000000000000000,0x00000001328000000,0x0000000000000000,0x0000000038a000000},
+ { 0x0000000000000003,0x0000000020f517e12,0x00000000000daaae,0x00000000013bb1f4c,0x0000000000000000,0x00000000210000000,0x0000000000080000,0x00000000013c00000},
+ { 0x0000000000000023,0x00002a27d7fc40ae4,0x00000000000013d3,0x00000000000039284,0x0000000000000000,0x00002a30000000000,0x0000000000001300,0x00000000000039300},
+ { 0x0000000000000008,0x000bfbf75f88b35f8,0x000000000002de69,0x000ada8bc9d78ac26,0x0000000000000000,0x000bfc00000000000,0x0000000000000000,0x000adc00000000000},
+ { 0x0000000000000227,0x000002361bb69188e,0x000000000000169e,0x000000b398262e8b7,0x0000000000000000,0x00000237000000000,0x0000000000000000,0x000000b3c00000000},
+ { 0x0000e8d97ae094eb,0x039d01cea3b08ca91,0x02811967143f0ae6,0x023565276d2f87a0e,0x0000000000000000,0x039e0000000000000,0x0280000000000000,0x02360000000000000},
+ { 0x0000000000000000,0x01f711ceed019f26b,0x0000000001877d87,0x000000000aef617f2,0x0000000000000000,0x01f78000000000000,0x0000000001800000,0x000000000af000000},
+ { 0x00000008bcb0e957,0x0000000c1611416c1,0x0000000f26788606,0x000000032ee1c3f5e,0x0000000880000000,0x0000000c180000000,0x0000000f20000000,0x000000032f0000000},
+ { 0x00000000008785ed,0x003c0de2d25f77507,0x0001203c48ac758f,0x00003674a7106575e,0x0000000000000000,0x003c1000000000000,0x0001200000000000,0x00003680000000000},
+ { 0x000000000000000b,0x000de13c401927484,0x000000069dd63533,0x0000000f3f12394a0,0x0000000000000000,0x000de400000000000,0x0000000680000000,0x0000000f400000000},
+ { 0x0000000000001444,0x067a480edf3aef5e3,0x0000000003264e45,0x0004c31f7929ea8be,0x0000000000000000,0x067c0000000000000,0x0000000000000000,0x0004c400000000000},
+ { 0x0000000000138f5a,0x00000c4d5d0d31e37,0x000000000067a700,0x0000002a121128090,0x0000000000000000,0x00000c50000000000,0x0000000000000000,0x0000002a200000000},
+ { 0x000000000000000c,0x00000396ca3eda3ca,0x00000000000018ac,0x000000000013b72ea,0x0000000000000000,0x00000397000000000,0x0000000000000000,0x000000000013b8000},
+ { 0x00000000000335e5,0x001dc0f08cb3c640d,0x0000000001a126d8,0x0000000001ce6e071,0x0000000000000000,0x001dc800000000000,0x0000000001a00000,0x0000000001ce80000},
+ { 0x0000000000000000,0x00ac5bef0405534d1,0x0000000000000345,0x000000000000019a9,0x0000000000000000,0x00ac8000000000000,0x0000000000000340,0x000000000000019b0},
+ { 0x000000000000000f,0x000001267a6ff7fd9,0x00000000000001cd,0x0000000000001371e,0x0000000000000000,0x00000126800000000,0x0000000000000180,0x00000000000013780},
+ { 0x000000000000007f,0x0000015490aba2fd2,0x0000000000016a4a,0x000000e2b77f946f3,0x0000000000000000,0x00000155000000000,0x0000000000000000,0x000000e2c00000000},
+ { 0x0000000000000068,0x0000332c3fd13636a,0x000000000123fcab,0x00000000053dd2da1,0x0000000000000000,0x00003330000000000,0x0000000001200000,0x00000000053e00000},
+ { 0x0000000000000870,0x000001c0cbb1946b6,0x000000000004d39f,0x0000000017e6e3bf5,0x0000000000000000,0x000001c1000000000,0x0000000000000000,0x0000000017e800000},
+ { 0x0000000035f5e24e,0x02366bb59d3c756ba,0x00000003704a2d90,0x000000033f59c1c17,0x0000000000000000,0x02370000000000000,0x0000000370000000,0x00000003400000000},
+ { 0x0000000000000053,0x00001738151a70bbc,0x000000000006b872,0x0000005816d48ff1a,0x0000000000000000,0x00001740000000000,0x0000000000000000,0x00000058200000000},
+ { 0x000000000000000d,0x000002595b80e3089,0x00000000000141a4,0x00000000104abbb7e,0x0000000000000000,0x0000025a000000000,0x0000000000000000,0x00000000105000000},
+ { 0x000000000010dc28,0x000606dbc0d0ad390,0x0000004b40ff8463,0x0000001f354763954,0x0000000000000000,0x00060800000000000,0x0000004b00000000,0x0000001f380000000},
+ { 0x0000000000000063,0x01d3d2550df2984ea,0x000007cc1ef36370,0x00d71a033321491f2,0x0000000000000000,0x01d40000000000000,0x0000000000000000,0x00d74000000000000},
+ { 0x000000016e3063c0,0x00002c2eb027dfaf8,0x0000000397c7ed35,0x00001b2c39be44998,0x0000000000000000,0x00002c30000000000,0x0000000000000000,0x00001b30000000000},
+ { 0x000000000000000a,0x000000000c4bf598b,0x0000000000000060,0x00000000034685dd6,0x0000000000000000,0x000000000c4c00000,0x0000000000000000,0x00000000034700000},
+ { 0x0000000000000001,0x0000000b9897e2301,0x000000000000193f,0x0000000000006ec7b,0x0000000000000000,0x0000000b9c0000000,0x0000000000001800,0x0000000000006ee00},
+ { 0x00001fb91652e177,0x0012711677801e33e,0x00005dcd7e341704,0x000050de11b3d0040,0x0000000000000000,0x00127800000000000,0x00005c0000000000,0x000050e0000000000},
+ { 0x00000000000008ff,0x00051222b86fb68e0,0x0000000000029a4d,0x00000002c828697b1,0x0000000000000000,0x00051400000000000,0x0000000000000000,0x00000002c90000000},
+ { 0x0000000000000614,0x028ef78eb2ccdddd8,0x0000000000630bd9,0x00000039325fb8433,0x0000000000000000,0x028f0000000000000,0x0000000000000000,0x00000039400000000},
+ { 0x0000000000000007,0x00363d2386ed446cc,0x0000000000000063,0x000000000011bf2ad,0x0000000000000000,0x00364000000000000,0x0000000000000000,0x000000000011c0000},
+ { 0x0000000000000011,0x000000000012b1615,0x0000000000000048,0x00000000000135b83,0x0000000000000000,0x000000000012b8000,0x0000000000000000,0x00000000000136000},
+ { 0x0000000000000003,0x06abca3c787ac2dd1,0x000000028a82e145,0x0000000763cba36a4,0x0000000000000000,0x06ac0000000000000,0x0000000280000000,0x00000007640000000},
+ { 0x0000000000000025,0x00000029b3c600638,0x00000000000000b8,0x000000094e08f525a,0x0000000000000000,0x00000029c00000000,0x0000000000000000,0x00000009500000000},
+ { 0x0000000000002f96,0x001ab68ef22a93de8,0x000000001fba911d,0x000b7637a38306b3b,0x0000000000000000,0x001ab800000000000,0x0000000000000000,0x000b7800000000000},
+ { 0x000000000013544a,0x0000b041bd2fe6a13,0x00000002d5510149,0x000000031bd7d176c,0x0000000000000000,0x0000b080000000000,0x00000002d0000000,0x000000031c0000000},
+ { 0x0000000000000078,0x0004c2c94bb9c4b8e,0x0000000000441e18,0x0000000000704a306,0x0000000000000000,0x0004c400000000000,0x0000000000440000,0x00000000007060000},
+ { 0x000000000000001e,0x000018065d8b5aab4,0x0000000000adf33d,0x0000000000103daa1,0x0000000000000000,0x00001808000000000,0x0000000000ade000,0x0000000000103e000},
+ { 0x0000000000000003,0x0000010da5082296d,0x00000000000003a6,0x0000000dc9517481f,0x0000000000000000,0x0000010e000000000,0x0000000000000000,0x0000000dcc0000000},
+ { 0x0000000000033864,0x00005358b08a77205,0x0000000000973303,0x00000000000f42576,0x0000000000000000,0x00005360000000000,0x0000000000972000,0x00000000000f44000},
+ { 0x0000000000189237,0x000001068131b4fb0,0x000000000020a1bc,0x0000000d8b1c8eaf3,0x0000000000000000,0x00000107000000000,0x0000000000000000,0x0000000d8c0000000},
+ { 0x00000000000074cd,0x0005875722512a5d9,0x00000000016a188d,0x000000000032c868d,0x0000000000000000,0x00058800000000000,0x00000000016a0000,0x000000000032d0000},
+ { 0x0000000000d43ca6,0x00006d3e220defc1b,0x0000000009fbc605,0x00000000143ff5908,0x0000000000000000,0x00006d40000000000,0x0000000009800000,0x00000000144000000},
+ { 0x00000000000388ac,0x000000d6133940a6a,0x00000000003f49e5,0x000000000022f54bf,0x0000000000000000,0x000000d6400000000,0x00000000003f0000,0x000000000022f8000},
+ { 0x0000000000000000,0x006fc6920473d9aaf,0x00000000000001c8,0x00000000000f536d7,0x0000000000000000,0x006fe000000000000,0x0000000000000000,0x00000000000f54000},
+ { 0x000000000005addb,0x00000bacac115778e,0x000000000786ebe4,0x00000000dd9d53d58,0x0000000000000000,0x00000bb0000000000,0x0000000004000000,0x00000000ddc000000},
+ { 0x000000000001dade,0x0102bac99eb21c5b3,0x00000000000329dc,0x000061d8af3e37d56,0x0000000000000000,0x01030000000000000,0x0000000000000000,0x000061e0000000000},
+ { 0x000000000000001c,0x0000000000047810e,0x000000000011c6d1,0x0000000000012c279,0x0000000000000000,0x0000000000047a000,0x000000000011c6c0,0x0000000000012c280},
+ { 0x0000000000000003,0x04fe41881cfd17c9d,0x0000003770aa6fd6,0x00016fc7f30eaac86,0x0000000000000000,0x05000000000000000,0x0000000000000000,0x00017000000000000},
+ { 0x000000000001f525,0x012cd5473c0165020,0x000000000093a862,0x00004da58cd6def3c,0x0000000000000000,0x012d0000000000000,0x0000000000000000,0x00004dc0000000000},
+ { 0x000000000000000b,0x00023d53906e91c84,0x000000000f615601,0x000000007dd312d6e,0x0000000000000000,0x00023e00000000000,0x000000000e000000,0x000000007de000000},
+ { 0x00000000001b15d7,0x0124e364491d64acc,0x0000000002605831,0x0000000b38e136ab2,0x0000000000000000,0x01250000000000000,0x0000000000000000,0x0000000b3c0000000},
+ { 0x00000000000011d5,0x00000000025cf455f,0x0000000000009560,0x00000000000050971,0x0000000000000000,0x00000000025d00000,0x0000000000009400,0x00000000000050a00},
+ { 0x000000000000000c,0x00dc737437a0b119b,0x00c406f06885dc5a,0x0015a440dd936f86a,0x0000000000000000,0x00dc8000000000000,0x00c4000000000000,0x0015a800000000000},
+ { 0x0000000000000021,0x00003b3b460cb25b3,0x00000198b79a2059,0x00000030659b31792,0x0000000000000000,0x00003b40000000000,0x0000019880000000,0x00000030680000000},
+ { 0x0000000000002f3f,0x0364b3fef73293ccf,0x00000000000077d1,0x000081fe2a885324e,0x0000000000000000,0x03650000000000000,0x0000000000000000,0x00008200000000000},
+ { 0x00000000000ae93c,0x0009c761b115493e5,0x000000000befbfd3,0x000004539c2d657e7,0x0000000000000000,0x0009c800000000000,0x0000000000000000,0x00000454000000000},
+ { 0x00000000000000e4,0x00000013e5d008b98,0x000000019f716968,0x00000009350410942,0x0000000000000000,0x00000013e80000000,0x0000000180000000,0x00000009380000000},
+ { 0x000000000000004d,0x0001ab80835f5e149,0x000000d7e7cc6d29,0x000006f81290085db,0x0000000000000000,0x0001ac00000000000,0x000000c000000000,0x000006fa000000000},
+ { 0x00000000000001be,0x00000002a6060f0fb,0x0000000003d4ef7f,0x00000000011f159fc,0x0000000000000000,0x00000002a70000000,0x0000000003d40000,0x00000000011f40000},
+ { 0x0000000000001f0e,0x0163c634d2d50d299,0x000000000000a639,0x00080cf6521024778,0x0000000000000000,0x01640000000000000,0x0000000000000000,0x00081000000000000},
+ { 0x0000000000000018,0x0000c6ee9abcac38b,0x000000000000003c,0x0000001e7e87a644d,0x0000000000000000,0x0000c700000000000,0x0000000000000000,0x0000001e800000000},
+ { 0x00000000000004b3,0x0553226e9a19d68bd,0x00000000000007fb,0x000000000000b24d1,0x0000000000000000,0x05540000000000000,0x0000000000000400,0x000000000000b2800},
+ { 0x00000001cd785aeb,0x02d80d08d519943a3,0x000013ea75821a92,0x00019ac8e2fae3387,0x0000000000000000,0x02d90000000000000,0x0000100000000000,0x00019b00000000000},
+ { 0x0000000000003d07,0x0000000012507e4da,0x00000000000cc12e,0x0000000005d5ab908,0x0000000000000000,0x00000000125800000,0x0000000000000000,0x0000000005d600000},
+ { 0x0000000000001f8c,0x0001e7e4f5e3530c1,0x0000000000002d2d,0x000004e72b27fb071,0x0000000000000000,0x0001e800000000000,0x0000000000000000,0x000004e8000000000},
+ { 0x00000000031a3abd,0x0711b3ce5fc3b8f7c,0x000000002c603944,0x00675bf97bfb236c8,0x0000000000000000,0x07120000000000000,0x0000000000000000,0x00676000000000000},
+ { 0x000000000000000f,0x0000409deff3df1d1,0x00000000000001d9,0x0000000088812a69c,0x0000000000000000,0x000040a0000000000,0x0000000000000000,0x0000000088c000000},
+ { 0x0000000000000008,0x000083d0280b1e28e,0x0000000000035c52,0x00001666f1beba13b,0x0000000000000000,0x00008400000000000,0x0000000000000000,0x00001668000000000},
+ { 0x0000000002ddeb2d,0x0001e6d511fe4c26a,0x000000191004bfa2,0x000000f3d19515d86,0x0000000000000000,0x0001e700000000000,0x0000001800000000,0x000000f4000000000},
+ { 0x000000000000005d,0x00000004d08746946,0x00000000004290f7,0x00000000004a48b15,0x0000000000000000,0x00000004d20000000,0x0000000000420000,0x00000000004a60000},
+ { 0x00000000001346b9,0x01f2e2101f248d073,0x0000000000cedcd6,0x0000325e3b661581c,0x0000000000000000,0x01f30000000000000,0x0000000000000000,0x00003260000000000},
+ { 0x000000eb12c10a52,0x043b96048a8a690d4,0x000007515ccc06db,0x00006fea6bccab363,0x0000000000000000,0x043c0000000000000,0x0000060000000000,0x00007000000000000},
+ { 0x00000000000000e0,0x03049847e64cb59a5,0x00000000064f06ac,0x00000000030dd54b1,0x0000000000000000,0x03050000000000000,0x0000000006400000,0x00000000030e00000},
+ { 0x0000000000000173,0x000176b67075c0eae,0x00000000000015f0,0x000000d8edd5e8c2e,0x0000000000000000,0x00017700000000000,0x0000000000000000,0x000000d9000000000},
+ { 0x0000000000000000,0x000000000024f9bcd,0x0000000000000033,0x00000000000002d83,0x0000000000000000,0x00000000002500000,0x0000000000000030,0x00000000000002d90},
+ { 0x000000000093976c,0x0004360d4b65b35d4,0x0000000000fe7eb1,0x0000000ffbbdbd5c7,0x0000000000000000,0x00043800000000000,0x0000000000000000,0x0000000ffc0000000},
+ { 0x0000000000001552,0x0000507b2f3b2ae3f,0x0000000000003a0b,0x000000000766d1084,0x0000000000000000,0x00005080000000000,0x0000000000000000,0x00000000076800000},
+ { 0x000000003e49c015,0x00000e0d355deff61,0x000000003fd07f7a,0x00000000dd5376548,0x0000000000000000,0x00000e10000000000,0x000000003c000000,0x00000000dd8000000},
+ { 0x0000000000000186,0x0022ea1398165a734,0x000000000001edd2,0x0000c5983e5a28d46,0x0000000000000000,0x0022f000000000000,0x0000000000000000,0x0000c5c0000000000},
+ { 0x00000000000ae562,0x00a9a27ca30764b2a,0x000000000092d706,0x000000000d1bfaa95,0x0000000000000000,0x00a9c000000000000,0x0000000000800000,0x000000000d1c00000},
+ { 0x0000000000000000,0x000000a171548b6d8,0x0000000010abda14,0x000000000500bf1fb,0x0000000000000000,0x000000a1800000000,0x0000000010a00000,0x00000000050100000},
+ { 0x000000000008f08e,0x00000330ed3ace6d5,0x00000000d45b45c3,0x0000001e40da68ada,0x0000000000000000,0x00000331000000000,0x0000000080000000,0x0000001e480000000},
+ { 0x0000000000000004,0x00053e4dc7be11e0a,0x00000000001870d7,0x000000752f2eaff32,0x0000000000000000,0x00054000000000000,0x0000000000000000,0x00000075400000000},
+ { 0x00000000000003d0,0x004d5cca411917de2,0x000000000003c47e,0x000003aaf2670c5d5,0x0000000000000000,0x004d6000000000000,0x0000000000000000,0x000003ab000000000},
+ { 0x0000000001c0b139,0x00625de4701e514cd,0x000367d0b8718bb7,0x000037712d56068c3,0x0000000000000000,0x00626000000000000,0x000367d000000000,0x00003771400000000},
+ { 0x0000000000001af1,0x00351f8045f8c9d7b,0x000000000d442b6e,0x0000000164320222b,0x0000000000000000,0x00352000000000000,0x0000000008000000,0x00000001648000000},
+ { 0x000000000ff91708,0x0002890e18b3dc187,0x0000db6f5eb16744,0x00000fc94917a8c09,0x0000000000000000,0x00028a00000000000,0x0000db6000000000,0x00000fca000000000},
+ { 0x00000000001b4d03,0x0f3a7b6721f7e9a4e,0x000000000b9e386a,0x000000001393334fa,0x0000000000000000,0x0f3c0000000000000,0x000000000b800000,0x00000000139800000},
+ { 0x0000000000000001,0x0b17a0776d07b8a60,0x00000004531f734a,0x0000ad1c557707ec9,0x0000000000000000,0x0b180000000000000,0x0000000000000000,0x0000ad40000000000},
+ { 0x0000000000000007,0x000000000002abce4,0x0000000000000011,0x000000000000022cc,0x0000000000000000,0x000000000002ac000,0x0000000000000010,0x000000000000022d0},
+ { 0x000000000001737b,0x00071a7704c323e0e,0x00000000001f27ce,0x0000042cc8d149e95,0x0000000000000000,0x00071c00000000000,0x0000000000000000,0x0000042e000000000},
+ { 0x0000000000000003,0x01593356dca4f4e10,0x0000000000024b2d,0x0000c68ec4627375a,0x0000000000000000,0x01598000000000000,0x0000000000000000,0x0000c6c0000000000},
+ { 0x0000000000000002,0x00dce32a1b3d394f8,0x0000000000000634,0x0000000cc63a360bc,0x0000000000000000,0x00dd0000000000000,0x0000000000000000,0x0000000cc80000000},
+ { 0x0000000000000003,0x00294f39c0ca81555,0x000004ed4e950489,0x000046695768dcf7f,0x0000000000000000,0x00295000000000000,0x0000040000000000,0x00004680000000000},
+ { 0x0000000000000000,0x0c3eb2c3e04e0ba7d,0x000000000000000b,0x001a176922447902e,0x0000000000000000,0x0c400000000000000,0x0000000000000000,0x001a1800000000000},
+ { 0x00000000000015b4,0x00000000e3d270706,0x000000000001f264,0x00000000000376730,0x0000000000000000,0x00000000e40000000,0x000000000001f000,0x00000000000377000},
+ { 0x00000000000001e4,0x007bca4edcb3e9922,0x0000000000029ac0,0x000011161c50a1a90,0x0000000000000000,0x007be000000000000,0x0000000000000000,0x00001118000000000},
+ { 0x0000000000000028,0x00038c33dcc64653c,0x0000004e0a2176eb,0x00001dbc08ab2cd51,0x0000000000000000,0x00038d00000000000,0x0000000000000000,0x00001dc0000000000},
+ { 0x0000000000000002,0x000007dbf7444e7a7,0x00000000000009b7,0x000000000004ac039,0x0000000000000000,0x000007dc000000000,0x0000000000000000,0x000000000004ae000},
+ { 0x0000000000000003,0x004aa8ab46c4a7f1d,0x00000000000208f5,0x00000000277356975,0x0000000000000000,0x004ac000000000000,0x0000000000000000,0x00000000278000000},
+ { 0x0000000000070946,0x000771cd9be98f2f9,0x00000001af0d4d16,0x000016cf728a27d69,0x0000000000000000,0x00077200000000000,0x0000000000000000,0x000016d0000000000},
+ { 0x0000000000000096,0x0002260909954aca8,0x00000001f3bde74b,0x00000275f8ad81133,0x0000000000000000,0x00022700000000000,0x0000000000000000,0x00000276000000000},
+ { 0x00000000000000ec,0x0003a59ce3b801702,0x00000117591d0c11,0x0000e63dd4c4ea702,0x0000000000000000,0x0003a600000000000,0x0000000000000000,0x0000e640000000000},
+ { 0x0000000000001291,0x0291e858cab9d585d,0x000c6490afd6c377,0x00ccfdec9c68d01b5,0x0000000000000000,0x02920000000000000,0x000c000000000000,0x00cd0000000000000},
+ { 0x0000000000000058,0x005da47c09b944b76,0x0000000661466771,0x0032b48fa728c0ef7,0x0000000000000000,0x005dc000000000000,0x0000000000000000,0x0032c000000000000},
+ { 0x00000000000000c0,0x00b49b9cefe8d724c,0x0000000000000ed3,0x00028bdd90325d944,0x0000000000000000,0x00b4c000000000000,0x0000000000000000,0x00028c00000000000},
+ { 0x0000000000000004,0x0700bacf75895d14a,0x000000000000000c,0x000000a7a927dbdc1,0x0000000000000000,0x07020000000000000,0x0000000000000000,0x000000a7c00000000},
+ { 0x0000000000000018,0x00000caee0a0be2f2,0x000000000000003b,0x0000000000000028b,0x0000000000000000,0x00000cb0000000000,0x000000000000003b,0x0000000000000028b},
+ { 0x0000000000000001,0x0003228438b8cd45d,0x0000000002a27b1c,0x00026843a5aab7e41,0x0000000000000000,0x00032300000000000,0x0000000000000000,0x00026900000000000},
+ { 0x00000000000003f4,0x000000ef9b2986e32,0x0000000000001504,0x000000000001ab1b7,0x0000000000000000,0x000000efc00000000,0x0000000000001000,0x000000000001ab800},
+ { 0x0000000000000003,0x00000084552745cf7,0x0000000000007bd7,0x00000000000cfa3b8,0x0000000000000000,0x00000084800000000,0x0000000000004000,0x00000000000cfc000},
+ { 0x000000000000000e,0x0000000050130c61e,0x000000000000018e,0x000000000015dfcc8,0x0000000000000000,0x00000000502000000,0x0000000000000000,0x000000000015e0000},
+ { 0x0000000000000a12,0x00032a8de72779906,0x0000000006de4f34,0x00000024872e28f4b,0x0000000000000000,0x00032b00000000000,0x0000000000000000,0x00000024900000000},
+ { 0x0000000000000012,0x0000000000bf065d3,0x0000000000000069,0x00000000000000821,0x0000000000000000,0x0000000000bf40000,0x0000000000000069,0x00000000000000821},
+ { 0x0000000000000001,0x011248a2d45526cdb,0x0000000000003d9b,0x0000001492b90dbdb,0x0000000000000000,0x01128000000000000,0x0000000000000000,0x00000014980000000},
+ { 0x000000000000000a,0x000000003fc94a34b,0x0000000000000033,0x0000000000003b0b6,0x0000000000000000,0x000000003fd000000,0x0000000000000000,0x0000000000003b100},
+ { 0x0000000000000007,0x020b7fb137ce4d4b3,0x016baa29d8dd52a8,0x0030baf494fe0480e,0x0000000000000000,0x020c0000000000000,0x016b800000000000,0x0030c000000000000},
+ { 0x000000000000007e,0x0001f3a66420860ac,0x000000000005897f,0x00000002e37a35a44,0x0000000000000000,0x0001f400000000000,0x0000000000000000,0x00000002e40000000},
+ { 0x000000000000000b,0x00007954c97994a2d,0x00000000000000c9,0x00000000000000434,0x0000000000000000,0x00007960000000000,0x00000000000000c9,0x00000000000000434},
+ { 0x0000000000000039,0x01cacef7371ec706f,0x00000000000341f1,0x0000000000012e123,0x0000000000000000,0x01cb0000000000000,0x0000000000034000,0x0000000000012e400},
+ { 0x0000000000000014,0x000000f2d951aa31f,0x00000000000000c4,0x0000000002b4442ea,0x0000000000000000,0x000000f3000000000,0x0000000000000000,0x0000000002b500000},
+ { 0x0000000000e0fd3b,0x001825131683bc5a6,0x0000039c952e1989,0x0000788211cf0750e,0x0000000000000000,0x00182800000000000,0x0000020000000000,0x000078a0000000000},
+ { 0x0000000000000003,0x00000000282e2643b,0x0000000002c3a620,0x0000000003a55a14e,0x0000000000000000,0x00000000283000000,0x0000000002c00000,0x0000000003a600000},
+ { 0x000000000000644d,0x000036077b6415685,0x00000000fa42ba07,0x000002b9c5496ea7c,0x0000000000000000,0x00003610000000000,0x0000000000000000,0x000002ba000000000},
+ { 0x00000000000001fe,0x000dfed709f24c0f0,0x0000000000028591,0x000001c2b47374f78,0x0000000000000000,0x000e0000000000000,0x0000000000000000,0x000001c3000000000},
+ { 0x00000000049a845f,0x003e4589ac4967500,0x000000003aff32c6,0x00003e21b4a8ffc7d,0x0000000000000000,0x003e5000000000000,0x0000000000000000,0x00003e30000000000},
+ { 0x000000000000001c,0x0000000000d351af8,0x0000000000000a06,0x00000000000126314,0x0000000000000000,0x0000000000d380000,0x0000000000000800,0x00000000000126800},
+ { 0x0000000000000025,0x0000002ba85bc3a4c,0x00000000000000bd,0x00000000711262fca,0x0000000000000000,0x0000002bb00000000,0x0000000000000000,0x00000000712000000},
+ { 0x0000000000003279,0x00c91658f81e7e1d9,0x00002a14673ca4d0,0x00008fdf550e4f861,0x0000000000000000,0x00c94000000000000,0x0000280000000000,0x00009000000000000},
+ { 0x00000000000004c3,0x000b2d264af100e64,0x0000000000001646,0x0000000078353dde3,0x0000000000000000,0x000b3000000000000,0x0000000000000000,0x00000000784000000},
+ { 0x000000000000f2c8,0x0000023442393890a,0x00000003376f119f,0x0000018506498a45d,0x0000000000000000,0x00000235000000000,0x0000000000000000,0x00000185800000000},
+ { 0x000000486f2677d1,0x0292a214d9c0aa48d,0x024af42345cd3a0e,0x003c2ce5dc7f9a664,0x0000000000000000,0x02930000000000000,0x024a800000000000,0x003c3000000000000},
+ { 0x00000000000001ea,0x0004a71d535f7d5a6,0x000000000caa6594,0x000001a1c129d086f,0x0000000000000000,0x0004a800000000000,0x0000000000000000,0x000001a2000000000},
+ { 0x0000000000000029,0x000035803b34c4c65,0x0000000000000073,0x00000000000000501,0x0000000000000000,0x00003590000000000,0x0000000000000073,0x00000000000000501},
+ { 0x00000000031d5d8f,0x0122fff17922f37af,0x000000007ee0f38e,0x0044dd6c02b62e4b9,0x0000000000000000,0x01230000000000000,0x0000000000000000,0x0044e000000000000},
+ { 0x0000000000003426,0x0001df232d8e0fb0a,0x00000000081adf18,0x00000000716866e50,0x0000000000000000,0x0001df80000000000,0x0000000008000000,0x00000000718000000},
+ { 0x000000000000000d,0x0000000007aabeca9,0x000000000000005f,0x0000000000000025a,0x0000000000000000,0x0000000007ac00000,0x000000000000005f,0x0000000000000025a},
+ { 0x000000a8abda0879,0x014be176e6f622416,0x00099569434b20a4,0x000154f14d9f1b0a1,0x0000000000000000,0x014c0000000000000,0x0009940000000000,0x00015500000000000},
+ { 0x000000000000067f,0x0006d669f0f8b60c6,0x0000002601bbbc93,0x00000026ccc66302e,0x0000000000000000,0x0006d800000000000,0x0000002600000000,0x00000026d00000000},
+ { 0x000000000000003d,0x00000000062947747,0x00000000000000b0,0x0000000000203cd9e,0x0000000000000000,0x00000000062a00000,0x0000000000000000,0x00000000002040000},
+ { 0x00000000000000c9,0x000058e10c877eb86,0x000000006eb3951c,0x000000000ac7cc68d,0x0000000000000000,0x00005900000000000,0x000000006eb00000,0x000000000ac800000},
+ { 0x0000000000000002,0x0000bc79dae044933,0x0000000005d4d4a1,0x0000007f437664e8b,0x0000000000000000,0x0000bc80000000000,0x0000000000000000,0x0000007f600000000},
+ { 0x0000000000000102,0x00000000b7df65089,0x000000000000024f,0x00000000029841b2a,0x0000000000000000,0x00000000b80000000,0x0000000000000000,0x00000000029900000},
+ { 0x00000000000dbe96,0x000fe53c3d50fd900,0x00000002271d7309,0x00000080dbee79da7,0x0000000000000000,0x000fe800000000000,0x0000000000000000,0x00000081000000000},
+ { 0x0000000000000005,0x03594eb1a1d66a8e7,0x0001031fd7899c3e,0x0062047c40b1e5cbb,0x0000000000000000,0x035a0000000000000,0x0000000000000000,0x00622000000000000},
+ { 0x0000000000000003,0x000002037effd4f3c,0x000000000000000e,0x0000000000e07e4ce,0x0000000000000000,0x00000204000000000,0x0000000000000000,0x0000000000e080000},
+ { 0x00000012018b64c2,0x0008de49094b5041d,0x000006e6967933db,0x00012fc1839f647da,0x0000000000000000,0x0008e000000000000,0x0000000000000000,0x00013000000000000},
+ { 0x0000000000000011,0x00eadaa8e91d88793,0x00000000000000e2,0x000000000a3b515d2,0x0000000000000000,0x00eb0000000000000,0x0000000000000000,0x000000000a3c00000},
+ { 0x0000000000001a68,0x00000031881fa83d2,0x0000000000522548,0x0000000001c172e6f,0x0000000000000000,0x00000031900000000,0x0000000000500000,0x0000000001c180000},
+ { 0x000000000000000d,0x000000f540ba116d9,0x0000000000030a16,0x000000000098bd943,0x0000000000000000,0x000000f5800000000,0x0000000000000000,0x000000000098c0000},
+ { 0x000000000000002c,0x0039b84324c005345,0x000006e91107c7d1,0x0010d645f9d415466,0x0000000000000000,0x0039c000000000000,0x0000000000000000,0x0010d800000000000},
+ { 0x00000000000008bd,0x0000007df6efe3ca5,0x000000000000401a,0x0000000000013940d,0x0000000000000000,0x0000007e000000000,0x0000000000004000,0x00000000000139800},
+ { 0x0000000000000111,0x018aca961f3df7984,0x00000000000065e2,0x0019bc1c5e3f19a3c,0x0000000000000000,0x018b0000000000000,0x0000000000000000,0x0019c000000000000},
+ { 0x0000000000000001,0x0007fc762e6c73b39,0x00000000000001d0,0x00007d1507d6735b6,0x0000000000000000,0x0007fe00000000000,0x0000000000000000,0x00007d20000000000},
+ { 0x00000000000002df,0x0003766377fd0514b,0x00000b574319461b,0x0002f90cd0f4dbbe0,0x0000000000000000,0x00037700000000000,0x0000000000000000,0x0002fa00000000000},
+ { 0x0000000000000a93,0x0000016aab95da17d,0x000000000000e4cf,0x000000010d5849fb7,0x0000000000000000,0x0000016b000000000,0x0000000000000000,0x000000010d8000000},
+ { 0x000000000007de2a,0x0000000008ff3fb7f,0x00000000007fb9e3,0x000000000008d6b7a,0x0000000000000000,0x00000000090000000,0x00000000007fb800,0x000000000008d6c00},
+ { 0x0000000000002666,0x000001b1de46e7928,0x0000000003da5fbd,0x00000083913a8faf7,0x0000000000000000,0x000001b2000000000,0x0000000000000000,0x00000083c00000000},
+ { 0x0000000000000002,0x00000014b8c98d40d,0x0000000000000012,0x00000000017ab1332,0x0000000000000000,0x00000014c00000000,0x0000000000000000,0x00000000017b00000},
+ { 0x0000000000000000,0x000003e0a907e3350,0x0000000000000003,0x00000000002a024eb,0x0000000000000000,0x000003e1000000000,0x0000000000000000,0x00000000002a10000},
+ { 0x00000000000001ce,0x0001049362043039b,0x00000000003dd6d9,0x0000000150d319230,0x0000000000000000,0x00010500000000000,0x0000000000000000,0x00000001510000000},
+ { 0x000000000000003e,0x007b97691dd082019,0x000000000000007e,0x0000000006f67d978,0x0000000000000000,0x007ba000000000000,0x0000000000000000,0x0000000006f800000},
+ { 0x000000000000000f,0x0000075504d041d54,0x0000000000001537,0x000005c87219b21b5,0x0000000000000000,0x00000756000000000,0x0000000000000000,0x000005ca000000000},
+ { 0x0000000000000076,0x0aaf07b328d3daeef,0x000000000bcc08fb,0x000000014e49e845a,0x0000000000000000,0x0ab00000000000000,0x0000000008000000,0x000000014e8000000},
+ { 0x000000000000000c,0x00000fbb083238a58,0x000000c0225e4d73,0x00000b06e21c1123a,0x0000000000000000,0x00000fbc000000000,0x000000c000000000,0x00000b08000000000},
+ { 0x0000001271087f5f,0x00003b35f94818274,0x00000a4f791f43fe,0x0000047c7332ffe75,0x0000000000000000,0x00003b40000000000,0x00000a4000000000,0x0000047d000000000},
+ { 0x0000000000000002,0x00041b3b7aeea6e53,0x0000000001beb942,0x000000aabbc939f3d,0x0000000000000000,0x00041c00000000000,0x0000000000000000,0x000000aac00000000},
+ { 0x000000000576da87,0x0b8dab0426d37046a,0x000000a7c6bd14f4,0x0000001cb957dee32,0x0000000000000000,0x0b900000000000000,0x000000a780000000,0x0000001cc00000000},
+ { 0x0000000000001d7d,0x0061d45edbd9ee302,0x000000002323866c,0x00000000ded7b6caf,0x0000000000000000,0x0061e000000000000,0x0000000020000000,0x00000000df0000000},
+ { 0x00000000000003c6,0x00510bf9f434618f4,0x0000000013982a3f,0x0000000165d1bc800,0x0000000000000000,0x00512000000000000,0x0000000010000000,0x00000001660000000},
+ { 0x00000000015c2018,0x00937e41645af9cc8,0x000000000309ffd6,0x000539241e6747975,0x0000000000000000,0x00938000000000000,0x0000000000000000,0x00053a00000000000},
+ { 0x000000000d50235e,0x07b14bf4fa0cdc44a,0x00000006ce747ca4,0x0000000dd0f603bf1,0x0000000000000000,0x07b20000000000000,0x00000006c0000000,0x0000000dd40000000},
+ { 0x00000000000003e0,0x04c7bf9177f79dc31,0x0000000002101478,0x0000000000d1d6a01,0x0000000000000000,0x04c80000000000000,0x0000000002100000,0x0000000000d200000},
+ { 0x000000000000000b,0x0005b26fa87629cac,0x00000000014a5712,0x00000000094afc5b1,0x0000000000000000,0x0005b400000000000,0x0000000001400000,0x00000000094c00000},
+ { 0x000000000000037c,0x00017c0dd6015ed26,0x000000000000f0a2,0x0000000007bc4b08e,0x0000000000000000,0x00017c80000000000,0x0000000000000000,0x0000000007be00000},
+ { 0x0000000000000053,0x020627fcfa5b20136,0x001b75de905befc0,0x0007383d0cc7e0814,0x0000000000000000,0x02070000000000000,0x001b600000000000,0x00073a00000000000},
+ { 0x00000000000000e0,0x000000003ad54fb43,0x00000000000240b9,0x00000000000f53558,0x0000000000000000,0x000000003ae000000,0x0000000000024000,0x00000000000f54000},
+ { 0x0000000000000001,0x000000005c09418c3,0x0000000001003059,0x0000000000aa6ee82,0x0000000000000000,0x000000005c2000000,0x0000000001000000,0x0000000000aa80000},
+ { 0x00000000006d3fcd,0x04b47797d890434ad,0x000000b70015c82a,0x00001628403bfc6c8,0x0000000000000000,0x04b60000000000000,0x0000008000000000,0x00001630000000000},
+ { 0x0000000a30262850,0x0b88835c4f743ae27,0x00000041f3462ff2,0x00000f930f1a32a99,0x0000000000000000,0x0b8c0000000000000,0x0000004000000000,0x00000f94000000000},
+ { 0x000000000000063b,0x000028fdbd287f7f7,0x000000000002b27e,0x00000d071aaa228a1,0x0000000000000000,0x00002900000000000,0x0000000000000000,0x00000d08000000000},
+ { 0x0000000000000001,0x000000004cc3c6832,0x000000000000008f,0x00000000000c0f7d7,0x0000000000000000,0x000000004ce000000,0x0000000000000000,0x00000000000c10000},
+ { 0x0000000000000002,0x00000000000123624,0x00000000000074e8,0x00000000000013e38,0x0000000000000000,0x00000000000123800,0x00000000000074c0,0x00000000000013e40},
+ { 0x0000000000002eac,0x000c3a9f8e3962758,0x0000000008c9d809,0x00000000d400ba410,0x0000000000000000,0x000c3c00000000000,0x0000000008000000,0x00000000d44000000},
+ { 0x000000000000003f,0x001db68b36cfad779,0x00000000003b1496,0x0000050babb97df6f,0x0000000000000000,0x001db800000000000,0x0000000000000000,0x0000050c000000000},
+ { 0x0000000000000002,0x000000fb226dd6750,0x00000000000004dc,0x000000000000007bd,0x0000000000000000,0x000000fb400000000,0x00000000000004dc,0x000000000000007bd},
+ { 0x000000015eecb110,0x000ef551c549a94b0,0x00000386becff04e,0x00016d4afac1ceb46,0x0000000000000000,0x000ef800000000000,0x0000000000000000,0x00016d80000000000},
+ { 0x0000000000000011,0x00001ca1c2518a504,0x0000000010ba3c72,0x0000000002ce36d1e,0x0000000000000000,0x00001ca8000000000,0x0000000010b80000,0x0000000002ce80000},
+ { 0x00000000000007f0,0x0a3ec6f4cc868e83a,0x0000000000008b90,0x0000000000064f5e7,0x0000000000000000,0x0a400000000000000,0x0000000000008000,0x00000000000650000},
+ { 0x00000031b8b8e202,0x000df1b10683ebc93,0x000f38351f7cbeab,0x00063a57cfb705e66,0x0000000000000000,0x000df400000000000,0x000f200000000000,0x00063c00000000000},
+ { 0x00000000003553f5,0x0042887c963a113dc,0x0000334f05b93792,0x00001d00e92706bb3,0x0000000000000000,0x0042a000000000000,0x0000330000000000,0x00001d08000000000},
+ { 0x000000000000052f,0x0001b3e89264b1f05,0x00005be19d3a1522,0x00001fd554de69b29,0x0000000000000000,0x0001b400000000000,0x00005b8000000000,0x00001fd8000000000},
+ { 0x0000000000000772,0x000001ed32b281900,0x0000000001828657,0x0000002d011d6658c,0x0000000000000000,0x000001ed800000000,0x0000000000000000,0x0000002d100000000},
+ { 0x0000000000000009,0x000005f19c4ad2116,0x00000089417cc610,0x00000515cd23e97b8,0x0000000000000000,0x000005f2000000000,0x0000008000000000,0x00000516000000000},
+ { 0x0000000000000000,0x0000068327fd0f395,0x000000000055b069,0x000001b17156ddd89,0x0000000000000000,0x00000684000000000,0x0000000000000000,0x000001b1800000000},
+ { 0x0000000000001f61,0x000000002281d8186,0x0000000001ebf5b6,0x0000000001d20b7ec,0x0000000000000000,0x00000000229000000,0x0000000001e80000,0x0000000001d280000},
+ { 0x00000000000001cd,0x000093460296eaecd,0x0000001e22b289d0,0x000019f8a25b797c8,0x0000000000000000,0x00009380000000000,0x0000000000000000,0x00001a00000000000},
+ { 0x0000000000000000,0x000011d7105845640,0x0000000005153c19,0x000000001c156e9ee,0x0000000000000000,0x000011d8000000000,0x0000000005000000,0x000000001c1800000},
+ { 0x00000000001e7b0d,0x000037f24cb1b3f4f,0x000000000044286a,0x00000000004046ff4,0x0000000000000000,0x00003800000000000,0x0000000000440000,0x00000000004050000},
+ { 0x000000000009655f,0x0000003a40a6bdd45,0x0000001ba5293c68,0x0000001b640cb066d,0x0000000000000000,0x0000003a500000000,0x0000001b80000000,0x0000001b680000000},
+ { 0x000000007cf9efdf,0x002d6c5fb6931e27d,0x00001924e7700db5,0x00074ca9a7f8c1006,0x0000000000000000,0x002d7000000000000,0x0000000000000000,0x00074e00000000000},
+ { 0x0000000000000000,0x000000168c52c1aba,0x000000000173255b,0x0000000004140dd15,0x0000000000000000,0x00000016900000000,0x0000000001700000,0x00000000041500000},
+ { 0x0000000000006991,0x00d10c03afbd3772b,0x000000000007ea65,0x0000000000b0da18e,0x0000000000000000,0x00d14000000000000,0x0000000000040000,0x0000000000b100000},
+ { 0x000000000000b76a,0x0b89ed54a21d7575a,0x00000f2954110139,0x00000162e34758e9f,0x0000000000000000,0x0b8c0000000000000,0x00000f2800000000,0x00000163000000000},
+ { 0x0000000000025adf,0x00067d7944859a69f,0x00000000001396a3,0x0000000000026c4b4,0x0000000000000000,0x00067e00000000000,0x0000000000139000,0x0000000000026c800},
+ { 0x000000000001d7ea,0x000007b6e7f6f1d2c,0x0000000000072bdf,0x000000000003ff713,0x0000000000000000,0x000007b8000000000,0x0000000000072000,0x00000000000400000},
+ { 0x00000000000032d5,0x0001f5187530b6025,0x0000000000090899,0x0000005a7b6084dd1,0x0000000000000000,0x0001f580000000000,0x0000000000000000,0x0000005a800000000},
+ { 0x000000000000060d,0x0000004f16d89d481,0x00000000abb37467,0x0000001f44793b8ac,0x0000000000000000,0x0000004f200000000,0x0000000080000000,0x0000001f480000000},
+ { 0x0000000000001104,0x00042f7e8f45d193a,0x000000000070d42a,0x000000055616d0c44,0x0000000000000000,0x00043000000000000,0x0000000000000000,0x00000005580000000},
+ { 0x0000003b0e991f30,0x048fff45ab49a8f58,0x00007a22fd3faeb7,0x00001e80559e548c1,0x0000000000000000,0x04900000000000000,0x00007a0000000000,0x00001e88000000000},
+ { 0x0000000000000000,0x0000043922518c5df,0x00000000001b5cf9,0x0000000093baba23d,0x0000000000000000,0x0000043a000000000,0x0000000000000000,0x0000000093c000000},
+ { 0x00000000000000a8,0x000001d465eb7aadc,0x0000000000160980,0x00000000000de3854,0x0000000000000000,0x000001d4800000000,0x0000000000160000,0x00000000000de4000},
+ { 0x0000000000000035,0x001cadfc85f3c0ec0,0x0000000000000533,0x000000000b82cdfd0,0x0000000000000000,0x001cb000000000000,0x0000000000000000,0x000000000b8400000},
+ { 0x000000000006701e,0x001a8ac60d8cee85f,0x0000001d705a2e7d,0x0000347ba03b20531,0x0000000000000000,0x001a9000000000000,0x0000000000000000,0x00003480000000000},
+ { 0x0000000000000003,0x00005aa642a17c996,0x0000000000013f98,0x0000000000003106a,0x0000000000000000,0x00005ac0000000000,0x0000000000013f80,0x00000000000031080},
+ { 0x000000000000002e,0x00000d8212c68f801,0x0000000000003ccc,0x0000000037e09377f,0x0000000000000000,0x00000d84000000000,0x0000000000000000,0x0000000037f000000},
+ { 0x0000000230ed52de,0x000d2ba15a5ead410,0x0000007adfca9cc3,0x0000003dc93d66dd0,0x0000000000000000,0x000d2c00000000000,0x0000007a00000000,0x0000003dd00000000},
+ { 0x0000000000121f11,0x00a05c53ed1cbd499,0x0000000000155d30,0x000003846a6c8d70b,0x0000000000000000,0x00a08000000000000,0x0000000000000000,0x00000385000000000},
+ { 0x000000000000005c,0x00002d80226640d3a,0x0000000184499318,0x000008fa22b8ebe5d,0x0000000000000000,0x00002d90000000000,0x0000000000000000,0x000008fc000000000},
+ { 0x000000000000a183,0x000008bbd91562942,0x0000000cfa0efdd6,0x000001bde8de22b58,0x0000000000000000,0x000008bc000000000,0x0000000800000000,0x000001be000000000},
+ { 0x0000000000000034,0x014ee15a2c49eecac,0x000000000000029a,0x00000000004628852,0x0000000000000000,0x014f0000000000000,0x0000000000000000,0x00000000004640000},
+ { 0x0000000000000003,0x0006f0fe25883673b,0x0000000000000005,0x00000c9cf358b534d,0x0000000000000000,0x0006f200000000000,0x0000000000000000,0x00000ca0000000000},
+ { 0x000000000005b60b,0x0008642c75d037302,0x000000003e4afc6c,0x0000ecdda5deb62b0,0x0000000000000000,0x00086800000000000,0x0000000000000000,0x0000ed00000000000},
+ { 0x0000000000000003,0x000008d8604e9e7e5,0x00000000000003d6,0x00000000004a4dd3f,0x0000000000000000,0x000008dc000000000,0x0000000000000000,0x00000000004a60000},
+ { 0x000000000000009f,0x027203e4412d23c96,0x000bc9d1ffd831c2,0x019aa1ca2a1ace5cc,0x0000000000000000,0x02730000000000000,0x0008000000000000,0x019b0000000000000},
+ { 0x0000000000000002,0x0000001dc082a387c,0x0000000000000439,0x0000000000798af5a,0x0000000000000000,0x0000001dc80000000,0x0000000000000000,0x000000000079a0000},
+ { 0x0000000035105c63,0x0f6f0a37826f8efd3,0x000003b2e00d9a88,0x00e0c3235bed9f561,0x0000000000000000,0x0f700000000000000,0x0000000000000000,0x00e10000000000000},
+ { 0x00000000000000da,0x000000000002e8201,0x00000000000000ed,0x00000000000005dbf,0x0000000000000000,0x000000000002e9000,0x00000000000000e0,0x00000000000005dc0},
+ { 0x0000000000c49b8d,0x0ef69d7c8f00534c0,0x000002431b9aef84,0x000055c825a5e76e2,0x0000000000000000,0x0ef80000000000000,0x0000020000000000,0x000055e0000000000},
+ { 0x0000000000000000,0x002b351d892491128,0x0000000000000153,0x000aac6ee43b4a985,0x0000000000000000,0x002b4000000000000,0x0000000000000000,0x000ab000000000000},
+ { 0x0000000000000005,0x0016db3a42328bfec,0x000000000001fb80,0x000b571a001871296,0x0000000000000000,0x0016e000000000000,0x0000000000000000,0x000b5800000000000},
+ { 0x0000000000000120,0x02dfc68a49e1d8e59,0x000000000000013d,0x0000000001a06366a,0x0000000000000000,0x02e00000000000000,0x0000000000000000,0x0000000001a080000},
+ { 0x000000000000631e,0x0000175c728bcf1f2,0x000000001eebd4b1,0x000005567a7c5efc0,0x0000000000000000,0x00001760000000000,0x0000000000000000,0x00000558000000000},
+ { 0x00000003a738467d,0x0000c7a6416da3019,0x0000046c5361dbe4,0x00005579a1f0cbdb0,0x0000000000000000,0x0000c7c0000000000,0x0000040000000000,0x00005580000000000},
+ { 0x00000000000067d5,0x00000000000c8ed72,0x00000000000246e7,0x0000000000002ba19,0x0000000000004000,0x00000000000c90000,0x00000000000246e0,0x0000000000002ba20},
+ { 0x000000000000003e,0x0001fe5958dfbf50c,0x0000232095c377da,0x000030ed88cd9d27b,0x0000000000000000,0x0001fe80000000000,0x0000230000000000,0x000030f0000000000},
+ { 0x0000000000006ac2,0x000183d1c9cba0adb,0x0000000002fccfcc,0x00013c42b662bed34,0x0000000000000000,0x00018400000000000,0x0000000000000000,0x00013c80000000000},
+ { 0x000000000001f1e7,0x00370ab4c0ed016d2,0x00000000000708ba,0x0000000034150a834,0x0000000000000000,0x00371000000000000,0x0000000000000000,0x00000000342000000},
+ { 0x0000000003f905f1,0x01f3916358fdc8ea4,0x001e9d38ea2baf1c,0x0138ce6180e865d66,0x0000000000000000,0x01f40000000000000,0x0018000000000000,0x01390000000000000},
+ { 0x0000000000000006,0x00000000000000218,0x0000000000000025,0x0000000000000003a,0x0000000000000006,0x00000000000000218,0x0000000000000025,0x0000000000000003a},
+ { 0x00000000066dd94d,0x0000004b4849838e7,0x0000000006a5de6f,0x00000000c0ce6d73d,0x0000000000000000,0x0000004b600000000,0x0000000004000000,0x00000000c10000000},
+ { 0x000000000000006f,0x000147f0c66b1af56,0x0000000000001495,0x00000000000062f69,0x0000000000000000,0x00014800000000000,0x0000000000001400,0x00000000000063000},
+ { 0x0000000001378724,0x001863c02f78d4fcb,0x0000000002e7a990,0x000344cb6ba773568,0x0000000000000000,0x00186800000000000,0x0000000000000000,0x00034500000000000},
+ { 0x000000000000000b,0x000000002acea19db,0x000000000000005b,0x0000000000d3050de,0x0000000000000000,0x000000002ad000000,0x0000000000000000,0x0000000000d340000},
+ { 0x0000000000000098,0x000cdd733bdfc1ef1,0x0003f579fba41d7a,0x00046935555ad3072,0x0000000000000000,0x000ce000000000000,0x0003e00000000000,0x00046a00000000000},
+ { 0x000000000000bf2b,0x0000049b756888c18,0x00000058b7e9e802,0x000000131b4efc3a6,0x0000000000000000,0x0000049c000000000,0x0000005880000000,0x000000131c0000000},
+ { 0x0000000000000248,0x00000001e70766443,0x000000000525cd26,0x00000001787a3fa5a,0x0000000000000000,0x00000001e78000000,0x0000000000000000,0x00000001788000000},
+ { 0x00000000009b40f3,0x0000179c99834bf91,0x0000001095bcc74d,0x00000003588404719,0x0000000000000000,0x000017a0000000000,0x0000001090000000,0x00000003590000000},
+ { 0x00000000012fdac4,0x0000001754b784c42,0x0000000002d3e2fe,0x0000000000654d54a,0x0000000000000000,0x00000017580000000,0x0000000002d30000,0x00000000006550000},
+ { 0x00000000000fb727,0x0000004f47f699dd9,0x00000082f7573b01,0x000000408b2802ab8,0x0000000000000000,0x0000004f600000000,0x0000008200000000,0x00000040900000000},
+ { 0x0000000000000068,0x0008e5b15e0fa76c2,0x00000000018a8454,0x0000000391ae291b0,0x0000000000000000,0x0008e800000000000,0x0000000000000000,0x00000003920000000},
+ { 0x0000000000000000,0x00133878ca118b4d5,0x0000000000064241,0x000b7ba4010486d21,0x0000000000000000,0x00134000000000000,0x0000000000000000,0x000b7c00000000000},
+ { 0x000000000c400844,0x0037b3eb0839d36a2,0x001ef2026b8a64a4,0x000e35aca08a5b79f,0x0000000000000000,0x0037c000000000000,0x001ec00000000000,0x000e3800000000000},
+ { 0x000000000f278cb2,0x000001fb0a844e4dd,0x0000000789db0463,0x00000001bea964b26,0x0000000000000000,0x000001fb800000000,0x0000000788000000,0x00000001bf0000000},
+ { 0x0000000000000f76,0x000001e6e5418913a,0x00000000000072d4,0x000000075efcb7bc9,0x0000000000000000,0x000001e7000000000,0x0000000000000000,0x00000007600000000},
+ { 0x0000000000000217,0x03bf42724a0e4eb05,0x00000000341fa2bd,0x0001007ba10545dbb,0x0000000000000000,0x03c00000000000000,0x0000000000000000,0x00010080000000000},
+ { 0x0000000000000007,0x00528f675d716cb73,0x0000000000000422,0x000000282fc676f22,0x0000000000000000,0x0052a000000000000,0x0000000000000000,0x00000028300000000},
+ { 0x000000000000d708,0x01c25b8d18324349c,0x0000000000062967,0x000001b270886ebcb,0x0000000000000000,0x01c28000000000000,0x0000000000000000,0x000001b2800000000},
+ { 0x000000000000001c,0x000051c2b69900dd9,0x0000000000000068,0x000000000007a89fd,0x0000000000000000,0x000051e0000000000,0x0000000000000000,0x000000000007aa000},
+ { 0x0000000000000004,0x000000028501a7068,0x000000000000000f,0x00000000000002429,0x0000000000000000,0x00000002860000000,0x0000000000000000,0x00000000000002430},
+ { 0x0000000000000444,0x000000000154b3341,0x000000000045e801,0x00000000000501b0f,0x0000000000000000,0x00000000015500000,0x000000000045e800,0x00000000000501c00},
+ { 0x0000000004159b67,0x0563217486c0388e9,0x0000046322e00abb,0x000e154c74e563f4b,0x0000000000000000,0x05640000000000000,0x0000000000000000,0x000e1800000000000},
+ { 0x0000000000193e83,0x00025a95a9ea412e6,0x000000004e19a300,0x000000000bc76bdf9,0x0000000000000000,0x00025b00000000000,0x000000004e000000,0x000000000bc800000},
+ { 0x0000000000000045,0x00008128d2e84ebe1,0x00000000000016e6,0x0000000000e9e78bf,0x0000000000000000,0x00008140000000000,0x0000000000000000,0x0000000000ea00000},
+ { 0x0000148666b3f3de,0x0007b5731264e92ea,0x0008d6646ff6ff7f,0x00009e4ae5c5d65b0,0x0000000000000000,0x0007b600000000000,0x0008d60000000000,0x00009e50000000000},
+ { 0x0000000000000000,0x036d3d48aef3f8a46,0x000000000007a0c4,0x000150733d75c5deb,0x0000000000000000,0x036e0000000000000,0x0000000000000000,0x00015080000000000},
+ { 0x0000000000000058,0x0017ff9e22794a1b0,0x00000000000c1349,0x00000005eed2584e6,0x0000000000000000,0x00180000000000000,0x0000000000000000,0x00000005f00000000},
+ { 0x000000000000006b,0x0186521c921459c8c,0x000012d6eeea32b7,0x0000e7378dca84776,0x0000000000000000,0x01868000000000000,0x0000100000000000,0x0000e740000000000},
+ { 0x000000000000000b,0x0000000026b9ffc91,0x00000000000000f0,0x00000000000010b60,0x0000000000000000,0x0000000026c000000,0x0000000000000080,0x00000000000010b80},
+ { 0x000000000003de5a,0x001d2256717abca2d,0x00000010c68fe49d,0x000012a245715ef98,0x0000000000000000,0x001d2800000000000,0x0000000000000000,0x000012a8000000000},
+ { 0x0000000000000020,0x012cee7a2dd999f54,0x0000105bcfaad7f0,0x00010544f058b6858,0x0000000000000000,0x012d0000000000000,0x0000100000000000,0x00010580000000000},
+ { 0x000000000000b505,0x035fabe760648a024,0x00002ddf7a54e946,0x000004c85ea1f8a98,0x0000000000000000,0x03600000000000000,0x00002dd800000000,0x000004c8800000000},
+ { 0x0000000af62b1b43,0x0004b97474bb9f640,0x000dd4fe7bdf2e67,0x0003c742963db0898,0x0000000000000000,0x0004ba00000000000,0x000dd00000000000,0x0003c800000000000},
+ { 0x0000000000000005,0x000002834e459de75,0x0000000001363e22,0x00000064d8a638ca8,0x0000000000000000,0x00000284000000000,0x0000000000000000,0x00000064e00000000},
+ { 0x000000000000002e,0x000000779f8b5e08f,0x0000000000000732,0x000000000003c2d94,0x0000000000000000,0x00000077a00000000,0x0000000000000000,0x000000000003c3000},
+ { 0x0000000000000f78,0x0000cb5f8c245eee1,0x0000041b7c943610,0x0000007ba3c66252e,0x0000000000000000,0x0000cb80000000000,0x0000041b00000000,0x0000007bb00000000},
+ { 0x000000000004da20,0x0000065ced5d9e4bb,0x00000000fcce521d,0x0000000019d802aa2,0x0000000000000000,0x0000065e000000000,0x00000000fcc00000,0x0000000019dc00000},
+ { 0x0000000000000001,0x037751bf4a568b01b,0x0000000000034327,0x000000000000382de,0x0000000000000000,0x03780000000000000,0x0000000000034320,0x000000000000382e0},
+ { 0x0000000000000001,0x0000635f39a7c0806,0x00000039bcdafc30,0x000000ae8ab16ab51,0x0000000000000000,0x00006360000000000,0x0000003800000000,0x000000aec00000000},
+ { 0x000000000000007a,0x00010533544173df6,0x00000010ea11db9d,0x0000000364b80ff74,0x0000000000000000,0x00010580000000000,0x00000010e0000000,0x00000003650000000},
+ { 0x0000000000000007,0x00000000003365168,0x00000000000000ae,0x00000000000f54ec2,0x0000000000000000,0x00000000003370000,0x0000000000000000,0x00000000000f58000},
+ { 0x00000000000011fa,0x03133c8807a1a745f,0x000000000000cf6f,0x00026455ba12946e5,0x0000000000000000,0x03140000000000000,0x0000000000000000,0x00026500000000000},
+ { 0x0000000000000073,0x00000255757ac3567,0x000000000003337f,0x000000000012b20ad,0x0000000000000000,0x00000256000000000,0x0000000000030000,0x000000000012b8000},
+ { 0x000000000000000f,0x00041e96c8585e716,0x00000000097251a3,0x00000bc5c21a90bd5,0x0000000000000000,0x00042000000000000,0x0000000000000000,0x00000bc8000000000},
+ { 0x00000000000249fc,0x00001f971bffcde56,0x0000000000ba76c0,0x000000002f7dce809,0x0000000000000000,0x00001f98000000000,0x0000000000000000,0x000000002f8000000},
+ { 0x000000000000005d,0x0008229f8ab13532c,0x00000000000150e7,0x000000000560b5db6,0x0000000000000000,0x00082400000000000,0x0000000000000000,0x00000000056200000},
+ { 0x000000000000000b,0x0020928c149374ac7,0x0000000000000092,0x000000000000128f9,0x0000000000000000,0x0020a000000000000,0x0000000000000080,0x00000000000012900},
+ { 0x000000000000001a,0x00001c28216f21b46,0x000000000004ae73,0x00000647e473b4d52,0x0000000000000000,0x00001c30000000000,0x0000000000000000,0x00000648000000000},
+ { 0x000000000001bff0,0x00002e8374fac235d,0x00000000003fd0b1,0x0000000010cb415d5,0x0000000000000000,0x00002e90000000000,0x0000000000000000,0x0000000010d000000},
+ { 0x0000000000000015,0x0001a873e02aea7d9,0x0000000003081fb3,0x00000004383536e32,0x0000000000000000,0x0001a880000000000,0x0000000000000000,0x000000043a0000000},
+ { 0x000000000000002b,0x0001f7f945ba05c32,0x000000000a6551bb,0x000020deb8166e54f,0x0000000000000000,0x0001f800000000000,0x0000000000000000,0x000020e0000000000},
+ { 0x000000000000026b,0x001078f2c4c91014d,0x000000000017f626,0x0005476d335e3a0da,0x0000000000000000,0x00108000000000000,0x0000000000000000,0x00054800000000000},
+ { 0x0000000000000064,0x00cfad53e6733263c,0x00008aaa78ba994b,0x00262bea757c09729,0x0000000000000000,0x00cfc000000000000,0x0000000000000000,0x00263000000000000},
+ { 0x0000000000000ff8,0x00eed61c55fe97433,0x0000000000003046,0x000258be660d64fb9,0x0000000000000000,0x00ef0000000000000,0x0000000000000000,0x00025900000000000},
+ { 0x0000000000000004,0x000f854eb869c5758,0x000000000006e261,0x00000036f56f617e5,0x0000000000000000,0x000f8800000000000,0x0000000000000000,0x00000037000000000},
+ { 0x0000000000000002,0x0000000ecc2d5b6e2,0x000000000000000b,0x0000000000003e734,0x0000000000000000,0x0000000ed00000000,0x0000000000000000,0x0000000000003e800},
+ { 0x0000000000012830,0x0000582423a7baa64,0x0000000006576230,0x000000011a4033bdd,0x0000000000000000,0x00005840000000000,0x0000000000000000,0x000000011a8000000},
+ { 0x000000000196fdc9,0x04f0ddc60928c7b19,0x0000002db441687d,0x000024f5b0af7883f,0x0000000000000000,0x04f20000000000000,0x0000000000000000,0x00002500000000000},
+ { 0x00000000000008dc,0x000006cf7d6792c64,0x00000000000033ae,0x0000019405b958f5f,0x0000000000000000,0x000006d0000000000,0x0000000000000000,0x00000194800000000},
+ { 0x00000000000706b7,0x000bd4f159a7e71b9,0x0000000000b51ace,0x00001291b54076458,0x0000000000000000,0x000bd800000000000,0x0000000000000000,0x00001298000000000},
+ { 0x00000000000000f7,0x000000000253965a7,0x0000000000000304,0x00000000000007034,0x0000000000000000,0x00000000025400000,0x0000000000000300,0x00000000000007040},
+ { 0x00000000000eb11f,0x000297e3215554f31,0x00000b7f212e6ee2,0x0001bd7c90a136d55,0x0000000000000000,0x00029800000000000,0x0000080000000000,0x0001bd80000000000},
+ { 0x000000000009ef17,0x0000001605a7def3f,0x00000018a468977e,0x0000000450c6d8f02,0x0000000000000000,0x00000016080000000,0x00000018a0000000,0x00000004510000000},
+ { 0x000000000000003f,0x0028239ff18d23ddf,0x0000000000006a9b,0x0000000000000cac6,0x0000000000000000,0x00283000000000000,0x0000000000006a80,0x0000000000000cae0},
+ { 0x000000000006b2b2,0x02a02a97a1ebf33fa,0x00001394efaaa755,0x000ddec6d73cc149b,0x0000000000000000,0x02a10000000000000,0x0000000000000000,0x000de000000000000},
+ { 0x0000000000000029,0x000003bd0c9e11ec9,0x000007a99e0eac7b,0x000003acd82a669c7,0x0000000000000000,0x000003be000000000,0x000007a000000000,0x000003ad000000000},
+ { 0x0000000000000c28,0x0000727e3bb6037c9,0x00000000016188b7,0x000000000d7d180fe,0x0000000000000000,0x00007280000000000,0x0000000001400000,0x000000000d8000000},
+ { 0x00000000000004db,0x02fccf4ca59272f15,0x00000002d8544e4a,0x00751f30570e2b2a7,0x0000000000000000,0x02fd0000000000000,0x0000000000000000,0x00752000000000000},
+ { 0x00000000000f32cc,0x0039b42bf505dd1b9,0x0000000001d42e9f,0x002f64fb55538c2bd,0x0000000000000000,0x0039c000000000000,0x0000000000000000,0x002f7000000000000},
+ { 0x0000000000000ff9,0x00003e3e6ed465a72,0x0000000000001a82,0x00000d954df0b06ad,0x0000000000000000,0x00003e40000000000,0x0000000000000000,0x00000d98000000000},
+ { 0x0000000000000007,0x00000004abf3b9083,0x0000000000000011,0x00000000000000052,0x0000000000000000,0x00000004ac0000000,0x0000000000000011,0x00000000000000052},
+ { 0x000000000000cfd9,0x000000ae8eb3d4296,0x00000000055844ba,0x00000014f4966036a,0x0000000000000000,0x000000aec00000000,0x0000000000000000,0x00000014f80000000},
+ { 0x00000000000008c2,0x000598a1670fff6a8,0x000000000941fb3f,0x00003931c606f1173,0x0000000000000000,0x00059a00000000000,0x0000000000000000,0x00003940000000000},
+ { 0x000000000382f29f,0x00000602a253da189,0x00000001b7bc902f,0x000000003cd19849e,0x0000000000000000,0x00000604000000000,0x00000001b7000000,0x000000003ce000000},
+ { 0x0000000000000005,0x00001104fcf313244,0x00000000000a04da,0x000003f3747ce80eb,0x0000000000000000,0x00001108000000000,0x0000000000000000,0x000003f4000000000},
+ { 0x0000000000000003,0x0b36417d7dd10e74d,0x000000000000001d,0x00000000000000087,0x0000000000000000,0x0b380000000000000,0x000000000000001d,0x00000000000000087},
+ { 0x0000000000005caa,0x000c69d8bdd24a483,0x00000032cd7829d0,0x000000038c52e8d96,0x0000000000000000,0x000c6c00000000000,0x00000032cc000000,0x000000038c6000000},
+ { 0x000000000000000d,0x0054d7e23ffc96dc0,0x000000005563fa34,0x0000001b59aac0d08,0x0000000000000000,0x0054e000000000000,0x0000000000000000,0x0000001b600000000},
+ { 0x0000000000000935,0x00000075731da6d51,0x000000378012d031,0x00000034bec590d91,0x0000000000000000,0x00000075800000000,0x0000003700000000,0x00000034c00000000},
+ { 0x0000000000009698,0x0001c7d1e4fca2f2d,0x00000000013a757f,0x00000000bb27b05a5,0x0000000000000000,0x0001c800000000000,0x0000000000000000,0x00000000bb4000000},
+ { 0x0000000000000022,0x0000000000001d5fc,0x00000000000005c0,0x000000000000026b9,0x0000000000000000,0x0000000000001d600,0x00000000000005c0,0x000000000000026c0},
+ { 0x00000000000001f8,0x00348c78d0307db67,0x000000038f5e49fd,0x00000004cc32bac60,0x0000000000000000,0x00349000000000000,0x0000000380000000,0x00000004ce0000000},
+ { 0x00000000000051ec,0x0000001a8e324bd44,0x0000000000028473,0x0000000007e106b76,0x0000000000000000,0x0000001a900000000,0x0000000000000000,0x0000000007e200000},
+ { 0x0000000000000006,0x000000000001704b4,0x000000000000002d,0x00000000000000236,0x0000000000000000,0x00000000000170800,0x000000000000002d,0x00000000000000236},
+ { 0x0000000000000019,0x057f631a915c7a5d8,0x00000000000007d4,0x00000000007b3d1a1,0x0000000000000000,0x05800000000000000,0x0000000000000000,0x00000000007b40000},
+ { 0x000000000000a585,0x000072651f0a0c2b7,0x0000000000090884,0x00003767561eed361,0x0000000000000000,0x00007280000000000,0x0000000000000000,0x00003770000000000},
+ { 0x0000000000000007,0x07b684c538cc06abc,0x0000000000000d5f,0x0000000000223bbba,0x0000000000000000,0x07b80000000000000,0x0000000000000000,0x00000000002240000},
+ { 0x0000000000000000,0x00000000000aefcdf,0x00000000000000d8,0x000000000000044fb,0x0000000000000000,0x00000000000af0000,0x00000000000000c0,0x00000000000004500},
+ { 0x0000000000000005,0x000000000014a565f,0x000000000004be30,0x00000000000a28e5d,0x0000000000000000,0x000000000014a8000,0x0000000000048000,0x00000000000a2c000},
+ { 0x0000000000000001,0x001b2a283b9f973ef,0x0000000000000053,0x0000015d92f005770,0x0000000000000000,0x001b3000000000000,0x0000000000000000,0x0000015e000000000},
+ { 0x000000000000018b,0x0019f86b2ba2850f8,0x00003ccdf47825e4,0x00000c9bf9922e718,0x0000000000000000,0x001a0000000000000,0x00003cc000000000,0x00000c9c000000000},
+ { 0x00000000000003a3,0x03ab9a38581921ccd,0x000000006791abf4,0x0000000736a23bb96,0x0000000000000000,0x03ac0000000000000,0x0000000060000000,0x00000007380000000},
+ { 0x000000000000006d,0x00000016a96488784,0x00000000003572ef,0x000000000014deb16,0x0000000000000000,0x00000016b00000000,0x0000000000350000,0x000000000014e0000},
+ { 0x00000000053821e7,0x0000898f243c108d6,0x00000067ec5c433a,0x0000000c2e49ec9f7,0x0000000000000000,0x000089c0000000000,0x00000067e0000000,0x0000000c300000000},
+ { 0x0000000000000016,0x01c577322fe8619c8,0x0000000000000033,0x0000019ec12b8b1ac,0x0000000000000000,0x01c58000000000000,0x0000000000000000,0x0000019f000000000},
+ { 0x000000000000000f,0x079f8c2dfea406f44,0x000000000000124a,0x000000bfbbce084fa,0x0000000000000000,0x07a00000000000000,0x0000000000000000,0x000000bfc00000000},
+ { 0x000000284d9f9934,0x0036e318b61a85eff,0x00000ded1817ee97,0x000a45717c919cde7,0x0000000000000000,0x0036f000000000000,0x0000000000000000,0x000a4800000000000},
+ { 0x00000000944be6b1,0x00017d12fef0d2f40,0x000000165159b4d6,0x0000001e1b3a0a1d6,0x0000000000000000,0x00017d80000000000,0x0000001600000000,0x0000001e200000000},
+ { 0x00000000000002f5,0x00000000018079a6f,0x0000000000001187,0x0000000000006e9b9,0x0000000000000000,0x00000000018080000,0x0000000000001000,0x0000000000006ea00},
+ { 0x0000000000017d8e,0x0003c3952fcbfe19b,0x0000000002fa375d,0x00000020cc2a630fb,0x0000000000000000,0x0003c400000000000,0x0000000000000000,0x00000020d00000000},
+ { 0x0000000000005387,0x000001ef554b6911f,0x000000000029d4cc,0x0000017ad93c3a24f,0x0000000000000000,0x000001ef800000000,0x0000000000000000,0x0000017b000000000},
+ { 0x0000000000000e99,0x0323a69ca700cfeaa,0x0000000000de3093,0x00008937fc1f2ec70,0x0000000000000000,0x03240000000000000,0x0000000000000000,0x00008940000000000},
+ { 0x0000000000000167,0x0000568e07e58ce99,0x000000000000025b,0x00000683425d1f520,0x0000000000000000,0x000056a0000000000,0x0000000000000000,0x00000684000000000},
+ { 0x0000000000000078,0x00000000e69627605,0x0000000000000782,0x00000000000001a99,0x0000000000000000,0x00000000e6c000000,0x0000000000000780,0x00000000000001aa0},
+ { 0x0000000001f7b8a7,0x001e214d92001a46e,0x0000000005deae75,0x00000000ffdf45ee1,0x0000000000000000,0x001e2800000000000,0x0000000004000000,0x00000001000000000},
+ { 0x000000004ab8bb46,0x068ffa072820f530e,0x00007108770903dc,0x000071ddd66beb25e,0x0000000000000000,0x06900000000000000,0x0000700000000000,0x000071e0000000000},
+ { 0x0000000000000003,0x000001c972d917678,0x000000000006b9ca,0x000000000035776a4,0x0000000000000000,0x000001c9800000000,0x0000000000060000,0x00000000003580000},
+ { 0x00000000000022e3,0x000000002dca4481d,0x000000000019b81b,0x00000000158b94001,0x0000000000000000,0x000000002dd000000,0x0000000000000000,0x00000000159000000},
+ { 0x000000000000000a,0x000172745a7147e18,0x000000003332c3ef,0x000000001a3f01be8,0x0000000000000000,0x00017280000000000,0x0000000033000000,0x000000001a4000000},
+ { 0x00000000000012d6,0x01690873a8fc20b36,0x000000000000e4ae,0x000000000e19d1913,0x0000000000000000,0x01698000000000000,0x0000000000000000,0x000000000e1c00000},
+ { 0x00000000001d50f0,0x0002cf661640f1db1,0x0000000018ea28ae,0x000000001c33b2b4c,0x0000000000000000,0x0002d000000000000,0x0000000018800000,0x000000001c3800000},
+ { 0x0000000000000e6a,0x0663972d2c4723f28,0x0000000007fb17f2,0x0000019ccaf7f1836,0x0000000000000000,0x06640000000000000,0x0000000000000000,0x0000019d000000000},
+ { 0x000000000004dfdc,0x0000000002543c92c,0x000000000241fcd0,0x00000000007b5b1c5,0x0000000000000000,0x00000000025500000,0x0000000002400000,0x00000000007b60000},
+ { 0x000000000038c948,0x0000000081d1c5102,0x000000000c70de33,0x0000000002ff3a35e,0x0000000000000000,0x00000000820000000,0x000000000c700000,0x00000000030000000},
+ { 0x0000000d92d0030f,0x00078cad1c87267fa,0x0000002c677c2bbb,0x000000361546ea4f4,0x0000000000000000,0x00078e00000000000,0x0000002c00000000,0x00000036200000000},
+ { 0x000000000000000b,0x00000053b95d7003a,0x000000000000002f,0x00000000001a8bf29,0x0000000000000000,0x00000053c00000000,0x0000000000000000,0x00000000001a90000},
+ { 0x0000000000000e38,0x0000031c28c30bde9,0x00000000002ce114,0x0000000000167a31e,0x0000000000000000,0x0000031d000000000,0x00000000002c8000,0x00000000001680000},
+ { 0x0000000000028cc2,0x000000012c63dda49,0x000000000475c5ee,0x000000000077ecd7f,0x0000000000000000,0x000000012c8000000,0x0000000004750000,0x000000000077f0000},
+ { 0x00000000000015c9,0x000877c17fb130cac,0x000000000015d739,0x0007a5edf918bb2d9,0x0000000000000000,0x00087800000000000,0x0000000000000000,0x0007a600000000000},
+ { 0x0000000000074875,0x03393e831c10dee91,0x0000000024f641c6,0x000000001757e7e90,0x0000000000000000,0x033a0000000000000,0x0000000024800000,0x00000000175800000},
+ { 0x0000000000008c41,0x002d2cb5850e37bc2,0x000000000018fb34,0x0000000007f8f3495,0x0000000000000000,0x002d3000000000000,0x0000000000000000,0x0000000007fa00000},
+ { 0x00000000000000c6,0x00a16e298734caa69,0x00000000001ab034,0x0000000004adae432,0x0000000000000000,0x00a18000000000000,0x0000000000000000,0x0000000004ae00000},
+ { 0x0000000000003bdb,0x0007fa6ede66bf433,0x0000000616de7cf5,0x000000008de043a58,0x0000000000000000,0x0007fc00000000000,0x0000000616000000,0x000000008df000000},
+ { 0x0000000000083744,0x000000300bc68cc1e,0x00000006703c236c,0x0000001c206cd3401,0x0000000000000000,0x00000030100000000,0x0000000600000000,0x0000001c280000000},
+ { 0x000000000000000c,0x06ae8e7f48a7711fa,0x00000f0251b2232c,0x00540ff2115acdc0b,0x0000000000000000,0x06b00000000000000,0x0000000000000000,0x00542000000000000},
+ { 0x0000000000000004,0x0001ff2e1f8ab009a,0x0000000000000030,0x0000000003de736b0,0x0000000000000000,0x0001ff80000000000,0x0000000000000000,0x0000000003df00000},
+ { 0x00000000000000c7,0x00000000ee93ac686,0x000000000000e9a3,0x000000000ff7c7a0e,0x0000000000000000,0x00000000eec000000,0x0000000000000000,0x000000000ff800000},
+ { 0x000000000000000d,0x001a67ffca8822eca,0x000000000000007b,0x000002e072edc60a8,0x0000000000000000,0x001a6800000000000,0x0000000000000000,0x000002e1000000000},
+ { 0x00000084eec93120,0x0002e31f0c4d0ccd0,0x0001e706d246287c,0x00001e8da933f34f7,0x0000000000000000,0x0002e400000000000,0x0001e70680000000,0x00001e8db00000000},
+ { 0x000000000000002a,0x00000000e19029b44,0x0000000000000042,0x000000000b22dbb3a,0x0000000000000000,0x00000000e1c000000,0x0000000000000000,0x000000000b2400000},
+ { 0x00000000000035ff,0x01fa9cdc3a2594ff7,0x000000000001ddb5,0x0000000002dbdd34d,0x0000000000000000,0x01fb0000000000000,0x0000000000000000,0x0000000002dc00000},
+ { 0x000000000000125c,0x000001e2a28e68a54,0x000000000002f9ea,0x0000000000c5cccdf,0x0000000000000000,0x000001e3000000000,0x0000000000000000,0x0000000000c600000},
+ { 0x0000000000001c05,0x000000000e16d438c,0x0000000000009d53,0x000000000007d7cf6,0x0000000000000000,0x000000000e1800000,0x0000000000008000,0x000000000007d8000},
+ { 0x000000000000b821,0x002887bf12799b0ca,0x00000015529ec788,0x00005b5d6124500a7,0x0000000000000000,0x00289000000000000,0x0000000000000000,0x00005b60000000000},
+ { 0x0000000000003b0f,0x000000c997149731c,0x0000000006dd96dc,0x00000037cd4e573d5,0x0000000000000000,0x000000c9c00000000,0x0000000000000000,0x00000037d00000000},
+ { 0x0000000000000144,0x00000356f8971daa6,0x0000000000001cd3,0x0000003307fa8d980,0x0000000000000000,0x00000357000000000,0x0000000000000000,0x00000033100000000},
+ { 0x000000000005e769,0x01846da5209a0e9bb,0x003276e9fd29fff3,0x002e6520f6158cd34,0x0000000000000000,0x01848000000000000,0x0032000000000000,0x002e7000000000000},
+ { 0x0000000000899d0e,0x0003030087de47596,0x0000003e7efe0260,0x000000107015d0cef,0x0000000000000000,0x00030400000000000,0x0000003e40000000,0x00000010740000000},
+ { 0x000000000002a3a5,0x00000007b57d50354,0x000000000064e498,0x000000000317cd4fe,0x0000000000000000,0x00000007b60000000,0x0000000000600000,0x00000000031800000},
+ { 0x000000000e007d83,0x0061d30f1d62405cc,0x000003c6a8a0a53d,0x00338f9ca519f4c7c,0x0000000000000000,0x0061e000000000000,0x0000000000000000,0x00339000000000000},
+ { 0x0000000000000024,0x000000e2b6c83884d,0x0000000000000da4,0x000000138fdedc6a8,0x0000000000000000,0x000000e2c00000000,0x0000000000000000,0x00000013900000000},
+ { 0x0000000000486ec4,0x0002d3791be31c7cc,0x000000015d54e668,0x000000d10d7add38d,0x0000000000000000,0x0002d400000000000,0x0000000000000000,0x000000d1400000000},
+ { 0x000000000000006a,0x00017b9cf9e824313,0x000000000010a280,0x00000000000c39aef,0x0000000000000000,0x00017c00000000000,0x0000000000108000,0x00000000000c3c000},
+ { 0x0000000000003ebb,0x000001a2b11f4d8d8,0x000000000007650a,0x0000000000b44342d,0x0000000000000000,0x000001a3000000000,0x0000000000040000,0x0000000000b480000},
+ { 0x0000000000000e3a,0x000135818803d5a70,0x0000000000015ef4,0x0000000001446d3a0,0x0000000000000000,0x00013600000000000,0x0000000000000000,0x00000000014480000},
+ { 0x00000000002f29cb,0x0000000ba80bf9d84,0x00000010f349bc3c,0x000000084ae050f86,0x0000000000000000,0x0000000bac0000000,0x00000010e0000000,0x000000084c0000000},
+ { 0x0000000000000000,0x000000299d68baa0e,0x0000000000000036,0x00000000098548247,0x0000000000000000,0x00000029a00000000,0x0000000000000000,0x00000000098800000},
+ { 0x0000000023b5b8ad,0x0000009977cb34251,0x000000e837067262,0x000000178e078d557,0x0000000000000000,0x00000099800000000,0x000000e800000000,0x00000017900000000},
+ { 0x000000000000006a,0x0007fc0a61977beb8,0x0001d75804a4970c,0x000031519fc2f6ec0,0x0000000000000000,0x0007fe00000000000,0x0001d70000000000,0x00003158000000000},
+ { 0x00000a00df1757de,0x021897c6070780a4b,0x00000aadafe6b2d8,0x00006db938050e7b3,0x0000000000000000,0x02190000000000000,0x00000a0000000000,0x00006dc0000000000},
+ { 0x00000000000007b1,0x005a71ddeb88ec8fc,0x0000000000171bef,0x0000000257ec17ece,0x0000000000000000,0x005a8000000000000,0x0000000000000000,0x00000002580000000},
+ { 0x000000000000f56a,0x00017de0bf2a3f55e,0x0000000000184ec4,0x0000000014425fa75,0x0000000000000000,0x00017e00000000000,0x0000000000000000,0x00000000144800000},
+ { 0x0000000000000007,0x0127898dff1364e0e,0x000000000001d2b4,0x00000000ef684e3da,0x0000000000000000,0x01280000000000000,0x0000000000000000,0x00000000ef8000000},
+ { 0x00000000000006ef,0x000000000057787b1,0x0000000003c1058a,0x00000000003c276ef,0x0000000000000000,0x00000000005780000,0x0000000003c10580,0x00000000003c27700},
+ { 0x000000000000181c,0x000216830d83cc1fb,0x00000000000d0c72,0x00000040aa83b8197,0x0000000000000000,0x00021700000000000,0x0000000000000000,0x00000040c00000000},
+ { 0x0000000000000003,0x000e6979335d1524c,0x0000000000000292,0x0000000003ab8e640,0x0000000000000000,0x000e6c00000000000,0x0000000000000000,0x0000000003ac00000},
+ { 0x0000000000000007,0x0000000f033055924,0x0000000000000ad2,0x00000000000002e5a,0x0000000000000000,0x0000000f040000000,0x0000000000000ad0,0x00000000000002e60},
+ { 0x0000000000000003,0x000cedd75f1f3ad79,0x00000000001e019d,0x0000147373ab69242,0x0000000000000000,0x000cf000000000000,0x0000000000000000,0x00001478000000000},
+ { 0x0000000000002ed6,0x00003b960d1b18221,0x0000000117231ea9,0x00000000388c2302e,0x0000000000000000,0x00003ba0000000000,0x0000000117000000,0x00000000389000000},
+ { 0x00000002f4c64c2d,0x0000127f1c0025a40,0x000000066f97b08b,0x000000065a0e554f6,0x0000000000000000,0x00001280000000000,0x0000000660000000,0x000000065c0000000},
+ { 0x000000000443a8f2,0x00461b32b2dda6e88,0x0000038aae9e185e,0x0000065ef34d38fb6,0x0000000000000000,0x00462000000000000,0x0000038000000000,0x00000660000000000},
+ { 0x0000000008cf334e,0x000062e47d078c5d2,0x0000029eddd9478b,0x000031006733ae0b2,0x0000000000000000,0x00006300000000000,0x0000020000000000,0x00003110000000000},
+ { 0x00000000000003cd,0x0479fcc380cc1a05f,0x000000f813c44ba2,0x000002dd5bb477e8f,0x0000000000000000,0x047a0000000000000,0x000000f000000000,0x000002de000000000},
+ { 0x0000000000000569,0x00070a22d3d574886,0x00000000000047ed,0x00000000465c7608f,0x0000000000000000,0x00070c00000000000,0x0000000000000000,0x00000000466000000},
+ { 0x00000000000154f2,0x0001bddb9ac30fd0d,0x000000000014f6d8,0x00003415401cc6b4c,0x0000000000000000,0x0001be00000000000,0x0000000000000000,0x00003420000000000},
+ { 0x000000000000007b,0x00034db0bbdd25acc,0x00000000a331ef5a,0x0000000037566b4dd,0x0000000000000000,0x00034e00000000000,0x00000000a3000000,0x00000000376000000},
+ { 0x000000000000001f,0x076a89c605c55dc1b,0x000000000000003f,0x0000005b761287034,0x0000000000000000,0x076c0000000000000,0x0000000000000000,0x0000005b800000000},
+ { 0x000000000000000e,0x00003c184f2885439,0x000000001f94bcf8,0x00000004c11499a56,0x0000000000000000,0x00003c20000000000,0x0000000000000000,0x00000004c20000000},
+ { 0x0000000000043b53,0x000263fcb36203786,0x000002546860f394,0x000007efdc63547d2,0x0000000000000000,0x00026400000000000,0x0000024000000000,0x000007f0000000000},
+ { 0x000000000000001d,0x0000000000000181b,0x00000000000002c8,0x00000000000000bb3,0x0000000000000018,0x00000000000001820,0x00000000000002c8,0x00000000000000bb3},
+ { 0x000000007c43b1ea,0x0048068949d783c99,0x0031c5a7b3fab80b,0x001381043b1ed7a5e,0x0000000000000000,0x00482000000000000,0x0031800000000000,0x00138800000000000},
+ { 0x0000000000000004,0x000000000001ee804,0x0000000000011409,0x000000000000b1b27,0x0000000000000000,0x000000000001ef000,0x0000000000011400,0x000000000000b1c00},
+ { 0x0000000000000009,0x0000001ba3f602477,0x0000000000030a04,0x00000000074b37ec5,0x0000000000000000,0x0000001ba80000000,0x0000000000000000,0x00000000074c00000},
+ { 0x0000000000000070,0x00000f3d6d3966acb,0x00000000911ef5f8,0x000000076b0cde958,0x0000000000000000,0x00000f40000000000,0x0000000080000000,0x000000076c0000000},
+ { 0x00000000000001e8,0x09b6d1408dd13d5f3,0x001845356a3abe0d,0x00020aa88137fac88,0x0000000000000000,0x09b80000000000000,0x0018440000000000,0x00020ac0000000000},
+ { 0x0000000000000002,0x011e71f4fedafad38,0x0000000000000656,0x0000000000011dca8,0x0000000000000000,0x011e8000000000000,0x0000000000000000,0x0000000000011e000},
+ { 0x0000000000000014,0x003341ede2caadbd9,0x00000000000693de,0x00000c2712f89491d,0x0000000000000000,0x00335000000000000,0x0000000000000000,0x00000c28000000000},
+ { 0x0000000000000763,0x02bdeda5548396d9e,0x000000000000093e,0x00000000000139426,0x0000000000000000,0x02be0000000000000,0x0000000000000800,0x00000000000139800},
+ { 0x0000000000000002,0x000000009be1d4367,0x000000000000000b,0x0000000000b9bf1e4,0x0000000000000000,0x000000009c0000000,0x0000000000000000,0x0000000000b9c0000},
+ { 0x000000000000030b,0x0296720cd490a2b85,0x00000000000003e7,0x0000000000040f5fc,0x0000000000000000,0x02970000000000000,0x0000000000000000,0x00000000000410000},
+ { 0x000000000000d083,0x000103471e330e916,0x0000000000169787,0x000000000081d3ef6,0x0000000000000000,0x00010380000000000,0x0000000000140000,0x00000000008200000},
+ { 0x000000000000000f,0x0000012e72f7b8d6f,0x000000000000057e,0x00000000654dde347,0x0000000000000000,0x0000012e800000000,0x0000000000000000,0x00000000656000000},
+ { 0x0000000000000274,0x00230d081cb5a8eb4,0x000019b20a14deef,0x000f0c0b04b108757,0x0000000000000000,0x00231000000000000,0x0000000000000000,0x000f1000000000000},
+ { 0x0000000000000010,0x0000002d1a09dd97a,0x0000001a6687548b,0x00000009bad5316de,0x0000000000000000,0x0000002d200000000,0x0000001a40000000,0x00000009bc0000000},
+ { 0x0000000000000062,0x00049497fd41599bf,0x00000000048d8d8f,0x0000000000d5bf987,0x0000000000000000,0x00049600000000000,0x00000000048c0000,0x0000000000d5c0000},
+ { 0x0000000006527d78,0x00001fb9d6e70b70c,0x0000006314cd8e18,0x0000069ce6ed857e7,0x0000000000000000,0x00001fc0000000000,0x0000006000000000,0x0000069e000000000},
+ { 0x00000004361a218b,0x091eaadf0e62f0633,0x002ac3a4f448d03f,0x010e3efbf78214b1c,0x0000000000000000,0x09200000000000000,0x0028000000000000,0x010e8000000000000},
+ { 0x0000000000000019,0x07eac0953aebb4e86,0x000000000000007e,0x000022e60dcbb4183,0x0000000000000000,0x07ec0000000000000,0x0000000000000000,0x000022f0000000000},
+ { 0x0000000000000424,0x000000dc2123e316b,0x00000000001a0177,0x000000000003961b2,0x0000000000000000,0x000000dc400000000,0x00000000001a0000,0x00000000000396800},
+ { 0x0000000000bd7a24,0x00001f32a9e4487fc,0x0000001581595b76,0x00000019079ce8134,0x0000000000000000,0x00001f38000000000,0x0000001580000000,0x00000019080000000},
+ { 0x0000000000007583,0x000362bf4e019becb,0x0000000011869798,0x000001d866dc34808,0x0000000000000000,0x00036300000000000,0x0000000000000000,0x000001d8800000000},
+ { 0x00000000000093f6,0x000000423c845f6da,0x000000001a8b0737,0x0000000002b5713bd,0x0000000000000000,0x00000042400000000,0x000000001a880000,0x0000000002b580000},
+ { 0x0000000001b17d16,0x0000ce4662cc88a88,0x0000000022285a12,0x00001a79eda4829da,0x0000000000000000,0x0000ce80000000000,0x0000000000000000,0x00001a80000000000},
+ { 0x0000000000000001,0x0a16a4854d9e9e0e2,0x0000000000000070,0x00000000653fca9d9,0x0000000000000000,0x0a180000000000000,0x0000000000000000,0x00000000654000000},
+ { 0x0000000000000007,0x0000000001e46e798,0x0000000000000f00,0x00000000000003304,0x0000000000000000,0x0000000001e480000,0x0000000000000f00,0x00000000000003310},
+ { 0x0000000000000037,0x000d7546b64a57628,0x00000000000e9479,0x00000000786729a63,0x0000000000000000,0x000d7800000000000,0x0000000000000000,0x00000000788000000},
+ { 0x00000000b6aece2d,0x00042f7514dc349bf,0x0000000271af583a,0x00000000703c8fdd2,0x0000000000000000,0x00043000000000000,0x0000000270000000,0x00000000704000000},
+ { 0x000000000000000c,0x00000000003f8e61e,0x000000000000000d,0x0000000000000030f,0x0000000000000000,0x00000000003f90000,0x000000000000000d,0x0000000000000030f},
+ { 0x00000000000000da,0x0002993e1ab12513c,0x0000001e81738d7c,0x00000067f17e0515b,0x0000000000000000,0x00029a00000000000,0x0000001e00000000,0x00000068000000000},
+ { 0x000000000000042e,0x000534c8a08d3cb25,0x00000bc3eb10e6b0,0x000000bd55680046e,0x0000000000000000,0x00053600000000000,0x00000bc3e8000000,0x000000bd558000000},
+ { 0x0000000000000022,0x0000006d3ea638beb,0x000000000001168a,0x000000020101bda7f,0x0000000000000000,0x0000006d400000000,0x0000000000000000,0x00000002020000000},
+ { 0x000000000000063d,0x00002b4e4f553bf71,0x0000002b3b6cd81f,0x00000d1fbf7272839,0x0000000000000000,0x00002b50000000000,0x0000000000000000,0x00000d20000000000},
+ { 0x0000000000000005,0x01013e5862639315c,0x000000003df14657,0x00000003e238f9e76,0x0000000000000000,0x01018000000000000,0x0000000030000000,0x00000003e30000000},
+ { 0x000000000000001d,0x00000021e8c90a78b,0x00000000069c2caa,0x00000001698995ea7,0x0000000000000000,0x00000021f00000000,0x0000000000000000,0x000000016a0000000},
+ { 0x0000000000000004,0x007af305e5b20db5d,0x00000000000161b4,0x000000000b68e9c10,0x0000000000000000,0x007b0000000000000,0x0000000000000000,0x000000000b6c00000},
+ { 0x00000000468d8feb,0x007fed7563c4b56f8,0x000000017e39e5ae,0x00000328dc7252bf8,0x0000000000000000,0x00800000000000000,0x0000000000000000,0x00000329000000000},
+ { 0x0000000000000004,0x0001465830ef24b3a,0x000000000021e22f,0x0000002e916bd2e61,0x0000000000000000,0x00014680000000000,0x0000000000000000,0x0000002ea00000000},
+ { 0x00000000000271d7,0x0004ba87501a64446,0x000000000c823509,0x00000007de72a6960,0x0000000000000000,0x0004bc00000000000,0x0000000000000000,0x00000007e00000000},
+ { 0x000000000179eba8,0x00070b697717df7ca,0x0000000012dd31f2,0x00011924f9bcb2e0b,0x0000000000000000,0x00070c00000000000,0x0000000000000000,0x00011980000000000},
+ { 0x0000000000001caa,0x00000538911849924,0x00000000002bcd83,0x0000001140b383c25,0x0000000000000000,0x0000053a000000000,0x0000000000000000,0x00000011480000000},
+ { 0x00000000000000bb,0x019b5da8f5b963575,0x008fe1539347cc1a,0x001cf1bfe439a5100,0x0000000000000000,0x019b8000000000000,0x008f800000000000,0x001cf800000000000},
+ { 0x0000000000000108,0x00ecf1c60133ce2a7,0x0000007fb2dbed12,0x0000001bc780be951,0x0000000000000000,0x00ed0000000000000,0x0000007f80000000,0x0000001bc80000000},
+ { 0x0000000000003c81,0x0000bc8e5272507af,0x0000001929f7fb44,0x000000de8541739e3,0x0000000000000000,0x0000bcc0000000000,0x0000001800000000,0x000000dec00000000},
+ { 0x00000051bd8ef6fb,0x003f80306d00b107c,0x0008720f3a8fb99a,0x0007f4c20618b85e5,0x0000000000000000,0x003f9000000000000,0x0008600000000000,0x0007f600000000000},
+ { 0x000000000000006d,0x005aade289a47cd6a,0x00000000000005cf,0x00000010b23a1b90a,0x0000000000000000,0x005ac000000000000,0x0000000000000000,0x00000010b80000000},
+ { 0x0000000003533fdc,0x000001b0fe7ef648e,0x0000000004f0bbde,0x000000000fd54c5c4,0x0000000000000000,0x000001b1000000000,0x0000000004c00000,0x000000000fd800000},
+ { 0x000000000003f076,0x0037beeb63cefe2c5,0x0000000000e63ab5,0x00000000002f2e405,0x0000000000000000,0x0037c000000000000,0x0000000000e60000,0x00000000002f30000},
+ { 0x0000000000000001,0x00004119211bdd299,0x000000000000de81,0x0000000006b4de323,0x0000000000000000,0x00004120000000000,0x0000000000000000,0x0000000006b600000},
+ { 0x000000000066e264,0x00cd3b7e0a9513d71,0x000003191d8c65d2,0x002bf9c59e7ae4c88,0x0000000000000000,0x00cd4000000000000,0x0000000000000000,0x002c0000000000000},
+ { 0x00000000672ed94b,0x03fff8e3ab4f43b36,0x0000016b7f4bfb89,0x000016fff0f5ed5d2,0x0000000000000000,0x04000000000000000,0x0000010000000000,0x00001700000000000},
+ { 0x000000000000001c,0x0000000018ee1f2f5,0x0000000000004cd8,0x0000000000002cb8a,0x0000000000000000,0x0000000018f000000,0x0000000000004c00,0x0000000000002cc00},
+ { 0x000000000000000a,0x00000020e05173547,0x00000000000000ef,0x00000000006969ca4,0x0000000000000000,0x00000020f00000000,0x0000000000000000,0x00000000006980000},
+ { 0x00000000000002f2,0x000001fd2cc81d27d,0x000000000ea93686,0x00000001335879f9f,0x0000000000000000,0x000001fd800000000,0x0000000008000000,0x00000001338000000},
+ { 0x00000000038f0bf8,0x004951fc7ecceba46,0x0000001b0e897bea,0x000007328563c39db,0x0000000000000000,0x00496000000000000,0x0000000000000000,0x00000734000000000},
+ { 0x0000000000000006,0x0455fe8ffd2f405c6,0x0000000000052174,0x00000000f916413df,0x0000000000000000,0x04560000000000000,0x0000000000000000,0x00000000f94000000},
+ { 0x0000000000000003,0x000003f315c0c646f,0x0000000000001460,0x0000000000362bc36,0x0000000000000000,0x000003f4000000000,0x0000000000000000,0x00000000003630000},
+ { 0x0000000000210141,0x00010f9e6cac0a22c,0x00000000005fc69a,0x0000000022725de50,0x0000000000000000,0x00011000000000000,0x0000000000000000,0x00000000228000000},
+ { 0x0000000000255efe,0x00000ae56f98bcbfe,0x00000000081406c0,0x0000000109d3236f2,0x0000000000000000,0x00000ae8000000000,0x0000000008000000,0x000000010a0000000},
+ { 0x000001c319122089,0x01f192279f66fa723,0x0078e7dfa5072b1c,0x00090b462f2744009,0x0000000000000000,0x01f20000000000000,0x0078e00000000000,0x00090b80000000000},
+ { 0x000000000000007a,0x000000013cb73cda8,0x000000000000026c,0x0000000000168cfc8,0x0000000000000000,0x000000013d0000000,0x0000000000000000,0x00000000001690000},
+ { 0x00000000000179c3,0x01ccedcb9fb01afd2,0x00000000033a02a8,0x0000000007a28c1ff,0x0000000000000000,0x01cd0000000000000,0x0000000003200000,0x0000000007a400000},
+ { 0x0000000000000036,0x00de4531eac45270c,0x0001394391dfbeee,0x0038cb635afd3ee69,0x0000000000000000,0x00de8000000000000,0x0001000000000000,0x0038d000000000000},
+ { 0x0000000000000000,0x060fb9c707927f098,0x0000000000000002,0x0000901c736cbcca5,0x0000000000000000,0x06100000000000000,0x0000000000000000,0x00009040000000000},
+ { 0x0000000000000b80,0x000900eb9b8217afe,0x0000000000142fc6,0x000000000007d7fae,0x0000000000000000,0x00090400000000000,0x0000000000142000,0x000000000007d8000},
+ { 0x00000014d90ede3a,0x00023ce8e1d03b81a,0x0000002478811fa7,0x0000846d117d5cfcc,0x0000000000000000,0x00023d00000000000,0x0000000000000000,0x00008480000000000},
+ { 0x00000000000051d8,0x07b1f3f5429cba890,0x000000000005d114,0x001a1c082b737c5c6,0x0000000000000000,0x07b20000000000000,0x0000000000000000,0x001a2000000000000},
+ { 0x0000000000003815,0x000000012239b6de8,0x000000000001e4cd,0x00000000000e2318f,0x0000000000000000,0x00000001228000000,0x000000000001c000,0x00000000000e24000},
+ { 0x00000000000018d0,0x00ff44b9cf34343c2,0x000000126d5160ae,0x000039e43c0e3ef0f,0x0000000000000000,0x00ff8000000000000,0x0000000000000000,0x000039f0000000000},
+ { 0x0000000000000019,0x00000ca2e62fddf58,0x0000000000000912,0x0000001947fe4a320,0x0000000000000000,0x00000ca4000000000,0x0000000000000000,0x00000019480000000},
+ { 0x000000000ff3eec3,0x00982efa3479e6fdf,0x0000000d3fa961ac,0x002b17c2743b9c6dc,0x0000000000000000,0x00984000000000000,0x0000000000000000,0x002b2000000000000},
+ { 0x0000000000000006,0x000725e998b26d103,0x0000000000ed8d45,0x0000000197881f184,0x0000000000000000,0x00072600000000000,0x0000000000000000,0x00000001980000000},
+ { 0x00000000000002af,0x0000000003f3d3b83,0x0000000000042f13,0x000000000001e2db7,0x0000000000000000,0x0000000003f400000,0x0000000000042800,0x000000000001e3000},
+ { 0x00000000000bce20,0x000005b004a73aa68,0x000000141a3daf7e,0x000000707fd000036,0x0000000000000000,0x000005b2000000000,0x0000001400000000,0x00000070800000000},
+ { 0x000000000000008b,0x014a6b795d7dd7143,0x000000000000066b,0x0000000135ca363ed,0x0000000000000000,0x014a8000000000000,0x0000000000000000,0x00000001360000000},
+ { 0x000000001faf2311,0x010f03dba9d31eaea,0x00000c389336dfe3,0x0000d0861aa780b3d,0x0000000000000000,0x010f8000000000000,0x00000c0000000000,0x0000d0c0000000000},
+ { 0x0000000000000003,0x07edecb7ba1d6f082,0x0000000000000131,0x00000000000bb0bb6,0x0000000000000000,0x07ee0000000000000,0x0000000000000000,0x00000000000bb4000},
+ { 0x00000000000009b8,0x000000023d2cd5270,0x00000000001d0977,0x00000000018d65d15,0x0000000000000000,0x000000023e0000000,0x0000000000180000,0x00000000018d80000},
+ { 0x0000000003c8a070,0x000000361dba05b21,0x0000000005be24fe,0x0000000121389ac3e,0x0000000000000000,0x00000036200000000,0x0000000000000000,0x00000001218000000},
+ { 0x00000000b2a3f432,0x007ca3143731804fc,0x002f32c11639aca8,0x0012880ece636e683,0x0000000000000000,0x007cc000000000000,0x002f000000000000,0x00128c00000000000},
+ { 0x0000000000000050,0x09f5df282acdaebe4,0x000000000000fe4a,0x0000000000002d494,0x0000000000000000,0x09f80000000000000,0x000000000000fe00,0x0000000000002d500},
+ { 0x0000003423576cc0,0x001d39a6d5fec0159,0x000000d7c564b915,0x00006dcf899ae1c03,0x0000000000000000,0x001d4000000000000,0x0000000000000000,0x00006de0000000000},
+ { 0x000000000000000a,0x0000046686d394052,0x00000000000000a8,0x000000000ac052159,0x0000000000000000,0x00000468000000000,0x0000000000000000,0x000000000ac400000},
+ { 0x0000000000000010,0x000000000001dc756,0x0000000000000072,0x000000000000b1465,0x0000000000000000,0x000000000001dc800,0x0000000000000000,0x000000000000b1800},
+ { 0x0000000000000265,0x009b0786be674ec67,0x0000000054b55c35,0x0000018a92a6fb03c,0x0000000000000000,0x009b4000000000000,0x0000000000000000,0x0000018b000000000},
+ { 0x000000000014b5f8,0x01221e82af4d344d3,0x0000000108229bb3,0x000000ae82a7f63f2,0x0000000000000000,0x01228000000000000,0x0000000000000000,0x000000aec00000000},
+ { 0x000000066c18248a,0x00062894a0288f6af,0x0000002f87e1ec7c,0x00000003b0a139923,0x0000000000000000,0x00062a00000000000,0x0000002f84000000,0x00000003b0c000000},
+ { 0x0000000000000aa9,0x0003c4fa9fba86d89,0x0000018b8c26bd88,0x0000007b7edd21640,0x0000000000000000,0x0003c500000000000,0x0000018a00000000,0x0000007b800000000},
+ { 0x000000000000241e,0x0000018f69bf937b3,0x00000000005012c8,0x000000b417fe5508e,0x0000000000000000,0x0000018f800000000,0x0000000000000000,0x000000b4400000000},
+ { 0x00000000000001aa,0x0000023107d16b309,0x0000000000001bef,0x00000000000b23133,0x0000000000000000,0x00000232000000000,0x0000000000000000,0x00000000000b24000},
+ { 0x0000000000000000,0x0362cb9f4a07e7042,0x0000000001f9981f,0x00000001cb2f94da8,0x0000000000000000,0x03630000000000000,0x0000000000000000,0x00000001cb8000000},
+ { 0x0000000000001239,0x00cb6c6ba18e8016b,0x0000000001a6f2fe,0x00000001e760c70b5,0x0000000000000000,0x00cb8000000000000,0x0000000000000000,0x00000001e78000000},
+ { 0x0000000000000226,0x0000000000358b3a8,0x00000000000757ba,0x000000000010f023f,0x0000000000000000,0x00000000003590000,0x0000000000070000,0x000000000010f8000},
+ { 0x0176116f9e6f93f5,0x03a38a0ef6fcfc7fe,0x059c54fda9eac442,0x0120006fe7ce376af,0x0170000000000000,0x03a40000000000000,0x059c000000000000,0x01204000000000000},
+ { 0x000000000000000b,0x0c54b84a329bcde77,0x0000000000001050,0x00000000000012053,0x0000000000000000,0x0c580000000000000,0x0000000000001000,0x00000000000012080},
+ { 0x00000000000006f2,0x000001da7f5f3b6bf,0x000000000022372d,0x0000000319580d487,0x0000000000000000,0x000001da800000000,0x0000000000000000,0x000000031a0000000},
+ { 0x0000000000000007,0x000000000b3b7151a,0x0000000000000d9d,0x00000000000119052,0x0000000000000000,0x000000000b3c00000,0x0000000000000800,0x00000000000119800},
+ { 0x0000000000000013,0x0004472b1c603a1ae,0x0000000000000205,0x000000007f0e01a64,0x0000000000000000,0x00044800000000000,0x0000000000000000,0x000000007f2000000},
+ { 0x0000000001e59721,0x00de119a1d2ece387,0x000000045b2ab4b5,0x0001cc68e0bef6689,0x0000000000000000,0x00de4000000000000,0x0000000000000000,0x0001cc80000000000},
+ { 0x0000000000007341,0x0000fb4d068627afc,0x000000000039b8cc,0x000005910dd66a18e,0x0000000000000000,0x0000fb80000000000,0x0000000000000000,0x00000592000000000},
+ { 0x0000000000001482,0x00034ea6d7aa6ee59,0x00000000000bf0f4,0x00000543e8e26c216,0x0000000000000000,0x00034f00000000000,0x0000000000000000,0x00000544000000000},
+ { 0x00000000000000ce,0x00001405dd45a6f8d,0x000000000007afe3,0x000000074d4432db4,0x0000000000000000,0x00001408000000000,0x0000000000000000,0x000000074e0000000},
+ { 0x00000000000005ed,0x000caaa0dd1541e0a,0x0000000000003894,0x00000000004a84258,0x0000000000000000,0x000cac00000000000,0x0000000000000000,0x00000000004aa0000},
+ { 0x00000000000000c7,0x0004b6667c75d12ac,0x000000000007af77,0x00000000012142d14,0x0000000000000000,0x0004b800000000000,0x0000000000000000,0x00000000012180000},
+ { 0x0000000003e7cfdc,0x000025d98155ba4fa,0x00000014f7f870df,0x00000009f935cac76,0x0000000000000000,0x000025e0000000000,0x00000014c0000000,0x00000009fc0000000},
+ { 0x00000000000000b6,0x000258ac4ca3041f3,0x00000000000ec0e0,0x0000003e9b65c5165,0x0000000000000000,0x00025900000000000,0x0000000000000000,0x0000003ea00000000},
+ { 0x00000000000000d2,0x00222c98dc307b680,0x000000000000021b,0x0000000f3612558ac,0x0000000000000000,0x00223000000000000,0x0000000000000000,0x0000000f380000000},
+ { 0x00000008384d50ac,0x00002a0afdea0d938,0x00000013237eab26,0x000000096db43ac1a,0x0000000000000000,0x00002a10000000000,0x0000001300000000,0x00000009700000000},
+ { 0x00000000000017d9,0x000000005ca817c80,0x0000000000005dad,0x000000004f5767ff2,0x0000000000000000,0x000000005cc000000,0x0000000000000000,0x000000004f6000000},
+ { 0x0000000000003b5d,0x00729bd62c3f1a8bd,0x0000002b955b8957,0x00000d6b75b78b206,0x0000000000000000,0x0072a000000000000,0x0000000000000000,0x00000d6c000000000},
+ { 0x0000000000000a91,0x000000dab5f2937e6,0x000000000000225d,0x000000000d77106b5,0x0000000000000000,0x000000dac00000000,0x0000000000000000,0x000000000d7800000},
+ { 0x00000000000003af,0x0000054cd7c2c7c38,0x000000000036bf0c,0x0000000000050ffce,0x0000000000000000,0x0000054e000000000,0x000000000036b800,0x00000000000510000},
+ { 0x000000000000001f,0x0000000332464030d,0x0000000000001436,0x0000000000000c5c2,0x0000000000000000,0x00000003330000000,0x0000000000001400,0x0000000000000c600},
+ { 0x0000000000000d2d,0x000009b19838e20d7,0x00000000009fa757,0x0000000247d32c11e,0x0000000000000000,0x000009b4000000000,0x0000000000000000,0x00000002480000000},
+ { 0x00000000bc4a6765,0x002c131556cd5ee2c,0x0001ca73897dac40,0x00004ad954bc81dd3,0x0000000000000000,0x002c2000000000000,0x0001ca0000000000,0x00004ae0000000000},
+ { 0x00000000000000f0,0x003fc6f035f80b933,0x00000eb74aa6c9ae,0x00026b0424cd72a1c,0x0000000000000000,0x003fd000000000000,0x0000000000000000,0x00026c00000000000},
+ { 0x0000000000002a45,0x000669a86f4e06e99,0x00000065b9f7627a,0x0000001276fab6f13,0x0000000000000000,0x00066a00000000000,0x0000006580000000,0x00000012780000000},
+ { 0x0000000000001c2b,0x0000002c116c34a27,0x000000001363ac99,0x000000037df8230fd,0x0000000000000000,0x0000002c200000000,0x0000000010000000,0x000000037e0000000},
+ { 0x000000000000000d,0x01d9f543302355b66,0x000000000000000f,0x000000000000089bf,0x0000000000000000,0x01da0000000000000,0x0000000000000000,0x000000000000089c0},
+ { 0x0000000000000001,0x0000000005278a365,0x0000000000000618,0x00000000004dd01c2,0x0000000000000000,0x00000000052800000,0x0000000000000000,0x00000000004de0000},
+ { 0x00000000000470b2,0x00000000132c170bc,0x000000000007de22,0x0000000002e3b4673,0x0000000000000000,0x00000000133000000,0x0000000000000000,0x0000000002e400000},
+ { 0x0000000000003de3,0x000364536b60ceec9,0x000000000000f8ab,0x0000001da1701b3fb,0x0000000000000000,0x00036500000000000,0x0000000000000000,0x0000001da80000000},
+ { 0x00000000093e7368,0x000000354ae1612ed,0x000000166aa7598f,0x000000023db03e65b,0x0000000000000000,0x00000035500000000,0x0000001668000000,0x000000023dc000000},
+ { 0x00000000019dcce0,0x0b7e8593cd6196075,0x0000000011fe5546,0x000000014fd12a039,0x0000000000000000,0x0b800000000000000,0x0000000010000000,0x00000001500000000},
+ { 0x0000000000000001,0x00009980993ade0a5,0x0000005eb0584405,0x0000000a7709b8c84,0x0000000000000000,0x000099c0000000000,0x0000005ea0000000,0x0000000a780000000},
+ { 0x0000000000004ff3,0x00037af970f1360fa,0x00004b2a4c8fd671,0x00017144ffe3a62b4,0x0000000000000000,0x00037b00000000000,0x0000480000000000,0x00017180000000000},
+ { 0x00000000007dc1c9,0x00018ea24761ab3bd,0x000000a6346b2d55,0x0000036b90826595b,0x0000000000000000,0x00018f00000000000,0x000000a000000000,0x0000036c000000000},
+ { 0x0000000000000002,0x00952b1b70651b034,0x00000000000000dd,0x0051d50aca5890eda,0x0000000000000000,0x00954000000000000,0x0000000000000000,0x0051e000000000000},
+ { 0x00000000003d9d78,0x0000008ea4eb279af,0x00000000007e7bad,0x0000000051e1e13e5,0x0000000000000000,0x0000008ec00000000,0x0000000000000000,0x00000000520000000},
+ { 0x0000000000012e05,0x00603aee2c127ca45,0x000000000002153f,0x00000000004666f60,0x0000000000000000,0x00604000000000000,0x0000000000020000,0x00000000004680000},
+ { 0x00000000000f2510,0x041614aed3bf335cd,0x0000000000103a11,0x000000369e40d4a6e,0x0000000000000000,0x04180000000000000,0x0000000000000000,0x00000036a00000000},
+ { 0x000000000000c866,0x001b4d8393c8a7f6e,0x0000000000d7b7c2,0x000000000017faa9e,0x0000000000000000,0x001b5000000000000,0x0000000000d78000,0x000000000017fc000},
+ { 0x000000000004bbef,0x000000004ac5e0081,0x0000000025062472,0x00000000032fc1f5c,0x0000000000000000,0x000000004ae000000,0x0000000025040000,0x00000000033000000},
+ { 0x000000002e52dc62,0x0124d87a3d39b4644,0x007fbfc3deec4c68,0x0015a05cfba84f4b3,0x0000000000000000,0x01250000000000000,0x007f800000000000,0x0015a400000000000},
+ { 0x0000000000000001,0x00000fb4bb32f3f8a,0x0000000000000002,0x0000000000000057b,0x0000000000000000,0x00000fb8000000000,0x0000000000000002,0x0000000000000057b},
+ { 0x00000000000000ec,0x00000870ee6fcdcbc,0x00000001aa6a6297,0x00000008b9843bd3d,0x0000000000000000,0x00000874000000000,0x0000000180000000,0x00000008bc0000000},
+ { 0x00000000000008fa,0x0010f4c0f09c0510c,0x000000001644407b,0x000b81a459dcdc067,0x0000000000000000,0x0010f800000000000,0x0000000000000000,0x000b8400000000000},
+ { 0x000000000004a56d,0x000000001004e7d8f,0x000000000010668b,0x0000000000232cff2,0x0000000000000000,0x00000000100800000,0x0000000000100000,0x00000000002330000},
+ { 0x0000000c1c498586,0x0000001b36148d271,0x0000001f60fe78c6,0x00000001f81876911,0x0000000c00000000,0x0000001b380000000,0x0000001f60f00000,0x00000001f81900000},
+ { 0x000000000000b763,0x001d8c1ce1fc719f5,0x00000000000ae3cf,0x0012f22ceb24e4e0c,0x0000000000000000,0x001d9000000000000,0x0000000000000000,0x0012f800000000000},
+ { 0x00000000000001a0,0x0007d04161767ae22,0x00000000007c3acc,0x000057bcd4bf873d5,0x0000000000000000,0x0007d200000000000,0x0000000000000000,0x000057c0000000000},
+ { 0x000000ca3f2bac6d,0x0095d5a4f88114330,0x00002ae619e8861e,0x0000154e776639f9d,0x0000000000000000,0x00960000000000000,0x00002a8000000000,0x00001550000000000},
+ { 0x0000000000000000,0x060b9f2486b02a979,0x00000000000523af,0x00000000008d5e23b,0x0000000000000000,0x060c0000000000000,0x0000000000040000,0x00000000008d80000},
+ { 0x0000000000000171,0x001fab9b05b67c57e,0x0000000000007f15,0x00049f9327b364f91,0x0000000000000000,0x001fb000000000000,0x0000000000000000,0x0004a000000000000},
+ { 0x00000000000bea79,0x00000000193bf2c18,0x00000000002e8fcf,0x00000000003b8701b,0x0000000000000000,0x00000000194000000,0x00000000002e0000,0x00000000003b90000},
+ { 0x0000000000000001,0x0075bd7ada6fd8bf5,0x0000000d4f253b64,0x00035f063829430bf,0x0000000000000000,0x0075c000000000000,0x0000000000000000,0x00036000000000000},
+ { 0x0000000000001b87,0x026b79d9137ccae72,0x0000000000003421,0x0000000000002dd9b,0x0000000000000000,0x026c0000000000000,0x0000000000003400,0x0000000000002de00},
+ { 0x000000000000001f,0x00000000149b1f87c,0x0000000000000023,0x0000000006d8ac8a9,0x0000000000000000,0x0000000014a000000,0x0000000000000000,0x0000000006da00000},
+ { 0x0000000000082f2f,0x0000150c0fd719007,0x00000000508d9d10,0x00000150d5b096ed2,0x0000000000000000,0x00001510000000000,0x0000000000000000,0x00000151000000000},
+ { 0x00000000000018ca,0x008034ac019fbc27a,0x0000009d8d44ce86,0x00000027148ebc33b,0x0000000000000000,0x00804000000000000,0x0000009d80000000,0x00000027180000000},
+ { 0x0000001107ffca6d,0x0001110f54f8ce8a5,0x00000184cf3d0673,0x00000081bc95a6eb5,0x0000000000000000,0x00011180000000000,0x0000018400000000,0x00000081c00000000},
+ { 0x000000000049d8d1,0x0000000004f836c75,0x00000000004bca55,0x0000000003b8bf6f7,0x0000000000400000,0x0000000004fa00000,0x0000000000400000,0x0000000003b900000},
+ { 0x0000000000027fce,0x0069c0f7569c01012,0x0000061e094d0dc0,0x00002a17235f61432,0x0000000000000000,0x0069e000000000000,0x0000060000000000,0x00002a20000000000},
+ { 0x0000000000000001,0x003c3f7f758cd6cab,0x0000000000000013,0x000000000000003ae,0x0000000000000000,0x003c4000000000000,0x0000000000000013,0x000000000000003ae},
+ { 0x0000000000001461,0x000085479522b6be6,0x00000000001b4dfe,0x000001de2a071f436,0x0000000000000000,0x00008580000000000,0x0000000000000000,0x000001de800000000},
+ { 0x0000000003c7ed59,0x000c1dcf60538235f,0x000000001921df96,0x0000000251f05e24e,0x0000000000000000,0x000c2000000000000,0x0000000010000000,0x00000002520000000},
+ { 0x0000000332d32541,0x000e8fba4663dddfc,0x000002861f2d5368,0x00031266dc7d0ef43,0x0000000000000000,0x000e9000000000000,0x0000000000000000,0x00031300000000000},
+ { 0x0000000000013cfc,0x014342d738e8ac37a,0x00001ea5d22b5b2f,0x000001f769a68f8f4,0x0000000000000000,0x01438000000000000,0x00001ea5c0000000,0x000001f76c0000000},
+ { 0x0000000000036ea9,0x011a10032c1e4f017,0x00000007ec6c3581,0x000003d28cac488de,0x0000000000000000,0x011a8000000000000,0x0000000000000000,0x000003d3000000000},
+ { 0x0000000000000039,0x002ca21ef9116bf00,0x0000000000057ed8,0x0000002b3f47d15d6,0x0000000000000000,0x002cb000000000000,0x0000000000000000,0x0000002b400000000},
+ { 0x00000000000000f9,0x0061ae5165beffae2,0x00000000000002a3,0x0000000000020b9e2,0x0000000000000000,0x0061c000000000000,0x0000000000000000,0x0000000000020c000},
+ { 0x000000000009a018,0x02b57bc11fd35acd2,0x00000000081937c0,0x00000e72939a95f77,0x0000000000000000,0x02b60000000000000,0x0000000000000000,0x00000e74000000000},
+ { 0x0000000000000005,0x011158a891d8e7af0,0x0000000000000079,0x00000000000003363,0x0000000000000000,0x01118000000000000,0x0000000000000070,0x00000000000003370},
+ { 0x0000000000025a14,0x0000e022b5fc9c198,0x0000000000031b51,0x0000001aa1ea94589,0x0000000000000000,0x0000e040000000000,0x0000000000000000,0x0000001aa80000000},
+ { 0x000000000000a862,0x00006a6fe144525f8,0x00000000000145e1,0x0000030407f23ac38,0x0000000000000000,0x00006a80000000000,0x0000000000000000,0x00000305000000000},
+ { 0x0000000000000736,0x000000000feee8627,0x0000000000000db7,0x000000000063097f5,0x0000000000000000,0x000000000ff000000,0x0000000000000000,0x00000000006320000},
+ { 0x000000000000000e,0x000511a77c4075118,0x0000000000000691,0x000000013f437e5f7,0x0000000000000000,0x00051200000000000,0x0000000000000000,0x000000013f8000000},
+ { 0x000000000000000c,0x000000000854b3353,0x00000000012112d6,0x000000000026bbf2a,0x0000000000000000,0x00000000085800000,0x0000000001210000,0x000000000026c0000},
+ { 0x0000000000000001,0x0039ed09d959b3a13,0x000000000000e799,0x000000000003e98df,0x0000000000000000,0x0039f000000000000,0x000000000000e000,0x000000000003ea000},
+ { 0x000000000071ec3b,0x0014b7220b4cd1afa,0x0000000027475f99,0x000584e0b113b3c0c,0x0000000000000000,0x0014b800000000000,0x0000000000000000,0x00058600000000000},
+ { 0x0000000000d860fe,0x00d5a0c2e12431243,0x0007d17f37235116,0x0006472e7f8fc54a2,0x0000000000000000,0x00d5c000000000000,0x0007c00000000000,0x00064800000000000},
+ { 0x000000000000007a,0x0000103c72b8bbd10,0x00000000000976bc,0x000000007e8c79edb,0x0000000000000000,0x00001040000000000,0x0000000000000000,0x000000007ea000000},
+ { 0x000000000000003e,0x00000d5a4471e8029,0x0000000000000193,0x000000002e83c6767,0x0000000000000000,0x00000d5c000000000,0x0000000000000000,0x000000002e9000000},
+ { 0x0000000000272c1b,0x00483cab480c034bf,0x0000003437b93e9a,0x00379a662134fb792,0x0000000000000000,0x00484000000000000,0x0000000000000000,0x0037a000000000000},
+ { 0x0000000000000004,0x00010135ed02801ff,0x0000000000000011,0x00000087a537b56d5,0x0000000000000000,0x00010180000000000,0x0000000000000000,0x00000087c00000000},
+ { 0x0000000000070b01,0x0000000fd5e51b97c,0x00000000000b3c8d,0x000000000002385b3,0x0000000000000000,0x0000000fd80000000,0x00000000000b3800,0x00000000000238800},
+ { 0x00000000000002a7,0x03b3201db41195c61,0x0000000000099565,0x0000000006c32ba6b,0x0000000000000000,0x03b40000000000000,0x0000000000000000,0x0000000006c400000},
+ { 0x0000000000005630,0x000000046269595d0,0x00000000819235f0,0x0000000025153f436,0x0000000000000000,0x00000004640000000,0x0000000081800000,0x00000000251800000},
+ { 0x0000000000000007,0x008efe22a75e166eb,0x0000000d7bc66c86,0x00074247a54b989e7,0x0000000000000000,0x008f0000000000000,0x0000000000000000,0x00074400000000000},
+ { 0x0000000000000001,0x000000002b3ef7dc2,0x000000000000001b,0x0000000017a5c0170,0x0000000000000000,0x000000002b4000000,0x0000000000000000,0x0000000017a800000},
+ { 0x0000000000068345,0x00017126253a7c1e7,0x000000000060fdc9,0x00000000085a84578,0x0000000000000000,0x00017180000000000,0x0000000000400000,0x00000000085c00000},
+ { 0x0000000000000071,0x0007ec28886bbc7ca,0x00000024e21a576a,0x000002842a368bcfb,0x0000000000000000,0x0007ee00000000000,0x0000002000000000,0x00000285000000000},
+ { 0x0000000000003b29,0x07cf4acfa73a1be1e,0x00000002d2c23c04,0x0003b577c76fe5027,0x0000000000000000,0x07d00000000000000,0x0000000000000000,0x0003b600000000000},
+ { 0x0000000000000004,0x0000000342ba348ff,0x0000000000000046,0x000000003612f64b8,0x0000000000000000,0x00000003430000000,0x0000000000000000,0x00000000362000000},
+ { 0x0000000000004139,0x032f4707d3c9a67b5,0x0000000514105581,0x000001471dbee1e01,0x0000000000000000,0x03300000000000000,0x0000000000000000,0x00000147800000000},
+ { 0x000000000000003a,0x0002e88be23a93117,0x000000030e8c680d,0x0000072151e0fa51a,0x0000000000000000,0x0002e900000000000,0x0000000000000000,0x00000722000000000},
+ { 0x0000000000000019,0x00069b86812c5bdc2,0x0000000547d0a2c6,0x00000ecc6c99223b7,0x0000000000000000,0x00069c00000000000,0x0000000000000000,0x00000ed0000000000},
+ { 0x000000000000000d,0x0007dc03b8572c06a,0x000000063bd37887,0x0000bb1a468a4fbf8,0x0000000000000000,0x0007de00000000000,0x0000000000000000,0x0000bb40000000000},
+ { 0x0000000000003d1c,0x000eaffba1c85938c,0x0000000000ca299e,0x00001e509d2d4fe30,0x0000000000000000,0x000eb000000000000,0x0000000000000000,0x00001e58000000000},
+ { 0x000000000000e039,0x0001863390d906914,0x00000000003b6740,0x00000015444c27427,0x0000000000000000,0x00018680000000000,0x0000000000000000,0x00000015480000000},
+ { 0x000000000000001e,0x00000000014d8efde,0x00000000000002e2,0x000000000000710ef,0x0000000000000000,0x00000000014e00000,0x0000000000000200,0x00000000000071200},
+ { 0x0000000000000d39,0x000000790c9533e05,0x00000000001b4e6d,0x000000007690c1d32,0x0000000000000000,0x00000079200000000,0x0000000000000000,0x0000000076a000000},
+ { 0x000000000000dffc,0x000004e600adb08d8,0x0000005065824f44,0x000000263038dfebb,0x0000000000000000,0x000004e8000000000,0x0000005000000000,0x00000026400000000},
+ { 0x0000000000ed8812,0x0001f6dd046876882,0x000000000225d3ee,0x000000006ea7ed400,0x0000000000000000,0x0001f700000000000,0x0000000002000000,0x000000006ec000000},
+ { 0x0000000000000010,0x000000e0415413ef0,0x00000000000027b3,0x0000000000321c32b,0x0000000000000000,0x000000e0800000000,0x0000000000000000,0x00000000003220000},
+ { 0x000000000000019e,0x00000b66de844a26c,0x000000000734dde8,0x00000002572089513,0x0000000000000000,0x00000b68000000000,0x0000000000000000,0x00000002580000000},
+ { 0x000000058b86cc98,0x0002c19d57c69262c,0x000000acdde05a83,0x0000002af9f976196,0x0000000000000000,0x0002c200000000000,0x000000ac00000000,0x0000002b000000000},
+ { 0x0000000000000288,0x00217bedd5ac2ac36,0x0000000000003de7,0x00000000d77df3b4b,0x0000000000000000,0x00218000000000000,0x0000000000000000,0x00000000d78000000},
+ { 0x0000000000002710,0x0011395193c276fad,0x0000000000005c84,0x00000000b75747a92,0x0000000000000000,0x00114000000000000,0x0000000000000000,0x00000000b78000000},
+ { 0x0000000000000143,0x007581a74708df49b,0x0000002c0f930007,0x001d91ee244e5d1ac,0x0000000000000000,0x0075a000000000000,0x0000000000000000,0x001d9800000000000},
+ { 0x00000000000047df,0x075ff1d4dee6cfe36,0x00000000000bca93,0x00000000061a691c4,0x0000000000000000,0x07600000000000000,0x0000000000000000,0x00000000061c00000},
+ { 0x0000000000001788,0x057530c01defcff01,0x000000dff2c0531a,0x0000003944c1325b9,0x0000000000000000,0x05760000000000000,0x000000df00000000,0x00000039500000000},
+ { 0x0000000000000005,0x00000aff05906e410,0x00000000074edbd9,0x00000000312d85c17,0x0000000000000000,0x00000b00000000000,0x0000000007000000,0x00000000313000000},
+ { 0x0000000ac245cd57,0x007d22664ea05ccb3,0x0000001973c48dcd,0x0000000d828cf46de,0x0000000000000000,0x007d4000000000000,0x0000001940000000,0x0000000d840000000},
+ { 0x000000000000089b,0x000007bb83d602576,0x0000015e1fd0fad4,0x000000188603de361,0x0000000000000000,0x000007bc000000000,0x0000015e10000000,0x00000018870000000},
+ { 0x000000000000000d,0x000007bf267028427,0x0000000000000294,0x0000000000011b3e7,0x0000000000000000,0x000007c0000000000,0x0000000000000000,0x0000000000011b800},
+ { 0x000000000000001f,0x001cf78b76e7860a6,0x00000029863966ce,0x00000539b3bf9a126,0x0000000000000000,0x001cf800000000000,0x0000002000000000,0x0000053a000000000},
+ { 0x000000000000001f,0x0000000000000f670,0x00000000000001f8,0x0000000000000b722,0x0000000000000000,0x0000000000000f680,0x00000000000001c0,0x0000000000000b740},
+ { 0x0000000000001889,0x000025f9ed8337b28,0x00000000010e6367,0x000000781fa350f11,0x0000000000000000,0x00002600000000000,0x0000000000000000,0x00000078200000000},
+ { 0x00000000000000d0,0x00046bb9d94a03016,0x00000000000006ed,0x000000000000142c2,0x0000000000000000,0x00046c00000000000,0x0000000000000680,0x00000000000014300},
+ { 0x00000004bb21cc31,0x0218a0ce1831f7d42,0x00005bd5259c746b,0x00e1efaed07e36e80,0x0000000000000000,0x02190000000000000,0x0000000000000000,0x00e20000000000000},
+ { 0x0000000000000000,0x000000000870e267f,0x000000000002b350,0x0000000000042ee3e,0x0000000000000000,0x00000000087400000,0x000000000002a000,0x00000000000430000},
+ { 0x0000000000004aa6,0x0008140323f3849af,0x000000000001f31b,0x0000000394296e10c,0x0000000000000000,0x00081800000000000,0x0000000000000000,0x00000003950000000},
+ { 0x000000000000b919,0x00c7aece2c90cff90,0x0000000000084925,0x0047cb62db247d03c,0x0000000000000000,0x00c7c000000000000,0x0000000000000000,0x0047e000000000000},
+ { 0x000000000001eb6a,0x02836df61cec7e483,0x00000000009cf7ff,0x001259050d6918dcd,0x0000000000000000,0x02840000000000000,0x0000000000000000,0x00126000000000000},
+ { 0x00000000185c9513,0x0003d104ed028b197,0x000000001fbdb548,0x000039cfed3f64847,0x0000000000000000,0x0003d200000000000,0x0000000000000000,0x000039d0000000000},
+ { 0x0000000000008dd5,0x061ca8d52530724be,0x00023610d57dbdad,0x00087f30e14b5da48,0x0000000000000000,0x061e0000000000000,0x0002000000000000,0x00088000000000000},
+ { 0x0000000000004d41,0x00894f9afe78e1465,0x000000000015da24,0x000000000002931fb,0x0000000000000000,0x00898000000000000,0x000000000015d800,0x00000000000293800},
+ { 0x0000000000001349,0x0003406dd4fbb7225,0x000000000007600a,0x00000000355483ed7,0x0000000000000000,0x00034100000000000,0x0000000000000000,0x00000000356000000},
+ { 0x000000000000000a,0x001c5dd6b1cc1c6ec,0x00000000000000f0,0x000000000000007ea,0x0000000000000000,0x001c6000000000000,0x00000000000000f0,0x000000000000007ea},
+ { 0x000000001a518146,0x000014113649ced51,0x0000004e8c64b4cc,0x0000001ac3429f8b7,0x0000000000000000,0x00001418000000000,0x0000004e80000000,0x0000001ac80000000},
+ { 0x000000000003a586,0x098b0954d15077cb4,0x00000bda6b65098c,0x00562a140212f1d28,0x0000000000000000,0x098c0000000000000,0x0000000000000000,0x00564000000000000},
+ { 0x000000000000030a,0x0039cb1c2363d54c0,0x000000000ecf73ea,0x000018e6d7d927934,0x0000000000000000,0x0039d000000000000,0x0000000000000000,0x000018e8000000000},
+ { 0x000000000000000b,0x0000009a3f9610a47,0x00000000000010a6,0x0000000038888f637,0x0000000000000000,0x0000009a400000000,0x0000000000000000,0x00000000389000000},
+ { 0x0000000000000118,0x00059929816844bdf,0x00000005e47c662d,0x0001e983631b0a64e,0x0000000000000000,0x00059a00000000000,0x0000000000000000,0x0001ea00000000000},
+ { 0x000000000014c8fb,0x001add4889f883417,0x00000000025628f3,0x0002d4fa4e2375990,0x0000000000000000,0x001ae000000000000,0x0000000000000000,0x0002d500000000000},
+ { 0x000000000000000f,0x00352ac0fcea2fd47,0x000000010e5f6637,0x0000ad9f71b48dede,0x0000000000000000,0x00353000000000000,0x0000000000000000,0x0000adc0000000000},
+ { 0x000000000000018e,0x0000000150c81da43,0x0000000000003abf,0x00000000058559931,0x0000000000000000,0x00000001510000000,0x0000000000000000,0x00000000058600000},
+ { 0x0000000000000017,0x0eeec45c59dbc10e2,0x0000002b0bb89210,0x0000006e5102cd4e6,0x0000000000000000,0x0ef00000000000000,0x0000002a00000000,0x0000006e600000000},
+ { 0x000000000000005c,0x00077674d92a4be0a,0x00000000000031a6,0x0000000000000dda4,0x0000000000000000,0x00077800000000000,0x0000000000003180,0x0000000000000ddc0},
+ { 0x0000000000000049,0x0001d12634dc4c2a5,0x00000000000ef54b,0x00002aec257aeb620,0x0000000000000000,0x0001d180000000000,0x0000000000000000,0x00002af0000000000},
+ { 0x00000000000002d3,0x00000013b7d9d6dbc,0x0000000000004675,0x00000003e75850374,0x0000000000000000,0x00000013b80000000,0x0000000000000000,0x00000003e80000000},
+ { 0x0000000024217fb4,0x01535398c9a14c395,0x000000003da28d2c,0x0000112650128ef25,0x0000000000000000,0x01538000000000000,0x0000000000000000,0x00001128000000000},
+ { 0x0000000000000003,0x0000011d5266db42f,0x0000000000000044,0x0000000000e1522dd,0x0000000000000000,0x0000011d800000000,0x0000000000000000,0x0000000000e180000},
+ { 0x000000000003a8b8,0x0dbb5d65b97f4a304,0x000dcd042485ce6b,0x001867b31d35825a3,0x0000000000000000,0x0dbc0000000000000,0x000d800000000000,0x00186800000000000},
+ { 0x00000000000000e5,0x00000001999797bb2,0x0000000000069f70,0x00000000a13ea949a,0x0000000000000000,0x000000019a0000000,0x0000000000000000,0x00000000a14000000},
+ { 0x0000000000000037,0x0014fd843f931d051,0x0000000034cd9f96,0x00000000d30f745d6,0x0000000000000000,0x00150000000000000,0x0000000034000000,0x00000000d34000000},
+ { 0x000000000a64d19e,0x054ee8a065bebe44f,0x00000000c94c31b1,0x00005246b8649e4bf,0x0000000000000000,0x05500000000000000,0x0000000000000000,0x00005260000000000},
+ { 0x0000000000000002,0x00a71ff88ccbc5a33,0x0000000000000235,0x00000000000807aa2,0x0000000000000000,0x00a74000000000000,0x0000000000000000,0x00000000000808000},
+ { 0x00000000000019cd,0x000037cbe04be8d91,0x000000000000c4e5,0x000000000055d19b4,0x0000000000000000,0x000037d0000000000,0x0000000000000000,0x000000000055e0000},
+ { 0x0000000000000011,0x01b7f7cc4db0b7b7e,0x00000000457d9873,0x00000011206f172a0,0x0000000000000000,0x01b80000000000000,0x0000000000000000,0x00000011280000000},
+ { 0x0000000066195cd3,0x000000c2eb589e337,0x000000007193f7aa,0x00000000146ce7d3b,0x0000000000000000,0x000000c3000000000,0x0000000071800000,0x00000000147000000},
+ { 0x0000000000000006,0x06f09ace9ad631beb,0x0000000c2be68841,0x03aa6cf78ab4b01b1,0x0000000000000000,0x06f20000000000000,0x0000000000000000,0x03ab0000000000000},
+ { 0x0000000000000012,0x0001d6cef280e6ff6,0x00000000000000e3,0x00003fb1484c60422,0x0000000000000000,0x0001d700000000000,0x0000000000000000,0x00003fc0000000000},
+ { 0x0000000000002514,0x020c3f2013468e3e1,0x00000000001a279e,0x000aad8298d96515f,0x0000000000000000,0x020d0000000000000,0x0000000000000000,0x000ab000000000000},
+ { 0x0000000000003bb5,0x0000b3c6556e9adb8,0x00000000004045a4,0x000000034022cba64,0x0000000000000000,0x0000b400000000000,0x0000000000000000,0x00000003410000000},
+ { 0x00000000000000bc,0x01301f6fbfbc9c391,0x00000000000014ba,0x0000000000169a488,0x0000000000000000,0x01308000000000000,0x0000000000000000,0x000000000016a0000},
+ { 0x0000000000001fc4,0x000036b6afa123daf,0x0000000000ed867d,0x0000001aeb0d9677c,0x0000000000000000,0x000036c0000000000,0x0000000000000000,0x0000001af00000000},
+ { 0x000000000000006c,0x00012e559a45bc671,0x0000000b19232687,0x0000003549c709e35,0x0000000000000000,0x00012e80000000000,0x0000000b00000000,0x00000035500000000},
+ { 0x00000002d82eb873,0x00038dd3fa1314dd9,0x00000003ab38d864,0x000000a5dca0ba4b8,0x0000000000000000,0x00038e00000000000,0x0000000000000000,0x000000a6000000000},
+ { 0x0000000000000051,0x015a1e1441bc0b0d9,0x0000000000010aaa,0x000000027c5e88c02,0x0000000000000000,0x015a8000000000000,0x0000000000000000,0x000000027d0000000},
+ { 0x0000000000008f26,0x00000000c9286f95c,0x0000000000e38a8e,0x000000008ab2f1998,0x0000000000000000,0x00000000c94000000,0x0000000000000000,0x000000008ac000000},
+ { 0x000000000000001a,0x032dfd2ee1845e97a,0x000000000abbb8eb,0x000001e2711b59d69,0x0000000000000000,0x032e0000000000000,0x0000000000000000,0x000001e2800000000},
+ { 0x0000000000009a15,0x00000015bd8c135d4,0x0000000bf561ec0a,0x00000003293cc48c1,0x0000000000000000,0x00000015c00000000,0x0000000bf0000000,0x000000032a0000000},
+ { 0x00000000002991f8,0x000aacd877e0c427d,0x00484ea3be1b9a75,0x0008f57e605d9db53,0x0000000000000000,0x000ab000000000000,0x0048400000000000,0x0008f600000000000},
+ { 0x0000000000000023,0x0000000000d7f3060,0x0000000000009375,0x0000000000005a99b,0x0000000000000000,0x0000000000d800000,0x0000000000009200,0x0000000000005aa00},
+ { 0x0000000000000003,0x00000023d16097869,0x00000000003f475b,0x000000000040d670d,0x0000000000000000,0x00000023e00000000,0x00000000003f0000,0x000000000040e0000},
+ { 0x0000000000016fb6,0x0000000529986adbd,0x00000000000761ab,0x000000000020ab393,0x0000000000000000,0x000000052a0000000,0x0000000000070000,0x000000000020b0000},
+ { 0x000000000001c034,0x00002a16bcc0bcb9a,0x0000000074ce05a3,0x00000051679568832,0x0000000000000000,0x00002a20000000000,0x0000000000000000,0x00000051800000000},
+ { 0x0000000000000022,0x0000767944734e9d8,0x0000000000006b34,0x00000000015ef13e7,0x0000000000000000,0x00007680000000000,0x0000000000000000,0x00000000015f00000},
+ { 0x000000000000005d,0x000000001a0eb40c3,0x0000000000000191,0x000000000775e9a5e,0x0000000000000000,0x000000001a1000000,0x0000000000000000,0x00000000077600000},
+ { 0x000000000000012e,0x03808f30b8935ab9a,0x000000001c5ceb28,0x000000000787be4cb,0x0000000000000000,0x03810000000000000,0x000000001c400000,0x00000000078800000},
+ { 0x000000001aca263b,0x00059273d03052200,0x000000008131ef86,0x000000000eaf61ea6,0x0000000000000000,0x00059400000000000,0x0000000081200000,0x000000000eb000000},
+ { 0x0000000000003522,0x00002b6785b655333,0x00000000156e7138,0x000000000dcf1329d,0x0000000000000000,0x00002b70000000000,0x0000000015400000,0x000000000dd000000},
+ { 0x000000002694856c,0x000074b3903f8c99d,0x00000001ca985ea8,0x0000003d083c9f9a1,0x0000000000000000,0x000074c0000000000,0x0000000100000000,0x0000003d100000000},
+ { 0x00000000000000c3,0x0000650e30a2fcd2c,0x0000000000001e25,0x0000000b233574154,0x0000000000000000,0x00006520000000000,0x0000000000000000,0x0000000b240000000},
+ { 0x0000000000000015,0x003858a4485808ec9,0x000000008bfd2735,0x00000000bb3f05776,0x0000000000000000,0x00386000000000000,0x0000000088000000,0x00000000bb4000000},
+ { 0x0000000000000cd5,0x000000833e7d41ef0,0x0000000000001ec4,0x00000000070355bb7,0x0000000000000000,0x00000083400000000,0x0000000000000000,0x00000000070400000},
+ { 0x00000000000000ba,0x00000000ea094d345,0x00000000000ecf0b,0x000000000006b5d29,0x0000000000000000,0x00000000ea4000000,0x00000000000ec000,0x000000000006b6000},
+ { 0x00000000196334e9,0x00ba9fbb5c8103c74,0x00000000764ff3cf,0x000000000785b5e2f,0x0000000000000000,0x00bac000000000000,0x00000000764f0000,0x000000000785c0000},
+ { 0x0000000000000033,0x001a35c0edbfe730b,0x0000000000000a75,0x000000000b0da03ca,0x0000000000000000,0x001a3800000000000,0x0000000000000000,0x000000000b1000000},
+ { 0x0000000000001c8a,0x002d965dd31dbe49e,0x00002de942a3dd98,0x00257a489a5d10bfe,0x0000000000000000,0x002da000000000000,0x0000000000000000,0x00258000000000000},
+ { 0x0000000000000005,0x0016a85055f1d255e,0x00000000008ad04d,0x00000000c58fb78ba,0x0000000000000000,0x0016b000000000000,0x0000000000000000,0x00000000c5c000000},
+ { 0x000000000002a919,0x0000fa895da36bff5,0x00000006eb47f7c6,0x00007530fb127f7a5,0x0000000000000000,0x0000fac0000000000,0x0000000000000000,0x00007540000000000},
+ { 0x0000000000000004,0x000004035f2bf890d,0x00000000000000ee,0x000001a9c9881c25e,0x0000000000000000,0x00000404000000000,0x0000000000000000,0x000001aa000000000},
+ { 0x000000003816bb37,0x03574c333fbf6ad9e,0x000009990defa032,0x0000cfd935d40263d,0x0000000000000000,0x03580000000000000,0x0000080000000000,0x0000d000000000000},
+ { 0x0000000000009aab,0x0061c3b42fcbcee6e,0x0000000000ee9de8,0x00000000010bf009c,0x0000000000000000,0x0061e000000000000,0x0000000000ec0000,0x00000000010c00000},
+ { 0x0000000000000000,0x0000000002e439e32,0x0000000000000002,0x0000000000000000b,0x0000000000000000,0x0000000002e500000,0x0000000000000002,0x0000000000000000b},
+ { 0x0000000000144182,0x0112facb4299bce5b,0x000004ad33696d83,0x004bb0fd3d9a002c9,0x0000000000000000,0x01130000000000000,0x0000000000000000,0x004bc000000000000},
+ { 0x0000000000004215,0x0001a05a16c7f8609,0x0000000000b7942f,0x00006ce2719c8573d,0x0000000000000000,0x0001a080000000000,0x0000000000000000,0x00006d00000000000},
+ { 0x000000000000000c,0x004d40c99b1f2f0c1,0x00000000008169b8,0x0000c7cb4c59b7353,0x0000000000000000,0x004d6000000000000,0x0000000000000000,0x0000c800000000000},
+ { 0x00000000000002bf,0x000000001fd0e5a7c,0x0000000002c4a048,0x00000000024e99fa7,0x0000000000000000,0x000000001fd800000,0x0000000002c00000,0x00000000024f00000},
+ { 0x00000000000034e8,0x0001adced20edfd4e,0x0000000000003ef3,0x00000018aa691800f,0x0000000000000000,0x0001ae00000000000,0x0000000000000000,0x00000018b00000000},
+ { 0x0000000000029741,0x0002ed98ff26c07fe,0x0000000003ec61ee,0x000003c3210fe4796,0x0000000000000000,0x0002ee00000000000,0x0000000000000000,0x000003c4000000000},
+ { 0x000000000001bf6a,0x00000003f68b0f39c,0x000000000be5f6aa,0x00000001a84edb895,0x0000000000000000,0x00000003f70000000,0x0000000008000000,0x00000001a88000000},
+ { 0x0000000000000002,0x00000000ed2d1762e,0x0000000000000043,0x00000000000004aba,0x0000000000000000,0x00000000ed4000000,0x0000000000000040,0x00000000000004ac0},
+ { 0x000000000000007b,0x00000003db9b1c544,0x0000000000088f57,0x0000000000cd3e0f0,0x0000000000000000,0x00000003dc0000000,0x0000000000080000,0x0000000000cd40000},
+ { 0x0000000000000cda,0x0000000194fc29480,0x0000000000003162,0x000000003c3f3d573,0x0000000000000000,0x00000001950000000,0x0000000000000000,0x000000003c4000000},
+ { 0x000000000000002c,0x000377daddfcd05ff,0x0000000000055cab,0x0000041c7130b366f,0x0000000000000000,0x00037800000000000,0x0000000000000000,0x0000041e000000000},
+ { 0x0000000000000002,0x000f7741f8810173d,0x00000266f1d49533,0x0000006839a0001fe,0x0000000000000000,0x000f7800000000000,0x0000026600000000,0x00000068400000000},
+ { 0x0000000000000001,0x00000000000169275,0x0000000000000003,0x0000000000000131b,0x0000000000000000,0x00000000000169800,0x0000000000000000,0x00000000000001320},
+ { 0x0000000000000003,0x072a83134bbd3108d,0x0000000000000512,0x0000000044c5914ce,0x0000000000000000,0x072c0000000000000,0x0000000000000000,0x0000000044e000000},
+ { 0x0000000000000126,0x0000000002e668b1b,0x000000000000096d,0x0000000000003af23,0x0000000000000000,0x0000000002e700000,0x0000000000000900,0x0000000000003b000},
+ { 0x0000000000000005,0x00625c4896a278ca3,0x0000000000000202,0x0000844240a20ce7f,0x0000000000000000,0x00626000000000000,0x0000000000000000,0x00008480000000000},
+ { 0x0000000000012d47,0x00000a0a4f2307399,0x000000000023ad7e,0x00000000000da1830,0x0000000000000000,0x00000a0c000000000,0x0000000000238000,0x00000000000da4000},
+ { 0x0000000000000008,0x0de67302ab1c44752,0x000000000695067e,0x00000006485a8e6d6,0x0000000000000000,0x0de80000000000000,0x0000000000000000,0x000000064a0000000},
+ { 0x00000000001b4e64,0x000000005136eaabc,0x0000000000318192,0x0000000000081b021,0x0000000000000000,0x00000000514000000,0x0000000000318000,0x0000000000081c000},
+ { 0x0000000000000002,0x0039ad27d8453533a,0x000000000000006e,0x00000000000001bfc,0x0000000000000000,0x0039b000000000000,0x0000000000000068,0x00000000000001c00},
+ { 0x000000004f38c432,0x003b1224471e9c3f4,0x00000000791ce9dd,0x00000dbb34f7777de,0x0000000000000000,0x003b2000000000000,0x0000000000000000,0x00000dbc000000000},
+ { 0x000000000000000a,0x000000998dabeadfb,0x000000000054cbcf,0x0000000003f8312db,0x0000000000000000,0x00000099c00000000,0x0000000000500000,0x0000000003f900000},
+ { 0x0000000000000064,0x000000000006dba27,0x00000000000002be,0x000000000000007de,0x0000000000000000,0x000000000006dc000,0x00000000000002be,0x000000000000007de},
+ { 0x00000000000000f8,0x000000000e0582277,0x0000000000006756,0x0000000000000cd2f,0x0000000000000000,0x000000000e0800000,0x0000000000006740,0x0000000000000cd40},
+ { 0x0000000000000005,0x000002a8503599ae6,0x0000000002605736,0x000000033a40e6afc,0x0000000000000000,0x000002a9000000000,0x0000000000000000,0x000000033b0000000},
+ { 0x0000000000000163,0x00005f37f4730705f,0x00000ba432f6d2e5,0x00001ba765d5f45ca,0x0000000000000000,0x00005f40000000000,0x00000b8000000000,0x00001ba8000000000},
+ { 0x0000000000000372,0x0000001bbe300d548,0x000000000004593f,0x000000000032a1c7a,0x0000000000000000,0x0000001bc00000000,0x0000000000040000,0x000000000032b0000},
+ { 0x0000000000000001,0x00e06191b4cdbe3e1,0x0000000000001457,0x000000000006a09fe,0x0000000000000000,0x00e08000000000000,0x0000000000000000,0x000000000006a2000},
+ { 0x0000000000000232,0x00001a1e3f5107e23,0x0000009d3656cd95,0x00000cbf4b9cb815b,0x0000000000000000,0x00001a20000000000,0x0000008000000000,0x00000cc0000000000},
+ { 0x0000000000000018,0x0000000009881726e,0x0000000000000f5e,0x000000000004ff229,0x0000000000000000,0x00000000098c00000,0x0000000000000000,0x00000000000500000},
+ { 0x0000001ea0a59cda,0x006c0349eb674b54d,0x00000156fd3c39ad,0x00012e4fe4ac289c6,0x0000000000000000,0x006c2000000000000,0x0000000000000000,0x00012e80000000000},
+ { 0x00000000001dbf18,0x02529f298a92f595d,0x000000f3d589ca5e,0x00009d8bc983fb159,0x0000000000000000,0x02530000000000000,0x0000000000000000,0x00009dc0000000000},
+ { 0x0000000000000cff,0x075b64b5b71c2fbdb,0x0000000057673c2a,0x0000019a801cee750,0x0000000000000000,0x075c0000000000000,0x0000000000000000,0x0000019b000000000},
+ { 0x0000000000001dc8,0x01e3ad5d64b586d7a,0x0000079a082580fe,0x00017828057789b80,0x0000000000000000,0x01e40000000000000,0x0000000000000000,0x00017880000000000},
+ { 0x0000000000071fc1,0x062eaf607696df234,0x0000097f708546ee,0x00000d9054cb1b404,0x0000000000000000,0x06300000000000000,0x0000094000000000,0x00000d94000000000},
+ { 0x00000000000028f8,0x00b5654a8dd0c6cf8,0x0000000000010aa5,0x00000007a71e8d447,0x0000000000000000,0x00b58000000000000,0x0000000000000000,0x00000007a80000000},
+ { 0x0000000000017602,0x000039f1e38a79fa3,0x000000000001fe88,0x000000000002180ca,0x0000000000000000,0x00003a00000000000,0x000000000001f800,0x00000000000218800},
+ { 0x0000000000441d01,0x00014d61267026a60,0x00000006533f4d8b,0x00000003bf72a482e,0x0000000000000000,0x00014d80000000000,0x0000000650000000,0x00000003c00000000},
+ { 0x0000000000000058,0x000000002fa43de34,0x000000000007db96,0x0000000003a10d5d3,0x0000000000000000,0x000000002fb000000,0x0000000000000000,0x0000000003a200000},
+ { 0x000000000000005e,0x006019afa3f5cccc0,0x0000000000013d14,0x000000000aa0ae9ac,0x0000000000000000,0x00602000000000000,0x0000000000000000,0x000000000aa400000},
+ { 0x0000000000003b8b,0x03cd981a898d072d8,0x000000001b0343a8,0x0026e9ac5401b0440,0x0000000000000000,0x03ce0000000000000,0x0000000000000000,0x0026f000000000000},
+ { 0x00000132e78b140e,0x0ebb3a6d440614fbc,0x000002797e10e6d6,0x00126ee77d08fe3e3,0x0000000000000000,0x0ebc0000000000000,0x0000000000000000,0x00127000000000000},
+ { 0x00000000000000f9,0x000000d99c6f493da,0x0000000000001a2e,0x0000000a9b72cd713,0x0000000000000000,0x000000d9c00000000,0x0000000000000000,0x0000000a9c0000000},
+ { 0x00000000000010fe,0x0000415f44cb2dc67,0x00000000e1c3de8c,0x0000008f68d3214ae,0x0000000000000000,0x00004160000000000,0x0000000000000000,0x0000008f800000000},
+ { 0x00000003adc5332c,0x016a732adeb8c3eec,0x00000083e2ff63b9,0x00101ef1833727aec,0x0000000000000000,0x016a8000000000000,0x0000000000000000,0x00102000000000000},
+ { 0x00000000004424f2,0x000033c9ec55a50c2,0x0000000002d7b14b,0x000000002883210d5,0x0000000000000000,0x000033d0000000000,0x0000000002000000,0x00000000289000000},
+ { 0x000000000000014c,0x0065cf6b696113acd,0x0000000000172242,0x003ab3edf255184dc,0x0000000000000000,0x0065e000000000000,0x0000000000000000,0x003ac000000000000},
+ { 0x000000000000001a,0x02d9b288e69079bc9,0x0000000000000047,0x000000000159c593a,0x0000000000000000,0x02da0000000000000,0x0000000000000000,0x00000000015a00000},
+ { 0x000000000000b41f,0x006d0de66e0ef67a9,0x000001ccd1888e84,0x00002f7bc35cbcfea,0x0000000000000000,0x006d2000000000000,0x0000010000000000,0x00002f80000000000},
+ { 0x000000000d2e7d78,0x0067b7d931aa18344,0x0000170eb462acc2,0x0051f92cd92c132dc,0x0000000000000000,0x0067c000000000000,0x0000000000000000,0x00520000000000000},
+ { 0x0000000000000dd1,0x06ee755157c858ce3,0x0000000000001806,0x0000000021952e98b,0x0000000000000000,0x06f00000000000000,0x0000000000000000,0x0000000021a000000},
+ { 0x00000002cd95a3e8,0x02b7e430afdc79b11,0x00336e0d21872de6,0x0003463e0d9a21339,0x0000000000000000,0x02b80000000000000,0x00336e0000000000,0x00034640000000000},
+ { 0x0000000000000023,0x0018bd649efc622f8,0x000000000017bda2,0x000000000010c20be,0x0000000000000000,0x0018c000000000000,0x0000000000178000,0x000000000010c4000},
+ { 0x0000000000000033,0x016c6b09a0ad78bad,0x000000000014fbc9,0x000000001d75547aa,0x0000000000000000,0x016c8000000000000,0x0000000000000000,0x000000001d7800000},
+ { 0x0000000000000e1e,0x000000064b6550fc9,0x00000006488057d7,0x000000045ea39cc96,0x0000000000000000,0x000000064c0000000,0x0000000640000000,0x000000045f0000000},
+ { 0x0000000000000005,0x0002f553ef3f45fcc,0x00003965b1160f0e,0x0000114fc37a27109,0x0000000000000000,0x0002f600000000000,0x0000394000000000,0x00001150000000000},
+ { 0x000000000000467b,0x000000821af2dddf1,0x000000352ebdd1e8,0x0000000fcfac9d8c1,0x0000000000000000,0x00000082400000000,0x0000003500000000,0x0000000fd00000000},
+ { 0x000000000000003f,0x02d48a0e62ad7915d,0x00000000000223ea,0x000027daf054659d5,0x0000000000000000,0x02d50000000000000,0x0000000000000000,0x000027e0000000000},
+ { 0x000000000000004a,0x00000003ae99ff770,0x00000000000000db,0x0000000021405da32,0x0000000000000000,0x00000003af0000000,0x0000000000000000,0x00000000215000000},
+ { 0x00000000195aff9b,0x078876f00ca5746b4,0x00000f20f047ff9b,0x00023db8e716c06b2,0x0000000000000000,0x078a0000000000000,0x0000000000000000,0x00023e00000000000},
+ { 0x0000000000000039,0x0000575eaefa95523,0x0000000000b8fe63,0x000000007088bd2d6,0x0000000000000000,0x00005760000000000,0x0000000000000000,0x0000000070a000000},
+ { 0x000000000000000c,0x00000074c37f9cb71,0x000000000001d056,0x000000002303ab289,0x0000000000000000,0x00000074e00000000,0x0000000000000000,0x00000000231000000},
+ { 0x000000000df6b3e9,0x000099c9f6710e935,0x00000005765ea031,0x0000146ce02523a2f,0x0000000000000000,0x00009a00000000000,0x0000000000000000,0x00001470000000000},
+ { 0x0000000006e8f8c2,0x001bc06ca27285774,0x00000069d34a9b60,0x000002ae8f06a7568,0x0000000000000000,0x001bc800000000000,0x0000006000000000,0x000002af000000000},
+ { 0x0000000000000040,0x000041af867560843,0x00000000000000ab,0x0000000004bcbc09c,0x0000000000000000,0x000041c0000000000,0x0000000000000000,0x0000000004be00000},
+ { 0x00000000000001b0,0x000000003c15984a8,0x00000000003cf831,0x00000000055c7df79,0x0000000000000000,0x000000003c2000000,0x0000000000200000,0x00000000055e00000},
+ { 0x0000000000001362,0x0071b0db17c6bd03a,0x0000000001f75f50,0x0000006dde1c3df9b,0x0000000000000000,0x0071c000000000000,0x0000000000000000,0x0000006de00000000},
+ { 0x0000000000005b0d,0x00004adb9c1c936dd,0x00000000010f70ae,0x00000afb036eb4f0c,0x0000000000000000,0x00004ae0000000000,0x0000000000000000,0x00000afc000000000},
+ { 0x0000000000003589,0x000000488e815e333,0x00000000004ff961,0x0000000b52893dc7e,0x0000000000000000,0x00000048a00000000,0x0000000000000000,0x0000000b540000000},
+ { 0x000000000000b751,0x00231d4baea1fe9c3,0x0000000003129bd0,0x000000000035c5efc,0x0000000000000000,0x00232000000000000,0x0000000003128000,0x000000000035c6000},
+ { 0x0000000003e59f3d,0x000000642b65b95ff,0x0000000004f50f43,0x00000005ff695b26b,0x0000000000000000,0x00000064400000000,0x0000000000000000,0x00000006000000000},
+ { 0x00000000000027a6,0x007d2d1f0399d6dfb,0x0006cf50b2392d21,0x0015f72321d8c5abb,0x0000000000000000,0x007d4000000000000,0x0006800000000000,0x0015f800000000000},
+ { 0x0000000000000740,0x0001d0f7161d0524d,0x00000053ece87dd7,0x0000345a6332c0cfe,0x0000000000000000,0x0001d100000000000,0x0000000000000000,0x00003460000000000},
+ { 0x0000000000016901,0x07af12a2629e2374f,0x000000001cf3b61a,0x00000000451c72f3b,0x0000000000000000,0x07b00000000000000,0x000000001c000000,0x00000000452000000},
+ { 0x0000000000000003,0x00aa23476560284a4,0x0000000800103d1e,0x001a12f6c9a0a766d,0x0000000000000000,0x00aa4000000000000,0x0000000000000000,0x001a1800000000000},
+ { 0x00000000006d4d13,0x05a8059a34c15bff7,0x0000000071e18a32,0x0000008ef1a827f42,0x0000000000000000,0x05aa0000000000000,0x0000000000000000,0x0000008f000000000},
+ { 0x0000000000001d89,0x0014a08b8030b9d9d,0x0000000692c60dd1,0x0000031b06735901c,0x0000000000000000,0x0014a800000000000,0x0000000000000000,0x0000031c000000000},
+ { 0x000000000000000c,0x00044ea5003455659,0x000000002becf3ee,0x00000000e051e4310,0x0000000000000000,0x00045000000000000,0x0000000028000000,0x00000000e08000000},
+ { 0x0000000000000002,0x0070efa8af6d1ae1b,0x00000000480340b5,0x00000ee72d2603a8c,0x0000000000000000,0x00710000000000000,0x0000000000000000,0x00000ee8000000000},
+ { 0x0000000000049464,0x0000000098abe5f80,0x000000000c68e644,0x000000002472144bb,0x0000000000000000,0x0000000098c000000,0x000000000c000000,0x00000000248000000},
+ { 0x000002823b7e6ce4,0x076e26f8f5b13011b,0x00687d3b70037b05,0x000c91f90b5197f8e,0x0000000000000000,0x07700000000000000,0x0068600000000000,0x000c9200000000000},
+ { 0x0000000000000000,0x00000056685c51963,0x0000000000027d4d,0x00000000015ba921e,0x0000000000000000,0x00000056800000000,0x0000000000000000,0x00000000015c00000},
+ { 0x0000000000001616,0x03716c45f4e6266ee,0x0000000000002e8d,0x0000000000002a569,0x0000000000000000,0x03720000000000000,0x0000000000002e00,0x0000000000002a600},
+ { 0x00000000000c6831,0x019ab2a0acb9d380c,0x000000005ae57bcb,0x00ada948393f56e20,0x0000000000000000,0x019b0000000000000,0x0000000000000000,0x00adc000000000000},
+ { 0x000000000000001d,0x00002c5d0dbed8e0f,0x0000000000000099,0x0000000000074bd2c,0x0000000000000000,0x00002c60000000000,0x0000000000000000,0x0000000000074c000},
+ { 0x0000000000000061,0x01ca95be56902d118,0x00000000000004a2,0x0000000004dfbea4a,0x0000000000000000,0x01cb0000000000000,0x0000000000000000,0x0000000004e000000},
+ { 0x0000000000001a56,0x0000000d0032c0c49,0x00000000026aa5a7,0x00000000007cf6c6c,0x0000000000000000,0x0000000d040000000,0x00000000026a0000,0x00000000007d00000},
+ { 0x00000000000faa00,0x0048dbf78e22d3cd7,0x000008dafed155d0,0x000001ffb47117702,0x0000000000000000,0x0048e000000000000,0x000008d800000000,0x00000200000000000},
+ { 0x0000000000000060,0x00333f69decf87f47,0x000000ce0ee910ab,0x00000219bafb8f535,0x0000000000000000,0x00334000000000000,0x000000c000000000,0x0000021a000000000},
+ { 0x0000000000000256,0x001bed7a2e5a7bca8,0x00000000000004d6,0x00000000a18bc51a5,0x0000000000000000,0x001bf000000000000,0x0000000000000000,0x00000000a1c000000},
+ { 0x00000000000f2d3b,0x000de58086565d3f9,0x000000000028e0f0,0x00000000081a922ef,0x0000000000000000,0x000de800000000000,0x0000000000000000,0x00000000081c00000},
+ { 0x0000000000074852,0x0000cb00a86898d86,0x0000000032273ea0,0x00000000143448d94,0x0000000000000000,0x0000cb40000000000,0x0000000032000000,0x00000000143800000},
+ { 0x00000000e5f8ee86,0x001911d2d83d151c1,0x000069fbeb081749,0x00001852cbbe61ae9,0x0000000000000000,0x00191800000000000,0x0000698000000000,0x00001858000000000},
+ { 0x0000000000000020,0x00597f60270c8ca02,0x0000000000001fa5,0x00000000003698667,0x0000000000000000,0x00598000000000000,0x0000000000000000,0x000000000036a0000},
+ { 0x00000000000008d7,0x007c02790b11069d7,0x00000000000b78ca,0x000034a5600433d20,0x0000000000000000,0x007c2000000000000,0x0000000000000000,0x000034b0000000000},
+ { 0x000000000000000a,0x000d8e3d78772f981,0x0000270274de991a,0x0001ebd23e2d44933,0x0000000000000000,0x000d9000000000000,0x0000200000000000,0x0001ec00000000000},
+ { 0x0000000003aeb0fd,0x001911394cf02fd09,0x0000000010d8e4db,0x000000000a254c473,0x0000000000000000,0x00191800000000000,0x0000000010c00000,0x000000000a2800000},
+ { 0x000001daee00e269,0x00d354976c8cab814,0x00000387dcf2f031,0x00001d91e21705c2f,0x0000000000000000,0x00d38000000000000,0x0000038000000000,0x00001d98000000000},
+ { 0x00000000000e683e,0x03a5aa0638d36df36,0x0000000073cb4799,0x000003e55b1690c63,0x0000000000000000,0x03a60000000000000,0x0000000000000000,0x000003e6000000000},
+ { 0x0000000000086f88,0x0000831a3c9682023,0x0000000001316518,0x000000000ba6a52eb,0x0000000000000000,0x00008340000000000,0x0000000001000000,0x000000000ba800000},
+ { 0x000000000000001a,0x0000e3621b65856fb,0x00000000000068b7,0x000003a56da228170,0x0000000000000000,0x0000e380000000000,0x0000000000000000,0x000003a6000000000},
+ { 0x0000000000003a71,0x03d9b8fa8bbcbb697,0x0000000000005a8b,0x0003c3208c8815b90,0x0000000000000000,0x03da0000000000000,0x0000000000000000,0x0003c400000000000},
+ { 0x00000000000184f7,0x000031f686b762aae,0x000000005d848e75,0x00000002416edf4fa,0x0000000000000000,0x00003200000000000,0x0000000050000000,0x00000002420000000},
+ { 0x0000000000000032,0x0000000001b517770,0x0000000000003191,0x0000000000001c597,0x0000000000000000,0x0000000001b580000,0x0000000000003180,0x0000000000001c600},
+ { 0x000000000000000c,0x000120173bb8fe340,0x0000000000000024,0x000000000108de7ba,0x0000000000000000,0x00012080000000000,0x0000000000000000,0x00000000010900000},
+ { 0x000000001985a542,0x0016f5da316a1e8e9,0x000000004b1b6aab,0x00000011573f4dd82,0x0000000000000000,0x0016f800000000000,0x0000000000000000,0x00000011580000000},
+ { 0x0000000000000004,0x00002be790e16a959,0x0000000000000040,0x0000000018f52cbd8,0x0000000000000000,0x00002bf0000000000,0x0000000000000000,0x0000000018f800000},
+ { 0x0000000000000339,0x008d0c34ba21e6688,0x0000000000000426,0x00000b5ab9cb8dc77,0x0000000000000000,0x008d4000000000000,0x0000000000000000,0x00000b5c000000000},
+ { 0x0000000000000696,0x0190bd01dacec5057,0x0000000003e75878,0x000000071cb354d23,0x0000000000000000,0x01910000000000000,0x0000000000000000,0x000000071e0000000},
+ { 0x00000000000014ee,0x0005b68fa960b0306,0x000000000000b724,0x000041af1188cf9d3,0x0000000000000000,0x0005b800000000000,0x0000000000000000,0x000041c0000000000},
+ { 0x0000000000000011,0x00003f502a79b1013,0x0000000000000126,0x000000000000d265c,0x0000000000000000,0x00003f60000000000,0x0000000000000000,0x000000000000d2800},
+ { 0x0000000000000001,0x000000bd532b70dec,0x00000000000006c3,0x0000000001d801d0a,0x0000000000000000,0x000000bd800000000,0x0000000000000000,0x0000000001d880000},
+ { 0x0000000000002b9a,0x000000cec10ec9f83,0x0000000000037c7b,0x000000001e15fec37,0x0000000000000000,0x000000cf000000000,0x0000000000000000,0x000000001e1800000},
+ { 0x0000000000038d2c,0x00000012f77f616a5,0x00000000db4680c9,0x00000005b9e898dbc,0x0000000000000000,0x00000012f80000000,0x00000000c0000000,0x00000005ba0000000},
+ { 0x0000000000000005,0x052f0c3d7d8b1b0e1,0x000000000000000d,0x000dcfd768302786f,0x0000000000000000,0x05300000000000000,0x0000000000000000,0x000dd000000000000},
+ { 0x000000000000005d,0x00004d9bd563abdf4,0x00000001a6b6e96e,0x00000018d23079bbd,0x0000000000000000,0x00004da0000000000,0x0000000180000000,0x00000018d80000000},
+ { 0x000000000000219b,0x04ef6fbc36cd68a29,0x00000001b2ffe23f,0x0000021574d157c03,0x0000000000000000,0x04f00000000000000,0x0000000000000000,0x00000216000000000},
+ { 0x000000000000002d,0x000077abd7831dcec,0x000000000000330f,0x000027e9be8ff967d,0x0000000000000000,0x000077c0000000000,0x0000000000000000,0x000027f0000000000},
+ { 0x0000000000000019,0x0000001eeab17f9d6,0x000000000000746a,0x0000000576d48c4af,0x0000000000000000,0x0000001ef00000000,0x0000000000000000,0x00000005780000000},
+ { 0x0000000000000000,0x02fc2e62b40602446,0x000000000000001b,0x0027be8bc300e15fb,0x0000000000000000,0x02fd0000000000000,0x0000000000000000,0x0027c000000000000},
+ { 0x00000000aee33f90,0x00000125769459872,0x0000000160cb644b,0x000000a7e9cdffbc8,0x0000000000000000,0x00000125800000000,0x0000000000000000,0x000000a8000000000},
+ { 0x0000000000000000,0x000000197c2048af8,0x0000000000000000,0x00000000000000001,0x0000000000000000,0x00000019800000000,0x0000000000000000,0x00000000000000001},
+ { 0x0000000000000039,0x000000553d3e75637,0x0000000000000370,0x00000003d36862477,0x0000000000000000,0x00000055400000000,0x0000000000000000,0x00000003d40000000},
+ { 0x004ccba2eaf4a634,0x004ddf92b7d755d12,0x00b9b6a3f45a8878,0x003a86e4d824d25a8,0x004c000000000000,0x004de000000000000,0x00b9000000000000,0x003a9000000000000},
+ { 0x00000000004acbc5,0x00003796d86b708fd,0x000000001a844301,0x000000af156621d11,0x0000000000000000,0x000037a0000000000,0x0000000000000000,0x000000af400000000},
+ { 0x000000f596ddff3f,0x000e362e67c7e124d,0x00001516e09d68bc,0x00094d11aae4390dd,0x0000000000000000,0x000e3800000000000,0x0000000000000000,0x00095000000000000},
+ { 0x00000000000006e0,0x0001aca9d685c805c,0x000000001e30f4c5,0x000005a8e5c7a3174,0x0000000000000000,0x0001ad00000000000,0x0000000000000000,0x000005aa000000000},
+ { 0x000000000187a3f3,0x00cfa3a2229ec11ca,0x000000005cab93de,0x00000006e5c489801,0x0000000000000000,0x00cfc000000000000,0x0000000040000000,0x00000006e60000000},
+ { 0x0000000000000df0,0x090083a5d02857352,0x00000000006b70c7,0x000000050b2998bcb,0x0000000000000000,0x09040000000000000,0x0000000000000000,0x000000050c0000000},
+ { 0x000000000000e73b,0x00000000786e90f2e,0x0000000000372808,0x0000000000e254101,0x0000000000000000,0x00000000788000000,0x0000000000340000,0x0000000000e280000},
+ { 0x0000000aaa7c9022,0x00314d5e7fda16338,0x0000071265a341f4,0x0000011db4694638d,0x0000000000000000,0x00315000000000000,0x0000071000000000,0x0000011dc00000000},
+ { 0x0000000000001930,0x035ecb29ef60e4e75,0x000000b74dc1c6f0,0x000000921ad16ff27,0x0000000000000000,0x035f0000000000000,0x000000b400000000,0x00000092400000000},
+ { 0x0000000000005d6c,0x00001ade1342af8db,0x0000000002fd659a,0x00000000078409961,0x0000000000000000,0x00001ae0000000000,0x0000000002e00000,0x00000000078600000},
+ { 0x0000000000001c63,0x000af1990f9f6fe32,0x000091ee7051d33f,0x0008c5834d62627ca,0x0000000000000000,0x000af400000000000,0x0000800000000000,0x0008c800000000000},
+ { 0x00000000009156ca,0x000078a0b8631acff,0x000000000091ff95,0x00000107e25a86584,0x0000000000000000,0x000078c0000000000,0x0000000000000000,0x00000108000000000},
+ { 0x000000000000913c,0x030905097086617c2,0x000000000349e8d8,0x00c30ec189ae3c099,0x0000000000000000,0x030a0000000000000,0x0000000000000000,0x00c34000000000000},
+ { 0x0000000000000076,0x0000000000f219ec6,0x000000000006b942,0x000000000012a241c,0x0000000000000000,0x0000000000f240000,0x0000000000068000,0x000000000012a8000},
+ { 0x0000000018c77009,0x0001667b385c81c81,0x0000000019cc3129,0x0000000016a1684f7,0x0000000000000000,0x00016680000000000,0x0000000019800000,0x0000000016a800000},
+ { 0x0000000000000069,0x0000000722729c17d,0x000000000f68a141,0x000000007ea741dbe,0x0000000000000000,0x00000007240000000,0x000000000e000000,0x000000007ec000000},
+ { 0x00000000000ab724,0x006d3768e6ca4b532,0x000000000019c5e2,0x00000000003df413b,0x0000000000000000,0x006d4000000000000,0x0000000000190000,0x00000000003e00000},
+ { 0x0000000000000062,0x001409434d790dc58,0x00000000001ae81d,0x000000a3104e37ea7,0x0000000000000000,0x00141000000000000,0x0000000000000000,0x000000a3400000000},
+ { 0x00000000000015dd,0x008464b3570f56104,0x00000000015811a1,0x0006b6352c1ebcbb2,0x0000000000000000,0x00848000000000000,0x0000000000000000,0x0006b800000000000},
+ { 0x0000000000000001,0x012f311de13dcf393,0x00000000001f91fd,0x00000c8a91da6801a,0x0000000000000000,0x012f8000000000000,0x0000000000000000,0x00000c8c000000000},
+ { 0x0000000000000010,0x0000000001d8b4a02,0x0000000000000039,0x00000000000001dba,0x0000000000000000,0x0000000001d900000,0x0000000000000038,0x00000000000001dc0},
+ { 0x000000000001088f,0x0000044a0196a4c04,0x000000000058c51a,0x0000000000837c898,0x0000000000000000,0x0000044c000000000,0x0000000000580000,0x00000000008380000},
+ { 0x0000000000016b7e,0x0002dd0d09a5c837d,0x00000000243a93e6,0x00001d0f052459196,0x0000000000000000,0x0002de00000000000,0x0000000000000000,0x00001d10000000000},
+ { 0x0000000000000001,0x0000000002a2e3e57,0x000000000017db6a,0x0000000000b6d4247,0x0000000000000000,0x0000000002a300000,0x0000000000140000,0x0000000000b700000},
+ { 0x0000000000000022,0x000839c6cb24f0158,0x0000000000000628,0x0000000073bd44a33,0x0000000000000000,0x00083c00000000000,0x0000000000000000,0x0000000073c000000},
+ { 0x0000000000000003,0x0000000000004e49b,0x0000000000000318,0x0000000000000058a,0x0000000000000000,0x0000000000004e600,0x0000000000000318,0x0000000000000058a},
+ { 0x000000000006d2ba,0x00f5f815b3a51c7a4,0x00000fe875272298,0x000f98042940308eb,0x0000000000000000,0x00f60000000000000,0x0000000000000000,0x000f9c00000000000},
+ { 0x000000000015f8d0,0x00000968661dfa073,0x00000000006282e3,0x0000008797436fd69,0x0000000000000000,0x0000096c000000000,0x0000000000000000,0x00000087c00000000},
+ { 0x00000000000000b5,0x00000001a224be008,0x0000000025fa592f,0x00000000059f1b1aa,0x0000000000000000,0x00000001a28000000,0x0000000025f00000,0x0000000005a000000},
+ { 0x0000000000000000,0x0000000001f8781bf,0x000000000000000e,0x00000000015085486,0x0000000000000000,0x0000000001f880000,0x0000000000000000,0x00000000015100000},
+ { 0x0000000000000075,0x000cbae548db970cf,0x0000000000000189,0x0000000000a4ee571,0x0000000000000000,0x000cbc00000000000,0x0000000000000000,0x0000000000a500000},
+ { 0x000000000000077f,0x0000016b40868c69e,0x000000000000478e,0x00000032729081d10,0x0000000000000000,0x0000016b800000000,0x0000000000000000,0x00000032800000000},
+ { 0x00000000000003f3,0x00000008ce63bc4c8,0x00000000000004c5,0x00000000e0597d33c,0x0000000000000000,0x00000008d00000000,0x0000000000000000,0x00000000e08000000},
+ { 0x0000000000000e1d,0x000000000255671df,0x000000000001f06f,0x000000000001cf15f,0x0000000000000000,0x00000000025600000,0x000000000001f000,0x000000000001cf800},
+ { 0x0000000000007b91,0x03e33e5af8dc54367,0x0000000000014f35,0x00000000b95203281,0x0000000000000000,0x03e40000000000000,0x0000000000000000,0x00000000b98000000},
+ { 0x0000000000000008,0x01934a819086050fa,0x00000000000002ee,0x0000004b302ddb475,0x0000000000000000,0x01938000000000000,0x0000000000000000,0x0000004b400000000},
+ { 0x0000000000000515,0x0f8cdfaa55d8d7cbb,0x00000000097e27c5,0x0002bc32b77f45af7,0x0000000000000000,0x0f900000000000000,0x0000000000000000,0x0002bd00000000000},
+ { 0x000000000002943c,0x08f1cd3b292b0b5a5,0x0000001d7e4a80be,0x000000038caa3beab,0x0000000000000000,0x08f40000000000000,0x0000001d78000000,0x000000038d0000000},
+ { 0x00000000000001a0,0x0001a2283bf27fe43,0x00000000000c8098,0x000000002134698c5,0x0000000000000000,0x0001a280000000000,0x0000000000000000,0x00000000214000000},
+ { 0x0000000000000003,0x000005497a40b5cd7,0x00000000000f3973,0x000000000b96669cb,0x0000000000000000,0x0000054a000000000,0x0000000000000000,0x000000000b9800000},
+ { 0x0000000000000388,0x0774216d78580af30,0x0000000000027bd8,0x0000000030bde7f45,0x0000000000000000,0x07760000000000000,0x0000000000000000,0x0000000030c000000},
+ { 0x0000000000000145,0x02e0ac7ebadf0b27c,0x00000015abadfaad,0x00036612e16f78750,0x0000000000000000,0x02e10000000000000,0x0000000000000000,0x00036700000000000},
+ { 0x0000000000000012,0x000000000033c25c0,0x0000000000000019,0x00000000000dc91d7,0x0000000000000000,0x000000000033d0000,0x0000000000000000,0x00000000000dcc000},
+ { 0x000000000000000f,0x006fb3630b7da282a,0x000000000047b487,0x000004834ad5f9681,0x0000000000000000,0x006fc000000000000,0x0000000000000000,0x00000484000000000},
+ { 0x0000000000000015,0x014b3be9cc54b72da,0x00000000000006ee,0x000000000310c0b6d,0x0000000000000000,0x014b8000000000000,0x0000000000000000,0x00000000031100000},
+ { 0x0000000000000035,0x000000000026a80eb,0x00000000000000e8,0x00000000000000162,0x0000000000000000,0x000000000026b0000,0x00000000000000e8,0x00000000000000162},
+ { 0x000000000838eeff,0x00009dd83779e6a84,0x0000005452902204,0x00000006f49ff8895,0x0000000000000000,0x00009e00000000000,0x0000005450000000,0x00000006f50000000},
+ { 0x00000000000003e7,0x000000000830895b5,0x000000000003cc7b,0x00000000029d4ff88,0x0000000000000000,0x00000000083400000,0x0000000000000000,0x00000000029e00000},
+ { 0x0000000000000000,0x00538b7b5988b4bde,0x0000000000025bf3,0x000000e6999ada15f,0x0000000000000000,0x0053a000000000000,0x0000000000000000,0x000000e6c00000000},
+ { 0x0000000000010e2e,0x000000003b0d48f64,0x000000001ecccbc4,0x000000001e12327db,0x0000000000000000,0x000000003b1000000,0x000000001e800000,0x000000001e1800000},
+ { 0x000000000000020b,0x000000005220f84de,0x00000000001ba876,0x000000000299e1285,0x0000000000000000,0x00000000524000000,0x0000000000100000,0x00000000029a00000},
+ { 0x0000000000000003,0x000000017aa390fde,0x000000000000078d,0x000000000001acbe8,0x0000000000000000,0x000000017b0000000,0x0000000000000000,0x000000000001ad000},
+ { 0x0000000000000037,0x0000000fae5f91fe7,0x00000016b6622685,0x0000000664668b88e,0x0000000000000000,0x0000000fb00000000,0x00000016a0000000,0x00000006660000000},
+ { 0x0000000000000019,0x00000ba7594052411,0x000000048c39edaf,0x000000006f880a656,0x0000000000000000,0x00000ba8000000000,0x000000048c000000,0x000000006f9000000},
+ { 0x000000000000006c,0x00000aa9473dabc1b,0x000000000000008a,0x000000000000001ec,0x0000000000000000,0x00000aac000000000,0x000000000000008a,0x000000000000001ec},
+ { 0x0000000000000000,0x0017961db4fbb0d7c,0x0000000000000160,0x00000000000d1306a,0x0000000000000000,0x00179800000000000,0x0000000000000000,0x00000000000d14000},
+ { 0x000000000007ec0c,0x02bc6ce7305f8c9c2,0x002417cac8f51a7b,0x014e6c50edf32a2dc,0x0000000000000000,0x02bd0000000000000,0x0020000000000000,0x014e8000000000000},
+ { 0x000000000002d50f,0x00001b5e9082f298a,0x000000000014eced,0x00000000542306a60,0x0000000000000000,0x00001b60000000000,0x0000000000000000,0x00000000544000000},
+ { 0x0000000000000078,0x00000000002968d94,0x00000000000048d4,0x000000000017180ed,0x0000000000000000,0x00000000002970000,0x0000000000000000,0x00000000001720000},
+ { 0x00000000112c575f,0x00d0d1e685ddf286c,0x00000043f42c9b06,0x003740c615b5edd65,0x0000000000000000,0x00d10000000000000,0x0000000000000000,0x00375000000000000},
+ { 0x000000001b39b460,0x000002ea1741e3da7,0x000000003df7a3c8,0x0000004ffe1a9425a,0x0000000000000000,0x000002eb000000000,0x0000000000000000,0x00000050000000000},
+ { 0x0000000000000008,0x0000b0ef34c12529c,0x0000000000008e68,0x00000000f5fdcbe2b,0x0000000000000000,0x0000b100000000000,0x0000000000000000,0x00000000f60000000},
+ { 0x000000000000000b,0x00000006bdddfc6e9,0x0000000003ffb935,0x0000000065ca12c9f,0x0000000000000000,0x00000006be0000000,0x0000000002000000,0x0000000065e000000},
+ { 0x00000000000000ec,0x00000cd934637a064,0x00000000003c6ee4,0x000000000004893b7,0x0000000000000000,0x00000cdc000000000,0x00000000003c6c00,0x00000000000489400},
+ { 0x0000000000013b74,0x01cb6056430a2ab58,0x000000a40ad83d2a,0x0003b1577658b2490,0x0000000000000000,0x01cb8000000000000,0x0000000000000000,0x0003b200000000000},
+ { 0x0000000000000076,0x0002ccc72b7b71847,0x00001f1259f4e5d6,0x000018bdff6e62a6f,0x0000000000000000,0x0002cd00000000000,0x00001f0000000000,0x000018c0000000000},
+ { 0x0000000000000707,0x0045989b4a2766724,0x0000000000005094,0x003a1a341f7fb70b9,0x0000000000000000,0x0045a000000000000,0x0000000000000000,0x003a2000000000000},
+ { 0x0000000000000a84,0x000000014e55a7867,0x0000000000003075,0x000000000001e6b66,0x0000000000000000,0x000000014e8000000,0x0000000000003000,0x000000000001e7000},
+ { 0x000000000000000e,0x000005c18936dd0e5,0x00000000000a87fc,0x0000000012d0853dd,0x0000000000000000,0x000005c2000000000,0x0000000000000000,0x0000000012d800000},
+ { 0x0000000000015627,0x0002942548aff395f,0x00000000001d386d,0x0000000177bd6f24d,0x0000000000000000,0x00029500000000000,0x0000000000000000,0x00000001780000000},
+ { 0x0000000000000003,0x000003a016040052f,0x0000000000007817,0x0000025b4f18a69d6,0x0000000000000000,0x000003a1000000000,0x0000000000000000,0x0000025c000000000},
+ { 0x000000000003db9a,0x000ed7935a17c89b6,0x000000000018d57f,0x000000000043d71cf,0x0000000000000000,0x000ed800000000000,0x0000000000180000,0x000000000043e0000},
+ { 0x000000002c48d04d,0x0b1945dc9794c41a8,0x00000659f7d39b4b,0x000000786c67a5070,0x0000000000000000,0x0b1c0000000000000,0x0000065980000000,0x00000078700000000},
+ { 0x0000000000000002,0x05d80e471bb852446,0x000000000000000f,0x0038453e79d4755a8,0x0000000000000000,0x05da0000000000000,0x0000000000000000,0x00385000000000000},
+ { 0x00000000000001d9,0x00000000000366f9c,0x0000000000000258,0x00000000000001639,0x0000000000000000,0x00000000000367000,0x0000000000000258,0x00000000000001640},
+ { 0x000000000000009e,0x000000001e35ab38d,0x00000000000000dc,0x000000000000aa928,0x0000000000000000,0x000000001e3800000,0x0000000000000000,0x000000000000aac00},
+ { 0x000000000000003c,0x0000324b6cfa3b7a1,0x0000000000000ab9,0x000000b4b53b5e6e8,0x0000000000000000,0x00003250000000000,0x0000000000000000,0x000000b4c00000000},
+ { 0x0000000000000038,0x00000000002b2f98f,0x00000000000003a8,0x000000000000018d1,0x0000000000000000,0x00000000002b30000,0x00000000000003a8,0x000000000000018d8},
+ { 0x0000000000000dab,0x0000073e2528a46cf,0x0000000002e01ade,0x00000000010f4889c,0x0000000000000000,0x00000740000000000,0x0000000002e00000,0x00000000010f80000},
+ { 0x0000000000002587,0x00000c6ab8604f3b2,0x00000001acbcc331,0x00000003e09eff4b9,0x0000000000000000,0x00000c6c000000000,0x00000001a0000000,0x00000003e10000000},
+ { 0x0000000000000001,0x0000134c5f6413d29,0x0000000000000007,0x00000000002d772ae,0x0000000000000000,0x00001350000000000,0x0000000000000000,0x00000000002d80000},
+ { 0x0000000000001fda,0x0001715562271552e,0x00000000000d6dde,0x0000013086742f29f,0x0000000000000000,0x00017180000000000,0x0000000000000000,0x00000131000000000},
+ { 0x000000000001726f,0x000432796ef0112fa,0x0000008be7472953,0x00000c3eb87b88ddd,0x0000000000000000,0x00043400000000000,0x0000008000000000,0x00000c40000000000},
+ { 0x0000000000000014,0x000000001d774aff2,0x00000000000038ce,0x0000000004b7d2767,0x0000000000000000,0x000000001d7800000,0x0000000000000000,0x0000000004b800000},
+ { 0x00000000000005f8,0x0abde7b492595b8d8,0x00000000000a8aa1,0x0000006c41d9854a1,0x0000000000000000,0x0ac00000000000000,0x0000000000000000,0x0000006c600000000},
+ { 0x0000000000000be0,0x04349e228fcb61f25,0x0000000000062fc8,0x000000000000ea6d4,0x0000000000000000,0x04360000000000000,0x0000000000062c00,0x000000000000ea800},
+ { 0x0000000000000007,0x0000030c482b64cb4,0x000000000000000d,0x00000000000432cab,0x0000000000000000,0x0000030d000000000,0x0000000000000000,0x00000000000434000},
+ { 0x00000000000ba71d,0x000007ab39ef59818,0x000005d0a93ee2b1,0x000002d68f9d4a2b1,0x0000000000000000,0x000007ac000000000,0x000005d000000000,0x000002d7000000000},
+ { 0x00000001abfdf33e,0x004fc118985b2c38b,0x00007c0195aaa6db,0x00015bc2d1a6579a8,0x0000000000000000,0x004fe000000000000,0x0000780000000000,0x00015c00000000000},
+ { 0x000000000000fcf2,0x007e1c171a834b1f8,0x01301289ca6f5b6d,0x0028e158e3a1d9f26,0x0000000000000000,0x007e2000000000000,0x0130000000000000,0x0028e800000000000},
+ { 0x0000000000003088,0x00000b8e893f2c466,0x0000000000017ba4,0x000000000003afac6,0x0000000000000000,0x00000b90000000000,0x0000000000017000,0x000000000003b0000},
+ { 0x000000000018a8ab,0x000527f7493e8314b,0x00000001292dd8ee,0x0001293b227aa6e23,0x0000000000000000,0x00052800000000000,0x0000000000000000,0x00012980000000000},
+ { 0x0000000000000001,0x003051a05cb0779d6,0x000000000fab191a,0x00111dcbc4dff1092,0x0000000000000000,0x00306000000000000,0x0000000000000000,0x00112000000000000},
+ { 0x00000006f8f0e371,0x0000b4b09e53742c2,0x0000000f7f3e95aa,0x0000002c2fe84a4a8,0x0000000000000000,0x0000b4c0000000000,0x0000000f00000000,0x0000002c300000000},
+ { 0x0000000000000093,0x06b0ad27481f83427,0x0000000000009147,0x0177a87eea8f42073,0x0000000000000000,0x06b20000000000000,0x0000000000000000,0x01780000000000000},
+ { 0x000000000000000d,0x000e51b49f4b7ce03,0x000000000d1dccdc,0x0000001fe5a54f9c5,0x0000000000000000,0x000e5400000000000,0x0000000000000000,0x0000001fe80000000},
+ { 0x0000000000000000,0x02666fdcbe84593e5,0x0000000000000002,0x0000000000186ee3a,0x0000000000000000,0x02670000000000000,0x0000000000000000,0x00000000001870000},
+ { 0x0000000000000005,0x000002589b5469cc3,0x0000000554501f17,0x000000048a9760096,0x0000000000000000,0x00000259000000000,0x0000000540000000,0x000000048c0000000},
+ { 0x0000000001e62abb,0x005bf675b8808bbc6,0x0000000e4a5642e9,0x000000022d8308492,0x0000000000000000,0x005c0000000000000,0x0000000e48000000,0x000000022e0000000},
+ { 0x0000000000007b52,0x00010e2e948e7ec30,0x00000000005c12da,0x000005e74d8a218dc,0x0000000000000000,0x00010e80000000000,0x0000000000000000,0x000005e8000000000},
+ { 0x000000000000001f,0x002fde4a9d46912d7,0x00000000033533d6,0x0000003325edfc27f,0x0000000000000000,0x002fe000000000000,0x0000000000000000,0x00000033300000000},
+ { 0x00000097b9de076b,0x00de15b0ca8650eaa,0x00000247bdcdb029,0x009c2088b8aa5a12d,0x0000000000000000,0x00de4000000000000,0x0000000000000000,0x009c4000000000000},
+ { 0x00000000000001e1,0x000000b3755c80309,0x0000000001e12be9,0x00000000008005e98,0x0000000000000000,0x000000b3800000000,0x0000000001e00000,0x00000000008020000},
+ { 0x0000000000001144,0x000000000000c3b97,0x000000000000653b,0x000000000000ae8f4,0x0000000000001000,0x000000000000c3c00,0x0000000000006400,0x000000000000aec00},
+ { 0x000000000000036e,0x000000020c2e070e2,0x0000000000000fc0,0x0000000000218154d,0x0000000000000000,0x000000020d0000000,0x0000000000000000,0x00000000002190000},
+ { 0x0000000013d3c018,0x0000054c8d84d86af,0x000000c9df3588d4,0x000000b67eed607a5,0x0000000000000000,0x0000054e000000000,0x000000c800000000,0x000000b6800000000},
+ { 0x0000000000008ba5,0x00000000006604de6,0x000000000000b1de,0x00000000000768dac,0x0000000000000000,0x00000000006620000,0x000000000000a000,0x0000000000076a000},
+ { 0x000000000000a19f,0x0efd876b2a6183ea0,0x0000000000026b92,0x006807f2991fe3aa6,0x0000000000000000,0x0f000000000000000,0x0000000000000000,0x00682000000000000},
+ { 0x000000000000002c,0x0000e5d91a11dff2d,0x000000005f5df520,0x0000000023e65d4bf,0x0000000000000000,0x0000e600000000000,0x000000005f000000,0x0000000023e800000},
+ { 0x0000000000181824,0x00001eda4275057b4,0x000000105abaebff,0x0000003130d9be37e,0x0000000000000000,0x00001ee0000000000,0x0000001000000000,0x00000031400000000},
+ { 0x0000000000000002,0x0000000055367c946,0x000000000000003c,0x0000000002db70230,0x0000000000000000,0x00000000554000000,0x0000000000000000,0x0000000002dc00000},
+ { 0x0000001bfb4549b3,0x000103d7cafd2bea0,0x0000148757a89ea0,0x000003ad5ddf31310,0x0000000000000000,0x00010400000000000,0x0000148000000000,0x000003ae000000000},
+ { 0x0000000000000002,0x00000001b2c251996,0x00000000fc2a9220,0x0000000019a5f76a6,0x0000000000000000,0x00000001b30000000,0x00000000fc000000,0x0000000019a800000},
+ { 0x0000000000000015,0x00000000000250171,0x0000000000003ef3,0x0000000000000cae2,0x0000000000000000,0x00000000000251000,0x0000000000003ec0,0x0000000000000cb00},
+ { 0x00000000000055bf,0x00000000013b4944d,0x000000000000d82a,0x000000000001b8e3f,0x0000000000000000,0x00000000013b80000,0x000000000000d800,0x000000000001b9000},
+ { 0x000000000000eec5,0x000001f8b45db66d8,0x000000000c7ddf85,0x000000267e78572fa,0x0000000000000000,0x000001f9000000000,0x0000000000000000,0x00000026800000000},
+ { 0x00000000101c9e9e,0x014dca9528dc25f3e,0x000000043e29e05e,0x000000076254861fb,0x0000000000000000,0x014e0000000000000,0x0000000420000000,0x00000007640000000},
+ { 0x00000000005864d2,0x000410817001e7a6f,0x000000008314e56b,0x00002c46632c225c3,0x0000000000000000,0x00041200000000000,0x0000000000000000,0x00002c50000000000},
+ { 0x0000000000118519,0x04bae29d9ed20161d,0x000900cd1ae43360,0x00009eb0c6e55fe0d,0x0000000000000000,0x04bc0000000000000,0x000900c000000000,0x00009eb4000000000},
+ { 0x0000000018278476,0x0000115dc63fa274d,0x0000000e4db007f3,0x00000001dbffc2504,0x0000000000000000,0x00001160000000000,0x0000000e4c000000,0x00000001dc0000000},
+ { 0x0000000000000003,0x000ff116d53c89496,0x0001f0253fc6d1e8,0x0002c9155fc909c55,0x0000000000000000,0x000ff400000000000,0x0001f00000000000,0x0002ca00000000000},
+ { 0x0000000000024243,0x000fc1a95231a0118,0x0000006ddb7f5cad,0x000000155fa801a13,0x0000000000000000,0x000fc400000000000,0x0000006dc0000000,0x00000015600000000},
+ { 0x0000000004c74a00,0x008767def6e08d4f4,0x000000000b4bdc9c,0x00000379abe110b98,0x0000000000000000,0x00878000000000000,0x0000000000000000,0x0000037a000000000},
+ { 0x0000000000000003,0x00000000000f0b0f0,0x000000000000003a,0x00000000000000910,0x0000000000000000,0x00000000000f0c000,0x000000000000003a,0x00000000000000910},
+ { 0x0000000000000017,0x0000000000000930e,0x000000000000004e,0x00000000000001fe2,0x0000000000000000,0x00000000000009340,0x0000000000000048,0x00000000000001fe8},
+ { 0x0000000000000053,0x0000a46612972b68c,0x0000000000196d47,0x0000000e5c432ed11,0x0000000000000000,0x0000a480000000000,0x0000000000000000,0x0000000e600000000},
+ { 0x0000000000006216,0x00001598faec25d4a,0x0000000000027d4f,0x000009ede069affe1,0x0000000000000000,0x000015a0000000000,0x0000000000000000,0x000009f0000000000},
+ { 0x0000000000210507,0x01344cdc5848dee64,0x001705fde22b6bd0,0x000ac9220047307f8,0x0000000000000000,0x01348000000000000,0x0017000000000000,0x000acc00000000000},
+ { 0x000000000011fdc7,0x00000720ae62d208d,0x000000000673895d,0x0000000d2579d1ea3,0x0000000000000000,0x00000722000000000,0x0000000000000000,0x0000000d280000000},
+ { 0x0000000000000003,0x00004f7178ef77e27,0x00000000019f875b,0x000001381a17af51d,0x0000000000000000,0x00004f80000000000,0x0000000000000000,0x00000138800000000},
+ { 0x0000000000199bfa,0x0002f88ef42b82042,0x0000000000918db7,0x0000000018f79ef8d,0x0000000000000000,0x0002f900000000000,0x0000000000800000,0x0000000018f800000},
+ { 0x000000000001f27e,0x00000030f389be287,0x0000000000b65533,0x00000000112e365d2,0x0000000000000000,0x00000031000000000,0x0000000000800000,0x00000000113000000},
+ { 0x0000000000001d82,0x0000b07ee81120b97,0x000000000001160b,0x00000000950a50afd,0x0000000000000000,0x0000b080000000000,0x0000000000000000,0x00000000954000000},
+ { 0x0000000000000011,0x0000000000b7d7f55,0x000000000000001c,0x000000000000547de,0x0000000000000000,0x0000000000b800000,0x0000000000000000,0x00000000000054800},
+ { 0x0000000000001e10,0x00000008d50aa3808,0x000000000003f9fd,0x000000000085cbcf9,0x0000000000000000,0x00000008d80000000,0x0000000000000000,0x00000000008600000},
+ { 0x0000000cbbf3e051,0x00e1f9d8c21fd2e70,0x00000d3689ef9651,0x000012422273cf0f3,0x0000000000000000,0x00e20000000000000,0x00000d0000000000,0x00001248000000000},
+ { 0x0000000000000001,0x000a89d88c842f0e9,0x000000005b73d829,0x0000aef54a71fc9d5,0x0000000000000000,0x000a8c00000000000,0x0000000000000000,0x0000af00000000000},
+ { 0x0000000000000008,0x0000000046d04b006,0x000000000000003c,0x000000000005de121,0x0000000000000000,0x0000000046e000000,0x0000000000000000,0x000000000005e0000},
+ { 0x0000000001ab1d78,0x00797d7a311416b91,0x00000019bd1f82b4,0x000000033fce797bc,0x0000000000000000,0x00798000000000000,0x00000019b8000000,0x00000003400000000},
+ { 0x000000000000002e,0x0000c9fde647c4903,0x000000000012dd76,0x000000015b27c681b,0x0000000000000000,0x0000ca00000000000,0x0000000000000000,0x000000015b8000000},
+ { 0x0000000000013055,0x06c624c80b4964caf,0x000000000008fa54,0x000000000012d4b39,0x0000000000000000,0x06c80000000000000,0x0000000000088000,0x000000000012d8000},
+ { 0x0000000000000010,0x00107df71ddde7fb5,0x000000000001feb8,0x0000022e93326cfc3,0x0000000000000000,0x00108000000000000,0x0000000000000000,0x0000022f000000000},
+ { 0x00000000000003bf,0x0cdcb6146388b0a4c,0x000000df037332ab,0x000746dc1db556c11,0x0000000000000000,0x0ce00000000000000,0x0000000000000000,0x00074800000000000},
+ { 0x0000000000025389,0x001626c2f2255bb34,0x0000000000b19b52,0x000002f157b06c181,0x0000000000000000,0x00162800000000000,0x0000000000000000,0x000002f2000000000},
+ { 0x000000000000003f,0x0ef28cb4c84eb0781,0x000000d40049f0d0,0x000008b3a48ff5c75,0x0000000000000000,0x0ef40000000000000,0x000000c000000000,0x000008b4000000000},
+ { 0x00000001d4377caf,0x005a2e725894894b3,0x00003544a9bc3369,0x000078eb83ba9d2fa,0x0000000000000000,0x005a4000000000000,0x0000340000000000,0x00007900000000000},
+ { 0x0000000000000019,0x00001f3909a4cd481,0x0000000000067d60,0x0000000439bde7063,0x0000000000000000,0x00001f40000000000,0x0000000000000000,0x000000043a0000000},
+ { 0x000000000004442d,0x00088935ad1935fb2,0x00000004475d059f,0x00000079d208b2592,0x0000000000000000,0x00088c00000000000,0x0000000400000000,0x00000079e00000000},
+ { 0x00000000000159af,0x000897e7af7f3d00c,0x00000000009827fe,0x00000000147b84125,0x0000000000000000,0x00089800000000000,0x0000000000800000,0x00000000148000000},
+ { 0x0000000000000010,0x000000003af9776db,0x0000000005035911,0x000000000060df4bb,0x0000000000000000,0x000000003b0000000,0x0000000005030000,0x000000000060e0000},
+ { 0x000000000000001f,0x0006d5e00b5e91b95,0x000000000000fc2c,0x00000000000157b56,0x0000000000000000,0x0006d600000000000,0x000000000000f800,0x00000000000158000},
+ { 0x0000000039cb9429,0x0000003962cc889de,0x00000000fb9d2be3,0x00000000d4d8a870c,0x0000000000000000,0x00000039700000000,0x00000000f8000000,0x00000000d50000000},
+ { 0x00000000000151e0,0x000002b2321052c5e,0x0000000000078666,0x0000000000eb043f0,0x0000000000000000,0x000002b3000000000,0x0000000000040000,0x0000000000eb40000},
+ { 0x0000000000000023,0x0001d21c25c0f2ee3,0x0000000000000168,0x00000000000764668,0x0000000000000000,0x0001d280000000000,0x0000000000000000,0x00000000000766000},
+ { 0x0000000000010b78,0x00001e6ef071dcaa1,0x00000037d979704a,0x0000003e1c5040d28,0x0000000000000000,0x00001e70000000000,0x0000003700000000,0x0000003e200000000},
+ { 0x000000000000266d,0x0000002debd442163,0x000000001dda5220,0x000000000d2687172,0x0000000000000000,0x0000002df00000000,0x000000001dc00000,0x000000000d2800000},
+ { 0x0000000000006d8f,0x00006458bba834c60,0x0000000017b93282,0x0000056a653c26c46,0x0000000000000000,0x00006460000000000,0x0000000000000000,0x0000056c000000000},
+ { 0x000000000000f299,0x026121f52eabd3c0c,0x00000000001df756,0x001e4ba6876260247,0x0000000000000000,0x02620000000000000,0x0000000000000000,0x001e5000000000000},
+ { 0x000000000000001f,0x01cb743f6ec54306e,0x000001a24511713c,0x000496b2d6553ce51,0x0000000000000000,0x01cb8000000000000,0x0000000000000000,0x00049800000000000},
+ { 0x000000000001c68b,0x0039c13ccb995bd12,0x00000000040ec69d,0x000000026df92bf0c,0x0000000000000000,0x0039d000000000000,0x0000000000000000,0x000000026e0000000},
+ { 0x0000000000000009,0x00000443e7b649599,0x0000000000000015,0x00000000000009622,0x0000000000000000,0x00000444000000000,0x0000000000000000,0x00000000000009640},
+ { 0x0000000000015638,0x0001e28b6bb48330a,0x0000000bcda53ad4,0x00006f8b0e7c9b755,0x0000000000000000,0x0001e300000000000,0x0000000000000000,0x00006fa0000000000},
+ { 0x000000000000001d,0x0001988b02ef0f89d,0x0000000001096d42,0x0000071156173af1e,0x0000000000000000,0x00019900000000000,0x0000000000000000,0x00000712000000000},
+ { 0x0000000000000003,0x00000078d601a2c3a,0x00000000001167d4,0x0000000015bb7e968,0x0000000000000000,0x00000078e00000000,0x0000000000000000,0x0000000015c000000},
+ { 0x00000000b3ab4ad2,0x0009b2db04c80eaab,0x000000da44e05c72,0x00000dc3a275a4ddc,0x0000000000000000,0x0009b400000000000,0x000000c000000000,0x00000dc4000000000},
+ { 0x000000000000003b,0x051974156e08e7ea7,0x0000000003e08267,0x000000016ff6a16a9,0x0000000000000000,0x051a0000000000000,0x0000000000000000,0x00000001700000000},
+ { 0x00000000000002b5,0x000005e05376f6bd6,0x00000000006735f9,0x000000151969d8bbd,0x0000000000000000,0x000005e2000000000,0x0000000000000000,0x00000015200000000},
+ { 0x0000000000000019,0x0000000c29201017f,0x000000000046eb51,0x000000017a3396765,0x0000000000000000,0x0000000c2c0000000,0x0000000000000000,0x000000017a8000000},
+ { 0x000000000000007c,0x0000001a13c2b8d98,0x00000000008be85c,0x0000000006e7fa566,0x0000000000000000,0x0000001a180000000,0x0000000000800000,0x0000000006e800000},
+ { 0x0000000000000006,0x00071d5ad5c2e8d92,0x0000041fed22009f,0x00008d8492e18ce51,0x0000000000000000,0x00071e00000000000,0x0000040000000000,0x00008dc0000000000},
+ { 0x0000000000000037,0x0023f80a269fd3cf7,0x0000000000001b6c,0x0000000005d638af1,0x0000000000000000,0x00240000000000000,0x0000000000000000,0x0000000005d800000},
+ { 0x0000000000000004,0x0001ed87501cfe0f2,0x0000000000000035,0x00000000000007317,0x0000000000000000,0x0001ee00000000000,0x0000000000000020,0x00000000000007320},
+ { 0x0000000000000007,0x0000000d15a49ad6d,0x0000000000051548,0x000000012f03ab55f,0x0000000000000000,0x0000000d180000000,0x0000000000000000,0x000000012f8000000},
+ { 0x0000000000000009,0x000000002fce673a8,0x000000000000008a,0x00000000019c129bc,0x0000000000000000,0x000000002fd000000,0x0000000000000000,0x00000000019c80000},
+ { 0x000000000000000e,0x0006fa0aa3812476f,0x000000000000002f,0x0000000000099d389,0x0000000000000000,0x0006fc00000000000,0x0000000000000000,0x000000000009a0000},
+ { 0x00000000000000f1,0x00197b45f6195bc77,0x00000000000033a0,0x00000000000045039,0x0000000000000000,0x00198000000000000,0x0000000000003200,0x00000000000045200},
+ { 0x0000000000007711,0x00e9c15e4bd93c467,0x0000000000008bf6,0x0000000000001d4c8,0x0000000000000000,0x00ea0000000000000,0x0000000000008b80,0x0000000000001d500},
+ { 0x0000000000000033,0x00000000000f3bd35,0x000000000000a1b1,0x0000000000018e9c3,0x0000000000000000,0x00000000000f3c000,0x000000000000a000,0x0000000000018f000},
+ { 0x00000000005fb927,0x0b3572859a37d6d00,0x0005cebc5dcb27a9,0x000232254fdb55d5a,0x0000000000000000,0x0b380000000000000,0x0005c80000000000,0x00023280000000000},
+ { 0x00000000016dc5c0,0x00000aa1ea09d6c80,0x00000000dae647f7,0x0000001371ddc03de,0x0000000000000000,0x00000aa4000000000,0x0000000080000000,0x00000013780000000},
+ { 0x0000000000000ef9,0x000000ddd08c484a7,0x00000000000049db,0x000000001bb2d0ad0,0x0000000000000000,0x000000de000000000,0x0000000000000000,0x000000001bb800000},
+ { 0x0000000000000aa3,0x00a190edc85257c9c,0x00000000007265e6,0x00000001ed5fdbc11,0x0000000000000000,0x00a1c000000000000,0x0000000000000000,0x00000001ed8000000},
+ { 0x0000000000000013,0x000000070669028a7,0x000000000005dcfa,0x00000000046db456f,0x0000000000000000,0x00000007080000000,0x0000000000000000,0x00000000046e00000},
+ { 0x00000074cccad434,0x0004127ba7640cc0a,0x000325dc3f7cbe7c,0x000086ce0ee95e6e1,0x0000000000000000,0x00041400000000000,0x0003240000000000,0x000086e0000000000},
+ { 0x000000000000000c,0x00047d24ab7156518,0x0000000001c69228,0x00001ae81a9c947f4,0x0000000000000000,0x00047e00000000000,0x0000000000000000,0x00001af0000000000},
+ { 0x0000000000000003,0x00003f4c8a3f31ec9,0x000000002df5c2e5,0x0000200ebfe54e182,0x0000000000000000,0x00003f50000000000,0x0000000000000000,0x00002010000000000},
+ { 0x000000000000009d,0x000000010ed002e73,0x000000000001aa0a,0x000000000014cfac9,0x0000000000000000,0x000000010f0000000,0x0000000000018000,0x000000000014d0000},
+ { 0x00000000000008bc,0x0027413655a747541,0x0000000000007beb,0x00000000003d2b39a,0x0000000000000000,0x00275000000000000,0x0000000000000000,0x00000000003d30000},
+ { 0x0000000000000002,0x000006ffe1512ad4f,0x000000000000000b,0x00000000380097125,0x0000000000000000,0x00000700000000000,0x0000000000000000,0x00000000381000000},
+ { 0x000000000000b2ce,0x000017103e1c00dd6,0x000000000003f06d,0x0000000000007f512,0x0000000000000000,0x00001718000000000,0x000000000003f000,0x0000000000007f600},
+ { 0x000000000000a233,0x00ec16ce56464afbe,0x0000012d98fcbd59,0x000066fdb265b3fae,0x0000000000000000,0x00ec4000000000000,0x0000000000000000,0x00006700000000000},
+ { 0x0000000000000095,0x00cb9e35eefe018f5,0x0000000000152182,0x0000000dd55f6dfc8,0x0000000000000000,0x00cbc000000000000,0x0000000000000000,0x0000000dd80000000},
+ { 0x0000000000000007,0x0007ee4b280d26477,0x00000000000115d0,0x0000000c72bb2e282,0x0000000000000000,0x0007f000000000000,0x0000000000000000,0x0000000c740000000},
+ { 0x0000000000003011,0x00001cc6e2d38d3c6,0x000000000028c08f,0x00000000c69b3c972,0x0000000000000000,0x00001cc8000000000,0x0000000000000000,0x00000000c6c000000},
+ { 0x0000000000003b36,0x0001e73d98ecde59d,0x000000a98af487af,0x0000003818d2350ab,0x0000000000000000,0x0001e780000000000,0x000000a900000000,0x00000038200000000},
+ { 0x0000000000000009,0x0000214122ca24e11,0x00000000043c3b9a,0x00000000bd0961948,0x0000000000000000,0x00002150000000000,0x0000000004000000,0x00000000bd4000000},
+ { 0x000000000000696f,0x0011d2a16a0f25936,0x0000000000273c7d,0x00000cfb2d6a5219e,0x0000000000000000,0x0011d800000000000,0x0000000000000000,0x00000cfc000000000},
+ { 0x000000000000009e,0x000013b1949ea9562,0x0000000000002620,0x00000000f4347af90,0x0000000000000000,0x000013b8000000000,0x0000000000000000,0x00000000f44000000},
+ { 0x00000000000003ee,0x00000000003a26e73,0x00000000000026ea,0x00000000000002a63,0x0000000000000000,0x00000000003a30000,0x00000000000026ea,0x00000000000002a63},
+ { 0x0000000000000002,0x00000016c91b6c74a,0x000000000000003d,0x0000000037439cbdf,0x0000000000000000,0x00000016d00000000,0x0000000000000000,0x00000000375000000},
+ { 0x0000000000000000,0x00000002e63f9da28,0x0000000000000001,0x00000000000000002,0x0000000000000000,0x00000002e70000000,0x0000000000000001,0x00000000000000002},
+ { 0x0000000000000002,0x00000000000272f80,0x0000000000015fd1,0x000000000000fc8f4,0x0000000000000000,0x00000000000273000,0x0000000000015c00,0x000000000000fcc00},
+ { 0x0000000000000003,0x00000071e13a42f49,0x000000000000681c,0x0000000000002f482,0x0000000000000000,0x00000072000000000,0x0000000000006800,0x0000000000002f500},
+ { 0x0000000000063eb7,0x00000fc1b71621fe3,0x0000001ef08a6759,0x00000235713c2373d,0x0000000000000000,0x00000fc4000000000,0x0000001000000000,0x00000236000000000},
+ { 0x000000000000009b,0x0000001d3fc1c67a9,0x00000000000000c0,0x00000000220cb97ed,0x0000000000000000,0x0000001d400000000,0x0000000000000000,0x00000000221000000},
+ { 0x0000000000095cdb,0x0000001fbe56a5621,0x000000000064faa1,0x00000000055f2efd8,0x0000000000000000,0x0000001fc00000000,0x0000000000600000,0x00000000056000000},
+ { 0x00000005218409d8,0x001770c2c6038d62f,0x0000bcc55f50a250,0x000db8c591aa5d9ad,0x0000000000000000,0x00177800000000000,0x0000800000000000,0x000dbc00000000000},
+ { 0x0000000000032c1f,0x05bf4c1aa9fb60dd5,0x00000000410f1c40,0x0004de02bdf7b2eff,0x0000000000000000,0x05c00000000000000,0x0000000000000000,0x0004e000000000000},
+ { 0x000000000000001d,0x0006e87bc6bbd0827,0x000000000278e000,0x0000493404800cc0b,0x0000000000000000,0x0006ea00000000000,0x0000000000000000,0x00004940000000000},
+ { 0x0000000000077a80,0x000b6b352fd45b90b,0x000000022050c9dc,0x00003e26d0e8fbcd7,0x0000000000000000,0x000b6c00000000000,0x0000000000000000,0x00003e30000000000},
+ { 0x000000003c4e5aa9,0x003ff7415b07f1526,0x00000163ab406174,0x00000019298832be6,0x0000000000000000,0x00400000000000000,0x00000163a0000000,0x000000192a0000000},
+ { 0x000000000000000b,0x0003a38ea19e8f0b7,0x00000000000040e6,0x00000000000425553,0x0000000000000000,0x0003a400000000000,0x0000000000004000,0x00000000000426000},
+ { 0x0000000000000020,0x000000d59a4c35665,0x0000000000000071,0x00000000000000ca0,0x0000000000000000,0x000000d5c00000000,0x0000000000000071,0x00000000000000ca0},
+ { 0x00000000069579b6,0x00000949fd39f2252,0x000000008eaa2931,0x000007e570fce8ea7,0x0000000000000000,0x0000094c000000000,0x0000000000000000,0x000007e6000000000},
+ { 0x000000000126fffc,0x07a8bde6c279f1953,0x00000000175ab841,0x000000002287b15db,0x0000000000000000,0x07aa0000000000000,0x0000000017000000,0x00000000229000000},
+ { 0x00000000000011c6,0x0001b462e2b53a43c,0x00000000023dc182,0x0000000000cfce1de,0x0000000000000000,0x0001b480000000000,0x00000000023c0000,0x0000000000d000000},
+ { 0x0000000000000004,0x00000000000786d66,0x0000000000000290,0x0000000000074abe9,0x0000000000000000,0x00000000000788000,0x0000000000000000,0x0000000000074c000},
+ { 0x0000000000000014,0x000000003bcf1248e,0x0000000010edcfea,0x000000000a7640d63,0x0000000000000000,0x000000003bd000000,0x0000000010c00000,0x000000000a7800000},
+ { 0x00000000000553d8,0x0000022ea5f48dec0,0x0000002a24985b51,0x000001f2bc9d90f4b,0x0000000000000000,0x0000022f000000000,0x0000002800000000,0x000001f3000000000},
+ { 0x000000000000a4cc,0x0000025863dd36b76,0x000000000a6a22db,0x00000063b452f5b38,0x0000000000000000,0x00000259000000000,0x0000000000000000,0x00000063c00000000},
+ { 0x00000000000ad297,0x02fbf2a11acc90a2f,0x000000000de09c7b,0x004244b59d00e465e,0x0000000000000000,0x02fc0000000000000,0x0000000000000000,0x00426000000000000},
+ { 0x0000000000000008,0x0000018367cb68cb5,0x000000000000422a,0x000000000004d41ab,0x0000000000000000,0x00000183800000000,0x0000000000004000,0x000000000004d6000},
+ { 0x0000000000000006,0x00000005681cb1997,0x000000000032b2af,0x00000000429481bc5,0x0000000000000000,0x000000056a0000000,0x0000000000000000,0x0000000042a000000},
+ { 0x0000000000000516,0x0000004512e0a0404,0x000000000041fa5a,0x00000000034218364,0x0000000000000000,0x00000045200000000,0x0000000000400000,0x00000000034300000},
+ { 0x000000000008fbd7,0x000000001a520b9c8,0x0000000003b5bd37,0x00000000008857b7d,0x0000000000000000,0x000000001a5800000,0x0000000003b40000,0x00000000008860000},
+ { 0x000000022a7c6088,0x025e00af65e548b91,0x000028215aaefeb6,0x000002f2932c0a578,0x0000000000000000,0x025f0000000000000,0x0000282000000000,0x000002f2a00000000},
+ { 0x0000000000000017,0x0000010629504cc07,0x0000000000007ade,0x00000000057fd7bed,0x0000000000000000,0x00000106800000000,0x0000000000000000,0x00000000058000000},
+ { 0x00000000000012fb,0x0000000d4e0e433c0,0x0000000002ea30f4,0x0000000018e2926a8,0x0000000000000000,0x0000000d500000000,0x0000000002800000,0x0000000018e800000},
+ { 0x0000000000060b7a,0x0113f39bcfdfc6ffe,0x00000001886adad6,0x0000003b18da9fa5c,0x0000000000000000,0x01140000000000000,0x0000000100000000,0x0000003b200000000},
+ { 0x000000000006d18b,0x00012cb54fa0d190d,0x0000000024891f94,0x00000005f0e475098,0x0000000000000000,0x00012d00000000000,0x0000000020000000,0x00000005f20000000},
+ { 0x00000000000001bb,0x000155ef2969c1a4d,0x0000000000005651,0x0000029478810ccfb,0x0000000000000000,0x00015600000000000,0x0000000000000000,0x00000295000000000},
+ { 0x000000000000002b,0x00014768c5cc3b5a3,0x00000000000000c9,0x0000000009f483923,0x0000000000000000,0x00014780000000000,0x0000000000000000,0x0000000009f800000},
+ { 0x0000000000014bc0,0x00000000ed595d9ec,0x000000000c198a8b,0x000000009bc20d410,0x0000000000000000,0x00000000ed8000000,0x000000000c000000,0x000000009c0000000},
+ { 0x000000000000021b,0x0206b032c2a534212,0x00000000000096db,0x00760b8c8e77aa885,0x0000000000000000,0x02070000000000000,0x0000000000000000,0x00762000000000000},
+ { 0x0000000000000052,0x00000009314c2ac8c,0x000000000004f03e,0x0000000005d5171f5,0x0000000000000000,0x00000009340000000,0x0000000000000000,0x0000000005d600000},
+ { 0x000000000000005d,0x02dfa0c55abe5f4a3,0x00000000112fe228,0x000aa1e2d1e3a2f41,0x0000000000000000,0x02e00000000000000,0x0000000000000000,0x000aa400000000000},
+ { 0x000000000000007e,0x00000000140a818f8,0x0000000000000191,0x000000000000552a2,0x0000000000000000,0x00000000141000000,0x0000000000000000,0x00000000000055400},
+ { 0x0000000000000005,0x000f563eb8d3518f7,0x0000000000000064,0x0000000004a45c5fa,0x0000000000000000,0x000f5800000000000,0x0000000000000000,0x0000000004a600000},
+ { 0x0000000000000006,0x0000047544b6f9222,0x00000000136a9f57,0x000000001852564ca,0x0000000000000000,0x00000476000000000,0x0000000013000000,0x00000000185800000},
+ { 0x0000000127200e35,0x000422cc1d65c5948,0x00000002e0874102,0x0003a156308e1a8fd,0x0000000000000000,0x00042400000000000,0x0000000000000000,0x0003a200000000000},
+ { 0x00000003982ab6f3,0x003c6f045515db296,0x00000003a1085083,0x000000014035926c7,0x0000000000000000,0x003c7000000000000,0x00000003a0000000,0x00000001408000000},
+ { 0x0000000000014812,0x0d1b72371debbc202,0x0000000b12ae5c85,0x000814d7debc01cdc,0x0000000000000000,0x0d1c0000000000000,0x0000000000000000,0x00081800000000000},
+ { 0x0000000000000012,0x00197973eb6f6995a,0x000000000005799a,0x00000065ad8ac6e13,0x0000000000000000,0x00198000000000000,0x0000000000000000,0x00000065c00000000},
+ { 0x000000000000035d,0x0001aa30b9e479f49,0x00004dd8dad04fa3,0x00000cc786d9afca4,0x0000000000000000,0x0001aa80000000000,0x00004dc000000000,0x00000cc8000000000},
+ { 0x0000000000045156,0x007f4c45974ef21f0,0x000000000021753b,0x0000272c7e88bf310,0x0000000000000000,0x007f6000000000000,0x0000000000000000,0x00002730000000000},
+ { 0x0000000000000003,0x00000000054a3b564,0x0000000000002089,0x0000000000004af20,0x0000000000000000,0x00000000054c00000,0x0000000000002000,0x0000000000004b000},
+ { 0x00000000000e16ab,0x0010d367ba7924b99,0x00000000000ee335,0x000012088b7757b04,0x0000000000000000,0x0010d800000000000,0x0000000000000000,0x00001210000000000},
+ { 0x0000000000000bf4,0x0000007961cec7382,0x00000000039bf2b8,0x000000008861c3e45,0x0000000000000000,0x00000079800000000,0x0000000000000000,0x00000000888000000},
+ { 0x0000000000039a07,0x00342e2f46b5b5bb2,0x000000648ebbee72,0x00000a98c90a89c9f,0x0000000000000000,0x00343000000000000,0x0000004000000000,0x00000a9c000000000},
+ { 0x0000000000000026,0x05ad8cb9a0bb735e9,0x0000003bb7c96cca,0x000000f015b288d77,0x0000000000000000,0x05ae0000000000000,0x0000003800000000,0x000000f0400000000},
+ { 0x0000000000000002,0x0020a4686df7697e0,0x0000042f4d60ca05,0x000e8928121736317,0x0000000000000000,0x0020b000000000000,0x0000000000000000,0x000e8c00000000000},
+ { 0x00000000000fea39,0x000173f1bb09b5bba,0x0000000000a234ff,0x0000000200bf1e0e3,0x0000000000000000,0x00017400000000000,0x0000000000000000,0x00000002010000000},
+ { 0x00000000000000ac,0x000d756a94f3a394d,0x000000000000042c,0x0000ec98f3b143f56,0x0000000000000000,0x000d7800000000000,0x0000000000000000,0x0000ecc0000000000},
+ { 0x00000000001dac11,0x0001ba05f329f1fa3,0x000161920a355bfc,0x00006043c7cdb69ef,0x0000000000000000,0x0001ba80000000000,0x0001600000000000,0x00006060000000000},
+ { 0x00000000000009fb,0x0000001f3fe92e7e7,0x0000000000d30075,0x000000063e0362b6b,0x0000000000000000,0x0000001f400000000,0x0000000000000000,0x00000006400000000},
+ { 0x00000000000062da,0x000034c3f586f8fdd,0x00000000001fcc07,0x000002cfa3c0148a6,0x0000000000000000,0x000034d0000000000,0x0000000000000000,0x000002d0000000000},
+ { 0x0000000000000002,0x000000000000b6299,0x0000000000000012,0x00000000000000732,0x0000000000000000,0x000000000000b6400,0x0000000000000012,0x00000000000000732},
+ { 0x00000000000000ab,0x0031a2acba678679c,0x00000000eec4b824,0x000000005e0123932,0x0000000000000000,0x0031b000000000000,0x00000000ee000000,0x000000005e2000000},
+ { 0x00000000000120a5,0x000002c3779348dd0,0x0000000000c96c15,0x00000004d9cc2f362,0x0000000000000000,0x000002c4000000000,0x0000000000000000,0x00000004da0000000},
+ { 0x00000000c67bda97,0x000510871d9a3353d,0x000005ac27030e08,0x00001bb661f48ce79,0x0000000000000000,0x00051200000000000,0x0000058000000000,0x00001bb8000000000},
+ { 0x000000000000020a,0x0291f8db94596f48f,0x0000000000009c8c,0x0000b117891648f2c,0x0000000000000000,0x02920000000000000,0x0000000000000000,0x0000b140000000000},
+ { 0x000000005445146c,0x000138bac4475f945,0x00000002ca01fa8a,0x00000000b38b961f8,0x0000000000000000,0x00013900000000000,0x00000002c8000000,0x00000000b3c000000},
+ { 0x0000000000000002,0x000000033feb69b56,0x0000000000000004,0x000000000000001ea,0x0000000000000000,0x00000003400000000,0x0000000000000004,0x000000000000001ea},
+ { 0x000000000003a7ea,0x000000000ab189f0c,0x000000000017b0b6,0x0000000000103a763,0x0000000000000000,0x000000000ab400000,0x0000000000178000,0x0000000000103c000},
+ { 0x0000000000002bf5,0x00004811c01124ad1,0x00000000788f1544,0x00000003aea60438d,0x0000000000000000,0x00004820000000000,0x0000000070000000,0x00000003af0000000},
+ { 0x0000000000000003,0x00428d7fb27d1f97e,0x0000000000000011,0x00000000000004759,0x0000000000000000,0x0042a000000000000,0x0000000000000000,0x00000000000004760},
+ { 0x00000000001e56d9,0x00000978e7c4f3988,0x00000000007ea869,0x000000000019057b3,0x0000000000000000,0x0000097c000000000,0x00000000007e8000,0x00000000001908000},
+ { 0x0000000000001d42,0x000000064d5273db3,0x0000000000130697,0x00000000efc5dc392,0x0000000000000000,0x000000064e0000000,0x0000000000000000,0x00000000f00000000},
+ { 0x0000000000000001,0x000005ce5e4738cea,0x00000003c0c9e860,0x000000009f30356ef,0x0000000000000000,0x000005d0000000000,0x00000003c0000000,0x000000009f4000000},
+ { 0x0000000000000038,0x0002aa4a26e394c91,0x0000000000000ecd,0x0000183bd8e002017,0x0000000000000000,0x0002ab00000000000,0x0000000000000000,0x00001840000000000},
+ { 0x00000000001f1d48,0x000000214652c5808,0x00000000005e8018,0x0000000181f647415,0x0000000000000000,0x00000021500000000,0x0000000000000000,0x00000001820000000},
+ { 0x00000001e4b0de1e,0x02d96b39f5b0ed1f6,0x0001b93198b18605,0x006721b94faef12ca,0x0000000000000000,0x02da0000000000000,0x0000000000000000,0x00674000000000000},
+ { 0x0000000000013fbd,0x00001a4354c8702a5,0x00000003ffaaec47,0x00000056307e4c441,0x0000000000000000,0x00001a48000000000,0x0000000200000000,0x00000056400000000},
+ { 0x00000000000287ab,0x0c21ea679c36a3e95,0x0000000000069e92,0x00000000000346fc5,0x0000000000000000,0x0c240000000000000,0x0000000000069000,0x00000000000347000},
+ { 0x0000000000000003,0x00003d00ad0ad2dc5,0x0000000000040e47,0x000000000001852bf,0x0000000000000000,0x00003d10000000000,0x0000000000040800,0x00000000000185800},
+ { 0x00000000134085a9,0x03279c527fafde91d,0x00000181ba9260a9,0x000000370fcfbbc64,0x0000000000000000,0x03280000000000000,0x0000018180000000,0x00000037100000000},
+ { 0x0000000000000011,0x0027dac286df6bd2d,0x0000000000003171,0x00011e8799e286fb9,0x0000000000000000,0x0027e000000000000,0x0000000000000000,0x00011f00000000000},
+ { 0x0000000000a07199,0x0146ff46b47bcb8e5,0x00000000fdf38622,0x00105d0fd9bdda937,0x0000000000000000,0x01470000000000000,0x0000000000000000,0x00106000000000000},
+ { 0x000000000000000c,0x000001c4520e70532,0x00000000002d5586,0x000000000bd122b74,0x0000000000000000,0x000001c4800000000,0x0000000000000000,0x000000000bd400000},
+ { 0x00000000e6a59811,0x000ce7aa6e356ad5b,0x000000791d977a38,0x00000576df6c7e489,0x0000000000000000,0x000ce800000000000,0x0000006000000000,0x00000578000000000},
+ { 0x00001031e14b7d6f,0x002b06c2229c96aa8,0x00008c9b0591c164,0x00001462a62353895,0x0000000000000000,0x002b1000000000000,0x00008c8000000000,0x00001464000000000},
+ { 0x0000000000000025,0x001fae24d8aa12094,0x000000000bcebee0,0x000000a787bd0a2fd,0x0000000000000000,0x001fb000000000000,0x0000000000000000,0x000000a7c00000000},
+ { 0x0000000000000000,0x001fad38c09ebc4d5,0x00000000002d6bd1,0x00000007fa5ce830f,0x0000000000000000,0x001fb000000000000,0x0000000000000000,0x00000007fc0000000},
+ { 0x0000000000000613,0x0000a2b38ca21bb5c,0x000000000138c611,0x00000013e0ed628da,0x0000000000000000,0x0000a2c0000000000,0x0000000000000000,0x00000013e80000000},
+ { 0x00000000000053de,0x0002ae0b2e7d505b4,0x00000015b2de7a4f,0x000093b2d78a30316,0x0000000000000000,0x0002af00000000000,0x0000000000000000,0x000093c0000000000},
+ { 0x0000000000000ba3,0x0000000b35934dbb4,0x00000003fc524153,0x0000000072177e57f,0x0000000000000000,0x0000000b380000000,0x00000003fc000000,0x00000000722000000},
+ { 0x000000000003081c,0x03d28d714f4db6a28,0x0000000544c86891,0x00000c24d734c35d2,0x0000000000000000,0x03d30000000000000,0x0000000000000000,0x00000c28000000000},
+ { 0x0000000000000039,0x000004ba039ff0284,0x000000000000038c,0x0000000007a521eaf,0x0000000000000000,0x000004bc000000000,0x0000000000000000,0x0000000007a600000},
+ { 0x0000000000000074,0x000003a5b630ae8c4,0x00000001b5592f46,0x000000071b643ea34,0x0000000000000000,0x000003a6000000000,0x00000001a0000000,0x000000071c0000000},
+ { 0x00000000018d9ba2,0x000179b00fc5c8463,0x000000006a8b1d4a,0x00000027149b135d0,0x0000000000000000,0x00017a00000000000,0x0000000000000000,0x00000027200000000},
+ { 0x000000000000f1ad,0x01853ce9b264105e6,0x000000d395f80d27,0x000003d593e18f269,0x0000000000000000,0x01858000000000000,0x000000d000000000,0x000003d6000000000},
+ { 0x000000001e885edf,0x0000fd89f58adf541,0x000010624f005852,0x0000fd807827e5137,0x0000000000000000,0x0000fdc0000000000,0x0000100000000000,0x0000fdc0000000000},
+ { 0x00000000000db77a,0x0d5d7a3326c6df03e,0x0000000001797616,0x0000000000dc03381,0x0000000000000000,0x0d600000000000000,0x0000000001780000,0x0000000000dc40000},
+ { 0x000000000001da43,0x0000002dd83811511,0x00000000000a00e2,0x00000000000357a3d,0x0000000000000000,0x0000002de00000000,0x00000000000a0000,0x00000000000358000},
+ { 0x0000000000002f0e,0x01b45686c42f317e6,0x0000000f563f8d3d,0x00003756e3c0cf1d7,0x0000000000000000,0x01b48000000000000,0x0000000000000000,0x00003760000000000},
+ { 0x000000000006d527,0x0050ecbaaaeb54b2e,0x00000012810b75e3,0x001033b7ff0414ffe,0x0000000000000000,0x00510000000000000,0x0000000000000000,0x00103800000000000},
+ { 0x00000000000007a2,0x03e46752b213bf3bc,0x00000002926b94dd,0x00017474e850cf382,0x0000000000000000,0x03e50000000000000,0x0000000000000000,0x00017480000000000},
+ { 0x0000000002e8703c,0x0153c9b547b0b0f8d,0x00075e2ad4c58ac0,0x0078749ac6ae9ecd5,0x0000000000000000,0x01540000000000000,0x0006000000000000,0x00788000000000000},
+ { 0x0000000000000009,0x000fe7e34ede55aee,0x000000000000002a,0x00000050625ae4553,0x0000000000000000,0x000fe800000000000,0x0000000000000000,0x00000050800000000},
+ { 0x0000000000000000,0x0654dde6156fcb660,0x0000000015b9fd32,0x0000fc62b3bae5cd7,0x0000000000000000,0x06560000000000000,0x0000000000000000,0x0000fc80000000000},
+ { 0x0000000000000003,0x00000048b8e079c5b,0x000000000000002b,0x0000000000002a9d4,0x0000000000000000,0x00000048c00000000,0x0000000000000000,0x0000000000002aa00},
+ { 0x000000000000007e,0x0c2e40cfb9dce16cb,0x00000ce4e286eecd,0x0000011f26558ef54,0x0000000000000000,0x0c300000000000000,0x00000ce400000000,0x0000011f400000000},
+ { 0x000000000003933f,0x01f94bcc3dff61a03,0x0000000077158e5b,0x0000000eedd7af8bc,0x0000000000000000,0x01f98000000000000,0x0000000040000000,0x0000000ef00000000},
+ { 0x0000000000031bc9,0x000372421c2a1eb5f,0x0000000000179c13,0x00000000000df9f38,0x0000000000000000,0x00037300000000000,0x0000000000178000,0x00000000000dfc000},
+ { 0x0000000000000002,0x002857b0a81320509,0x0000000000000003,0x0000000000000077a,0x0000000000000000,0x00286000000000000,0x0000000000000003,0x0000000000000077a},
+ { 0x0000000000000001,0x00000232e345396a7,0x0000000000000004,0x0000000000000030e,0x0000000000000000,0x00000233000000000,0x0000000000000004,0x0000000000000030e},
+ { 0x00000000000122c8,0x00005a340a54eee1b,0x00000004774d430f,0x00000001d3c7852f9,0x0000000000000000,0x00005a40000000000,0x0000000470000000,0x00000001d40000000},
+ { 0x0000000000000b6c,0x000000000002112de,0x0000000000002e8c,0x0000000000003da16,0x0000000000000000,0x00000000000212000,0x0000000000002e00,0x0000000000003db00},
+ { 0x00000397708a745f,0x0018580a38642160a,0x00003130197e5d5e,0x000070d22596fee8a,0x0000000000000000,0x00186000000000000,0x0000300000000000,0x000070e0000000000},
+ { 0x0000000000000c8a,0x00e19993d375eb8e8,0x000000000000a04c,0x000000000000a31ef,0x0000000000000000,0x00e1c000000000000,0x000000000000a000,0x000000000000a3400},
+ { 0x0000000000004ba7,0x000b8df457f6e3ffa,0x0000011c42982711,0x000001ebda25c5e0d,0x0000000000000000,0x000b9000000000000,0x0000011800000000,0x000001ec000000000},
+ { 0x000000000043d35a,0x006f1031a57a669db,0x00000000108d361b,0x0004fc41c291d0582,0x0000000000000000,0x006f2000000000000,0x0000000000000000,0x0004fe00000000000},
+ { 0x00000000003f0d0e,0x00011ebef6172898b,0x00000000062b2a7a,0x000021f2b2c95afea,0x0000000000000000,0x00011f00000000000,0x0000000000000000,0x00002200000000000},
+ { 0x000000000000271b,0x013f89d7a2984c9ef,0x0000000b80a215aa,0x000003d7359f1a51b,0x0000000000000000,0x01400000000000000,0x0000000000000000,0x000003d8000000000},
+ { 0x0000000000019313,0x001f0b21e6e0ee453,0x0000000007a75073,0x00000000f1cfdc97d,0x0000000000000000,0x001f1000000000000,0x0000000004000000,0x00000000f20000000},
+ { 0x0000000000000019,0x01c8cd25c0a170ae7,0x000000000006b5dc,0x000000018bcf8fde2,0x0000000000000000,0x01c90000000000000,0x0000000000000000,0x000000018c0000000},
+ { 0x000000000000001b,0x000000000002416c4,0x0000000000001b2e,0x0000000000000dbad,0x0000000000000000,0x00000000000242000,0x0000000000001b00,0x0000000000000dbc0},
+ { 0x0000000000000009,0x0000000001c4846f2,0x0000000000006f0a,0x00000000000007897,0x0000000000000000,0x0000000001c500000,0x0000000000006f0a,0x00000000000007897},
+ { 0x0000000000004ad2,0x0001e9b1278333476,0x00000000bcb05790,0x000000003ac491214,0x0000000000000000,0x0001ea00000000000,0x00000000bc000000,0x000000003ad000000},
+ { 0x000000000019e56d,0x000000000deae26e8,0x000000001677620d,0x00000000026835f88,0x0000000000000000,0x000000000dec00000,0x0000000016700000,0x00000000026880000},
+ { 0x000000000002795c,0x00153f5484219670a,0x0000000030dcefc6,0x0000078d48ad1340f,0x0000000000000000,0x00154000000000000,0x0000000000000000,0x0000078e000000000},
+ { 0x0000000000001af3,0x00000000104205664,0x00000000000095b3,0x000000000311a3981,0x0000000000000000,0x00000000104800000,0x0000000000000000,0x00000000031200000},
+ { 0x0000000000000069,0x00348b5e24abb7f9d,0x000000000000260a,0x00000007155d336a7,0x0000000000000000,0x00349000000000000,0x0000000000000000,0x00000007160000000},
+ { 0x00000000000299b4,0x0305a9c5aed3aa458,0x000000000004cec0,0x00000000007436406,0x0000000000000000,0x03060000000000000,0x0000000000040000,0x00000000007440000},
+ { 0x0000000000000454,0x0000172de95e449ea,0x0000000629f26109,0x00000038a3f916017,0x0000000000000000,0x00001730000000000,0x0000000600000000,0x00000038b00000000},
+ { 0x0000000000000378,0x0002968cdbd3aaebf,0x000000000049bb64,0x0001f0f2decfea63b,0x0000000000000000,0x00029700000000000,0x0000000000000000,0x0001f100000000000},
+ { 0x0000000000000003,0x00000092aab1f76db,0x000000000000aa6a,0x00000000001acc719,0x0000000000000000,0x00000092c00000000,0x0000000000008000,0x00000000001ad0000},
+ { 0x000000000000001e,0x009fe2dd160bf1499,0x000000000000075d,0x0000000129ef31846,0x0000000000000000,0x00a00000000000000,0x0000000000000000,0x000000012a0000000},
+ { 0x0000000000000002,0x0000000021940c7a4,0x000000000000002a,0x0000000000003c8eb,0x0000000000000000,0x0000000021a000000,0x0000000000000000,0x0000000000003c900},
+ { 0x0000000000012235,0x000011516995e9475,0x0000000000027ad2,0x00000000e90ec7065,0x0000000000000000,0x00001158000000000,0x0000000000000000,0x00000000e94000000},
+ { 0x000000000000009b,0x000004731904513bb,0x000000000000027b,0x0000000000004b5e4,0x0000000000000000,0x00000474000000000,0x0000000000000200,0x0000000000004b600},
+ { 0x0000000000000050,0x067c4bbbd71dd95b6,0x0000000000012e72,0x00000000006efe9de,0x0000000000000000,0x067e0000000000000,0x0000000000000000,0x00000000006f00000},
+ { 0x00000000000022b3,0x000b67d0825a9edf3,0x00000000001a27ec,0x0009a0d6cd93d4b5a,0x0000000000000000,0x000b6800000000000,0x0000000000000000,0x0009a400000000000},
+ { 0x0000000000008233,0x00958c9fd79d0926e,0x000000000002869a,0x000001e71d62fcdcc,0x0000000000000000,0x0095c000000000000,0x0000000000000000,0x000001e7800000000},
+ { 0x00000000000ddea0,0x00028a22a54010ed5,0x000149d4cc49627e,0x000155026cc84d49a,0x0000000000000000,0x00028b00000000000,0x0001480000000000,0x00015580000000000},
+ { 0x0000000000000001,0x0119fc19a19108cec,0x000000000000b5aa,0x000000010f1d34f0d,0x0000000000000000,0x011a0000000000000,0x0000000000000000,0x000000010f8000000},
+ { 0x00000000045e7fff,0x000e7ab396f21013f,0x00002e993241771a,0x000037194daad86dd,0x0000000000000000,0x000e7c00000000000,0x00002e0000000000,0x00003720000000000},
+ { 0x000000019e2f0918,0x00065038fbad57c62,0x0000024c30de05fb,0x000004887057928d5,0x0000000000000000,0x00065200000000000,0x0000024000000000,0x0000048a000000000},
+ { 0x000000000000004a,0x020857372fad25adc,0x0000000061f58d38,0x0000002d152cccda2,0x0000000000000000,0x02090000000000000,0x0000000000000000,0x0000002d200000000},
+ { 0x0000000000001f11,0x0a140a2a3308b8f4e,0x000000b360e17371,0x0000000bf4b56e7d8,0x0000000000000000,0x0a180000000000000,0x000000b360000000,0x0000000bf4c000000},
+ { 0x0000000000002022,0x001932bf594f53489,0x0000000004473da2,0x00000000103b892ca,0x0000000000000000,0x00193800000000000,0x0000000004400000,0x00000000103c00000},
+ { 0x000000000000006b,0x00000000000f41ac9,0x000000000000041e,0x0000000000007b481,0x0000000000000000,0x00000000000f44000,0x0000000000000400,0x0000000000007b600},
+ { 0x0000000000000005,0x002938ac6a2496fa3,0x0000000000000654,0x0000000b528e0d333,0x0000000000000000,0x00294000000000000,0x0000000000000000,0x0000000b540000000},
+ { 0x000000000000036c,0x00268b680b22de81d,0x0000000002a8130a,0x000000003e732d706,0x0000000000000000,0x00269000000000000,0x0000000002000000,0x000000003e8000000},
+ { 0x0000000000000007,0x0193d90fd78fe9c79,0x0000000000000636,0x0000777caa8c24dd9,0x0000000000000000,0x01940000000000000,0x0000000000000000,0x00007780000000000},
+ { 0x0000000000049c86,0x00005e507d1875f7b,0x000000000004c807,0x00000257bcc65f555,0x0000000000000000,0x00005e60000000000,0x0000000000000000,0x00000258000000000},
+ { 0x000000000068117a,0x0002db03cc3bea3c7,0x0000003625f6b429,0x000019994375fc308,0x0000000000000000,0x0002dc00000000000,0x0000000000000000,0x000019a0000000000},
+ { 0x0000000000000066,0x000017fe2fa06d24a,0x0000000000d6b3d2,0x000000007e3365f85,0x0000000000000000,0x00001800000000000,0x0000000000000000,0x000000007e4000000},
+ { 0x000000000000009c,0x000001c2053567499,0x0000000000295c15,0x000000000182c462d,0x0000000000000000,0x000001c2800000000,0x0000000000280000,0x00000000018300000},
+ { 0x0000000000000008,0x00000accff930112c,0x0000000000005aa0,0x0000004a478a88e48,0x0000000000000000,0x00000ad0000000000,0x0000000000000000,0x0000004a600000000},
+ { 0x000000000000002c,0x00001498b185948ff,0x0000000001475bb2,0x00000000002f0239a,0x0000000000000000,0x000014a0000000000,0x0000000001470000,0x00000000002f08000},
+ { 0x00000000010d6523,0x00030474071d86e79,0x000006a1c2c6958a,0x00004ee2b3d93ded7,0x0000000000000000,0x00030500000000000,0x0000060000000000,0x00004f00000000000},
+ { 0x0000000000000003,0x00000040dd0c21ad1,0x000000000000371e,0x00000000068554609,0x0000000000000000,0x00000040e00000000,0x0000000000000000,0x00000000068600000},
+ { 0x0000000000000f2e,0x00003dc0d7fb94483,0x0000000000058b76,0x0000000023e0ad8f5,0x0000000000000000,0x00003dd0000000000,0x0000000000000000,0x0000000023f000000},
+ { 0x0000000000000000,0x0000000004314e3c9,0x000000000002c110,0x00000000000aea3fc,0x0000000000000000,0x00000000043200000,0x000000000002c000,0x00000000000aec000},
+ { 0x00000000000099b0,0x0021357f5ad33e027,0x0000000000fd72be,0x000001b31e8227d3f,0x0000000000000000,0x00214000000000000,0x0000000000000000,0x000001b3800000000},
+ { 0x0000000000001288,0x00cf03610975ea444,0x000000004d3b2208,0x0000003176f6ceb29,0x0000000000000000,0x00cf4000000000000,0x0000000000000000,0x00000031800000000},
+ { 0x00000000000671c3,0x000b685375f30ae48,0x00000000793782f1,0x00001013ff6fce290,0x0000000000000000,0x000b6c00000000000,0x0000000000000000,0x00001018000000000},
+ { 0x00000000000028e9,0x000126ffb1b3a327a,0x00000000f5f10a75,0x0000f25af4a3ecddb,0x0000000000000000,0x00012700000000000,0x0000000000000000,0x0000f280000000000},
+ { 0x0000000000000336,0x000000003030b85a5,0x000000000001a352,0x000000000001ed878,0x0000000000000000,0x00000000304000000,0x000000000001a000,0x000000000001ee000},
+ { 0x00000000021c3220,0x0005572977b070469,0x00000007990428b2,0x00015c5532f6c87b5,0x0000000000000000,0x00055800000000000,0x0000000000000000,0x00015c80000000000},
+ { 0x0000015f79cec0f4,0x0002f9099576d1f02,0x0000059373a5343e,0x0000220b55d21c246,0x0000000000000000,0x0002fa00000000000,0x0000050000000000,0x00002210000000000},
+ { 0x000000000000009f,0x00039d5d3b4b52c57,0x0000000000000273,0x0000000000019d6e2,0x0000000000000000,0x00039e00000000000,0x0000000000000000,0x0000000000019d800},
+ { 0x0000000000147083,0x000311cf69e1cd936,0x000000000041e53d,0x000000000cebd35bc,0x0000000000000000,0x00031200000000000,0x0000000000400000,0x000000000cec00000},
+ { 0x0000000000be4570,0x0000fab26556dbb27,0x000000000a98b681,0x0000e1496da13996d,0x0000000000000000,0x0000fac0000000000,0x0000000000000000,0x0000e180000000000},
+ { 0x0000000000000002,0x00095be3c40e5fd3b,0x000000000000001c,0x000150e92af1621e8,0x0000000000000000,0x00095c00000000000,0x0000000000000000,0x00015100000000000},
+ { 0x0000000000016845,0x0000007573129b93f,0x000000000021084a,0x0000000cb0c86b3d2,0x0000000000000000,0x00000075800000000,0x0000000000000000,0x0000000cb40000000},
+ { 0x0000000000000079,0x0000000000000060a,0x0000000000000085,0x0000000000000012a,0x0000000000000079,0x0000000000000060a,0x0000000000000085,0x0000000000000012a},
+ { 0x0000000000039c81,0x0000000007f29d05f,0x00000000000433e1,0x0000000001f96a7f5,0x0000000000000000,0x0000000007f400000,0x0000000000000000,0x0000000001f980000},
+ { 0x0000000000000003,0x000067436373cb202,0x0000000000000066,0x0000000000019c092,0x0000000000000000,0x00006760000000000,0x0000000000000000,0x0000000000019c800},
+ { 0x000000000000007f,0x013cc17bf55334d53,0x00001659f1169245,0x0058f484fd0135f78,0x0000000000000000,0x013d0000000000000,0x0000000000000000,0x00590000000000000},
+ { 0x0000000000000184,0x000003bb96b70c6c2,0x000000000843a4c5,0x000000a4125ffc28b,0x0000000000000000,0x000003bc000000000,0x0000000000000000,0x000000a4400000000},
+ { 0x0000000000000eca,0x00a08c0f2be2ec997,0x000000f534967d43,0x000073e5228579b54,0x0000000000000000,0x00a0c000000000000,0x0000000000000000,0x00007400000000000},
+ { 0x0000000000000002,0x0000000018bc48213,0x0000000000000015,0x0000000000c236790,0x0000000000000000,0x0000000018c000000,0x0000000000000000,0x0000000000c240000},
+ { 0x0000000000001f24,0x03f0cd9e8a803fd89,0x000000003c5792a4,0x000000000508157db,0x0000000000000000,0x03f10000000000000,0x000000003c500000,0x00000000050880000},
+ { 0x0000000000006a6a,0x0017142c35ed93127,0x000000000000dbe6,0x000000012f99fd4ff,0x0000000000000000,0x00171800000000000,0x0000000000000000,0x00000001300000000},
+ { 0x0000000000000046,0x00001ef4f3330416b,0x000000000000270f,0x0000000000049159d,0x0000000000000000,0x00001ef8000000000,0x0000000000002000,0x00000000000492000},
+ { 0x00000000000002ef,0x0094e332199703832,0x0000000c65f79877,0x0000eaafc47771051,0x0000000000000000,0x00950000000000000,0x0000000000000000,0x0000eac0000000000},
+ { 0x0000000001603fb4,0x0005646126bd5d755,0x00000eaf78f60d56,0x00034aac31d971798,0x0000000000000000,0x00056600000000000,0x0000000000000000,0x00034b00000000000},
+ { 0x00000030e8d913dc,0x00000012f829aa5b1,0x000000b980f32894,0x0000001198cd5b5dc,0x00000030c0000000,0x00000012fc0000000,0x000000b980000000,0x000000119a0000000},
+ { 0x0000000000000034,0x0000002a8b57f65d6,0x0000000000016bca,0x000000000006bf8ca,0x0000000000000000,0x0000002a900000000,0x0000000000016000,0x000000000006c0000},
+ { 0x00000000029d7ab8,0x000c1bfd3201b8f4d,0x0000000002d903ff,0x00000004b5dc1a4a1,0x0000000000000000,0x000c1c00000000000,0x0000000000000000,0x00000004b60000000},
+ { 0x00077a5ef4bf7bcb,0x01da820f2910144b5,0x019761cd582c7cef,0x001b7c92f3c74a942,0x0000000000000000,0x01db0000000000000,0x0197600000000000,0x001b7d00000000000},
+ { 0x0000000000000006,0x003c96c921d57a6a6,0x00000000000008b7,0x0000000005eb5cab1,0x0000000000000000,0x003ca000000000000,0x0000000000000000,0x0000000005ec00000},
+ { 0x000000000000084d,0x0000018644d336a9b,0x000000007df12de1,0x000000558592614bb,0x0000000000000000,0x00000186800000000,0x0000000000000000,0x00000055a00000000},
+ { 0x000000000000001b,0x0048935a84902680c,0x00000000000215f8,0x000000000000f8dd5,0x0000000000000000,0x0048a000000000000,0x0000000000021400,0x000000000000f9000},
+ { 0x0000000000000019,0x00000a26e410621d0,0x0000000000003e4e,0x00000000068e0e0b8,0x0000000000000000,0x00000a28000000000,0x0000000000000000,0x00000000069000000},
+ { 0x0000000000000006,0x00000042b4d4f8c7e,0x0000000000000670,0x0000000000613799a,0x0000000000000000,0x00000042c00000000,0x0000000000000000,0x00000000006140000},
+ { 0x000000000365ae69,0x0053a1b647206ea50,0x00000002d878f8a7,0x00001fb3f63835510,0x0000000000000000,0x0053c000000000000,0x0000000000000000,0x00001fb8000000000},
+ { 0x0000000000000005,0x090f588259cbe0375,0x000001bd907d25af,0x0066697f3af251c78,0x0000000000000000,0x09100000000000000,0x0000000000000000,0x00668000000000000},
+ { 0x0000000035492009,0x0052898c7a212303e,0x000002ca3d08993b,0x0006b0b5fff79d9e7,0x0000000000000000,0x0052a000000000000,0x0000000000000000,0x0006b200000000000},
+ { 0x0000000000000007,0x0000069abaf70112d,0x000000000000780b,0x000000000015f95ac,0x0000000000000000,0x0000069c000000000,0x0000000000000000,0x00000000001600000},
+ { 0x0000000000000002,0x000c9c8ead98a025a,0x00000003acadf7b4,0x00000004f776c48e9,0x0000000000000000,0x000ca000000000000,0x00000003a0000000,0x00000004f80000000},
+ { 0x0000000000000006,0x0000bce34b1848ea9,0x00000000ba857155,0x000006645321ce5d3,0x0000000000000000,0x0000bd00000000000,0x0000000000000000,0x00000666000000000},
+ { 0x0000000025a6d7ab,0x006d4a6dd1aced44d,0x00006b7eb211b67e,0x0025d57341edea0c5,0x0000000000000000,0x006d6000000000000,0x0000000000000000,0x0025e000000000000},
+ { 0x000000000006cf9d,0x00011b0af8223c556,0x0000000000082b35,0x0000023737a2defc9,0x0000000000000000,0x00011b80000000000,0x0000000000000000,0x00000238000000000},
+ { 0x00000000000093f3,0x000fd8b2f59f2ea9a,0x000000007435d5ca,0x0000001f339ae623a,0x0000000000000000,0x000fdc00000000000,0x0000000000000000,0x0000001f380000000},
+ { 0x0000000000000000,0x0000019ce28339773,0x0000000000038745,0x00000029eb077fc08,0x0000000000000000,0x0000019d000000000,0x0000000000000000,0x00000029f00000000},
+ { 0x00000000b23d059e,0x00082cc0e93c58a7c,0x000000149e8bc07b,0x0000fd9dd9fb9bdaf,0x0000000000000000,0x00083000000000000,0x0000000000000000,0x0000fdc0000000000},
+ { 0x0000000000000131,0x07a234b8b47a5b85b,0x00000000000004f4,0x000071be9c56e4a60,0x0000000000000000,0x07a40000000000000,0x0000000000000000,0x000071c0000000000},
+ { 0x0000000000000000,0x000000000006ddf14,0x0000000000016387,0x000000000001e82c3,0x0000000000000000,0x000000000006de000,0x0000000000016000,0x000000000001e8800},
+ { 0x000000000002f59c,0x00806f225aca999e5,0x000005656f63a8e4,0x0000633522286f300,0x0000000000000000,0x00808000000000000,0x0000040000000000,0x00006340000000000},
+ { 0x00000000000042db,0x000002270c3b50e18,0x000000000028fb81,0x00000060079aac7e5,0x0000000000000000,0x00000228000000000,0x0000000000000000,0x00000060200000000},
+ { 0x000000000095f001,0x0000005c28181149e,0x000000023a4aa8fe,0x00000000fc13fe983,0x0000000000000000,0x0000005c400000000,0x0000000238000000,0x00000000fc4000000},
+ { 0x0000000000008072,0x000374b3083d00b5f,0x0000000000008fec,0x0000000000001e31e,0x0000000000000000,0x00037500000000000,0x0000000000008f80,0x0000000000001e380},
+ { 0x0002ef04c3401c9b,0x009d0d0d349a7a2bf,0x00047e93db9b188b,0x00007f24feb03ec01,0x0000000000000000,0x009d4000000000000,0x00047e0000000000,0x00007f30000000000},
+ { 0x00000000000001b2,0x000000000155738fa,0x00000000000963fa,0x000000000000ec6e5,0x0000000000000000,0x00000000015580000,0x0000000000096200,0x000000000000ec800},
+ { 0x00000000000000c7,0x00009d6d73d324271,0x0000000016a10e55,0x00000015f1bb9e4c9,0x0000000000000000,0x00009d80000000000,0x0000000000000000,0x00000015f80000000},
+ { 0x00000000009e9e72,0x00000d97362cdc978,0x000000001f921e2d,0x00000000069b868b4,0x0000000000000000,0x00000d98000000000,0x000000001f800000,0x00000000069c00000},
+ { 0x0000000000000007,0x0000003bc9342869c,0x000000000000468f,0x00000000000495b30,0x0000000000000000,0x0000003bd00000000,0x0000000000004000,0x00000000000496000},
+ { 0x00000000000000a5,0x07b025c4c0495fd37,0x0000000062289d6a,0x0000ed5aa2ad6a325,0x0000000000000000,0x07b20000000000000,0x0000000000000000,0x0000ed80000000000},
+ { 0x000000000000003d,0x002f6505ddfa287a8,0x000000000000376b,0x0000000000000c076,0x0000000000000000,0x002f7000000000000,0x0000000000003740,0x0000000000000c080},
+ { 0x0000000000000085,0x00fca7a992c9bb09f,0x00000000000d2b80,0x00015bd81777e32cb,0x0000000000000000,0x00fcc000000000000,0x0000000000000000,0x00015c00000000000},
+ { 0x00000000000084b1,0x002117cb00d345b34,0x0000000000009f5c,0x00000001dbde41af0,0x0000000000000000,0x00212000000000000,0x0000000000000000,0x00000001dc0000000},
+ { 0x0000000000000d8a,0x000017bbc2db9a265,0x000000000003ace5,0x0000000001b1c4c6c,0x0000000000000000,0x000017c0000000000,0x0000000000000000,0x0000000001b200000},
+ { 0x000000000000000b,0x064a85933550299b8,0x000000000000015c,0x00000000000ecb4bf,0x0000000000000000,0x064c0000000000000,0x0000000000000000,0x00000000000ecc000},
+ { 0x0000000000000156,0x0783ab257c9f153b0,0x0001d303782861e2,0x000564e9b9b5d8313,0x0000000000000000,0x07840000000000000,0x0001c00000000000,0x00056600000000000},
+ { 0x00000000f83a8118,0x000007f3b9424521c,0x00000001b47b0362,0x00000000782562170,0x0000000000000000,0x000007f4000000000,0x00000001b4000000,0x00000000784000000},
+ { 0x00000000000036d9,0x0c33356ef5625b97c,0x0000000003bdb1c4,0x001a03541d18cb45c,0x0000000000000000,0x0c340000000000000,0x0000000000000000,0x001a0800000000000},
+ { 0x000036adc7b259da,0x0143ef696fec33295,0x0001391e5da6d75d,0x000a259b05dd2c4eb,0x0000000000000000,0x01440000000000000,0x0001000000000000,0x000a2800000000000},
+ { 0x0000000000000001,0x0000000000035446c,0x0000000000003b3b,0x000000000001b6845,0x0000000000000000,0x00000000000355000,0x0000000000003800,0x000000000001b7000},
+ { 0x0000000000000187,0x000f5505cfd6b6243,0x0000000006a84184,0x0000000000bade866,0x0000000000000000,0x000f5800000000000,0x0000000006a80000,0x0000000000bae0000},
+ { 0x0000000000346c0e,0x0004f4ab9ca00b3c0,0x0000009be9530b0f,0x0000019f2211db40a,0x0000000000000000,0x0004f600000000000,0x0000009800000000,0x0000019f800000000},
+ { 0x0000000000003ca6,0x000009f3c4d37311f,0x0000056ef90742ab,0x000002b2a0a3cdee4,0x0000000000000000,0x000009f4000000000,0x0000056000000000,0x000002b3000000000},
+ { 0x000000001a3ed5f5,0x00058c2bd3d3f68db,0x00000051e6330523,0x00000009cf4bf0039,0x0000000000000000,0x00058e00000000000,0x00000051e0000000,0x00000009d00000000},
+ { 0x00000000000909a7,0x01f948702631ccbf3,0x00000252853fbdbd,0x001b11150cc1c1244,0x0000000000000000,0x01f98000000000000,0x0000000000000000,0x001b1800000000000},
+ { 0x000000033af07a32,0x003b0fdadeeefb839,0x00002e218702cc25,0x0002b55d53b7e6151,0x0000000000000000,0x003b1000000000000,0x0000200000000000,0x0002b600000000000},
+ { 0x0000000000001bcf,0x000e34811304dd99e,0x000000000a623f9e,0x000000178339a9175,0x0000000000000000,0x000e3800000000000,0x0000000000000000,0x00000017880000000},
+ { 0x0000000004fbc2e5,0x00000004aeb81119d,0x000000001a7dd74c,0x000000000d8a8287c,0x0000000000000000,0x00000004b00000000,0x000000001a400000,0x000000000d8c00000},
+ { 0x0000000000000002,0x001d307a957381a3b,0x0000000000001c09,0x0000000000011a1ec,0x0000000000000000,0x001d3800000000000,0x0000000000001800,0x0000000000011a800},
+ { 0x00000000000066a1,0x002fff1232e131b0b,0x000000364741ed07,0x001b47dc97fbe84b8,0x0000000000000000,0x00300000000000000,0x0000000000000000,0x001b4800000000000},
+ { 0x0000000010715491,0x035639a746cb55f37,0x000002a412fc15aa,0x0317756b8320b2172,0x0000000000000000,0x03570000000000000,0x0000000000000000,0x03180000000000000},
+ { 0x0000000000004b7e,0x00000009f52d31579,0x000000000003ca7c,0x0000000006b351a31,0x0000000000000000,0x00000009f80000000,0x0000000000000000,0x0000000006b400000},
+ { 0x00000028a234f173,0x00033170582c48f98,0x000001008b0e0348,0x0000104512890a4e0,0x0000000000000000,0x00033200000000000,0x0000010000000000,0x00001048000000000},
+ { 0x0000000000000045,0x0000014667a4b13bd,0x00000000000d307c,0x00000028c565648fc,0x0000000000000000,0x00000146800000000,0x0000000000000000,0x00000028d00000000},
+ { 0x000000000040cb3c,0x00000000907a26c09,0x000000000051dd2f,0x000000000075ea809,0x0000000000000000,0x00000000908000000,0x0000000000500000,0x00000000007600000},
+ { 0x0000000000000164,0x00000000aa5d88f6a,0x0000000000003e14,0x00000000001ae4758,0x0000000000000000,0x00000000aa8000000,0x0000000000000000,0x00000000001ae8000},
+ { 0x0000000000000209,0x000f5d196a725e511,0x000000000001a659,0x00000000005c07433,0x0000000000000000,0x000f6000000000000,0x0000000000000000,0x00000000005c20000},
+ { 0x00000000009b9314,0x0001851223fba252e,0x000034527b86455d,0x000010a39bfcb1dcb,0x0000000000000000,0x00018580000000000,0x0000344000000000,0x000010a4000000000},
+ { 0x0000000000000038,0x000000000000d4c0d,0x0000000000018074,0x0000000000004944c,0x0000000000000000,0x000000000000d5000,0x0000000000018000,0x00000000000049500},
+ { 0x0000000a54fdd728,0x025a5301eb9900e65,0x00003978849e0995,0x00001b4c838fac276,0x0000000000000000,0x025b0000000000000,0x0000390000000000,0x00001b50000000000},
+ { 0x00000000154e004c,0x004e81b368fb07d51,0x000009b5fce79ad9,0x0017c8a15d7058406,0x0000000000000000,0x004ea000000000000,0x0000000000000000,0x0017d000000000000},
+ { 0x000000000000ceae,0x00000000157e5eaf1,0x000000000098a31e,0x000000000cc648b92,0x0000000000000000,0x00000000158000000,0x0000000000800000,0x000000000cc800000},
+ { 0x0000006e4bcd6839,0x05f8daff968398c87,0x000020ea99bd0cdd,0x000006d9feca7c173,0x0000000000000000,0x05fa0000000000000,0x000020e000000000,0x000006da000000000},
+ { 0x000000000000888b,0x0047bae56830d2ae0,0x000084f4e58141dd,0x000105034b4db8e91,0x0000000000000000,0x0047c000000000000,0x0000840000000000,0x00010540000000000},
+ { 0x0000000000000009,0x003911ae58bde00a3,0x000000002565b9ad,0x0000a8b681499d224,0x0000000000000000,0x00392000000000000,0x0000000000000000,0x0000a8c0000000000},
+ { 0x000000000144c5ab,0x0062add7bdaa73bca,0x000000012af9c292,0x00082648c6471212f,0x0000000000000000,0x0062c000000000000,0x0000000000000000,0x00082800000000000},
+ { 0x0000000000000019,0x0000001da42a48c4e,0x0000000aba2f1784,0x00000004689c82e7a,0x0000000000000000,0x0000001da80000000,0x0000000ab0000000,0x00000004690000000},
+ { 0x000000000000006f,0x00000002cf2b27e19,0x0000000000000093,0x0000000000000ad20,0x0000000000000000,0x00000002d00000000,0x0000000000000080,0x0000000000000ad40},
+ { 0x0000000000000005,0x006aff04e4485d67a,0x00001a49951e7da3,0x0000065770f50e291,0x0000000000000000,0x006b0000000000000,0x00001a4000000000,0x00000658000000000},
+ { 0x000000023b05c931,0x0000e07c45a407c7d,0x0000013d1cf6b331,0x0000038e2f4b9f5fe,0x0000000000000000,0x0000e080000000000,0x0000013000000000,0x0000038f000000000},
+ { 0x000000dd0b47895e,0x04a065847058b33ee,0x020a15ec26864b45,0x002d3025039de5146,0x0000000000000000,0x04a20000000000000,0x020a000000000000,0x002d3400000000000},
+ { 0x0000001ead067b1c,0x00005a05a2e168851,0x000000e8cb2f0db7,0x00000013ff534154c,0x0000000000000000,0x00005a20000000000,0x000000e8c0000000,0x00000014000000000},
+ { 0x00000000a2ea04e3,0x00000006e686cbc9b,0x00000001fddc78d1,0x000000025d21e276b,0x00000000a0000000,0x00000006e80000000,0x00000001f0000000,0x000000025e0000000},
+ { 0x0000000000000007,0x0074c8b23532860fa,0x000000000002d033,0x000bdd504c3121637,0x0000000000000000,0x0074e000000000000,0x0000000000000000,0x000be000000000000},
+ { 0x0000000000000025,0x000000010a7b6833e,0x00000000000bbf4c,0x00000000002049889,0x0000000000000000,0x000000010a8000000,0x00000000000b8000,0x00000000002050000},
+ { 0x000000002710d1f8,0x000000d0906f33d9a,0x000000020207346a,0x000000002fe9440d3,0x0000000000000000,0x000000d0c00000000,0x0000000202000000,0x000000002fec00000},
+ { 0x0000000000000001,0x000000000bf68ed2a,0x0000000000004ff8,0x00000000000006967,0x0000000000000000,0x000000000bf800000,0x0000000000004ff8,0x00000000000006968},
+ { 0x0000000000000e90,0x0000d32bb0a82c1a0,0x000000007bf5d74a,0x000000f03105db78e,0x0000000000000000,0x0000d340000000000,0x0000000000000000,0x000000f0400000000},
+ { 0x0000000001a60c3d,0x0e0dd1a04f1315f62,0x000000027f7e9bda,0x0004af5cf2ae57329,0x0000000000000000,0x0e100000000000000,0x0000000000000000,0x0004b000000000000},
+ { 0x0000000000030699,0x0008addfc671f89fa,0x000000000003873d,0x000000000346f9cde,0x0000000000000000,0x0008b000000000000,0x0000000000000000,0x00000000034700000},
+ { 0x00000000036c03ce,0x0000017a65fe1f8a1,0x000000018dee68d1,0x000000001e91c929e,0x0000000000000000,0x0000017a800000000,0x000000018de00000,0x000000001e9200000},
+ { 0x000000000000000b,0x00000001ed98ed327,0x00000000000000f8,0x0000000000001ec5e,0x0000000000000000,0x00000001ee0000000,0x0000000000000080,0x0000000000001ec80},
+ { 0x0000000000000266,0x006d1b9268cdd6e68,0x00000000005263b1,0x00000002536b27bd5,0x0000000000000000,0x006d2000000000000,0x0000000000000000,0x00000002540000000},
+ { 0x00000000000001c7,0x00022e772dbe42e4d,0x0000134ecfb83f99,0x00017685a95416430,0x0000000000000000,0x00022f00000000000,0x0000100000000000,0x00017700000000000},
+ { 0x00000000222cc507,0x0000004d67307d056,0x0000000098721986,0x0000000b73e6dc3ae,0x0000000000000000,0x0000004d800000000,0x0000000080000000,0x0000000b740000000},
+ { 0x000000000000a664,0x0005f4f5853dd0bb0,0x00001e85019a6591,0x00007346be3f1b3fe,0x0000000000000000,0x0005f600000000000,0x00001e0000000000,0x00007360000000000},
+ { 0x000000045583be0e,0x0000cb9eb8f162f15,0x000001f9dbffb250,0x00000301fee8bb9e2,0x0000000000000000,0x0000cbc0000000000,0x000001f000000000,0x00000302000000000},
+ { 0x00000000002fdaab,0x00112cd1fbb6acd12,0x00000000051b05a6,0x0000000085b38c5e9,0x0000000000000000,0x00113000000000000,0x0000000004000000,0x0000000085c000000},
+ { 0x000000000000f177,0x01baa7a47b55f4c47,0x000000000019fc8e,0x00000002c75f8333d,0x0000000000000000,0x01bb0000000000000,0x0000000000000000,0x00000002c80000000},
+ { 0x0000000000000003,0x000000013d2060208,0x0000000000000006,0x00000000000283648,0x0000000000000000,0x000000013d8000000,0x0000000000000000,0x00000000000284000},
+ { 0x000000000000014e,0x01ffd58c7b52cd193,0x00000003a7b8b730,0x00000000a97a2d98b,0x0000000000000000,0x02000000000000000,0x00000003a6000000,0x00000000a98000000},
+ { 0x0000000000000005,0x00000000ca5381a35,0x0000000000000a65,0x00000000000001e37,0x0000000000000000,0x00000000ca8000000,0x0000000000000a60,0x00000000000001e38},
+ { 0x0000000000000003,0x000000000e3cc8062,0x0000000000000058,0x00000000000979440,0x0000000000000000,0x000000000e4000000,0x0000000000000000,0x0000000000097c000},
+ { 0x00000000b390943f,0x06b6ef3e1c2b12a75,0x000000010bbe9db8,0x0000000017466f7cb,0x0000000000000000,0x06b80000000000000,0x000000010ba00000,0x00000000174800000},
+ { 0x0000000000000007,0x05f560c8d094c0987,0x000000000000000e,0x00000000001c9284d,0x0000000000000000,0x05f60000000000000,0x0000000000000000,0x00000000001c98000},
+ { 0x000000000000000b,0x000001903ab98c1f8,0x00000000000701a4,0x00000176a8d8789ef,0x0000000000000000,0x00000190800000000,0x0000000000000000,0x00000177000000000},
+ { 0x0000000011a2997c,0x000d52d429c3db6d8,0x00001564529a3b72,0x000001f8b98e46e67,0x0000000000000000,0x000d5400000000000,0x0000156400000000,0x000001f8c00000000},
+ { 0x00000000000000fc,0x00007135db81ac5eb,0x0000000000000319,0x000001c89e08e970d,0x0000000000000000,0x00007140000000000,0x0000000000000000,0x000001c9000000000},
+ { 0x0000000000000052,0x000000064f0d21660,0x0000000001d0a4f2,0x00000000be82729f0,0x0000000000000000,0x00000006500000000,0x0000000000000000,0x00000000bec000000},
+ { 0x0000000000000045,0x0016ad7e443b6e9c5,0x0000000306047a5a,0x00038620f56b58a86,0x0000000000000000,0x0016b000000000000,0x0000000000000000,0x00038700000000000},
+ { 0x000000002500f999,0x000f14ed1a28788b3,0x0000000cb7971038,0x00000033e09777103,0x0000000000000000,0x000f1800000000000,0x0000000c00000000,0x00000033f00000000},
+ { 0x0000000000003321,0x00033a41055cc08bb,0x000000003cb6cc5f,0x000013b615800a8bf,0x0000000000000000,0x00033b00000000000,0x0000000000000000,0x000013b8000000000},
+ { 0x0000000000000454,0x00000009052f61d1c,0x000000000f3d49d0,0x0000000003b61b3bb,0x0000000000000000,0x00000009080000000,0x000000000f300000,0x0000000003b700000},
+ { 0x000000026fc63bf8,0x047549494c204fe7e,0x0000006ea69ee38b,0x0000000b0a23a2433,0x0000000000000000,0x04760000000000000,0x0000006ea0000000,0x0000000b0c0000000},
+ { 0x0000000000007c2e,0x00000000310631a58,0x00000000003c7848,0x000000000a2dc8fcd,0x0000000000000000,0x00000000311000000,0x0000000000000000,0x000000000a3000000},
+ { 0x0000000000000001,0x000027c05e2cc9c81,0x000000000000015f,0x0000014b5927170b7,0x0000000000000000,0x000027d0000000000,0x0000000000000000,0x0000014b800000000},
+ { 0x0000000000334702,0x00016899bb42751aa,0x000000006623934b,0x000000076f56ff029,0x0000000000000000,0x00016900000000000,0x0000000060000000,0x00000007700000000},
+ { 0x000000000002e3d9,0x00001ccb5aa148671,0x00000003556f3adb,0x000000c5c3922f837,0x0000000000000000,0x00001cd0000000000,0x0000000000000000,0x000000c6000000000},
+ { 0x000000000000155d,0x0000000003008dd98,0x0000000000002d22,0x00000000000006824,0x0000000000000000,0x00000000030100000,0x0000000000002d20,0x00000000000006830},
+ { 0x00000000000002c8,0x0000210251d952e61,0x0000000000d4e86e,0x0000000000e8727d6,0x0000000000000000,0x00002110000000000,0x0000000000d40000,0x0000000000e880000},
+ { 0x0000000000000092,0x004388e99368180fc,0x0000001bdf029bef,0x00000008c818000b1,0x0000000000000000,0x0043a000000000000,0x0000001bc0000000,0x00000008ca0000000},
+ { 0x0000000000000006,0x000000000037b7739,0x00000000000003ce,0x00000000000015e24,0x0000000000000000,0x000000000037c0000,0x0000000000000380,0x00000000000015e80},
+ { 0x00000000086eff91,0x000005ee79afb7b37,0x0000098feed2f406,0x00000135f5c634ab4,0x0000000000000000,0x000005f0000000000,0x0000098c00000000,0x00000136000000000},
+ { 0x0000000000000000,0x0b77a5f874ba24cdb,0x0000000000000022,0x00000000000000062,0x0000000000000000,0x0b780000000000000,0x0000000000000022,0x00000000000000062},
+ { 0x00000000001da22b,0x00e318b12a9f0c72a,0x00039efb1f863c88,0x0026432af73a873d1,0x0000000000000000,0x00e34000000000000,0x0003000000000000,0x00265000000000000},
+ { 0x000000000000001e,0x0030bda3e0ce7e692,0x00000395c3e34e62,0x000006358986a9be7,0x0000000000000000,0x0030c000000000000,0x0000038000000000,0x00000636000000000},
+ { 0x0000000000000035,0x0000000795e141a1b,0x0000000000140cfc,0x00000000002866ce1,0x0000000000000000,0x00000007960000000,0x0000000000140000,0x00000000002870000},
+ { 0x000000000069d0d3,0x002bc71fca9954741,0x000008197885e6c3,0x000032d5d973c23d6,0x0000000000000000,0x002bd000000000000,0x0000080000000000,0x000032e0000000000},
+ { 0x000000000000058a,0x00000002dbae763fc,0x00000000000006fc,0x000000000001d41b9,0x0000000000000000,0x00000002dc0000000,0x0000000000000000,0x000000000001d4800},
+ { 0x000000000011684f,0x0109ad1f4689d0113,0x000000c939dda2e1,0x0000e6245ba02e834,0x0000000000000000,0x010a0000000000000,0x0000000000000000,0x0000e640000000000},
+ { 0x0000000000000060,0x00002dedf522a2397,0x00000001c6515469,0x0000024775ac62005,0x0000000000000000,0x00002df0000000000,0x0000000000000000,0x00000248000000000},
+ { 0x0000000000000014,0x00f8e7a1d2deb246e,0x00000000e6bda9ec,0x000083b151bf7f781,0x0000000000000000,0x00f90000000000000,0x0000000000000000,0x000083c0000000000},
+ { 0x0000000000000003,0x0000bdf507c414ba7,0x0000000000000685,0x0000369f8116e1a53,0x0000000000000000,0x0000be00000000000,0x0000000000000000,0x000036a0000000000},
+ { 0x0000000000001c03,0x0007c5db749184061,0x0000000000003709,0x000017905f20f1837,0x0000000000000000,0x0007c600000000000,0x0000000000000000,0x00001798000000000},
+ { 0x000000000000009b,0x0000000d8def3c1a2,0x00000000000003a4,0x000000000000077b2,0x0000000000000000,0x0000000d900000000,0x00000000000003a0,0x000000000000077c0},
+ { 0x0000000000000858,0x000000338429570f0,0x0000000000005db9,0x0000000000bba1024,0x0000000000000000,0x00000033900000000,0x0000000000000000,0x0000000000bbc0000},
+ { 0x000000001139b799,0x041068e6bbd5993a3,0x000081b112942e20,0x000024e363b966251,0x0000000000000000,0x04120000000000000,0x0000818000000000,0x000024e8000000000},
+ { 0x000000000000000e,0x00001aad6104435a3,0x000000000000003a,0x00000000000006335,0x0000000000000000,0x00001ab0000000000,0x0000000000000020,0x00000000000006340},
+ { 0x0000000000000003,0x001c06ab5f1788a52,0x0000000063f9edce,0x000000054adaee27b,0x0000000000000000,0x001c0800000000000,0x0000000060000000,0x000000054c0000000},
+ { 0x0000000000007d54,0x000001de977bd76ab,0x0000000001b95e75,0x0000000030d2daba9,0x0000000000000000,0x000001df000000000,0x0000000001000000,0x0000000030e000000},
+ { 0x00000000001896ce,0x0000258006829c5ad,0x00000000bec8634d,0x000000000e1cfe5d0,0x0000000000000000,0x00002590000000000,0x00000000bec00000,0x000000000e1d00000},
+ { 0x000000000870662e,0x03d3efeb44b380032,0x000000061d996506,0x00011001744f85404,0x0000000000000000,0x03d40000000000000,0x0000000000000000,0x00011080000000000},
+ { 0x00000000000530c0,0x03adbe0ce65a36e6e,0x00006623b2dfb337,0x000257769d6cd58c9,0x0000000000000000,0x03ae0000000000000,0x0000600000000000,0x00025800000000000},
+ { 0x0000000000000132,0x000005b2c60851d39,0x0000000001126acd,0x00000018158792ef8,0x0000000000000000,0x000005b4000000000,0x0000000000000000,0x00000018180000000},
+ { 0x000000000000082b,0x0025989fa058a5456,0x00000000000016c6,0x00014855541c667b7,0x0000000000000000,0x0025a000000000000,0x0000000000000000,0x00014880000000000},
+ { 0x000000000000000e,0x000c230d4f9f0de63,0x0000000000d552dc,0x0000000003b471cfd,0x0000000000000000,0x000c2400000000000,0x0000000000d00000,0x0000000003b500000},
+ { 0x0000000000000188,0x092776058e41de200,0x00000000aaa7a2bc,0x00000004a69eddc5e,0x0000000000000000,0x09280000000000000,0x00000000a0000000,0x00000004a80000000},
+ { 0x0000000000000006,0x0000000000007e051,0x0000000000000074,0x00000000000002e64,0x0000000000000000,0x0000000000007e200,0x0000000000000070,0x00000000000002e70},
+ { 0x0000000038e5b276,0x0000126d6236216e9,0x0000000059fc02a7,0x00000000193b05f16,0x0000000000000000,0x00001270000000000,0x0000000059800000,0x00000000194000000},
+ { 0x0000001512757289,0x00f106b4e1f4a0d15,0x0000002fbbc0da7c,0x00012fc37866fd170,0x0000000000000000,0x00f14000000000000,0x0000000000000000,0x00013000000000000},
+ { 0x00000000000000c2,0x000018c5e11d046b5,0x0000000049417a4e,0x00000003d0d3911f5,0x0000000000000000,0x000018c8000000000,0x0000000040000000,0x00000003d10000000},
+ { 0x000000000001d112,0x00000041a679d0f8a,0x000000000fdd525b,0x0000000001ed8ce5f,0x0000000000000000,0x00000041c00000000,0x000000000fdc0000,0x0000000001edc0000},
+ { 0x0000000000000043,0x00000000000118702,0x0000000000031584,0x00000000000089223,0x0000000000000000,0x00000000000118800,0x0000000000031400,0x00000000000089400},
+ { 0x0000000000000004,0x00036cad060051927,0x0000000000025bfa,0x0000000000096c278,0x0000000000000000,0x00036d00000000000,0x0000000000024000,0x00000000000970000},
+ { 0x0000000000000003,0x000714aea6921b60d,0x00000002da6b7742,0x0000000e0e281ec0e,0x0000000000000000,0x00071600000000000,0x00000002c0000000,0x0000000e100000000},
+ { 0x0000000000000043,0x012407728471d8722,0x0000000000000421,0x0005267fed3cd6aeb,0x0000000000000000,0x01248000000000000,0x0000000000000000,0x00052800000000000},
+ { 0x0000000000000628,0x000000c99e73f2c56,0x00000000000c27e1,0x0000000d1e4479edd,0x0000000000000000,0x000000c9c00000000,0x0000000000000000,0x0000000d200000000},
+ { 0x000000c6e49bddef,0x009e030a971147c39,0x000179bb546760e9,0x0001421d352ccb576,0x0000000000000000,0x009e4000000000000,0x0001780000000000,0x00014280000000000},
+ { 0x000000000000007a,0x0000016b4fcd74009,0x00000000004fc193,0x00000000001582515,0x0000000000000000,0x0000016b800000000,0x00000000004f8000,0x00000000001588000},
+ { 0x0000000000000003,0x000000001167e692a,0x00000000000e521d,0x000000000d438e0d9,0x0000000000000000,0x00000000116800000,0x0000000000000000,0x000000000d4400000},
+ { 0x00000000001a2946,0x002d1cf98f10c794f,0x0000001a7b7ca420,0x0000000a8e29ba72e,0x0000000000000000,0x002d2000000000000,0x0000001a40000000,0x0000000a900000000},
+ { 0x0000000000000009,0x0000031e80d00eced,0x0000000014fa9061,0x00000000b3cbcef9d,0x0000000000000000,0x0000031f000000000,0x0000000014000000,0x00000000b40000000},
+ { 0x0000000000f38621,0x0c4e6b4973cb4804d,0x0000fe7d5f9fd60b,0x0000340faaeba907e,0x0000000000000000,0x0c500000000000000,0x0000fe0000000000,0x00003410000000000},
+ { 0x00000000071fe546,0x00000466762c3c74f,0x00000000a4194b0c,0x0000013225e21a3e6,0x0000000000000000,0x00000468000000000,0x0000000000000000,0x00000132800000000},
+ { 0x0000000000000b3b,0x0ec65b8d5ed0909b8,0x000000000001ec11,0x002763202dfd061c2,0x0000000000000000,0x0ec80000000000000,0x0000000000000000,0x00277000000000000},
+ { 0x000000000000001e,0x000800c77d4a836de,0x000000000000d846,0x00000000001ade55c,0x0000000000000000,0x00080400000000000,0x0000000000008000,0x00000000001ae0000},
+ { 0x0000000000000002,0x003d5bfddb45a0b8d,0x0000000003dc59ce,0x000000cf1230948c8,0x0000000000000000,0x003d6000000000000,0x0000000000000000,0x000000cf400000000},
+ { 0x0000000000000009,0x00002163fc90e12e4,0x0000000001867770,0x0000000984d4b3a46,0x0000000000000000,0x00002170000000000,0x0000000000000000,0x00000009880000000},
+ { 0x000000000007bd97,0x000000b3115886ee8,0x00000002488a153b,0x0000000041a2235c4,0x0000000000000000,0x000000b3400000000,0x0000000248800000,0x0000000041a800000},
+ { 0x0000000000737249,0x03d9b1a3e480c9607,0x019ee5a7148fb4c4,0x001c8b95a29dc4a95,0x0000000000000000,0x03da0000000000000,0x019ee00000000000,0x001c8c00000000000},
+ { 0x0000000000000004,0x00001fb72e3717da0,0x000000000000011e,0x00000000cf8885caf,0x0000000000000000,0x00001fb8000000000,0x0000000000000000,0x00000000cfc000000},
+ { 0x0000000000000173,0x01cc17ff2316a3b0a,0x000b3c40dc221fe1,0x003d44d20979df21a,0x0000000000000000,0x01cc8000000000000,0x000b000000000000,0x003d5000000000000},
+ { 0x0000000000000004,0x0027cc465f21ce2b1,0x000000000000001a,0x000000001db39a928,0x0000000000000000,0x0027d000000000000,0x0000000000000000,0x000000001db800000},
+ { 0x000000000000c0c4,0x01b5f041b34ae02c8,0x0000000000018496,0x001f1b928b6985583,0x0000000000000000,0x01b60000000000000,0x0000000000000000,0x001f2000000000000},
+ { 0x0000000000000255,0x001e222edc6a506ce,0x0000000000000278,0x000000030af5d72cf,0x0000000000000000,0x001e2800000000000,0x0000000000000000,0x000000030b0000000},
+ { 0x0000000000003879,0x01679791b9ced0ecc,0x000023cb55b8200b,0x00007e4d2f73eea0e,0x0000000000000000,0x01680000000000000,0x0000220000000000,0x00007e60000000000},
+ { 0x0000000000000007,0x0000df82452bc2980,0x000000002869c39e,0x000000916a3137dd0,0x0000000000000000,0x0000dfc0000000000,0x0000000000000000,0x00000091800000000},
+ { 0x000000000000000d,0x01950958376b2df07,0x000000000000008b,0x000000000018f4533,0x0000000000000000,0x01958000000000000,0x0000000000000000,0x000000000018f8000},
+ { 0x00000000000010a2,0x00005614130332ee1,0x0000000000010ba1,0x00000000f731be11b,0x0000000000000000,0x00005620000000000,0x0000000000000000,0x00000000f74000000},
+ { 0x00000000000083f2,0x00b66a88c7341654b,0x0000000000070a97,0x0002b5391b330b583,0x0000000000000000,0x00b68000000000000,0x0000000000000000,0x0002b600000000000},
+ { 0x00000000000003c5,0x0007112da7b8baaee,0x00000039899a05ff,0x000000054972f6a4d,0x0000000000000000,0x00071200000000000,0x0000003988000000,0x00000005498000000},
+ { 0x00000000000028ad,0x000000c80560e7e89,0x0000000061c3dfe4,0x0000002bad97d55ae,0x0000000000000000,0x000000c8400000000,0x0000000000000000,0x0000002bb00000000},
+ { 0x0000000000001a41,0x0000001c2a96cc5f3,0x0000000000003b3a,0x00000019c838a4b77,0x0000000000000000,0x0000001c300000000,0x0000000000000000,0x00000019d00000000},
+ { 0x000000000000001b,0x0000000de6ff8a6c9,0x000000011654603e,0x0000000023d09384d,0x0000000000000000,0x0000000de80000000,0x0000000116000000,0x0000000023d800000},
+ { 0x000000000000022c,0x000007444eab964cb,0x000000000000be62,0x00000092978a128c7,0x0000000000000000,0x00000746000000000,0x0000000000000000,0x00000092c00000000},
+ { 0x0000000000000015,0x000b0d40efbf6f782,0x0000000000104a61,0x00000000022a39e51,0x0000000000000000,0x000b1000000000000,0x0000000000100000,0x00000000022b00000},
+ { 0x00000010d64cfe6b,0x00e200dbe62b8f1f3,0x00009d9d17529975,0x00000a230d401fc28,0x0000000000000000,0x00e24000000000000,0x00009d9c00000000,0x00000a23200000000},
+ { 0x000000000000000a,0x0000bdaaf9725820c,0x000000000000550b,0x000000000000ee6c0,0x0000000000000000,0x0000bdc0000000000,0x0000000000005400,0x000000000000ee800},
+ { 0x0000000000000007,0x00393d0203b069ce0,0x0000000000000045,0x00000000000009a40,0x0000000000000000,0x00394000000000000,0x0000000000000040,0x00000000000009a40},
+ { 0x00000000003bc3b5,0x0185ecf85bd5800ed,0x0000007a64cab0e8,0x01616be211262742f,0x0000000000000000,0x01860000000000000,0x0000000000000000,0x01618000000000000},
+ { 0x000000000000003f,0x00000000077d65b62,0x000000000000904f,0x0000000000028c594,0x0000000000000000,0x00000000077e00000,0x0000000000009000,0x0000000000028d000},
+ { 0x0000000000015a55,0x0004b41e248f26b73,0x0000000000057522,0x000000000039014d4,0x0000000000000000,0x0004b600000000000,0x0000000000050000,0x00000000003910000},
+ { 0x0000000000000008,0x000003349a34ba701,0x0000000000000da0,0x00000019be0cc489b,0x0000000000000000,0x00000335000000000,0x0000000000000000,0x00000019c00000000},
+ { 0x0000000000000003,0x00000201222e54631,0x00000000000005f1,0x00000000000110feb,0x0000000000000000,0x00000202000000000,0x0000000000000000,0x00000000000111000},
+ { 0x0000000000757527,0x00002326784a9e279,0x00000000487d0a89,0x0000000a5f4828a1a,0x0000000000000000,0x00002330000000000,0x0000000040000000,0x0000000a600000000},
+ { 0x00000000000002d5,0x000a4a169b850820d,0x0000000120158814,0x00000d2b8bd224224,0x0000000000000000,0x000a4c00000000000,0x0000000000000000,0x00000d2c000000000},
+ { 0x0000000000001c89,0x0069065c1d6ad28ba,0x00000000088cb7a3,0x0000134aadfb78c65,0x0000000000000000,0x00692000000000000,0x0000000000000000,0x00001350000000000},
+ { 0x0000001a2d701c35,0x0005d27e158be617f,0x000005288f30057a,0x000027595518138e4,0x0000000000000000,0x0005d400000000000,0x0000050000000000,0x00002760000000000},
+ { 0x00000000000011c2,0x0004279e3f548a4fd,0x00000c12da04d0fb,0x000037c7addd3ac2e,0x0000000000000000,0x00042800000000000,0x00000c0000000000,0x000037d0000000000},
+ { 0x0000000000000002,0x00083736849e97964,0x000000000000003b,0x0000ac9556901afa1,0x0000000000000000,0x00083800000000000,0x0000000000000000,0x0000acc0000000000},
+ { 0x0000000000000001,0x00000037300182524,0x000000000006bf3e,0x0000000ae85772a68,0x0000000000000000,0x00000037400000000,0x0000000000000000,0x0000000aec0000000},
+ { 0x00000000002d72d2,0x006dcf140ddb7d96f,0x0000000000360b51,0x00000000000fa030c,0x0000000000000000,0x006de000000000000,0x0000000000360000,0x00000000000fa4000},
+ { 0x0000000000c62b09,0x005867cb3e9048d7a,0x0000000034482327,0x00069ff4f552b906f,0x0000000000000000,0x00588000000000000,0x0000000000000000,0x0006a000000000000},
+ { 0x000000000000004d,0x03fcc27b86e7c4757,0x0000064c928b0f61,0x011ccd70e08a93201,0x0000000000000000,0x03fd0000000000000,0x0000000000000000,0x011d0000000000000},
+ { 0x0000000000000014,0x00059b45805e3d5e6,0x0000000000464139,0x000000fe24c018979,0x0000000000000000,0x00059c00000000000,0x0000000000000000,0x000000fe400000000},
+ { 0x0000000000001503,0x007758f4f5f6f2a18,0x0000014a68aea959,0x00001edf90699c5a6,0x0000000000000000,0x00776000000000000,0x0000010000000000,0x00001ee0000000000},
+ { 0x000000000000000f,0x0001d0c3c475dc645,0x00000000000002c3,0x0000000000036cd16,0x0000000000000000,0x0001d100000000000,0x0000000000000000,0x0000000000036d000},
+ { 0x0000000000000007,0x000001680ed0ed817,0x000000000004ade6,0x000000000071bd044,0x0000000000000000,0x00000168800000000,0x0000000000040000,0x000000000071c0000},
+ { 0x0000000000000018,0x003700380195211e4,0x000233f75435b889,0x00022f8fa01a68b09,0x0000000000000000,0x00371000000000000,0x0002300000000000,0x00023000000000000},
+ { 0x0000000000016165,0x0000eaa5f96745778,0x0000000002f93fec,0x000000005c89fcf6e,0x0000000000000000,0x0000eac0000000000,0x0000000002000000,0x000000005ca000000},
+ { 0x00000000103b777a,0x000196ec63d55d586,0x0000000046f30164,0x0000000011ae2a573,0x0000000000000000,0x00019700000000000,0x0000000046c00000,0x0000000011b000000},
+ { 0x00000000000a4fd5,0x04417a16d806cb7ec,0x00000ddec9cf3830,0x0000017d782e51a8b,0x0000000000000000,0x04420000000000000,0x00000ddc00000000,0x0000017d800000000},
+ { 0x000000002ca7e6b2,0x026e8f6609ece9a92,0x0000039ed08e6580,0x0000004542aeff99f,0x0000000000000000,0x026f0000000000000,0x0000039ec0000000,0x00000045440000000},
+ { 0x0000000000000060,0x0008aefdc8a241812,0x000000000000708f,0x00000000000bc19cf,0x0000000000000000,0x0008b000000000000,0x0000000000004000,0x00000000000bc4000},
+ { 0x000000000000007e,0x0010e3b7c66dcdbd1,0x000000586fa659fa,0x000062fac7a630ecf,0x0000000000000000,0x0010e800000000000,0x0000000000000000,0x00006300000000000},
+ { 0x000000bfe4e9f0d4,0x001739ed9d9c1fbaa,0x000003092483de48,0x00014fb792323a094,0x0000000000000000,0x00174000000000000,0x0000000000000000,0x00015000000000000},
+ { 0x00000000c44351bc,0x002d6f8f48227e7d0,0x000000019838315d,0x0000000afe9bef411,0x0000000000000000,0x002d7000000000000,0x0000000180000000,0x0000000b000000000},
+ { 0x000000000003d647,0x0000000ca26b0ea60,0x00000000015c9722,0x00000000013be3039,0x0000000000000000,0x0000000ca40000000,0x0000000001580000,0x00000000013c00000},
+ { 0x00000000002be6dd,0x0199eb785c0f8f634,0x000000028252be3d,0x0084aaeaa5e5ed101,0x0000000000000000,0x019a0000000000000,0x0000000000000000,0x0084c000000000000},
+ { 0x000000000000002b,0x0042f5ccffbc5e551,0x0000000000000075,0x000000003d98ee270,0x0000000000000000,0x00430000000000000,0x0000000000000000,0x000000003da000000},
+ { 0x00000000053b0be5,0x0089121fef9c91577,0x000002675a2908b0,0x0000032627be08c5c,0x0000000000000000,0x00894000000000000,0x0000026000000000,0x00000327000000000},
+ { 0x0000000000000a22,0x00000375413707490,0x00000000152133ee,0x000000222f3a5033b,0x0000000000000000,0x00000376000000000,0x0000000000000000,0x00000022300000000},
+ { 0x0000000000000003,0x000000000c45a0b82,0x00000000000195fa,0x00000000000171a34,0x0000000000000000,0x000000000c4800000,0x0000000000019000,0x00000000000172000},
+ { 0x0000000000000368,0x0000000007f476676,0x00000000000003f8,0x000000000003c7e74,0x0000000000000000,0x0000000007f600000,0x0000000000000000,0x000000000003c8000},
+ { 0x000000000000f890,0x00000005336286c0d,0x0000000000252e77,0x00000001db212cb8d,0x0000000000000000,0x00000005340000000,0x0000000000000000,0x00000001db8000000},
+ { 0x000000000000cec8,0x00000000003e67f8b,0x0000000001a67e77,0x00000000002a7abc4,0x0000000000000000,0x00000000003e70000,0x0000000001a60000,0x00000000002a80000},
+ { 0x0000000000000003,0x04c721fd7ce262f16,0x0000000000003ae1,0x000002820b9103af9,0x0000000000000000,0x04c80000000000000,0x0000000000000000,0x00000283000000000},
+ { 0x00000208d4630111,0x076a788eb3d5d208f,0x0000080b12cd2f6c,0x00182335f8ea109f1,0x0000000000000000,0x076c0000000000000,0x0000000000000000,0x00182800000000000},
+ { 0x000000000006c166,0x0000000616f62dcdd,0x000000000109c351,0x0000000000f0f2a32,0x0000000000000000,0x00000006180000000,0x0000000001080000,0x0000000000f100000},
+ { 0x0000000000000500,0x0000000b221c70f61,0x000000000039fa40,0x00000000012c57242,0x0000000000000000,0x0000000b240000000,0x0000000000380000,0x00000000012c80000},
+ { 0x0000000000000e92,0x0000000003933510a,0x00000000039ad8a8,0x00000000027030065,0x0000000000000000,0x00000000039400000,0x0000000003900000,0x00000000027100000},
+ { 0x0000000000000001,0x00019a736359e56ad,0x00000000000000cb,0x00000000000000a97,0x0000000000000000,0x00019a80000000000,0x00000000000000cb,0x00000000000000a97},
+ { 0x00000f58474f653e,0x01f62f32d5624e1d3,0x000bc40c1a3c5a3d,0x000219bc0b90153d7,0x0000000000000000,0x01f68000000000000,0x000bc00000000000,0x00021a00000000000},
+ { 0x0000000000001108,0x000ab52dfbb13a139,0x00000005e37d46c3,0x0000000407a69a7a3,0x0000000000000000,0x000ab800000000000,0x00000005e0000000,0x00000004080000000},
+ { 0x00000000a21054af,0x000a3016f7a808f40,0x0000003bc4e6cd72,0x000002f0662656da1,0x0000000000000000,0x000a3400000000000,0x0000003000000000,0x000002f1000000000},
+ { 0x000000000000005b,0x0000000495ec400dc,0x0000000000000596,0x00000000003886272,0x0000000000000000,0x00000004960000000,0x0000000000000000,0x00000000003890000},
+ { 0x000000000003e7e6,0x000000082009c1fa7,0x00000002b8926c28,0x00000001d256887c8,0x0000000000000000,0x00000008240000000,0x00000002b8000000,0x00000001d28000000},
+ { 0x000000000000000e,0x0000e6ff18d89cda1,0x000000000000003a,0x000000000000007d6,0x0000000000000000,0x0000e700000000000,0x000000000000003a,0x000000000000007d6},
+ { 0x000000000002ba7c,0x00028d2bc305e4bc7,0x0000000000364084,0x000000169b79128d1,0x0000000000000000,0x00028e00000000000,0x0000000000000000,0x00000016a00000000},
+ { 0x0000000000002659,0x0000036fbde4bb60f,0x00000000001db7d7,0x0000017edcdad9138,0x0000000000000000,0x00000370000000000,0x0000000000000000,0x0000017f000000000},
+ { 0x0000000000000007,0x00000000e4b22eafc,0x0000000000000bc2,0x00000000000e8e4a2,0x0000000000000000,0x00000000e4c000000,0x0000000000000000,0x00000000000e90000},
+ { 0x0000000000000000,0x00000006fa78ce495,0x000000000000000c,0x00000000000001930,0x0000000000000000,0x00000006fc0000000,0x0000000000000008,0x00000000000001930},
+ { 0x0000000000000e24,0x000000000002404bd,0x00000000000018b7,0x000000000000f5a05,0x0000000000000000,0x00000000000241000,0x0000000000001800,0x000000000000f5c00},
+ { 0x000000000000000e,0x000047edbe334f70c,0x0000000024489441,0x000000007e0195c10,0x0000000000000000,0x00004800000000000,0x0000000024000000,0x000000007e2000000},
+ { 0x00000000000001c3,0x0056e61d8aff65371,0x0000000000055215,0x00000000000111a83,0x0000000000000000,0x00570000000000000,0x0000000000055000,0x00000000000111c00},
+ { 0x0000000000000000,0x000000aeae008ac9d,0x00000000000d0863,0x000000594b4c057b3,0x0000000000000000,0x000000aec00000000,0x0000000000000000,0x00000059600000000},
+ { 0x0000000006d382d9,0x01ed7e819ebab1c1b,0x005170c0298a1665,0x01ccb40ae8f52d0cc,0x0000000000000000,0x01ed8000000000000,0x0050000000000000,0x01cd0000000000000},
+ { 0x0000000000001179,0x002184631df6ddba1,0x000006aaf9702f02,0x000128b373331182b,0x0000000000000000,0x00219000000000000,0x0000000000000000,0x00012900000000000},
+ { 0x000000000000031b,0x0001e7690028148db,0x000000000136eb28,0x0000611f46a402578,0x0000000000000000,0x0001e780000000000,0x0000000000000000,0x00006120000000000},
+ { 0x000000000000001b,0x0001b3a2bd12450f5,0x000000000005c42e,0x0000000000031d2e9,0x0000000000000000,0x0001b400000000000,0x000000000005c000,0x0000000000031e000},
+ { 0x000000000000000b,0x000006841cf08d6f4,0x000000e4c8cae351,0x000000411712c4e91,0x0000000000000000,0x00000686000000000,0x000000e400000000,0x00000041200000000},
+ { 0x0000000000000000,0x04d087d650c10e388,0x00000005f5125f4a,0x00028cad125a82a97,0x0000000000000000,0x04d20000000000000,0x0000000000000000,0x00028d00000000000},
+ { 0x00000000000fa5ea,0x0037f445283f05db1,0x0000000001d09358,0x000000cba8fb95a59,0x0000000000000000,0x00380000000000000,0x0000000000000000,0x000000cbc00000000},
+ { 0x000000000000006d,0x000000001539cbaba,0x0000000000005c85,0x00000000000014aaf,0x0000000000000000,0x00000000154000000,0x0000000000005c80,0x00000000000014ac0},
+ { 0x0000000000006066,0x0000399ec0c8f1b9e,0x00000000000d630d,0x00000039a0c834f47,0x0000000000000000,0x000039a0000000000,0x0000000000000000,0x00000039b00000000},
+ { 0x000000000000f785,0x0027fc054d13a619f,0x000000009f7efc7f,0x000990d0c911c0a79,0x0000000000000000,0x00280000000000000,0x0000000000000000,0x00099400000000000},
+ { 0x0000000000000002,0x00001f821185b5671,0x00000000007b9e2b,0x0000000000b19073e,0x0000000000000000,0x00001f88000000000,0x0000000000780000,0x0000000000b1c0000},
+ { 0x000000001a767604,0x00007621925d74fa5,0x000001a018deb880,0x0000001ad89a2a77f,0x0000000000000000,0x00007640000000000,0x000001a018000000,0x0000001ad8c000000},
+ { 0x0000000000000003,0x0000000001b607a9b,0x000000000001fe35,0x00000000001eabb64,0x0000000000000000,0x0000000001b680000,0x0000000000018000,0x00000000001eb0000},
+ { 0x0000000598bcfbee,0x00fa1edb958e3dec6,0x000002335f69669b,0x000f8ca407c6aa7de,0x0000000000000000,0x00fa4000000000000,0x0000000000000000,0x000f9000000000000},
+ { 0x0000000e733d18ca,0x014a12bbfca07d49e,0x0000072c6e939a21,0x00025df189fc68464,0x0000000000000000,0x014a8000000000000,0x0000000000000000,0x00025e00000000000},
+ { 0x00000000000012e1,0x0000000170cec0455,0x0000000000302daa,0x000000003a08d6949,0x0000000000000000,0x00000001710000000,0x0000000000000000,0x000000003a1000000},
+ { 0x0000000000000002,0x0000007f9e9f374af,0x0000000000000276,0x0000000000000d40f,0x0000000000000000,0x0000007fa00000000,0x0000000000000240,0x0000000000000d440},
+ { 0x0000000000af895f,0x00355d588d1f28998,0x0000000100b26b91,0x00000000b24f2cac8,0x0000000000000000,0x00356000000000000,0x0000000100000000,0x00000000b28000000},
+ { 0x0000000000012812,0x0000008fa40eb284f,0x00000000000ce81f,0x000000000156e339a,0x0000000000000000,0x0000008fc00000000,0x0000000000080000,0x00000000015700000},
+ { 0x000000024b23719b,0x002ed81dcbfbf56a4,0x00000008e9ea4d7d,0x0000616eb8313e666,0x0000000000000000,0x002ee000000000000,0x0000000000000000,0x00006180000000000},
+ { 0x0000000000011fbf,0x05c48e3c142dd2f7d,0x0247d51adc986100,0x031c381e626a43e6d,0x0000000000000000,0x05c60000000000000,0x0240000000000000,0x031d0000000000000},
+ { 0x0000000000000007,0x0032a92d955e47b49,0x00000002a5d00b4c,0x0000001fdd896c3a6,0x0000000000000000,0x0032b000000000000,0x0000000280000000,0x0000001fe00000000},
+ { 0x00000006f7af05b2,0x092564f4a23521793,0x00007b6f080b1ad7,0x00004fe1c1b0aa724,0x0000000000000000,0x09280000000000000,0x00007a0000000000,0x00005000000000000},
+ { 0x0000000002478deb,0x096f0f8ea54958032,0x000000039db10cf5,0x0000026129752732c,0x0000000000000000,0x09700000000000000,0x0000000000000000,0x00000262000000000},
+ { 0x000000000000000c,0x00000001befc36395,0x000000000000001a,0x0000000000000002a,0x0000000000000000,0x00000001bf0000000,0x000000000000001a,0x0000000000000002a},
+ { 0x00000000001dd9b9,0x014059d49bc2bf85f,0x00000432a2cf3bcc,0x000018c4ce4bbc978,0x0000000000000000,0x01408000000000000,0x0000040000000000,0x000018c8000000000},
+ { 0x0000000000000004,0x0000188c32cb4ea3c,0x0000000000000009,0x0000000000000006d,0x0000000000000000,0x00001890000000000,0x0000000000000009,0x0000000000000006d},
+ { 0x0000000000000000,0x00033d2bc93b7f502,0x000000000001fe8d,0x0001a5964e881bf1e,0x0000000000000000,0x00033e00000000000,0x0000000000000000,0x0001a600000000000},
+ { 0x000000000000018e,0x0002cdc00448d3729,0x0000000000375591,0x00002355a81124a42,0x0000000000000000,0x0002ce00000000000,0x0000000000000000,0x00002360000000000},
+ { 0x0000000000000161,0x005584f3924cbf4be,0x000000000366cbbf,0x00000009fb63488cd,0x0000000000000000,0x0055a000000000000,0x0000000000000000,0x00000009fc0000000},
+ { 0x0000000000000c6d,0x0000074570a775010,0x00000000008cdac1,0x000000000064d6d46,0x0000000000000000,0x00000746000000000,0x00000000008c0000,0x000000000064e0000},
+ { 0x000000000e008d35,0x000030390f101cd22,0x000000183d5f6361,0x000000262b1649af4,0x0000000000000000,0x00003040000000000,0x0000001800000000,0x00000026300000000},
+ { 0x0000000000066519,0x000000234421ca22c,0x00000000019f6c02,0x00000000003a3b24e,0x0000000000000000,0x00000023500000000,0x00000000019f0000,0x00000000003a40000},
+ { 0x0000000000000006,0x00000000000006052,0x0000000000000273,0x00000000000000ef5,0x0000000000000000,0x00000000000006060,0x0000000000000273,0x00000000000000ef5},
+ { 0x000000000000001c,0x00c7dcc39f8624615,0x0000000000000092,0x0000000000001987c,0x0000000000000000,0x00c80000000000000,0x0000000000000080,0x00000000000019880},
+ { 0x0000000000000002,0x000016632783a546a,0x0000000000003a6e,0x000000000038b2f25,0x0000000000000000,0x00001668000000000,0x0000000000000000,0x000000000038c0000},
+ { 0x0000000000000600,0x0003639e373f7161c,0x00000000b7b3a4d8,0x000005a1faf244bc0,0x0000000000000000,0x00036400000000000,0x0000000000000000,0x000005a2000000000},
+ { 0x0000000000129aa9,0x0000025f6e3a78fcd,0x000000024efd83cf,0x000000014b825eeb9,0x0000000000000000,0x00000260000000000,0x0000000248000000,0x000000014c0000000},
+ { 0x000000000097e11f,0x01cad327321a33386,0x00000001674370da,0x00ffb410177491518,0x0000000000000000,0x01cb0000000000000,0x0000000000000000,0x00ffc000000000000},
+ { 0x00000000000db7dc,0x000000709d221968a,0x000000000033caf3,0x00000000046448bf5,0x0000000000000000,0x00000070a00000000,0x0000000000200000,0x00000000046600000},
+ { 0x0000000001e2f8de,0x01ad31ab9c500def2,0x00000167a956e188,0x000851500cf738f08,0x0000000000000000,0x01ad8000000000000,0x0000000000000000,0x00085400000000000},
+ { 0x0000000000000002,0x0000000000cecc5b9,0x0000000000001c46,0x0000000000009245d,0x0000000000000000,0x0000000000cf00000,0x0000000000001c00,0x00000000000092800},
+ { 0x000000000056e374,0x00002819cd82c1a0d,0x0000000000856279,0x00000001c469f22c2,0x0000000000000000,0x00002820000000000,0x0000000000000000,0x00000001c48000000},
+ { 0x0000000000000035,0x00c3f23ae7e4f34d5,0x000000000000ea93,0x0000000000006e9cf,0x0000000000000000,0x00c40000000000000,0x000000000000ea00,0x0000000000006ea00},
+ { 0x00000000000013c1,0x0000026256851a5f8,0x0000000000009929,0x00000001d393a5c6a,0x0000000000000000,0x00000263000000000,0x0000000000000000,0x00000001d40000000},
+ { 0x000000000000000b,0x000802d54e3711f39,0x000000000007bb9f,0x000000002f41c50fe,0x0000000000000000,0x00080400000000000,0x0000000000000000,0x000000002f5000000},
+ { 0x0000000000000018,0x0001dd9e8a3815e98,0x000000061a8868f2,0x00000059c31fa4eed,0x0000000000000000,0x0001de00000000000,0x0000000600000000,0x00000059e00000000},
+ { 0x0000000000000008,0x0060efc9f39f8fed8,0x00000000086b9296,0x0003cc5754e22dee2,0x0000000000000000,0x00610000000000000,0x0000000000000000,0x0003cd00000000000},
+ { 0x0000000000bca431,0x0aaa76e8ae5a37cea,0x00000001f03095cf,0x0000000093000e8bd,0x0000000000000000,0x0aac0000000000000,0x00000001f0000000,0x00000000932000000},
+ { 0x000000000000003c,0x0001aadb13d40a0e0,0x0000000000001576,0x00000000000386c3f,0x0000000000000000,0x0001ab00000000000,0x0000000000001000,0x00000000000387000},
+ { 0x000000000000001b,0x00000012ea8a3df9c,0x0000000000004e76,0x0000000732de8edb3,0x0000000000000000,0x00000012f00000000,0x0000000000000000,0x00000007340000000},
+ { 0x0000000000000001,0x000000229410f02d3,0x0000000006c36ee9,0x00000018028fbd0c1,0x0000000000000000,0x00000022a00000000,0x0000000000000000,0x00000018080000000},
+ { 0x0000000000000002,0x0539339e891406bb0,0x00000000001a8413,0x0000004c4e672fd7a,0x0000000000000000,0x053a0000000000000,0x0000000000000000,0x0000004c600000000},
+ { 0x0000000000000003,0x0000001666626a0c2,0x000000000000004d,0x00000000002cc7f6b,0x0000000000000000,0x00000016680000000,0x0000000000000000,0x00000000002cd0000},
+ { 0x00000000000010bb,0x01abfa959a3f968c5,0x00000000000cb39f,0x00000034edc5c674c,0x0000000000000000,0x01ac0000000000000,0x0000000000000000,0x00000034f00000000},
+ { 0x0000000000000023,0x00003cb08dc85cbf9,0x000000004e9cfbd9,0x000000e2ebd988eb6,0x0000000000000000,0x00003cc0000000000,0x0000000000000000,0x000000e3000000000},
+ { 0x000000003a761cc9,0x001b54fe43e491415,0x0000030df6933ff5,0x00002231a23d2ebce,0x0000000000000000,0x001b5800000000000,0x0000030000000000,0x00002240000000000},
+ { 0x0000000000000006,0x000000031ea24ce5a,0x00000000004935bd,0x00000000000b4a3b3,0x0000000000000000,0x000000031f0000000,0x0000000000492000,0x00000000000b4c000},
+ { 0x00000000000006e9,0x07bd24078948b10b0,0x00000a5dadfd35cf,0x003a261f2c39069b8,0x0000000000000000,0x07be0000000000000,0x0000000000000000,0x003a3000000000000},
+ { 0x000000000000000e,0x04d28d112978d36d1,0x0000000148c9e482,0x00000004d5de49fb2,0x0000000000000000,0x04d40000000000000,0x0000000140000000,0x00000004d60000000},
+ { 0x000000000000db24,0x03780f9839968ef9f,0x0066de70ff454fdb,0x015b0f124326fbdcd,0x0000000000000000,0x03790000000000000,0x0060000000000000,0x015b8000000000000},
+ { 0x0000000000000f37,0x00467ae67dabbdff9,0x0000000000006735,0x0000000000005f58d,0x0000000000000000,0x00468000000000000,0x0000000000006600,0x0000000000005f600},
+ { 0x0000000000000003,0x00000000018345013,0x0000000000090cd6,0x0000000000015bb72,0x0000000000000000,0x00000000018380000,0x0000000000090c00,0x0000000000015bc00},
+ { 0x000000000000355a,0x04fe56e78710ec877,0x0000000000f9ef2d,0x00006dbbfff538d89,0x0000000000000000,0x05000000000000000,0x0000000000000000,0x00006dc0000000000},
+ { 0x0000000000000000,0x009b3d774649c4887,0x0000000000000020,0x00000000242a2b69b,0x0000000000000000,0x009b4000000000000,0x0000000000000000,0x00000000243000000},
+ { 0x000000000000d19a,0x09f29c9260637348e,0x000003f297c483b1,0x00160224e39b15d92,0x0000000000000000,0x09f40000000000000,0x0000000000000000,0x00160800000000000},
+ { 0x0072f423db14d5a0,0x04d80ce8f7d116569,0x220f519831b05c4b,0x04c705f56243c7ad2,0x0060000000000000,0x04da0000000000000,0x2200000000000000,0x04c80000000000000},
+ { 0x0000000003fe22b0,0x000ef32b9309b3be8,0x000000002cadfa12,0x0000005db71b25142,0x0000000000000000,0x000ef400000000000,0x0000000000000000,0x0000005dc00000000},
+ { 0x000000000000000e,0x00000ddf463c71ddc,0x0000000000000012,0x00000041615fab8b2,0x0000000000000000,0x00000de0000000000,0x0000000000000000,0x00000041800000000},
+ { 0x0000000000000005,0x007e169993b0d1ecc,0x000000001e1e3b35,0x000000000b7f18ab8,0x0000000000000000,0x007e2000000000000,0x000000001e000000,0x000000000b8000000},
+ { 0x0000000000001d0a,0x00004c5241baa58c6,0x000000000005cae7,0x000000000001a7156,0x0000000000000000,0x00004c60000000000,0x000000000005c800,0x000000000001a7800},
+ { 0x0000000000000000,0x0001b458ee2b2cb4d,0x000000000000010b,0x000000000426b66e8,0x0000000000000000,0x0001b480000000000,0x0000000000000000,0x00000000042800000},
+ { 0x000000000000001f,0x000000000085093d9,0x00000000000ed793,0x000000000000f124b,0x0000000000000000,0x00000000008540000,0x00000000000ed790,0x000000000000f1250},
+ { 0x000000000000000e,0x00000002eb24f174f,0x000000000000082b,0x000000000000036d2,0x0000000000000000,0x00000002ec0000000,0x0000000000000820,0x000000000000036e0},
+ { 0x0000000000000943,0x00027abf4f82feb02,0x000000002b0b0203,0x0000000046a0a1c52,0x0000000000000000,0x00027b00000000000,0x000000002a000000,0x0000000046c000000},
+ { 0x0000000000000006,0x00000000001ec3405,0x0000000000005df1,0x000000000005e0a07,0x0000000000000000,0x00000000001ec8000,0x0000000000004000,0x000000000005e2000},
+ { 0x0000000000000001,0x00000000001b4e19c,0x000000000000006f,0x00000000000fd1f25,0x0000000000000000,0x00000000001b50000,0x0000000000000000,0x00000000000fd4000},
+ { 0x0000004de7010d30,0x0d90adbf6fc97f326,0x0000216aa4588f48,0x01dc9ec5bded9f630,0x0000000000000000,0x0d940000000000000,0x0000000000000000,0x01dd0000000000000},
+ { 0x0000000000000001,0x00c5e408caa98e0d1,0x001fa91aecffbf1f,0x00443db2ad4182569,0x0000000000000000,0x00c60000000000000,0x001e000000000000,0x00444000000000000},
+ { 0x00000000000000a7,0x00080c53bee364bcd,0x0000000000a3754c,0x0000007de3faf36f1,0x0000000000000000,0x00081000000000000,0x0000000000000000,0x0000007e000000000},
+ { 0x0000000000000003,0x000000de392591dd7,0x0000000000935c36,0x000000004a6776172,0x0000000000000000,0x000000de400000000,0x0000000000000000,0x000000004a8000000},
+ { 0x00000000000001d2,0x00000fb043f36f204,0x00001fde69c1da72,0x0000032cb706dec3a,0x0000000000000000,0x00000fb4000000000,0x00001fd800000000,0x0000032d000000000},
+ { 0x0000000000000013,0x0007fa4af36d65d38,0x0000000000000700,0x0000000fd3577604c,0x0000000000000000,0x0007fc00000000000,0x0000000000000000,0x0000000fd40000000},
+ { 0x0000000000000067,0x000b896c581d32268,0x000000000000718f,0x00000036c9d4c44c0,0x0000000000000000,0x000b8c00000000000,0x0000000000000000,0x00000036d00000000},
+ { 0x0000000000000335,0x03bf546456fca43d3,0x0000000000007b11,0x000000001c6268b70,0x0000000000000000,0x03c00000000000000,0x0000000000000000,0x000000001c6800000},
+ { 0x000000000000c602,0x012d3252cfb891c2b,0x000000016a9adad7,0x003cd716d4bef3425,0x0000000000000000,0x012d8000000000000,0x0000000000000000,0x003ce000000000000},
+ { 0x0000000001f4572b,0x00000129d8488da08,0x000002942d890ad9,0x000000e4fd6849382,0x0000000000000000,0x0000012a000000000,0x0000029400000000,0x000000e5000000000},
+ { 0x0000000000000002,0x0000b7f47939fb058,0x000000000071ca33,0x0000000006218a5f0,0x0000000000000000,0x0000b800000000000,0x0000000000600000,0x00000000062200000},
+ { 0x000000000003c620,0x0000000004795be89,0x00000000029ec10b,0x00000000004ac6ea3,0x0000000000000000,0x00000000047a00000,0x00000000029e0000,0x00000000004ad0000},
+ { 0x000000000000051d,0x000001d8a73f2e138,0x000000002e72166c,0x0000000e3236913a5,0x0000000000000000,0x000001d9000000000,0x0000000000000000,0x0000000e340000000},
+ { 0x00000000000000db,0x0000030a0674d1495,0x000000000000062f,0x00000000000014516,0x0000000000000000,0x0000030b000000000,0x0000000000000600,0x00000000000014580},
+ { 0x0000000000000006,0x0000024f75b4abecf,0x0000000000000016,0x0000000000c5d5061,0x0000000000000000,0x00000250000000000,0x0000000000000000,0x0000000000c600000},
+ { 0x0000000000013389,0x0034a925076ecd1ad,0x0000000000148f57,0x000000074cd942b56,0x0000000000000000,0x0034b000000000000,0x0000000000000000,0x000000074e0000000},
+ { 0x0000000000000c13,0x00000000009f2d2e4,0x00000000000d705b,0x000000000001f833e,0x0000000000000000,0x00000000009f40000,0x00000000000d7000,0x000000000001f8800},
+ { 0x000000000000000b,0x0000eeffb0690b2c9,0x000000000000000f,0x00000000000000dff,0x0000000000000000,0x0000ef00000000000,0x000000000000000f,0x00000000000000dff},
+ { 0x0000000000000012,0x000000697d53740bc,0x0000000000033801,0x00000000000264e1d,0x0000000000000000,0x00000069800000000,0x0000000000033000,0x00000000000265000},
+ { 0x00000000000002e3,0x0001e1535071ff8ab,0x000000003db79079,0x0000000ea54dd7195,0x0000000000000000,0x0001e180000000000,0x0000000000000000,0x0000000ea80000000},
+ { 0x0000000000000000,0x0000000390b09442e,0x0000000000000001,0x000000000001ed7fb,0x0000000000000000,0x00000003910000000,0x0000000000000000,0x000000000001ed800},
+ { 0x0000002615e0118a,0x0bb46f1d8ce2b011a,0x000ec79d5e4c769b,0x022f8e6dfa1480b62,0x0000000000000000,0x0bb80000000000000,0x0000000000000000,0x02300000000000000},
+ { 0x00000000007848c7,0x0033e4de5e46a0cd7,0x00000000ffa2d9cd,0x000002a4a33eef2e9,0x0000000000000000,0x0033f000000000000,0x0000000000000000,0x000002a5000000000},
+ { 0x0000000000000129,0x0000000000006349b,0x000000000000051f,0x000000000000017b7,0x0000000000000000,0x00000000000063600,0x0000000000000518,0x000000000000017b8},
+ { 0x0000000000000dbf,0x000b4120c2c8123ce,0x0000bdc5f155540c,0x00031a978a9c8ee5d,0x0000000000000000,0x000b4400000000000,0x0000b00000000000,0x00031b00000000000},
+ { 0x0000000016a9d969,0x056871b7a812f0b6f,0x00000070690c1d06,0x000001125bef21215,0x0000000000000000,0x056a0000000000000,0x0000007000000000,0x00000112800000000},
+ { 0x00000000000005c6,0x00e2f1622f2dbae2b,0x00002733b50e8008,0x000007dc89ad887d0,0x0000000000000000,0x00e30000000000000,0x0000272000000000,0x000007de000000000},
+ { 0x0000000000000000,0x0000000006044673e,0x000000000000000b,0x0000000000015e3c8,0x0000000000000000,0x00000000060600000,0x0000000000000000,0x0000000000015e800},
+ { 0x000000000018bba4,0x0000007bde7c8b592,0x00000011a9416a44,0x0000001cae19b67bd,0x0000000000000000,0x0000007be00000000,0x0000001180000000,0x0000001cb00000000},
+ { 0x0000000000032f2a,0x0000066f8c09ace59,0x000000000073e404,0x0000013bdefcdb127,0x0000000000000000,0x00000670000000000,0x0000000000000000,0x0000013c000000000},
+ { 0x0000000000000001,0x002ea591d31105ece,0x000000000000004d,0x00008a3113a7ca95f,0x0000000000000000,0x002eb000000000000,0x0000000000000000,0x00008a40000000000},
+ { 0x0000000000000014,0x0001f4574f4bbbb79,0x0000003f0764ba11,0x000001d47695c7fbc,0x0000000000000000,0x0001f480000000000,0x0000003800000000,0x000001d4800000000},
+ { 0x0000000000607eb8,0x0fb25bd9e3365d761,0x000278ce47cc6ad4,0x0000a7d4695a0a2c7,0x0000000000000000,0x0fb40000000000000,0x0002780000000000,0x0000a800000000000},
+ { 0x000000000cea8be5,0x0198cc017da2de9f6,0x000004fa1d90b59c,0x000000b78d442a4ca,0x0000000000000000,0x01990000000000000,0x000004fa00000000,0x000000b7a00000000},
+ { 0x000000000000004b,0x000bbb185606b5635,0x0000006659ed0883,0x00050ec6a4065d794,0x0000000000000000,0x000bbc00000000000,0x0000000000000000,0x00051000000000000},
+ { 0x00000000000000fa,0x00000000005a3c765,0x00000000000003da,0x0000000000016b864,0x0000000000000000,0x00000000005a40000,0x0000000000000000,0x0000000000016c000},
+ { 0x0000000000000017,0x0000032ab0704e5ce,0x0000000000000063,0x0000001d66d66efd7,0x0000000000000000,0x0000032b000000000,0x0000000000000000,0x0000001d680000000},
+ { 0x0000000000004e0f,0x0000045e7ee19c362,0x00000000014c31e9,0x0000000edfdbb8c71,0x0000000000000000,0x00000460000000000,0x0000000000000000,0x0000000ee00000000},
+ { 0x0000000000001ace,0x00000000000fbf9c8,0x0000000000002f6c,0x000000000000afe33,0x0000000000000000,0x00000000000fc0000,0x0000000000002c00,0x000000000000b0000},
+ { 0x00000000356c9e7a,0x0002f3be6ad99030f,0x000000017b6c793e,0x000000027c201e9c9,0x0000000000000000,0x0002f400000000000,0x0000000170000000,0x000000027d0000000},
+ { 0x00000000000000b1,0x00000071e3b59a754,0x0000005fdd946141,0x00000066813e27240,0x0000000000000000,0x00000072000000000,0x0000005e00000000,0x00000066a00000000},
+ { 0x000000000006caf0,0x034bd68dab3c995ae,0x00000002b5ac0417,0x000000007f190f8fa,0x0000000000000000,0x034c0000000000000,0x00000002b4000000,0x000000007f2000000},
+ { 0x000000000000004e,0x022d11a8af4880910,0x00000000001c3fe0,0x000001680878514e1,0x0000000000000000,0x022e0000000000000,0x0000000000000000,0x00000168800000000},
+ { 0x00000000008b7dca,0x0000b147ef2eba411,0x0000000000f61f4d,0x00003a152e0a4803d,0x0000000000000000,0x0000b180000000000,0x0000000000000000,0x00003a20000000000},
+ { 0x000000000000354d,0x00000015694732216,0x00000000000d2325,0x000000000726f35f4,0x0000000000000000,0x00000015700000000,0x0000000000000000,0x00000000072800000},
+ { 0x00000000000001c4,0x0eb1a6fd035a81749,0x0000000001eb5832,0x000000031774b79ad,0x0000000000000000,0x0eb40000000000000,0x0000000000000000,0x00000003180000000},
+ { 0x000000000000000f,0x0010879120074a04c,0x0000000000010e54,0x0004da630e2c0dcbc,0x0000000000000000,0x00108800000000000,0x0000000000000000,0x0004dc00000000000},
+ { 0x00000000000011ee,0x00029355a9a841dcf,0x000000ffc703617f,0x00004f612aa341a0e,0x0000000000000000,0x00029400000000000,0x0000000000000000,0x00004f80000000000},
+ { 0x00000000003d23d4,0x0f9e9b6290bdea1f8,0x0000000797861b1f,0x0001954c9c35af7c9,0x0000000000000000,0x0fa00000000000000,0x0000000000000000,0x00019580000000000},
+ { 0x0000000000000003,0x032fbee4e3dcf544f,0x000000000004680b,0x00000000000090875,0x0000000000000000,0x03300000000000000,0x0000000000046800,0x00000000000090a00},
+ { 0x00000000000000fa,0x00000000000665e02,0x000000000008c6d2,0x00000000000251d3e,0x0000000000000000,0x00000000000666000,0x000000000008c000,0x00000000000252000},
+ { 0x000000000000003d,0x00081ff56da1c0280,0x000000000000084d,0x0000000005ae386cd,0x0000000000000000,0x00082000000000000,0x0000000000000000,0x0000000005b000000},
+ { 0x00000001c711e9a6,0x005ffd37a9762e6cf,0x0000000f3bf30633,0x0000000160929d752,0x0000000000000000,0x00600000000000000,0x0000000f3a000000,0x0000000160a000000},
+ { 0x0000000000000004,0x0000002f11c89edc8,0x0000000007bc5928,0x000000006e2ffffdb,0x0000000000000000,0x0000002f200000000,0x0000000006000000,0x000000006e4000000},
+ { 0x0000000000018db6,0x0750c718bdcdeda99,0x000000019cbe45a7,0x000032d68c557b932,0x0000000000000000,0x07520000000000000,0x0000000000000000,0x000032e0000000000},
+ { 0x00000000000020ff,0x008e232b7f154bc4a,0x0000002eeef7cca2,0x0000046e08cb61fd5,0x0000000000000000,0x008e4000000000000,0x0000002000000000,0x00000470000000000},
+ { 0x0000000000000182,0x0008bb5c3796bcb95,0x000000000000e44a,0x000000001be0806a2,0x0000000000000000,0x0008bc00000000000,0x0000000000000000,0x000000001be800000},
+ { 0x000018c23d0a57fa,0x05fcd739ac8d0fb8c,0x03f07d66d32d0f43,0x01ca02326559e3808,0x0000000000000000,0x05fe0000000000000,0x03f0000000000000,0x01ca8000000000000},
+ { 0x0000000000000036,0x00db0b1b405c51e25,0x000000000052ab74,0x000087c5c424b8657,0x0000000000000000,0x00db4000000000000,0x0000000000000000,0x00008800000000000},
+ { 0x00000000000001ef,0x0001d11b0ac8af36f,0x00000000000003fc,0x000000000000096d4,0x0000000000000000,0x0001d180000000000,0x00000000000003c0,0x00000000000009700},
+ { 0x0000000000000337,0x0000000dc0c70b2b5,0x000000000007d389,0x00000000000210dae,0x0000000000000000,0x0000000dc40000000,0x000000000007d000,0x00000000000211000},
+ { 0x000000000008ade3,0x0382432a907e21542,0x004683ae85b07228,0x001f8b363a053465f,0x0000000000000000,0x03830000000000000,0x0046800000000000,0x001f9000000000000},
+ { 0x000000000000b565,0x00000016e10622893,0x000000000001ce47,0x00000000000f26d6d,0x0000000000000000,0x00000016e80000000,0x000000000001c000,0x00000000000f28000},
+ { 0x000000001804ef18,0x01d9cae50de341585,0x0002f101a04902a7,0x00b0723e7bb29a5d9,0x0000000000000000,0x01da0000000000000,0x0000000000000000,0x00b08000000000000},
+ { 0x00000000000094cc,0x0000007f1ec2aa0bb,0x0000000000014dad,0x0000000000445c1b8,0x0000000000000000,0x0000007f200000000,0x0000000000000000,0x00000000004460000},
+ { 0x0000000000000030,0x0fe9b2512c5b0994b,0x000021ed6479b4ac,0x00004273ce9a3f0fb,0x0000000000000000,0x0fec0000000000000,0x0000200000000000,0x00004280000000000},
+ { 0x000000000003e10f,0x00026444d1f166823,0x000000000e3d27e6,0x00000000d7c617ece,0x0000000000000000,0x00026500000000000,0x000000000c000000,0x00000000d80000000},
+ { 0x0000000000000002,0x0000005d3c9e49b3d,0x00000000001a1589,0x000000000ceeac8af,0x0000000000000000,0x0000005d400000000,0x0000000000000000,0x000000000cf000000},
+ { 0x0000000000000008,0x000021632cd18b3c8,0x0000000000000023,0x000004d8ef2a1f7ee,0x0000000000000000,0x00002170000000000,0x0000000000000000,0x000004da000000000},
+ { 0x00000000050748a6,0x01899bb7b0a5e46f6,0x000186322ba2438d,0x00212bfa739438f54,0x0000000000000000,0x018a0000000000000,0x0001000000000000,0x00213000000000000},
+ { 0x000000000000001d,0x000000000001f31b2,0x00000000000001e5,0x0000000000000076c,0x0000000000000000,0x000000000001f3800,0x00000000000001e5,0x0000000000000076c},
+ { 0x00000000000015ca,0x0000000012859e776,0x00000000005d7e31,0x000000000b7338414,0x0000000000000000,0x00000000128800000,0x0000000000400000,0x000000000b7400000},
+ { 0x00000000043d9e21,0x000000002f7b5cb3c,0x00000000279372d6,0x00000000170559b2b,0x0000000004000000,0x000000002f8000000,0x0000000027800000,0x00000000170800000},
+ { 0x0000afae165e60a3,0x06f390e259ed135eb,0x000463a3ee5a5914,0x00011e9ed5f023726,0x0000000000000000,0x06f40000000000000,0x0004600000000000,0x00011ec0000000000},
+ { 0x00000000219d5ef0,0x000000c23f063b179,0x000000005db2fbad,0x00000000ece807723,0x0000000000000000,0x000000c2400000000,0x000000005c000000,0x00000000ed0000000},
+ { 0x00000000000047eb,0x0000000ca21ae13ab,0x000000000003b2ba,0x000000006b2f84a6d,0x0000000000000000,0x0000000ca40000000,0x0000000000000000,0x000000006b4000000},
+ { 0x0000000000000003,0x0000000011f3bad3b,0x00000000000017bb,0x000000000000a3911,0x0000000000000000,0x0000000011f800000,0x0000000000001400,0x000000000000a3c00},
+ { 0x000000004fd6931a,0x000131af1af1afdb8,0x0000003ded4ce5ae,0x000009a083ee03d78,0x0000000000000000,0x00013200000000000,0x0000000000000000,0x000009a4000000000},
+ { 0x000000000000085c,0x000000000000bb737,0x000000000003e769,0x000000000000794ca,0x0000000000000800,0x000000000000bb800,0x000000000003e700,0x00000000000079500},
+ { 0x0000000000000000,0x0000000000008dde0,0x0000000000000ebb,0x000000000000035b3,0x0000000000000000,0x0000000000008e000,0x0000000000000eb0,0x000000000000035c0},
+ { 0x0000000000000054,0x000000192d3c6102d,0x0000000000000167,0x000000000004a21bd,0x0000000000000000,0x00000019300000000,0x0000000000000000,0x000000000004a4000},
+ { 0x00000000000023d8,0x0002fad83f3f8b691,0x0000000000de7eee,0x0000000000643eb90,0x0000000000000000,0x0002fb00000000000,0x0000000000de0000,0x00000000006440000},
+ { 0x000000000057da6b,0x00c24aad2328f0876,0x00000002935baf7b,0x00000bfa99731fe67,0x0000000000000000,0x00c28000000000000,0x0000000000000000,0x00000bfc000000000},
+ { 0x0000000000000157,0x000135a0f0e577f6a,0x0000000000035b05,0x000000000002e4a0e,0x0000000000000000,0x00013600000000000,0x0000000000035000,0x000000000002e5000},
+ { 0x000000000000632b,0x000000006e95e73ba,0x0000000000056a5d,0x00000000000783120,0x0000000000000000,0x000000006ea000000,0x0000000000056000,0x00000000000784000},
+ { 0x000000000000b7eb,0x035201e4582c7776a,0x0000000000777b75,0x000002af5d41bed00,0x0000000000000000,0x03530000000000000,0x0000000000000000,0x000002b0000000000},
+ { 0x0000000000000734,0x0018e789d3032d234,0x000002339b1df486,0x0000db8d9f1c22da7,0x0000000000000000,0x0018e800000000000,0x0000000000000000,0x0000dbc0000000000},
+ { 0x00000000000001f1,0x0000000266faace71,0x00000000137f65f4,0x00000000ac4e233e0,0x0000000000000000,0x00000002670000000,0x0000000010000000,0x00000000ac8000000},
+ { 0x00000000009e9f9c,0x00076a3a979cf9dcc,0x000000005505c33b,0x0000000174e92bcd6,0x0000000000000000,0x00076c00000000000,0x0000000050000000,0x00000001750000000},
+ { 0x0000000000000009,0x00000034bfe111570,0x0000000000000f04,0x0000000000094f2cf,0x0000000000000000,0x00000034c00000000,0x0000000000000000,0x00000000000950000},
+ { 0x0000000000000002,0x0000009d37e9a11ae,0x0000000000021b01,0x0000000d02be7b033,0x0000000000000000,0x0000009d400000000,0x0000000000000000,0x0000000d040000000},
+ { 0x00000000000224dd,0x001d7bb13de3bebf9,0x000000068e7b61ed,0x000000063b4eaa29b,0x0000000000000000,0x001d8000000000000,0x0000000680000000,0x000000063c0000000},
+ { 0x0000000000004ccc,0x0000013b05ee8749c,0x000000000004fcd8,0x000000036a8eabdad,0x0000000000000000,0x0000013b800000000,0x0000000000000000,0x000000036b0000000},
+ { 0x0000000000007a98,0x000000000854ea2ef,0x0000000000fd95c6,0x000000000186f21d8,0x0000000000000000,0x00000000085800000,0x0000000000f80000,0x00000000018700000},
+ { 0x000000000007fe02,0x000001a91a5e1285a,0x00000002f8899cb9,0x0000001ecea2ba6d3,0x0000000000000000,0x000001a9800000000,0x0000000280000000,0x0000001ed00000000},
+ { 0x00000000000001c0,0x000000031227f9b3b,0x000000001857ff16,0x000000002f8b69843,0x0000000000000000,0x00000003130000000,0x0000000018000000,0x000000002f9000000},
+ { 0x000000000000095c,0x027eefc638bc51402,0x000000000000f72b,0x00000000000014345,0x0000000000000000,0x027f0000000000000,0x000000000000f720,0x00000000000014360},
+ { 0x000000000000b9f6,0x0cd300ed8c78182a2,0x00000000002a9a03,0x001dded64c95b071b,0x0000000000000000,0x0cd40000000000000,0x0000000000000000,0x001de000000000000},
+ { 0x00000000414f7057,0x00000da2f71ac401c,0x0000015e35b7ceff,0x000004c1461a4469a,0x0000000000000000,0x00000da4000000000,0x0000014000000000,0x000004c2000000000},
+ { 0x0000000000005252,0x0000002a66f25f5c1,0x0000000000045c64,0x0000000a7f4d08609,0x0000000000000000,0x0000002a700000000,0x0000000000000000,0x0000000a800000000},
+ { 0x000000000000196e,0x00000063bdc324d34,0x0000000157146f67,0x00000004aa5a13a35,0x0000000000000000,0x00000063c00000000,0x0000000140000000,0x00000004ac0000000},
+ { 0x00000000026330e4,0x00113f5889bada687,0x002834cfde8cf295,0x0006fef0d0f4bd7b6,0x0000000000000000,0x00114000000000000,0x0028200000000000,0x00070000000000000},
+ { 0x0000000000000c81,0x00000602f07009a49,0x0000000002cedd30,0x0000000000f54804d,0x0000000000000000,0x00000604000000000,0x0000000002cc0000,0x0000000000f580000},
+ { 0x000000000001da47,0x000000002f471b0bf,0x00000000000258f8,0x000000000001296d7,0x0000000000000000,0x000000002f5000000,0x0000000000025800,0x00000000000129800},
+ { 0x000000000000000a,0x0005d07d2b43a15af,0x0000000004995c76,0x00000000040b47512,0x0000000000000000,0x0005d200000000000,0x0000000004900000,0x00000000040c00000},
+ { 0x0000000000000003,0x005747d401bb6f97a,0x000000001210aa28,0x0008310e09203fecc,0x0000000000000000,0x00576000000000000,0x0000000000000000,0x00083400000000000},
+ { 0x0000000000000007,0x003568abc24018bcb,0x000000000df0dbf0,0x00001c69ef8441535,0x0000000000000000,0x00357000000000000,0x0000000000000000,0x00001c70000000000},
+ { 0x000000000000004e,0x0008adc6828158083,0x0000000000000616,0x0000000013276ad27,0x0000000000000000,0x0008b000000000000,0x0000000000000000,0x00000000132800000},
+ { 0x0000000000000007,0x00aee40713bfbbba9,0x0000007ef6dc682d,0x00001a982c9632ed6,0x0000000000000000,0x00af0000000000000,0x0000000000000000,0x00001aa0000000000},
+ { 0x0000000000088655,0x0db0f52895c1cb7ce,0x00000000009ad9ac,0x0036b717659139bc5,0x0000000000000000,0x0db40000000000000,0x0000000000000000,0x0036c000000000000},
+ { 0x000000000014ce5e,0x00006e9ab5fe6d6a8,0x000000039cc5d067,0x00000674e70aa4485,0x0000000000000000,0x00006ea0000000000,0x0000000000000000,0x00000676000000000},
+ { 0x000000000000069f,0x00000000024013d43,0x000000000000340e,0x00000000009b6a074,0x0000000000000000,0x00000000024100000,0x0000000000000000,0x00000000009b80000},
+ { 0x0000000000000f35,0x0006186ba921aa5c5,0x000000000000a37e,0x0000221ba475569be,0x0000000000000000,0x00061a00000000000,0x0000000000000000,0x00002220000000000},
+ { 0x0000000000000003,0x0000167012a53dafa,0x0000000000000007,0x00000000004814d76,0x0000000000000000,0x00001678000000000,0x0000000000000000,0x00000000004820000},
+ { 0x0000000000004321,0x0531bfbe6f1308f06,0x000001d10788db33,0x0007d8fb93a749a75,0x0000000000000000,0x05320000000000000,0x0000000000000000,0x0007da00000000000},
+ { 0x0000000000000001,0x0001dc343b8961e56,0x000000000006ff36,0x000000048d5e8c808,0x0000000000000000,0x0001dc80000000000,0x0000000000000000,0x000000048e0000000},
+ { 0x0000000000000006,0x001049e01ec2c34d3,0x00000000050d8cc8,0x00000000129ec64c9,0x0000000000000000,0x00105000000000000,0x0000000005000000,0x0000000012a000000},
+ { 0x0000000000000015,0x00063f485a7e9a088,0x00000000000dc0a3,0x000000001bdcc6a8e,0x0000000000000000,0x00064000000000000,0x0000000000000000,0x000000001be000000},
+ { 0x000000000002bf35,0x00000028c229eebbc,0x00000000003406bd,0x0000000009780cdab,0x0000000000000000,0x00000028d00000000,0x0000000000000000,0x00000000097c00000},
+ { 0x000000000000001c,0x006cf6872d19060e7,0x0000000004cb1075,0x000000000c67c029f,0x0000000000000000,0x006d0000000000000,0x0000000004c00000,0x000000000c6800000},
+ { 0x0000000000000024,0x04375484a865327ba,0x00000000068dcbe8,0x00000000f932fed60,0x0000000000000000,0x04380000000000000,0x0000000004000000,0x00000000f94000000},
+ { 0x00000000000001dd,0x0000055d6881b5a6d,0x0000000000000b8d,0x000000ab3957b3e66,0x0000000000000000,0x0000055e000000000,0x0000000000000000,0x000000ab400000000},
+ { 0x000000000000004b,0x015d1e07c1d4bbc03,0x000000000001d13f,0x000019d772f071709,0x0000000000000000,0x015d8000000000000,0x0000000000000000,0x000019d8000000000},
+ { 0x00000000000000f4,0x0000048940c9e5e5d,0x000000000000061a,0x00000000000000b97,0x0000000000000000,0x0000048a000000000,0x000000000000061a,0x00000000000000b97},
+ { 0x0000000000063b6e,0x000001adcd7d280bc,0x000003fdbef4ff45,0x0000007606fba68de,0x0000000000000000,0x000001ae000000000,0x000003fd00000000,0x00000076100000000},
+ { 0x000000000000001c,0x00009104bd490fe6b,0x0000000000032b6a,0x00000019afb0b7956,0x0000000000000000,0x00009140000000000,0x0000000000000000,0x00000019b00000000},
+ { 0x0000000000000933,0x0001d7f43994558aa,0x000168286c3a2bae,0x00003286fd516207c,0x0000000000000000,0x0001d800000000000,0x0001680000000000,0x00003288000000000},
+ { 0x00000000000000a5,0x0068a6c98764c2b38,0x000002a9b910feda,0x00030e795e1cfd2f8,0x0000000000000000,0x0068c000000000000,0x0000000000000000,0x00030f00000000000},
+ { 0x00000000019a7666,0x0027a322db8f60509,0x000005bab5f2c25f,0x00003441c800aa551,0x0000000000000000,0x0027b000000000000,0x0000050000000000,0x00003450000000000},
+ { 0x0000000000000be2,0x000416f4c1e2c21ef,0x000000030d5a3ce4,0x00000b11c6de16c94,0x0000000000000000,0x00041800000000000,0x0000000000000000,0x00000b14000000000},
+ { 0x0000000000000023,0x0722d32190668b46f,0x00000007d09ce32a,0x00769f72d83c9fa48,0x0000000000000000,0x07240000000000000,0x0000000000000000,0x0076a000000000000},
+ { 0x0000000000000016,0x000001476805a400d,0x000000000bc3a98d,0x0000000541fb7f432,0x0000000000000000,0x00000147800000000,0x0000000000000000,0x00000005420000000},
+ { 0x0000000000cd3254,0x000000000108524ee,0x00000000014e9672,0x000000000051877df,0x0000000000cc0000,0x00000000010880000,0x00000000014e0000,0x00000000005190000},
+ { 0x000000000000000c,0x000000000310b5ac0,0x000000000000c892,0x000000000000370fd,0x0000000000000000,0x00000000031100000,0x000000000000c800,0x00000000000037100},
+ { 0x0000000000000018,0x02a2d175ac005b32a,0x0000000000000033,0x000000000000009b9,0x0000000000000000,0x02a30000000000000,0x0000000000000033,0x000000000000009b9},
+ { 0x000000000001945d,0x00003680806b90fdd,0x0000000000793ed5,0x0000000d83873ab7e,0x0000000000000000,0x00003690000000000,0x0000000000000000,0x0000000d840000000},
+ { 0x00000000000000e2,0x00018970836ee60a8,0x00000000001422ba,0x00000000000382c58,0x0000000000000000,0x00018980000000000,0x0000000000142000,0x00000000000383000},
+ { 0x000000000000ccc6,0x030532bfe79c133f1,0x0000000140ed2163,0x00000005104b2f04d,0x0000000000000000,0x03060000000000000,0x0000000140000000,0x00000005120000000},
+ { 0x000000000000010b,0x00000250a9f162334,0x000000000001d5ba,0x000000030bada6010,0x0000000000000000,0x00000251000000000,0x0000000000000000,0x000000030c0000000},
+ { 0x000000000000ed24,0x0000011a85d427fcf,0x000000040a8d3f22,0x00000032016e8f454,0x0000000000000000,0x0000011b000000000,0x0000000400000000,0x00000032100000000},
+ { 0x00000000000004ce,0x00014752a78f2917a,0x00000002553f416d,0x000007f0c3847cb15,0x0000000000000000,0x00014780000000000,0x0000000000000000,0x000007f2000000000},
+ { 0x00001a5ead002d89,0x004ed9e8cbed76092,0x00008513c07a969d,0x001d386d25998128a,0x0000000000000000,0x004ee000000000000,0x0000800000000000,0x001d4000000000000},
+ { 0x0000000000000001,0x013c298ce0f30272c,0x0000000000001cc1,0x006c2128103a226f8,0x0000000000000000,0x013c8000000000000,0x0000000000000000,0x006c4000000000000},
+ { 0x00000000000fc5e6,0x0000000265a668665,0x0000000012df865e,0x000000005b64eaa2a,0x0000000000000000,0x00000002660000000,0x0000000012000000,0x000000005b8000000},
+ { 0x0000000000000000,0x063b64478d780719f,0x00000000000095fe,0x0007b5caf32f8377a,0x0000000000000000,0x063c0000000000000,0x0000000000000000,0x0007b600000000000},
+ { 0x0000000000d12407,0x003ad8a62876b1599,0x00034387ac2ff80a,0x00037ef0f16e85062,0x0000000000000000,0x003ae000000000000,0x0003400000000000,0x00037f00000000000},
+ { 0x0000000000000003,0x0001834874da97fdf,0x000000001dffba0a,0x0000012db1bd399c7,0x0000000000000000,0x00018380000000000,0x0000000000000000,0x0000012e000000000},
+ { 0x00000000000000e2,0x0131df09bd34c5ecb,0x00000000000003d3,0x00000000002964551,0x0000000000000000,0x01320000000000000,0x0000000000000000,0x00000000002970000},
+ { 0x000000000000bc93,0x000330b025ca75871,0x000000000070e06d,0x0000000e6b36a053a,0x0000000000000000,0x00033100000000000,0x0000000000000000,0x0000000e6c0000000},
+ { 0x00000000000144b0,0x0000019ef9407cada,0x00000283fd633902,0x0000006f4675fc91d,0x0000000000000000,0x0000019f000000000,0x0000028200000000,0x0000006f600000000},
+ { 0x0000000000000034,0x04d56a04bc5ce46fe,0x000000000004ee4a,0x0077436463a21297f,0x0000000000000000,0x04d60000000000000,0x0000000000000000,0x00776000000000000},
+ { 0x0000000000013cbb,0x0001ca0bc86cdc6af,0x00000000000fabd0,0x00003feda30c909c6,0x0000000000000000,0x0001ca80000000000,0x0000000000000000,0x00003ff0000000000},
+ { 0x0000000000000026,0x0000000053d681612,0x000000000001bbf6,0x000000001f7363ca8,0x0000000000000000,0x0000000053e000000,0x0000000000000000,0x000000001f7800000},
+ { 0x0000000000004021,0x00000093d92928d9a,0x00000000001c2610,0x0000000000b2f2fe9,0x0000000000000000,0x00000094000000000,0x00000000001c0000,0x0000000000b300000},
+ { 0x000000000000001f,0x0000616073823b98c,0x000004a0646853a1,0x000002473ebac1381,0x0000000000000000,0x00006180000000000,0x000004a000000000,0x00000247800000000},
+ { 0x00000000001ef657,0x0000006e324c4f52f,0x0000003b5ed78539,0x000000051fd2beadb,0x0000000000000000,0x0000006e400000000,0x0000003b58000000,0x00000005200000000},
+ { 0x0000318f30d67028,0x00240a8981113c833,0x0000c510215e52c9,0x00001e0de058fd8a5,0x0000000000000000,0x00241000000000000,0x0000c50000000000,0x00001e10000000000},
+ { 0x0000000000000554,0x00000003fb0cf4dc9,0x00000000000014bb,0x000000000000085ba,0x0000000000000000,0x00000003fc0000000,0x00000000000014a0,0x000000000000085c0},
+ { 0x0000000000000003,0x0000000001b836e67,0x0000000000000029,0x0000000000000327b,0x0000000000000000,0x0000000001b880000,0x0000000000000020,0x00000000000003280},
+ { 0x0000000000000002,0x000005fbf1f8465de,0x000000000004d471,0x00000000aca4c6d68,0x0000000000000000,0x000005fc000000000,0x0000000000000000,0x00000000acc000000},
+ { 0x0000000000003b25,0x00008281662e3d0ab,0x0000000019a2566d,0x000000f66629fb32d,0x0000000000000000,0x000082c0000000000,0x0000000000000000,0x000000f6800000000},
+ { 0x000000095996303f,0x0a5c9a2040be85246,0x00000527b2763e4f,0x000410c5afb971e96,0x0000000000000000,0x0a600000000000000,0x0000000000000000,0x00041200000000000},
+ { 0x0000000000000006,0x01cf14cd0dc457561,0x00000000f2c9b6b6,0x0000029dcd0661c2b,0x0000000000000000,0x01cf8000000000000,0x0000000000000000,0x0000029e000000000},
+ { 0x0000000001f59897,0x000d0ae91b5af8280,0x0000000056c5d19c,0x0000000018810b3bf,0x0000000000000000,0x000d0c00000000000,0x0000000056800000,0x00000000188800000},
+ { 0x0000000000000004,0x000e720e4411be021,0x0000000000000019,0x00000000023434009,0x0000000000000000,0x000e7400000000000,0x0000000000000000,0x00000000023500000},
+ { 0x00000012e17cbd79,0x00000013b0d7f7e50,0x0000003db88390f1,0x0000000849dfd394f,0x0000001280000000,0x00000013b80000000,0x0000003da0000000,0x000000084a0000000},
+ { 0x000000000000004c,0x006f5fa71e0d7d21f,0x0000000007aa983c,0x004a6491204b712a2,0x0000000000000000,0x006f6000000000000,0x0000000000000000,0x004a8000000000000},
+ { 0x000000000000002c,0x00008ed3a3dc9271f,0x00001bdb31f11c28,0x000016be001afe624,0x0000000000000000,0x00008f00000000000,0x00001b8000000000,0x000016c0000000000},
+ { 0x00000000000001df,0x006c94ca4a1c965ba,0x00000000003a5e97,0x00000000000daa86f,0x0000000000000000,0x006ca000000000000,0x00000000003a4000,0x00000000000dac000},
+ { 0x0000000000003de2,0x05744492501df3f4c,0x000000000967e572,0x0000000001eaf1690,0x0000000000000000,0x05760000000000000,0x0000000009600000,0x0000000001eb00000},
+ { 0x00000000000000fe,0x0000000d81ede3a75,0x000000576539c471,0x0000000be53071000,0x0000000000000000,0x0000000d840000000,0x0000005760000000,0x0000000be60000000},
+ { 0x0000000000000019,0x000000000c60a7df6,0x0000000000000186,0x00000000000000f61,0x0000000000000000,0x000000000c6400000,0x0000000000000186,0x00000000000000f61},
+ { 0x00000000000000a1,0x0001612d5e102e6bf,0x0000000000080c6f,0x00000002969dde657,0x0000000000000000,0x00016180000000000,0x0000000000000000,0x00000002970000000},
+ { 0x000000000000000f,0x0000000000730cdb8,0x0000000000000190,0x00000000000000258,0x0000000000000000,0x00000000007320000,0x0000000000000190,0x00000000000000258},
+ { 0x000000000000000d,0x000079448535eb7f7,0x0000000000000ecc,0x00000000001903940,0x0000000000000000,0x00007960000000000,0x0000000000000000,0x00000000001908000},
+ { 0x0000000000000004,0x00001e63df8ea5fdd,0x00000004e268b25b,0x000000f16c19eadb5,0x0000000000000000,0x00001e68000000000,0x0000000400000000,0x000000f1800000000},
+ { 0x0000000000000000,0x00065d384412bbfa6,0x0000000000000016,0x000000000000e7c9b,0x0000000000000000,0x00065e00000000000,0x0000000000000000,0x000000000000e8000},
+ { 0x000000000011a5bd,0x000000fe55a669aa5,0x000000015b2783ca,0x00000000c70d69925,0x0000000000000000,0x000000fe800000000,0x0000000158000000,0x00000000c74000000},
+ { 0x000000000000697e,0x0067c2f5fbc374032,0x000019025fff80e3,0x000aaff3b743b1695,0x0000000000000000,0x0067e000000000000,0x0000000000000000,0x000ab000000000000},
+ { 0x00000000000001c5,0x00080249e0f84ca95,0x0000002eac639c41,0x0002fa540e546e1f5,0x0000000000000000,0x00080400000000000,0x0000000000000000,0x0002fb00000000000},
+ { 0x0000000000000070,0x000057052d3145b79,0x00000000007d87d2,0x000000003b876fc28,0x0000000000000000,0x00005720000000000,0x0000000000000000,0x000000003b9000000},
+ { 0x000000000005dda8,0x0001a763baa53f572,0x00000005da5fa65e,0x00000ec63c6effa75,0x0000000000000000,0x0001a780000000000,0x0000000000000000,0x00000ec8000000000},
+ { 0x0000000000001946,0x00006812073633317,0x000000d80863524d,0x000000a8d322e74dd,0x0000000000000000,0x00006820000000000,0x000000d800000000,0x000000a9000000000},
+ { 0x0000000000008c9d,0x007076fc4ca4ef10f,0x0000098375de4706,0x00007496acf02afda,0x0000000000000000,0x00708000000000000,0x0000080000000000,0x000074a0000000000},
+ { 0x0000000000000002,0x0000007cf9d623f7f,0x0000000000000077,0x00000000000e307a0,0x0000000000000000,0x0000007d000000000,0x0000000000000000,0x00000000000e34000},
+ { 0x0000000000000c73,0x068b68c3667c82dfd,0x000caa58c5a61772,0x0003443e07ee54a76,0x0000000000000000,0x068c0000000000000,0x000ca00000000000,0x00034500000000000},
+ { 0x00000000059ec2cc,0x003c64d0617658517,0x000000087446f674,0x000000025da36fa6b,0x0000000000000000,0x003c7000000000000,0x0000000870000000,0x000000025e0000000},
+ { 0x00000000000003a4,0x000000004ed35a5d7,0x0000000000039894,0x000000000339ee183,0x0000000000000000,0x000000004ee000000,0x0000000000000000,0x00000000033a00000},
+ { 0x000000000000011c,0x010b2ef73e4383a82,0x000000073bd02da9,0x0000010198e16d901,0x0000000000000000,0x010b8000000000000,0x0000000000000000,0x00000102000000000},
+ { 0x0000000008893808,0x00156bd7029ce5763,0x000023c1f162e252,0x000af9a4e63db8919,0x0000000000000000,0x00157000000000000,0x0000000000000000,0x000afc00000000000},
+ { 0x000000000f708e86,0x0000092326c6f17d1,0x000004b4e4845d1d,0x000001a0cee2e6c9b,0x0000000000000000,0x00000924000000000,0x000004b000000000,0x000001a1000000000},
+ { 0x000000000146e380,0x02ab6a3e8fde548e7,0x00000002cd1207c7,0x0000000a5cd9dd86b,0x0000000000000000,0x02ac0000000000000,0x00000002c0000000,0x0000000a600000000},
+ { 0x000004ab4ae0ac19,0x007d32dbf892897c5,0x0000635f7eda7405,0x00001a2c28eeab8ee,0x0000000000000000,0x007d4000000000000,0x0000630000000000,0x00001a30000000000},
+ { 0x000000000000003c,0x000000000c57f06e0,0x0000000000003be3,0x0000000000074a164,0x0000000000000000,0x000000000c5800000,0x0000000000002000,0x0000000000074c000},
+ { 0x000000000000001b,0x002de619d6d9e731a,0x00001cc880462792,0x0008e7410cff93c15,0x0000000000000000,0x002df000000000000,0x0000000000000000,0x0008e800000000000},
+ { 0x0000000000000003,0x00000e385f3952e7a,0x0000000000000003,0x00000000000027935,0x0000000000000000,0x00000e3c000000000,0x0000000000000000,0x00000000000027a00},
+ { 0x00000000000003ae,0x0ef6143c9e83e0939,0x0000000000387db5,0x00000035ebfec4cb3,0x0000000000000000,0x0ef80000000000000,0x0000000000000000,0x00000035f00000000},
+ { 0x0000000000000000,0x000000000001b2900,0x000000000000295a,0x0000000000003a8e5,0x0000000000000000,0x000000000001b3000,0x0000000000002900,0x0000000000003a900},
+ { 0x0000000000429e65,0x006efc4b9e3c64730,0x0000000001813a9b,0x00000022c20987c1f,0x0000000000000000,0x006f0000000000000,0x0000000000000000,0x00000022d00000000},
+ { 0x00000000000003f5,0x000001bc2104cb7eb,0x0000000000032f03,0x000000002759ebbb7,0x0000000000000000,0x000001bc800000000,0x0000000000000000,0x00000000276000000},
+ { 0x00000000000001d2,0x00000008cfca34277,0x0000000000000af7,0x000000000002cbf6b,0x0000000000000000,0x00000008d00000000,0x0000000000000000,0x000000000002cc000},
+ { 0x000000000000f7f4,0x00000000000fd54ee,0x000000000001b72a,0x000000000003551f4,0x000000000000c000,0x00000000000fd8000,0x000000000001b000,0x00000000000356000},
+ { 0x000000000b8ff24b,0x00117c6c1e8946279,0x0000000034999e14,0x000018adc1064ac58,0x0000000000000000,0x00118000000000000,0x0000000000000000,0x000018b0000000000},
+ { 0x0000000000283dd9,0x06cd33f98d684a924,0x0017f943ad1a03d3,0x0043cac16ee892c37,0x0000000000000000,0x06ce0000000000000,0x0016000000000000,0x0043e000000000000},
+ { 0x0000000000000000,0x000004b21622e5896,0x00000000f60d4151,0x000001d25d473dbb3,0x0000000000000000,0x000004b4000000000,0x0000000000000000,0x000001d2800000000},
+ { 0x00000000000d12db,0x01dfbf06057f96ccf,0x0000007987b8e77d,0x0000005942c14558e,0x0000000000000000,0x01e00000000000000,0x0000007800000000,0x00000059600000000},
+ { 0x00000000000f10c8,0x04f8cc429e1654bf0,0x0000007ee157fe3b,0x0000003b89b0865cf,0x0000000000000000,0x04fa0000000000000,0x0000007e00000000,0x0000003b900000000},
+ { 0x0000000000000000,0x000000369f7ca96a9,0x00000000003c63ed,0x00000000dfd65a374,0x0000000000000000,0x00000036a00000000,0x0000000000000000,0x00000000e00000000},
+ { 0x0000000000000002,0x00e50b17ebddaab99,0x00000000009f9f3d,0x000ac1d72f0765af2,0x0000000000000000,0x00e54000000000000,0x0000000000000000,0x000ac400000000000},
+ { 0x000000000000000b,0x09ad5915587594dec,0x000326cc6fb6fce0,0x0137cf8790beba0ec,0x0000000000000000,0x09b00000000000000,0x0000000000000000,0x01380000000000000},
+ { 0x0000000000007d6f,0x050d08f8f543e3202,0x000000000002e6c3,0x00000000025850c74,0x0000000000000000,0x050e0000000000000,0x0000000000000000,0x00000000025900000},
+ { 0x0000000000001c86,0x000006fa0baac554f,0x0000000000ba5bd1,0x00000006538523342,0x0000000000000000,0x000006fc000000000,0x0000000000000000,0x00000006540000000},
+ { 0x0000000000000000,0x0000018b4ae7bc6e8,0x0000000000000001,0x00000000000000009,0x0000000000000000,0x0000018b800000000,0x0000000000000001,0x00000000000000009},
+ { 0x0000026a283d0c93,0x0011e41bcd85c28d9,0x000aa63be48e18fc,0x000ee78be8a7861ec,0x0000000000000000,0x0011e800000000000,0x000a800000000000,0x000ee800000000000},
+ { 0x0000000000000042,0x00001ce04731db835,0x0000000000000f80,0x00000000000cf78d4,0x0000000000000000,0x00001ce8000000000,0x0000000000000000,0x00000000000cf8000},
+ { 0x0000000000000003,0x006526d476d1e7b44,0x0000000000000051,0x00000000000000762,0x0000000000000000,0x00654000000000000,0x0000000000000051,0x00000000000000762},
+ { 0x0000000000000015,0x00001c00345cefef3,0x0000000000001f1d,0x00000000177031ae1,0x0000000000000000,0x00001c08000000000,0x0000000000000000,0x00000000177800000},
+ { 0x0000000000000005,0x0027b1b772dfa32da,0x00001e99ee957fbc,0x00001992abe14355f,0x0000000000000000,0x0027c000000000000,0x00001e8000000000,0x00001998000000000},
+ { 0x0000000000004116,0x001f719e7c5300349,0x000000002dfa9a57,0x0000000e12e0dd345,0x0000000000000000,0x001f7800000000000,0x0000000000000000,0x0000000e140000000},
+ { 0x00000000000006a8,0x00b752a3df0274bf1,0x000000004a57b0de,0x00000001e399a3d9a,0x0000000000000000,0x00b78000000000000,0x0000000048000000,0x00000001e40000000},
+ { 0x00000000000067aa,0x0008d8532e4f1b73b,0x000000000004ac16,0x000001a6ef6cee3b7,0x0000000000000000,0x0008dc00000000000,0x0000000000000000,0x000001a7000000000},
+ { 0x0000000000001a70,0x00007b762fc0c758d,0x000000000008e1a8,0x000002419d3885d53,0x0000000000000000,0x00007b80000000000,0x0000000000000000,0x00000242000000000},
+ { 0x0000000000007aab,0x0045370fd81ef9963,0x00000000000080c1,0x0000000001fc2ff74,0x0000000000000000,0x00454000000000000,0x0000000000000000,0x0000000001fc80000},
+ { 0x00000000000005de,0x00000020cf43b9375,0x00000000bfe46ba9,0x000000005404d132c,0x0000000000000000,0x00000020d00000000,0x00000000be000000,0x00000000542000000},
+ { 0x0000000000000000,0x066af57969d3d600c,0x000000ae3df213e0,0x000004678437ef093,0x0000000000000000,0x066c0000000000000,0x000000a000000000,0x00000468000000000},
+ { 0x0000000000000000,0x0000309497f93547a,0x000000000000000f,0x00000000003495db5,0x0000000000000000,0x000030a0000000000,0x0000000000000000,0x000000000034a0000},
+ { 0x0000000000019d3a,0x0000000121773d360,0x00000000000cd73f,0x000000000004cfe51,0x0000000000000000,0x00000001218000000,0x00000000000cc000,0x000000000004d0000},
+ { 0x0000000000160d72,0x015242109a81a8e26,0x00000e6599f8c14f,0x006f411205d244c8e,0x0000000000000000,0x01528000000000000,0x0000000000000000,0x006f6000000000000},
+ { 0x00000000000008f7,0x000b08ad604b1216c,0x00000011bc4e10c8,0x00004d7ef4748f6bd,0x0000000000000000,0x000b0c00000000000,0x0000000000000000,0x00004d80000000000},
+ { 0x00000000001843ff,0x000000000de01b02e,0x00000000007abd91,0x00000000005fb0544,0x0000000000000000,0x000000000de400000,0x00000000007a0000,0x00000000005fc0000},
+ { 0x0000000000000068,0x000000050b9bc7f32,0x0000000000000699,0x000000000b81a7feb,0x0000000000000000,0x000000050c0000000,0x0000000000000000,0x000000000b8400000},
+ { 0x0000000000005e35,0x039aacd907ad3c29b,0x00000008076bd064,0x0000feeb864df1d94,0x0000000000000000,0x039b0000000000000,0x0000000000000000,0x0000ff00000000000},
+ { 0x0000000000000017,0x000053db7e25e65a4,0x0000000000000129,0x0000000000000066e,0x0000000000000000,0x000053e0000000000,0x0000000000000129,0x0000000000000066e},
+ { 0x000000005888de32,0x0012d93d1f1b5fe88,0x000000006da24360,0x000000081d62b0930,0x0000000000000000,0x0012e000000000000,0x0000000040000000,0x00000008200000000},
+ { 0x0000000000000004,0x00000a939931ff090,0x000000000000050c,0x0000000b6d229db34,0x0000000000000000,0x00000a94000000000,0x0000000000000000,0x0000000b700000000},
+ { 0x0000000000000003,0x003c7c295ff488d8e,0x000000000000000d,0x0000001eab41e4095,0x0000000000000000,0x003c8000000000000,0x0000000000000000,0x0000001eb00000000},
+ { 0x000000000444ff02,0x00005285138ecc737,0x00000002c1bde868,0x00000025d30b3d909,0x0000000000000000,0x000052a0000000000,0x0000000200000000,0x00000025e00000000},
+ { 0x0000000000000044,0x000016d7a96a157d8,0x00000000000006a3,0x000000000001ba249,0x0000000000000000,0x000016d8000000000,0x0000000000000000,0x000000000001ba800},
+ { 0x0000000000000002,0x000359c5dce92ed50,0x00000000000001b6,0x00000000000003b24,0x0000000000000000,0x00035a00000000000,0x00000000000001b0,0x00000000000003b30},
+ { 0x0000000000000001,0x000137c18dc28707b,0x000000000004ab69,0x00000000e263460a6,0x0000000000000000,0x00013800000000000,0x0000000000000000,0x00000000e28000000},
+ { 0x0000000000002a5d,0x00000065c73c6adcd,0x000000000000514a,0x000000000000a1c07,0x0000000000000000,0x00000065e00000000,0x0000000000005000,0x000000000000a2000},
+ { 0x00000000002c936b,0x0000248bb59c17876,0x00000001d6c459b4,0x00000000643846fcf,0x0000000000000000,0x00002490000000000,0x00000001d6000000,0x00000000644000000},
+ { 0x0000000001beec2c,0x0000d026b34e6c594,0x0000000375ae64c1,0x000000025e50443b0,0x0000000000000000,0x0000d040000000000,0x0000000370000000,0x000000025f0000000},
+ { 0x0000000000000624,0x00000005cbfae9a31,0x0000000000015b08,0x00000000000ea958a,0x0000000000000000,0x00000005cc0000000,0x0000000000014000,0x00000000000eac000},
+ { 0x00000000000192e0,0x0000362e2fd5627b1,0x0000000001eba76e,0x0000000011cb9abe3,0x0000000000000000,0x00003630000000000,0x0000000001800000,0x0000000011d000000},
+ { 0x00000008fa370cb4,0x04c82eb4eab435f3c,0x000001ae2c77cde4,0x00001605a2d7bdb0f,0x0000000000000000,0x04ca0000000000000,0x0000018000000000,0x00001608000000000},
+ { 0x0000000c5c7e2c0c,0x0f43dff4d85fcfc72,0x0000002e905d30f4,0x0026862a1ce84dcaf,0x0000000000000000,0x0f440000000000000,0x0000000000000000,0x00269000000000000},
+ { 0x0000000000000004,0x00000003aeb8b3748,0x00000000000b87db,0x000000003f5342077,0x0000000000000000,0x00000003af0000000,0x0000000000000000,0x000000003f6000000},
+ { 0x0000000000000173,0x00e94257b1ca91b4b,0x00000000cf9e098e,0x000000001e0e20ae2,0x0000000000000000,0x00e98000000000000,0x00000000cf800000,0x000000001e1000000},
+ { 0x00000000001c661f,0x005658c3f9a11bb44,0x0000000001c88d24,0x0019f047d8aed3c4f,0x0000000000000000,0x00566000000000000,0x0000000000000000,0x0019f800000000000},
+ { 0x000000000000013e,0x001fb011bddfdba2d,0x00000000054f66f7,0x000000002175b4fe9,0x0000000000000000,0x001fb800000000000,0x0000000005000000,0x00000000218000000},
+ { 0x000000000000027d,0x048fabf1d36f75892,0x0000000154333b6d,0x0005cb2bdb965d1fa,0x0000000000000000,0x04900000000000000,0x0000000000000000,0x0005cc00000000000},
+ { 0x0000000000000006,0x0000003078d81cf25,0x00000000000febfd,0x00000000005b567ab,0x0000000000000000,0x00000030800000000,0x00000000000e0000,0x00000000005b60000},
+ { 0x000000b0bc65a61a,0x00b0b5c7a13fef6fa,0x000dfda310ff6375,0x000651c86dfc23a3e,0x0000000000000000,0x00b0c000000000000,0x000de00000000000,0x00065200000000000},
+ { 0x0000000000000081,0x0000000000f104375,0x0000000000000b7f,0x000000000000010c2,0x0000000000000000,0x0000000000f140000,0x0000000000000b7f,0x000000000000010c2},
+ { 0x0000000000000002,0x000000066b097d7a4,0x0000000000001aac,0x00000000000e900cb,0x0000000000000000,0x000000066c0000000,0x0000000000000000,0x00000000000e94000},
+ { 0x0000005395f5df06,0x01eb6ce76c55939b3,0x00004b0290cf1060,0x00001742e73708acf,0x0000000000000000,0x01eb8000000000000,0x00004b0000000000,0x00001748000000000},
+ { 0x000000000000035f,0x0000000000480cdd0,0x000000000000098e,0x000000000007ac25b,0x0000000000000000,0x00000000004820000,0x0000000000000000,0x000000000007ae000},
+ { 0x0000000000000017,0x000000f0a74887ca3,0x00000000000001c4,0x000000002bd2ed8bb,0x0000000000000000,0x000000f0c00000000,0x0000000000000000,0x000000002be000000},
+ { 0x0000000000000062,0x018096f1a37868038,0x00000000000ae5e8,0x000000000131e466e,0x0000000000000000,0x01810000000000000,0x0000000000080000,0x00000000013200000},
+ { 0x000000038f39cef0,0x000fbc0132c80f2b8,0x0000004a4c337de5,0x000dd177e5de9b7a5,0x0000000000000000,0x000fc000000000000,0x0000000000000000,0x000dd400000000000},
+ { 0x0000000000000010,0x00000a245f18d39d9,0x0000000000000da1,0x000000002a29624ef,0x0000000000000000,0x00000a28000000000,0x0000000000000000,0x000000002a3000000},
+ { 0x0000000001dad220,0x01ca05d0fbef88562,0x0000106cf3420bd3,0x000003bc27d0b6917,0x0000000000000000,0x01ca8000000000000,0x0000106000000000,0x000003bd000000000},
+ { 0x0000000000a54b3d,0x00000083050a02991,0x000001770923e902,0x0000006f477d6cf4e,0x0000000000000000,0x00000083400000000,0x0000017600000000,0x0000006f600000000},
+ { 0x0000000000000052,0x000005c4f8221402b,0x0000000000000108,0x000000d48c87f5bc8,0x0000000000000000,0x000005c6000000000,0x0000000000000000,0x000000d4c00000000},
+ { 0x000000000000000e,0x00000a0d35002715d,0x00000001bdd8e5c3,0x0000001f84845764f,0x0000000000000000,0x00000a10000000000,0x0000000180000000,0x0000001f880000000},
+ { 0x00000000000127ec,0x000422c31798032db,0x00000010f4933360,0x0000ea1071989a8f7,0x0000000000000000,0x00042400000000000,0x0000000000000000,0x0000ea40000000000},
+ { 0x0000000000093658,0x000000000088ccc63,0x00000000004ab838,0x00000000001d38fa4,0x0000000000080000,0x00000000008900000,0x00000000004a8000,0x00000000001d40000},
+ { 0x00000000000041ed,0x0000002b1757b291d,0x0000000000018e5e,0x00000000000029b19,0x0000000000000000,0x0000002b200000000,0x0000000000018e00,0x00000000000029b80},
+ { 0x00000000000033ca,0x021262dfd4d8999ba,0x00010512d15fbb68,0x0000b87bca8d8a5e1,0x0000000000000000,0x02130000000000000,0x0001040000000000,0x0000b880000000000},
+ { 0x000000000000005b,0x000002d504ae75eb1,0x000000000000006b,0x0000000001d64e154,0x0000000000000000,0x000002d6000000000,0x0000000000000000,0x0000000001d680000},
+ { 0x0000000000000000,0x0984d1f08f54af6a7,0x0001f4fe8c5fbc64,0x006caa1c30b91e8fa,0x0000000000000000,0x09880000000000000,0x0000000000000000,0x006cc000000000000},
+ { 0x0000000000000574,0x0000021a02421f705,0x000000000000d3d8,0x00000000cfcdca83e,0x0000000000000000,0x0000021b000000000,0x0000000000000000,0x00000000d00000000},
+ { 0x000000000045ef92,0x004f2a22b4ad94ce2,0x0000000007ce796a,0x00000001958672644,0x0000000000000000,0x004f4000000000000,0x0000000000000000,0x00000001960000000},
+ { 0x00000000005f7067,0x0040813d80a5c9847,0x0000000191b7cddb,0x0003b4f7c1e1bfd18,0x0000000000000000,0x0040a000000000000,0x0000000000000000,0x0003b500000000000},
+ { 0x00000000000000d9,0x0296a5a00021b6d9d,0x000000001108c97c,0x00000003b4aed3bb7,0x0000000000000000,0x02970000000000000,0x0000000010000000,0x00000003b50000000},
+ { 0x00000000585456a7,0x023ba6cefc6c58893,0x0000003e3cc314fc,0x000001aa8d14e79b9,0x0000000000000000,0x023c0000000000000,0x0000003800000000,0x000001ab000000000},
+ { 0x0000000000000004,0x00000073fb8f3b4f4,0x0000000000000450,0x00000002949d43fc5,0x0000000000000000,0x00000074000000000,0x0000000000000000,0x00000002950000000},
+ { 0x000000000000b1e6,0x09c738bb507447d6e,0x00053be9bdbdadd8,0x00018c2f3da9b86d2,0x0000000000000000,0x09c80000000000000,0x0005380000000000,0x00018c80000000000},
+ { 0x0000000000000149,0x000036e49e6d2f4b0,0x00000000000c8e78,0x000000000bd6ad6c3,0x0000000000000000,0x000036f0000000000,0x0000000000000000,0x000000000bd800000},
+ { 0x0000000000048c81,0x000985fb9652b6da4,0x0000049cf4523781,0x0000007a274500daa,0x0000000000000000,0x00098800000000000,0x0000049c00000000,0x0000007a300000000},
+ { 0x0000000000000079,0x000000032c094ad36,0x0000000000000f04,0x0000000000003fa61,0x0000000000000000,0x000000032d0000000,0x0000000000000f00,0x0000000000003fb00},
+ { 0x000000000000000f,0x00007d5164a2c457f,0x00000000000376f1,0x0000000e23aca92bc,0x0000000000000000,0x00007d60000000000,0x0000000000000000,0x0000000e240000000},
+ { 0x0000000000000001,0x0010b599cdbfac3df,0x0000000000a69a4b,0x000000002583d57b9,0x0000000000000000,0x0010b800000000000,0x0000000000000000,0x00000000259000000},
+ { 0x0000000000ea28db,0x00000004beea44d48,0x00000003dbdee441,0x000000018c8ad793c,0x0000000000000000,0x00000004c00000000,0x00000003d8000000,0x000000018d0000000},
+ { 0x00000000000001b2,0x0633a8eb54effbc63,0x00000000179abe98,0x00070f10ca7256e3d,0x0000000000000000,0x06340000000000000,0x0000000000000000,0x00071000000000000},
+ { 0x0000000000013178,0x0039d28354353ed3d,0x00002bf48814355e,0x0000037c7ebb709a4,0x0000000000000000,0x0039e000000000000,0x00002bf400000000,0x0000037c800000000},
+ { 0x0000000000000005,0x0044a1ea5fa527c0c,0x000000183cef0edf,0x00000590e68f42912,0x0000000000000000,0x0044c000000000000,0x0000000000000000,0x00000592000000000},
+ { 0x000000000000002e,0x00000000074ab633b,0x000000000013edf1,0x00000000057885f81,0x0000000000000000,0x00000000074c00000,0x0000000000000000,0x00000000057a00000},
+ { 0x0000000000000000,0x06f6acd3b3946f18d,0x000000000df5390f,0x000000204935f36e5,0x0000000000000000,0x06f80000000000000,0x0000000000000000,0x00000020500000000},
+ { 0x0000000000000000,0x00000011806178b2c,0x0000000000000002,0x0000000001d90574b,0x0000000000000000,0x00000011880000000,0x0000000000000000,0x0000000001d980000},
+ { 0x00000000000014bb,0x0000376e2679b32c4,0x0000000000059fc2,0x0000002148a4c1037,0x0000000000000000,0x00003770000000000,0x0000000000000000,0x00000021500000000},
+ { 0x0000000000000005,0x01f3397ceedf8b009,0x0000000004e469d7,0x00000b272b1c6069a,0x0000000000000000,0x01f38000000000000,0x0000000000000000,0x00000b28000000000},
+ { 0x000000000000000b,0x0004f6f5629fb30e4,0x00000000000061da,0x0000000000004bc55,0x0000000000000000,0x0004f800000000000,0x0000000000006000,0x0000000000004be00},
+ { 0x00000002d2f3f165,0x019813a97ed478d70,0x00000d92ebfa8c88,0x00023f050a505bb73,0x0000000000000000,0x01988000000000000,0x0000000000000000,0x00024000000000000},
+ { 0x0000000000000038,0x0000000ee02dbb216,0x0000000003f6f043,0x0000000082a5ef3c4,0x0000000000000000,0x0000000ee40000000,0x0000000000000000,0x0000000082c000000},
+ { 0x000000002af04fc1,0x0014bd1d310d3f307,0x00000033d50acf8d,0x000005a75bdff6a16,0x0000000000000000,0x0014c000000000000,0x0000002000000000,0x000005a8000000000},
+ { 0x000000000000727f,0x015389b5e889015ac,0x0000000001341e2f,0x00024905c438895d1,0x0000000000000000,0x01540000000000000,0x0000000000000000,0x00024a00000000000},
+ { 0x0000000000000057,0x000a064903cf50227,0x0000000000254bb2,0x0000000001b80670b,0x0000000000000000,0x000a0800000000000,0x0000000000200000,0x0000000001b880000},
+ { 0x0000000000000899,0x0006b4aeeeb0288da,0x0000000000007cb5,0x00000000000d23a02,0x0000000000000000,0x0006b600000000000,0x0000000000004000,0x00000000000d24000},
+ { 0x00000000008c86c8,0x0000002ce19ed1955,0x0000000001df56ac,0x000000000a47bf0b2,0x0000000000000000,0x0000002cf00000000,0x0000000001c00000,0x000000000a4800000},
+ { 0x000000000013a12d,0x000015b15cbf4aeb0,0x0000000102b06d8e,0x000000cb32b17be66,0x0000000000000000,0x000015b8000000000,0x0000000000000000,0x000000cb400000000},
+ { 0x0000000000000899,0x0025154564fad6321,0x0000000000d24b00,0x0000001d3f0d3a987,0x0000000000000000,0x00252000000000000,0x0000000000000000,0x0000001d400000000},
+ { 0x0000000017ec7a95,0x0003685b17c57db8c,0x00099bc573c1c57b,0x0001f23a4949099ae,0x0000000000000000,0x00036900000000000,0x0009980000000000,0x0001f280000000000},
+ { 0x0000000000000002,0x00003f145457abef8,0x0000000000001fa0,0x000000000d9705899,0x0000000000000000,0x00003f20000000000,0x0000000000000000,0x000000000d9800000},
+ { 0x0000000000000007,0x0000033a2767ae2bf,0x00000000771e779d,0x0000017ae136b71a7,0x0000000000000000,0x0000033b000000000,0x0000000000000000,0x0000017b000000000},
+ { 0x0000000000000039,0x0004d9870ae21a344,0x00000000004cdd9f,0x00000000000ed8ee4,0x0000000000000000,0x0004da00000000000,0x00000000004cc000,0x00000000000edc000},
+ { 0x00000e3a50a71b40,0x025d07f521b060d45,0x0010188aef495bae,0x003a86f23a2bf45e4,0x0000000000000000,0x025e0000000000000,0x0010000000000000,0x003a9000000000000},
+ { 0x0000000000000009,0x0000000d3714c37f1,0x000000000000001d,0x0000000000ca57e4c,0x0000000000000000,0x0000000d380000000,0x0000000000000000,0x0000000000ca80000},
+ { 0x0000000000000ce9,0x000000f0f1ca327bf,0x000000000000146e,0x000000000055410f5,0x0000000000000000,0x000000f1000000000,0x0000000000000000,0x00000000005560000},
+ { 0x00000000000005b8,0x0000112fe591efd2d,0x00000be619f7528c,0x0000020c3042addbc,0x0000000000000000,0x00001130000000000,0x00000be000000000,0x0000020c800000000},
+ { 0x0000000000002d40,0x000e439a6d723ae58,0x0000000f5d13af94,0x000000766db2ed9cb,0x0000000000000000,0x000e4400000000000,0x0000000e00000000,0x00000076800000000},
+ { 0x0000000000000003,0x000002cb9142def9b,0x00000000006d7b85,0x000001909bc8177ef,0x0000000000000000,0x000002cc000000000,0x0000000000000000,0x00000191000000000},
+ { 0x00000000000356de,0x00000162d8ca71016,0x000000000007e452,0x00000000242a19abb,0x0000000000000000,0x00000163000000000,0x0000000000000000,0x00000000243000000},
+ { 0x0000000000000200,0x0031548aa03acd9c5,0x0000000195796242,0x000000013ae14ac21,0x0000000000000000,0x00316000000000000,0x0000000190000000,0x000000013b0000000},
+ { 0x000000007d234b6c,0x03044292d37456f5f,0x000000576b2bbb95,0x0154ac82cce224e09,0x0000000000000000,0x03050000000000000,0x0000000000000000,0x01550000000000000},
+ { 0x0001abc3e0168285,0x0607adb90b295337c,0x03842675ec2f2265,0x006aed2c72b3ebf41,0x0000000000000000,0x06080000000000000,0x0384000000000000,0x006af000000000000},
+ { 0x000000000015bd57,0x0049467c4c3eadb00,0x00007237388ee202,0x0006dc5252571803e,0x0000000000000000,0x00496000000000000,0x0000600000000000,0x0006de00000000000},
+ { 0x0000000000000003,0x000001b2f22b04b5f,0x000000000000001d,0x000000000000338cd,0x0000000000000000,0x000001b3000000000,0x0000000000000000,0x00000000000033900},
+ { 0x000000000000000e,0x0000000252c497d2b,0x00000000fb6635de,0x0000000039b6cfc9a,0x0000000000000000,0x00000002530000000,0x00000000fb000000,0x0000000039c000000},
+ { 0x000000000000005b,0x00000000a6b6b31a6,0x000000000001238d,0x00000000241524651,0x0000000000000000,0x00000000a6c000000,0x0000000000000000,0x00000000242000000},
+ { 0x0000000000000036,0x04fc44111d11d9861,0x0000000000009c0a,0x00003ccf3aacff43a,0x0000000000000000,0x04fe0000000000000,0x0000000000000000,0x00003cd0000000000},
+ { 0x0000000000000003,0x000000a91311b350d,0x0000000000006edb,0x00000000003321263,0x0000000000000000,0x000000a9400000000,0x0000000000000000,0x00000000003330000},
+ { 0x00000000000012cc,0x0463d5622f03e7b17,0x0000024a5b3a4c0b,0x00a77ab2df15987e2,0x0000000000000000,0x04640000000000000,0x0000000000000000,0x00a78000000000000},
+ { 0x00000009f68a67ea,0x014f05d93878d2b22,0x00009c5098459578,0x00000f115f27aeafc,0x0000000000000000,0x014f8000000000000,0x00009c4000000000,0x00000f12000000000},
+ { 0x0000000000d6d66b,0x00001002757101a4c,0x0000000030e25ea0,0x000000001879e5d81,0x0000000000000000,0x00001008000000000,0x0000000030800000,0x00000000188000000},
+ { 0x000000000000b152,0x000002530b0ef68b2,0x000000000003b4b1,0x00000014003f1b025,0x0000000000000000,0x00000254000000000,0x0000000000000000,0x00000014080000000},
+ { 0x000466562d80e57d,0x0bf209782098255e3,0x050cae4e00680837,0x00a6e9159a36e3267,0x0000000000000000,0x0bf40000000000000,0x050c000000000000,0x00a70000000000000},
+ { 0x00000000000020dd,0x0082ec8cdc94fab0a,0x0000001f6f7413b8,0x0005e088e3c9c8744,0x0000000000000000,0x00830000000000000,0x0000000000000000,0x0005e200000000000},
+ { 0x0000000000070d14,0x000d27fbd1dbda057,0x00000097041902ea,0x000000b8a91102f88,0x0000000000000000,0x000d2800000000000,0x0000009400000000,0x000000b8c00000000},
+ { 0x000000000000000f,0x000000000000bb462,0x0000000000000364,0x0000000000000d9c6,0x0000000000000000,0x000000000000bb800,0x0000000000000340,0x0000000000000da00},
+ { 0x0000000000016380,0x000003273ced74a96,0x0000000000346792,0x0000012a087eebc73,0x0000000000000000,0x00000328000000000,0x0000000000000000,0x0000012a800000000},
+ { 0x0000000010d727d7,0x00000001984cf704b,0x000000001220be7f,0x00000000733a2e3f3,0x0000000010000000,0x00000001988000000,0x0000000012000000,0x00000000734000000},
+ { 0x00000000000799c3,0x0004d0a3f891da87e,0x0000000e06804e33,0x0000008777921276a,0x0000000000000000,0x0004d200000000000,0x0000000c00000000,0x00000087800000000},
+ { 0x0000000000000000,0x00000018e02da3c87,0x000000000007f188,0x00000004391530e9a,0x0000000000000000,0x00000018e80000000,0x0000000000000000,0x000000043a0000000},
+ { 0x00000005e5dcc066,0x06cdf68ba8a366a8b,0x00000006b6c6d6d0,0x00000003b97166c5d,0x0000000000000000,0x06ce0000000000000,0x00000006b0000000,0x00000003ba0000000},
+ { 0x0000000000000007,0x00038b76228708b23,0x000000052f4548a4,0x00008b1f76f504e66,0x0000000000000000,0x00038c00000000000,0x0000000000000000,0x00008b40000000000},
+ { 0x000000000000a2a4,0x0000240bb0d6cd169,0x0000000017a7a6da,0x00000f0344cb83259,0x0000000000000000,0x00002410000000000,0x0000000000000000,0x00000f04000000000},
+ { 0x000000dc9c1745c4,0x0345d22850ada2039,0x003a861fe9f68e70,0x00ba3e56258edc999,0x0000000000000000,0x03460000000000000,0x0038000000000000,0x00ba4000000000000},
+ { 0x000000007503627b,0x000a7c762d8e7dce5,0x0000000189f4c4c4,0x0000001342dfad89e,0x0000000000000000,0x000a8000000000000,0x0000000180000000,0x00000013480000000},
+ { 0x000000000000000e,0x0004219969bf3db96,0x000000000000012a,0x000000000000007c3,0x0000000000000000,0x00042200000000000,0x000000000000012a,0x000000000000007c3},
+ { 0x000000001891a39b,0x00000014af3fe489b,0x00000002411bcd69,0x0000000056a63fc96,0x0000000000000000,0x00000014b00000000,0x0000000241000000,0x0000000056b000000},
+ { 0x00000000000ad4e6,0x0000f92e8d00b3c47,0x00000740ddedda21,0x000011a22c4678c4b,0x0000000000000000,0x0000f940000000000,0x0000070000000000,0x000011a8000000000},
+ { 0x000000000000000a,0x00000177598def636,0x000000000000008b,0x00000002b49ad614c,0x0000000000000000,0x00000177800000000,0x0000000000000000,0x00000002b50000000},
+ { 0x00000000000001b2,0x0001965692bf838c2,0x0000000000000869,0x00000000000000993,0x0000000000000000,0x00019680000000000,0x0000000000000869,0x00000000000000993},
+ { 0x00000000000000b6,0x00000007a2ad9a027,0x0000000000003f00,0x00000001ba936ed06,0x0000000000000000,0x00000007a40000000,0x0000000000000000,0x00000001bb0000000},
+ { 0x0000000000000039,0x0004069d6cc278cdc,0x000000000000094c,0x000001410c3652294,0x0000000000000000,0x00040800000000000,0x0000000000000000,0x00000141800000000},
+ { 0x00000000000536e1,0x00a383c49da5b2f5d,0x00000000010203f1,0x000000014e51367e7,0x0000000000000000,0x00a3c000000000000,0x0000000000000000,0x000000014e8000000},
+ { 0x0000000096cead9a,0x00000ceff040484b3,0x0000000c3dd964a1,0x0000001a382206538,0x0000000000000000,0x00000cf0000000000,0x0000000c00000000,0x0000001a400000000},
+ { 0x00000000000000e2,0x0ad4f1d6502774902,0x00dba8beca158c2d,0x00b8a68fab5c7f79d,0x0000000000000000,0x0ad80000000000000,0x00d8000000000000,0x00b8c000000000000},
+ { 0x0000000000000009,0x000ccc46ea2f016eb,0x00000001dcf28bfc,0x0000000bbc5c0d6eb,0x0000000000000000,0x000cd000000000000,0x00000001c0000000,0x0000000bc00000000},
+ { 0x000000000000001f,0x000000c829c6f647b,0x00000006cc022d72,0x00000000a6171f31a,0x0000000000000000,0x000000c8400000000,0x00000006cc000000,0x00000000a62000000},
+ { 0x0000000000788d1c,0x0001350479392935d,0x0000000f9ea6f31d,0x00000013fddd60d4a,0x0000000000000000,0x00013580000000000,0x0000000f80000000,0x00000014000000000},
+ { 0x00000000000010bc,0x002a5ac8953f7fcdb,0x00000000001730fd,0x0002bc4132645d3d1,0x0000000000000000,0x002a6000000000000,0x0000000000000000,0x0002bd00000000000},
+ { 0x0000000000000a0e,0x000000001790e3a63,0x000000000000206d,0x00000000000303ab1,0x0000000000000000,0x00000000179800000,0x0000000000002000,0x00000000000304000},
+ { 0x0000000000001194,0x0a83c7037344490b1,0x000000034b83ec52,0x000000003f82a3370,0x0000000000000000,0x0a840000000000000,0x000000034b800000,0x000000003f8400000},
+ { 0x0000000000000044,0x0014472fac46e45b3,0x0001d760c30f5bb6,0x000062018b93a0c12,0x0000000000000000,0x00144800000000000,0x0001d60000000000,0x00006220000000000},
+ { 0x000000000000011b,0x00000000fa160664a,0x000000000002aeaa,0x0000000083cb9fd7c,0x0000000000000000,0x00000000fa4000000,0x0000000000000000,0x00000000840000000},
+ { 0x00000000000001be,0x0000003a571318ae1,0x00000000000cfb85,0x00000000012aff9f0,0x0000000000000000,0x0000003a600000000,0x0000000000080000,0x00000000012b00000},
+ { 0x0000000000000002,0x00000002b24d5918d,0x0000000000002d7e,0x00000000056ca699a,0x0000000000000000,0x00000002b30000000,0x0000000000000000,0x00000000056e00000},
+ { 0x0000000000000004,0x0000000007547f4f9,0x000000000035e06b,0x0000000000039990a,0x0000000000000000,0x00000000075600000,0x000000000035e000,0x00000000000399a00},
+ { 0x0000000001bded9f,0x028c61e0df01c236b,0x000000000744a557,0x00072f926b861898b,0x0000000000000000,0x028d0000000000000,0x0000000000000000,0x00073000000000000},
+ { 0x000000004f45b879,0x00009f4f2ccd4e155,0x000003c88e044e92,0x00000731a083cd270,0x0000000000000000,0x00009f80000000000,0x000003c000000000,0x00000732000000000},
+ { 0x000002b30aa7e1d7,0x04fc4436f708d9e81,0x00296e9dc75a5f88,0x000775348aa9c0c2d,0x0000000000000000,0x04fe0000000000000,0x0029600000000000,0x00077600000000000},
+ { 0x0000000000000003,0x00037e23586187916,0x00000000000000a6,0x000000000000696ec,0x0000000000000000,0x00037f00000000000,0x0000000000000000,0x00000000000069800},
+ { 0x000000000000000c,0x00000332e5b1fd0ab,0x000000000a41c6b6,0x000000543cef3c971,0x0000000000000000,0x00000333000000000,0x0000000000000000,0x00000054400000000},
+ { 0x00000000002c05a7,0x000a50e21c9fae420,0x0000001fb49012bd,0x0000000de9c5b37e6,0x0000000000000000,0x000a5400000000000,0x0000001f80000000,0x0000000dec0000000},
+ { 0x000000000000f4f7,0x07c5ec9ef28609376,0x00000009b5750fd5,0x07710714474e562f7,0x0000000000000000,0x07c60000000000000,0x0000000000000000,0x07720000000000000},
+ { 0x000000000000000a,0x00000019aa5b7b9b4,0x000000000017157b,0x0000000e5d2ba275f,0x0000000000000000,0x00000019b00000000,0x0000000000000000,0x0000000e600000000},
+ { 0x000000000000023d,0x00000213376e27aac,0x0000000002053f73,0x0000000cac68f554b,0x0000000000000000,0x00000214000000000,0x0000000000000000,0x0000000cb00000000},
+ { 0x0000000000000094,0x000000279f46b4b60,0x0000000000010737,0x0000000003685fde6,0x0000000000000000,0x00000027a00000000,0x0000000000000000,0x00000000036900000},
+ { 0x000000000053c6e0,0x00753db2e055876d9,0x0000000003862a1e,0x0000112049babc064,0x0000000000000000,0x00754000000000000,0x0000000000000000,0x00001128000000000},
+ { 0x00000000000e9fb8,0x00004b7629c4521b3,0x000000ef4cdd9af3,0x0000008b0a77132be,0x0000000000000000,0x00004b80000000000,0x000000ee00000000,0x0000008b200000000},
+ { 0x0000000b489168a3,0x00000081dfaddf927,0x0000001e188243df,0x0000000f51ea08150,0x0000000800000000,0x00000082000000000,0x0000001e00000000,0x0000000f540000000},
+ { 0x0000000000010096,0x000154f4f9498511f,0x0000000000075222,0x0000001e910303c07,0x0000000000000000,0x00015500000000000,0x0000000000000000,0x0000001e980000000},
+ { 0x0000000000033519,0x01e1457dffc716f1d,0x049ceddb13ccdcf6,0x00de37a486ab06941,0x0000000000000000,0x01e18000000000000,0x049c000000000000,0x00de4000000000000},
+ { 0x000000000931ecea,0x00001aff0c3576be3,0x000000000be26c53,0x000000015fa0f3b94,0x0000000000000000,0x00001b00000000000,0x0000000008000000,0x00000001600000000},
+ { 0x0000000000000041,0x000004609b60f26f1,0x000000000e2a08ca,0x0000000029a182e55,0x0000000000000000,0x00000462000000000,0x000000000e000000,0x0000000029b000000},
+ { 0x0000002a64d1fc91,0x00263e4366bd1b101,0x000001d052529831,0x0000005b2246ab07c,0x0000000000000000,0x00264000000000000,0x000001d000000000,0x0000005b300000000},
+ { 0x000000000000c03e,0x0052cfb553197e283,0x0000000009f3f616,0x000000020d94eabaa,0x0000000000000000,0x0052e000000000000,0x0000000000000000,0x000000020e0000000},
+ { 0x00000000000a0870,0x004022d50402ebe90,0x0014d9958026fb51,0x00066fa2195445da6,0x0000000000000000,0x00404000000000000,0x0014c00000000000,0x00067000000000000},
+ { 0x0000000000000003,0x016f2a12aa4ab7726,0x0000001bdb48aa06,0x000000033b039103c,0x0000000000000000,0x016f8000000000000,0x0000001bd8000000,0x000000033b8000000},
+ { 0x00000000001dd9bc,0x0f65b5220a29a69c9,0x000000011ea47f65,0x09ca3e214f4dcc301,0x0000000000000000,0x0f680000000000000,0x0000000000000000,0x09cc0000000000000},
+ { 0x000000000000000a,0x00004a318ebb5ab99,0x00000000000033ba,0x0000000000000c511,0x0000000000000000,0x00004a40000000000,0x0000000000003380,0x0000000000000c540},
+ { 0x0000000000079da3,0x003c03d9d72a6db98,0x00000000003bc21a,0x00000003f2346719e,0x0000000000000000,0x003c1000000000000,0x0000000000000000,0x00000003f30000000},
+ { 0x000000002f29cc55,0x000001eabb0982e81,0x00000009febd3521,0x0000003b35445c1c6,0x0000000000000000,0x000001eb000000000,0x0000000900000000,0x0000003b400000000},
+ { 0x0000000000006e35,0x0000000d705ecbfac,0x000000006610dac9,0x000000021544e3c4c,0x0000000000000000,0x0000000d740000000,0x0000000060000000,0x00000002160000000},
+ { 0x00000d3d3b6b80b1,0x0a01e1ff44da8fbb3,0x0006bdb7eca3e406,0x000b1efccdef02315,0x0000000000000000,0x0a040000000000000,0x0006800000000000,0x000b2000000000000},
+ { 0x0000000000000003,0x00bd2ea2445731606,0x000000000000b67c,0x000000009a23bb7e0,0x0000000000000000,0x00bd4000000000000,0x0000000000000000,0x000000009a4000000},
+ { 0x0000000000000000,0x000000000000ab523,0x0000000000000315,0x0000000000000bb88,0x0000000000000000,0x000000000000ab800,0x0000000000000300,0x0000000000000bbc0},
+ { 0x0000000000000003,0x00000323722771bf7,0x000000000000006f,0x000000000186a0af2,0x0000000000000000,0x00000324000000000,0x0000000000000000,0x00000000018700000},
+ { 0x00000000000000e0,0x00ad46e97431cc39e,0x000000002bf766c3,0x00001d815de131133,0x0000000000000000,0x00ad8000000000000,0x0000000000000000,0x00001d88000000000},
+ { 0x0000000000000128,0x0000000000009c010,0x000000000000037d,0x0000000000000198b,0x0000000000000000,0x0000000000009c400,0x0000000000000378,0x00000000000001990},
+ { 0x00000000003cd045,0x00000003fe5e27ee7,0x000000012058f30c,0x00000001a231055d2,0x0000000000000000,0x00000003ff0000000,0x0000000120000000,0x00000001a28000000},
+ { 0x0000000000000003,0x00019ca24730c4c51,0x0000000000036883,0x0000000000029db96,0x0000000000000000,0x00019d00000000000,0x0000000000036000,0x0000000000029e000},
+ { 0x00000000000e1c6f,0x000143a92738c25ff,0x0000000000fce75c,0x00000006d5ed89709,0x0000000000000000,0x00014400000000000,0x0000000000000000,0x00000006d60000000},
+ { 0x0000000000b21549,0x000004b343d786606,0x00000000057f3cd9,0x000000000061e42e2,0x0000000000000000,0x000004b4000000000,0x00000000057f0000,0x000000000061e8000},
+ { 0x00000518e3c053a7,0x002597e510acaf78f,0x000009e724fcc0e8,0x00001b97c26f20133,0x0000000000000000,0x0025a000000000000,0x0000098000000000,0x00001b98000000000},
+ { 0x000000000000008f,0x00002b40c49f5380b,0x0000000000071980,0x0000000dcc6656cc3,0x0000000000000000,0x00002b50000000000,0x0000000000000000,0x0000000dd00000000},
+ { 0x00000000012e4891,0x000084158109d292f,0x0000a63ff9694252,0x000049ba24cfe5f3e,0x0000000000000000,0x00008440000000000,0x0000a60000000000,0x000049c0000000000},
+ { 0x0000000000000003,0x0000347e3df61d4a7,0x000000000000740d,0x0000000000be9ac2f,0x0000000000000000,0x00003480000000000,0x0000000000000000,0x0000000000bec0000},
+ { 0x0000000000003b04,0x00a0f5a14e7b0e6ad,0x000000000d50dd4a,0x00000d4adf257fb76,0x0000000000000000,0x00a10000000000000,0x0000000000000000,0x00000d4c000000000},
+ { 0x000000000000000d,0x00df04222b6f814fa,0x00000000000003b0,0x0000d5b8146717300,0x0000000000000000,0x00df4000000000000,0x0000000000000000,0x0000d5c0000000000},
+ { 0x00000000005f2747,0x00000f45080a0f2c8,0x00000000009d5637,0x000000000069f7b66,0x0000000000000000,0x00000f48000000000,0x00000000009c0000,0x00000000006a00000},
+ { 0x00000006a11f2e7b,0x001674b9bbb55b348,0x000000366d955ed0,0x0000006254df278ad,0x0000000000000000,0x00167800000000000,0x0000003600000000,0x00000062600000000},
+ { 0x00000000005f22c7,0x01e2d404887742163,0x000000009ca235cc,0x000000979dcf134b0,0x0000000000000000,0x01e30000000000000,0x0000000000000000,0x00000097c00000000},
+ { 0x000000000000005c,0x00000d34302e34ed6,0x000000000000013f,0x000000155ae5a38c7,0x0000000000000000,0x00000d38000000000,0x0000000000000000,0x00000015600000000},
+ { 0x031a198aeb4f80dc,0x0d2d604b012c8a975,0x1341fa8259a44d17,0x034e8770f2c94493f,0x0300000000000000,0x0d300000000000000,0x1340000000000000,0x034f0000000000000},
+ { 0x0000000000001763,0x01ed2402280547c63,0x0000000000011a34,0x00000000000ffcf8f,0x0000000000000000,0x01ed8000000000000,0x0000000000010000,0x00000000001000000},
+ { 0x0000000000000057,0x00000b0b03dc3ae85,0x0000000000000787,0x0000002a21dbc584d,0x0000000000000000,0x00000b0c000000000,0x0000000000000000,0x0000002a300000000},
+ { 0x000000000487f5eb,0x070018ffa852b4be7,0x00000000dac39cbe,0x000063f8e1a0bbb7e,0x0000000000000000,0x07020000000000000,0x0000000000000000,0x00006400000000000},
+ { 0x000000000000009c,0x001ecb7ffc59f0ed6,0x000000001c34e006,0x00012ce1c2dcbb6c1,0x0000000000000000,0x001ed000000000000,0x0000000000000000,0x00012d00000000000},
+ { 0x000000000000009c,0x0000017cff502e048,0x00000000000444dc,0x0000000000084bd2c,0x0000000000000000,0x0000017d000000000,0x0000000000044000,0x0000000000084c000},
+ { 0x00000000003b312f,0x0044aa608f0ea3c8a,0x00001623432a2420,0x000002b0800c13aa2,0x0000000000000000,0x0044c000000000000,0x0000162000000000,0x000002b1000000000},
+ { 0x0000000000343785,0x0004bd4706ab19e0e,0x0000000001d80108,0x000000052afb09b22,0x0000000000000000,0x0004be00000000000,0x0000000000000000,0x000000052c0000000},
+ { 0x0000000000762baa,0x0e9b65a8606f81ba8,0x0000080d634ab61e,0x0000156e22306bb7f,0x0000000000000000,0x0e9c0000000000000,0x0000080000000000,0x00001570000000000},
+ { 0x0000000000000004,0x0000000007e818e24,0x0000000000000338,0x000000000000022bb,0x0000000000000000,0x0000000007ea00000,0x0000000000000338,0x000000000000022c0},
+ { 0x0000000000b0daad,0x0000215c84565bbd4,0x00000064de8cfcc5,0x0000001ba19a30bff,0x0000000000000000,0x00002160000000000,0x0000006480000000,0x0000001ba80000000},
+ { 0x00000000000000a0,0x000000fd05ce00f0b,0x000000000373e717,0x000000004d61ffae9,0x0000000000000000,0x000000fd400000000,0x0000000002000000,0x000000004d8000000},
+ { 0x0000000000000010,0x025bd779877fb3a54,0x000000fbfec04c2f,0x000018314d1b366b4,0x0000000000000000,0x025c0000000000000,0x0000008000000000,0x00001838000000000},
+ { 0x000000000000666d,0x0000000002fdde47a,0x000000000010085a,0x0000000000073a643,0x0000000000000000,0x0000000002fe00000,0x0000000000100000,0x0000000000073c000},
+ { 0x0000000000000001,0x00000000000001698,0x0000000000000007,0x00000000000000123,0x0000000000000000,0x00000000000001698,0x0000000000000007,0x00000000000000123},
+ { 0x0000000000000139,0x026da4a12850ebcf2,0x00000001e65e2ce6,0x0071449bb5b398292,0x0000000000000000,0x026e0000000000000,0x0000000000000000,0x00716000000000000},
+ { 0x000000000000638d,0x000007ec7f46105eb,0x000000007461562f,0x000003a17918b511a,0x0000000000000000,0x000007ee000000000,0x0000000000000000,0x000003a2000000000},
+ { 0x000000000000c75c,0x0020af31a27702cea,0x00000000f48ce08f,0x000000001a96044a6,0x0000000000000000,0x0020b000000000000,0x00000000f4800000,0x000000001a9800000},
+ { 0x0000000000000006,0x000000000000ee00a,0x000000000000005e,0x0000000000001dfec,0x0000000000000000,0x000000000000ee400,0x0000000000000000,0x0000000000001e000},
+ { 0x0000000000000008,0x001b0f1e1a5e89175,0x00000000005f707f,0x000000019cd2b23a7,0x0000000000000000,0x001b1000000000000,0x0000000000000000,0x000000019d0000000},
+ { 0x000000000001f450,0x0000004ff36c2b3ce,0x000000000002d5f9,0x00000000000518956,0x0000000000000000,0x00000050000000000,0x000000000002c000,0x0000000000051a000},
+ { 0x0000000000000000,0x00000008ba8dff389,0x0000000000024c89,0x00000007cd987a833,0x0000000000000000,0x00000008bc0000000,0x0000000000000000,0x00000007ce0000000},
+ { 0x00000000000002f6,0x000000e34e171f905,0x000000000e9fc2c5,0x000000000269f7c0a,0x0000000000000000,0x000000e3800000000,0x000000000e980000,0x00000000026a00000},
+ { 0x0000000000014d37,0x00009258a859b0ecb,0x00037157af4c5d7b,0x00003f25a5b151dbc,0x0000000000000000,0x00009280000000000,0x0003714000000000,0x00003f28000000000},
+ { 0x000000000000001d,0x005207de56030bc7c,0x0000000000198623,0x0039931c42dfcd73a,0x0000000000000000,0x00522000000000000,0x0000000000000000,0x0039a000000000000},
+ { 0x00000001c376db68,0x0d723a0a06a304b07,0x00003b760e919006,0x000086f5d053ad92b,0x0000000000000000,0x0d740000000000000,0x0000380000000000,0x00008700000000000},
+ { 0x0000057b7a522f54,0x00000a45a89bbf63f,0x000007258a8e7167,0x000000e7dac2f6e9e,0x0000054000000000,0x00000a48000000000,0x0000072400000000,0x000000e7e00000000},
+ { 0x0000000000001171,0x000000000078338a4,0x0000000000003697,0x0000000000217fa17,0x0000000000000000,0x00000000007840000,0x0000000000000000,0x00000000002180000},
+ { 0x0000000399d3cdaa,0x0000016b9ac6115e8,0x00000047710a6f79,0x0000002ae504d5de0,0x0000000000000000,0x0000016c000000000,0x0000004700000000,0x0000002af00000000},
+ { 0x000000000075b75f,0x002c89e2031fe9f71,0x000002235fd01df8,0x000001f28b5cf9c5f,0x0000000000000000,0x002c9000000000000,0x0000022000000000,0x000001f3000000000},
+ { 0x0000000000003198,0x0000007d3a48d20c6,0x000000123fed7cf9,0x000000032514c583f,0x0000000000000000,0x0000007d400000000,0x0000001230000000,0x00000003260000000},
+ { 0x0000000000000008,0x00c15d481e334a66f,0x000002f7a7bd1b38,0x006e5dc564195e9b5,0x0000000000000000,0x00c18000000000000,0x0000000000000000,0x006e6000000000000},
+ { 0x000000000000005d,0x000000056693f26e3,0x0000000000000075,0x0000000020b4e4634,0x0000000000000000,0x00000005680000000,0x0000000000000000,0x0000000020c000000},
+ { 0x00000000000002c0,0x00d893f71b60fe6b6,0x0000000001556cd9,0x0000000000664de77,0x0000000000000000,0x00d8c000000000000,0x0000000001540000,0x00000000006660000},
+ { 0x0000000000000676,0x0000000004f81acf1,0x000000000000b536,0x00000000002e1a239,0x0000000000000000,0x0000000004fa00000,0x0000000000000000,0x00000000002e20000},
+ { 0x00000000000000bb,0x000000256416b5934,0x0000000001a3c36f,0x00000011ec1ba195b,0x0000000000000000,0x00000025700000000,0x0000000000000000,0x00000011f00000000},
+ { 0x000000000000000f,0x00000001bde6c139a,0x0000000000000928,0x000000000000247f3,0x0000000000000000,0x00000001be0000000,0x0000000000000900,0x00000000000024800},
+ { 0x00000001a784f8b2,0x000386cee76dfa763,0x00000034f8b72f1f,0x0000000a0c43a78eb,0x0000000000000000,0x00038700000000000,0x00000034e0000000,0x0000000a0e0000000},
+ { 0x0000000000000033,0x0000001a5bbd2dc09,0x000000000000003f,0x000000000000098cd,0x0000000000000000,0x0000001a600000000,0x0000000000000000,0x00000000000009900},
+ { 0x0000000000000001,0x05376b27377d9c5be,0x0000000002aed6eb,0x0000001b85253d9f3,0x0000000000000000,0x05380000000000000,0x0000000000000000,0x0000001b880000000},
+ { 0x0000000000000010,0x000000804b35b0872,0x000000000000003c,0x000000001fd0e541a,0x0000000000000000,0x00000080800000000,0x0000000000000000,0x000000001fd800000},
+ { 0x000000000000001f,0x00139ca9cacc8652d,0x00000000000f00d2,0x00000054401b1fbaa,0x0000000000000000,0x0013a000000000000,0x0000000000000000,0x00000054600000000},
+ { 0x000000009ce5888a,0x05284c6b865066782,0x00036688325f327c,0x03ee9a75d015ab806,0x0000000000000000,0x052a0000000000000,0x0000000000000000,0x03ef0000000000000},
+ { 0x0000000000009608,0x0a61ceb88ce1e97cb,0x00000000000d75bd,0x00000000157956fef,0x0000000000000000,0x0a640000000000000,0x0000000000000000,0x00000000158000000},
+ { 0x0000000000000140,0x0001e89568ecd571a,0x0000000001a8343b,0x0000000095f763c20,0x0000000000000000,0x0001e900000000000,0x0000000000000000,0x00000000960000000},
+ { 0x000000000003670a,0x000287a3bbbc38930,0x00000000cb421350,0x00000001358be7744,0x0000000000000000,0x00028800000000000,0x00000000c8000000,0x00000001360000000},
+ { 0x0000000000000085,0x0000006f0cda27139,0x000000000003a34f,0x00000000182bb68f8,0x0000000000000000,0x0000006f200000000,0x0000000000000000,0x00000000183000000},
+ { 0x00000000000004b4,0x00c445b970c5fb261,0x000000001b3df533,0x00a301d1521867848,0x0000000000000000,0x00c48000000000000,0x0000000000000000,0x00a34000000000000},
+ { 0x000000000000e1bf,0x003f99ac8f2208a1c,0x0000024d3665321f,0x0030b1524f8101493,0x0000000000000000,0x003fa000000000000,0x0000000000000000,0x0030c000000000000},
+ { 0x0000000000005efc,0x00018ec3395d60254,0x0000000fb822cf23,0x000000024f7f8bacc,0x0000000000000000,0x00018f00000000000,0x0000000fb8000000,0x000000024f8000000},
+ { 0x000000000000008f,0x0000191b0cc7767f8,0x000000000001e9f8,0x00000002a58c2076e,0x0000000000000000,0x00001920000000000,0x0000000000000000,0x00000002a60000000},
+ { 0x0000000000028600,0x000005f7fde889872,0x0000000001e9c8a5,0x0000000004b1373b6,0x0000000000000000,0x000005f8000000000,0x0000000001e00000,0x0000000004b200000},
+ { 0x0000000000000000,0x00000000067594464,0x0000000000000006,0x0000000000001dade,0x0000000000000000,0x00000000067600000,0x0000000000000000,0x0000000000001db00},
+ { 0x0000086bfd2114b6,0x0000568b781ffd1d1,0x000009225d3a7a89,0x00000842150f0efd1,0x0000080000000000,0x000056a0000000000,0x0000092000000000,0x00000844000000000},
+ { 0x0000000000000001,0x015e6dc8f6c654015,0x00000000000006d3,0x00027369f69d1f0cb,0x0000000000000000,0x015e8000000000000,0x0000000000000000,0x00027400000000000},
+ { 0x000000003354a230,0x0000f40ec134da5bc,0x000167a73609b68a,0x0000506532972efa2,0x0000000000000000,0x0000f440000000000,0x0001670000000000,0x00005070000000000},
+ { 0x0000000000000f6e,0x000186a4fa9922b67,0x000004a9b7c54e26,0x000039f3d8c381bdf,0x0000000000000000,0x00018700000000000,0x0000040000000000,0x00003a00000000000},
+ { 0x000000000000ad93,0x0000062894f800ec1,0x00000000000239fd,0x000000002bfc1948e,0x0000000000000000,0x0000062a000000000,0x0000000000000000,0x000000002c0000000},
+ { 0x000000000000092f,0x000000002f04e1e4b,0x000000000012a69d,0x0000000000019fae1,0x0000000000000000,0x000000002f1000000,0x000000000012a600,0x0000000000019fc00},
+ { 0x0000000000003f0c,0x003c48e6a6e8e39d4,0x00000000000c4c30,0x00000000ea86fc123,0x0000000000000000,0x003c5000000000000,0x0000000000000000,0x00000000eac000000},
+ { 0x00000000006a3c30,0x00642a066a5d3820c,0x0000000019af1e69,0x000002307ebf183bc,0x0000000000000000,0x00644000000000000,0x0000000000000000,0x00000231000000000},
+ { 0x0000001172a46862,0x00001860b6bd41527,0x00000028309ff67a,0x00000569e0281ac8e,0x0000000000000000,0x00001868000000000,0x0000002000000000,0x0000056a000000000},
+ { 0x0000000000000013,0x00000000002719497,0x00000000000001fa,0x00000000000000672,0x0000000000000000,0x00000000002720000,0x00000000000001fa,0x00000000000000672},
+ { 0x0000000341962282,0x000ae139291399751,0x0000007b688cd58f,0x0000361eca8b8e2b2,0x0000000000000000,0x000ae400000000000,0x0000000000000000,0x00003620000000000},
+ { 0x0000000000000000,0x00d6f7fd5c9cd13af,0x0000000000000001,0x00000000000000055,0x0000000000000000,0x00d70000000000000,0x0000000000000001,0x00000000000000055},
+ { 0x000000000004a578,0x009008b61cc6b2b10,0x00000000000e8718,0x000000006525b33c5,0x0000000000000000,0x00904000000000000,0x0000000000000000,0x00000000654000000},
+ { 0x0000000000000020,0x00000025af918aadb,0x0000000000055428,0x00000000711e7a724,0x0000000000000000,0x00000025b00000000,0x0000000000000000,0x00000000712000000},
+ { 0x000000000000000a,0x0003626b3f5d8e87a,0x0000000000000019,0x0000000000000003d,0x0000000000000000,0x00036300000000000,0x0000000000000019,0x0000000000000003d},
+ { 0x000000001ee41614,0x0018319b4b7d5374b,0x00000d51491428a4,0x0003206a4430d6726,0x0000000000000000,0x00183800000000000,0x0000000000000000,0x00032100000000000},
+ { 0x000000000045b528,0x005e9390d1be4c3b0,0x00000000007f149f,0x0000000000b40db11,0x0000000000000000,0x005ea000000000000,0x00000000007c0000,0x0000000000b440000},
+ { 0x0000003ddc05d33d,0x065504a85ebaab292,0x000000bebf6aec34,0x00000d098482e9bcd,0x0000000000000000,0x06560000000000000,0x0000008000000000,0x00000d0c000000000},
+ { 0x00000000032a959e,0x0d9f8d5a87fa041fb,0x000374a1f0d257ec,0x0070e65e576b07cdf,0x0000000000000000,0x0da00000000000000,0x0002000000000000,0x00710000000000000},
+ { 0x000000000000000f,0x000a21031d614ddeb,0x00000000133a4bbc,0x00000001628dc1b94,0x0000000000000000,0x000a2400000000000,0x0000000010000000,0x00000001630000000},
+ { 0x00000000fc1052c3,0x0004c5abbf283314f,0x0000000219a191f6,0x000000b3e098b6b5f,0x0000000000000000,0x0004c600000000000,0x0000000000000000,0x000000b4000000000},
+ { 0x0000000000000027,0x0000003c6456a65ed,0x0000000000070338,0x00000001c430f91f3,0x0000000000000000,0x0000003c700000000,0x0000000000000000,0x00000001c48000000},
+ { 0x00000000000000c2,0x000002547ced06984,0x000000000000019b,0x00000020768b865de,0x0000000000000000,0x00000255000000000,0x0000000000000000,0x00000020800000000},
+ { 0x00000000000068a9,0x004633d458ff4bb92,0x00000001432bacbc,0x000298718f06af56c,0x0000000000000000,0x00464000000000000,0x0000000000000000,0x00029900000000000},
+ { 0x0000000000045c93,0x0005b9396b8441c2d,0x000000001f306b28,0x00005a1c8c1cc322a,0x0000000000000000,0x0005ba00000000000,0x0000000000000000,0x00005a20000000000},
+ { 0x000000000006545f,0x050b9c927dcd46634,0x00005e895714eb6f,0x04822548459ceba35,0x0000000000000000,0x050c0000000000000,0x0000000000000000,0x04840000000000000},
+ { 0x0000000000059431,0x04df23c8f9ff68890,0x0000000000a33a9f,0x000003cb6e484025a,0x0000000000000000,0x04e00000000000000,0x0000000000000000,0x000003cc000000000},
+ { 0x00000000006f89d4,0x00000501048a5c9fd,0x0000000003993acf,0x000000002f07f166a,0x0000000000000000,0x00000502000000000,0x0000000003000000,0x000000002f1000000},
+ { 0x000000000000000d,0x00001d6628a1bd20f,0x000000000000000e,0x00000000e8692f2c5,0x0000000000000000,0x00001d68000000000,0x0000000000000000,0x00000000e88000000},
+ { 0x0000000000000015,0x00000031972f006b4,0x0000000000f60d97,0x00000000019f396c7,0x0000000000000000,0x00000031a00000000,0x0000000000f00000,0x00000000019f80000},
+ { 0x0000000000017a18,0x00059da05e1d4c814,0x00000000781e85bc,0x000000014e2ac50b0,0x0000000000000000,0x00059e00000000000,0x0000000078000000,0x000000014e8000000},
+ { 0x00000f62614712ac,0x0298d84444b62a148,0x0000177f36ba8706,0x007aab87397a2f350,0x0000000000000000,0x02990000000000000,0x0000000000000000,0x007ac000000000000},
+ { 0x0000000000000001,0x09d6d2de811ae7a8c,0x000050aaf2401b82,0x000007c0a67e84f57,0x0000000000000000,0x09d80000000000000,0x000050a000000000,0x000007c1000000000},
+ { 0x0000000000000002,0x000000066bfe5388e,0x0000001e7672447d,0x00000003949918391,0x0000000000000000,0x000000066c0000000,0x0000001e70000000,0x00000003950000000},
+ { 0x00000000000095ed,0x000389eb383f557a5,0x0000000000602279,0x00000000000b82539,0x0000000000000000,0x00038a00000000000,0x0000000000602000,0x00000000000b84000},
+ { 0x00000000000022ec,0x000000000bf0de947,0x000000000002957d,0x00000000000550821,0x0000000000000000,0x000000000bf400000,0x0000000000028000,0x00000000000552000},
+ { 0x003610a85d20b5ad,0x00d2caefb2267bc20,0x00db373fa7701934,0x000e5011aa55017ef,0x0034000000000000,0x00d30000000000000,0x00db340000000000,0x000e5040000000000},
+ { 0x000000082e9ff539,0x05fcdfc8314447bf4,0x00007b644e04987c,0x0000f81ba04e6e487,0x0000000000000000,0x05fe0000000000000,0x0000780000000000,0x0000f840000000000},
+ { 0x000000000000001d,0x000003228d12bedd4,0x000000003fb5afa4,0x000000aeeab3b4097,0x0000000000000000,0x00000323000000000,0x0000000000000000,0x000000af000000000},
+ { 0x00000000000003b6,0x000010256a4d133db,0x0000000001f2314c,0x00000024c19fcec3d,0x0000000000000000,0x00001028000000000,0x0000000000000000,0x00000024d00000000},
+ { 0x00000000000012eb,0x00762ff571c3cc20b,0x0000003943937351,0x003b22d8ab326e269,0x0000000000000000,0x00764000000000000,0x0000000000000000,0x003b3000000000000},
+ { 0x00000000136bac95,0x0088cb193efb76eea,0x00000000a31489c6,0x001ad647cf18d1334,0x0000000000000000,0x00890000000000000,0x0000000000000000,0x001ad800000000000},
+ { 0x000000000000602c,0x03b5853bfe7671cf5,0x0000000009bee33f,0x0059732389ad6c465,0x0000000000000000,0x03b60000000000000,0x0000000000000000,0x00598000000000000},
+ { 0x00000000233180c8,0x000eb973715328947,0x00000007e76f5b7a,0x000153b5127d6a5dd,0x0000000000000000,0x000ebc00000000000,0x0000000000000000,0x00015400000000000},
+ { 0x000000000000b358,0x01ff196667661ae2f,0x000000000637dcd0,0x0000000026e970b2d,0x0000000000000000,0x01ff8000000000000,0x0000000006000000,0x0000000026f000000},
+ { 0x0000000000000001,0x00009872fd187ed56,0x000000000000000b,0x000000000000007fe,0x0000000000000000,0x00009880000000000,0x000000000000000b,0x000000000000007fe},
+ { 0x0000000000000015,0x000000004edcf45d9,0x00000000000001ee,0x00000000000000300,0x0000000000000000,0x000000004ee000000,0x00000000000001ee,0x00000000000000300},
+ { 0x0000000000000001,0x00000000000163aa6,0x0000000000000001,0x00000000000000052,0x0000000000000000,0x00000000000164000,0x0000000000000001,0x00000000000000052},
+ { 0x000000000000009b,0x05c513976fe526e1a,0x00000000d3b220f8,0x04ddf31b57b327853,0x0000000000000000,0x05c60000000000000,0x0000000000000000,0x04de0000000000000},
+ { 0x000000000000000a,0x000007d98b508fb6d,0x0000004511151a2c,0x000000056fb1193e1,0x0000000000000000,0x000007da000000000,0x0000004510000000,0x00000005700000000},
+ { 0x0000000000001256,0x0000b430ae551ae6e,0x0000007a6177ff25,0x0000002c38c69d59a,0x0000000000000000,0x0000b440000000000,0x0000007a00000000,0x0000002c400000000},
+ { 0x0000000000000005,0x000000e6e41d020ad,0x0000000000000007,0x0000000000397200f,0x0000000000000000,0x000000e7000000000,0x0000000000000000,0x00000000003980000},
+ { 0x000000000000061e,0x000020a1c38be41d3,0x00000000000028b2,0x000000000e7e651d5,0x0000000000000000,0x000020b0000000000,0x0000000000000000,0x000000000e8000000},
+ { 0x0000000000000eb7,0x00000345e673e1794,0x000000000020db0b,0x0000000000e3888b9,0x0000000000000000,0x00000346000000000,0x0000000000200000,0x0000000000e3c0000},
+ { 0x0000000008717a1a,0x0000000a3cdb91e0f,0x000000001fdb5e94,0x0000000942937eb2c,0x0000000000000000,0x0000000a400000000,0x0000000000000000,0x00000009440000000},
+ { 0x0000000000000473,0x0000000249892616c,0x000000000006150f,0x00000000000f0bc2e,0x0000000000000000,0x000000024a0000000,0x0000000000060000,0x00000000000f0c000},
+ { 0x000000000000002d,0x0001b70cba14bd784,0x000000000000203b,0x0000000000026b53e,0x0000000000000000,0x0001b780000000000,0x0000000000002000,0x0000000000026c000},
+ { 0x0000000000000017,0x000090b0ed009eed9,0x000000000000003e,0x0000000016ae1c5bf,0x0000000000000000,0x000090c0000000000,0x0000000000000000,0x0000000016b000000},
+ { 0x00000000077e66ac,0x01a74f1d3fb794232,0x000000007573f78d,0x00179eb1ca6a5ee4d,0x0000000000000000,0x01a78000000000000,0x0000000000000000,0x0017a000000000000},
+ { 0x0000000000000003,0x00000000475edb7f4,0x000000000000000c,0x0000000000000001c,0x0000000000000000,0x00000000476000000,0x000000000000000c,0x0000000000000001c},
+ { 0x0000000000003b8f,0x00a3059bb3e3d4408,0x00001c4e021c098f,0x00000654f6fa22949,0x0000000000000000,0x00a34000000000000,0x00001c4000000000,0x00000656000000000},
+ { 0x000000aa18dd64e3,0x05a34821f37a4b6b4,0x034452bd58a05ccf,0x016e0ed7c64fd11c4,0x0000000000000000,0x05a40000000000000,0x0340000000000000,0x016e8000000000000},
+ { 0x0000000005df8e64,0x00034d9ae2226a9de,0x000000000c7f34f3,0x0000000017cd58f66,0x0000000000000000,0x00034e00000000000,0x000000000c000000,0x0000000017d000000},
+ { 0x0000000000000000,0x001147a2d812b26fa,0x000000008d67b145,0x0000000058478ef8a,0x0000000000000000,0x00114800000000000,0x000000008c000000,0x00000000586000000},
+ { 0x00000000000eee8d,0x0000007220dbf24b6,0x0000000316b78a5e,0x000000125582c8b65,0x0000000000000000,0x00000072400000000,0x0000000300000000,0x00000012580000000},
+ { 0x00000000000e0216,0x02e5fd7c5e07ec098,0x0000000005880358,0x000b3d78138897b63,0x0000000000000000,0x02e60000000000000,0x0000000000000000,0x000b4000000000000},
+ { 0x0000000000000002,0x003eff806c802531a,0x000000000015320e,0x0000002fdf84e4f19,0x0000000000000000,0x003f0000000000000,0x0000000000000000,0x0000002fe00000000},
+ { 0x000000000000045d,0x0000037ffd836e535,0x0000000000010fd9,0x0000000000fefd64c,0x0000000000000000,0x00000380000000000,0x0000000000000000,0x0000000000ff00000},
+ { 0x000000000000003b,0x000000d63f90e7883,0x00000000000ec021,0x00000000016ce49f1,0x0000000000000000,0x000000d6400000000,0x0000000000080000,0x00000000016d00000},
+ { 0x0000000000000005,0x00d417fae265ef67e,0x0000000068b9fcfa,0x000000027f6db1447,0x0000000000000000,0x00d44000000000000,0x0000000060000000,0x00000002800000000},
+ { 0x00000000000116a7,0x000000021317da9d9,0x0000000000627a3f,0x00000000013f404ba,0x0000000000000000,0x00000002140000000,0x0000000000600000,0x00000000013f80000},
+ { 0x000000000013c67a,0x000000b25d3de48fd,0x000000b89bf002f8,0x00000022da80b7f71,0x0000000000000000,0x000000b2800000000,0x000000b880000000,0x00000022e00000000},
+ { 0x0000000000000006,0x009bd6dfeba797b11,0x000000000000000f,0x0007eaeace1fd04a7,0x0000000000000000,0x009c0000000000000,0x0000000000000000,0x0007ec00000000000},
+ { 0x0000000000000095,0x0087959cbe7ec171d,0x0000000005582f80,0x000000000132f3617,0x0000000000000000,0x0087c000000000000,0x0000000005580000,0x00000000013300000},
+ { 0x000000000003e08d,0x00000000170356ca5,0x000000000013d86f,0x00000000000450091,0x0000000000000000,0x00000000170800000,0x000000000013d000,0x00000000000451000},
+ { 0x0000000000000059,0x00000f99ddf502796,0x00000000000002a4,0x00000070921763e66,0x0000000000000000,0x00000f9c000000000,0x0000000000000000,0x00000070a00000000},
+ { 0x00000000000002c9,0x000f8378697706e78,0x0000000000037dbc,0x00007b55ad93ea51c,0x0000000000000000,0x000f8400000000000,0x0000000000000000,0x00007b60000000000},
+ { 0x000000000ffa3e69,0x0053dd04a9578956e,0x00003c8d984229af,0x00000769409ba7967,0x0000000000000000,0x0053e000000000000,0x00003c8000000000,0x0000076a000000000},
+ { 0x0000000000001e17,0x0000a23a55c2b4f2d,0x00002dd0e612f6cb,0x000020b92e33105e3,0x0000000000000000,0x0000a240000000000,0x00002d8000000000,0x000020c0000000000},
+ { 0x0000001ea1206628,0x00018c76049d8d7ba,0x000000361d4618e2,0x0000000528bb3ee93,0x0000000000000000,0x00018c80000000000,0x0000003618000000,0x00000005290000000},
+ { 0x0000000000000062,0x00000dcc7a7d58967,0x0000000fc960e9a7,0x000000068824b15d5,0x0000000000000000,0x00000dd0000000000,0x0000000fc0000000,0x000000068a0000000},
+ { 0x00000000001c7537,0x00005660026a633a2,0x000000014dd3036e,0x00000b2270ff47a17,0x0000000000000000,0x00005680000000000,0x0000000000000000,0x00000b24000000000},
+ { 0x000000000000003b,0x044333bf1ba6f1fa7,0x00000050aa9da00a,0x002ec26cb2a83d206,0x0000000000000000,0x04440000000000000,0x0000000000000000,0x002ed000000000000},
+ { 0x000000001e20428d,0x0002e1aa6b88b99c3,0x000000003dc71dcc,0x000022f270a36c8a4,0x0000000000000000,0x0002e200000000000,0x0000000000000000,0x00002300000000000},
+ { 0x0000000000000110,0x0000013d4becd92f0,0x00000000000405af,0x0000006a13a92eb37,0x0000000000000000,0x0000013d800000000,0x0000000000000000,0x0000006a200000000},
+ { 0x0000000000000018,0x02fd8fd508ea75881,0x000ddcfdc2430830,0x00986558bc4384183,0x0000000000000000,0x02fe0000000000000,0x000c000000000000,0x00988000000000000},
+ { 0x00000000000059be,0x0000336cc04763896,0x000001127ccdea44,0x000000f0df23fd914,0x0000000000000000,0x00003370000000000,0x0000011000000000,0x000000f1000000000},
+ { 0x0000000000000010,0x0000000000000542d,0x000000000000063a,0x0000000000000198b,0x0000000000000000,0x00000000000005440,0x0000000000000638,0x00000000000001990},
+ { 0x0000000000000007,0x00000bac33914c380,0x00000000085d0b6b,0x00000000ddce9f429,0x0000000000000000,0x00000bb0000000000,0x0000000008000000,0x00000000de0000000},
+ { 0x0007222cbe4e0d0a,0x002ccc47d5263b8df,0x003890075482798e,0x0003fbc0529a9e50f,0x0007000000000000,0x002cd000000000000,0x0038900000000000,0x0003fbe0000000000},
+ { 0x000000000000343f,0x00000000d844dfe9c,0x0000000013d89993,0x00000000090e8a53e,0x0000000000000000,0x00000000d88000000,0x0000000013c00000,0x00000000091000000},
+ { 0x0000000000000d0b,0x00000ca52a69d4feb,0x0000000000688310,0x0000000000b013792,0x0000000000000000,0x00000ca8000000000,0x0000000000680000,0x0000000000b040000},
+ { 0x0000000000001057,0x01cd403f7a42c912a,0x0000000000096cfc,0x0000001aac16d86f0,0x0000000000000000,0x01cd8000000000000,0x0000000000000000,0x0000001ab00000000},
+ { 0x00000000005ffaa8,0x0000b2f726b701681,0x000000394854be17,0x0000001b9989b7600,0x0000000000000000,0x0000b300000000000,0x0000003900000000,0x0000001ba00000000},
+ { 0x000000000000376c,0x007ec660ee0ee86d2,0x000000048409cb14,0x0000742b53856f201,0x0000000000000000,0x007ee000000000000,0x0000000000000000,0x00007440000000000},
+ { 0x00000000000057d8,0x000003ceb3d4500dd,0x00000010e40f2988,0x0000000153e7c6e00,0x0000000000000000,0x000003cf000000000,0x00000010e4000000,0x00000001540000000},
+ { 0x0000000000001115,0x000738d9730ae331e,0x00000028b31a12ff,0x0000127bf3bced4dc,0x0000000000000000,0x00073a00000000000,0x0000000000000000,0x00001280000000000},
+ { 0x000000003f129ea3,0x010818ec9c670984a,0x000000029d85676d,0x000a74ccffa4900b7,0x0000000000000000,0x01088000000000000,0x0000000000000000,0x000a7800000000000},
+ { 0x000000000000000d,0x00e4d2b4d0b712196,0x00000000000000a6,0x000000001e807e872,0x0000000000000000,0x00e50000000000000,0x0000000000000000,0x000000001e8800000},
+ { 0x0000000000000005,0x000000000b516fc8c,0x00000000000fa16d,0x00000000002a655c3,0x0000000000000000,0x000000000b5400000,0x00000000000f0000,0x00000000002a70000},
+ { 0x0000000000000000,0x000000b33df5083b6,0x0000000000000695,0x00000000000160415,0x0000000000000000,0x000000b3400000000,0x0000000000000000,0x00000000000160800},
+ { 0x000000000017c506,0x0000ba9e7056c92a5,0x0000000000ca00fa,0x00004c3d842544b8d,0x0000000000000000,0x0000bac0000000000,0x0000000000000000,0x00004c40000000000},
+ { 0x0000000000000001,0x00008c485fda03734,0x0000000000000017,0x0000000000000004c,0x0000000000000000,0x00008c80000000000,0x0000000000000017,0x0000000000000004c},
+ { 0x000000001cbf2b87,0x005b8b3c35d4f7193,0x0000001737a52bb5,0x0000000850ff2e0d4,0x0000000000000000,0x005ba000000000000,0x0000001720000000,0x00000008520000000},
+ { 0x0000000000000000,0x0000a499e59d60b2b,0x0000000000002e4d,0x00002be0785eba959,0x0000000000000000,0x0000a4c0000000000,0x0000000000000000,0x00002bf0000000000},
+ { 0x00000000001486cc,0x011d4215e6d3565c7,0x00001e2184739901,0x0035f7bcf3a1c9a15,0x0000000000000000,0x011d8000000000000,0x0000000000000000,0x00360000000000000},
+ { 0x0000000000000028,0x007b214fb7dfc03c6,0x0000000000000247,0x000000000000d1c8b,0x0000000000000000,0x007b4000000000000,0x0000000000000000,0x000000000000d2000},
+ { 0x000000000000033f,0x01dfb4d21b6cee177,0x0000000000000488,0x001e49c9b666ec770,0x0000000000000000,0x01e00000000000000,0x0000000000000000,0x001e5000000000000},
+ { 0x00000000000000cf,0x00004abd362c0ed64,0x0000000002a385d7,0x000000d28b322c0d4,0x0000000000000000,0x00004ac0000000000,0x0000000000000000,0x000000d2c00000000},
+ { 0x00000009e5264353,0x0003acb3b3a8ac400,0x000001127080a93a,0x0000017cd13958664,0x0000000000000000,0x0003ad00000000000,0x0000011000000000,0x0000017d000000000},
+ { 0x0000000000000001,0x00000000000000a78,0x0000000000000002,0x00000000000000015,0x0000000000000001,0x00000000000000a78,0x0000000000000002,0x00000000000000015},
+ { 0x000000000000006a,0x0037bf098dd29ae01,0x0000000000007d03,0x0009b53f0b2fc3d0b,0x0000000000000000,0x0037c000000000000,0x0000000000000000,0x0009b800000000000},
+ { 0x0000000000006579,0x00000cdfd4f314a23,0x0000006abbf6a61f,0x0000008116ff44f45,0x0000000000000000,0x00000ce0000000000,0x0000006a00000000,0x00000081200000000},
+ { 0x00000000000000b9,0x00000000197585c18,0x00000000000029f4,0x0000000017a7fc462,0x0000000000000000,0x00000000197800000,0x0000000000000000,0x0000000017a800000},
+ { 0x0000000000019e3c,0x000000a462bc562fd,0x000000000e7838ae,0x0000000000fb52fe2,0x0000000000000000,0x000000a4800000000,0x000000000e780000,0x0000000000fb58000},
+ { 0x0000000000000003,0x000003933c43310ec,0x000000000000000f,0x000000000000eb63b,0x0000000000000000,0x00000394000000000,0x0000000000000000,0x000000000000eb800},
+ { 0x000000de2769503f,0x0003c6cedb5e1ec14,0x000000ffd1b82c9b,0x000022a033f45fafa,0x0000000000000000,0x0003c700000000000,0x0000000000000000,0x000022b0000000000},
+ { 0x0000000000000006,0x019b36c9fecc282ba,0x0000000123d15ed3,0x000f5a9c84155a175,0x0000000000000000,0x019b8000000000000,0x0000000000000000,0x000f5c00000000000},
+ { 0x00000000003575e1,0x00088d345ea37ca89,0x00000000020a74d6,0x00000000fa6a0f787,0x0000000000000000,0x00089000000000000,0x0000000000000000,0x00000000fa8000000},
+ { 0x0000000000115215,0x03dc9298fb6dc1ccc,0x0000000895fcd0f3,0x0000002272b51930c,0x0000000000000000,0x03dd0000000000000,0x0000000800000000,0x00000022800000000},
+ { 0x0000000000003a77,0x00071c6cf9b061dc4,0x0000000000135733,0x0000000de8b8c2eb9,0x0000000000000000,0x00071e00000000000,0x0000000000000000,0x0000000dec0000000},
+ { 0x0000000000000004,0x00000001335eef66c,0x0000000000000031,0x00000000000000105,0x0000000000000000,0x00000001338000000,0x0000000000000031,0x00000000000000105},
+ { 0x0000000019fd99e6,0x0f87762798b7fa64d,0x0009b61a50287df3,0x05cf946c2ff17d3cb,0x0000000000000000,0x0f880000000000000,0x0000000000000000,0x05d00000000000000},
+ { 0x0000000000000004,0x00000000bbe0908fe,0x0000000000038afa,0x00000000000225d32,0x0000000000000000,0x00000000bc0000000,0x0000000000038800,0x00000000000226000},
+ { 0x00000000001ae005,0x045bbd530dfa0fc20,0x000000000391e414,0x000032daff32baeb9,0x0000000000000000,0x045c0000000000000,0x0000000000000000,0x000032e0000000000},
+ { 0x0000000000000d30,0x00000003c7a6b4725,0x000000000016d2ca,0x000000002ae64343c,0x0000000000000000,0x00000003c80000000,0x0000000000000000,0x000000002af000000},
+ { 0x000000000232851e,0x0000086b24a74d7a7,0x00000000f22fdcdb,0x0000010c26e47aa91,0x0000000000000000,0x0000086c000000000,0x0000000000000000,0x0000010c800000000},
+ { 0x000000000000001a,0x00001abf2f111498b,0x0000002282111391,0x00000052898857688,0x0000000000000000,0x00001ac0000000000,0x0000002200000000,0x00000052a00000000},
+ { 0x0000000000035cc2,0x0006b042e07b30acd,0x00000000e9877063,0x00000041831d9c03f,0x0000000000000000,0x0006b200000000000,0x0000000000000000,0x00000041a00000000},
+ { 0x0000000000105179,0x00000178907e92676,0x00000000a800cea2,0x000000001dbdfc360,0x0000000000000000,0x00000179000000000,0x00000000a8000000,0x000000001dc000000},
+ { 0x00000000001c49d3,0x0000004ecc18ad681,0x0000000000668bb4,0x0000000030d58f7f6,0x0000000000000000,0x0000004ee00000000,0x0000000000000000,0x0000000030e000000},
+ { 0x0000000000000015,0x00000000002b7e66f,0x0000000000018df2,0x0000000000282c0ff,0x0000000000000000,0x00000000002b80000,0x0000000000010000,0x00000000002830000},
+ { 0x0000000000212e75,0x000268f8e1019d289,0x0000000000ee79be,0x00000830299786591,0x0000000000000000,0x00026900000000000,0x0000000000000000,0x00000834000000000},
+ { 0x0000000007e8ff31,0x00000001fd364ad6d,0x0000000044b298fb,0x00000000047c60ea4,0x0000000000000000,0x00000001fd8000000,0x0000000044b20000,0x00000000047c70000},
+ { 0x000000000003e2b3,0x00008094bee889ca8,0x0000000e9d70dc2b,0x00000bdbd0673b00e,0x0000000000000000,0x000080c0000000000,0x0000000000000000,0x00000bdc000000000},
+ { 0x0000000000000004,0x0000000000000004e,0x0000000000000015,0x0000000000000004e,0x0000000000000004,0x0000000000000004e,0x0000000000000015,0x0000000000000004e},
+ { 0x0000000000001aea,0x00000023ff9dd205b,0x00000000083ec1b4,0x00000000011a5a879,0x0000000000000000,0x00000024000000000,0x00000000083c0000,0x00000000011a80000},
+ { 0x00000000000000bf,0x00000323197d3c3e0,0x000000000aaacf37,0x000000000123e72c4,0x0000000000000000,0x00000324000000000,0x000000000aaa0000,0x00000000012400000},
+ { 0x000000000792ef51,0x0144680b1821f5ad8,0x0000008f499ff98e,0x00001c941feaa18e1,0x0000000000000000,0x01448000000000000,0x0000008000000000,0x00001c98000000000},
+ { 0x000000000000026e,0x00000000000017584,0x00000000000002e5,0x0000000000000c46d,0x0000000000000200,0x00000000000017600,0x00000000000002c0,0x0000000000000c480},
+ { 0x00000000000000c4,0x0178641d9079ac7e6,0x0000001787740ca6,0x0000005a8a258a13c,0x0000000000000000,0x01788000000000000,0x0000001600000000,0x0000005aa00000000},
+ { 0x000000001ab60b5d,0x02c71a3e6709f1ee5,0x00000000b872edc4,0x00000241614793729,0x0000000000000000,0x02c80000000000000,0x0000000000000000,0x00000242000000000},
+ { 0x000000000000003c,0x000000000000cb86e,0x0000000000001f4b,0x000000000000272c7,0x0000000000000000,0x000000000000cbc00,0x0000000000001f00,0x00000000000027300},
+ { 0x0000001f947d2192,0x00003f9d84b4909af,0x0000002ff42fefc1,0x00000015cc47ea903,0x0000000000000000,0x00003fa0000000000,0x0000002f80000000,0x00000015d00000000},
+ { 0x0000000000000007,0x00000003443121e11,0x00000000000a6ffa,0x00000000181df7843,0x0000000000000000,0x00000003450000000,0x0000000000000000,0x00000000182000000},
+ { 0x0000004ecc984dff,0x0009df5becb98acec,0x00050152072dc89f,0x00019feebd4850f33,0x0000000000000000,0x0009e000000000000,0x0005000000000000,0x0001a000000000000},
+ { 0x000000000001ce15,0x0000000024fc771f2,0x000000000011e304,0x0000000006dfd62bf,0x0000000000000000,0x00000000250000000,0x0000000000000000,0x0000000006e000000},
+ { 0x0000000000000002,0x0000644bc9845f0ed,0x00000000000ff50f,0x000000c0ecbed2793,0x0000000000000000,0x00006460000000000,0x0000000000000000,0x000000c1000000000},
+ { 0x00000000016d8c7b,0x000075e6aef421bd9,0x0000000003446526,0x0000000000cd0a5b1,0x0000000000000000,0x00007600000000000,0x0000000003440000,0x0000000000cd40000},
+ { 0x00000000000000a5,0x0000000036e8bcff5,0x0000000000166988,0x00000000021550f91,0x0000000000000000,0x0000000036f000000,0x0000000000100000,0x00000000021600000},
+ { 0x0000000000000003,0x00189ff944758a617,0x000000000d60a89f,0x000000004ee931e13,0x0000000000000000,0x0018a000000000000,0x000000000c000000,0x000000004f0000000},
+ { 0x0000000000000083,0x01299f303a2bc0d8a,0x0000000003ecdbb8,0x00000003fc511d2cf,0x0000000000000000,0x012a0000000000000,0x0000000000000000,0x00000003fd0000000},
+ { 0x00000000009ad0c6,0x0000021616c8acb4d,0x00000000e4a04451,0x0000007c7bca78d16,0x0000000000000000,0x00000217000000000,0x0000000000000000,0x0000007c800000000},
+ { 0x0000000000000000,0x003ac02f96f089d21,0x000000000072b12b,0x000000019bdf9d484,0x0000000000000000,0x003ad000000000000,0x0000000000000000,0x000000019c0000000},
+ { 0x000000000000000c,0x000038832b3d07519,0x0000000003e4d961,0x00000000ef855b621,0x0000000000000000,0x00003890000000000,0x0000000000000000,0x00000000efc000000},
+ { 0x0000000000000003,0x00e77dd4eaa13c0e5,0x000000000004d477,0x00061d0ab8b3122b5,0x0000000000000000,0x00e78000000000000,0x0000000000000000,0x00061e00000000000},
+ { 0x00000000000000a5,0x000000001cebb0614,0x00000000014cf795,0x00000000003be6499,0x0000000000000000,0x000000001cf000000,0x00000000014c0000,0x00000000003bf0000},
+ { 0x00000001d67c77d6,0x001e5cf2ec6d6bd8d,0x0000000815203833,0x0000079285fa07768,0x0000000000000000,0x001e6000000000000,0x0000000000000000,0x00000794000000000},
+ { 0x00000000304ac97c,0x081b4da30ae730d4d,0x0001363f7d0276b1,0x0000c05ce2507c414,0x0000000000000000,0x081c0000000000000,0x0001340000000000,0x0000c080000000000},
+ { 0x0000000000000003,0x0000000439718e809,0x000000000000032a,0x00000000009aad405,0x0000000000000000,0x000000043a0000000,0x0000000000000000,0x00000000009ac0000},
+ { 0x0000000000000009,0x00000000021573526,0x0000000000000384,0x00000000002c765fc,0x0000000000000000,0x00000000021600000,0x0000000000000000,0x00000000002c80000},
+ { 0x000000000000a386,0x0000000bc5e33f774,0x0000000008284560,0x0000000002f36cafd,0x0000000000000000,0x0000000bc80000000,0x0000000008200000,0x0000000002f400000},
+ { 0x0000000000000002,0x000000000002d46ad,0x000000000006fba4,0x0000000000019da97,0x0000000000000000,0x000000000002d5000,0x000000000006f800,0x0000000000019e000},
+ { 0x000000687edb8795,0x0f7a51e2703d9f4a5,0x00000bce053b4bbd,0x0ea035e50be6b28fd,0x0000000000000000,0x0f7c0000000000000,0x0000000000000000,0x0ea40000000000000},
+ { 0x000007962b09b27e,0x002f6b854b515797b,0x0007892cff99430b,0x0005fb66869f24329,0x0000000000000000,0x002f7000000000000,0x0007800000000000,0x0005fc00000000000},
+ { 0x00000000001bc4b2,0x00246ab4afc50c432,0x0000000028fa628e,0x0000000003621f280,0x0000000000000000,0x00247000000000000,0x0000000028f80000,0x00000000036240000},
+ { 0x000000000000001d,0x0e0b483c58619e27e,0x0000000000000094,0x00000000000406059,0x0000000000000000,0x0e0c0000000000000,0x0000000000000000,0x00000000000408000},
+ { 0x0000000000000053,0x016eaca8a2878eb65,0x0000000000006b2e,0x000000003a0832b82,0x0000000000000000,0x016f0000000000000,0x0000000000000000,0x000000003a1000000},
+ { 0x00000000de1ea8d6,0x00db1484e11a9cf68,0x000704109eea90f7,0x0001e2d693e2de259,0x0000000000000000,0x00db4000000000000,0x0007000000000000,0x0001e300000000000},
+ { 0x0000000000000002,0x083121bdf3f322087,0x0000000000000003,0x00000000000000013,0x0000000000000000,0x08340000000000000,0x0000000000000003,0x00000000000000013},
+ { 0x0000000000000003,0x01367827e1aa7acaa,0x000000000000000a,0x0000000000000837a,0x0000000000000000,0x01368000000000000,0x0000000000000000,0x00000000000008380},
+ { 0x00000000000002b4,0x0002c73174394cd45,0x0000000000000cce,0x0000000000005622a,0x0000000000000000,0x0002c800000000000,0x0000000000000c00,0x00000000000056400},
+ { 0x0000000000199b4b,0x00001b1843ea4095f,0x000000000cbb4c76,0x0000000001f066543,0x0000000000000000,0x00001b20000000000,0x000000000cb80000,0x0000000001f080000},
+ { 0x0000000000000018,0x01246f899ce149e12,0x00000000026e3ac2,0x000000000097f2e95,0x0000000000000000,0x01248000000000000,0x00000000026e0000,0x00000000009800000},
+ { 0x0000000000000037,0x000000000d5ec5655,0x000000000001f98e,0x00000000000323618,0x0000000000000000,0x000000000d6000000,0x000000000001f000,0x00000000000324000},
+ { 0x0000000000000122,0x0000000abfa8f7f2b,0x0000000031fc1e91,0x00000000074e01992,0x0000000000000000,0x0000000ac00000000,0x0000000031e00000,0x00000000075000000},
+ { 0x00000000000134bc,0x08eb2c183fb68ea62,0x00000000000cd1bf,0x00000000004c1b67f,0x0000000000000000,0x08ec0000000000000,0x00000000000c0000,0x00000000004c20000},
+ { 0x0000000000000980,0x000000001341e0060,0x00000000000028b0,0x00000000000193029,0x0000000000000000,0x00000000134800000,0x0000000000002800,0x00000000000193800},
+ { 0x0000000000000002,0x0005c910e07340c08,0x0000000000000305,0x000000cb08cf4ba80,0x0000000000000000,0x0005ca00000000000,0x0000000000000000,0x000000cb400000000},
+ { 0x000000eb38ead660,0x0000032b91f29c790,0x00000330a0a19979,0x000000bb8259f990b,0x000000e000000000,0x0000032c000000000,0x0000033000000000,0x000000bbc00000000},
+ { 0x000000000000471e,0x000617eda53266d50,0x000000000019f8da,0x00000000000def095,0x0000000000000000,0x00061800000000000,0x000000000019c000,0x00000000000df0000},
+ { 0x0000000000000022,0x0008183707e3c47db,0x00000000004a47b9,0x000001c70537c8f19,0x0000000000000000,0x00081c00000000000,0x0000000000000000,0x000001c7800000000},
+ { 0x000000000000e18d,0x004827a69cc5931ce,0x0000000000014b44,0x0000000000020e232,0x0000000000000000,0x00484000000000000,0x0000000000014800,0x0000000000020e800},
+ { 0x000000000000897d,0x000195ac0888f8e3a,0x0000000000fcfb87,0x000000000029d4384,0x0000000000000000,0x00019600000000000,0x0000000000fc8000,0x000000000029d8000},
+ { 0x0000000000000003,0x0170844f0e3dfcf9f,0x00000000000000b3,0x0000647cb53e8247a,0x0000000000000000,0x01710000000000000,0x0000000000000000,0x00006480000000000},
+ { 0x0000000000000409,0x002a5721507b78628,0x00000000000bc6b2,0x00000003581779e22,0x0000000000000000,0x002a6000000000000,0x0000000000000000,0x00000003590000000},
+ { 0x0000000000000001,0x011c78cc30015f919,0x000000000043432c,0x0000000000862d931,0x0000000000000000,0x011c8000000000000,0x0000000000400000,0x00000000008640000},
+ { 0x00000000003b8d99,0x00005a2248ec94b4c,0x00000000f999d4a0,0x000000002151f97c4,0x0000000000000000,0x00005a40000000000,0x00000000f9800000,0x00000000215800000},
+ { 0x00000000000136d5,0x01442c9ef3b161dcc,0x000000000e805991,0x0000000071a77bb42,0x0000000000000000,0x01448000000000000,0x000000000e000000,0x0000000071c000000},
+ { 0x0000000000005926,0x0000000b7c74b229f,0x00000000007e4a7c,0x000000000060f1395,0x0000000000000000,0x0000000b800000000,0x00000000007e0000,0x00000000006100000},
+ { 0x0000000000000001,0x001c71b5e0e92c774,0x000000000000000a,0x0000000000067c22e,0x0000000000000000,0x001c7800000000000,0x0000000000000000,0x0000000000067e000},
+ { 0x000000000000003d,0x00c2a67fa995943b3,0x0000000000000ccb,0x0000000000d84aed5,0x0000000000000000,0x00c2c000000000000,0x0000000000000000,0x0000000000d880000},
+ { 0x000000000000727a,0x0322d276b35c0865d,0x000000000024039c,0x000000598f3e6559f,0x0000000000000000,0x03230000000000000,0x0000000000000000,0x00000059a00000000},
+ { 0x000000000aa8a4e3,0x00006d05cd25e0a1e,0x000000003e5a4b9b,0x0000000d2bb81eda5,0x0000000000000000,0x00006d20000000000,0x0000000000000000,0x0000000d2c0000000},
+ { 0x0000000069d412ce,0x0000001cd03ebdd1b,0x00000000fe917154,0x000000091deeecb5b,0x0000000000000000,0x0000001cd80000000,0x00000000c0000000,0x00000009200000000},
+ { 0x0000000000000001,0x000000002ecff4e99,0x0000000000000002,0x0000000027f1eb932,0x0000000000000000,0x000000002ed000000,0x0000000000000000,0x00000000280000000},
+ { 0x000000000000000b,0x001d9c595c6259203,0x00000000003c58cb,0x00004821cee505f21,0x0000000000000000,0x001da000000000000,0x0000000000000000,0x00004840000000000},
+ { 0x0000000000000079,0x034166938a90560bf,0x000000001fc7ab4a,0x0000000a8481ffbf7,0x0000000000000000,0x03420000000000000,0x0000000000000000,0x0000000a880000000},
+ { 0x0000000000000019,0x00014a4894726b6f2,0x00000005577f826a,0x000062800bb1c1186,0x0000000000000000,0x00014a80000000000,0x0000000000000000,0x000062a0000000000},
+ { 0x0000000000000017,0x00000f6009b840b36,0x00000000000e7ddf,0x000000002c3a9fa20,0x0000000000000000,0x00000f64000000000,0x0000000000000000,0x000000002c4000000},
+ { 0x000000000000000b,0x0000001f7bc4821df,0x00000002f9ad3701,0x00000000e72e217cf,0x0000000000000000,0x0000001f800000000,0x00000002f8000000,0x00000000e74000000},
+ { 0x0000000000000021,0x011836d53129b1e26,0x000921a7a7373b75,0x0074562d449fc45f5,0x0000000000000000,0x01188000000000000,0x0008000000000000,0x00746000000000000},
+ { 0x000000000080939e,0x000f0188c49e2ed36,0x000000003e0532b2,0x0000000c30abec054,0x0000000000000000,0x000f0400000000000,0x0000000000000000,0x0000000c340000000},
+ { 0x000000001bc3222a,0x00083809a9b53401e,0x000000033453eb0f,0x000000c6d5c4002f7,0x0000000000000000,0x00083c00000000000,0x0000000000000000,0x000000c7000000000},
+ { 0x0000000000000185,0x0000006a1e130e955,0x00000000000020e4,0x0000000000655b941,0x0000000000000000,0x0000006a200000000,0x0000000000000000,0x00000000006560000},
+ { 0x0000000000000130,0x02fb63841d2a83bdc,0x002d95c9eed1c9f6,0x00cc813779b7b44a7,0x0000000000000000,0x02fc0000000000000,0x002c000000000000,0x00ccc000000000000},
+ { 0x0000000000007871,0x05e3338086d4a8834,0x00000000002585e0,0x00001f8485a10a030,0x0000000000000000,0x05e40000000000000,0x0000000000000000,0x00001f88000000000},
+ { 0x00000000000001c4,0x0000000000376252d,0x0000000000006604,0x00000000001fe4dbb,0x0000000000000000,0x00000000003770000,0x0000000000000000,0x00000000001fe8000},
+ { 0x0000000000000004,0x00010ec99f76b2d73,0x0000004ad6b475a3,0x000001d5e53c97ec2,0x0000000000000000,0x00010f00000000000,0x0000004800000000,0x000001d6000000000},
+ { 0x0000000000000009,0x0019d32738e8e407c,0x0000000000000096,0x000000019ab28c19c,0x0000000000000000,0x0019d800000000000,0x0000000000000000,0x000000019b0000000},
+ { 0x000000000000724b,0x000000074291a122e,0x000000000002f112,0x00000000002bb4709,0x0000000000000000,0x00000007440000000,0x0000000000020000,0x00000000002bc0000},
+ { 0x000000000126fc56,0x0000045c889bb0aa5,0x00000000264bb431,0x00000001b0e60372d,0x0000000000000000,0x0000045e000000000,0x0000000020000000,0x00000001b10000000},
+ { 0x0000000000002ff7,0x024ace23b55ab5006,0x00000022e28e3838,0x00013538183c83580,0x0000000000000000,0x024b0000000000000,0x0000000000000000,0x00013580000000000},
+ { 0x0000000000000003,0x01cd0d15e05474ba8,0x0000000003fba197,0x0000000000787c68e,0x0000000000000000,0x01cd8000000000000,0x0000000003fb0000,0x00000000007880000},
+ { 0x000000000001eb9d,0x000040a047c94fe5e,0x000000004d53812f,0x00000005c554cdd21,0x0000000000000000,0x000040c0000000000,0x0000000040000000,0x00000005c60000000},
+ { 0x0000000000000003,0x00001753303b5cfab,0x000000000273ff24,0x000000004ac3bccd8,0x0000000000000000,0x00001758000000000,0x0000000002000000,0x000000004ae000000},
+ { 0x000000000000001f,0x000001a0ed289cdcf,0x000000005f7bfe5c,0x00000007016212018,0x0000000000000000,0x000001a1000000000,0x0000000040000000,0x00000007020000000},
+ { 0x0000000000005cb4,0x0037131497a696442,0x0000000000334d01,0x00000001687d24d21,0x0000000000000000,0x00372000000000000,0x0000000000000000,0x00000001688000000},
+ { 0x00000000d03599b8,0x00057df32948658ce,0x00000089f4948f42,0x00003e612240f049a,0x0000000000000000,0x00057e00000000000,0x0000000000000000,0x00003e70000000000},
+ { 0x0000000000000001,0x001e33efc548ac1c9,0x00000000d8925aa5,0x0000c2be8515213c0,0x0000000000000000,0x001e3800000000000,0x0000000000000000,0x0000c2c0000000000},
+ { 0x0000000000000003,0x000002cb2ccb591df,0x00000000001627fe,0x00000063b8997a550,0x0000000000000000,0x000002cc000000000,0x0000000000000000,0x00000063c00000000},
+ { 0x0000000000269f2f,0x00028ff56b6ce6715,0x0000000001b6e034,0x000000139b3ad021d,0x0000000000000000,0x00029000000000000,0x0000000000000000,0x00000013a00000000},
+ { 0x000000000000163e,0x000186610783ca209,0x000000000000b727,0x0000000000006cd42,0x0000000000000000,0x00018680000000000,0x000000000000b600,0x0000000000006ce00},
+ { 0x0000000000000047,0x04e6b783e8e524b3b,0x00000000002ec420,0x00000000022b04456,0x0000000000000000,0x04e80000000000000,0x0000000000200000,0x00000000022c00000},
+ { 0x000000f9c3efa1ef,0x000039b160160b5a5,0x000003edc82823e6,0x000005c4c77d518e5,0x0000000000000000,0x000039c0000000000,0x000003e000000000,0x000005c6000000000},
+ { 0x0000000000000037,0x00000387ff02828b6,0x0000000000007495,0x0000000004902b548,0x0000000000000000,0x00000388000000000,0x0000000000000000,0x00000000049200000},
+ { 0x000000000000000e,0x001eb856609974f1c,0x000a85d6ee998ac2,0x0017a087b0c0c03ff,0x0000000000000000,0x001ec000000000000,0x000a800000000000,0x0017a800000000000},
+ { 0x0000000000000004,0x03c27c2b4d5a19e8f,0x0000000000000018,0x00079b1b7fe98d9a3,0x0000000000000000,0x03c30000000000000,0x0000000000000000,0x00079c00000000000},
+ { 0x0000000000000003,0x0000000216dd40d5c,0x0000000000000c0a,0x000000001859b17ef,0x0000000000000000,0x00000002170000000,0x0000000000000000,0x00000000186000000},
+ { 0x00000000000001da,0x000fe041426078e36,0x00000000027cafe4,0x0000075715422075f,0x0000000000000000,0x000fe400000000000,0x0000000000000000,0x00000758000000000},
+ { 0x000000000002f641,0x00e3621bc47262d5d,0x00000000009c794e,0x0000002dc5233881d,0x0000000000000000,0x00e38000000000000,0x0000000000000000,0x0000002dd00000000},
+ { 0x0000000000000419,0x03ab5b5faf9957ab0,0x000002a06b713f69,0x0003622eb0126a0e0,0x0000000000000000,0x03ac0000000000000,0x0000000000000000,0x00036300000000000},
+ { 0x000000002464d00c,0x002291d639f076388,0x00000000e1b7955c,0x0000010e47cbb882b,0x0000000000000000,0x0022a000000000000,0x0000000000000000,0x0000010e800000000},
+ { 0x000000000000000e,0x000009b8abe79d9c5,0x0000000000000300,0x00000000e4ff60d8a,0x0000000000000000,0x000009bc000000000,0x0000000000000000,0x00000000e50000000},
+ { 0x0000000012ce8b07,0x0cb06ff04fc8ea6d1,0x00000004aec726ba,0x0000000094dafd465,0x0000000000000000,0x0cb40000000000000,0x00000004ae000000,0x0000000094e000000},
+ { 0x0000000000002a2a,0x06bd673b84a1d7c84,0x00000000037faebb,0x0000000405f5ab72f,0x0000000000000000,0x06be0000000000000,0x0000000000000000,0x00000004060000000},
+ { 0x00000000000001ae,0x0000025b4ac51b152,0x00000001613dbb98,0x000001bdb34c539ba,0x0000000000000000,0x0000025c000000000,0x0000000000000000,0x000001be000000000},
+ { 0x000000000002a81a,0x00000000b668e5494,0x000000000014f195,0x00000000010688c12,0x0000000000000000,0x00000000b68000000,0x0000000000100000,0x00000000010700000},
+ { 0x000000000e925496,0x016a36313a7ce1acb,0x00000093312c5ecd,0x000001d9674ff6c5c,0x0000000000000000,0x016a8000000000000,0x0000009000000000,0x000001d9800000000},
+ { 0x0000000000000006,0x00000146dd76014ab,0x0000000000000098,0x000000000000000ba,0x0000000000000000,0x00000147000000000,0x0000000000000098,0x000000000000000ba},
+ { 0x0000000000000040,0x000000658d1f6dada,0x00000000000001a5,0x00000000002cdac7c,0x0000000000000000,0x00000065a00000000,0x0000000000000000,0x00000000002ce0000},
+ { 0x0000000000002215,0x0131b6da7df742c34,0x0000000000005765,0x0000000000017445b,0x0000000000000000,0x01320000000000000,0x0000000000005000,0x00000000000174800},
+ { 0x0000000000303d64,0x003b6185a66dfc9d1,0x00000000270cd0b2,0x00000042e160a9037,0x0000000000000000,0x003b7000000000000,0x0000000000000000,0x00000043000000000},
+ { 0x0000000000b7464e,0x00cb26f9a67d2c0cc,0x001e7b74a6d6f066,0x00b685986e1a097a1,0x0000000000000000,0x00cb4000000000000,0x001c000000000000,0x00b6c000000000000},
+ { 0x000000000000008c,0x000a7d9d43caea9b5,0x0000000e8cbbf4ea,0x0003a4ad0d4b8c859,0x0000000000000000,0x000a8000000000000,0x0000000000000000,0x0003a500000000000},
+ { 0x0000000000000023,0x00066a9b27ef70964,0x000000001ccf337d,0x000214a5f4ad668a1,0x0000000000000000,0x00066c00000000000,0x0000000000000000,0x00021500000000000},
+ { 0x00000000011e21e6,0x00e839193dffade21,0x0000004ff3cdd890,0x000002d1f30a1fa3c,0x0000000000000000,0x00e84000000000000,0x0000004000000000,0x000002d2000000000},
+ { 0x00000000000001b9,0x0007d47c1c5ac9bcd,0x000000000009f5c0,0x0000000da1a2a1391,0x0000000000000000,0x0007d600000000000,0x0000000000000000,0x0000000da40000000},
+ { 0x00000000000a260f,0x00f4b670a5e49bd0a,0x0000000001e8db32,0x000014811ad8a30a9,0x0000000000000000,0x00f4c000000000000,0x0000000000000000,0x00001488000000000},
+ { 0x0000000000000002,0x000000000000b5604,0x0000000000000003,0x00000000000004fe5,0x0000000000000000,0x000000000000b5800,0x0000000000000000,0x00000000000005000},
+ { 0x0000000000517164,0x00c64b94258adb470,0x00001ecf0b875ec0,0x00653f46dabc17421,0x0000000000000000,0x00c68000000000000,0x0000000000000000,0x00654000000000000},
+ { 0x000000000000688b,0x0000cd44c27542985,0x000000000030f358,0x0000000112835fbcb,0x0000000000000000,0x0000cd80000000000,0x0000000000000000,0x00000001130000000},
+ { 0x0000000000000009,0x00877680fdce5f513,0x000000000000b81a,0x0000000000041c010,0x0000000000000000,0x00878000000000000,0x000000000000a000,0x0000000000041e000},
+ { 0x00000000000118d4,0x01ccf34800a5ca6ee,0x00002f38ae694a19,0x0013261153393cb64,0x0000000000000000,0x01cd0000000000000,0x0000000000000000,0x00132800000000000},
+ { 0x000000000035501b,0x000226cd311dffa96,0x00000014ee4b5574,0x00000b4ee86db3b33,0x0000000000000000,0x00022700000000000,0x0000000000000000,0x00000b50000000000},
+ { 0x0000000000000045,0x00169862552f4f720,0x002672852c1ff2d7,0x0004bdca2c624cfe1,0x0000000000000000,0x0016a000000000000,0x0026700000000000,0x0004be00000000000},
+ { 0x000000000000000b,0x00388db3ff7f56e0b,0x00000000001fc149,0x0000d7939030d00e9,0x0000000000000000,0x00389000000000000,0x0000000000000000,0x0000d7c0000000000},
+ { 0x000000000000001c,0x00004d9796991b124,0x000000000171c3e8,0x000000000e6179a9f,0x0000000000000000,0x00004da0000000000,0x0000000001400000,0x000000000e6400000},
+ { 0x0000000070ddce11,0x0759fbd53a1fcbe21,0x000000008e0a37dc,0x000000c7bf9752702,0x0000000000000000,0x075a0000000000000,0x0000000000000000,0x000000c7c00000000},
+ { 0x0000000000000107,0x00000000037124436,0x000000000000bd19,0x000000000000f23d6,0x0000000000000000,0x00000000037200000,0x000000000000bc00,0x000000000000f2400},
+ { 0x000000000000000f,0x050d9c77793a6b2a7,0x00000000000c808a,0x0000007305b3268ff,0x0000000000000000,0x050e0000000000000,0x0000000000000000,0x00000073200000000},
+ { 0x0000000000000528,0x00000000186cd4a44,0x0000000000073c12,0x0000000000db51a5d,0x0000000000000000,0x00000000187000000,0x0000000000040000,0x0000000000db80000},
+ { 0x000000000000357d,0x0001e5d4834137f9b,0x00000000008e867b,0x0000079231c07c089,0x0000000000000000,0x0001e600000000000,0x0000000000000000,0x00000794000000000},
+ { 0x0000000000001b65,0x006dc356f4458cfda,0x000000003d7d6472,0x00000000b2ea67c42,0x0000000000000000,0x006de000000000000,0x000000003c000000,0x00000000b30000000},
+ { 0x0000000000000376,0x00675c242d0ad35b1,0x00000003186e1c50,0x00000000586358944,0x0000000000000000,0x00676000000000000,0x0000000318000000,0x00000000587000000},
+ { 0x0000000000000030,0x00000015e9abce01f,0x0000000000041cce,0x000000000000650d5,0x0000000000000000,0x00000015f00000000,0x0000000000041c00,0x00000000000065100},
+ { 0x0000000000000032,0x0000aa618638c022e,0x0000000000041f5f,0x00000000000bc4c22,0x0000000000000000,0x0000aa80000000000,0x0000000000040000,0x00000000000bc8000},
+ { 0x00000000018bc624,0x001ee7b675a25801c,0x0001a53afd2b4bfc,0x00001f51c827953bc,0x0000000000000000,0x001ee800000000000,0x0001a52000000000,0x00001f52000000000},
+ { 0x0000000000000000,0x00000c52dcbc33e33,0x0000000e4df34530,0x0000000e98f36d8cb,0x0000000000000000,0x00000c54000000000,0x0000000e40000000,0x0000000e9c0000000},
+ { 0x0000000000506cc9,0x000000192892f0c0a,0x00000000072a4f19,0x0000000126e6647d0,0x0000000000000000,0x00000019300000000,0x0000000000000000,0x00000001270000000},
+ { 0x0000000001df6f93,0x0356fc98242b89cd7,0x0000007b5959d9f4,0x0000006a24b70a9ed,0x0000000000000000,0x03570000000000000,0x0000007a00000000,0x0000006a400000000},
+ { 0x0000000000000019,0x03c0747565aad766a,0x0000002984a10c14,0x000000ca638b1e347,0x0000000000000000,0x03c10000000000000,0x0000002800000000,0x000000ca800000000},
+ { 0x000000001b043cbf,0x001f6398a07059f65,0x000000177a3066c2,0x000051b1ae3a42d3e,0x0000000000000000,0x001f6800000000000,0x0000000000000000,0x000051c0000000000},
+ { 0x0000000000000021,0x06294689f040618b8,0x000000004e8df9a0,0x005a662593752bfea,0x0000000000000000,0x062a0000000000000,0x0000000000000000,0x005a8000000000000},
+ { 0x0000000000000550,0x000002ef2519a9c7f,0x0000000000000e09,0x00000000000001786,0x0000000000000000,0x000002f0000000000,0x0000000000000e09,0x00000000000001786},
+ { 0x0000000000000afa,0x00000003f09e3fede,0x0000000000007623,0x000000001c7955498,0x0000000000000000,0x00000003f10000000,0x0000000000000000,0x000000001c8000000},
+ { 0x000000000000086e,0x00002a3728972a158,0x0000000000002949,0x00001977d29aaf4f5,0x0000000000000000,0x00002a40000000000,0x0000000000000000,0x00001978000000000},
+ { 0x000000000587b09c,0x0255999000e0f6268,0x00000000113fdd49,0x0000019354bac352b,0x0000000000000000,0x02560000000000000,0x0000000000000000,0x00000193800000000},
+ { 0x000000000000000a,0x0000125741ceb95f6,0x00000012b3947ec8,0x00000008eb1b6d134,0x0000000000000000,0x00001258000000000,0x00000012a0000000,0x00000008ec0000000},
+ { 0x000000034dd7e5c7,0x000035bd9222e0f1f,0x00006a955bb4af55,0x00003591bffb30f78,0x0000000000000000,0x000035c0000000000,0x00006a0000000000,0x000035a0000000000},
+ { 0x00000000000051a4,0x00000002029ad954e,0x000000000017bb89,0x00000000077a4d3fa,0x0000000000000000,0x00000002030000000,0x0000000000000000,0x00000000077c00000},
+ { 0x00000000000000e1,0x00000ed62a36e016b,0x0000000000006d9e,0x000001551d2906f9d,0x0000000000000000,0x00000ed8000000000,0x0000000000000000,0x00000155800000000},
+ { 0x000000000001fee7,0x00fb93787ad0e7f49,0x000000000241ed00,0x0000000000698b7ae,0x0000000000000000,0x00fbc000000000000,0x0000000002400000,0x000000000069a0000},
+ { 0x0000061d9369bfbe,0x038cb38f6d1edaf68,0x00d9574371359a37,0x006a2588ff76a33a4,0x0000000000000000,0x038d0000000000000,0x00d8000000000000,0x006a4000000000000},
+ { 0x000000000011280b,0x00000000096299c47,0x0000000001fd4bce,0x0000000000af18282,0x0000000000000000,0x00000000096400000,0x0000000001fc0000,0x0000000000af40000},
+ { 0x0000000000000009,0x01d7b222dca395273,0x00000000000035ba,0x000000000a05d0c52,0x0000000000000000,0x01d80000000000000,0x0000000000000000,0x000000000a0800000},
+ { 0x0000000000000097,0x00e720c3503345057,0x000000f3446a07d9,0x00000013adfe3467e,0x0000000000000000,0x00e74000000000000,0x000000f340000000,0x00000013ae0000000},
+ { 0x0000000000000004,0x00000164204c6362c,0x00000000003f3bbd,0x000000051b4e02e4f,0x0000000000000000,0x00000164800000000,0x0000000000000000,0x000000051c0000000},
+ { 0x00000000000fe5c0,0x05d3e780ed2dc5763,0x000001068846ed89,0x00006b185023309aa,0x0000000000000000,0x05d40000000000000,0x0000000000000000,0x00006b20000000000},
+ { 0x00000001e4097aed,0x0145eef4ea257a184,0x000000e0bf088d2b,0x00001202a8603511c,0x0000000000000000,0x01460000000000000,0x0000008000000000,0x00001208000000000},
+ { 0x000000000169821c,0x000003beb797a885e,0x000000000fa13630,0x000000000a8f6ea6a,0x0000000000000000,0x000003bf000000000,0x000000000f800000,0x000000000a9000000},
+ { 0x000000004435d2f0,0x01d026f41a51dcfa2,0x00001523123e75bb,0x011fbf7af39d7d4d4,0x0000000000000000,0x01d08000000000000,0x0000000000000000,0x01200000000000000},
+ { 0x0000000000000089,0x000003c33f2c06c9d,0x00000035338c61b4,0x0000001bd02e5a8e1,0x0000000000000000,0x000003c4000000000,0x0000003500000000,0x0000001bd80000000},
+ { 0x0000000000000149,0x0030120b4ac7bf00a,0x000000000919d924,0x000006ab09b4ce288,0x0000000000000000,0x00302000000000000,0x0000000000000000,0x000006ac000000000},
+ { 0x0000000000001ed6,0x00002d43e6f810c7a,0x000000007e427d2b,0x0000102b3ba86ddc9,0x0000000000000000,0x00002d50000000000,0x0000000000000000,0x00001030000000000},
+ { 0x000000000000e386,0x000022e0eaaf26023,0x000000000706e84a,0x000000005f356ee06,0x0000000000000000,0x000022f0000000000,0x0000000006000000,0x000000005f4000000},
+ { 0x0000000000000076,0x0000c83a3acda07a8,0x00000004e9f2fe03,0x0000015ce8a7d9cae,0x0000000000000000,0x0000c840000000000,0x0000000000000000,0x0000015d000000000},
+ { 0x0000000000087324,0x075c81d04987002c1,0x000000135dd180ab,0x000034c3c19be10d1,0x0000000000000000,0x075e0000000000000,0x0000000000000000,0x000034d0000000000},
+ { 0x0000000000000003,0x0005eb5c94a296593,0x000000000002868a,0x00000000a9f6d5d08,0x0000000000000000,0x0005ec00000000000,0x0000000000000000,0x00000000aa0000000},
+ { 0x0000000000017565,0x01a20eeab01ce0d9d,0x0000004cf2d5dc1b,0x00000068a6b23d91d,0x0000000000000000,0x01a28000000000000,0x0000004c00000000,0x00000068c00000000},
+ { 0x0000000000001396,0x0000000c8a6620353,0x00000000000209e4,0x00000000149a33eb2,0x0000000000000000,0x0000000c8c0000000,0x0000000000000000,0x0000000014a000000},
+ { 0x00000000000002ef,0x000000031744a9303,0x000000000000b950,0x00000000000143bb0,0x0000000000000000,0x00000003180000000,0x000000000000b800,0x00000000000144000},
+ { 0x0000000000000000,0x0000002527f3516cf,0x0000000000000007,0x0000000000002f3cc,0x0000000000000000,0x00000025300000000,0x0000000000000000,0x0000000000002f400},
+ { 0x0000000000000142,0x0000017ec8ac1b00a,0x0000000000020ad8,0x0000000d580e32404,0x0000000000000000,0x0000017f000000000,0x0000000000000000,0x0000000d5c0000000},
+ { 0x0000000000020a10,0x00000000002a9c511,0x00000000003f81a8,0x0000000000076723a,0x0000000000020000,0x00000000002aa0000,0x00000000003f8000,0x00000000000768000},
+ { 0x0000000000000b28,0x00025d18dcba0914a,0x000000000000be95,0x00000012fa5e2f878,0x0000000000000000,0x00025e00000000000,0x0000000000000000,0x00000013000000000},
+ { 0x000000000000a7e5,0x0000009c5ba101799,0x00000002b9637e37,0x0000000228c3896a4,0x0000000000000000,0x0000009c800000000,0x00000002b8000000,0x00000002290000000},
+ { 0x0000000000000008,0x00f1c48e10a7b4093,0x000000000000005e,0x0004d3866df02d905,0x0000000000000000,0x00f20000000000000,0x0000000000000000,0x0004d400000000000},
+ { 0x000000000000129e,0x003d4a989c414fee8,0x00000000000164d1,0x000000000216e7f8b,0x0000000000000000,0x003d5000000000000,0x0000000000000000,0x00000000021700000},
+ { 0x0000000000000159,0x00000007a2a11a4b9,0x00000000007853ec,0x0000000554d9a1ba1,0x0000000000000000,0x00000007a40000000,0x0000000000000000,0x00000005560000000},
+ { 0x0000000000000000,0x001ad974cf31f5c01,0x000000000276490e,0x0000034d36ea9a1ec,0x0000000000000000,0x001ae000000000000,0x0000000000000000,0x0000034e000000000},
+ { 0x0000000000000066,0x0000000bcd1565fdb,0x0000000000000910,0x000000000013efd1d,0x0000000000000000,0x0000000bd00000000,0x0000000000000000,0x000000000013f0000},
+ { 0x0000000010b3561a,0x000000398ab32c536,0x000000010014ebf8,0x0000000792973c01c,0x0000000000000000,0x00000039900000000,0x0000000100000000,0x00000007940000000},
+ { 0x0000000000000529,0x0592d5cc575811904,0x00000001a801d24d,0x004aad50f3263f1b0,0x0000000000000000,0x05940000000000000,0x0000000000000000,0x004ac000000000000},
+ { 0x000000000000003d,0x000000a25286de29d,0x0000000009322e0a,0x00000000608d8e936,0x0000000000000000,0x000000a2800000000,0x0000000008000000,0x0000000060a000000},
+ { 0x0000000000fc9c46,0x0000005ced4bd1ea0,0x000000ba3d97c870,0x000000352c3dc93b4,0x0000000000000000,0x0000005d000000000,0x000000ba00000000,0x00000035300000000},
+ { 0x0000000000000001,0x000000003eb04e388,0x0000000000000055,0x000000000000000cb,0x0000000000000000,0x000000003ec000000,0x0000000000000055,0x000000000000000cb},
+ { 0x0000000000000004,0x00000028e7a3c9245,0x0000000000037e9a,0x000000004a3dd3e4c,0x0000000000000000,0x00000028f00000000,0x0000000000000000,0x000000004a4000000},
+ { 0x00000000000000b6,0x0dd2b480c6be2f6ab,0x000000047b882ef4,0x00014ec389a113bf1,0x0000000000000000,0x0dd40000000000000,0x0000000000000000,0x00014f00000000000},
+ { 0x0000000000000006,0x0062e7302f438c9f0,0x00000000000000ed,0x00000000000afc7a9,0x0000000000000000,0x00630000000000000,0x0000000000000000,0x00000000000b00000},
+ { 0x000000000008d29a,0x0002f7769bb13537b,0x000000000182a156,0x000003eee9ba5004c,0x0000000000000000,0x0002f800000000000,0x0000000000000000,0x000003ef000000000},
+ { 0x00000000002aae08,0x0129ed00b893d51bf,0x0000001daf9e0355,0x000009df72ebf7a1c,0x0000000000000000,0x012a0000000000000,0x0000000000000000,0x000009e0000000000},
+ { 0x0000000000000300,0x000000022486572c3,0x0000000000e39586,0x000000009e6b64261,0x0000000000000000,0x00000002250000000,0x0000000000000000,0x000000009e8000000},
+ { 0x0000000000000003,0x009329c3b66000e5c,0x000000000008838c,0x0008c0c8c1ffa89fa,0x0000000000000000,0x00934000000000000,0x0000000000000000,0x0008c400000000000},
+ { 0x000000000000006f,0x002430936eef85d30,0x00000000000001e0,0x0000000000003155e,0x0000000000000000,0x00244000000000000,0x0000000000000100,0x00000000000031600},
+ { 0x0000000000134694,0x002683e0118052e45,0x000000181a698789,0x001ae0682060a74f8,0x0000000000000000,0x00269000000000000,0x0000000000000000,0x001ae800000000000},
+ { 0x00000004ac784663,0x00057c5b7b2c21eed,0x0000001c0d53b764,0x00000444aa2380438,0x0000000000000000,0x00057e00000000000,0x0000000000000000,0x00000446000000000},
+ { 0x00000000023b8c80,0x000fa434712d6da7b,0x0000000016b490c8,0x00000000e44e96d05,0x0000000000000000,0x000fa800000000000,0x0000000014000000,0x00000000e48000000},
+ { 0x0000000000000019,0x00000000000063a30,0x0000000000000e54,0x00000000000001cfa,0x0000000000000000,0x00000000000063c00,0x0000000000000e54,0x00000000000001cfa},
+ { 0x000000000000d6f7,0x00000073188313a27,0x00000000067d7249,0x0000000002c4dc948,0x0000000000000000,0x00000073200000000,0x0000000006700000,0x0000000002c500000},
+ { 0x0000000000000002,0x0063e190510091c9d,0x000000000000009f,0x00000000e8ed9f426,0x0000000000000000,0x00640000000000000,0x0000000000000000,0x00000000e90000000},
+ { 0x000000000000006c,0x006b878c4eb0a93df,0x000000000db4bfe8,0x0000039c9ec3a05b0,0x0000000000000000,0x006ba000000000000,0x0000000000000000,0x0000039d000000000},
+ { 0x00000000000001b6,0x000000b7d588f8cdb,0x0000000000000431,0x00000000074922dc7,0x0000000000000000,0x000000b8000000000,0x0000000000000000,0x00000000074a00000},
+ { 0x000000000000052f,0x000002ec04243d42d,0x00000000001705d4,0x000000122667a757f,0x0000000000000000,0x000002ed000000000,0x0000000000000000,0x00000012280000000},
+ { 0x000000000000d66e,0x0002725af0b75dd8b,0x00000000048bcf27,0x000000000093802e6,0x0000000000000000,0x00027300000000000,0x00000000048a0000,0x000000000093a0000},
+ { 0x00000000000160d2,0x04d7a8caf4a012dc3,0x0000000000418d73,0x000001803dc292b8d,0x0000000000000000,0x04d80000000000000,0x0000000000000000,0x00000180800000000},
+ { 0x0000000000724210,0x002d6fd0142687289,0x000003201a70d820,0x0000a8822e75de08b,0x0000000000000000,0x002d7000000000000,0x0000000000000000,0x0000a8c0000000000},
+ { 0x000000d276f1da4e,0x00d61e5dc6fa53ac2,0x00018a3e8eca703d,0x006d3d1303d26c2d0,0x0000000000000000,0x00d64000000000000,0x0000000000000000,0x006d4000000000000},
+ { 0x000000610069ae45,0x0031b393559edb76d,0x000614bdf4d45908,0x000437f47cf7cb179,0x0000000000000000,0x0031c000000000000,0x0006100000000000,0x00043800000000000},
+ { 0x0000000000000016,0x00b04904b5180fd38,0x0000000006cabd99,0x00000da35ff40ab92,0x0000000000000000,0x00b08000000000000,0x0000000000000000,0x00000da4000000000},
+ { 0x00000000000046f9,0x0032bfdda803a4426,0x000000000074227b,0x00000097899050032,0x0000000000000000,0x0032c000000000000,0x0000000000000000,0x00000097c00000000},
+ { 0x0000cc1eb4c3919e,0x0134c76817bd08742,0x00039a3c58f58efd,0x00006cc4f78410385,0x0000000000000000,0x01350000000000000,0x00039a0000000000,0x00006cd0000000000},
+ { 0x0000000000000003,0x00000000000943abf,0x0000000000000009,0x0000000000000011f,0x0000000000000000,0x00000000000944000,0x0000000000000009,0x0000000000000011f},
+ { 0x000000000000000a,0x0000023de58a68fae,0x000000000000003c,0x000000000001f634d,0x0000000000000000,0x0000023e000000000,0x0000000000000000,0x000000000001f6800},
+ { 0x00000000000090a0,0x00025efa444ce0459,0x00000003ebef41cd,0x0000001e865f60286,0x0000000000000000,0x00025f00000000000,0x0000000380000000,0x0000001e880000000},
+ { 0x0000000000000003,0x0281c8cbca63f0914,0x000000000000000d,0x0000000000015ce7a,0x0000000000000000,0x02820000000000000,0x0000000000000000,0x0000000000015d000},
+ { 0x0000000000000015,0x0000002d5700e755d,0x0000000016954e1a,0x00000022c77d67594,0x0000000000000000,0x0000002d600000000,0x0000000000000000,0x00000022d00000000},
+ { 0x00000000000000e2,0x00000000008362412,0x0000000000006af2,0x0000000000003729e,0x0000000000000000,0x00000000008380000,0x0000000000006a00,0x00000000000037300},
+ { 0x0000000000000302,0x00053fc3fbab4ed29,0x0000000000166574,0x0000000b136f43381,0x0000000000000000,0x00054000000000000,0x0000000000000000,0x0000000b140000000},
+ { 0x00000004737a1617,0x02bfa72642c7f35bc,0x0000557da15247df,0x002447f8a188bbad7,0x0000000000000000,0x02c00000000000000,0x0000000000000000,0x00245000000000000},
+ { 0x000000000000003e,0x001594e75fd416619,0x0000001dd46ec257,0x000001fe60a718499,0x0000000000000000,0x00159800000000000,0x0000001800000000,0x000001fe800000000},
+ { 0x0000000000000212,0x000a08c6f7d7ea80e,0x000000000056e744,0x000000000e5096af1,0x0000000000000000,0x000a0c00000000000,0x0000000000400000,0x000000000e5400000},
+ { 0x000000000001318a,0x008a7c62e75c328e3,0x00000000002407fb,0x0000c730ae6de31cb,0x0000000000000000,0x008a8000000000000,0x0000000000000000,0x0000c740000000000},
+ { 0x000000000007de7f,0x00462e67a93f03cbe,0x0000000000093ac0,0x000000001c3fa994c,0x0000000000000000,0x00464000000000000,0x0000000000000000,0x000000001c4000000},
+ { 0x0000000000000062,0x006aed184295e0cf6,0x00000000000001f5,0x00000000000004b7c,0x0000000000000000,0x006b0000000000000,0x00000000000001e0,0x00000000000004b80},
+ { 0x000000000265dc7e,0x000005e6f54cbf05f,0x0000000007dd69ba,0x000000a09721997a1,0x0000000000000000,0x000005e8000000000,0x0000000000000000,0x000000a0c00000000},
+ { 0x0000000000000098,0x0000000001ca2841d,0x0000000000000144,0x0000000000000b6b3,0x0000000000000000,0x0000000001ca80000,0x0000000000000140,0x0000000000000b6c0},
+ { 0x0000000000001ed9,0x00000003e47a0c6b8,0x000000000000c1e4,0x00000000030cbab47,0x0000000000000000,0x00000003e50000000,0x0000000000000000,0x00000000030d00000},
+ { 0x0000000000000004,0x00013183a743607e7,0x000000000001d973,0x00000000000759b4f,0x0000000000000000,0x00013200000000000,0x000000000001c000,0x0000000000075a000},
+ { 0x0000000000000007,0x00000088671764aef,0x00000000003435f3,0x000000000006f394d,0x0000000000000000,0x00000088800000000,0x0000000000343000,0x000000000006f4000},
+ { 0x000000000003174d,0x0e96272d0eff9b7b7,0x00000000007272a5,0x0000000e830ac4bc9,0x0000000000000000,0x0e980000000000000,0x0000000000000000,0x0000000e840000000},
+ { 0x0000000000000003,0x000027d7df085a927,0x0000000000000077,0x0000000000000c1de,0x0000000000000000,0x000027e0000000000,0x0000000000000040,0x0000000000000c200},
+ { 0x00000000000000f8,0x00000020e3a43ed50,0x000000000000da26,0x000000000fed5402e,0x0000000000000000,0x00000020f00000000,0x0000000000000000,0x000000000ff000000},
+ { 0x0000000000000003,0x001c163d10d5cc860,0x0000000000633839,0x0000000000069dd1a,0x0000000000000000,0x001c1800000000000,0x0000000000633800,0x0000000000069de00},
+ { 0x00000000000f5506,0x003c6b7a98a09073b,0x0000000001f46e1a,0x00000000f93264d47,0x0000000000000000,0x003c7000000000000,0x0000000000000000,0x00000000f94000000},
+ { 0x0000000000579bbd,0x00f7fc7076de697f6,0x00000000005dd713,0x00053b30405bc9c57,0x0000000000000000,0x00f80000000000000,0x0000000000000000,0x00053c00000000000},
+ { 0x0000005a579d4aeb,0x00403f6e2996c86f1,0x0001a5ff44d4d96b,0x0001cbd45125a17a6,0x0000000000000000,0x00404000000000000,0x0001a00000000000,0x0001cc00000000000},
+ { 0x00000000000026b6,0x000001b62909f1aa8,0x0000000000002cbe,0x00000000006af7abc,0x0000000000000000,0x000001b6800000000,0x0000000000000000,0x00000000006b00000},
+ { 0x00000000000009ea,0x0170112550e85b2fc,0x00000000001f3cea,0x00000000000701500,0x0000000000000000,0x01708000000000000,0x00000000001f2000,0x00000000000702000},
+ { 0x0000000000001795,0x008d30afeabf134e8,0x00000000000c83d6,0x005fa7cede0775d6a,0x0000000000000000,0x008d4000000000000,0x0000000000000000,0x005fc000000000000},
+ { 0x000000000000000e,0x02e234f06404a3707,0x000000000000395b,0x000048d250bf8ad28,0x0000000000000000,0x02e30000000000000,0x0000000000000000,0x000048e0000000000},
+ { 0x0000000000001054,0x0031e15e81d19bfd3,0x00000000001ec16d,0x0000000000048a8bd,0x0000000000000000,0x0031f000000000000,0x00000000001ec000,0x0000000000048b000},
+ { 0x0000000030b3e80d,0x07604e6051dbface8,0x0001600a81730413,0x0000ad12b4fe55ea4,0x0000000000000000,0x07620000000000000,0x0001600000000000,0x0000ad40000000000},
+ { 0x0000000000000784,0x0001617ec9ab27c7a,0x00000000058e2a9b,0x000000004733eb66b,0x0000000000000000,0x00016180000000000,0x0000000004000000,0x00000000474000000},
+ { 0x0000000000000409,0x0002b778debb16a28,0x000000000130b417,0x00000000003cde0d9,0x0000000000000000,0x0002b800000000000,0x0000000001300000,0x00000000003ce0000},
+ { 0x000000001bffb09f,0x000001de46c2b4765,0x00000000319edaa3,0x000000016d5170d2e,0x0000000000000000,0x000001de800000000,0x0000000030000000,0x000000016d8000000},
+ { 0x000000b3fd38bd79,0x00375d9f9f98cf16a,0x00017ae70ad15ef4,0x00018a6eedc8bb185,0x0000000000000000,0x00376000000000000,0x0001780000000000,0x00018a80000000000},
+ { 0x0000000000000744,0x000318ad1fbb1cfdb,0x000591a0dbb099cd,0x00016377d493f5cf5,0x0000000000000000,0x00031900000000000,0x0005900000000000,0x00016380000000000},
+ { 0x0000000000000004,0x00073ef49329e7f6b,0x0000e4ceca93076d,0x0000140af76e5af17,0x0000000000000000,0x00074000000000000,0x0000e4c000000000,0x0000140c000000000},
+ { 0x0000000000074f79,0x00000026576944078,0x00000000000de597,0x00000021f438d4cf9,0x0000000000000000,0x00000026600000000,0x0000000000000000,0x00000022000000000},
+ { 0x0000000000000033,0x03772ba889a781839,0x000000000000004f,0x00000000f224eec3b,0x0000000000000000,0x03780000000000000,0x0000000000000000,0x00000000f24000000},
+ { 0x000000000000003e,0x031148738e0c0a159,0x00000000006767e0,0x00dfb2dda6229b491,0x0000000000000000,0x03120000000000000,0x0000000000000000,0x00dfc000000000000},
+ { 0x0000000000000001,0x000b804ac02be1e12,0x000000000000123c,0x00000000037226add,0x0000000000000000,0x000b8400000000000,0x0000000000000000,0x00000000037300000},
+ { 0x000000000004caed,0x0000000008a6fd533,0x000000000472a3b3,0x000000000102b57a3,0x0000000000000000,0x0000000008a800000,0x0000000004700000,0x000000000102c0000},
+ { 0x0000000000000000,0x000036d50dddab3f7,0x0000000000000042,0x00000029b906e378d,0x0000000000000000,0x000036e0000000000,0x0000000000000000,0x00000029c00000000},
+ { 0x0000000000000000,0x0000000167b477571,0x00000000000000f4,0x000000000000c6bc6,0x0000000000000000,0x00000001680000000,0x0000000000000000,0x000000000000c6c00},
+ { 0x0000000000000005,0x04497c3b0190ffebc,0x0000000000010169,0x000000000001ffb0c,0x0000000000000000,0x044a0000000000000,0x0000000000010000,0x00000000000200000},
+ { 0x00000000007d08b8,0x000009c2513ac7a74,0x0000000007adf6f9,0x0000001f7ed731847,0x0000000000000000,0x000009c4000000000,0x0000000000000000,0x0000001f800000000},
+ { 0x0000000000006998,0x000057034373d96c4,0x000000000006ca2f,0x00000a2354ba9b167,0x0000000000000000,0x00005720000000000,0x0000000000000000,0x00000a24000000000},
+ { 0x0000000000000017,0x000e426cef0def707,0x000000000000004f,0x000c1197f70532a9d,0x0000000000000000,0x000e4400000000000,0x0000000000000000,0x000c1400000000000},
+ { 0x00000000031a4c8f,0x066525cb0da6a9990,0x00000000822680e2,0x0022fe8b9d664414b,0x0000000000000000,0x06660000000000000,0x0000000000000000,0x00230000000000000},
+ { 0x0000000000025284,0x00bad19997dbc9d4b,0x00000000ae4b5cba,0x0019aee6837f83ad0,0x0000000000000000,0x00bb0000000000000,0x0000000000000000,0x0019b000000000000},
+ { 0x0000000000012d7c,0x01cb0832cfa1af027,0x0000007090ea961d,0x0000003f5532ec3ff,0x0000000000000000,0x01cb8000000000000,0x0000007000000000,0x0000003f600000000},
+ { 0x000000000000046a,0x000ab0b4f2d2361b6,0x0000000000007c64,0x00000000b23037b69,0x0000000000000000,0x000ab400000000000,0x0000000000000000,0x00000000b24000000},
+ { 0x00000000000000a0,0x00000004a0a081ce3,0x0000000000000742,0x0000000000eb9212e,0x0000000000000000,0x00000004a20000000,0x0000000000000000,0x0000000000ebc0000},
+ { 0x0000000000000003,0x0ca97da415eae0a73,0x00000000fd0139fd,0x0000001bfde823532,0x0000000000000000,0x0cac0000000000000,0x0000000080000000,0x0000001c000000000},
+ { 0x00000000000001df,0x0000e1c674d6d8961,0x00000000000006cc,0x0000000004acd2d4c,0x0000000000000000,0x0000e200000000000,0x0000000000000000,0x0000000004ae00000},
+ { 0x000000000055b1f3,0x00761beb9895917e7,0x0000ee0ad1da98af,0x0006d978e10cbbe3a,0x0000000000000000,0x00762000000000000,0x0000e00000000000,0x0006da00000000000},
+ { 0x0000000000003fdf,0x025f377b9217231c3,0x0000000006848bbd,0x0006a04ba2c7c89f5,0x0000000000000000,0x02600000000000000,0x0000000000000000,0x0006a200000000000},
+ { 0x0000000000000023,0x000176655f23d040c,0x000001758fc2a4b1,0x0000016ee40091f08,0x0000000000000000,0x00017680000000000,0x0000017000000000,0x0000016f000000000},
+ { 0x0000184b0c804ec6,0x00001655b30a7497d,0x00001e9365d06350,0x000002226fdb0e57f,0x0000180000000000,0x00001658000000000,0x00001e9300000000,0x00000222700000000},
+ { 0x0000000000000013,0x000000000000ded21,0x0000000000000710,0x00000000000000798,0x0000000000000000,0x000000000000df000,0x0000000000000710,0x00000000000000798},
+ { 0x0000000c66ca9fa2,0x000a596a3e9dc0838,0x00000c5ae26f54d2,0x000001c57784da32b,0x0000000000000000,0x000a5c00000000000,0x00000c5800000000,0x000001c5800000000},
+ { 0x00000000000000fc,0x00000e09281f51ff2,0x000000000002a885,0x00000083b64b79960,0x0000000000000000,0x00000e0c000000000,0x0000000000000000,0x00000083c00000000},
+ { 0x0000000000000004,0x00836e933ad784303,0x0000000000016593,0x000000000dd4eb295,0x0000000000000000,0x00838000000000000,0x0000000000000000,0x000000000dd800000},
+ { 0x0000000000000154,0x0000000019058de0c,0x0000000000016e22,0x00000000004ebd777,0x0000000000000000,0x00000000190800000,0x0000000000000000,0x00000000004ec0000},
+ { 0x0000000000000015,0x0074ba6f80f0f1a60,0x0000000000776199,0x00000f33830355d05,0x0000000000000000,0x0074c000000000000,0x0000000000000000,0x00000f34000000000},
+ { 0x000000000392ab93,0x00003fe5770b9263b,0x000000000a635659,0x000000c4aacdd625d,0x0000000000000000,0x00003ff0000000000,0x0000000000000000,0x000000c4c00000000},
+ { 0x000000002a796046,0x00a03f21616e8dd3d,0x00000075fb1b9ec1,0x00000348d14f27993,0x0000000000000000,0x00a04000000000000,0x0000007000000000,0x00000349000000000},
+ { 0x00000000000000f1,0x00003049e312fcf6b,0x0000000007062343,0x000014c147d9b3f24,0x0000000000000000,0x00003050000000000,0x0000000000000000,0x000014c8000000000},
+ { 0x0000000000003a75,0x0000017aaf6c08dd2,0x000000000076a287,0x0000000000081abc2,0x0000000000000000,0x0000017b000000000,0x000000000076a000,0x0000000000081ac00},
+ { 0x000000000001d8dd,0x00438da9229d96b62,0x0000000028280259,0x000000018fb16e8fa,0x0000000000000000,0x0043a000000000000,0x0000000028000000,0x00000001900000000},
+ { 0x000000000000004c,0x000000053c4bbdf19,0x000000000028b247,0x0000000007fc6050c,0x0000000000000000,0x000000053e0000000,0x0000000000200000,0x0000000007fe00000},
+ { 0x0000000000000054,0x000000000002a3e32,0x00000000000038ae,0x0000000000016d84d,0x0000000000000000,0x000000000002a4000,0x0000000000003800,0x0000000000016e000},
+ { 0x000000000fc46ce3,0x0772e786b17fea72d,0x00001e91e1fadecc,0x000092e7cad0172f3,0x0000000000000000,0x07740000000000000,0x00001c0000000000,0x00009300000000000},
+ { 0x0000000000000001,0x000e389c9ba4e79f2,0x0000020085ab6f91,0x00013f81e26658c11,0x0000000000000000,0x000e3c00000000000,0x0000000000000000,0x00014000000000000},
+ { 0x0000000000000055,0x00580dd14d9e3be86,0x000000003a836d43,0x0000018ee7c04cde5,0x0000000000000000,0x00582000000000000,0x0000000000000000,0x0000018f000000000},
+ { 0x000000000000003e,0x0000a7cc1b7f5ab7b,0x0000000000423d2a,0x000000000074b2d23,0x0000000000000000,0x0000a800000000000,0x0000000000420000,0x000000000074c0000},
+ { 0x0000000000000001,0x0000225c527857fca,0x000000000000009a,0x0000000000000015d,0x0000000000000000,0x00002260000000000,0x000000000000009a,0x0000000000000015d},
+ { 0x0000000000000002,0x00019487b7ae4db5d,0x0000000000000089,0x000000000000e106c,0x0000000000000000,0x00019500000000000,0x0000000000000000,0x000000000000e1400},
+ { 0x0000000000001a0e,0x000000ba0a1b033ed,0x00000000000b2fa8,0x00000000002f18ca2,0x0000000000000000,0x000000ba400000000,0x00000000000b0000,0x00000000002f20000},
+ { 0x0000000000004fec,0x00010f7183a2e9b07,0x0000004a5ab92db7,0x0000000745d921b31,0x0000000000000000,0x00010f80000000000,0x0000004a50000000,0x00000007460000000},
+ { 0x00000000007db9c5,0x005874949a5246550,0x0000f8756d944d59,0x00246a3266252fa7f,0x0000000000000000,0x00588000000000000,0x0000000000000000,0x00247000000000000},
+ { 0x0000000000000b9f,0x003916699b1e187dd,0x000000004c31c3b6,0x000004e1e961abd06,0x0000000000000000,0x00392000000000000,0x0000000000000000,0x000004e2000000000},
+ { 0x0000000000000009,0x0000089d74e2bff6e,0x0000000000000031,0x000000000069b80da,0x0000000000000000,0x000008a0000000000,0x0000000000000000,0x000000000069c0000},
+ { 0x000000000000000c,0x0000b83a10e072cf3,0x00000000000000bc,0x0000000000009e283,0x0000000000000000,0x0000b840000000000,0x0000000000000000,0x0000000000009e400},
+ { 0x000000000000007e,0x0000006987a73f5b7,0x0000000000000b4f,0x00000004feb5e8a2b,0x0000000000000000,0x00000069a00000000,0x0000000000000000,0x00000005000000000},
+ { 0x00000000000008a3,0x020d8db62d8ac7051,0x000000f3816707fb,0x0036fff3ee25fe152,0x0000000000000000,0x020e0000000000000,0x0000000000000000,0x00370000000000000},
+ { 0x000000000002658c,0x000000000035b5dad,0x000000000032e0a2,0x000000000003618a3,0x0000000000020000,0x000000000035c0000,0x000000000032e000,0x00000000000361900},
+ { 0x000000000127683e,0x0000000003fe36d93,0x00000000064ab768,0x0000000002f836caa,0x0000000001200000,0x0000000003ff00000,0x0000000006400000,0x0000000002f900000},
+ { 0x0000000000000d5d,0x0192aea48bac9b64a,0x0000002b5876c536,0x00284c3a26f1204be,0x0000000000000000,0x01930000000000000,0x0000000000000000,0x00285000000000000},
+ { 0x000000000000003c,0x00003c0c267f814de,0x000000000019ff0f,0x000000036c602e89e,0x0000000000000000,0x00003c10000000000,0x0000000000000000,0x000000036d0000000},
+ { 0x0000000000000007,0x0029afa5b74261883,0x0000000000000009,0x00000000005ea2ce0,0x0000000000000000,0x0029b000000000000,0x0000000000000000,0x00000000005ec0000},
+ { 0x0000000000001b56,0x00000000050c02e76,0x0000000000010a42,0x000000000000e3b10,0x0000000000000000,0x00000000050e00000,0x0000000000010800,0x000000000000e3c00},
+ { 0x000000000008c56d,0x000fd66541dbd2477,0x00000000002207cc,0x000000006c3085cf0,0x0000000000000000,0x000fd800000000000,0x0000000000000000,0x000000006c4000000},
+ { 0x0000000000000001,0x00000000009dbb576,0x000000000000003c,0x000000000000004f6,0x0000000000000000,0x00000000009dc0000,0x000000000000003c,0x000000000000004f6},
+ { 0x0000000000000070,0x00000000000b1fb66,0x00000000000002b9,0x00000000000000c30,0x0000000000000000,0x00000000000b20000,0x00000000000002b9,0x00000000000000c30},
+ { 0x000000001767e555,0x00716eb40b2ac7b99,0x00000255cbbd6335,0x000013494ba025516,0x0000000000000000,0x00718000000000000,0x0000020000000000,0x00001350000000000},
+ { 0x0000000000000017,0x00000675b9bccf079,0x00000000000002cb,0x0000005266ab366c0,0x0000000000000000,0x00000676000000000,0x0000000000000000,0x00000052800000000},
+ { 0x0000000000000109,0x06bf27bd33c47e05d,0x0232f01e637e8c01,0x013f29ec53f261bbc,0x0000000000000000,0x06c00000000000000,0x0230000000000000,0x013f8000000000000},
+ { 0x0000000000000360,0x0c55a0a79faa2bf8b,0x0000000000015305,0x0000bf0df09f9e1e0,0x0000000000000000,0x0c580000000000000,0x0000000000000000,0x0000bf40000000000},
+ { 0x0000000000000194,0x0f2782449c865c402,0x0000000000000258,0x00000000000016f66,0x0000000000000000,0x0f280000000000000,0x0000000000000200,0x00000000000016f80},
+ { 0x000000000000085b,0x000000b6f47adbf94,0x00000000028a59f8,0x000000003094dfa51,0x0000000000000000,0x000000b7000000000,0x0000000002000000,0x0000000030a000000},
+ { 0x0000000000000000,0x08857168e899d0c90,0x0000000000000173,0x0000016c342e3eae8,0x0000000000000000,0x08880000000000000,0x0000000000000000,0x0000016c800000000},
+ { 0x00000000000677a9,0x000efbfda96ae5dd2,0x000000006be6054b,0x0000228ec0099d07a,0x0000000000000000,0x000efc00000000000,0x0000000000000000,0x00002290000000000},
+ { 0x000000000138dbd0,0x02b54192b8f70dc03,0x00000000df098c59,0x00000000343d78dd2,0x0000000000000000,0x02b60000000000000,0x00000000df000000,0x00000000344000000},
+ { 0x000000000ada7291,0x069630939f798d679,0x000001a508c4a6c6,0x0000678f5c4b49889,0x0000000000000000,0x06980000000000000,0x0000000000000000,0x000067a0000000000},
+ { 0x0000000000000018,0x064b5c3ef6d20d959,0x000000000000006e,0x00000000000031247,0x0000000000000000,0x064c0000000000000,0x0000000000000000,0x00000000000031300},
+ { 0x0000000000000064,0x000000b039ea1429f,0x00000000001e8680,0x00000000000eab671,0x0000000000000000,0x000000b0400000000,0x00000000001e8000,0x00000000000eac000},
+ { 0x000000000000020d,0x00007b6990d42a392,0x00000000000033d2,0x00000001e4472184e,0x0000000000000000,0x00007b80000000000,0x0000000000000000,0x00000001e48000000},
+ { 0x0000000000000006,0x00000345729b720bf,0x00000000d43bbfe5,0x000000c948b13efbd,0x0000000000000000,0x00000346000000000,0x0000000000000000,0x000000c9800000000},
+ { 0x0000000000000183,0x00e7c8b7b06ce1019,0x00000000000008f2,0x00000000000562ab5,0x0000000000000000,0x00e80000000000000,0x0000000000000000,0x00000000000564000},
+ { 0x000000000000002f,0x000000ee0b4d50014,0x00000000000004da,0x00000019183901ccc,0x0000000000000000,0x000000ee400000000,0x0000000000000000,0x00000019200000000},
+ { 0x00000000000dbf99,0x0000262515d0c58ec,0x000000011809a621,0x00000002a3f6229f6,0x0000000000000000,0x00002630000000000,0x0000000110000000,0x00000002a40000000},
+ { 0x0000000000000000,0x0000000b0a3ae4620,0x0000000000c52fd0,0x0000000553cf3f5ee,0x0000000000000000,0x0000000b0c0000000,0x0000000000000000,0x00000005540000000},
+ { 0x0000000000000013,0x00000000019f92d1b,0x000000000000037f,0x0000000000014e2d3,0x0000000000000000,0x0000000001a000000,0x0000000000000000,0x0000000000014e800},
+ { 0x0000000000000037,0x0001977962202a5eb,0x00000000000006b5,0x0000003808897072a,0x0000000000000000,0x00019780000000000,0x0000000000000000,0x00000038100000000},
+ { 0x000000000000001c,0x008e6a2209e4df433,0x0000000000000033,0x0000a4e4a87553f0b,0x0000000000000000,0x008e8000000000000,0x0000000000000000,0x0000a500000000000},
+ { 0x000000001de779fd,0x00000177305b72078,0x000000029247c4c2,0x0000000033f0974cf,0x0000000000000000,0x00000177800000000,0x0000000292400000,0x0000000033f400000},
+ { 0x0000000000001dee,0x0019efa978e31f3e5,0x00000003459169ea,0x000000407081e5868,0x0000000000000000,0x0019f000000000000,0x0000000200000000,0x00000040800000000},
+ { 0x000000000e8641cb,0x00cfc3b47962e1593,0x0000000037e3dc86,0x003f4b441283c28be,0x0000000000000000,0x00d00000000000000,0x0000000000000000,0x003f5000000000000},
+ { 0x0000000000000007,0x02864eee70cad542b,0x00000000000155e2,0x0000005dafc3e2cf7,0x0000000000000000,0x02870000000000000,0x0000000000000000,0x0000005dc00000000},
+ { 0x0000000003109c0a,0x0000007edb796cca3,0x00000001626b1d1a,0x0000001f5118a8037,0x0000000000000000,0x0000007ee00000000,0x0000000100000000,0x0000001f580000000},
+ { 0x0000000003b23386,0x00000903e8b1f9117,0x00000000b86245aa,0x0000000036c7e1eca,0x0000000000000000,0x00000904000000000,0x00000000b8000000,0x0000000036d000000},
+ { 0x000000000000013a,0x0096a384daaa38da7,0x00000000000013c8,0x00000ec8bca4da56c,0x0000000000000000,0x0096c000000000000,0x0000000000000000,0x00000ecc000000000},
+ { 0x0000000000000007,0x00000289c1da05dbb,0x000000000036990b,0x00000000349f680a1,0x0000000000000000,0x0000028a000000000,0x0000000000000000,0x0000000034a000000},
+ { 0x00000000000003e9,0x005208d0ab5bd9a77,0x00000f4fade15183,0x00051679f1299b982,0x0000000000000000,0x00522000000000000,0x0000000000000000,0x00051800000000000},
+ { 0x0000000000005048,0x000000000018bc179,0x0000000000006811,0x0000000000006dbde,0x0000000000000000,0x000000000018c0000,0x0000000000006800,0x0000000000006dc00},
+ { 0x00000000000000f1,0x00fed33d5168900fc,0x00000000000f5f60,0x0000006e31ad413f5,0x0000000000000000,0x00ff0000000000000,0x0000000000000000,0x0000006e400000000},
+ { 0x0000000000000001,0x000aeae5746b15da8,0x0000000000003f36,0x000000005ac749897,0x0000000000000000,0x000aec00000000000,0x0000000000000000,0x000000005ae000000},
+ { 0x000000000000069a,0x000000e92b95913f3,0x000000000003e84b,0x00000000035f6311e,0x0000000000000000,0x000000e9400000000,0x0000000000000000,0x00000000036000000},
+ { 0x0000000000000003,0x000001d0e98996918,0x0000000000396f41,0x00000000001bce057,0x0000000000000000,0x000001d1000000000,0x0000000000390000,0x00000000001bd0000},
+ { 0x00000000000016f1,0x0043a044ec17b6b79,0x000000000fe98972,0x001b1fbe48857a1f8,0x0000000000000000,0x0043c000000000000,0x0000000000000000,0x001b2000000000000},
+ { 0x0000000000703c8b,0x00015c5286a6f14d0,0x0000000018ebbc1c,0x000034632d0ab8564,0x0000000000000000,0x00015c80000000000,0x0000000000000000,0x00003470000000000},
+ { 0x00000000000000fc,0x014e16f1d85176338,0x000000000117eeb4,0x00098a68deb84f43b,0x0000000000000000,0x014e8000000000000,0x0000000000000000,0x00098c00000000000},
+ { 0x000000000006597c,0x00098b918adb8483e,0x0000000000730b7a,0x00003a4a0cd228bd4,0x0000000000000000,0x00098c00000000000,0x0000000000000000,0x00003a50000000000},
+ { 0x0000000000000199,0x0180d5c466a2f99f0,0x0000000e2c50319d,0x002f414fe1a735264,0x0000000000000000,0x01810000000000000,0x0000000000000000,0x002f5000000000000},
+ { 0x00000000000001d8,0x05e85b1869de1535b,0x0000000045144e6d,0x0000001bfc938e802,0x0000000000000000,0x05ea0000000000000,0x0000000000000000,0x0000001c000000000},
+ { 0x0000000000000091,0x00484ce6bd60b6efb,0x000000004a793f72,0x000001b74b029c643,0x0000000000000000,0x00486000000000000,0x0000000000000000,0x000001b7800000000},
+ { 0x00000000000065af,0x0005f67c5ec10e3f2,0x0000010b8413377a,0x00000032f01fa95ed,0x0000000000000000,0x0005f800000000000,0x0000010b00000000,0x00000033000000000},
+ { 0x0000000000000000,0x0000000000f0eb2a2,0x000000000000000e,0x00000000000e26c09,0x0000000000000000,0x0000000000f100000,0x0000000000000000,0x00000000000e28000},
+ { 0x000000000000081c,0x00007459b4905c830,0x0000000016f8e13a,0x000000002e3351a92,0x0000000000000000,0x00007460000000000,0x0000000016000000,0x000000002e4000000},
+ { 0x0000000000034475,0x07953bad218678bc6,0x00000000007d24fc,0x00932e0785a8a9545,0x0000000000000000,0x07960000000000000,0x0000000000000000,0x00934000000000000},
+ { 0x000000000000032d,0x000fab3433bf786ed,0x0000000000001a2b,0x00000006ce4e4553e,0x0000000000000000,0x000fac00000000000,0x0000000000000000,0x00000006d00000000},
+ { 0x0000000000000003,0x00026c0f3f3735c77,0x00000dd9f931a835,0x000002b7e11d4923f,0x0000000000000000,0x00026d00000000000,0x00000dd800000000,0x000002b8000000000},
+ { 0x00000000000e2dca,0x00006efa6f724f3ab,0x000000001c737930,0x00000034d0ce5aef5,0x0000000000000000,0x00006f00000000000,0x0000000000000000,0x00000034e00000000},
+ { 0x000000000000000d,0x008d47516b834820d,0x000000000000ce8d,0x000003b8dad0170f2,0x0000000000000000,0x008d8000000000000,0x0000000000000000,0x000003b9000000000},
+ { 0x00000000109c7879,0x000085365cac8dfbc,0x00024fc070925d5d,0x00002a342888b0ce4,0x0000000000000000,0x00008540000000000,0x00024fc000000000,0x00002a36000000000},
+ { 0x0000000000000001,0x0000001142355196d,0x0000000000000de5,0x00000000000003736,0x0000000000000000,0x00000011480000000,0x0000000000000de0,0x00000000000003740},
+ { 0x0000000000000005,0x038f6c8c0934ff6ca,0x000000000000001a,0x00000000060457423,0x0000000000000000,0x03900000000000000,0x0000000000000000,0x00000000060600000},
+ { 0x0000000000000021,0x00000000067e8bc1c,0x00000000000000b1,0x00000000000033dcf,0x0000000000000000,0x00000000068000000,0x0000000000000000,0x00000000000033e00},
+ { 0x0000000000002a10,0x00000000003747fb9,0x0000000000008b93,0x00000000002f69421,0x0000000000000000,0x00000000003750000,0x0000000000000000,0x00000000002f70000},
+ { 0x0000000000001297,0x0105e963f359cacee,0x000000d6b0d50fa8,0x000fd24567d6d816e,0x0000000000000000,0x01060000000000000,0x0000000000000000,0x000fd400000000000},
+ { 0x000000001f015b22,0x0003dc06502568df6,0x000007770d0d31d1,0x0001e43d8dddf1e7d,0x0000000000000000,0x0003dd00000000000,0x0000000000000000,0x0001e480000000000},
+ { 0x000000000000009f,0x00000003e819c4f7b,0x00000000004dfbd3,0x00000000010910c14,0x0000000000000000,0x00000003e90000000,0x0000000000480000,0x00000000010980000},
+ { 0x000000000000005e,0x0002df17891a7d18e,0x000000d9a0f14fed,0x00004f57fcaf68d74,0x0000000000000000,0x0002e000000000000,0x0000000000000000,0x00004f60000000000},
+ { 0x0000000b0b42236e,0x0077267d581500b72,0x000002f944ca245e,0x000000307f567f765,0x0000000000000000,0x00774000000000000,0x000002f944000000,0x000000307f8000000},
+ { 0x0000000000000001,0x000001c8fa183ec41,0x00000000000d3bb3,0x0000000265db917ff,0x0000000000000000,0x000001c9000000000,0x0000000000000000,0x00000002660000000},
+ { 0x0000000000000003,0x00000001b7cfc2226,0x0000000000000079,0x0000000000009b32e,0x0000000000000000,0x00000001b80000000,0x0000000000000000,0x0000000000009b400},
+ { 0x00000000000003e6,0x003a42560b2a6ef59,0x000003fd557b0bf1,0x00165d01e151d8df8,0x0000000000000000,0x003a5000000000000,0x0000000000000000,0x00166000000000000},
+ { 0x0000000000000128,0x0000512d81af055b6,0x0000000000000e4e,0x0000000003cb15026,0x0000000000000000,0x00005140000000000,0x0000000000000000,0x0000000003cc00000},
+ { 0x0000000000000030,0x00311dce7e997f8b2,0x000000000c0bbf32,0x0000000049e29cbef,0x0000000000000000,0x00312000000000000,0x000000000c000000,0x000000004a0000000},
+ { 0x0000000002af26f6,0x0026c098dacf10f93,0x00000bbf785fee63,0x0000353e7e8d2596f,0x0000000000000000,0x0026d000000000000,0x00000b0000000000,0x00003540000000000},
+ { 0x0000000000000004,0x008e6a30ded7899b8,0x000000000000000d,0x0000002fad17501c9,0x0000000000000000,0x008e8000000000000,0x0000000000000000,0x0000002fb00000000},
+ { 0x0000000000000014,0x00000049689fc9e72,0x0000000000003fe7,0x0000000000000800e,0x0000000000000000,0x00000049800000000,0x0000000000003fe0,0x00000000000008020},
+ { 0x000000000000174c,0x000a6dec6eb1fbf6f,0x0000000000006557,0x000000000ced3c458,0x0000000000000000,0x000a7000000000000,0x0000000000000000,0x000000000cf000000},
+ { 0x000000000000000f,0x006d72dd1dcd3a612,0x00000000dfd751a9,0x000070ddf514d35a3,0x0000000000000000,0x006d8000000000000,0x0000000000000000,0x000070e0000000000},
+ { 0x000000003ca7b25e,0x0005b194c693a6bc2,0x000001bf4494a332,0x0000006580ee29853,0x0000000000000000,0x0005b200000000000,0x000001be00000000,0x00000065a00000000},
+ { 0x000000000000c3f1,0x022b7773f8d14c5ea,0x0000000edee563f8,0x000000045d0f9e7be,0x0000000000000000,0x022c0000000000000,0x0000000ed0000000,0x000000045e0000000},
+ { 0x0000000000000007,0x006394848166bc35e,0x00000000013150f9,0x0000000000d77fbf5,0x0000000000000000,0x0063a000000000000,0x0000000001300000,0x0000000000d780000},
+ { 0x00000000002b0bc0,0x0000003b72fa910ae,0x000000000ea8a40c,0x0000000006bc12677,0x0000000000000000,0x0000003b800000000,0x000000000ea00000,0x0000000006be00000},
+ { 0x00000000000003d1,0x019a62deed26ad38a,0x000000000000f295,0x0000000000cafd497,0x0000000000000000,0x019a8000000000000,0x0000000000000000,0x0000000000cb00000},
+ { 0x0000000000000015,0x007e61c02d25cc078,0x0000000000119a04,0x00000473877009d9d,0x0000000000000000,0x007e8000000000000,0x0000000000000000,0x00000474000000000},
+ { 0x0000000000223d2f,0x008bae7b19bf34a45,0x00000000002f00a4,0x0000036e172c2da88,0x0000000000000000,0x008bc000000000000,0x0000000000000000,0x0000036f000000000},
+ { 0x00000000b690c21f,0x008042602a4bf1df1,0x007a15c5cc0bc497,0x002e015560f675784,0x0000000000000000,0x00808000000000000,0x007a000000000000,0x002e1000000000000},
+ { 0x0000000000005751,0x01808a9fbdf419ad5,0x00000000000181b7,0x0000dfc983d88eed2,0x0000000000000000,0x01810000000000000,0x0000000000000000,0x0000e000000000000},
+ { 0x0000000000000a74,0x00000754d6bd0f921,0x000000000000301a,0x0000003afd95b3eb2,0x0000000000000000,0x00000756000000000,0x0000000000000000,0x0000003b000000000},
+ { 0x00000000000001f7,0x000000051ef38cae3,0x0000000000000491,0x00000000000002e4b,0x0000000000000000,0x00000005200000000,0x0000000000000490,0x00000000000002e50},
+ { 0x000000000039ba00,0x0161acb7d0a6d4cf7,0x000000000aaf6cc1,0x000001bd49f6b577b,0x0000000000000000,0x01620000000000000,0x0000000000000000,0x000001bd800000000},
+ { 0x00000000000000d1,0x0000000bc8abc38d7,0x00000000dcadbd18,0x00000000302035da8,0x0000000000000000,0x0000000bcc0000000,0x00000000dc000000,0x00000000303000000},
+ { 0x000000057e7ad191,0x0147f8eed2e7579a9,0x00000737d1fe4970,0x00005c261289da3d6,0x0000000000000000,0x01480000000000000,0x0000060000000000,0x00005c40000000000},
+ { 0x000000000074bf96,0x00006914fecd6ccc1,0x0000001476b97ac5,0x000000176766cfd23,0x0000000000000000,0x00006920000000000,0x0000001400000000,0x00000017680000000},
+ { 0x000000072fc82d31,0x002a64b730f0e0825,0x00000037da4c800a,0x0000052d81fd7c7b9,0x0000000000000000,0x002a7000000000000,0x0000002000000000,0x0000052e000000000},
+ { 0x00000000acce4e9a,0x0001f8bda0d1d8cc5,0x00000082c15e4109,0x00000010af046f4b1,0x0000000000000000,0x0001f900000000000,0x00000082c0000000,0x00000010b00000000},
+ { 0x000000000000000a,0x0000000025057bedb,0x000000000000029b,0x00000000000003360,0x0000000000000000,0x00000000251000000,0x0000000000000290,0x00000000000003360},
+ { 0x0000000000000000,0x000009e011da6fb09,0x0000000000001bb8,0x000006765a4f99ffd,0x0000000000000000,0x000009e4000000000,0x0000000000000000,0x00000678000000000},
+ { 0x0000000000021944,0x0000001eef065b5cd,0x0000000024eda18e,0x0000000f04bdbcdb7,0x0000000000000000,0x0000001ef00000000,0x0000000000000000,0x0000000f080000000},
+ { 0x000000000000002d,0x0000053adc09ef437,0x000000000004a0fc,0x000000004483a71ac,0x0000000000000000,0x0000053c000000000,0x0000000000000000,0x0000000044a000000},
+ { 0x000000001219a3f4,0x019fd8599af050b5d,0x0000008824dc8999,0x000007d419355edcd,0x0000000000000000,0x01a00000000000000,0x0000008000000000,0x000007d6000000000},
+ { 0x0000000660d144e7,0x00013759d2d9581c2,0x0000001e5487b607,0x000001d81b3571b52,0x0000000000000000,0x00013780000000000,0x0000001800000000,0x000001d8800000000},
+ { 0x000000000001523f,0x0000000015735a573,0x0000000000158b92,0x00000000071404ef3,0x0000000000000000,0x00000000157800000,0x0000000000000000,0x00000000071600000},
+ { 0x0000000000000001,0x00000015e55b4308e,0x0000000000000001,0x0000000000006048c,0x0000000000000000,0x00000015e80000000,0x0000000000000000,0x00000000000060600},
+ { 0x0000000000000006,0x0296e6ba53a41f714,0x000002715ad119ee,0x00000143ce479213e,0x0000000000000000,0x02970000000000000,0x0000027000000000,0x00000144000000000},
+ { 0x0000000000029529,0x01fbccd9a6c7464b8,0x0000001420be50e2,0x0000629d0f2627bc3,0x0000000000000000,0x01fc0000000000000,0x0000000000000000,0x000062a0000000000},
+ { 0x00000000000000e1,0x000000000eb02944d,0x000000000000030a,0x00000000000a8e0ca,0x0000000000000000,0x000000000eb400000,0x0000000000000000,0x00000000000a90000},
+ { 0x00000000000019a3,0x0054596c7a9b961ab,0x00000000000e30cb,0x000000000237b29c6,0x0000000000000000,0x00546000000000000,0x0000000000000000,0x00000000023800000},
+ { 0x000000000000000f,0x00000000004c8c78f,0x0000000000608a9e,0x00000000000700c23,0x0000000000000000,0x00000000004ca0000,0x0000000000608800,0x00000000000701000},
+ { 0x000000000000000d,0x03d8b21800580e625,0x00000000025b77b7,0x000000067ceeee57e,0x0000000000000000,0x03d90000000000000,0x0000000000000000,0x000000067e0000000},
+ { 0x0000000000000155,0x000000b9ce9482098,0x00000000000680b3,0x000000013acd38013,0x0000000000000000,0x000000ba000000000,0x0000000000000000,0x000000013b0000000},
+ { 0x0000000000376f22,0x0012073ff5e5270b5,0x000000001eb69e27,0x000000026eee9a3c8,0x0000000000000000,0x00120800000000000,0x0000000010000000,0x000000026f0000000},
+ { 0x00000000000000a2,0x0002b667483af94e1,0x000000003ce57a62,0x000011b821e9333fb,0x0000000000000000,0x0002b700000000000,0x0000000000000000,0x000011c0000000000},
+ { 0x00000000013dec1a,0x00393622ed938c3b5,0x00000003ef5c7383,0x0000de38d97b9c62a,0x0000000000000000,0x00394000000000000,0x0000000000000000,0x0000de40000000000},
+ { 0x00000000000003e8,0x000000003882ad14a,0x000000000068e921,0x00000000003222251,0x0000000000000000,0x00000000389000000,0x0000000000680000,0x00000000003230000},
+ { 0x0000000000022582,0x00000000d97888035,0x00000000011e2aa2,0x000000000cdee7a1c,0x0000000000000000,0x00000000d98000000,0x0000000001000000,0x000000000ce000000},
+ { 0x000000000000001c,0x0001d8b57ec6c9dbe,0x00000000002f56b5,0x0001754fc67ed05a3,0x0000000000000000,0x0001d900000000000,0x0000000000000000,0x00017580000000000},
+ { 0x0000004edbde0274,0x0029e432e565ce061,0x00c4e4b3010bc18c,0x001902c9f7eeccca0,0x0000000000000000,0x0029f000000000000,0x00c4c00000000000,0x00190400000000000},
+ { 0x0000000000000014,0x000040b34cb4add64,0x0000000000000184,0x00000000000046615,0x0000000000000000,0x000040c0000000000,0x0000000000000000,0x00000000000046800},
+ { 0x00000000000000f4,0x0032431584de4ed74,0x00000000044cb147,0x0000000004f22db67,0x0000000000000000,0x00325000000000000,0x0000000004400000,0x0000000004f400000},
+ { 0x000000000000003b,0x00008e7346704e2d5,0x0000000000007d4e,0x000000000aa74e4e6,0x0000000000000000,0x00008e80000000000,0x0000000000000000,0x000000000aa800000},
+ { 0x000000000000f13b,0x0001f0ba3dd86fbea,0x00000000000e5d18,0x000006422dbc20fc9,0x0000000000000000,0x0001f100000000000,0x0000000000000000,0x00000644000000000},
+ { 0x00000000000000f2,0x0000033cab3196e06,0x000000000001c756,0x000000000c7831614,0x0000000000000000,0x0000033d000000000,0x0000000000000000,0x000000000c7c00000},
+ { 0x000000006719b442,0x000149028c0c47504,0x0000000f5d91d400,0x00000c8d94f9edf11,0x0000000000000000,0x00014980000000000,0x0000000000000000,0x00000c90000000000},
+ { 0x0000000000000005,0x0026dc7562d253ed4,0x00000000000002c6,0x0000cebb2af40395d,0x0000000000000000,0x0026e000000000000,0x0000000000000000,0x0000cec0000000000},
+ { 0x0000000000100f9b,0x00000ef934f7f110b,0x000000002f2fae58,0x00000001369e81734,0x0000000000000000,0x00000efc000000000,0x0000000028000000,0x00000001370000000},
+ { 0x000000000000fae7,0x00e4b4f3ea5123b0a,0x0000000000019ca9,0x0000000055370cae8,0x0000000000000000,0x00e4c000000000000,0x0000000000000000,0x00000000554000000},
+ { 0x000000084d692a0e,0x00031963baeec1e90,0x0000000ec44e1cc7,0x0000cb85d6a2bbac8,0x0000000000000000,0x00031a00000000000,0x0000000000000000,0x0000cbc0000000000},
+ { 0x000000000000000d,0x00ae5ec1cecc98ce7,0x0000209fb3d1f17a,0x00004e9de049c8467,0x0000000000000000,0x00ae8000000000000,0x0000200000000000,0x00004ea0000000000},
+ { 0x0000000000019815,0x0000000003be6ada6,0x00000000000408d8,0x000000000000cc584,0x0000000000000000,0x0000000003bf00000,0x0000000000040800,0x000000000000cc800},
+ { 0x000000000000000a,0x04977f9fea62d11b3,0x0000000236dcffbe,0x0001c78d5cc0af198,0x0000000000000000,0x04980000000000000,0x0000000000000000,0x0001c800000000000},
+ { 0x0000000000000005,0x034a112f47c7c70a5,0x000000003129e9a9,0x000000defda35a144,0x0000000000000000,0x034b0000000000000,0x0000000000000000,0x000000df000000000},
+ { 0x00000000000010d1,0x000003eb060a437e1,0x0000000000002499,0x0000000000000f57d,0x0000000000000000,0x000003ec000000000,0x0000000000002480,0x0000000000000f580},
+ { 0x0000000000000070,0x00000000486725bda,0x0000000000021300,0x0000000000053c53f,0x0000000000000000,0x00000000488000000,0x0000000000020000,0x0000000000053e000},
+ { 0x000000000000ff4e,0x00b559e1849994204,0x007d8c7af1ed24df,0x00183e52b8d19f405,0x0000000000000000,0x00b58000000000000,0x007d800000000000,0x00184000000000000},
+ { 0x0000000000119d40,0x023e1b0ff3e3bec9f,0x00000004d88043d9,0x00055ba1659d6d492,0x0000000000000000,0x023f0000000000000,0x0000000000000000,0x00055c00000000000},
+ { 0x0000000003253232,0x00f2afe82acb1a389,0x0000000e5c8e742a,0x0000009db2b0b4b26,0x0000000000000000,0x00f2c000000000000,0x0000000c00000000,0x0000009dc00000000},
+ { 0x0000000000000003,0x00000019434f3e3ce,0x0000000006197cd7,0x000000004c8cf5b79,0x0000000000000000,0x00000019480000000,0x0000000006000000,0x000000004ca000000},
+ { 0x0000000000000003,0x0000000000001eb99,0x00000000000016b8,0x00000000000007a72,0x0000000000000000,0x0000000000001ec00,0x00000000000016a0,0x00000000000007a80},
+ { 0x000000000003ce68,0x0004d42ee07611d32,0x00000000000438c3,0x0000000000019991a,0x0000000000000000,0x0004d600000000000,0x0000000000043800,0x0000000000019a000},
+ { 0x0000000000000007,0x019f3ee2bcc940d6b,0x0004289b0418f592,0x0001cfac7aed20c56,0x0000000000000000,0x019f8000000000000,0x0004280000000000,0x0001d000000000000},
+ { 0x0000000000001f9b,0x000c0e688b69c4f2f,0x00033f36c79b192f,0x0001708f5cd023ded,0x0000000000000000,0x000c1000000000000,0x0003380000000000,0x00017100000000000},
+ { 0x0000000000000042,0x0003e05fcedf367f7,0x000000000000006e,0x000000000000000b2,0x0000000000000000,0x0003e100000000000,0x000000000000006e,0x000000000000000b2},
+ { 0x00000000082ba3e0,0x00339e9cc843edbff,0x0000074971c12991,0x00022443255be8692,0x0000000000000000,0x0033a000000000000,0x0000000000000000,0x00022500000000000},
+ { 0x0000000000000fe1,0x0000001ccb023401b,0x00000001c0230858,0x000000063abf64a43,0x0000000000000000,0x0000001cd00000000,0x00000001c0000000,0x000000063c0000000},
+ { 0x0000000000010c26,0x000000466391ebea7,0x00000000000d125e,0x0000002583faad020,0x0000000000000000,0x00000046800000000,0x0000000000000000,0x00000025900000000},
+ { 0x0000000000000d09,0x0005c263f7b291be6,0x000000000000be55,0x0000000000013bdef,0x0000000000000000,0x0005c400000000000,0x000000000000b800,0x0000000000013c000},
+ { 0x000000000000001d,0x000001069281683b8,0x000000000054a2ca,0x00000000002f7a668,0x0000000000000000,0x00000107000000000,0x0000000000540000,0x00000000002f80000},
+ { 0x000002522bb8a618,0x0eb99ed7d957f719a,0x000007079096ccfd,0x00015258c356eb8d7,0x0000000000000000,0x0ebc0000000000000,0x0000000000000000,0x00015280000000000},
+ { 0x000000000006a218,0x0097369dd09c3469e,0x000000000012e952,0x000000000637dfb9b,0x0000000000000000,0x00974000000000000,0x0000000000000000,0x00000000063800000},
+ { 0x000000000000012d,0x00000f266f13efa55,0x00000000000005ff,0x000000e8d570c7cf0,0x0000000000000000,0x00000f28000000000,0x0000000000000000,0x000000e9000000000},
+ { 0x0000000000000001,0x01a4d0d0b7ef68357,0x0000000000000048,0x0000000019683c04f,0x0000000000000000,0x01a50000000000000,0x0000000000000000,0x00000000197000000},
+ { 0x0000000000000008,0x000003b42b6b6f014,0x00000000000000c5,0x000002fa1c030e40c,0x0000000000000000,0x000003b5000000000,0x0000000000000000,0x000002fb000000000},
+ { 0x00000001b714baa7,0x0708949f61662ff81,0x0000007fbbf28b84,0x000019f1e061122a2,0x0000000000000000,0x070a0000000000000,0x0000000000000000,0x000019f8000000000},
+ { 0x00000000000000f5,0x0002402d7faca4a6c,0x0000000000003ed9,0x0000019cce7fa999d,0x0000000000000000,0x00024100000000000,0x0000000000000000,0x0000019d000000000},
+ { 0x00000000000001f9,0x0172a77becae908d3,0x0000072836e15a0c,0x000ba1281ef2567b9,0x0000000000000000,0x01730000000000000,0x0000000000000000,0x000ba400000000000},
+ { 0x000000000000071a,0x0b9e9e705d2296524,0x0000000000056672,0x00000000039566c71,0x0000000000000000,0x0ba00000000000000,0x0000000000000000,0x00000000039600000},
+ { 0x00000000007047a3,0x000151c6ddf7e5c91,0x000000c11b4103a2,0x000007f4c2d63bf00,0x0000000000000000,0x00015200000000000,0x000000c000000000,0x000007f6000000000},
+ { 0x00000000000026a1,0x0004f6dd301829222,0x000000000006729c,0x00000000000d011a6,0x0000000000000000,0x0004f800000000000,0x0000000000064000,0x00000000000d04000},
+ { 0x0000000000000007,0x00000001095196d90,0x0000000000003023,0x0000000000009f9bf,0x0000000000000000,0x00000001098000000,0x0000000000003000,0x0000000000009fc00},
+ { 0x0000000000000003,0x00a2cd5371dd9a8de,0x0000000000001094,0x00000000f70692383,0x0000000000000000,0x00a30000000000000,0x0000000000000000,0x00000000f74000000},
+ { 0x0000000000000003,0x00000032b3c3b03f2,0x0000000000000004,0x00000000000004443,0x0000000000000000,0x00000032c00000000,0x0000000000000000,0x00000000000004460},
+ { 0x0000000000b93212,0x00e52307e2bee9f57,0x00000001b89f5251,0x0042d4dcae052bc00,0x0000000000000000,0x00e54000000000000,0x0000000000000000,0x0042e000000000000},
+ { 0x0000000000007256,0x00547611e9f757042,0x000954b49031ebe2,0x00056c7ed285207d5,0x0000000000000000,0x00548000000000000,0x0009400000000000,0x00056e00000000000},
+ { 0x0000000bb32f12f3,0x0e7f3dc8769fcbddd,0x00002040d23ff1c8,0x00018a88781296063,0x0000000000000000,0x0e800000000000000,0x0000200000000000,0x00018b00000000000},
+ { 0x0000000000000002,0x00127364db4236a0a,0x0000000000000cb0,0x0000000000ceaef35,0x0000000000000000,0x00127800000000000,0x0000000000000000,0x0000000000cec0000},
+ { 0x0000000000000797,0x000000158ad6466ab,0x000000000006df74,0x00000000002007bc8,0x0000000000000000,0x00000015900000000,0x0000000000068000,0x00000000002008000},
+ { 0x0000000000000003,0x00000002e1e00888c,0x0000000000001f2b,0x00000000014c28814,0x0000000000000000,0x00000002e20000000,0x0000000000000000,0x00000000014c80000},
+ { 0x000000000000087b,0x028c53e69ec8c0e58,0x00000000043a273d,0x0000001552a402813,0x0000000000000000,0x028d0000000000000,0x0000000000000000,0x00000015580000000},
+ { 0x0000000000000000,0x00001c98cc45a4c69,0x000000000002158e,0x00000000000f4ed74,0x0000000000000000,0x00001ca0000000000,0x0000000000020000,0x00000000000f50000},
+ { 0x000000000000000d,0x0bdad29b03b95b997,0x0000000000000247,0x07e2a3b87069bf0d7,0x0000000000000000,0x0bdc0000000000000,0x0000000000000000,0x07e40000000000000},
+ { 0x0000000000000001,0x000000000e902a295,0x0000000000000001,0x000000000000003bb,0x0000000000000000,0x000000000e9400000,0x0000000000000001,0x000000000000003bb},
+ { 0x0000000000000006,0x00000017b086e1e01,0x0000000000001b21,0x000000004b31a5350,0x0000000000000000,0x00000017b80000000,0x0000000000000000,0x000000004b4000000},
+ { 0x00000000000003be,0x00003a7748c40d651,0x00000000006b3da1,0x00000000001b16ce6,0x0000000000000000,0x00003a80000000000,0x00000000006b0000,0x00000000001b18000},
+ { 0x0000000000007955,0x002950fce113d4e52,0x000000000000a9a5,0x0000000000000d8a7,0x0000000000000000,0x00296000000000000,0x000000000000a9a0,0x0000000000000d8b0},
+ { 0x00000000000005fa,0x001d3d32bdc522439,0x0000000006b7455f,0x000000fc750ba5edb,0x0000000000000000,0x001d4000000000000,0x0000000000000000,0x000000fc800000000},
+ { 0x000000000000000a,0x03e86f091d8be41fc,0x00000000020f4100,0x00004751b4cede295,0x0000000000000000,0x03e90000000000000,0x0000000000000000,0x00004760000000000},
+ { 0x0000000000000003,0x00015ce6e72865d03,0x000000d0a751cb58,0x0000d5dbf368125ed,0x0000000000000000,0x00015d00000000000,0x0000000000000000,0x0000d600000000000},
+ { 0x00000000000fcb1a,0x0000058224f2370c6,0x000000092c8c164b,0x0000046d57ca49ec9,0x0000000000000000,0x00000584000000000,0x0000000000000000,0x0000046e000000000},
+ { 0x0000000000000001,0x00000ae2931366eb3,0x00000000000000ef,0x000003fa16dfda702,0x0000000000000000,0x00000ae4000000000,0x0000000000000000,0x000003fb000000000},
+ { 0x000000000000051f,0x0000171e17a51cdb0,0x00000000231716bd,0x00000000179dfda52,0x0000000000000000,0x00001720000000000,0x0000000023000000,0x0000000017a000000},
+ { 0x0000000000000084,0x0006e5d53c8439b05,0x00000000489611be,0x0000000032ee6b259,0x0000000000000000,0x0006e600000000000,0x0000000048000000,0x0000000032f000000},
+ { 0x00000000000000b7,0x00046a6c85418fc26,0x00000000028389fd,0x000005bb731cbdec8,0x0000000000000000,0x00046c00000000000,0x0000000000000000,0x000005bc000000000},
+ { 0x00000000026554f5,0x004a9ddbdda50c8b9,0x00000000698b2b31,0x000d9ea2b88284ca9,0x0000000000000000,0x004aa000000000000,0x0000000000000000,0x000da000000000000},
+ { 0x0000000000000022,0x061f9329a3ad4212b,0x00000595a8c4c712,0x00003ae99ae93c760,0x0000000000000000,0x06200000000000000,0x0000050000000000,0x00003af0000000000},
+ { 0x00000000a8940f4a,0x0001094d8db4a7da3,0x0000000240ec9a7c,0x00000005b28e0deb4,0x0000000000000000,0x00010980000000000,0x0000000240000000,0x00000005b40000000},
+ { 0x0000000000000001,0x0027a913a47dc255c,0x0000000000000396,0x000000000000733ad,0x0000000000000000,0x0027b000000000000,0x0000000000000200,0x00000000000073400},
+ { 0x0000000000000003,0x000737d85e61cc4da,0x0000000000000461,0x00000000000ab0118,0x0000000000000000,0x00073800000000000,0x0000000000000000,0x00000000000ab4000},
+ { 0x0000000000005f17,0x007c1ac922c77f8f4,0x000000002e5fbc73,0x000012f14a7f15567,0x0000000000000000,0x007c2000000000000,0x0000000000000000,0x000012f8000000000},
+ { 0x00000000000005f7,0x0009abb3e3e45d7b3,0x0000000a8ba447a5,0x00000022e6eb5d9d3,0x0000000000000000,0x0009ac00000000000,0x0000000a00000000,0x00000022f00000000},
+ { 0x00000000000000b5,0x000000938f0029c0a,0x0000000000b089ba,0x0000001e947d6244a,0x0000000000000000,0x00000093c00000000,0x0000000000000000,0x0000001e980000000},
+ { 0x00000000000701fd,0x0001ba49bc7da89da,0x00000936fa0dffbb,0x000000e5332c41204,0x0000000000000000,0x0001ba80000000000,0x0000093600000000,0x000000e5400000000},
+ { 0x0000000000001b18,0x00102fc552e536c29,0x0000000000353076,0x00000001c866e2828,0x0000000000000000,0x00103000000000000,0x0000000000000000,0x00000001c88000000},
+ { 0x0000000000000001,0x00000a3f8ef5003a8,0x00000000038cd9fb,0x0000001e565c79678,0x0000000000000000,0x00000a40000000000,0x0000000000000000,0x0000001e580000000},
+ { 0x0000000000000005,0x00000004945ddccd7,0x0000000001226083,0x000000002daf46b55,0x0000000000000000,0x00000004960000000,0x0000000001000000,0x000000002db000000},
+ { 0x000000000000000b,0x000000299d1151489,0x000000000000002d,0x00000000000000061,0x0000000000000000,0x00000029a00000000,0x000000000000002d,0x00000000000000061},
+ { 0x0000000000d7eb40,0x000dcf9dfc6fc63d2,0x0000000015e5b9a1,0x000000015302048dc,0x0000000000000000,0x000dd000000000000,0x0000000010000000,0x00000001538000000},
+ { 0x0000000004ebd7cc,0x0000000016c371292,0x0000000007068884,0x00000000007279cee,0x0000000004800000,0x0000000016c800000,0x0000000007068000,0x0000000000727a000},
+ { 0x0000000000000002,0x00007abbbd056dc78,0x0000000000001e26,0x000000b00d951b7ae,0x0000000000000000,0x00007ac0000000000,0x0000000000000000,0x000000b0400000000},
+ { 0x0000000000000002,0x00354f7197ae385fa,0x0000000000000f1d,0x0000000000010612e,0x0000000000000000,0x00355000000000000,0x0000000000000800,0x00000000000106800},
+ { 0x0000000000000020,0x008da2bc79ce1b5eb,0x0000000000000036,0x00000bd0dc6256e5a,0x0000000000000000,0x008dc000000000000,0x0000000000000000,0x00000bd4000000000},
+ { 0x000000000000006f,0x00005a943bf6eb7ad,0x0000000000004f00,0x00000001924f3de3c,0x0000000000000000,0x00005aa0000000000,0x0000000000000000,0x00000001928000000},
+ { 0x000000000000000d,0x00062b70bd2e2a322,0x000000000002db0b,0x00000000001c21ad9,0x0000000000000000,0x00062c00000000000,0x0000000000028000,0x00000000001c28000},
+ { 0x0000000000000078,0x000006655ef8e5f02,0x00000001263699bd,0x000000076104031df,0x0000000000000000,0x00000666000000000,0x0000000120000000,0x00000007620000000},
+ { 0x00000000006cf870,0x0011acb86be02d3bc,0x0000009f949e0f0a,0x0000f3b2fb30e3727,0x0000000000000000,0x0011b000000000000,0x0000000000000000,0x0000f3c0000000000},
+ { 0x000000000000000b,0x00000000036fefddc,0x0000000000001ec2,0x00000000000002b92,0x0000000000000000,0x00000000037000000,0x0000000000001ec2,0x00000000000002b92},
+ { 0x0000000000000019,0x000000b69b8645395,0x00000000ff95f8cb,0x00000063b2902473f,0x0000000000000000,0x000000b6c00000000,0x0000000000000000,0x00000063c00000000},
+ { 0x000000000000021e,0x000040653ed01ef4f,0x00000169f207b9ce,0x00000150b0120010b,0x0000000000000000,0x00004080000000000,0x0000016800000000,0x00000151000000000},
+ { 0x000000000000001b,0x0088158889d7e886f,0x000000000061d90d,0x000000000746c2d6f,0x0000000000000000,0x00884000000000000,0x0000000000600000,0x00000000074800000},
+ { 0x00000000000007bc,0x003f873be96d8a9f5,0x00000000000799f0,0x00000d25d1b7de3c7,0x0000000000000000,0x003f9000000000000,0x0000000000000000,0x00000d28000000000},
+ { 0x00000000000025eb,0x000111cce923627d1,0x0000061dcd1551c8,0x00004a58fddb61b2e,0x0000000000000000,0x00011200000000000,0x0000060000000000,0x00004a60000000000},
+ { 0x00000001676b7e7d,0x0024c9dad5a420de8,0x000000019b686b28,0x000f7e66b5669e017,0x0000000000000000,0x0024d000000000000,0x0000000000000000,0x000f8000000000000},
+ { 0x0000000000a5a5df,0x0003e76452d139a4f,0x0000000027085dce,0x000016f1cd951a756,0x0000000000000000,0x0003e800000000000,0x0000000000000000,0x000016f8000000000},
+ { 0x0000000000003443,0x00000000000b561a0,0x000000000000f90d,0x000000000000d750d,0x0000000000000000,0x00000000000b58000,0x000000000000f800,0x000000000000d7800},
+ { 0x00000000045120f2,0x00177bb2c87a96b67,0x0000181b39d1ac88,0x00000a78bf080882e,0x0000000000000000,0x00178000000000000,0x0000180000000000,0x00000a7c000000000},
+ { 0x0000000006ef74d7,0x002e53134d5a065b9,0x000000058b25aef1,0x00000003ed600dc5f,0x0000000000000000,0x002e6000000000000,0x0000000580000000,0x00000003ee0000000},
+ { 0x0000000000007011,0x000000011cd332691,0x00000000002be533,0x00000000002a08aa2,0x0000000000000000,0x000000011d0000000,0x00000000002b0000,0x00000000002a10000},
+ { 0x0000000000000e45,0x00000323044caf22d,0x000000000015fabd,0x00000033e40b345bf,0x0000000000000000,0x00000324000000000,0x0000000000000000,0x00000033f00000000},
+ { 0x0000005baacd1d22,0x00020d6b0ca7b9d80,0x00001b632a808e19,0x00000ef3930269fc0,0x0000000000000000,0x00020e00000000000,0x00001b4000000000,0x00000ef4000000000},
+ { 0x00000000000000a8,0x00000008ed0535236,0x0000000000001d24,0x0000000000000790f,0x0000000000000000,0x00000008f00000000,0x0000000000001d20,0x00000000000007920},
+ { 0x000000000000000b,0x00019fdf39c36db63,0x0000000000000f6b,0x000000000000038ba,0x0000000000000000,0x0001a000000000000,0x0000000000000f60,0x000000000000038c0},
+ { 0x00000000000000ec,0x00000007f40469c0b,0x0000000003df2faf,0x00000000ffd27d712,0x0000000000000000,0x00000007f60000000,0x0000000000000000,0x00000001000000000},
+ { 0x00000008753f08e2,0x000001bc964221b29,0x00000010e35fbc26,0x000000d1fc08f93c0,0x0000000800000000,0x000001bd000000000,0x0000001000000000,0x000000d2000000000},
+ { 0x000000000000000f,0x00424c78bd01fd28e,0x0000000000001866,0x00000024e13dfedcc,0x0000000000000000,0x00426000000000000,0x0000000000000000,0x00000024f00000000},
+ { 0x0000000000004aa2,0x0000c86e25be12b35,0x0000000000139caa,0x00000070942fca18a,0x0000000000000000,0x0000c880000000000,0x0000000000000000,0x00000070a00000000},
+ { 0x0000000000000004,0x0000000000c1f9b8e,0x0000000000000009,0x0000000000000004d,0x0000000000000000,0x0000000000c200000,0x0000000000000009,0x0000000000000004d},
+ { 0x000000000750d246,0x001e6b6578a80a0bf,0x00095d94de9263d7,0x000c08b9fc1460c45,0x0000000000000000,0x001e7000000000000,0x0009400000000000,0x000c0c00000000000},
+ { 0x0000000000000001,0x0003d8141b45621ac,0x0000000002aeb974,0x000000000b0385b74,0x0000000000000000,0x0003d900000000000,0x0000000002800000,0x000000000b0400000},
+ { 0x0000000000021e25,0x000000365c7d90c3f,0x00000000000b5fbb,0x0000000001233b54f,0x0000000000000000,0x00000036600000000,0x0000000000080000,0x00000000012380000},
+ { 0x00000000006a40c0,0x000d5d088204f09f5,0x0000000002493ad2,0x0000000000ab184a2,0x0000000000000000,0x000d6000000000000,0x0000000002480000,0x0000000000ab40000},
+ { 0x0000000000000a9f,0x01f284345e3c00e97,0x00000000000d31ee,0x000000000004e87f7,0x0000000000000000,0x01f30000000000000,0x00000000000d2000,0x000000000004ea000},
+ { 0x0000000000000001,0x0000007bfafa03e80,0x00000000000488aa,0x0000000b0becc3acb,0x0000000000000000,0x0000007c000000000,0x0000000000000000,0x0000000b0c0000000},
+ { 0x0000000000000ba8,0x000015fca264c4d00,0x0000000000007b8c,0x000000003b907754f,0x0000000000000000,0x00001600000000000,0x0000000000000000,0x000000003ba000000},
+ { 0x0000000000000027,0x00001b1744f4bec14,0x0000000000002a10,0x000000006bb316670,0x0000000000000000,0x00001b18000000000,0x0000000000000000,0x000000006bc000000},
+ { 0x0000000000006893,0x00037145ad3024934,0x000000078560a554,0x00000006a1e5abda2,0x0000000000000000,0x00037200000000000,0x0000000780000000,0x00000006a20000000},
+ { 0x0000000000000fcf,0x0000ac797f6bc6e23,0x00000000312de6f5,0x00000058992c511ed,0x0000000000000000,0x0000ac80000000000,0x0000000000000000,0x00000058a00000000},
+ { 0x000000000000375f,0x00423fc17bccffaa9,0x00000000005dd820,0x0000417aea029a9c9,0x0000000000000000,0x00424000000000000,0x0000000000000000,0x00004180000000000},
+ { 0x000000000000001f,0x001ee11a40bfb4e13,0x0001edc75801e013,0x00008ca5249ffeb88,0x0000000000000000,0x001ee800000000000,0x0001ec0000000000,0x00008cc0000000000},
+ { 0x00000000000000e7,0x00000000045c89d2f,0x0000000000002096,0x0000000001e8f8e97,0x0000000000000000,0x00000000045e00000,0x0000000000000000,0x0000000001e900000},
+ { 0x00000002546eddec,0x00314f44d8432abbc,0x000306868cc91320,0x0001214c5a541e6ff,0x0000000000000000,0x00315000000000000,0x0003040000000000,0x00012180000000000},
+ { 0x0000000008ac7139,0x0000b776f80c3b7ac,0x00000067248acfe9,0x000000d0209bde962,0x0000000000000000,0x0000b780000000000,0x0000006400000000,0x000000d0400000000},
+ { 0x000000000000002c,0x0000b450091d74f48,0x000000000007fb9d,0x000000a1c21dd2a6f,0x0000000000000000,0x0000b480000000000,0x0000000000000000,0x000000a2000000000},
+ { 0x000000000002b3cc,0x021bd56cd83207273,0x0000000001fe70a8,0x00000003393ca4327,0x0000000000000000,0x021c0000000000000,0x0000000000000000,0x000000033a0000000},
+ { 0x000000000000001f,0x00000022cea7dd99c,0x000000000009185d,0x00000000221133e85,0x0000000000000000,0x00000022d00000000,0x0000000000000000,0x00000000222000000},
+ { 0x00000000000019c1,0x0000000005f92dbf4,0x000000000007161b,0x00000000012492d4f,0x0000000000000000,0x0000000005fa00000,0x0000000000000000,0x00000000012500000},
+ { 0x00000000000000b9,0x001a2a91f4efb2615,0x0000000e32941e2e,0x00000005374ea8c73,0x0000000000000000,0x001a3000000000000,0x0000000e20000000,0x00000005380000000},
+ { 0x0000000000000001,0x000af9280478c52f3,0x0000000000003759,0x00000004d295958dc,0x0000000000000000,0x000afc00000000000,0x0000000000000000,0x00000004d40000000},
+ { 0x000000000000001c,0x000005439df21ae06,0x000000009b1a3198,0x00000009ca8f86493,0x0000000000000000,0x00000544000000000,0x0000000080000000,0x00000009cc0000000},
+ { 0x000000043caf2f60,0x00003af5078f745d3,0x0000006bf10925e9,0x00000168a4a8a52fe,0x0000000000000000,0x00003b00000000000,0x0000006800000000,0x00000169000000000},
+ { 0x000000000000016d,0x00aa5ad48720f8270,0x0000000b939480fb,0x0000002acd8666268,0x0000000000000000,0x00aa8000000000000,0x0000000b00000000,0x0000002ad00000000},
+ { 0x0000000000000001,0x0745adff7d786cfec,0x0000000000000036,0x0000000000031a971,0x0000000000000000,0x07460000000000000,0x0000000000000000,0x0000000000031b000},
+ { 0x000000000010ecea,0x000005be249b56e64,0x00000000002d295f,0x000000061a1ab0449,0x0000000000000000,0x000005c0000000000,0x0000000000000000,0x000000061c0000000},
+ { 0x0000000000000449,0x00006a3d1972128b4,0x000000000000f10c,0x00000000086bbf118,0x0000000000000000,0x00006a40000000000,0x0000000000000000,0x00000000086c00000},
+ { 0x000000000000003e,0x0000948228205c9d0,0x0000000000000065,0x0000004615423ee6d,0x0000000000000000,0x000094c0000000000,0x0000000000000000,0x00000046200000000},
+ { 0x0000000000000ad2,0x000a3cb61e6d8864c,0x000000000030b2bb,0x000598f749747ad45,0x0000000000000000,0x000a4000000000000,0x0000000000000000,0x00059a00000000000},
+ { 0x0000000000000003,0x00004e17989c1deea,0x0000000000001915,0x0000000001a73f0af,0x0000000000000000,0x00004e20000000000,0x0000000000000000,0x0000000001a780000},
+ { 0x0000000000003c06,0x000002c6c331d5850,0x0000000000006c9b,0x00000000079023acc,0x0000000000000000,0x000002c7000000000,0x0000000000000000,0x00000000079200000},
+ { 0x000000000000c716,0x0000ef402c25547ab,0x00000000009dd938,0x00000000e2cc6f6fe,0x0000000000000000,0x0000ef80000000000,0x0000000000000000,0x00000000e30000000},
+ { 0x000000000000007f,0x0000000db12ac31cb,0x0000000000091052,0x000000000f7304baa,0x0000000000000000,0x0000000db40000000,0x0000000000000000,0x000000000f7400000},
+ { 0x000000000000da54,0x010664d936bc17773,0x01d4a45e898032d2,0x004e805be9bbcd0e2,0x0000000000000000,0x01068000000000000,0x01d4000000000000,0x004e9000000000000},
+ { 0x0000000000003cfa,0x000003152d3e5ae58,0x0000000009a09857,0x000000bfec8f931ea,0x0000000000000000,0x00000316000000000,0x0000000000000000,0x000000c0000000000},
+ { 0x0000000000000007,0x0025e683ee1b69999,0x0000344f36d76b05,0x0000116dbc50d6241,0x0000000000000000,0x0025f000000000000,0x0000344000000000,0x00001170000000000},
+ { 0x0000000072a43041,0x0000bb5d31375e696,0x00002b045de1e845,0x00001c09aad714013,0x0000000000000000,0x0000bb80000000000,0x00002b0000000000,0x00001c10000000000},
+ { 0x000000000000004a,0x00000000001f7ad33,0x00000000000003aa,0x000000000000ca1ae,0x0000000000000000,0x00000000001f80000,0x0000000000000000,0x000000000000ca400},
+ { 0x00000000008ff641,0x001e985725dbfd691,0x00000007e8618987,0x00093f40fcff7df7f,0x0000000000000000,0x001ea000000000000,0x0000000000000000,0x00094000000000000},
+ { 0x0000000000007b07,0x000000000248dc5c4,0x00000000000270f5,0x000000000015cb21c,0x0000000000000000,0x00000000024900000,0x0000000000020000,0x000000000015d0000},
+ { 0x000000000044c163,0x008d0e3d4e4dc97e7,0x0000009dd2429dba,0x000071dbc40a1e444,0x0000000000000000,0x008d4000000000000,0x0000000000000000,0x000071e0000000000},
+ { 0x00000000486b380e,0x000e8c5f40da590aa,0x00000000b194654b,0x000036dd993f5fd94,0x0000000000000000,0x000e9000000000000,0x0000000000000000,0x000036e0000000000},
+ { 0x0000000000000120,0x0023e2db2fc4b5f71,0x000000010537f5dd,0x000000006df083b41,0x0000000000000000,0x0023f000000000000,0x0000000104000000,0x000000006e0000000},
+ { 0x00000000004c202d,0x001801042ab77b273,0x00000000195096fe,0x00004a01265001656,0x0000000000000000,0x00180800000000000,0x0000000000000000,0x00004a20000000000},
+ { 0x00000c733e8e818f,0x0331c24796d9ea38f,0x00020239c0c0cb91,0x00075d6e8c10979fd,0x0000000000000000,0x03320000000000000,0x0002000000000000,0x00075e00000000000},
+ { 0x0000000000000006,0x0b15f0ed8e56ffda4,0x000000000104a6e5,0x012be31849dd1fa05,0x0000000000000000,0x0b180000000000000,0x0000000000000000,0x012c0000000000000},
+ { 0x0000000000003288,0x034a6cd22243ebcae,0x0000002cf3d0c278,0x002ee48bb83911c5b,0x0000000000000000,0x034b0000000000000,0x0000000000000000,0x002ef000000000000},
+ { 0x0000000000000001,0x0061634e25613c0e6,0x0000000000001eac,0x0000aab2728058de0,0x0000000000000000,0x00618000000000000,0x0000000000000000,0x0000aac0000000000},
+ { 0x0000000000000002,0x00006f44ac6730bfe,0x000000000000002f,0x0000000670afa5d1e,0x0000000000000000,0x00006f60000000000,0x0000000000000000,0x00000006720000000},
+ { 0x00000000000006d1,0x0027806de422df5ea,0x0000000070db6f79,0x000523f588049fc19,0x0000000000000000,0x00279000000000000,0x0000000000000000,0x00052400000000000},
+ { 0x0000000000000203,0x000000001895a076d,0x0000000000002780,0x000000000006ff872,0x0000000000000000,0x00000000189800000,0x0000000000002000,0x00000000000700000},
+ { 0x0000153b34266e7d,0x00004ba671f58a25d,0x00007607e9a96a3c,0x000019b7deaead1d4,0x0000140000000000,0x00004bc0000000000,0x0000760000000000,0x000019b8000000000},
+ { 0x0000000000000047,0x00065fb8b00a3551f,0x000000000000555a,0x000030329029f6c0e,0x0000000000000000,0x00066000000000000,0x0000000000000000,0x00003040000000000},
+ { 0x0000000000000004,0x000000aeb657a07d8,0x000000000000006d,0x00000003446c11473,0x0000000000000000,0x000000aec00000000,0x0000000000000000,0x00000003450000000},
+ { 0x000000000000001a,0x02d31a739ea173a74,0x00000000000001cd,0x00004e84df4a8cfb9,0x0000000000000000,0x02d40000000000000,0x0000000000000000,0x00004ea0000000000},
+ { 0x000000000000b063,0x003d0b5aa29af9b0f,0x00000000000e0262,0x000021addfbb58c28,0x0000000000000000,0x003d1000000000000,0x0000000000000000,0x000021b0000000000},
+ { 0x00000000003e5f40,0x000b1ef0a578a2612,0x0000000076f489f2,0x000576dd441c89a37,0x0000000000000000,0x000b2000000000000,0x0000000000000000,0x00057800000000000},
+ { 0x0000000000054e5b,0x000e4df595c0ec033,0x000000b6f5bc28ae,0x000033a4f08391571,0x0000000000000000,0x000e5000000000000,0x0000000000000000,0x000033b0000000000},
+ { 0x000000000007e4b8,0x000000c48bda1a53f,0x000000000078de78,0x00000000004ebf417,0x0000000000000000,0x000000c4c00000000,0x0000000000780000,0x00000000004ec0000},
+ { 0x0000000000002cbf,0x0b10b18f4cc1b9681,0x0000000000038622,0x00000000000ce4995,0x0000000000000000,0x0b140000000000000,0x0000000000038000,0x00000000000ce8000},
+ { 0x0000000000004fed,0x00000000049ca864f,0x000000000021f29a,0x00000000002f8cf1c,0x0000000000000000,0x00000000049e00000,0x0000000000210000,0x00000000002f90000},
+ { 0x00000000000011f7,0x00000000b6cfb8431,0x000000000000bfd3,0x0000000000000ce0d,0x0000000000000000,0x00000000b70000000,0x000000000000bfd3,0x0000000000000ce0d},
+ { 0x0000000000000006,0x00055fe5215a664c7,0x000000000000006b,0x0000000000013d965,0x0000000000000000,0x00056000000000000,0x0000000000000000,0x0000000000013e000},
+ { 0x000000000000d025,0x000090a11865f85fa,0x0000000000019e7f,0x000001496ebe5f9bc,0x0000000000000000,0x000090c0000000000,0x0000000000000000,0x00000149800000000},
+ { 0x00000000000003a5,0x0046e8472af12d05f,0x00003df008f5a15a,0x0000107e7aae96f03,0x0000000000000000,0x00470000000000000,0x00003dc000000000,0x00001080000000000},
+ { 0x000000000000000c,0x000028c95dfb3f9c9,0x00000003321902f1,0x00000007bbcdab1e5,0x0000000000000000,0x000028d0000000000,0x0000000320000000,0x00000007bc0000000},
+ { 0x00000000013fe73f,0x00000155729fa784e,0x000000007b5b1c19,0x000000000c9b3e1c1,0x0000000000000000,0x00000155800000000,0x000000007b400000,0x000000000c9c00000},
+ { 0x00000000000a27f2,0x004061813381b91aa,0x0000000000139300,0x0000000001356cc70,0x0000000000000000,0x00408000000000000,0x0000000000100000,0x00000000013580000},
+ { 0x000000000000c6a6,0x053d44a754d7131b2,0x0000000009dbc47d,0x003bb90bd4d3bbf31,0x0000000000000000,0x053e0000000000000,0x0000000000000000,0x003bc000000000000},
+ { 0x0000000000000066,0x000122251d0d1e585,0x0000000000000f10,0x00000000cdb4a2dc2,0x0000000000000000,0x00012280000000000,0x0000000000000000,0x00000000cdc000000},
+ { 0x0000000000000004,0x00000006afae96d58,0x000000000000062a,0x000000000b5373a91,0x0000000000000000,0x00000006b00000000,0x0000000000000000,0x000000000b5400000},
+ { 0x0000000000168ac3,0x0306edd60bb67ce0f,0x0000000000703b8d,0x00000000002279c32,0x0000000000000000,0x03070000000000000,0x0000000000700000,0x00000000002280000},
+ { 0x000000000000002e,0x000000000007c4e00,0x000000000000005c,0x000000000000022fe,0x0000000000000000,0x000000000007c6000,0x0000000000000050,0x00000000000002300},
+ { 0x0000000000000b40,0x00003226bbb88350d,0x00000000ba50dcb7,0x00000648697f166dd,0x0000000000000000,0x00003230000000000,0x0000000000000000,0x0000064a000000000},
+ { 0x0000000000000018,0x0001e4f3b73422500,0x00000000001a53bc,0x00002aec9c243e40e,0x0000000000000000,0x0001e500000000000,0x0000000000000000,0x00002af0000000000},
+ { 0x0000000000000665,0x00105d50a64c00737,0x0000000000001c69,0x000286ac05d3d885c,0x0000000000000000,0x00106000000000000,0x0000000000000000,0x00028700000000000},
+ { 0x00000000000005c0,0x0000734ea51124d27,0x000000000000355e,0x00000000e3b2ce235,0x0000000000000000,0x00007360000000000,0x0000000000000000,0x00000000e3c000000},
+ { 0x00000000000008d1,0x00000008b4726d162,0x000000000073b152,0x0000000000cb436cd,0x0000000000000000,0x00000008b80000000,0x0000000000700000,0x0000000000cb80000},
+ { 0x000000000000000e,0x00000015d76fb2750,0x0000000000000013,0x000000000000002e6,0x0000000000000000,0x00000015d80000000,0x0000000000000013,0x000000000000002e6},
+ { 0x000000001831334b,0x01a08fffdb0d0af41,0x00001b2a7b6d519f,0x006afe33c6876c38b,0x0000000000000000,0x01a10000000000000,0x0000000000000000,0x006b0000000000000},
+ { 0x0000000000000592,0x0000000cea083846f,0x00000000000fb254,0x00000000000f82129,0x0000000000000000,0x0000000cec0000000,0x00000000000f8000,0x00000000000f84000},
+ { 0x00000000125fe58a,0x00000596a337007b5,0x000000007cd508a8,0x0000000080e70fecd,0x0000000000000000,0x00000598000000000,0x000000007c000000,0x00000000810000000},
+ { 0x00000000000000ac,0x0260ced26f7b84ac6,0x0000000000ad5664,0x00000001c497f1dbb,0x0000000000000000,0x02610000000000000,0x0000000000000000,0x00000001c50000000},
+ { 0x000000000000001b,0x0000027058c4634c3,0x000000232d62e37b,0x00000086848f4f7ba,0x0000000000000000,0x00000271000000000,0x0000002000000000,0x00000086c00000000},
+ { 0x000000000000000d,0x0000000033ee33860,0x000000000002c67e,0x000000000000782c8,0x0000000000000000,0x0000000033f000000,0x000000000002c600,0x00000000000078400},
+ { 0x000000000000000a,0x064660447c901594e,0x0000000000000075,0x000000000000c6042,0x0000000000000000,0x06480000000000000,0x0000000000000000,0x000000000000c6400},
+ { 0x000000000000001c,0x0000035331fd615b2,0x0000000000b344cc,0x00000000001b3be60,0x0000000000000000,0x00000354000000000,0x0000000000b30000,0x00000000001b40000},
+ { 0x0000000000000064,0x00000005225c0680e,0x000000000000077d,0x0000000000000f263,0x0000000000000000,0x00000005240000000,0x0000000000000740,0x0000000000000f280},
+ { 0x0000000000000002,0x000b4942ab3d8ace6,0x0000000000000289,0x000018d1c282077a2,0x0000000000000000,0x000b4c00000000000,0x0000000000000000,0x000018d8000000000},
+ { 0x0000000000019eca,0x0000389275bdf7a8e,0x0000023e5fe5efeb,0x000000b9e5034a13f,0x0000000000000000,0x000038a0000000000,0x0000023c00000000,0x000000ba000000000},
+ { 0x000000000000003e,0x00260956e7dfdaefd,0x000000002d9716ba,0x000000001ef4f9b62,0x0000000000000000,0x00261000000000000,0x000000002d800000,0x000000001ef800000},
+ { 0x0000000000115d26,0x00eac62ffad62133f,0x0000000009a0b607,0x0002fc2fb0f732319,0x0000000000000000,0x00eb0000000000000,0x0000000000000000,0x0002fd00000000000},
+ { 0x000000000000001f,0x00000016969ec8a38,0x0000000000001085,0x00000000cb2bb052a,0x0000000000000000,0x00000016980000000,0x0000000000000000,0x00000000cb4000000},
+ { 0x000000000000038b,0x0176972f0e7ace596,0x00000000000bc291,0x0000002fa49e44b62,0x0000000000000000,0x01770000000000000,0x0000000000000000,0x0000002fb00000000},
+ { 0x00000000000563d8,0x048794accc571b517,0x0004809f64173de2,0x031651d9752fc7ce0,0x0000000000000000,0x04880000000000000,0x0000000000000000,0x03170000000000000},
+ { 0x0000000000000019,0x00c47f40fa8cab7b6,0x00000000000002cb,0x000000000285da55f,0x0000000000000000,0x00c48000000000000,0x0000000000000000,0x00000000028600000},
+ { 0x0000000018dc6c94,0x00c0ab101e028164a,0x00000061469cf2f4,0x00012fb78afe3471a,0x0000000000000000,0x00c0c000000000000,0x0000000000000000,0x00013000000000000},
+ { 0x0000000000000008,0x000281ed87809979f,0x00000000000002dd,0x000000017c37d1911,0x0000000000000000,0x00028200000000000,0x0000000000000000,0x000000017c8000000},
+ { 0x0000000000000000,0x0000000395c6d9d77,0x000000000015f6e6,0x000000018638e8364,0x0000000000000000,0x00000003960000000,0x0000000000000000,0x00000001868000000},
+ { 0x0000000000000001,0x0002872e0768dc3a5,0x000000000b87da9a,0x00000b12ea83353c3,0x0000000000000000,0x00028800000000000,0x0000000000000000,0x00000b14000000000},
+ { 0x0000000000000000,0x00b95583f76d234fe,0x000000000000002d,0x00000000027d2e373,0x0000000000000000,0x00b98000000000000,0x0000000000000000,0x00000000027e00000},
+ { 0x0000000000000386,0x00003b9941ffaaac5,0x00000000008f640e,0x00000006b4db7d69a,0x0000000000000000,0x00003ba0000000000,0x0000000000000000,0x00000006b60000000},
+ { 0x0000000000000004,0x000000038a4337297,0x00000000000009b0,0x0000000000d6c0150,0x0000000000000000,0x000000038b0000000,0x0000000000000000,0x0000000000d700000},
+ { 0x000000000000ee28,0x03542339940ed5422,0x000000000147e99e,0x00000000f4f1b03d7,0x0000000000000000,0x03550000000000000,0x0000000000000000,0x00000000f50000000},
+ { 0x00000000000002d6,0x00169d0e5179844a7,0x0000000000001556,0x0000005210a342ea0,0x0000000000000000,0x0016a000000000000,0x0000000000000000,0x00000052200000000},
+ { 0x000000000000002e,0x00076e81bce582067,0x00000091329cfd35,0x00000011eb1e7b318,0x0000000000000000,0x00077000000000000,0x0000009100000000,0x00000011ec0000000},
+ { 0x00000000000164b8,0x003d29ae77608e4bc,0x00000a11572b4d19,0x000053386df167624,0x0000000000000000,0x003d3000000000000,0x00000a0000000000,0x00005340000000000},
+ { 0x0000000000000019,0x0000020062d88950f,0x0000000000000945,0x000000000006921ac,0x0000000000000000,0x00000201000000000,0x0000000000000000,0x00000000000694000},
+ { 0x0000000000000050,0x000000002663de5e8,0x00000000000a30b6,0x000000000003283a6,0x0000000000000000,0x00000000267000000,0x00000000000a3000,0x00000000000329000},
+ { 0x00000000018892d3,0x002507af549a96675,0x0006bc1992918f6b,0x0000afe795257bcbc,0x0000000000000000,0x00251000000000000,0x0006bc0000000000,0x0000b000000000000},
+ { 0x0000000000000085,0x000000000bc2b2bf6,0x000000000d2e57a7,0x00000000013614fc0,0x0000000000000000,0x000000000bc400000,0x000000000d2e0000,0x00000000013620000},
+ { 0x00000000000001ed,0x0b2ee3ad6fd2f8cc7,0x000000000000148e,0x00000065323dd8644,0x0000000000000000,0x0b300000000000000,0x0000000000000000,0x00000065400000000},
+ { 0x00000000000fd85c,0x0038530d365fa12b9,0x00000001393f85cd,0x00000000c1f7f7d61,0x0000000000000000,0x00386000000000000,0x0000000138000000,0x00000000c20000000},
+ { 0x0000000000002214,0x001df746af9167e6a,0x00000000000039b0,0x0002c0aaa4d500407,0x0000000000000000,0x001df800000000000,0x0000000000000000,0x0002c100000000000},
+ { 0x00000056d71ddbcb,0x0397bfbb316141908,0x0001fdff80edcb1a,0x0011eefd56b518d9a,0x0000000000000000,0x03980000000000000,0x0001800000000000,0x0011f000000000000},
+ { 0x00000000000000da,0x000002b40c26d1c1e,0x0000000000003850,0x00000000feb786db7,0x0000000000000000,0x000002b5000000000,0x0000000000000000,0x00000000fec000000},
+ { 0x0000000000000017,0x000000000678bf64e,0x0000000000002698,0x0000000002aee7350,0x0000000000000000,0x00000000067a00000,0x0000000000000000,0x0000000002af00000},
+ { 0x000000000003e363,0x00a3ea627aa1459da,0x00000000016384cb,0x00000006ab05cb870,0x0000000000000000,0x00a40000000000000,0x0000000000000000,0x00000006ac0000000},
+ { 0x0000001ccb83cdcc,0x0043ae3c7298b0779,0x00219bce37233e0d,0x0016b36310205aa80,0x0000000000000000,0x0043c000000000000,0x0021800000000000,0x0016b800000000000},
+ { 0x00000051fd7c8b79,0x000007a1a2d04fdb3,0x000000ac9145d781,0x000002bcf5dec14b3,0x0000004000000000,0x000007a2000000000,0x000000a000000000,0x000002bd000000000},
+ { 0x00000000000003ae,0x00004d37247f9e389,0x0000000000022844,0x0000002d179ce5e08,0x0000000000000000,0x00004d40000000000,0x0000000000000000,0x0000002d200000000},
+ { 0x0000000000000010,0x000000a2e4726e6e4,0x0000000000002919,0x000000011609bd76e,0x0000000000000000,0x000000a3000000000,0x0000000000000000,0x00000001168000000},
+ { 0x0000000000000000,0x000000094f08c04a0,0x000000000000005a,0x000000071144853d8,0x0000000000000000,0x00000009500000000,0x0000000000000000,0x00000007120000000},
+ { 0x0000000000000067,0x00f6c3d58aa4ce324,0x000124284869ed67,0x0001b85a65c80f227,0x0000000000000000,0x00f70000000000000,0x0001200000000000,0x0001b880000000000},
+ { 0x0000000000000077,0x025d95ffdaf399a6e,0x0000000000004c1e,0x0000000000869a1a5,0x0000000000000000,0x025e0000000000000,0x0000000000000000,0x000000000086c0000},
+ { 0x000000003fae4901,0x0000f3b1e54521e4f,0x00000005601a1a74,0x0000013d9c3195f55,0x0000000000000000,0x0000f3c0000000000,0x0000000000000000,0x0000013e000000000},
+ { 0x000000000000007d,0x000225ca9db0a5516,0x000000000030d1c5,0x0000000002200d445,0x0000000000000000,0x00022600000000000,0x0000000000300000,0x00000000022100000},
+ { 0x0000000000000004,0x000000336c2575f8a,0x00000000000090b1,0x000000000157c2c6f,0x0000000000000000,0x00000033700000000,0x0000000000000000,0x00000000015800000},
+ { 0x000000000000727f,0x00001a1c30a5f3ca3,0x00000024d0e09fae,0x0000005ddcea1a807,0x0000000000000000,0x00001a20000000000,0x0000002400000000,0x0000005de00000000},
+ { 0x0000000000000324,0x000000004b667adf8,0x00000000000155de,0x0000000007098770b,0x0000000000000000,0x000000004b8000000,0x0000000000000000,0x00000000070a00000},
+ { 0x000000000000cad7,0x0000bafa0d9c50ff5,0x000000000007a091,0x000000000001a80e9,0x0000000000000000,0x0000bb00000000000,0x000000000007a000,0x000000000001a8800},
+ { 0x000000218fb66ff3,0x001307482a226ad79,0x0000fffef4a24acc,0x00001f77b16062f8f,0x0000000000000000,0x00130800000000000,0x0000ffc000000000,0x00001f78000000000},
+ { 0x0000000002405c60,0x000075f9923d4dc90,0x0000002ae511bf61,0x00000005461f4d6c4,0x0000000000000000,0x00007600000000000,0x0000002ae0000000,0x00000005470000000},
+ { 0x000000000000000a,0x0162549026ecdded7,0x0000000dae4e2c94,0x00f316909da4cd732,0x0000000000000000,0x01628000000000000,0x0000000000000000,0x00f34000000000000},
+ { 0x00000000000028cb,0x0003911379fbcd434,0x0000000002f0ac8e,0x00000000e448996d9,0x0000000000000000,0x00039200000000000,0x0000000000000000,0x00000000e48000000},
+ { 0x000000000000f2c6,0x00000074ae669c1b6,0x0000000001ef2f34,0x00000015cb4e373ad,0x0000000000000000,0x00000074c00000000,0x0000000000000000,0x00000015d00000000},
+ { 0x00000000322a6bea,0x029fdffa879a5dc92,0x00003431d527bb93,0x000ce0ddb73b6bcbb,0x0000000000000000,0x02a00000000000000,0x0000000000000000,0x000ce400000000000},
+ { 0x00000000061b8dbc,0x060c83e7fdfffbe93,0x00000000071a0b73,0x000029ede1523bc9b,0x0000000000000000,0x060e0000000000000,0x0000000000000000,0x000029f0000000000},
+ { 0x000000000245c1da,0x02f9ff8388f1baee4,0x0000006b36c502cb,0x00000026412b1b4f2,0x0000000000000000,0x02fa0000000000000,0x0000006b00000000,0x00000026480000000},
+ { 0x000000000000016f,0x0007d912e79183e56,0x000000000000dcb6,0x0000000080846f2bb,0x0000000000000000,0x0007da00000000000,0x0000000000000000,0x0000000080c000000},
+ { 0x0000000000000025,0x0000cd27479b3b1cc,0x000000022c0fcd7f,0x000003a22d6bc71a8,0x0000000000000000,0x0000cd40000000000,0x0000000000000000,0x000003a3000000000},
+ { 0x0000000000000003,0x000001f209eb3d605,0x00000000000000d9,0x000000000000d6e8c,0x0000000000000000,0x000001f2800000000,0x0000000000000000,0x000000000000d7000},
+ { 0x0000000050f83bb2,0x036a4aec68e5287c7,0x00001097bc96bdc1,0x0029094b6d6ace4b8,0x0000000000000000,0x036b0000000000000,0x0000000000000000,0x00291000000000000},
+ { 0x0000000000000001,0x00006908e33d0444d,0x00000000044d7836,0x0000007138f6bf919,0x0000000000000000,0x00006920000000000,0x0000000000000000,0x00000071400000000},
+ { 0x00000005f0ef05a0,0x0046de6334922781b,0x000001d6b9e6db7d,0x00008bd9b27ca90a2,0x0000000000000000,0x0046e000000000000,0x0000000000000000,0x00008c00000000000},
+ { 0x00000000002a926f,0x00003454614d3c536,0x000000248b767273,0x00002e7d3700d5892,0x0000000000000000,0x00003460000000000,0x0000000000000000,0x00002e80000000000},
+ { 0x0000000000000182,0x03465e46ba5a06fa1,0x00000000010c6bbb,0x00000bc6cec604a9d,0x0000000000000000,0x03470000000000000,0x0000000000000000,0x00000bc8000000000},
+ { 0x00000001a5fdea48,0x01792213b5333e6fb,0x0000001788b591ee,0x0000005bd57c697f3,0x0000000000000000,0x01798000000000000,0x0000001600000000,0x0000005be00000000},
+ { 0x0000000000000014,0x0001f8028f7d8774c,0x00000000000002ea,0x000000000f7a5bfb7,0x0000000000000000,0x0001f880000000000,0x0000000000000000,0x000000000f7c00000},
+ { 0x000000000000a083,0x0012de9079c4071ed,0x000000000d185c9e,0x0000000007f45c51d,0x0000000000000000,0x0012e000000000000,0x000000000d000000,0x0000000007f600000},
+ { 0x000000000000001c,0x0026ab018e119dc48,0x0001dd348c41229f,0x00004d4d10d29e606,0x0000000000000000,0x0026b000000000000,0x0001dd0000000000,0x00004d50000000000},
+ { 0x0000000056b56001,0x0000a6729b6a90c5e,0x000001d0e5f96e9f,0x0000049bdd3fcce65,0x0000000000000000,0x0000a680000000000,0x000001c000000000,0x0000049c000000000},
+ { 0x00000007dd33e6b1,0x00cd6a3fd8bca3474,0x000001c7245f51f7,0x000003837f557c12d,0x0000000000000000,0x00cd8000000000000,0x000001c000000000,0x00000384000000000},
+ { 0x000ef20d997a0344,0x01e683f8fe6c0b9e8,0x00561199d602a6a9,0x0039a3c509f2f6338,0x0008000000000000,0x01e70000000000000,0x0056000000000000,0x0039b000000000000},
+ { 0x000000000000001e,0x0037a7f3ae516099c,0x00000000000000e8,0x000000000000000ff,0x0000000000000000,0x0037b000000000000,0x00000000000000e8,0x000000000000000ff},
+ { 0x0000000000000007,0x0000000136102f984,0x000000001ec1ca8e,0x000000000d731aefc,0x0000000000000000,0x00000001368000000,0x000000001ec00000,0x000000000d7400000},
+ { 0x0000000000013eae,0x0000a6151df4852c9,0x0000000000865820,0x00000000055bcc8f7,0x0000000000000000,0x0000a640000000000,0x0000000000800000,0x00000000055c00000},
+ { 0x00000000000631b9,0x01e2a956c8955fb69,0x0017c29c9b18ee84,0x000721766965162e6,0x0000000000000000,0x01e30000000000000,0x0017c00000000000,0x00072200000000000},
+ { 0x000000729fc56d0a,0x00ff700976253868e,0x000485ad6ce531ad,0x00014bdd3fa94d086,0x0000000000000000,0x00ff8000000000000,0x0004800000000000,0x00014c00000000000},
+ { 0x0000000000000007,0x0065058f5d2e6d9e8,0x0000000000000027,0x000000000000005cb,0x0000000000000000,0x00652000000000000,0x0000000000000027,0x000000000000005cb},
+ { 0x0000000000000002,0x0000000c98f66275b,0x00000000000071d2,0x0000000000000ce98,0x0000000000000000,0x0000000c9c0000000,0x00000000000071c0,0x0000000000000cea0},
+ { 0x000000000b98fce6,0x009b8bff98bad3ffb,0x0000000404dbfd8a,0x000009be289c17965,0x0000000000000000,0x009bc000000000000,0x0000000000000000,0x000009c0000000000},
+ { 0x000000000003a2e1,0x004d783b8d0e8ad02,0x0000000001ca7a5c,0x00000005ed031aeb8,0x0000000000000000,0x004d8000000000000,0x0000000000000000,0x00000005ee0000000},
+ { 0x00000000000003f0,0x058478987c12277e1,0x0003d96fde2b21f8,0x000e9b420fc34d349,0x0000000000000000,0x05860000000000000,0x0003c00000000000,0x000e9c00000000000},
+ { 0x000000002b50651b,0x0b2ba1e9e7dbba1b7,0x00000000ac7793da,0x00000cbf179aa73fe,0x0000000000000000,0x0b2c0000000000000,0x0000000000000000,0x00000cc0000000000},
+ { 0x000000000000000d,0x0088adbf78131af6f,0x000061fe9769ad01,0x000008d7126259c94,0x0000000000000000,0x0088c000000000000,0x000061f000000000,0x000008d8000000000},
+ { 0x0000000000000108,0x00222fb6cef1c10c6,0x0000000000002c4a,0x000000000026d1339,0x0000000000000000,0x00223000000000000,0x0000000000000000,0x000000000026e0000},
+ { 0x0000000000000001,0x014ad7ff3b3c88207,0x00000000075ed71e,0x00024727386f1b9e0,0x0000000000000000,0x014b0000000000000,0x0000000000000000,0x00024800000000000},
+ { 0x0000000000b76f92,0x0000dcb7412c475e5,0x000000581e78b27b,0x00000031986e61725,0x0000000000000000,0x0000dcc0000000000,0x0000005800000000,0x00000031a00000000},
+ { 0x00000000000007c0,0x0000000000005d7b1,0x000000000000089d,0x0000000000004dff7,0x0000000000000600,0x0000000000005d800,0x0000000000000800,0x0000000000004e000},
+ { 0x000000000000004a,0x0057400863ffa7fca,0x000005d3ddbd79a4,0x000000b53bc696272,0x0000000000000000,0x00576000000000000,0x000005d200000000,0x000000b5400000000},
+ { 0x00000000002b1c5c,0x000ea2bbfd6ec1c0c,0x0000000038d7bb8b,0x000861029bdf4b2c3,0x0000000000000000,0x000ea400000000000,0x0000000000000000,0x00086400000000000},
+ { 0x00000000007da224,0x0061197243578064f,0x00000001de1b3c3f,0x002ac714bc852941d,0x0000000000000000,0x00612000000000000,0x0000000000000000,0x002ad000000000000},
+ { 0x0000000000000022,0x00000000000cddec1,0x0000000000000039,0x00000000000000117,0x0000000000000000,0x00000000000ce0000,0x0000000000000039,0x00000000000000117},
+ { 0x000000006c79f060,0x0000b34ac9687d8ec,0x0000001c72008649,0x000000276da535073,0x0000000000000000,0x0000b380000000000,0x0000001c00000000,0x00000027700000000},
+ { 0x000000000000000c,0x000000000000106eb,0x000000000000000e,0x000000000000080cf,0x0000000000000000,0x00000000000010700,0x0000000000000000,0x00000000000008100},
+ { 0x000000000193a574,0x00000002450285210,0x00000000b00ef38f,0x000000000ff8ec042,0x0000000000000000,0x00000002460000000,0x00000000b0000000,0x000000000ffa00000},
+ { 0x00000000000b797c,0x00a6c338edc489cb4,0x00000000296e81e6,0x0000010c3996d9b09,0x0000000000000000,0x00a70000000000000,0x0000000000000000,0x0000010c800000000},
+ { 0x0000000000652663,0x00b1e820611234d5e,0x0000000779f0d316,0x0000014fe37647c69,0x0000000000000000,0x00b20000000000000,0x0000000000000000,0x00000150000000000},
+ { 0x000000000007e7eb,0x0006d6a4b4be9e763,0x000000000100160d,0x0000000145a5e78b2,0x0000000000000000,0x0006d800000000000,0x0000000000000000,0x00000001460000000},
+ { 0x0000000000000005,0x06b89f62d473cadd5,0x0000018231bd792d,0x0000010f0a6756093,0x0000000000000000,0x06ba0000000000000,0x0000018000000000,0x0000010f400000000},
+ { 0x000000000000038f,0x00bc0a6a071222138,0x00000000002d052d,0x0000000068bcdd819,0x0000000000000000,0x00bc4000000000000,0x0000000000000000,0x0000000068c000000},
+ { 0x000000000006f45e,0x019a2ea69bf56df54,0x000000040fe7b6d2,0x00000000b7abcdc9d,0x0000000000000000,0x019a8000000000000,0x000000040e000000,0x00000000b7c000000},
+ { 0x00000000000002d3,0x013365af9fa9a671b,0x00000000000e2e6c,0x0000004d0113235a9,0x0000000000000000,0x01338000000000000,0x0000000000000000,0x0000004d200000000},
+ { 0x000000007034cfed,0x013d0bed8e4f33f9e,0x00000285e48111bc,0x00007d6d05415c0d4,0x0000000000000000,0x013d8000000000000,0x0000020000000000,0x00007d80000000000},
+ { 0x0000000000de550a,0x000000516b97915d3,0x0000000531f879d8,0x00000000681ff7cdf,0x0000000000000000,0x00000051800000000,0x0000000531800000,0x00000000682000000},
+ { 0x0000000000000012,0x0000b3173a63224f6,0x0000000000006acf,0x00001f9183f90f9a3,0x0000000000000000,0x0000b340000000000,0x0000000000000000,0x00001f98000000000},
+ { 0x00000000001dc276,0x005292904e91943fe,0x00000007cd98e88f,0x0000000578e79374e,0x0000000000000000,0x0052a000000000000,0x00000007c0000000,0x000000057a0000000},
+ { 0x0000000000000005,0x05ad24f1b5383f88c,0x0000000000000e2e,0x00003b0d07fb1561e,0x0000000000000000,0x05ae0000000000000,0x0000000000000000,0x00003b10000000000},
+ { 0x0000000000001c1d,0x000000021b28336a2,0x000000002a34312a,0x000000006bef6c505,0x0000000000000000,0x000000021c0000000,0x000000002a000000,0x000000006c0000000},
+ { 0x0000000001f57134,0x00176c8ac561f42d1,0x00000001fbb111e1,0x000003f91cc6f3990,0x0000000000000000,0x00177000000000000,0x0000000000000000,0x000003fa000000000},
+ { 0x0000000000068793,0x00017a8be1ecde1f4,0x00000000a1a61f45,0x00005d723ed8ae87f,0x0000000000000000,0x00017b00000000000,0x0000000000000000,0x00005d80000000000},
+ { 0x00000000000009e3,0x00036c5cca7227f81,0x0000000024232a4c,0x0000000008b10cf32,0x0000000000000000,0x00036d00000000000,0x0000000024200000,0x0000000008b200000},
+ { 0x0000000000036a6a,0x072a51b66ed158f96,0x00000000004e881f,0x000544ae3770572b3,0x0000000000000000,0x072c0000000000000,0x0000000000000000,0x00054600000000000},
+ { 0x0000000000000002,0x06be456c561035893,0x00000000000388f8,0x0000000002d925df5,0x0000000000000000,0x06c00000000000000,0x0000000000000000,0x0000000002da00000},
+ { 0x000000000013bdd5,0x007bd56ce46e313ac,0x0000000009d8a8e9,0x000362ddfb8c8edb2,0x0000000000000000,0x007be000000000000,0x0000000000000000,0x00036300000000000},
+ { 0x0000000000000038,0x0030741762daa9da2,0x00000000004f7aac,0x00005f8a9de975b1a,0x0000000000000000,0x00308000000000000,0x0000000000000000,0x00005fa0000000000},
+ { 0x000000000000003e,0x000000eb1481130af,0x00000000000000c6,0x0000000055c514ab4,0x0000000000000000,0x000000eb400000000,0x0000000000000000,0x0000000055e000000},
+ { 0x0000000000000016,0x0d6dfe3305232bf57,0x000000000000050d,0x00000000025aaf6f7,0x0000000000000000,0x0d700000000000000,0x0000000000000000,0x00000000025b00000},
+ { 0x0000000000000056,0x000000000058ad34b,0x000000000000031f,0x000000000002e4d49,0x0000000000000000,0x000000000058c0000,0x0000000000000000,0x000000000002e5000},
+ { 0x000001f14ffbebaf,0x0563740a1f17a8345,0x00000849d03c28e2,0x0002d2f262bb82521,0x0000000000000000,0x05640000000000000,0x0000000000000000,0x0002d300000000000},
+ { 0x00000000005cabb5,0x001862e3a0f31a9ad,0x0000000001f72279,0x0000000002e1b4952,0x0000000000000000,0x00186800000000000,0x0000000001f00000,0x0000000002e200000},
+ { 0x000000000000006b,0x00000000001974c3b,0x0000000000001f1e,0x00000000000186161,0x0000000000000000,0x00000000001978000,0x0000000000001800,0x00000000000186800},
+ { 0x0000000000000006,0x00000000072f022c6,0x00000000000008dd,0x00000000000eb9f25,0x0000000000000000,0x00000000073000000,0x0000000000000000,0x00000000000ebc000},
+ { 0x0000000000000015,0x000000022475b1673,0x0000000000000219,0x000000001d494eec6,0x0000000000000000,0x00000002250000000,0x0000000000000000,0x000000001d5000000},
+ { 0x0000000000000000,0x0000000616c741ffb,0x000000000000078a,0x00000000000001a66,0x0000000000000000,0x00000006180000000,0x0000000000000788,0x00000000000001a68},
+ { 0x00000000164df729,0x0007c6c5ab87c0509,0x000000769d025d5c,0x0000079571e95d9b2,0x0000000000000000,0x0007c800000000000,0x0000006000000000,0x00000796000000000},
+ { 0x0000000000000013,0x02ddd2d9e1a94853d,0x000000000003f5e7,0x0000000032c95000a,0x0000000000000000,0x02de0000000000000,0x0000000000000000,0x0000000032d000000},
+ { 0x0000000000016395,0x01b68070388f5e2e0,0x000000000009febd,0x000000000076870c4,0x0000000000000000,0x01b70000000000000,0x0000000000080000,0x000000000076a0000},
+ { 0x000000000000000b,0x00004351b5ae7ea75,0x0000000000000a63,0x0000000008c8609c5,0x0000000000000000,0x00004360000000000,0x0000000000000000,0x0000000008cc00000},
+ { 0x0000000000000003,0x0048419705bfcab55,0x002777c991511d21,0x001476479db39d289,0x0000000000000000,0x00486000000000000,0x0027000000000000,0x00147800000000000},
+ { 0x000000000000001a,0x0059af99e4a0823d1,0x0000000000751c9d,0x00000000001ac57ae,0x0000000000000000,0x0059c000000000000,0x0000000000750000,0x00000000001ac8000},
+ { 0x0000000000001d04,0x06dc9c6a2ae0ca24d,0x000000000001fe68,0x000001900d4cffa4c,0x0000000000000000,0x06de0000000000000,0x0000000000000000,0x00000190800000000},
+ { 0x0000000000f02de8,0x0eaf4f0d911117e17,0x0000000027e60f98,0x000008bf2b9af2789,0x0000000000000000,0x0eb00000000000000,0x0000000000000000,0x000008c0000000000},
+ { 0x000000000002caae,0x0034eb58656b66f0e,0x00000000142a4c5d,0x00032d073736961cf,0x0000000000000000,0x0034f000000000000,0x0000000000000000,0x00032e00000000000},
+ { 0x000000000000000a,0x0018ae1b183d29e66,0x00000000000d2837,0x0000000232027a8f7,0x0000000000000000,0x0018b000000000000,0x0000000000000000,0x00000002330000000},
+ { 0x0000000000000017,0x023709b5f43bc2d26,0x00000001e4a456e0,0x0000000070e46fb7c,0x0000000000000000,0x02380000000000000,0x00000001e4000000,0x00000000710000000},
+ { 0x0000000000000000,0x0000000054b4a736e,0x0000000000025675,0x0000000000a74e728,0x0000000000000000,0x0000000054c000000,0x0000000000000000,0x0000000000a780000},
+ { 0x0000003124b2391a,0x000f9f105d49e86e0,0x000000602ce622d9,0x0001a31604e4ecc22,0x0000000000000000,0x000fa000000000000,0x0000000000000000,0x0001a380000000000},
+ { 0x0000000007685fbe,0x000039af52cc46c89,0x0000000719831d6e,0x000000a2292c9462a,0x0000000000000000,0x000039b0000000000,0x0000000400000000,0x000000a2400000000},
+ { 0x000000000000534e,0x0001974ff8e3526a0,0x0000054492cb5bf2,0x000005f69351700a9,0x0000000000000000,0x00019780000000000,0x0000054000000000,0x000005f8000000000},
+ { 0x0000000000001b8c,0x009ec4ba5c20e5402,0x0000003c355e3a28,0x00003f98c56936a06,0x0000000000000000,0x009f0000000000000,0x0000000000000000,0x00003fa0000000000},
+ { 0x0000000000000017,0x0001cf8855a5013ee,0x0000000000020657,0x0000000000006b513,0x0000000000000000,0x0001d000000000000,0x0000000000020600,0x0000000000006b600},
+ { 0x000000039754ff3c,0x0ff82931098ca112c,0x0000000432e604d9,0x00000000f9a5ee063,0x0000000000000000,0x0ffc0000000000000,0x0000000430000000,0x00000000f9c000000},
+ { 0x00000000004d4d1b,0x0a043fb078b0ed276,0x0000000df2e0319f,0x00000846ae15fcbe3,0x0000000000000000,0x0a080000000000000,0x0000000000000000,0x00000848000000000},
+ { 0x0000000000000292,0x002eee299671232cf,0x000000000982d407,0x00000cfc9982990f4,0x0000000000000000,0x002ef000000000000,0x0000000000000000,0x00000d00000000000},
+ { 0x000000000000b824,0x000000000027a21d8,0x00000000000171e9,0x00000000001ca46a6,0x0000000000000000,0x000000000027b0000,0x0000000000010000,0x00000000001ca8000},
+ { 0x00000000000020e7,0x02414f2cda04ebe5b,0x00000000000b8689,0x00000000073147e95,0x0000000000000000,0x02420000000000000,0x0000000000000000,0x00000000073200000},
+ { 0x0000000000000002,0x01d53b673a794d075,0x000000124affa1b4,0x0099f5c12df79aa4f,0x0000000000000000,0x01d58000000000000,0x0000000000000000,0x009a0000000000000},
+ { 0x0000000000000003,0x0073c8ddbc170fa7f,0x00000000326f7c5a,0x00004f1747f5378e9,0x0000000000000000,0x0073e000000000000,0x0000000000000000,0x00004f20000000000},
+ { 0x0000000000000006,0x0010a4073831edd90,0x0000000000000034,0x00000000000acd921,0x0000000000000000,0x0010a800000000000,0x0000000000000000,0x00000000000ad0000},
+ { 0x0000000000000005,0x000014a203e7fb302,0x000000000001e237,0x00000000007c752a9,0x0000000000000000,0x000014a8000000000,0x0000000000000000,0x00000000007c80000},
+ { 0x0000000000000629,0x000000000471a5cee,0x0000000000001758,0x000000000005791d3,0x0000000000000000,0x00000000047200000,0x0000000000000000,0x0000000000057a000},
+ { 0x00000000000003a5,0x0000000000b9f3c41,0x0000000000001abf,0x0000000000002a4c8,0x0000000000000000,0x0000000000ba00000,0x0000000000001a00,0x0000000000002a500},
+ { 0x000000000000282c,0x0000de82c2a17ca16,0x000002e30f227e3c,0x0000003698ccfa97b,0x0000000000000000,0x0000dec0000000000,0x000002e300000000,0x000000369c0000000},
+ { 0x0000000000001ba4,0x064d06b4cbf7b94d9,0x00004a6f7697cd4b,0x0000ae468016e3e9a,0x0000000000000000,0x064e0000000000000,0x0000480000000000,0x0000ae80000000000},
+ { 0x0000000000000137,0x000b6ff420a4e8d17,0x0000000000026068,0x00000000005e7cbd0,0x0000000000000000,0x000b7000000000000,0x0000000000020000,0x00000000005e80000},
+ { 0x00000000000081fd,0x057ae26a84d78f596,0x0000000d3e893486,0x0001cef22d7a2cced,0x0000000000000000,0x057c0000000000000,0x0000000000000000,0x0001cf00000000000},
+ { 0x000000000000071d,0x000001705551a1474,0x0000000000003385,0x00000008d80a75d6d,0x0000000000000000,0x00000170800000000,0x0000000000000000,0x00000008dc0000000},
+ { 0x000000000000d552,0x0000038b0abc916a3,0x0000000001f82a97,0x00000042ecf9be98a,0x0000000000000000,0x0000038c000000000,0x0000000000000000,0x00000043000000000},
+ { 0x0000000000000071,0x062d44e39aad374db,0x0000000000002a17,0x0000019a20ee2ab9a,0x0000000000000000,0x062e0000000000000,0x0000000000000000,0x0000019a800000000},
+ { 0x0000000000000003,0x000001257ffdbe9e1,0x0000000000ec2a60,0x000000007068959fe,0x0000000000000000,0x00000125800000000,0x0000000000000000,0x00000000708000000},
+ { 0x0000000000000000,0x0002ebab18831ec8b,0x0000000000012821,0x0000000ed08cdd139,0x0000000000000000,0x0002ec00000000000,0x0000000000000000,0x0000000ed40000000},
+ { 0x000007c85e715e8a,0x00182d3204bd66774,0x007b6608398e09ee,0x0011fb8e90962f47d,0x0000000000000000,0x00183000000000000,0x007b400000000000,0x0011fc00000000000},
+ { 0x000000000000172e,0x00006ec8dd17cdd64,0x00000000001284e9,0x0000000003d19e513,0x0000000000000000,0x00006ee0000000000,0x0000000000100000,0x0000000003d200000},
+ { 0x00000000000007f4,0x000043155f12eaaf6,0x00000000000053eb,0x00000bec8db78968e,0x0000000000000000,0x00004320000000000,0x0000000000000000,0x00000bf0000000000},
+ { 0x000000000000096d,0x000498c57326f055c,0x0000000785e46017,0x00019806143649a8c,0x0000000000000000,0x00049a00000000000,0x0000000000000000,0x00019880000000000},
+ { 0x0000000000000d78,0x005e89a0f1df0a77f,0x000000019da2ce28,0x00000753ccb503831,0x0000000000000000,0x005ea000000000000,0x0000000000000000,0x00000754000000000},
+ { 0x00000000001b5570,0x0000087e0d150d73b,0x0000000df4942bfc,0x000000024ca360f57,0x0000000000000000,0x00000880000000000,0x0000000df0000000,0x000000024d0000000},
+ { 0x0000000000260984,0x000000183654720a1,0x0000000000e9f204,0x000000011e625b4e3,0x0000000000000000,0x00000018380000000,0x0000000000000000,0x000000011e8000000},
+ { 0x0000000000000003,0x00002ecc5fc3f0703,0x0000000000001f3d,0x000025d82a8c0b0a7,0x0000000000000000,0x00002ed0000000000,0x0000000000000000,0x000025e0000000000},
+ { 0x00000000000039d5,0x000dfe6fc8d17413f,0x00000011c698c18e,0x00000770de9dfd088,0x0000000000000000,0x000e0000000000000,0x0000000000000000,0x00000772000000000},
+ { 0x0000000000000006,0x01f5a1aff3753865e,0x000000117addb1d8,0x000000a8ae537f1cd,0x0000000000000000,0x01f60000000000000,0x0000001000000000,0x000000a8c00000000},
+ { 0x000000000000f34a,0x01010ded36df3d3df,0x000015108ef358e6,0x0000c150b5226a3cc,0x0000000000000000,0x01018000000000000,0x0000140000000000,0x0000c180000000000},
+ { 0x00000000000000d7,0x00000f9aaae732e0f,0x000000000001054a,0x00000a764fe49b9b2,0x0000000000000000,0x00000f9c000000000,0x0000000000000000,0x00000a78000000000},
+ { 0x000000000003abd9,0x03e7ea1c6de2bb3d7,0x0000000415f3e3b0,0x00002485a3a1367c2,0x0000000000000000,0x03e80000000000000,0x0000000000000000,0x00002490000000000},
+ { 0x0000000000000fc2,0x001e08bb89676bb5c,0x0000001abaa9eedc,0x000021e3ea308e7b6,0x0000000000000000,0x001e1000000000000,0x0000000000000000,0x000021f0000000000},
+ { 0x00000000000000eb,0x001800f07f98524ac,0x00000000000014f4,0x00000004acaf82478,0x0000000000000000,0x00180800000000000,0x0000000000000000,0x00000004ae0000000},
+ { 0x000000000007061d,0x00d55db0520ad1272,0x000000c49525772e,0x000002679b7843258,0x0000000000000000,0x00d58000000000000,0x000000c000000000,0x00000268000000000},
+ { 0x0000000000000007,0x0005e150657fc44d2,0x000000000000208d,0x0000000493a9366c4,0x0000000000000000,0x0005e200000000000,0x0000000000000000,0x00000004940000000},
+ { 0x000000039173d9db,0x0000ed8ceb6e128e1,0x0000002125fb6c3a,0x0000001417ec73c0d,0x0000000000000000,0x0000edc0000000000,0x0000002100000000,0x00000014180000000},
+ { 0x0000000000000003,0x000283baf8e43c537,0x0000000000001c82,0x000093c6db757ceb6,0x0000000000000000,0x00028400000000000,0x0000000000000000,0x00009400000000000},
+ { 0x0000000000002961,0x0000041a57fb4e0dc,0x00000000000107ba,0x00000000000618a06,0x0000000000000000,0x0000041c000000000,0x0000000000010000,0x0000000000061a000},
+ { 0x0000000000000104,0x000330504710af240,0x000001f04e1caec8,0x00006b46c66c8c22a,0x0000000000000000,0x00033100000000000,0x0000000000000000,0x00006b60000000000},
+ { 0x000000000010fd13,0x0000000e76b751f54,0x000000000d306c6f,0x00000000014ac72f3,0x0000000000000000,0x0000000e780000000,0x000000000d300000,0x00000000014ae0000},
+ { 0x0000000000000000,0x00b115daa904a8adf,0x00000000b3cd65f0,0x0039a1a2e78797ee2,0x0000000000000000,0x00b14000000000000,0x0000000000000000,0x0039b000000000000},
+ { 0x0000000000000073,0x00b300fd587d4c545,0x0000000000015c3e,0x0000c5c53b55a893f,0x0000000000000000,0x00b34000000000000,0x0000000000000000,0x0000c600000000000},
+ { 0x0000000000000005,0x00000051738cec74b,0x0000000000000317,0x000000000000079ef,0x0000000000000000,0x00000051800000000,0x0000000000000300,0x00000000000007a00},
+ { 0x0000000000000029,0x0000000014e55cc25,0x00000000000024b6,0x000000000bd284009,0x0000000000000000,0x0000000014e800000,0x0000000000000000,0x000000000bd400000},
+ { 0x00000000000001c4,0x000001588f5e4f095,0x0000000000001aef,0x0000007154d16170b,0x0000000000000000,0x00000159000000000,0x0000000000000000,0x00000071600000000},
+ { 0x00000000000096ae,0x00022e200850738d5,0x000001865a7ab198,0x000046a945f822182,0x0000000000000000,0x00022f00000000000,0x0000000000000000,0x000046c0000000000},
+ { 0x0000000000020094,0x000084bf1579bbd00,0x000000000014193c,0x000000001e28b0988,0x0000000000000000,0x000084c0000000000,0x0000000000000000,0x000000001e3000000},
+ { 0x0000000000000c12,0x000143306d87bf676,0x000000003e59be90,0x000000110cc255eaf,0x0000000000000000,0x00014380000000000,0x0000000000000000,0x00000011100000000},
+ { 0x00000000000039ff,0x0000006f3eac8b830,0x000000000089fb26,0x0000000000dcd92da,0x0000000000000000,0x0000006f400000000,0x0000000000880000,0x0000000000dd00000},
+ { 0x0000000000000008,0x0000000010c7ce5cd,0x0000000000000038,0x000000000000108b8,0x0000000000000000,0x0000000010c800000,0x0000000000000000,0x00000000000010900},
+ { 0x000000000070fc66,0x00002fa03c6a32e69,0x000000971de1206c,0x0000027d96d8588dd,0x0000000000000000,0x00002fb0000000000,0x0000009000000000,0x0000027e000000000},
+ { 0x00000014894b1e08,0x0e26eb44f1c34458e,0x0531b72f06937b74,0x00cebc2a3491f2ac1,0x0000000000000000,0x0e280000000000000,0x0530000000000000,0x00cec000000000000},
+ { 0x0000000000000e33,0x0000004e4ceb07257,0x0000005e4da120b7,0x00000006aedb7c8e5,0x0000000000000000,0x0000004e600000000,0x0000005e4c000000,0x00000006af0000000},
+ { 0x00004acf33a872f2,0x0fb53518919bab03e,0x000064c45dbf1222,0x001403690f8540c47,0x0000000000000000,0x0fb80000000000000,0x0000000000000000,0x00140800000000000},
+ { 0x0000000000344e60,0x01ed7f8444eb56a49,0x0000000266f7318b,0x0000052ce910a29b2,0x0000000000000000,0x01ed8000000000000,0x0000000000000000,0x0000052e000000000},
+ { 0x000000007dea9bbe,0x0007b42a87990985d,0x0007d9fa86284b1e,0x00026e4c660c6ea6c,0x0000000000000000,0x0007b600000000000,0x0007d80000000000,0x00026e80000000000},
+ { 0x0000000000000017,0x00000005dd82eb3f8,0x000000000000010c,0x00000000003a9ab95,0x0000000000000000,0x00000005de0000000,0x0000000000000000,0x00000000003aa0000},
+ { 0x000000000000ae11,0x013f680706fd62e37,0x000010790bee806c,0x00000490852cf900c,0x0000000000000000,0x013f8000000000000,0x0000107000000000,0x00000491000000000},
+ { 0x000000000000008d,0x0000000000a82b0a8,0x0000000000005fa8,0x000000000014aac5c,0x0000000000000000,0x0000000000a840000,0x0000000000000000,0x000000000014b0000},
+ { 0x0000000000000007,0x000cd583f79b693bc,0x0000002bce47c499,0x000000333a347906a,0x0000000000000000,0x000cd800000000000,0x0000002b00000000,0x00000033400000000},
+ { 0x000000000000771e,0x0000187796704d871,0x0000000000043147,0x0000084d0ce2f7d19,0x0000000000000000,0x00001878000000000,0x0000000000000000,0x00000850000000000},
+ { 0x000000000000439f,0x00000000000196a29,0x00000000000057a7,0x00000000000009d00,0x0000000000004000,0x00000000000197000,0x00000000000057a0,0x00000000000009d00},
+ { 0x000000000000000b,0x000007d9704667f81,0x000000000000003b,0x0000000005a7a6c12,0x0000000000000000,0x000007da000000000,0x0000000000000000,0x0000000005a800000},
+ { 0x0000000000000036,0x000106ded291059be,0x00000000000000f2,0x00000000000001e7f,0x0000000000000000,0x00010700000000000,0x00000000000000f0,0x00000000000001e80},
+ { 0x0000000000000023,0x00a20f556a334e852,0x00000001e9d913dd,0x00000365151ea672e,0x0000000000000000,0x00a24000000000000,0x0000000000000000,0x00000366000000000},
+ { 0x0000000000000001,0x000000007ed5bfca9,0x000000000299da84,0x000000000032a060c,0x0000000000000000,0x000000007ee000000,0x000000000299c000,0x000000000032a4000},
+ { 0x0000000000000008,0x0000000002fa7d89b,0x0000000000000009,0x000000000000006fd,0x0000000000000000,0x0000000002fb00000,0x0000000000000009,0x000000000000006fd},
+ { 0x000000000000000f,0x000003f13d124686f,0x00000000000009a3,0x00000242be9d45d80,0x0000000000000000,0x000003f2000000000,0x0000000000000000,0x00000243000000000},
+ { 0x0000000000428e71,0x0007be23e41c9e634,0x000000000b0e07d6,0x000006439eb2e494a,0x0000000000000000,0x0007c000000000000,0x0000000000000000,0x00000644000000000},
+ { 0x000000000000001b,0x0065cfa1b544d86ee,0x0000000728ae961f,0x00193104005239d49,0x0000000000000000,0x0065e000000000000,0x0000000000000000,0x00193800000000000},
+ { 0x00000000000041ab,0x005cb35bdba950583,0x0000000076853290,0x0000004053640a7e1,0x0000000000000000,0x005cc000000000000,0x0000000000000000,0x00000040600000000},
+ { 0x00000000000034fc,0x00000000ce12c9053,0x000000000001e44f,0x000000006b94e87be,0x0000000000000000,0x00000000ce4000000,0x0000000000000000,0x000000006ba000000},
+ { 0x0000000000000005,0x00010ddb558ef6886,0x000000000000029d,0x00000000003f7dba7,0x0000000000000000,0x00010e00000000000,0x0000000000000000,0x00000000003f80000},
+ { 0x000000000000001d,0x00000000003e56e08,0x00000000000000cf,0x0000000000001b53a,0x0000000000000000,0x00000000003e60000,0x0000000000000080,0x0000000000001b580},
+ { 0x0000000000000054,0x0024f690a3a5b23e4,0x00000032dc79c91f,0x00001faf48a7c95cf,0x0000000000000000,0x00250000000000000,0x0000000000000000,0x00001fb0000000000},
+ { 0x000000000000001d,0x00272bd0ecaa92281,0x000063950f81e80f,0x00009170578c224ac,0x0000000000000000,0x00273000000000000,0x0000600000000000,0x00009180000000000},
+ { 0x000000000000dd19,0x000000d3c841be45c,0x000000000697c42a,0x0000000a13b3da886,0x0000000000000000,0x000000d4000000000,0x0000000000000000,0x0000000a140000000},
+ { 0x000000000000009a,0x00f3ee0d979753f35,0x0000000004447ec8,0x00000c3cc1d96cbd7,0x0000000000000000,0x00f40000000000000,0x0000000000000000,0x00000c40000000000},
+ { 0x0000000000000d8b,0x00000001da202020e,0x000000000000c8c3,0x00000000004cce79f,0x0000000000000000,0x00000001da8000000,0x0000000000000000,0x00000000004ce0000},
+ { 0x000000000000002a,0x01ce03fe921b4f059,0x000000003874bd5d,0x000070a518a6bb023,0x0000000000000000,0x01ce8000000000000,0x0000000000000000,0x000070c0000000000},
+ { 0x0000000000000005,0x00000001e4d5d6531,0x00000000000036fc,0x0000000000143daf2,0x0000000000000000,0x00000001e50000000,0x0000000000000000,0x00000000001440000},
+ { 0x0000000001321c9c,0x01b718976293e98c1,0x0000000006c82b9c,0x01a899246543df164,0x0000000000000000,0x01b78000000000000,0x0000000000000000,0x01a90000000000000},
+ { 0x0000000000000002,0x0000000145cf5d29e,0x0000000001c4091f,0x000000008b1b0667c,0x0000000000000000,0x00000001460000000,0x0000000000000000,0x000000008b4000000},
+ { 0x0000000221a7eb3e,0x02118df2ca823a7d5,0x00000003143c29b1,0x00fe482afacc1635e,0x0000000000000000,0x02120000000000000,0x0000000000000000,0x00fe8000000000000},
+ { 0x000000000001bfbd,0x05448d37d1c501ce6,0x000000000029cb39,0x00000007bb6420375,0x0000000000000000,0x05460000000000000,0x0000000000000000,0x00000007bc0000000},
+ { 0x0000000000000003,0x0000023caa52f093d,0x00000000245f54a2,0x00000024bf107d3a6,0x0000000000000000,0x0000023d000000000,0x0000000000000000,0x00000024c00000000},
+ { 0x000000000000000e,0x00243d7b1e681fb4d,0x0000000000091b34,0x0000061b8d5168776,0x0000000000000000,0x00244000000000000,0x0000000000000000,0x0000061c000000000},
+ { 0x0000000000000003,0x00051607278490269,0x00000000000076c1,0x0000000000002ada0,0x0000000000000000,0x00051800000000000,0x0000000000007600,0x0000000000002ae00},
+ { 0x000000000018da11,0x05ce816c6679d7d61,0x00000000003f260c,0x00262b8db1e08f8da,0x0000000000000000,0x05d00000000000000,0x0000000000000000,0x00263000000000000},
+ { 0x00000000000002b6,0x052353aba2e29ce98,0x0000000000c19f98,0x0000006bd222dc231,0x0000000000000000,0x05240000000000000,0x0000000000000000,0x0000006be00000000},
+ { 0x0000000000001de8,0x013d4467a224ac584,0x0000000000039e33,0x0000000000be8c147,0x0000000000000000,0x013d8000000000000,0x0000000000000000,0x0000000000bec0000},
+ { 0x0000000000241421,0x0fdee972116f97e0b,0x0000008543465061,0x000000912517fa917,0x0000000000000000,0x0fe00000000000000,0x0000008400000000,0x00000091400000000},
+ { 0x000000000000000f,0x03e5a8bb588146ebf,0x000000000000001d,0x0000000001e1843d8,0x0000000000000000,0x03e60000000000000,0x0000000000000000,0x0000000001e200000},
+ { 0x0000000000000002,0x00000000032652937,0x0000000000000342,0x000000000000626f1,0x0000000000000000,0x00000000032700000,0x0000000000000200,0x00000000000062800},
+ { 0x0000000000000002,0x00000139d65b44da5,0x000000000005edbd,0x00000000009478e64,0x0000000000000000,0x0000013a000000000,0x0000000000040000,0x00000000009480000},
+ { 0x000000000000000d,0x0012d0dce5cbe1025,0x0000000000ec0102,0x000000001dc914af2,0x0000000000000000,0x0012d800000000000,0x0000000000800000,0x000000001dd000000},
+ { 0x00545a6875004889,0x06173028d66ddf413,0x050bb3adc8d180c1,0x009e47295774d64a0,0x0040000000000000,0x06180000000000000,0x050a000000000000,0x009e6000000000000},
+ { 0x0000000000000004,0x003629002e7bbb920,0x00000000b3f6eedc,0x0002ba2bef609e7a0,0x0000000000000000,0x00363000000000000,0x0000000000000000,0x0002bb00000000000},
+ { 0x00025af05244cd67,0x02c0f653221cc5d33,0x00ae1d21859b184a,0x000b667f23f9e8af6,0x0000000000000000,0x02c10000000000000,0x00ae1c0000000000,0x000b6680000000000},
+ { 0x0000000000000029,0x000000010ff66003e,0x0000000000009518,0x0000000000000b8e5,0x0000000000000000,0x00000001100000000,0x0000000000009510,0x0000000000000b8f0},
+ { 0x0000000000025d5a,0x00ecd4b0fb1e5a306,0x00000019b2d8640f,0x0001e62c0cb91a014,0x0000000000000000,0x00ed0000000000000,0x0000000000000000,0x0001e680000000000},
+ { 0x0000000000000000,0x0134bc9e2a3471adb,0x0000000000003bca,0x0000002306c9be1b6,0x0000000000000000,0x01350000000000000,0x0000000000000000,0x00000023100000000},
+ { 0x00000000002cfde8,0x000341f25a98ff0c8,0x00000000016bab40,0x0000000a28ecf729c,0x0000000000000000,0x00034200000000000,0x0000000000000000,0x0000000a2c0000000},
+ { 0x00000000000000b1,0x0000000007fd8c54b,0x00000000001356c7,0x0000000000036f6e4,0x0000000000000000,0x0000000007fe00000,0x0000000000135000,0x00000000000370000},
+ { 0x0000000193f826c9,0x000126058a0d9fb93,0x0000000e9f08be98,0x000012a1195d59387,0x0000000000000000,0x00012680000000000,0x0000000000000000,0x000012a8000000000},
+ { 0x0000000000000070,0x00018d985a2ce4fc1,0x000000000086dbbd,0x00000000018809e80,0x0000000000000000,0x00018e00000000000,0x0000000000800000,0x00000000018880000},
+ { 0x0000000000000165,0x06a0e3de647dc8492,0x00000000000001f3,0x000000000000012fe,0x0000000000000000,0x06a20000000000000,0x00000000000001f0,0x00000000000001300},
+ { 0x000000000000098e,0x00045adfa3f1118ab,0x00000120076647d0,0x0000090f7340bbfc9,0x0000000000000000,0x00045c00000000000,0x0000010000000000,0x00000910000000000},
+ { 0x0000000000110ae1,0x000002749903143bf,0x000000005ae5a631,0x0000002519c6a089b,0x0000000000000000,0x00000275000000000,0x0000000000000000,0x00000025200000000},
+ { 0x00000000000b0bd4,0x00235e68ed6280aa9,0x000000000bbd7564,0x00000000031ef9a26,0x0000000000000000,0x00236000000000000,0x000000000bb00000,0x00000000031f00000},
+ { 0x000000000006ec96,0x00479bc98c00451c7,0x00000020ca3fe929,0x000000069717d29e2,0x0000000000000000,0x0047a000000000000,0x00000020c0000000,0x00000006980000000},
+ { 0x0000000000009234,0x01b86257be281ff2c,0x00000000006f4fc3,0x000000000c798d54b,0x0000000000000000,0x01b88000000000000,0x0000000000400000,0x000000000c7c00000},
+ { 0x0000000000007c22,0x0000000073b4a7489,0x000000000002894e,0x000000000000b3ab7,0x0000000000000000,0x0000000073c000000,0x0000000000028800,0x000000000000b3c00},
+ { 0x000000000000002c,0x000015ff1696bf962,0x00000000000be744,0x000000000ce3028bf,0x0000000000000000,0x00001600000000000,0x0000000000000000,0x000000000ce400000},
+ { 0x000000003ebd0df0,0x0000328ca3636d548,0x000000745b4324ed,0x00000024eddfd03e4,0x0000000000000000,0x00003290000000000,0x0000007400000000,0x00000024f00000000},
+ { 0x0000000000000000,0x00a40b88f87cb2365,0x0000000005f7b295,0x00001432e76715315,0x0000000000000000,0x00a44000000000000,0x0000000000000000,0x00001438000000000},
+ { 0x0000000000000042,0x000000f02b24c881f,0x00000000000006e7,0x0000000b601c6a9f8,0x0000000000000000,0x000000f0400000000,0x0000000000000000,0x0000000b640000000},
+ { 0x0000000000000041,0x076c7d806813f4803,0x00000000000ab374,0x000000d187b99f45f,0x0000000000000000,0x076e0000000000000,0x0000000000000000,0x000000d1c00000000},
+ { 0x0000000000c10e2f,0x00006d9d67122b62c,0x00000000095b4d90,0x0000000079a3376d1,0x0000000000000000,0x00006da0000000000,0x0000000008000000,0x0000000079c000000},
+ { 0x000000000000a8c2,0x03e032022822d722b,0x000000000000b7cc,0x001a424a2d5611892,0x0000000000000000,0x03e10000000000000,0x0000000000000000,0x001a4800000000000},
+ { 0x000000000000000e,0x00001a5eac2e4a361,0x000000000022f5f8,0x0000000005fcc82c5,0x0000000000000000,0x00001a60000000000,0x0000000000200000,0x0000000005fe00000},
+ { 0x0000000000890217,0x012fed8f4020f871b,0x0000000012a3f142,0x003c3f5a9c52a8555,0x0000000000000000,0x01300000000000000,0x0000000000000000,0x003c4000000000000},
+ { 0x0000000000000179,0x00000000003bcad71,0x0000000000015354,0x0000000000058a0ce,0x0000000000000000,0x00000000003bd0000,0x0000000000014000,0x0000000000058c000},
+ { 0x00000000000025b9,0x000000001d25b19fb,0x000000000005b80a,0x0000000003e30e41a,0x0000000000000000,0x000000001d2800000,0x0000000000000000,0x0000000003e400000},
+ { 0x0000000000000e81,0x0000066db6a294642,0x0000000000094675,0x000000012ea517418,0x0000000000000000,0x0000066e000000000,0x0000000000000000,0x000000012f0000000},
+ { 0x000000000000004d,0x00001bf02c2d0f2fd,0x00000000000001af,0x00000000000013412,0x0000000000000000,0x00001bf8000000000,0x0000000000000180,0x00000000000013480},
+ { 0x0000000000006937,0x0006c195ac1d3f18f,0x000000052035afd6,0x0000009078a5190fa,0x0000000000000000,0x0006c200000000000,0x0000000400000000,0x00000090800000000},
+ { 0x0000000000000004,0x00005e13273e6cdcf,0x0000000001e30b23,0x000013a1b3396e3d0,0x0000000000000000,0x00005e20000000000,0x0000000000000000,0x000013a8000000000},
+ { 0x0000000000f406ec,0x000100ae787332a2c,0x00000000472e9bd8,0x00000ff52b5d93c41,0x0000000000000000,0x00010100000000000,0x0000000000000000,0x00000ff8000000000},
+ { 0x000000000000038e,0x00007d64ae54216fd,0x0000000000295409,0x000000023258ff6c3,0x0000000000000000,0x00007d80000000000,0x0000000000000000,0x00000002330000000},
+ { 0x000000000022870f,0x01a777926b8184f21,0x00000000fc677e86,0x00000018cc8a4fc0f,0x0000000000000000,0x01a78000000000000,0x0000000080000000,0x00000018d00000000},
+ { 0x0000000000008ac9,0x00062d7f89577dc6a,0x0000000006124c26,0x0000ea926ba66840c,0x0000000000000000,0x00062e00000000000,0x0000000000000000,0x0000eac0000000000},
+ { 0x0000000000000016,0x0000000c29e992c77,0x0000000000001ec2,0x000000000000089f0,0x0000000000000000,0x0000000c2c0000000,0x0000000000001ec0,0x00000000000008a00},
+ { 0x000000002ff2f25e,0x0000c55322f79925b,0x000000065fde1e23,0x00000017a6e9e7510,0x0000000000000000,0x0000c580000000000,0x0000000600000000,0x00000017a80000000},
+ { 0x0000000000000005,0x00684d474ff010fa8,0x02cc899dcc887d46,0x003ea3dea4be63fca,0x0000000000000000,0x00686000000000000,0x02cc800000000000,0x003ea800000000000},
+ { 0x0000000000000003,0x007d3a9541983e13c,0x0000000000003672,0x0003859763f14c0d7,0x0000000000000000,0x007d4000000000000,0x0000000000000000,0x00038600000000000},
+ { 0x0000000000385f1d,0x000000cf165ce2f07,0x00000001111eef1c,0x00000000a5c3d73c5,0x0000000000000000,0x000000cf400000000,0x0000000110000000,0x00000000a60000000},
+ { 0x0000000000000066,0x000601d5cd303dc9a,0x00000000106d62c7,0x000000001546514c1,0x0000000000000000,0x00060200000000000,0x0000000010000000,0x00000000154800000},
+ { 0x0000000000000006,0x00000000a3349ff97,0x000000000719f3d1,0x00000000012babc63,0x0000000000000000,0x00000000a34000000,0x0000000007180000,0x00000000012bc0000},
+ { 0x00000000000067dd,0x000000018f68d33c0,0x000000000006369d,0x000000000f1a2789d,0x0000000000000000,0x000000018f8000000,0x0000000000000000,0x000000000f1c00000},
+ { 0x0000000000003673,0x00001a0f3d00dc555,0x00000001312b9eaa,0x0000000e203a7e3b9,0x0000000000000000,0x00001a10000000000,0x0000000100000000,0x0000000e240000000},
+ { 0x0007ae4e7b647249,0x01376a09d00c85a28,0x0010ae723f3f517a,0x0086afcf39c960688,0x0000000000000000,0x01378000000000000,0x0010000000000000,0x0086c000000000000},
+ { 0x0000000000c24484,0x00074a4e3f5b673f4,0x000001645e33da1d,0x000000566a7ec21cc,0x0000000000000000,0x00074c00000000000,0x0000016400000000,0x00000056800000000},
+ { 0x00000002b9561150,0x00937083877ae3c75,0x0000b380ad2b60ac,0x000053feebd5ab6a2,0x0000000000000000,0x00938000000000000,0x0000b20000000000,0x00005400000000000},
+ { 0x000000000002dd14,0x000004ee402fb20f1,0x0000000003b53760,0x00000001243de0615,0x0000000000000000,0x000004f0000000000,0x0000000000000000,0x00000001248000000},
+ { 0x000000000000393d,0x00000000081b240e1,0x0000000000044261,0x000000000022261d8,0x0000000000000000,0x00000000081c00000,0x0000000000040000,0x00000000002230000},
+ { 0x0000000000000111,0x0067c8dd932056680,0x0000000000000da8,0x0000000000005542b,0x0000000000000000,0x0067e000000000000,0x0000000000000c00,0x00000000000055600},
+ { 0x0000000000000076,0x000076bacdc772064,0x0000000000003249,0x000000009efd3dd12,0x0000000000000000,0x000076c0000000000,0x0000000000000000,0x000000009f0000000},
+ { 0x0000000000000013,0x00000001a5c76acf6,0x00000003dee00f8e,0x00000001a4d7f81f1,0x0000000000000000,0x00000001a60000000,0x00000003d8000000,0x00000001a50000000},
+ { 0x0000000000000075,0x0011c61bd2a8ed411,0x000000337957a7b8,0x00001eb54d7b6e81d,0x0000000000000000,0x0011c800000000000,0x0000000000000000,0x00001eb8000000000},
+ { 0x00000021cc043677,0x01e3f367069035887,0x0000005a991abc9a,0x00000017f5b938048,0x0000000000000000,0x01e40000000000000,0x0000005a80000000,0x00000017f80000000},
+ { 0x000000000000000d,0x000030f328e25995b,0x0000000000cde183,0x0000000009348363a,0x0000000000000000,0x00003100000000000,0x0000000000c00000,0x00000000093800000},
+ { 0x0000000000000054,0x0012f6e07bb2e1286,0x00000000007ca75d,0x0001841aa3b754714,0x0000000000000000,0x0012f800000000000,0x0000000000000000,0x00018480000000000},
+ { 0x000000000517d634,0x00000003f69c53ddc,0x0000000009743f6a,0x000000005f9e4a7a2,0x0000000000000000,0x00000003f70000000,0x0000000008000000,0x000000005fa000000},
+ { 0x0000000001a1729b,0x019b89cc0b0af2a11,0x00000000027bcc4b,0x0000000000a8aea45,0x0000000000000000,0x019c0000000000000,0x0000000002780000,0x0000000000a8c0000},
+ { 0x0000000000016e17,0x00000034c3f9e94bb,0x0000000000090c5d,0x00000002b35174f44,0x0000000000000000,0x00000034d00000000,0x0000000000000000,0x00000002b40000000},
+ { 0x000000000000055c,0x004928c6d3e754441,0x000000007f36701b,0x0000044520cc6355f,0x0000000000000000,0x00494000000000000,0x0000000000000000,0x00000446000000000},
+ { 0x00000000025abcdb,0x000e0b1165b59d180,0x00000b84ff824760,0x000128903b466dee5,0x0000000000000000,0x000e0c00000000000,0x0000080000000000,0x00012900000000000},
+ { 0x0000000000000432,0x0083859d38e440c47,0x0000000000021897,0x00000001b40a93f41,0x0000000000000000,0x0083c000000000000,0x0000000000000000,0x00000001b48000000},
+ { 0x0000000000000012,0x000000000003720c1,0x000000000000007e,0x000000000000001df,0x0000000000000000,0x00000000000373000,0x000000000000007e,0x000000000000001df},
+ { 0x0000000000006b7b,0x0045e5a13c37db981,0x000000000043e6e5,0x0000007c88c309cba,0x0000000000000000,0x00460000000000000,0x0000000000000000,0x0000007ca00000000},
+ { 0x000000000000000b,0x000000000000258e5,0x000000000000000f,0x000000000000000ee,0x0000000000000000,0x00000000000025900,0x000000000000000f,0x000000000000000ee},
+ { 0x000094c8e0c76265,0x00f97fc3e9fb551b7,0x00a5eea665ad709f,0x001e684d61d1a6470,0x0000000000000000,0x00f98000000000000,0x00a5800000000000,0x001e7000000000000},
+ { 0x000000000000215c,0x006c81638e8c69a02,0x00000002b73ff0d3,0x00000b24b9b0f9224,0x0000000000000000,0x006ca000000000000,0x0000000000000000,0x00000b28000000000},
+ { 0x00000000000004bf,0x01e05bc33e20dc00d,0x000000000000e6d6,0x0003cda63fb139cad,0x0000000000000000,0x01e08000000000000,0x0000000000000000,0x0003ce00000000000},
+ { 0x0000000000001290,0x0135769bb4d4dce39,0x00000000008ad99c,0x00001cc54541a4d0d,0x0000000000000000,0x01358000000000000,0x0000000000000000,0x00001cc8000000000},
+ { 0x0000000000016792,0x00005981b0724aab6,0x000000000001ad5c,0x00002f95c8215c602,0x0000000000000000,0x000059a0000000000,0x0000000000000000,0x00002fa0000000000},
+ { 0x0000000012f2be43,0x00000000404b5b47a,0x000000005f4245f8,0x00000000151b7e2d6,0x0000000012000000,0x00000000405000000,0x000000005f400000,0x00000000151c00000},
+ { 0x0000000000521ecf,0x00031d786dadffa75,0x0000091f2513a967,0x000066716dda494f2,0x0000000000000000,0x00031e00000000000,0x0000080000000000,0x00006680000000000},
+ { 0x000000000000000a,0x000f2f2de118ba678,0x00000000000000e5,0x00001677ba9530c7d,0x0000000000000000,0x000f3000000000000,0x0000000000000000,0x00001678000000000},
+ { 0x0000000000739d9f,0x01ed4614cc6f55524,0x0007f82fe60a8bd8,0x017b90d7ef6a0a787,0x0000000000000000,0x01ed8000000000000,0x0000000000000000,0x017c0000000000000},
+ { 0x000000000000023b,0x0051bb0735fb259b3,0x000000000000161b,0x0000000000c81ed9a,0x0000000000000000,0x0051c000000000000,0x0000000000000000,0x0000000000c840000},
+ { 0x0000000000000003,0x000394c80e8d8142c,0x0000000000172a9f,0x000000042f8df0679,0x0000000000000000,0x00039500000000000,0x0000000000000000,0x00000004300000000},
+ { 0x0000000000000011,0x0004872cb8e303b29,0x000000000000001f,0x0000000163b27e2ac,0x0000000000000000,0x00048800000000000,0x0000000000000000,0x00000001640000000},
+ { 0x0000000001aae0de,0x02629eccc34a8aeac,0x000000007b4932a2,0x000cc03d7cc94d2b1,0x0000000000000000,0x02630000000000000,0x0000000000000000,0x000cc400000000000},
+ { 0x00000000000001e0,0x00020baea4b8cd20a,0x000000000296342d,0x000000000310eb4eb,0x0000000000000000,0x00020c00000000000,0x0000000002900000,0x00000000031100000},
+ { 0x000000002c165c3d,0x022ba3e1b272dc484,0x000000209bce182c,0x0000059b16565e554,0x0000000000000000,0x022c0000000000000,0x0000002000000000,0x0000059c000000000},
+ { 0x000000000000000e,0x00052919a6f99c02a,0x000000719b63acc0,0x00000008ced26ba17,0x0000000000000000,0x00052a00000000000,0x0000007198000000,0x00000008cf0000000},
+ { 0x0000000000001aa5,0x00001d961bac52f99,0x0000000000007285,0x00000000000008429,0x0000000000000000,0x00001d98000000000,0x0000000000007280,0x00000000000008430},
+ { 0x0000000000001ae9,0x000fd0f8659110f17,0x0000000027113941,0x00000003c2ef29ef7,0x0000000000000000,0x000fd400000000000,0x0000000020000000,0x00000003c30000000},
+ { 0x0000000000000035,0x0000b352f49a1ffc5,0x000000000aae19e7,0x00000000012c2aca0,0x0000000000000000,0x0000b380000000000,0x000000000aac0000,0x00000000012c40000},
+ { 0x0000000004da0fed,0x00000fe4e1bc06eef,0x000000c5d350ad99,0x00000b848f58697a8,0x0000000000000000,0x00000fe8000000000,0x000000c000000000,0x00000b88000000000},
+ { 0x0000000000000027,0x01c82b56acfbd7ebf,0x000000000000005c,0x0000000000001bba2,0x0000000000000000,0x01c88000000000000,0x0000000000000000,0x0000000000001bc00},
+ { 0x0000000000000012,0x00000000a10d56f3a,0x000000000000001b,0x00000000000f48b90,0x0000000000000000,0x00000000a14000000,0x0000000000000000,0x00000000000f4c000},
+ { 0x000000000000009c,0x000002783f48acf2f,0x00000000dd0bf605,0x0000000011511080d,0x0000000000000000,0x00000279000000000,0x00000000dd000000,0x00000000115200000},
+ { 0x0000000001730bc3,0x0001c5950242dbc76,0x00000001591193d6,0x00000018f3ef0b09c,0x0000000000000000,0x0001c600000000000,0x0000000100000000,0x00000018f80000000},
+ { 0x00000001456b50c3,0x000f4b4a714eb5390,0x0000012c5522f9e2,0x0000044215fcf3690,0x0000000000000000,0x000f4c00000000000,0x0000012000000000,0x00000444000000000},
+ { 0x0000000000038dfd,0x00002b222183353c3,0x00000000000c587f,0x0000000002e25aee2,0x0000000000000000,0x00002b30000000000,0x0000000000000000,0x0000000002e300000},
+ { 0x00000000000013a0,0x000000027a6e4d202,0x00000000000020e0,0x000000000001750cb,0x0000000000000000,0x000000027b0000000,0x0000000000002000,0x00000000000175800},
+ { 0x000000000000003a,0x0015ac27358c6e4f9,0x000000000c8c3129,0x00121a1936729bfab,0x0000000000000000,0x0015b000000000000,0x0000000000000000,0x00122000000000000},
+ { 0x000000000000001f,0x0000a1146ada3938f,0x000000000002f757,0x000000316a20d9a6e,0x0000000000000000,0x0000a140000000000,0x0000000000000000,0x00000031700000000},
+ { 0x000000000005f479,0x000f23f4a148ae179,0x000000000096e1ec,0x000000001f12c2bff,0x0000000000000000,0x000f2400000000000,0x0000000000800000,0x000000001f1800000},
+ { 0x0000000018ee406e,0x0009d757864452040,0x000050af37243adb,0x00000ee3dc0f13f27,0x0000000000000000,0x0009d800000000000,0x0000508000000000,0x00000ee4000000000},
+ { 0x0000000000000014,0x0000577d7d4ebd672,0x0000000000063df0,0x000000000031211ee,0x0000000000000000,0x00005780000000000,0x0000000000060000,0x00000000003130000},
+ { 0x0000000000000004,0x00000064021c3fb7a,0x000000000000029a,0x00000000000005fe0,0x0000000000000000,0x00000064200000000,0x0000000000000280,0x00000000000005fe0},
+ { 0x0000000000e6a95a,0x000000576401116c0,0x00000000297b2668,0x000000012a7fa39d8,0x0000000000000000,0x00000057800000000,0x0000000028000000,0x000000012a8000000},
+ { 0x000000000071c54d,0x0000096eb7df7f460,0x0000000038bdf4f7,0x0000002c99c2a10e2,0x0000000000000000,0x00000970000000000,0x0000000000000000,0x0000002ca00000000},
+ { 0x0000000000027fe4,0x00000321ff3f32dfb,0x0000000d99fb95f8,0x0000002eca8302d15,0x0000000000000000,0x00000322000000000,0x0000000d00000000,0x0000002ed00000000},
+ { 0x0000000000000143,0x0000000000d49f4ec,0x000000000001acbc,0x0000000000002ddf0,0x0000000000000000,0x0000000000d4c0000,0x000000000001ac80,0x0000000000002de00},
+ { 0x000000000000005b,0x0000025b604d1ec9b,0x0000000000000197,0x000000000001c5601,0x0000000000000000,0x0000025c000000000,0x0000000000000000,0x000000000001c5800},
+ { 0x0000000000000028,0x000013af9c4580f22,0x0000000000000276,0x000000019fdf824ef,0x0000000000000000,0x000013b0000000000,0x0000000000000000,0x00000001a00000000},
+ { 0x0000000000000002,0x00000004285c8bdc0,0x0000000000000021,0x00000000000001cf3,0x0000000000000000,0x000000042a0000000,0x0000000000000020,0x00000000000001cf8},
+ { 0x0000000000000007,0x0000e93e3740486b9,0x0000000000003d33,0x000000d8d57d92f17,0x0000000000000000,0x0000e940000000000,0x0000000000000000,0x000000d9000000000},
+ { 0x0000000000000112,0x0000000032397e827,0x0000000000000637,0x0000000008f19db5a,0x0000000000000000,0x00000000324000000,0x0000000000000000,0x0000000008f400000},
+ { 0x0000000000039deb,0x0000000384b0af104,0x000000001f49ccb9,0x000000004ce58af60,0x0000000000000000,0x00000003850000000,0x000000001e000000,0x000000004d0000000},
+ { 0x000000000000a269,0x0010bad60b7ede73d,0x000000000022cc50,0x0000000000063ffbb,0x0000000000000000,0x0010c000000000000,0x000000000022c000,0x00000000000640000},
+ { 0x0000000000000415,0x007338061914e8b4a,0x000000000f404baa,0x000000005b0025405,0x0000000000000000,0x00734000000000000,0x000000000e000000,0x000000005b2000000},
+ { 0x000000000000001c,0x00000012ec8b57ac6,0x000000057cfee52b,0x0000000699d5f1df9,0x0000000000000000,0x00000012f00000000,0x0000000560000000,0x000000069a0000000},
+ { 0x0000000066327993,0x0000043a888c44bdf,0x00000005e3e5ec23,0x000000118ba33b391,0x0000000000000000,0x0000043c000000000,0x0000000580000000,0x00000011900000000},
+ { 0x000000000000124d,0x0d08ed74a5c27b15c,0x0000000000002837,0x000000037bc82f06a,0x0000000000000000,0x0d0c0000000000000,0x0000000000000000,0x000000037c0000000},
+ { 0x00000000000000bb,0x0685a50b9948aca84,0x000000000000125e,0x000000000f41d1017,0x0000000000000000,0x06860000000000000,0x0000000000000000,0x000000000f4400000},
+ { 0x0000000000000000,0x0000002a755582d96,0x00000000452ade6a,0x00000014aa9f6e38a,0x0000000000000000,0x0000002a800000000,0x0000000000000000,0x00000014b00000000},
+ { 0x0000000000000000,0x0001c1d253697de7d,0x000000008b4c7e0f,0x000027add881c8ac0,0x0000000000000000,0x0001c200000000000,0x0000000000000000,0x000027b0000000000},
+ { 0x000000001d4253cd,0x000001d5cf9acfd87,0x00000002f88b3f26,0x000000002fb9756ef,0x0000000000000000,0x000001d6000000000,0x00000002f88b0000,0x000000002fb980000},
+ { 0x000000000001a48e,0x00029fa0f79df1125,0x00000000000f5f40,0x00000002d48ae55b1,0x0000000000000000,0x0002a000000000000,0x0000000000000000,0x00000002d50000000},
+ { 0x000000000000001b,0x01d28c5dad0fd237d,0x00000000039c817f,0x000029660e8ef233e,0x0000000000000000,0x01d30000000000000,0x0000000000000000,0x00002970000000000},
+ { 0x0000000000000019,0x0017d088ee334eeaa,0x00000000000000fe,0x000000009aa5e079d,0x0000000000000000,0x0017d800000000000,0x0000000000000000,0x000000009ac000000},
+ { 0x000000000000095b,0x00c5b234052a99cc1,0x00000000000042ca,0x0000000046085b4c5,0x0000000000000000,0x00c5c000000000000,0x0000000000000000,0x00000000462000000},
+ { 0x0000000003b8fb11,0x0001e89d6419a9ee0,0x00000001dc8270c6,0x000000173455db31f,0x0000000000000000,0x0001e900000000000,0x0000000180000000,0x00000017380000000},
+ { 0x0000000000000006,0x0000000f9a94d5ef3,0x000000000000193d,0x00000000007d22a89,0x0000000000000000,0x0000000f9c0000000,0x0000000000000000,0x00000000007d40000},
+ { 0x0000000000007c68,0x00912a7985f05fb12,0x0000000000024876,0x00000003d77256453,0x0000000000000000,0x00914000000000000,0x0000000000000000,0x00000003d80000000},
+ { 0x000000000000002d,0x00000000fd9be5532,0x0000000000022c48,0x00000000000bd5780,0x0000000000000000,0x00000000fdc000000,0x0000000000020000,0x00000000000bd8000},
+ { 0x0000003084866bc0,0x062f410d0e176f6ce,0x006856647667558a,0x000caf8ab3e84320d,0x0000000000000000,0x06300000000000000,0x0068400000000000,0x000cb000000000000},
+ { 0x0000000001118947,0x00013c2df64c58e92,0x0000015e2fea4a5d,0x000018e571a6315b7,0x0000000000000000,0x00013c80000000000,0x0000010000000000,0x000018e8000000000},
+ { 0x000000000002f7fe,0x0307803f70dded1d2,0x000000003b0ba503,0x0000018fdb79a4f98,0x0000000000000000,0x03080000000000000,0x0000000000000000,0x00000190000000000},
+ { 0x0000000000000003,0x00002bfe998f8cedb,0x000000001a02922a,0x00000001604310198,0x0000000000000000,0x00002c00000000000,0x0000000018000000,0x00000001608000000},
+ { 0x00000000253c77c9,0x012136c8971f474ef,0x0000000ddbe63e8e,0x00029be589c7bebbc,0x0000000000000000,0x01218000000000000,0x0000000000000000,0x00029c00000000000},
+ { 0x0000000000001b1f,0x000007f108b3e9792,0x000000031694b862,0x0000003b0a23e09ad,0x0000000000000000,0x000007f2000000000,0x0000000300000000,0x0000003b100000000},
+ { 0x00000000000006d4,0x00000000077b4fbf1,0x0000000000003804,0x00000000006b7c3a0,0x0000000000000000,0x00000000077c00000,0x0000000000000000,0x00000000006b80000},
+ { 0x00000000000000a9,0x00000000585c61db2,0x00000000000001c2,0x0000000042c5b68c4,0x0000000000000000,0x00000000586000000,0x0000000000000000,0x0000000042e000000},
+ { 0x000000000000000e,0x00000000000009585,0x0000000000000294,0x00000000000000746,0x0000000000000000,0x000000000000095c0,0x0000000000000294,0x00000000000000746},
+ { 0x00000000000002b1,0x0712bdd0e6d78959d,0x0000003db5ceea06,0x0000360f1b4b5c7ff,0x0000000000000000,0x07140000000000000,0x0000000000000000,0x00003610000000000},
+ { 0x0000000000000001,0x0000001b95b685f36,0x000000000000001a,0x0000000005fbd718a,0x0000000000000000,0x0000001b980000000,0x0000000000000000,0x0000000005fc00000},
+ { 0x0000000000000027,0x000000fb51b460cc6,0x0000000000000ecc,0x0000000047d5355ae,0x0000000000000000,0x000000fb800000000,0x0000000000000000,0x0000000047e000000},
+ { 0x000000000003f0b9,0x00003538640ff2292,0x0000000013bca3eb,0x000021fc7c6f82fc5,0x0000000000000000,0x00003540000000000,0x0000000000000000,0x00002200000000000},
+ { 0x0000000000000086,0x01e3f5950595b9c2c,0x0000000cd925d84b,0x00ff6b37b304a794a,0x0000000000000000,0x01e40000000000000,0x0000000000000000,0x00ff8000000000000},
+ { 0x0000000000000036,0x0000000000f16ab6d,0x000000000005948d,0x000000000027dfe5c,0x0000000000000000,0x0000000000f180000,0x0000000000050000,0x000000000027e0000},
+ { 0x00000000008cc9dc,0x000dc45f95e1d2164,0x000000074bc64815,0x00000635abdfabd1b,0x0000000000000000,0x000dc800000000000,0x0000000000000000,0x00000636000000000},
+ { 0x0000000000001cbe,0x03efc781990e35260,0x00000c758931403a,0x0000096dcc62efcd9,0x0000000000000000,0x03f00000000000000,0x00000c4000000000,0x00000970000000000},
+ { 0x0000000000000001,0x0000000000913c806,0x0000000000000079,0x0000000000000a11d,0x0000000000000000,0x00000000009140000,0x0000000000000040,0x0000000000000a140},
+ { 0x0000000000000073,0x0000019e383116132,0x0000000000000201,0x000000000002abd74,0x0000000000000000,0x0000019e800000000,0x0000000000000000,0x000000000002ac000},
+ { 0x0000000000039016,0x000073cafd010bf8a,0x0000007bb80c8480,0x0000001cf4c0ad09c,0x0000000000000000,0x000073e0000000000,0x0000007b80000000,0x0000001cf80000000},
+ { 0x0000000004d5a6ce,0x0000e89fb6aa991b9,0x00000172ac62b209,0x00000b37aed1744ac,0x0000000000000000,0x0000e8c0000000000,0x0000014000000000,0x00000b38000000000},
+ { 0x000000000014a8df,0x0005875271c77b6ce,0x000e23e50d15181a,0x0001ff475723904c5,0x0000000000000000,0x00058800000000000,0x000e200000000000,0x0001ff80000000000},
+ { 0x000000000000000c,0x0043549fced37e526,0x000309a4bd00fbf6,0x003a3acb77fda684e,0x0000000000000000,0x00436000000000000,0x0003000000000000,0x003a4000000000000},
+ { 0x0000000000000002,0x016a84d514877addd,0x00000000000012f4,0x000052f768ed60373,0x0000000000000000,0x016b0000000000000,0x0000000000000000,0x00005300000000000},
+ { 0x0000000000000001,0x00004c720016ff12d,0x00000000000d895d,0x0000000000069b2d7,0x0000000000000000,0x00004c80000000000,0x00000000000d8000,0x0000000000069c000},
+ { 0x0000000000008c9e,0x000002bca1feb7892,0x000000065989207f,0x000000273c1561317,0x0000000000000000,0x000002bd000000000,0x0000000600000000,0x00000027400000000},
+ { 0x0000000000000005,0x0000000000bdc3629,0x0000000000358964,0x00000000004927fa8,0x0000000000000000,0x0000000000be00000,0x0000000000340000,0x00000000004940000},
+ { 0x000000000000000d,0x0000000064c75ffeb,0x000000000000ac39,0x000000000163f1412,0x0000000000000000,0x0000000064e000000,0x0000000000000000,0x00000000016400000},
+ { 0x00000000000007d7,0x003e97c8eb7716d5a,0x00000040ab061d6d,0x000055e450455677b,0x0000000000000000,0x003ea000000000000,0x0000000000000000,0x00005600000000000},
+ { 0x000001c14c9f9bf4,0x0010d6da94175d5d6,0x00000959080e8d76,0x000000fb6a0fad6fe,0x0000000000000000,0x0010d800000000000,0x0000095800000000,0x000000fb800000000},
+ { 0x0000000000000025,0x00000bd194ca2bcc2,0x0000000002865f69,0x000000000779e69a7,0x0000000000000000,0x00000bd4000000000,0x0000000002800000,0x00000000077a00000},
+ { 0x0000000000000004,0x00000f05c9919459c,0x000000000000611a,0x00000000000038fd8,0x0000000000000000,0x00000f08000000000,0x0000000000006100,0x00000000000039000},
+ { 0x0000000000000000,0x000d29d0e1cece9bd,0x000000003eadbf55,0x00000000bfab18ddc,0x0000000000000000,0x000d2c00000000000,0x000000003c000000,0x00000000bfc000000},
+ { 0x0000000000053948,0x0000744cc4151abea,0x0000000000072ed3,0x0000000716b25f64a,0x0000000000000000,0x00007460000000000,0x0000000000000000,0x00000007180000000},
+ { 0x0000000000000f1a,0x00004bc132f1d9c74,0x00021e560db9e1d1,0x00003bb22ab3e5d43,0x0000000000000000,0x00004be0000000000,0x00021e0000000000,0x00003bb8000000000},
+ { 0x00000f7aaf099b5e,0x05710662b1e641a03,0x00043daa96161d14,0x011679025d206b190,0x0000000000000000,0x05720000000000000,0x0000000000000000,0x01168000000000000},
+ { 0x0000000010dbf754,0x000347f0996e29056,0x00000477e6a8a9a8,0x0000fcbd3dcb5b994,0x0000000000000000,0x00034800000000000,0x0000040000000000,0x0000fcc0000000000},
+ { 0x0000009f169f65b9,0x0002298069a721c07,0x0000780895a1e1d3,0x0000d9db88005cb63,0x0000000000000000,0x00022a00000000000,0x0000780000000000,0x0000da00000000000},
+ { 0x0000000000000032,0x000eac2170d72be02,0x000005eb349b5d8d,0x000030d8e1bcc0619,0x0000000000000000,0x000eb000000000000,0x0000050000000000,0x000030e0000000000},
+ { 0x000000000007862b,0x00000056d448f77a0,0x0000000f64b6e26d,0x000000310e31277f7,0x0000000000000000,0x00000056e00000000,0x0000000f00000000,0x00000031100000000},
+ { 0x000000000000006d,0x00063ee10f856367e,0x0000074faec8efec,0x000003bf5bdb70ef0,0x0000000000000000,0x00064000000000000,0x0000074000000000,0x000003c0000000000},
+ { 0x0000000000000002,0x0007690ff3f83986d,0x00000000009f0ff0,0x00000001f2135c057,0x0000000000000000,0x00076a00000000000,0x0000000000000000,0x00000001f28000000},
+ { 0x0000000000000064,0x0000008910443287e,0x000000000007ef1d,0x0000000397d008466,0x0000000000000000,0x00000089400000000,0x0000000000000000,0x00000003980000000},
+ { 0x00000000003e4a73,0x00006b9393c29085b,0x00000000a0711ca4,0x00000001069ea8749,0x0000000000000000,0x00006ba0000000000,0x00000000a0000000,0x0000000106c000000},
+ { 0x00000000001034a4,0x019666488ba50f6c5,0x00000000037ca378,0x0000000c17f08ded9,0x0000000000000000,0x01968000000000000,0x0000000000000000,0x0000000c180000000},
+ { 0x00000001e02deecb,0x000000ada53394f95,0x00000001e9999313,0x000000018567b9a2b,0x0000000000000000,0x000000adc00000000,0x00000001e8000000,0x00000001858000000},
+ { 0x0000000000000af3,0x006c491a76a1c153a,0x000000000821d8bf,0x00045c861fb24eb99,0x0000000000000000,0x006c6000000000000,0x0000000000000000,0x00045e00000000000},
+ { 0x0000000000003faf,0x000002310cd942481,0x000000000000f1f4,0x0000000000005d150,0x0000000000000000,0x00000232000000000,0x000000000000f000,0x0000000000005d200},
+ { 0x00000000000b65a8,0x007f2cba7ed9f31a2,0x0000000000de3816,0x00033abc6ff5c1e4f,0x0000000000000000,0x007f4000000000000,0x0000000000000000,0x00033b00000000000},
+ { 0x000000000002cc31,0x016dee3f912254729,0x0000000001a3eed4,0x0001e901e6e2f6975,0x0000000000000000,0x016e0000000000000,0x0000000000000000,0x0001e980000000000},
+ { 0x0000000000048cae,0x00015741d97b53637,0x000038406d8c62ea,0x0000376e2153cc346,0x0000000000000000,0x00015780000000000,0x0000380000000000,0x00003770000000000},
+ { 0x000000000000000b,0x0000121756b441221,0x000000000000f13a,0x0000000000000f78a,0x0000000000000000,0x00001218000000000,0x000000000000f13a,0x0000000000000f78a},
+ { 0x000000000000174b,0x00000000dba0ca42f,0x0000000002b56dab,0x00000000006fa1fe4,0x0000000000000000,0x00000000dbc000000,0x0000000002b40000,0x00000000006fc0000},
+ { 0x00000000000001ef,0x00003b7c956c2ebd3,0x000000000c92de1f,0x00000ec8f6bad233a,0x0000000000000000,0x00003b80000000000,0x0000000000000000,0x00000ecc000000000},
+ { 0x0000000024a78c5f,0x003f0210e9ae7da23,0x00000005bc38dabd,0x00000011c2f39277f,0x0000000000000000,0x003f1000000000000,0x0000000580000000,0x00000011c80000000},
+ { 0x0000000000000000,0x00002e0bfe4f5db79,0x000000000001b533,0x00000007abbc50e41,0x0000000000000000,0x00002e10000000000,0x0000000000000000,0x00000007ac0000000},
+ { 0x000001a080cc3024,0x06cd41fb460fa0cc8,0x00001d29b64443e8,0x0001625e631b0efe4,0x0000000000000000,0x06ce0000000000000,0x0000180000000000,0x00016280000000000},
+ { 0x00000000000000cb,0x0312aa247e308f290,0x000000000014590a,0x0001a9c8530644a32,0x0000000000000000,0x03130000000000000,0x0000000000000000,0x0001aa00000000000},
+ { 0x000000000000001b,0x00000027b97ab63f8,0x0000000014b4f444,0x000000015d573f988,0x0000000000000000,0x00000027c00000000,0x0000000010000000,0x000000015d8000000},
+ { 0x00000000000000b6,0x00053e0db916129c7,0x0000000000007213,0x00006f06649d6f3bc,0x0000000000000000,0x00054000000000000,0x0000000000000000,0x00006f20000000000},
+ { 0x000000000614c7e8,0x002ce2d4861b262a9,0x000000003ccce2cf,0x0001f82c13d2482fb,0x0000000000000000,0x002cf000000000000,0x0000000000000000,0x0001f880000000000},
+ { 0x00000006ea79f9f8,0x006ce5d4654c1df2f,0x000004ac489ee34f,0x00000087fed2bddf3,0x0000000000000000,0x006d0000000000000,0x000004ac00000000,0x00000088000000000},
+ { 0x0000000000000004,0x0003d8de99c871a25,0x0000000000000005,0x00000000000933033,0x0000000000000000,0x0003d900000000000,0x0000000000000000,0x00000000000934000},
+ { 0x0000000000031efa,0x00008a933e7bc58ff,0x00000000000384e8,0x0000000003ceebc36,0x0000000000000000,0x00008ac0000000000,0x0000000000000000,0x0000000003cf00000},
+ { 0x0000000000022971,0x001f2f0e495d52978,0x00000070e02edcd3,0x00001aa4f4c13562e,0x0000000000000000,0x001f3000000000000,0x0000000000000000,0x00001aa8000000000},
+ { 0x000000000001f706,0x000a334d4309c1104,0x0000075d0afea8d8,0x000061839bc9171c0,0x0000000000000000,0x000a3400000000000,0x0000060000000000,0x000061a0000000000},
+ { 0x0000000000000097,0x023dfa36d919d5b68,0x000000000033e424,0x00071dd64d581a88f,0x0000000000000000,0x023e0000000000000,0x0000000000000000,0x00071e00000000000},
+ { 0x0000000000000073,0x00009fc7dd1e44af2,0x000000000005cc20,0x000000e4bfb4d1560,0x0000000000000000,0x0000a000000000000,0x0000000000000000,0x000000e4c00000000},
+ { 0x000000000000ea9c,0x007919fbe51d499e7,0x00000000004d2d64,0x0000000000079dfbe,0x0000000000000000,0x00792000000000000,0x00000000004d2000,0x0000000000079e000},
+ { 0x000000000228ace6,0x000093d860970ff8d,0x0000008bf149717f,0x000006319a9c835f5,0x0000000000000000,0x00009400000000000,0x0000008000000000,0x00000632000000000},
+ { 0x000000000000175f,0x0c7919cfff6ea303a,0x00000000001398de,0x00000000001f6e1dc,0x0000000000000000,0x0c7c0000000000000,0x0000000000138000,0x00000000001f70000},
+ { 0x0000521de03ae1a4,0x0797b98748328283d,0x0002f21aa8a4d5e3,0x00777f73b13eab9b2,0x0000000000000000,0x07980000000000000,0x0002000000000000,0x00778000000000000},
+ { 0x00000000000087d8,0x0000000f88946116e,0x00000000000cf48b,0x00000000710c1e741,0x0000000000000000,0x0000000f8c0000000,0x0000000000000000,0x00000000712000000},
+ { 0x0000000000000004,0x00f1764ace890e27d,0x000000000000000c,0x00005d6c18d8fc969,0x0000000000000000,0x00f18000000000000,0x0000000000000000,0x00005d80000000000},
+ { 0x0000000000000000,0x00000a00df7a1540b,0x00000000003ef05e,0x000000002f4e5c6c3,0x0000000000000000,0x00000a04000000000,0x0000000000000000,0x000000002f5000000},
+ { 0x000000000049f31d,0x0fbcc55866b51a520,0x00000000004c13c8,0x00000000002f71bd2,0x0000000000000000,0x0fc00000000000000,0x00000000004c0000,0x00000000002f80000},
+ { 0x0000000000000002,0x000000000000021b8,0x000000000000001e,0x00000000000000bb8,0x0000000000000000,0x000000000000021c0,0x000000000000001e,0x00000000000000bb8},
+ { 0x0000000c06c8537c,0x000000d418c0ccffc,0x00000039555e047f,0x00000003e44a9978c,0x0000000c00000000,0x000000d4400000000,0x0000003954000000,0x00000003e46000000},
+ { 0x000000000011fdb7,0x0000983d16869cd36,0x000000000022f47a,0x000000008bf21eb32,0x0000000000000000,0x00009840000000000,0x0000000000000000,0x000000008c0000000},
+ { 0x00000000000001bc,0x0cd9c765488c204ac,0x000000007a3fc685,0x090f21e7759fcd3e6,0x0000000000000000,0x0cdc0000000000000,0x0000000000000000,0x09100000000000000},
+ { 0x00000020265f0a39,0x0102cd0e8fab94fcb,0x000003f7c3400d12,0x00000730a09913aa5,0x0000000000000000,0x01030000000000000,0x000003e000000000,0x00000732000000000},
+ { 0x00000000000027e0,0x000001bba13becd15,0x0000000703db7053,0x00000000a5e83c27f,0x0000000000000000,0x000001bc000000000,0x0000000703000000,0x00000000a5f000000},
+ { 0x000000000000000c,0x0000000035b128cb2,0x00000000000004aa,0x0000000000000061c,0x0000000000000000,0x0000000035c000000,0x00000000000004aa,0x0000000000000061c},
+ { 0x0000000000000036,0x0005d4f1fc387e720,0x0000000000000172,0x0000000000036666a,0x0000000000000000,0x0005d600000000000,0x0000000000000000,0x00000000000367000},
+ { 0x0000000000000003,0x000008b35aed6dc8c,0x000000000173b6ea,0x000000000068bfcbe,0x0000000000000000,0x000008b4000000000,0x0000000001720000,0x000000000068c0000},
+ { 0x0000000000000068,0x000003834e43b16ca,0x00000000000003be,0x00000000000fcb6f9,0x0000000000000000,0x00000384000000000,0x0000000000000000,0x00000000000fcc000},
+ { 0x0000000000000010,0x000000008cdfe8b2d,0x00000000000003ce,0x00000000000007ff3,0x0000000000000000,0x000000008d0000000,0x00000000000003c0,0x00000000000008000},
+ { 0x0000000000000b8d,0x0000509b660beaac1,0x0000000008efef9b,0x00000003f54a5fa01,0x0000000000000000,0x000050a0000000000,0x0000000000000000,0x00000003f60000000},
+ { 0x00000000007f410c,0x00000230e0230bc29,0x00000046b26d98ac,0x000001ef3b93e6819,0x0000000000000000,0x00000231000000000,0x0000004000000000,0x000001ef800000000},
+ { 0x00000000498383e9,0x0000a39002ddf6ef7,0x000000199bae76e3,0x00000f333e44395a3,0x0000000000000000,0x0000a3c0000000000,0x0000000000000000,0x00000f34000000000},
+ { 0x0000000000000010,0x000000266685ea9b5,0x0000000000000136,0x0000000000008faa5,0x0000000000000000,0x00000026700000000,0x0000000000000000,0x0000000000008fc00},
+ { 0x0000000000000034,0x002f097e09974ae55,0x000000000160c19d,0x00000000001e9ae0a,0x0000000000000000,0x002f1000000000000,0x000000000160c000,0x00000000001e9c000},
+ { 0x00000000000001e3,0x0000006862cd73246,0x0000000000001b77,0x00000000000379748,0x0000000000000000,0x00000068800000000,0x0000000000001000,0x0000000000037a000},
+ { 0x000000000171956d,0x008738f2235bccc33,0x0000000067aad562,0x00000000d9e3fcf11,0x0000000000000000,0x00874000000000000,0x0000000064000000,0x00000000da0000000},
+ { 0x0000000000000065,0x03fdc33b825bb5c2a,0x000000000f2feb30,0x0000af5f867962c2c,0x0000000000000000,0x03fe0000000000000,0x0000000000000000,0x0000af80000000000},
+ { 0x00000000000071dd,0x002b8a46e76ec4d0f,0x000001995fb57f76,0x0000002a7d281d96a,0x0000000000000000,0x002b9000000000000,0x0000019900000000,0x0000002a800000000},
+ { 0x0000000000000006,0x000025a17984cfbbf,0x0000000000000028,0x00000000f5b81be7d,0x0000000000000000,0x000025b0000000000,0x0000000000000000,0x00000000f5c000000},
+ { 0x00000000000000b8,0x000a6aacfacd291bc,0x00000000000001ea,0x00000000000012345,0x0000000000000000,0x000a6c00000000000,0x0000000000000180,0x00000000000012380},
+ { 0x0000082270dc6bca,0x0563980efce78f1f8,0x00019374e9250324,0x0000d56fb737e5af7,0x0000000000000000,0x05640000000000000,0x0001900000000000,0x0000d580000000000},
+ { 0x0000000000000105,0x000003cc9796a0128,0x000000000000035b,0x00000000000000364,0x0000000000000000,0x000003cd000000000,0x000000000000035b,0x00000000000000364},
+ { 0x0000000000000001,0x000069f384e1afb3f,0x0000000000000005,0x000000000000050c5,0x0000000000000000,0x00006a00000000000,0x0000000000000000,0x000000000000050e0},
+ { 0x000000000000a723,0x0006914cce3eae168,0x000000004069c2f0,0x0000001ea695bfabf,0x0000000000000000,0x00069200000000000,0x0000000000000000,0x0000001ea80000000},
+ { 0x000000000000001f,0x003e74428f597577d,0x00000000000000e1,0x0000000000078ec9c,0x0000000000000000,0x003e8000000000000,0x0000000000000000,0x00000000000790000},
+ { 0x0000000000007d8f,0x0000001c90688925c,0x0000000000018d2a,0x0000000004e2b683f,0x0000000000000000,0x0000001c980000000,0x0000000000000000,0x0000000004e400000},
+ { 0x0000000000001be7,0x0004716e37af95574,0x000000000001585c,0x000004c09bbcf8144,0x0000000000000000,0x00047200000000000,0x0000000000000000,0x000004c2000000000},
+ { 0x000000000000000e,0x000000000017bbcc4,0x000000000000015e,0x00000000000001f8f,0x0000000000000000,0x000000000017c0000,0x0000000000000158,0x00000000000001f90},
+ { 0x0000000000000045,0x00001924001116f3b,0x000000000001303d,0x000000003794a54d2,0x0000000000000000,0x00001928000000000,0x0000000000000000,0x0000000037a000000},
+ { 0x00000000000003f8,0x000ed6fd9ca4a7223,0x00000000000b0a8b,0x00000000001959e8d,0x0000000000000000,0x000ed800000000000,0x00000000000b0000,0x00000000001960000},
+ { 0x0000000004e4f1cf,0x0000005ee91719c91,0x0000002b6fdbf18e,0x00000010ddaa66ee0,0x0000000000000000,0x0000005f000000000,0x0000002b40000000,0x00000010e00000000},
+ { 0x0000000000000000,0x07de06e64d228389f,0x000000000025f9b6,0x00000000000862b50,0x0000000000000000,0x07e00000000000000,0x000000000025e000,0x00000000000864000},
+ { 0x000000000000f900,0x00000d4da1fb90c03,0x000000001436fc72,0x0000011eec5dda52d,0x0000000000000000,0x00000d50000000000,0x0000000000000000,0x0000011f000000000},
+ { 0x0000000000000005,0x0000000053ea8ece5,0x0000000000002792,0x000000001c392f4b9,0x0000000000000000,0x00000000540000000,0x0000000000000000,0x000000001c4000000},
+ { 0x0000000000000043,0x03bf314501fe77b5e,0x00263c9a37cbf61f,0x001dd7e35e5138017,0x0000000000000000,0x03c00000000000000,0x0026000000000000,0x001dd800000000000},
+ { 0x0000000000000503,0x000001ab497b553aa,0x000000000000b2ca,0x00000000000110807,0x0000000000000000,0x000001ab800000000,0x000000000000b000,0x00000000000111000},
+ { 0x000000000000004b,0x0003ed9d5a925cf80,0x000000000118d836,0x00000000001b20ac7,0x0000000000000000,0x0003ee00000000000,0x000000000118c000,0x00000000001b24000},
+ { 0x0000000000001a8e,0x000001ed8a1641928,0x00000001feb132b3,0x000000c5dca2bc40b,0x0000000000000000,0x000001ee000000000,0x0000000000000000,0x000000c6000000000},
+ { 0x000000000000005b,0x000000773cf5bb2e4,0x00000000039e93f7,0x000000000067ad515,0x0000000000000000,0x00000077400000000,0x00000000039e0000,0x000000000067b0000},
+ { 0x00000000000cc1ff,0x00c1ea8784b547f2f,0x00000000007479c6,0x000000007e6f1a3b1,0x0000000000000000,0x00c20000000000000,0x0000000000000000,0x000000007e8000000},
+ { 0x0000000000000058,0x0000000014dacc865,0x0000000000003da0,0x00000000037b0090e,0x0000000000000000,0x0000000014e000000,0x0000000000000000,0x00000000037c00000},
+ { 0x0000002b3eeedf1a,0x0000dcaf2c1787bec,0x0000004d508a6d14,0x000032746f0854489,0x0000000000000000,0x0000dcc0000000000,0x0000000000000000,0x00003280000000000},
+ { 0x000000000000004d,0x000000021b083c2d6,0x0000000000001bb2,0x000000000ddb2236c,0x0000000000000000,0x000000021c0000000,0x0000000000000000,0x000000000ddc00000},
+ { 0x000000000000007a,0x00000119f786b7d0b,0x00000014a94a89ab,0x000000121dc2494f5,0x0000000000000000,0x0000011a000000000,0x0000001480000000,0x00000012200000000},
+ { 0x000000000016c7fa,0x002cb82ec48d348a9,0x0000000000432a87,0x00000000000e25aea,0x0000000000000000,0x002cc000000000000,0x0000000000430000,0x00000000000e28000},
+ { 0x0000000000000006,0x0000007077f4ccd73,0x00000000000051de,0x00000003ce6b93b0d,0x0000000000000000,0x00000070800000000,0x0000000000000000,0x00000003cf0000000},
+ { 0x0000000000000039,0x000000ea4e05c2e2e,0x00000000089b888e,0x0000006b187580578,0x0000000000000000,0x000000ea800000000,0x0000000000000000,0x0000006b200000000},
+ { 0x0000000000021ce2,0x038c5a140ffe0aa41,0x00010cd24bec80db,0x000c2a30996897dcf,0x0000000000000000,0x038d0000000000000,0x0001000000000000,0x000c2c00000000000},
+ { 0x0000000000000045,0x003df5298a125ae08,0x00000000000047aa,0x0000000001a7d2c64,0x0000000000000000,0x003e0000000000000,0x0000000000000000,0x0000000001a800000},
+ { 0x0000000000000007,0x00000007d27e5138e,0x00000000000001b9,0x0000000007c588a74,0x0000000000000000,0x00000007d40000000,0x0000000000000000,0x0000000007c600000},
+ { 0x0000000000000110,0x000461980d9e2cd64,0x00000000000025d2,0x00000000053ccb913,0x0000000000000000,0x00046200000000000,0x0000000000000000,0x00000000053e00000},
+ { 0x0000000000000102,0x000040bb73f531e11,0x0000000000e9d625,0x00000000001a0c833,0x0000000000000000,0x000040c0000000000,0x0000000000e9c000,0x00000000001a10000},
+ { 0x000000000000c998,0x000000003b6256845,0x00000000000595ad,0x0000000000d266fc5,0x0000000000000000,0x000000003b7000000,0x0000000000040000,0x0000000000d280000},
+ { 0x000000000000fdc1,0x0001812ca1e08bb70,0x0000000000048fde,0x00000001dd9b7e7dc,0x0000000000000000,0x00018180000000000,0x0000000000000000,0x00000001de0000000},
+ { 0x0000000000000003,0x0000001eaf9ec2871,0x000000000002a42d,0x000000000101ceb96,0x0000000000000000,0x0000001eb00000000,0x0000000000000000,0x00000000010200000},
+ { 0x000000000f0216e7,0x00ea7cd16b66e5e3d,0x000000003235a96c,0x0000000009b6f838e,0x0000000000000000,0x00ea8000000000000,0x0000000032200000,0x0000000009b800000},
+ { 0x000000001438cf8d,0x04f23871c35884bb2,0x00000004a7dd087e,0x00000017e20023ea9,0x0000000000000000,0x04f40000000000000,0x0000000480000000,0x00000017e80000000},
+ { 0x000000000002c04b,0x00002c54d4dcba4e2,0x000000001534fafd,0x00000a1f797dd7617,0x0000000000000000,0x00002c60000000000,0x0000000000000000,0x00000a20000000000},
+ { 0x0000000000000001,0x0000f81f9b8b9e672,0x0000000000000fcf,0x000000000d594c85b,0x0000000000000000,0x0000f840000000000,0x0000000000000000,0x000000000d5c00000},
+ { 0x0000000000000901,0x00071da36e0168a9f,0x0000000001577417,0x000000000028e460c,0x0000000000000000,0x00071e00000000000,0x0000000001570000,0x000000000028e8000},
+ { 0x000000000002550a,0x00063a0d3168f877a,0x0000001cf3ed648e,0x0000b4d0ed1b50cab,0x0000000000000000,0x00063c00000000000,0x0000000000000000,0x0000b500000000000},
+ { 0x00000000000000d1,0x000000000003b8389,0x0000000000043a87,0x00000000000046fd2,0x0000000000000000,0x000000000003b9000,0x0000000000043a80,0x00000000000046fe0},
+ { 0x000000000009c000,0x021fc27c019b641e0,0x0000000000468b80,0x00000000003ae9672,0x0000000000000000,0x02200000000000000,0x0000000000460000,0x00000000003af0000},
+ { 0x0000000000000089,0x000000071396771b0,0x000000006a9c2af5,0x000000007da09c000,0x0000000000000000,0x00000007140000000,0x000000006a000000,0x000000007dc000000},
+ { 0x00000000000024a7,0x00000000cf9a67f9d,0x0000000000eccce8,0x0000000000216d9ef,0x0000000000000000,0x00000000cfc000000,0x0000000000ec8000,0x00000000002170000},
+ { 0x000000000000000e,0x00000001236fbdb9d,0x0000000000915d9a,0x00000000052bcdf61,0x0000000000000000,0x00000001238000000,0x0000000000800000,0x00000000052c00000},
+ { 0x0000000000000264,0x000000007bcac4391,0x00000000066f8233,0x0000000038e0b18e1,0x0000000000000000,0x000000007be000000,0x0000000006000000,0x0000000038f000000},
+ { 0x0000000000f9fbed,0x00001fd4b9f085101,0x000000000837ea4f,0x000001c0b4a9f4851,0x0000000000000000,0x00001fd8000000000,0x0000000000000000,0x000001c1000000000},
+ { 0x0000000019d39230,0x00016c04ef9a9e2cc,0x000000001c03029c,0x000000042c36650da,0x0000000000000000,0x00016c80000000000,0x0000000000000000,0x000000042e0000000},
+ { 0x000000000000000c,0x000000000dee63008,0x0000000000003e08,0x0000000000007d6a3,0x0000000000000000,0x000000000df000000,0x0000000000003e00,0x0000000000007d800},
+ { 0x00000000017d8794,0x0000002023d63c98e,0x00000001adfbb695,0x000000017014b20b6,0x0000000000000000,0x00000020300000000,0x00000001a8000000,0x00000001708000000},
+ { 0x0000000000000079,0x0000000005c52da6a,0x0000000000a92815,0x00000000001e7b90e,0x0000000000000000,0x0000000005c600000,0x0000000000a90000,0x00000000001e80000},
+ { 0x0000000000022407,0x0001446e64552fd66,0x0000000000311cef,0x000000005af596279,0x0000000000000000,0x00014480000000000,0x0000000000000000,0x000000005b0000000},
+ { 0x0000000000000082,0x00000f1088cd8e5db,0x000000000000916e,0x0000000000ea462c3,0x0000000000000000,0x00000f14000000000,0x0000000000000000,0x0000000000ea80000},
+ { 0x00000000000001b9,0x00000004489a0a1e4,0x00000000000006ab,0x00000001ed87f85be,0x0000000000000000,0x000000044a0000000,0x0000000000000000,0x00000001ee0000000},
+ { 0x000000000001ef80,0x0000003108f6648d6,0x00000000001bcb61,0x000000000157b3796,0x0000000000000000,0x00000031100000000,0x0000000000180000,0x00000000015800000},
+ { 0x0000000000000b65,0x0000000512f747133,0x000000000003dc38,0x000000000000c3f9d,0x0000000000000000,0x00000005140000000,0x000000000003dc00,0x000000000000c4000},
+ { 0x0000000000000004,0x000000003658e016b,0x0000000000000172,0x000000001d791c23f,0x0000000000000000,0x00000000366000000,0x0000000000000000,0x000000001d8000000},
+ { 0x0000000001f26910,0x07e9586d11b235e62,0x0000178933158351,0x0000423fd05a171e2,0x0000000000000000,0x07ea0000000000000,0x0000160000000000,0x00004240000000000},
+ { 0x0000000000000067,0x000000000000281f9,0x0000000000000068,0x0000000000000dd1f,0x0000000000000000,0x00000000000028200,0x0000000000000040,0x0000000000000dd40},
+ { 0x0000000000000005,0x0726e13005df6f7b9,0x0000000000000196,0x0043cc4bbb3a9525f,0x0000000000000000,0x07280000000000000,0x0000000000000000,0x0043e000000000000},
+ { 0x00000000000035da,0x00000001b9ff4fd83,0x000000003fae5df8,0x0000000036658e783,0x0000000000000000,0x00000001ba0000000,0x000000003f000000,0x00000000367000000},
+ { 0x0000000000000003,0x01112e02386335e98,0x0000000000000d3d,0x0002ccab6836d7631,0x0000000000000000,0x01118000000000000,0x0000000000000000,0x0002cd00000000000},
+ { 0x000000000000001f,0x00000d64526d882ef,0x0000003ad1568a66,0x0000031a94d6851b5,0x0000000000000000,0x00000d68000000000,0x0000003000000000,0x0000031b000000000},
+ { 0x0000000000000357,0x0f1754eb791b840e0,0x00000000054276cf,0x000000006a273e3e1,0x0000000000000000,0x0f180000000000000,0x0000000004000000,0x000000006a4000000},
+ { 0x0000000000000854,0x00003fac329d70f3c,0x0000007fdf2ef6d0,0x000000f0a35a381c2,0x0000000000000000,0x00003fb0000000000,0x0000007c00000000,0x000000f0c00000000},
+ { 0x0000000000000003,0x00c29a5d6e095078d,0x0000007640ea657b,0x000000077f306c5ef,0x0000000000000000,0x00c2c000000000000,0x0000007640800000,0x000000077f3800000},
+ { 0x00000000002b3c17,0x000014736881bd51d,0x000000049a44dab9,0x0000010536b45e0d0,0x0000000000000000,0x00001478000000000,0x0000000000000000,0x00000105800000000},
+ { 0x0000000036c70ac8,0x071f8a05672fe2c9a,0x000003c32be5ae8b,0x00007489892a3b5d7,0x0000000000000000,0x07200000000000000,0x0000020000000000,0x000074a0000000000},
+ { 0x00000000000000d6,0x00000059ad8899821,0x000000000004ae7e,0x0000000007774c8ff,0x0000000000000000,0x00000059c00000000,0x0000000000000000,0x00000000077800000},
+ { 0x0000000000001b07,0x00007371584cc183c,0x0000000244e5546f,0x000000007e514e5fe,0x0000000000000000,0x00007380000000000,0x0000000244000000,0x000000007e6000000},
+ { 0x0000000000000007,0x00000000054574946,0x0000000000000026,0x00000000000274cd2,0x0000000000000000,0x00000000054600000,0x0000000000000000,0x00000000000275000},
+ { 0x0000000016a6ecb8,0x000037fe9425d693a,0x000000007ab4dc1b,0x0000000007f18554d,0x0000000000000000,0x00003800000000000,0x000000007ab40000,0x0000000007f1a0000},
+ { 0x000000000000771e,0x0000ef9235ba5ff21,0x000000693612abb9,0x00000177f3687af6a,0x0000000000000000,0x0000efc0000000000,0x0000006800000000,0x00000178000000000},
+ { 0x0000000000000000,0x0000000001e557ce1,0x000000000001ec4b,0x0000000000004cd19,0x0000000000000000,0x0000000001e580000,0x000000000001ec00,0x0000000000004ce00},
+ { 0x0000000000000001,0x00000000027b9ad24,0x0000000000000012,0x000000000000002a4,0x0000000000000000,0x00000000027c00000,0x0000000000000012,0x000000000000002a4},
+ { 0x00000000032d4c65,0x006921331f78d6673,0x00001d5e2a919401,0x002178584bb092090,0x0000000000000000,0x00694000000000000,0x0000000000000000,0x00218000000000000},
+ { 0x000000000000132b,0x00002c64d63d29288,0x000000000000e1e9,0x0000000000009736e,0x0000000000000000,0x00002c70000000000,0x000000000000e000,0x00000000000097400},
+ { 0x0000000000000004,0x0019b2b1d8dae60af,0x0000000000000103,0x00000000008918683,0x0000000000000000,0x0019b800000000000,0x0000000000000000,0x00000000008940000},
+ { 0x0000000000000127,0x000060852e238a69f,0x0000000000037d95,0x00000001d6b73cb81,0x0000000000000000,0x000060a0000000000,0x0000000000000000,0x00000001d70000000},
+ { 0x0000000000000230,0x00085be2b1fdb6e7a,0x000000bc59faab76,0x000000298a538787c,0x0000000000000000,0x00085c00000000000,0x000000bc00000000,0x00000029900000000},
+ { 0x00000000000058dd,0x0001f1fbcb7e1e3f8,0x0000001284a80e78,0x00000003c71a93582,0x0000000000000000,0x0001f200000000000,0x0000001280000000,0x00000003c80000000},
+ { 0x0000000000052927,0x000566393e045e901,0x0000000000070b63,0x00015a29c5a74bdf0,0x0000000000000000,0x00056800000000000,0x0000000000000000,0x00015a80000000000},
+ { 0x0000000000000f5a,0x0000a210edf43a1d3,0x00000000000023df,0x00001dc2d31ef690a,0x0000000000000000,0x0000a240000000000,0x0000000000000000,0x00001dc8000000000},
+ { 0x000000000000007c,0x001cf3217f20653b6,0x00000000000007fe,0x00000003aac95d4b8,0x0000000000000000,0x001cf800000000000,0x0000000000000000,0x00000003ab0000000},
+ { 0x000000000000000c,0x00000000000717fbc,0x000000000012b628,0x000000000005a1549,0x0000000000000000,0x00000000000718000,0x000000000012a000,0x000000000005a2000},
+ { 0x0000000000001795,0x000002f57c8d03764,0x000000000350bc60,0x0000000000cee9e75,0x0000000000000000,0x000002f6000000000,0x0000000003500000,0x0000000000cf00000},
+ { 0x00000002b741f68f,0x00000152718fd9a2e,0x0000000540be7386,0x00000054fb1456450,0x0000000000000000,0x00000152800000000,0x0000000400000000,0x00000055000000000},
+ { 0x0000000000000001,0x00086bafcdf172beb,0x000000000000a6f4,0x0000b05e0db630d9f,0x0000000000000000,0x00086c00000000000,0x0000000000000000,0x0000b080000000000},
+ { 0x0000000000000029,0x0000a6da5800d532d,0x000000001072fc3d,0x000000003bc14a13a,0x0000000000000000,0x0000a700000000000,0x0000000010000000,0x000000003bd000000},
+ { 0x00000000000028da,0x00748006411f2ecb4,0x000000000015dd3c,0x00013ef6aa2a6bc97,0x0000000000000000,0x0074a000000000000,0x0000000000000000,0x00013f00000000000},
+ { 0x00000000000004eb,0x0025ab1f0e8211183,0x00000000000094b8,0x000003b14121fe7ea,0x0000000000000000,0x0025b000000000000,0x0000000000000000,0x000003b2000000000},
+ { 0x0000000000013fa4,0x00219b73ac7e60fc1,0x00000000000a384e,0x0000000126fd3c4c2,0x0000000000000000,0x0021a000000000000,0x0000000000000000,0x00000001270000000},
+ { 0x0000000000000001,0x000000001bc84e4c9,0x00000000000000b9,0x000000000005287ad,0x0000000000000000,0x000000001bd000000,0x0000000000000000,0x0000000000052a000},
+ { 0x0000000000000000,0x03ffa96ea066f2fb1,0x0000006a8adad80c,0x00000016de1f21db1,0x0000000000000000,0x04000000000000000,0x0000006a80000000,0x00000016e00000000},
+ { 0x000000000068220a,0x0673bed581d2e48c4,0x0000003578485431,0x0011c3b979b0ccd34,0x0000000000000000,0x06740000000000000,0x0000000000000000,0x0011c800000000000},
+ { 0x0000000000000005,0x0005153530d6a7683,0x0000000000075448,0x00000063a6eda7243,0x0000000000000000,0x00051600000000000,0x0000000000000000,0x00000063c00000000},
+ { 0x0000000000000002,0x0005e8b7bea2d1f4b,0x0000000000004d4e,0x0000006394ebc2f90,0x0000000000000000,0x0005ea00000000000,0x0000000000000000,0x00000063a00000000},
+ { 0x0000000063b5f304,0x0001d6c2350cc9e9f,0x0000000e7930547f,0x0000b6297e64e9abc,0x0000000000000000,0x0001d700000000000,0x0000000000000000,0x0000b640000000000},
+ { 0x0000000000033e4f,0x0000000000aeb845c,0x000000000006e39d,0x000000000001af7bc,0x0000000000000000,0x0000000000aec0000,0x000000000006e000,0x000000000001af800},
+ { 0x000000000000001a,0x003c201f95e4fd56d,0x0000000001c9dafc,0x00002add627233c65,0x0000000000000000,0x003c3000000000000,0x0000000000000000,0x00002ae0000000000},
+ { 0x000000000000db07,0x0000011d54e76d32b,0x0000000000289001,0x0000000012f900bff,0x0000000000000000,0x0000011d800000000,0x0000000000000000,0x00000000130000000},
+ { 0x0000072318cd6b54,0x0006d28e2b18a2cad,0x000dd9a5ebabbc6e,0x000260328101786dd,0x0000000000000000,0x0006d400000000000,0x000dd80000000000,0x00026080000000000},
+ { 0x0000000000006ee7,0x0000006cadcb906f6,0x0000000019a2e178,0x0000000005833275d,0x0000000000000000,0x0000006cc00000000,0x0000000019a00000,0x00000000058400000},
+ { 0x0000000000000001,0x00d69155b63c9c54f,0x00000000000000b9,0x0000000000008b0c7,0x0000000000000000,0x00d6c000000000000,0x0000000000000000,0x0000000000008b400},
+ { 0x0000000000000069,0x00003397c5c229d68,0x0000000000015eb0,0x0000000005ddd4bf7,0x0000000000000000,0x000033a0000000000,0x0000000000000000,0x0000000005de00000},
+ { 0x00000000000001fe,0x00d34135ad58852ce,0x000000c9c4e98dc3,0x000000caeb286bcfe,0x0000000000000000,0x00d38000000000000,0x000000c800000000,0x000000cb000000000},
+ { 0x000000005c2a4edc,0x0000f2b99815f92cc,0x000088115bb9e29b,0x00000d8ba8d15c9ec,0x0000000000000000,0x0000f2c0000000000,0x0000880000000000,0x00000d8c000000000},
+ { 0x000000000000000c,0x00000000045e51e87,0x00000000000003b0,0x0000000003e40c8d6,0x0000000000000000,0x00000000046000000,0x0000000000000000,0x0000000003e500000},
+ { 0x0000000000000002,0x0000456f1438f71b0,0x00000005d28aa740,0x00001e06a594c4c43,0x0000000000000000,0x00004580000000000,0x0000000000000000,0x00001e08000000000},
+ { 0x0000000000004f67,0x00000000bddf1c4ed,0x0000000001d1840f,0x000000007603aa57e,0x0000000000000000,0x00000000be0000000,0x0000000000000000,0x00000000762000000},
+ { 0x0000000000000006,0x002cba055f53cf3d9,0x00035a9a5f174e96,0x0000c9f2683d423a1,0x0000000000000000,0x002cc000000000000,0x0003580000000000,0x0000ca00000000000},
+ { 0x000000000000076d,0x000003d4778f3b6f7,0x0000000000000e85,0x0000000000002cdd7,0x0000000000000000,0x000003d5000000000,0x0000000000000e00,0x0000000000002ce00},
+ { 0x00000000049fef01,0x00540634e071ce293,0x0000000136661386,0x000638a9fe5fcb305,0x0000000000000000,0x00542000000000000,0x0000000000000000,0x00063a00000000000},
+ { 0x0000000000000081,0x046ee70b3575187ec,0x00000000007922c1,0x000004e17af8c90fe,0x0000000000000000,0x04700000000000000,0x0000000000000000,0x000004e2000000000},
+ { 0x000000000030798d,0x0002c371982ad6a6d,0x00000b11f507c5a2,0x00000bf0841d97bb8,0x0000000000000000,0x0002c400000000000,0x00000b0000000000,0x00000bf4000000000},
+ { 0x000000000000127b,0x000005faa62208af4,0x000000000009e26a,0x000000000646e7004,0x0000000000000000,0x000005fc000000000,0x0000000000000000,0x00000000064800000},
+ { 0x0000000000000666,0x00001826305f09064,0x0000000000082bb5,0x00000000000170715,0x0000000000000000,0x00001828000000000,0x0000000000082800,0x00000000000170800},
+ { 0x000000000000015e,0x000000700f2f5492a,0x00000000000e6c18,0x0000000006348e04e,0x0000000000000000,0x00000070200000000,0x0000000000000000,0x00000000063600000},
+ { 0x0000000000007b02,0x00003d9069bfdfe38,0x0000011919f4e4c7,0x00000eb8ecae2c8de,0x0000000000000000,0x00003da0000000000,0x0000010000000000,0x00000ebc000000000},
+ { 0x00000000000000c9,0x025df6f76127b066b,0x000000000142a912,0x00000000005558fc3,0x0000000000000000,0x025e0000000000000,0x0000000001420000,0x00000000005560000},
+ { 0x0000000000000fb3,0x019c7bfe7fedaea81,0x00000000001d0d85,0x0000000006f6442bf,0x0000000000000000,0x019c8000000000000,0x0000000000000000,0x0000000006f800000},
+ { 0x0000000000000148,0x00002313a10cbe402,0x00000000000680c3,0x0000000002e0558ba,0x0000000000000000,0x00002320000000000,0x0000000000000000,0x0000000002e100000},
+ { 0x0000000000393190,0x0000250fadd274864,0x0000004c7078379f,0x0000002ecaa634e24,0x0000000000000000,0x00002510000000000,0x0000004c00000000,0x0000002ed00000000},
+ { 0x000000000037df28,0x0000076948521e64b,0x0000000001b9f3c6,0x0000000daf4878fd6,0x0000000000000000,0x0000076a000000000,0x0000000000000000,0x0000000db00000000},
+ { 0x0000000000081429,0x01b0026c66cc1325c,0x000000379895f397,0x000001dc555d0aad9,0x0000000000000000,0x01b08000000000000,0x0000003000000000,0x000001dc800000000},
+ { 0x0000000000000076,0x0000002f6eb08e01c,0x000000000000f90d,0x00000000000f2771d,0x0000000000000000,0x0000002f700000000,0x000000000000c000,0x00000000000f28000},
+ { 0x0000000000000178,0x00000000018ebf078,0x0000000000035654,0x00000000000ebbd42,0x0000000000000000,0x00000000018f00000,0x0000000000034000,0x00000000000ebc000},
+ { 0x0000000000025dde,0x0acedf54beeb119a3,0x0000000003818b32,0x000020ba9ee7890ca,0x0000000000000000,0x0ad00000000000000,0x0000000000000000,0x000020c0000000000},
+ { 0x0000000000ebbe9e,0x0000001d62f5b0ecc,0x00000000736c5ade,0x0000000201805d6cb,0x0000000000000000,0x0000001d680000000,0x0000000070000000,0x00000002020000000},
+ { 0x0000000000001461,0x027adac869e9606be,0x00000006888e5279,0x00000015e802f435c,0x0000000000000000,0x027b0000000000000,0x0000000680000000,0x00000015f00000000},
+ { 0x0000000000000005,0x0000000147deabaee,0x0000000003162216,0x00000000008697974,0x0000000000000000,0x00000001480000000,0x0000000003160000,0x000000000086a0000},
+ { 0x0000017d1d35a8f4,0x0041bcf88e0567f2c,0x000078133e04dcbd,0x00001fda22e3130e1,0x0000000000000000,0x0041c000000000000,0x0000780000000000,0x00001fe0000000000},
+ { 0x00000000000068f5,0x00000f3ef1e9903fb,0x0000000005ef6e89,0x000001be1b4e521c7,0x0000000000000000,0x00000f40000000000,0x0000000000000000,0x000001be800000000},
+ { 0x0000000000000001,0x00001fd33089747dc,0x0000000000000e91,0x00000000000014d2b,0x0000000000000000,0x00001fd8000000000,0x0000000000000e80,0x00000000000014d80},
+ { 0x00000000018e1d78,0x0010637cf4224d92d,0x0000001f479ccab7,0x0000000541a04eefb,0x0000000000000000,0x00106800000000000,0x0000001f40000000,0x00000005420000000},
+ { 0x0000000000000001,0x000e43c56288d5b16,0x0000000000000006,0x00000000000025454,0x0000000000000000,0x000e4400000000000,0x0000000000000000,0x00000000000025500},
+ { 0x000000000000000c,0x00000070b52508f7d,0x0000000000003bf8,0x00000028dbef2d6e4,0x0000000000000000,0x00000070c00000000,0x0000000000000000,0x00000028e00000000},
+ { 0x0000000000395222,0x000000352f2a47f26,0x000000000ead1765,0x0000000004452e353,0x0000000000000000,0x00000035300000000,0x000000000ea00000,0x00000000044600000},
+ { 0x000000000000c612,0x000082af63fb40dd8,0x00000000001d8b1b,0x0000069b1a071dc09,0x0000000000000000,0x000082c0000000000,0x0000000000000000,0x0000069c000000000},
+ { 0x0000000670d3c0a5,0x0000003c4a639d54e,0x000000190cb4c910,0x00000036bd8365f60,0x0000000600000000,0x0000003c500000000,0x0000001900000000,0x00000036c00000000},
+ { 0x000000000000000b,0x013c22c5b8e6d6609,0x0000000000000551,0x00000000533fa19b0,0x0000000000000000,0x013c8000000000000,0x0000000000000000,0x00000000534000000},
+ { 0x0000000000000016,0x00054c1d6963c728a,0x00000000000104a9,0x0000000000abea3f1,0x0000000000000000,0x00054e00000000000,0x0000000000000000,0x0000000000ac00000},
+ { 0x0000000000000000,0x01900c5ab172dbf31,0x0000000000153bc8,0x00000000504170034,0x0000000000000000,0x01908000000000000,0x0000000000000000,0x00000000506000000},
+ { 0x0000000014dfffd7,0x07fb335cb014be5c6,0x00001e51306551d5,0x00b04372030c9a5fd,0x0000000000000000,0x07fc0000000000000,0x0000000000000000,0x00b08000000000000},
+ { 0x0000000000000314,0x001df33a0a23eb379,0x00000000017f953d,0x0000000f5b7300833,0x0000000000000000,0x001df800000000000,0x0000000000000000,0x0000000f5c0000000},
+ { 0x000000000003a49b,0x0000841ace37cae0f,0x00000000013d85f0,0x0000029a62d5d6413,0x0000000000000000,0x00008440000000000,0x0000000000000000,0x0000029b000000000},
+ { 0x00000000000000c5,0x000305357c1f92ab4,0x00000000b0766b95,0x000000388d76d1969,0x0000000000000000,0x00030600000000000,0x0000000000000000,0x00000038900000000},
+ { 0x0000000000468119,0x008a270de38ead081,0x0000000003d6a901,0x000000009ed92774d,0x0000000000000000,0x008a4000000000000,0x0000000000000000,0x000000009f0000000},
+ { 0x000000000003691b,0x00000944dcdcbe439,0x000000000003e2a1,0x000000000003f4810,0x0000000000000000,0x00000948000000000,0x000000000003e000,0x000000000003f5000},
+ { 0x0000000000000ca7,0x000000009eee928af,0x00000000000023c5,0x000000000db17280b,0x0000000000000000,0x000000009f0000000,0x0000000000000000,0x000000000db400000},
+ { 0x00000000000000f7,0x00001d885c56c9b3d,0x0000001c1fde658a,0x0000008364a0e10cd,0x0000000000000000,0x00001d90000000000,0x0000001c00000000,0x00000083800000000},
+ { 0x0000000000000018,0x00002cd065547427a,0x00000001e9a7e54a,0x000000bb44655994c,0x0000000000000000,0x00002ce0000000000,0x0000000000000000,0x000000bb800000000},
+ { 0x0000000000fca12e,0x000001e7db3fefafb,0x00000000270620a8,0x000000000371a7569,0x0000000000000000,0x000001e8000000000,0x0000000027000000,0x00000000037200000},
+ { 0x0000000000000007,0x0000354fb44dc7af9,0x000000000000bfde,0x0000000000001f208,0x0000000000000000,0x00003550000000000,0x000000000000bf80,0x0000000000001f280},
+ { 0x0000000000000323,0x00000079b32e53e31,0x0000000000001079,0x00000000000001dc4,0x0000000000000000,0x00000079c00000000,0x0000000000001079,0x00000000000001dc4},
+ { 0x0000000000000053,0x000000022799efb98,0x00000000032f1866,0x00000000030fe15e0,0x0000000000000000,0x00000002280000000,0x0000000003200000,0x00000000031000000},
+ { 0x000000000000016b,0x00000005150b3641f,0x000000000019598c,0x00000000fb06a9a1a,0x0000000000000000,0x00000005160000000,0x0000000000000000,0x00000000fb4000000},
+ { 0x00000000000000e7,0x0030179b169456603,0x0000011733e71757,0x00053559cdbe53895,0x0000000000000000,0x00302000000000000,0x0000000000000000,0x00053600000000000},
+ { 0x00000000000003bc,0x0000034adf97892f2,0x000000001da26570,0x000001e70fd9d88e3,0x0000000000000000,0x0000034b000000000,0x0000000000000000,0x000001e7800000000},
+ { 0x00000000000dee60,0x000167a4046d113c2,0x00000023ce9c8f6e,0x00000258b78e69f5f,0x0000000000000000,0x00016800000000000,0x0000002000000000,0x00000259000000000},
+ { 0x0000000000000006,0x000000006d113d579,0x0000000000000050,0x000000000012ed00f,0x0000000000000000,0x000000006d2000000,0x0000000000000000,0x000000000012f0000},
+ { 0x000000000000000f,0x018759cb40e2fde27,0x0000015f97586823,0x0003439a18c051801,0x0000000000000000,0x01878000000000000,0x0000000000000000,0x00034400000000000},
+ { 0x00000000000002b1,0x0019620fe1517af0a,0x000000000000062d,0x0000000525635bccd,0x0000000000000000,0x00196800000000000,0x0000000000000000,0x00000005260000000},
+ { 0x0000000000029bd5,0x0000000572ce42231,0x0000000000127271,0x000000005737b1a27,0x0000000000000000,0x00000005740000000,0x0000000000000000,0x00000000574000000},
+ { 0x00000bc37caee230,0x007d37d99c1accf64,0x00009b34fc5b4acd,0x0000d253b9ba9fb6c,0x0000000000000000,0x007d4000000000000,0x0000980000000000,0x0000d280000000000},
+ { 0x0000000000000003,0x000001476c8d173ac,0x000000000000001e,0x00000000000235779,0x0000000000000000,0x00000147800000000,0x0000000000000000,0x00000000000236000},
+ { 0x00000000000001dc,0x01e1121a44f5322e8,0x000000000000dd3e,0x00000000000040870,0x0000000000000000,0x01e18000000000000,0x000000000000dd00,0x00000000000040900},
+ { 0x000000000a4271c8,0x0039284593b6d1a1a,0x000007c9d287f545,0x0000a0cc8c87365f0,0x0000000000000000,0x00393000000000000,0x0000040000000000,0x0000a100000000000},
+ { 0x00000000000005ff,0x0342c125d84b63fd7,0x0000000000006661,0x00000000000774c6e,0x0000000000000000,0x03430000000000000,0x0000000000006000,0x00000000000776000},
+ { 0x0000000000000001,0x00000000003dbc54b,0x00000000000000dc,0x000000000009c4d4d,0x0000000000000000,0x00000000003dc0000,0x0000000000000000,0x000000000009c8000},
+ { 0x0000000000000225,0x057ce0e842ae6867a,0x00000000006abf6f,0x0001a720dfad17eaa,0x0000000000000000,0x057e0000000000000,0x0000000000000000,0x0001a780000000000},
+ { 0x0000000000006895,0x03aef93ae5b04f269,0x000000000004212f,0x0000000000038f17f,0x0000000000000000,0x03af0000000000000,0x0000000000042000,0x00000000000390000},
+ { 0x0000000098bff2e8,0x00a9daa8f9ca302f6,0x00000007a62518f7,0x000e258a4a6b35d33,0x0000000000000000,0x00aa0000000000000,0x0000000000000000,0x000e2800000000000},
+ { 0x000000000004b04e,0x00000fdbdc88f2da4,0x00000002efab0db3,0x0000010ed2ddc1609,0x0000000000000000,0x00000fdc000000000,0x0000000000000000,0x0000010f000000000},
+ { 0x00000000e6a2a41d,0x00124646bf7a2ed5a,0x0000000297a0578b,0x0000006c6e0ed5ea9,0x0000000000000000,0x00124800000000000,0x0000000200000000,0x0000006c800000000},
+ { 0x0000025b862c354d,0x006b73e0d77406212,0x000368b7fd857339,0x003f9c8b1d76a22cf,0x0000000000000000,0x006b8000000000000,0x0003000000000000,0x003fa000000000000},
+ { 0x0000000000000205,0x0000000a01bb8c15d,0x00000000b51183a9,0x000000040a72dd914,0x0000000000000000,0x0000000a040000000,0x00000000a0000000,0x000000040c0000000},
+ { 0x00000000000037dc,0x000000020863598ce,0x0000000000064d00,0x00000000011415b72,0x0000000000000000,0x00000002090000000,0x0000000000000000,0x00000000011480000},
+ { 0x0000000000000000,0x00014c7d6a55aabda,0x000000000000ba73,0x000000003fd4c466e,0x0000000000000000,0x00014c80000000000,0x0000000000000000,0x000000003fe000000},
+ { 0x00000000000007ea,0x00000177d6a742377,0x000000000007ee67,0x000000003d3318461,0x0000000000000000,0x00000178000000000,0x0000000000000000,0x000000003d4000000},
+ { 0x000000000002a3c8,0x00003bb62a762743e,0x000000000008fc0b,0x000000000001cff7c,0x0000000000000000,0x00003bc0000000000,0x000000000008f800,0x000000000001d0000},
+ { 0x000000000000001d,0x00008bf09f0cb4d57,0x000000000072aceb,0x000000000007b4589,0x0000000000000000,0x00008c00000000000,0x000000000072ac00,0x000000000007b4800},
+ { 0x00000000000000e7,0x00019bbd83da42c43,0x0000000003e508d4,0x000000058fd25c65f,0x0000000000000000,0x00019c00000000000,0x0000000000000000,0x00000005900000000},
+ { 0x00000046e4734393,0x007890513c9a95406,0x000002647e8a2573,0x0001c52ba8e34322c,0x0000000000000000,0x0078a000000000000,0x0000000000000000,0x0001c580000000000},
+ { 0x000000000000000a,0x0005430148160e9d9,0x00000000000001dd,0x0000000018bc0acd7,0x0000000000000000,0x00054400000000000,0x0000000000000000,0x0000000018c000000},
+ { 0x000000408e731aa0,0x093c51bb7e7df3d0d,0x00000444c7bad2b1,0x00000d0676b55fad8,0x0000000000000000,0x09400000000000000,0x0000044000000000,0x00000d08000000000},
+ { 0x000000000fd13e69,0x00017f543c7642048,0x0000000014c23df9,0x0000000001ddd6ae8,0x0000000000000000,0x00017f80000000000,0x0000000014c00000,0x0000000001de00000},
+ { 0x0000000000000037,0x00002f57b8e879f67,0x00000000001f01b9,0x00000742a5da31f13,0x0000000000000000,0x00002f60000000000,0x0000000000000000,0x00000744000000000},
+ { 0x000000000000002d,0x0097a709eda8816e2,0x00000000000037ec,0x00000506045861471,0x0000000000000000,0x0097c000000000000,0x0000000000000000,0x00000508000000000},
+ { 0x000000001fe8b7a9,0x0325c8c9671c05cc7,0x0000000031492103,0x00001bb225d1ab9a7,0x0000000000000000,0x03260000000000000,0x0000000000000000,0x00001bb8000000000},
+ { 0x000000000000000b,0x00000007c629deaa9,0x000000004cd4301f,0x0000000008ae1c54d,0x0000000000000000,0x00000007c80000000,0x000000004cd00000,0x0000000008af00000},
+ { 0x000000000000001f,0x000000000001bb5b1,0x0000000000000629,0x0000000000001b7e9,0x0000000000000000,0x000000000001bb800,0x0000000000000600,0x0000000000001b800},
+ { 0x00000000006cef90,0x0001e792f91f9e64d,0x0000000001b6f8ff,0x00000ecf4e98e6fd7,0x0000000000000000,0x0001e800000000000,0x0000000000000000,0x00000ed0000000000},
+ { 0x000000000009c22e,0x00000018cfa23e17c,0x0000000006b0d48a,0x0000000731ec9eef6,0x0000000000000000,0x00000018d00000000,0x0000000000000000,0x00000007320000000},
+ { 0x0000000000000000,0x00000537e7129dc21,0x0000000000000004,0x000000000000018eb,0x0000000000000000,0x00000538000000000,0x0000000000000000,0x000000000000018f0},
+ { 0x000000000000001a,0x000f90ce986b53559,0x0000000000001abf,0x00000000000017083,0x0000000000000000,0x000f9400000000000,0x0000000000001a80,0x00000000000017100},
+ { 0x0000000000000f6f,0x000000000001d4e6f,0x0000000000002eef,0x0000000000000f73c,0x0000000000000800,0x000000000001d5000,0x0000000000002ec0,0x0000000000000f740},
+ { 0x0000000000000b59,0x01d35d3354a77678c,0x000000000001538b,0x0003de6cfd7e8846f,0x0000000000000000,0x01d38000000000000,0x0000000000000000,0x0003df00000000000},
+ { 0x00000000071eef99,0x000000027a78ea4b2,0x0000000007edfab7,0x00000000014ac2614,0x0000000000000000,0x000000027b0000000,0x0000000007ec0000,0x00000000014b00000},
+ { 0x0000000000000000,0x003d5bb91e01966ef,0x00000000000c4672,0x0000000000015d837,0x0000000000000000,0x003d6000000000000,0x00000000000c4400,0x0000000000015dc00},
+ { 0x0000000000000008,0x00000013b60a815f8,0x000000000000005d,0x00000000007f7596d,0x0000000000000000,0x00000013b80000000,0x0000000000000000,0x00000000007f80000},
+ { 0x0000000000000000,0x000352df65c1b1d58,0x000000000000071c,0x000000000d7d49be2,0x0000000000000000,0x00035300000000000,0x0000000000000000,0x000000000d8000000},
+ { 0x0000000000000001,0x0075d8677bce29e59,0x000000000000233d,0x0000000af546076f8,0x0000000000000000,0x0075e000000000000,0x0000000000000000,0x0000000af80000000},
+ { 0x0000000000000401,0x00000333bd05b7df8,0x00000000000af3ed,0x00000000f882faaa4,0x0000000000000000,0x00000334000000000,0x0000000000000000,0x00000000f8c000000},
+ { 0x000000000000000c,0x000002562786543e1,0x000000018e0baf8d,0x00000017cedf20126,0x0000000000000000,0x00000257000000000,0x0000000180000000,0x00000017d00000000},
+ { 0x0000000000000268,0x0000005229ad661af,0x00000001e0904669,0x00000022638ecd7f4,0x0000000000000000,0x00000052400000000,0x0000000100000000,0x00000022700000000},
+ { 0x0000000000000001,0x00000000000172be4,0x0000000000000003,0x000000000000be890,0x0000000000000000,0x00000000000173000,0x0000000000000000,0x000000000000bec00},
+ { 0x0000000000002a91,0x00000003be1f62134,0x0000000000006c3d,0x000000007ddfb99ec,0x0000000000000000,0x00000003bf0000000,0x0000000000000000,0x000000007de000000},
+ { 0x000000000000003c,0x0026bb5693b992b8e,0x00000000000000a1,0x000000000017767f3,0x0000000000000000,0x0026c000000000000,0x0000000000000000,0x00000000001778000},
+ { 0x00000000000017ee,0x0004899c4de1340f7,0x00000000000182cc,0x0000000001ebd1a68,0x0000000000000000,0x00048a00000000000,0x0000000000000000,0x0000000001ec00000},
+ { 0x0000000000000001,0x00000002f1ad20723,0x0000000000000013,0x0000000000478a12b,0x0000000000000000,0x00000002f20000000,0x0000000000000000,0x000000000047a0000},
+ { 0x0000000000158c3d,0x00000141b7a1a9ab0,0x0000000060aacec1,0x00000054c6b8058ea,0x0000000000000000,0x00000142000000000,0x0000000000000000,0x00000054e00000000},
+ { 0x0000000000000004,0x0000b814675e3818e,0x0000000000000005,0x00003b07a7a09e554,0x0000000000000000,0x0000b840000000000,0x0000000000000000,0x00003b10000000000},
+ { 0x0000000000000001,0x0000003014e6ecd4d,0x0000000000000004,0x0000000000000004f,0x0000000000000000,0x00000030200000000,0x0000000000000004,0x0000000000000004f},
+ { 0x0000000000000022,0x01fdd8042f5e00991,0x0000000004f06143,0x0000002cc4b880a0b,0x0000000000000000,0x01fe0000000000000,0x0000000000000000,0x0000002cd00000000},
+ { 0x0000000012422af5,0x0000001dc5a9a70ea,0x000000003c6a16d5,0x000000015991e5f9c,0x0000000000000000,0x0000001dc80000000,0x0000000038000000,0x000000015a0000000},
+ { 0x0000000000000730,0x00000000020a64927,0x00000000000007d9,0x0000000000006e962,0x0000000000000000,0x00000000020b00000,0x0000000000000600,0x0000000000006ea00},
+ { 0x000000000419621b,0x0000059c2239e78f0,0x00000022b9e1e062,0x00000002616390556,0x0000000000000000,0x0000059e000000000,0x00000022b9000000,0x00000002617000000},
+ { 0x00000000000001e0,0x00000b0ffcdf68b5b,0x000000000036c6dc,0x00000188cf0c5ff8e,0x0000000000000000,0x00000b10000000000,0x0000000000000000,0x00000189000000000},
+ { 0x0000000000028041,0x0396c65d069fa4986,0x0000003f259c2f2e,0x0000008c6b93769c8,0x0000000000000000,0x03970000000000000,0x0000003c00000000,0x0000008c800000000},
+ { 0x0000000000075f4c,0x00c7a0534cff97131,0x00000000a8c2e23c,0x000000003aabd6e7f,0x0000000000000000,0x00c7c000000000000,0x00000000a8000000,0x000000003ab000000},
+ { 0x0000000000001f17,0x00006ab71c6cf81f5,0x00000000003d29c0,0x00000a36cc2176e17,0x0000000000000000,0x00006ac0000000000,0x0000000000000000,0x00000a38000000000},
+ { 0x000000000000001c,0x007412ff03d9db6f9,0x0000000000006639,0x000000000025bae5c,0x0000000000000000,0x00742000000000000,0x0000000000000000,0x000000000025c0000},
+ { 0x000000000000003c,0x0a699031c9f59286e,0x000000007dbc1120,0x00074a7fda40c164f,0x0000000000000000,0x0a6c0000000000000,0x0000000000000000,0x00074c00000000000},
+ { 0x000000000000f7fd,0x015bee38668515b3a,0x0000000bc8ecc19d,0x000009d25abff587e,0x0000000000000000,0x015c0000000000000,0x0000000000000000,0x000009d4000000000},
+ { 0x000000047538e1bb,0x00018b1a54fb0e959,0x0000000b5b1bbbd0,0x00000d4cb6dbc0010,0x0000000000000000,0x00018b80000000000,0x0000000000000000,0x00000d50000000000},
+ { 0x000000000001958a,0x000000031236a58bb,0x00000000010eb95d,0x0000000044d99523e,0x0000000000000000,0x00000003130000000,0x0000000000000000,0x0000000044e000000},
+ { 0x0000000000000acf,0x00000000c4ed0c4f5,0x000000000059de74,0x000000000aafd38e0,0x0000000000000000,0x00000000c50000000,0x0000000000400000,0x000000000ab000000},
+ { 0x000000000000001f,0x000000800a13e7bc2,0x000000000000003c,0x00000000000006312,0x0000000000000000,0x00000080400000000,0x0000000000000020,0x00000000000006320},
+ { 0x000000000000010f,0x000004fed46831be2,0x000000000006f06e,0x0000000000007a401,0x0000000000000000,0x00000500000000000,0x000000000006f040,0x0000000000007a440},
+ { 0x00000000009df99e,0x0000066e93883aa54,0x000000000d660d76,0x000000122716e88b2,0x0000000000000000,0x00000670000000000,0x0000000000000000,0x00000012280000000},
+ { 0x000000000000000b,0x019ac9d8dd5f5428b,0x0000000000071901,0x000000ee3852b0a02,0x0000000000000000,0x019b0000000000000,0x0000000000000000,0x000000ee400000000},
+ { 0x0000000000000004,0x0003e36c195444756,0x000000001065821d,0x000001137b5abfedd,0x0000000000000000,0x0003e400000000000,0x0000000000000000,0x00000113800000000},
+ { 0x0000000000000004,0x072c5bc65a662532a,0x000000000013631e,0x00000037b3e36e2b7,0x0000000000000000,0x072e0000000000000,0x0000000000000000,0x00000037c00000000},
+ { 0x0000000e6449d674,0x000504c52246e3ca5,0x0000019b24ee9f65,0x0000a5425b59ae70d,0x0000000000000000,0x00050600000000000,0x0000000000000000,0x0000a580000000000},
+ { 0x00000001a69d1f04,0x003db0883fac5a03b,0x00000008c65d5023,0x00000035cd9966b83,0x0000000000000000,0x003dc000000000000,0x0000000800000000,0x00000035d00000000},
+ { 0x0000000000000007,0x000f32f874776a1fa,0x000000000d3e9e78,0x0000000017a7eacc9,0x0000000000000000,0x000f3400000000000,0x000000000d000000,0x0000000017a800000},
+ { 0x00000019a67926af,0x00377c4c0091fa984,0x000000d6b0c31a5d,0x0000004d0794130d3,0x0000000000000000,0x00378000000000000,0x000000d600000000,0x0000004d100000000},
+ { 0x00000000000117c8,0x0000001c460df2625,0x00000000000955d0,0x000000000027ef59e,0x0000000000000000,0x0000001c480000000,0x0000000000090000,0x000000000027f0000},
+ { 0x0000000000000011,0x0001b521bb1f42548,0x0000001771ce83f3,0x0000002535a9b57bb,0x0000000000000000,0x0001b580000000000,0x0000001700000000,0x00000025400000000},
+ { 0x000000000000000f,0x002c7d7ee6462af65,0x000000000010da1e,0x000000003e4ef15c2,0x0000000000000000,0x002c8000000000000,0x0000000000000000,0x000000003e5000000},
+ { 0x0000000000001088,0x00001057f1c3c84b7,0x000000000000ea68,0x00000007f0a7619a1,0x0000000000000000,0x00001058000000000,0x0000000000000000,0x00000007f20000000},
+ { 0x00000000000000bb,0x00000000179b50917,0x00000000000001fe,0x00000000114516b77,0x0000000000000000,0x0000000017a000000,0x0000000000000000,0x00000000114800000},
+ { 0x0000000000000003,0x0003dc53828d12936,0x0000000000001d51,0x0000000133be3b9d0,0x0000000000000000,0x0003dd00000000000,0x0000000000000000,0x00000001340000000},
+ { 0x0000000000000006,0x024f9a238bcc0edab,0x000000df512be5ff,0x00034a82da60ebd38,0x0000000000000000,0x02500000000000000,0x0000000000000000,0x00034b00000000000},
+ { 0x0000000000000574,0x0000048919cf626f7,0x00000532f3af0c5e,0x000000985c3e12dd4,0x0000000000000000,0x0000048a000000000,0x0000053200000000,0x00000098600000000},
+ { 0x0000000000000003,0x000091e30c74cb8fe,0x00000000028f320f,0x00000003921a9943e,0x0000000000000000,0x00009200000000000,0x0000000000000000,0x00000003930000000},
+ { 0x000000000016b579,0x000000917ebea74c7,0x000000006e340d07,0x0000004fea4392cb5,0x0000000000000000,0x00000091800000000,0x0000000000000000,0x00000050000000000},
+ { 0x0000000000078276,0x00000574bb4747350,0x00000000001f7044,0x000000fc6d1027553,0x0000000000000000,0x00000576000000000,0x0000000000000000,0x000000fc800000000},
+ { 0x0000000000000003,0x075f10b2cbb115fb2,0x000000000000002c,0x00003103f5e0562df,0x0000000000000000,0x07600000000000000,0x0000000000000000,0x00003110000000000},
+ { 0x0000000000003b8c,0x0000000039bd30e89,0x00000000000161f2,0x00000000124aa9b4f,0x0000000000000000,0x0000000039c000000,0x0000000000000000,0x00000000125000000},
+ { 0x000000000000034f,0x00002a9757e82ab1b,0x000000001dcf75c7,0x0000000fbdee3d013,0x0000000000000000,0x00002aa0000000000,0x0000000000000000,0x0000000fc00000000},
+ { 0x00000000000005bb,0x0001bbf0d0fc740cf,0x00000000069169c0,0x0000000002fa600be,0x0000000000000000,0x0001bc00000000000,0x0000000006900000,0x0000000002fb00000},
+ { 0x000000000000005f,0x00000074fdd468874,0x00000000000000b6,0x000000000408d4d63,0x0000000000000000,0x00000075000000000,0x0000000000000000,0x00000000040a00000},
+ { 0x0000000000000005,0x0033f82c256ce0ad9,0x000001e8e951d1e8,0x00003e0906b815450,0x0000000000000000,0x00340000000000000,0x0000010000000000,0x00003e10000000000},
+ { 0x00000000000076df,0x00009ab70e5ad666b,0x000000000027e852,0x0000040355997ef40,0x0000000000000000,0x00009ac0000000000,0x0000000000000000,0x00000404000000000},
+ { 0x00000000077612ea,0x00000023116c0a1d7,0x000000003cb0ef64,0x00000000462ef5b87,0x0000000000000000,0x00000023200000000,0x000000003c000000,0x00000000464000000},
+ { 0x0000000000000021,0x034f16b8174411710,0x0000000000000027,0x032fcc9da7a4ca8d2,0x0000000000000000,0x03500000000000000,0x0000000000000000,0x03300000000000000},
+ { 0x0000000000000025,0x03018c0ac11a7fe0d,0x0000000000129e9b,0x02f6a5f4060ab7922,0x0000000000000000,0x03020000000000000,0x0000000000000000,0x02f70000000000000},
+ { 0x00000000000001d4,0x046f9a358434ea226,0x000000000d1e5c87,0x000cc4b2c77905368,0x0000000000000000,0x04700000000000000,0x0000000000000000,0x000cc800000000000},
+ { 0x00000000161401f8,0x00000048feafdc00f,0x0000000043d9be71,0x000000421d0da70b7,0x0000000000000000,0x00000049000000000,0x0000000000000000,0x00000042200000000},
+ { 0x0000000000024166,0x0000c27ebd3ef5848,0x0000000000175fa1,0x000001d5f3e4cd92e,0x0000000000000000,0x0000c280000000000,0x0000000000000000,0x000001d6000000000},
+ { 0x0000000000000018,0x00744a6aa58711485,0x00000000000003b6,0x0006aecbaac8509d4,0x0000000000000000,0x00746000000000000,0x0000000000000000,0x0006b000000000000},
+ { 0x00000000000bb717,0x000000538f41226cb,0x0000000001dab8ff,0x000000000cefb49d0,0x0000000000000000,0x00000053a00000000,0x0000000001c00000,0x000000000cf000000},
+ { 0x00000000000000fe,0x0000000c9c90f6172,0x0000000000000819,0x00000000000001e81,0x0000000000000000,0x0000000ca00000000,0x0000000000000818,0x00000000000001e88},
+ { 0x0000000000000009,0x000013d8da22dff38,0x000000000000034e,0x00000000508de1240,0x0000000000000000,0x000013e0000000000,0x0000000000000000,0x0000000050a000000},
+ { 0x0000000000000005,0x00c176f44125a60b0,0x00000003bfa9aecc,0x001d4c3a0f7af3bbf,0x0000000000000000,0x00c18000000000000,0x0000000000000000,0x001d5000000000000},
+ { 0x0000000000000002,0x000198b39d23ddbfe,0x000000004015d44c,0x0000000f84443f5c7,0x0000000000000000,0x00019900000000000,0x0000000040000000,0x0000000f880000000},
+ { 0x0000000000000002,0x0000000052b02bec4,0x0000000000012d01,0x00000000000070819,0x0000000000000000,0x0000000052c000000,0x0000000000012c00,0x00000000000070a00},
+ { 0x0000000000000131,0x0000000511fec66cd,0x00000000002492d8,0x00000003f796f5177,0x0000000000000000,0x00000005120000000,0x0000000000000000,0x00000003f80000000},
+ { 0x0000000000000006,0x000080d089ae499cd,0x0000000001d92fe6,0x00000f8273ae1f227,0x0000000000000000,0x00008100000000000,0x0000000000000000,0x00000f84000000000},
+ { 0x0000000011ed9797,0x019f1deddc24f1511,0x075f6927dc0949d0,0x008353116dfb4cc51,0x0000000000000000,0x019f8000000000000,0x075f400000000000,0x00835400000000000},
+ { 0x0000000000003a70,0x007b8c9870957b267,0x0000000000e5a9d3,0x00000000003dc8ec5,0x0000000000000000,0x007ba000000000000,0x0000000000e50000,0x00000000003dd0000},
+ { 0x0000000000adb61f,0x088b052a83b0ac4c1,0x000000093c48f3e6,0x000000e38159da8c6,0x0000000000000000,0x088c0000000000000,0x0000000800000000,0x000000e3c00000000},
+ { 0x00000005935f443b,0x0180164a305c11e33,0x00fc4a2c60c1fa3f,0x0052ac5c71d1fb17e,0x0000000000000000,0x01808000000000000,0x00fc000000000000,0x0052c000000000000},
+ { 0x0000000000000003,0x01740cec153384d49,0x0000000000000015,0x000000004bf602c1d,0x0000000000000000,0x01748000000000000,0x0000000000000000,0x000000004c0000000},
+ { 0x0000000000000019,0x000000000001065f3,0x0000000000001d9b,0x00000000000013f51,0x0000000000000000,0x00000000000106800,0x0000000000001d80,0x00000000000013f80},
+ { 0x0000000000004998,0x0000000000135c70c,0x0000000000058fbf,0x00000000000fff648,0x0000000000000000,0x00000000001360000,0x0000000000058000,0x00000000001000000},
+ { 0x0000000aa0195e01,0x0611cff04fcb47e8d,0x00105623a64ba144,0x00ba26016289dad6c,0x0000000000000000,0x06120000000000000,0x0010000000000000,0x00ba4000000000000},
+ { 0x0000000000000004,0x00000000002c60905,0x00000000000028a5,0x00000000000010722,0x0000000000000000,0x00000000002c70000,0x0000000000002880,0x00000000000010740},
+ { 0x000000000000010f,0x00008fa3250e4a307,0x000000003e5c231a,0x000000074bdec7497,0x0000000000000000,0x00008fc0000000000,0x0000000020000000,0x000000074c0000000},
+ { 0x00000069e4724073,0x0dfd1a25ff029c449,0x00041423ecbeb76a,0x000163fb12c023e69,0x0000000000000000,0x0e000000000000000,0x0004100000000000,0x00016400000000000},
+ { 0x0000000000000379,0x000000a139925d7c4,0x0000000000136842,0x000000000001af84b,0x0000000000000000,0x000000a1400000000,0x0000000000136800,0x000000000001afa00},
+ { 0x0000000000000006,0x0000000bea90b0725,0x000000000000000d,0x00000000000000048,0x0000000000000000,0x0000000bec0000000,0x000000000000000d,0x00000000000000048},
+ { 0x000000000003b13b,0x000000a6d50f52086,0x000000001eec2126,0x000000035a4cd9efa,0x0000000000000000,0x000000a7000000000,0x0000000010000000,0x000000035b0000000},
+ { 0x000000000000007e,0x01e5a790150aca873,0x0000000001031748,0x0000000122dff015f,0x0000000000000000,0x01e60000000000000,0x0000000000000000,0x00000001230000000},
+ { 0x000000000000f1f8,0x000318597954248b5,0x000000001e78ee64,0x00016edb1528ef339,0x0000000000000000,0x00031900000000000,0x0000000000000000,0x00016f00000000000},
+ { 0x0000000077a27326,0x01c4137be35f081ca,0x000033427ddb9465,0x008599e3769c66397,0x0000000000000000,0x01c48000000000000,0x0000000000000000,0x0085c000000000000},
+ { 0x000000000000002a,0x0000ab600370e02c2,0x0000000000003720,0x000007043b8f91909,0x0000000000000000,0x0000ab80000000000,0x0000000000000000,0x00000706000000000},
+ { 0x0000000000000002,0x00022eeb18dcc4337,0x000000000001b726,0x00000000afd59c859,0x0000000000000000,0x00022f00000000000,0x0000000000000000,0x00000000b00000000},
+ { 0x0000000000000143,0x0000000180a71429e,0x00000000000028ca,0x0000000000172b0ed,0x0000000000000000,0x00000001810000000,0x0000000000000000,0x00000000001730000},
+ { 0x0000000000000029,0x003f85bb20ddcf4ec,0x0000000349ee8f3f,0x000005096f7bc0668,0x0000000000000000,0x003f9000000000000,0x0000000000000000,0x0000050a000000000},
+ { 0x0000000000000001,0x001c1460ee6b37410,0x0000000000000096,0x00000000078da3761,0x0000000000000000,0x001c1800000000000,0x0000000000000000,0x00000000078e00000},
+ { 0x0000000000000031,0x00a9ce35f30460b6e,0x000000002dc73d37,0x00359b3cafe7d8c75,0x0000000000000000,0x00aa0000000000000,0x0000000000000000,0x0035a000000000000},
+ { 0x00000000000000cb,0x001b51730ad73ae88,0x00000000003df9f5,0x0000000062563db03,0x0000000000000000,0x001b5800000000000,0x0000000000000000,0x00000000626000000},
+ { 0x0000000000000cdd,0x000001ec64dd2f43e,0x0000001f13eaee65,0x000000bfdc36275a7,0x0000000000000000,0x000001ec800000000,0x0000001c00000000,0x000000c0000000000},
+ { 0x0000000000000007,0x0000025f63c68b119,0x000000000005ab36,0x000000083d30a4bfa,0x0000000000000000,0x00000260000000000,0x0000000000000000,0x00000008400000000},
+ { 0x0000000000000000,0x0025ff665d1e80431,0x0000000180478b9a,0x00000001dd7438bbc,0x0000000000000000,0x00260000000000000,0x0000000180000000,0x00000001dd8000000},
+ { 0x0000000000004fe5,0x00a27a8851ef6d7d9,0x000000000011bef2,0x000000000172d792e,0x0000000000000000,0x00a28000000000000,0x0000000000100000,0x00000000017300000},
+ { 0x0000000000000006,0x0000000e977e06ae8,0x000000003f095b6c,0x0000000777d26d07d,0x0000000000000000,0x0000000e980000000,0x0000000020000000,0x00000007780000000},
+ { 0x000000000000000f,0x0000000006ff002ec,0x000000000000003f,0x00000000000002fdc,0x0000000000000000,0x00000000070000000,0x0000000000000030,0x00000000000002fe0},
+ { 0x0000000000000041,0x038205d0fe3646d87,0x0000000000007e16,0x0071ef0811e599ea1,0x0000000000000000,0x03830000000000000,0x0000000000000000,0x00720000000000000},
+ { 0x0000000000026e89,0x003bb88080de74e93,0x0000000000046c20,0x00000000681198630,0x0000000000000000,0x003bc000000000000,0x0000000000000000,0x00000000682000000},
+ { 0x0000000000000c91,0x000056af89596e1bd,0x000000000003647e,0x00003ac5e035df504,0x0000000000000000,0x000056c0000000000,0x0000000000000000,0x00003ad0000000000},
+ { 0x0000000000000000,0x0174ad9d2c31721ba,0x00000000bf0c62fe,0x0000002b26388c874,0x0000000000000000,0x01750000000000000,0x0000000000000000,0x0000002b300000000},
+ { 0x0000000000001ebf,0x00c3d1947d7c6c756,0x00489c8f7995d175,0x000eed2da569fc866,0x0000000000000000,0x00c40000000000000,0x0048800000000000,0x000ef000000000000},
+ { 0x000000000097215b,0x00005f4eff84f029c,0x0000000cad62a47c,0x000011dab2251c7e8,0x0000000000000000,0x00005f60000000000,0x0000000000000000,0x000011e0000000000},
+ { 0x00000000000004fc,0x072831fc3b1638fca,0x0000000000f5d2b6,0x000bb3402a5993e3e,0x0000000000000000,0x072a0000000000000,0x0000000000000000,0x000bb400000000000},
+ { 0x0000000060ad0bf0,0x0000b60d4b3e4f5ca,0x000001b9d1b1a639,0x00000042c7ef046fb,0x0000000000000000,0x0000b640000000000,0x000001b900000000,0x00000042d00000000},
+ { 0x000000000000037c,0x001b50b030aa1b249,0x000000000353f294,0x0000000d54749017c,0x0000000000000000,0x001b5800000000000,0x0000000000000000,0x0000000d580000000},
+ { 0x000000000002d62e,0x0499be385c681b5dc,0x0000060c590d5b77,0x000c448101d7ee430,0x0000000000000000,0x049a0000000000000,0x0000000000000000,0x000c4800000000000},
+ { 0x0000000000000007,0x000001460ef07881c,0x00000000000000a0,0x000000011945e05da,0x0000000000000000,0x00000146800000000,0x0000000000000000,0x00000001198000000},
+ { 0x0000000000000122,0x01fd0c57b8edf7b87,0x00000000007b8cfe,0x00000000000d33337,0x0000000000000000,0x01fd8000000000000,0x00000000007b8000,0x00000000000d34000},
+ { 0x000000000000076c,0x00000000a71bc894d,0x0000000000000ad3,0x00000000000003a2f,0x0000000000000000,0x00000000a74000000,0x0000000000000ad0,0x00000000000003a30},
+ { 0x000000000000001f,0x0000024cd1db3462a,0x0000000000021643,0x00000178af49adf18,0x0000000000000000,0x0000024d000000000,0x0000000000000000,0x00000179000000000},
+ { 0x000000000000002a,0x048e179e8a7181a99,0x00000000a571bda4,0x01177f16a00cc4f15,0x0000000000000000,0x04900000000000000,0x0000000000000000,0x01178000000000000},
+ { 0x000000014758d418,0x00068fad67e1507ad,0x0000003cf41ce65a,0x000054445f7a96139,0x0000000000000000,0x00069000000000000,0x0000000000000000,0x00005460000000000},
+ { 0x0000000000000001,0x0000000011b394b9d,0x000000000000006d,0x0000000000001c15e,0x0000000000000000,0x0000000011b800000,0x0000000000000000,0x0000000000001c180},
+ { 0x000000001ee88e3c,0x0005febdaea6195ab,0x000000012d8e2d4a,0x00020cd7ee8ccfbbc,0x0000000000000000,0x00060000000000000,0x0000000000000000,0x00020d00000000000},
+ { 0x0000000000000000,0x00068c4008502bdd5,0x00000004ef01b915,0x00004f142d2fcca0b,0x0000000000000000,0x00068e00000000000,0x0000000000000000,0x00004f20000000000},
+ { 0x0000000000001b51,0x046f1e2458a974d31,0x000000000e2b7ca0,0x021acd38cf7a04e03,0x0000000000000000,0x04700000000000000,0x0000000000000000,0x021b0000000000000},
+ { 0x00000000000057e8,0x0d78d2a939d7a3c0e,0x0000000000960b94,0x03e8ffa0ad2b0b86a,0x0000000000000000,0x0d7c0000000000000,0x0000000000000000,0x03e90000000000000},
+ { 0x000000000000007d,0x07bd8218b900a271f,0x000000000000008b,0x007fc3c654fd8e108,0x0000000000000000,0x07be0000000000000,0x0000000000000000,0x007fe000000000000},
+ { 0x000000000000004a,0x007cd8a2cb678e378,0x00000000004458a3,0x00000000000f56fa5,0x0000000000000000,0x007ce000000000000,0x0000000000444000,0x00000000000f58000},
+ { 0x000000697e342601,0x031c5efda28bc1f06,0x000d6152b4766ce0,0x0003c3fe231da025c,0x0000000000000000,0x031d0000000000000,0x000d600000000000,0x0003c400000000000},
+ { 0x0000000000005bee,0x0000005c768cde1e0,0x0000000017a88b1f,0x0000000001b148b84,0x0000000000000000,0x0000005c800000000,0x0000000017a80000,0x0000000001b150000},
+ { 0x000000000000000a,0x00ab4cc1281b74133,0x0000006cd7ed1a62,0x00012011fee1e0f63,0x0000000000000000,0x00ab8000000000000,0x0000000000000000,0x00012080000000000},
+ { 0x00000000000007ba,0x0021859b245ea3e9a,0x000002334b56baaf,0x000057ee9b130067f,0x0000000000000000,0x00219000000000000,0x0000020000000000,0x00005800000000000},
+ { 0x0000000000000032,0x0000000051f910b62,0x000000000000010d,0x00000000000022358,0x0000000000000000,0x00000000520000000,0x0000000000000100,0x00000000000022400},
+ { 0x0000000000001804,0x0018091ff656ffe4d,0x00000000208d4c0f,0x0000001cef8a58918,0x0000000000000000,0x00181000000000000,0x0000000000000000,0x0000001cf00000000},
+ { 0x0000000000000000,0x000f1f62ffb1a461d,0x0000019717103e67,0x000003f293377071e,0x0000000000000000,0x000f2000000000000,0x0000019000000000,0x000003f3000000000},
+ { 0x0000000000000037,0x0046f21829f20f434,0x000000000000007c,0x000000000003987f5,0x0000000000000000,0x00470000000000000,0x0000000000000000,0x00000000000399000},
+ { 0x0000000000001ac5,0x000000d4fb4ccf5b6,0x000000000003672f,0x00000000027e36f3b,0x0000000000000000,0x000000d5000000000,0x0000000000000000,0x00000000027f00000},
+ { 0x000000000000000f,0x0347de05426e3cccd,0x0000eae687603041,0x0180c3654d8c63da0,0x0000000000000000,0x03480000000000000,0x0000000000000000,0x01810000000000000},
+ { 0x00000000003aa2ee,0x000000043bf09c60a,0x00000000009e1343,0x00000000004e017d6,0x0000000000000000,0x000000043c0000000,0x00000000009e0000,0x00000000004e20000},
+ { 0x0000000000000faf,0x05ba50868bce3bfd7,0x0000e3cdb63d1c4f,0x00015690f5ea7a193,0x0000000000000000,0x05bc0000000000000,0x0000e00000000000,0x00015700000000000},
+ { 0x0000000000000055,0x0000a918781602412,0x000000033fa3c668,0x000038e6e02b16485,0x0000000000000000,0x0000a940000000000,0x0000000000000000,0x000038f0000000000},
+ { 0x0000000000000001,0x00000000001168f6a,0x0000000000000a98,0x00000000000000d4d,0x0000000000000000,0x00000000001170000,0x0000000000000a98,0x00000000000000d4d},
+ { 0x0000000000000027,0x0b4a8c1ee99ffd6e0,0x0000000000000057,0x000000000000eb8ac,0x0000000000000000,0x0b4c0000000000000,0x0000000000000000,0x000000000000ebc00},
+ { 0x000000000000019e,0x00001abfbfefe80c9,0x0000000000000cc2,0x00000006daa6fb2bf,0x0000000000000000,0x00001ac0000000000,0x0000000000000000,0x00000006dc0000000},
+ { 0x0000000000000004,0x00000000057000c65,0x0000000000ee40e3,0x000000000164aeb35,0x0000000000000000,0x00000000057200000,0x0000000000e80000,0x00000000016500000},
+ { 0x0000000000000199,0x0055c2a9d8dd89fbf,0x0000000027db9d09,0x00125efc935c303d5,0x0000000000000000,0x0055e000000000000,0x0000000000000000,0x00126000000000000},
+ { 0x000000000439016b,0x0001b3a97f1a3d16f,0x0000000004852ca2,0x000000000431e7208,0x0000000000000000,0x0001b400000000000,0x0000000004800000,0x00000000043200000},
+ { 0x0000000000000004,0x0004c9767daca3321,0x00005a79a7c9908d,0x000030b96be26fe3a,0x0000000000000000,0x0004ca00000000000,0x00005a0000000000,0x000030c0000000000},
+ { 0x00000000000ac8b8,0x000b5daaf0a386828,0x0000000006d2f974,0x00000001369fde126,0x0000000000000000,0x000b6000000000000,0x0000000000000000,0x00000001370000000},
+ { 0x000000000005459a,0x007e26af87870767a,0x00001fe749a0b94c,0x00000d5dae90fd694,0x0000000000000000,0x007e4000000000000,0x00001fc000000000,0x00000d60000000000},
+ { 0x000000000000014c,0x01fbecb7794817305,0x000000000003a829,0x000008f199942fc3a,0x0000000000000000,0x01fc0000000000000,0x0000000000000000,0x000008f4000000000},
+ { 0x0000000000000233,0x0000001f6c7764168,0x00000000000009aa,0x0000000000c286c32,0x0000000000000000,0x0000001f700000000,0x0000000000000000,0x0000000000c2c0000},
+ { 0x0000000000000018,0x00001b82c25b1b162,0x0000000001a6a257,0x000012cc90f55d231,0x0000000000000000,0x00001b88000000000,0x0000000000000000,0x000012d0000000000},
+ { 0x0000000000000004,0x00059a041f9727699,0x0000000000196a1a,0x0000010294a1d7079,0x0000000000000000,0x00059c00000000000,0x0000000000000000,0x00000103000000000},
+ { 0x00000000012301d0,0x0000075a58db99a06,0x00000003d98bb31b,0x0000006f944dd5819,0x0000000000000000,0x0000075c000000000,0x0000000200000000,0x0000006fa00000000},
+ { 0x0000000007ac5d51,0x0000078a36f385338,0x00000019ba25a2a5,0x00000001b16f998c8,0x0000000000000000,0x0000078c000000000,0x00000019ba000000,0x00000001b17000000},
+ { 0x0000000000000003,0x000074cebe9135e23,0x0000000000000007,0x00000002929c96049,0x0000000000000000,0x000074e0000000000,0x0000000000000000,0x00000002930000000},
+ { 0x000000000000000e,0x00000004ccda67137,0x000000000000003a,0x00000001d7b136f85,0x0000000000000000,0x00000004ce0000000,0x0000000000000000,0x00000001d80000000},
+ { 0x0000000000000000,0x000002ed140c71f53,0x00000000000004f7,0x00000000000001002,0x0000000000000000,0x000002ee000000000,0x00000000000004f7,0x00000000000001002},
+ { 0x0000000000000f35,0x00003ef5b5cbe6f1b,0x0000000000002b9f,0x000009a25939a8bb8,0x0000000000000000,0x00003f00000000000,0x0000000000000000,0x000009a4000000000},
+ { 0x00000000000435bb,0x038ac31de9cc918a1,0x000000000006d808,0x0074a31ec66070a1a,0x0000000000000000,0x038b0000000000000,0x0000000000000000,0x0074c000000000000},
+ { 0x0000000000000005,0x02f8f3053a7272f02,0x00000000000001c0,0x0000000000000f55c,0x0000000000000000,0x02f90000000000000,0x00000000000001c0,0x0000000000000f580},
+ { 0x000000000127c0d8,0x000002ae74a3d3b6d,0x00000003594b6ebc,0x00000018b34bd028a,0x0000000000000000,0x000002af000000000,0x0000000300000000,0x00000018b80000000},
+ { 0x0000000000000b25,0x000014bb73dbdd0f3,0x0000000000000c0a,0x00000000001efc1ab,0x0000000000000000,0x000014c0000000000,0x0000000000000000,0x00000000001f00000},
+ { 0x00000000000947b4,0x000098e292ef7014b,0x000003fc93947ebe,0x0000088c3457b56dd,0x0000000000000000,0x00009900000000000,0x000003c000000000,0x00000890000000000},
+ { 0x0000000000003310,0x00031f1824fea0969,0x000000000000b8d8,0x0000000c03d0720a1,0x0000000000000000,0x00032000000000000,0x0000000000000000,0x0000000c040000000},
+ { 0x00000000000058fa,0x00005174970e82673,0x00000000000a5b4f,0x0000000000a76294f,0x0000000000000000,0x00005180000000000,0x0000000000080000,0x0000000000a780000},
+ { 0x0000000000000057,0x00000077c8bcc9e5e,0x00000000000000d0,0x000000005b517cf2a,0x0000000000000000,0x00000077e00000000,0x0000000000000000,0x000000005b6000000},
+ { 0x000000000000000d,0x0027c9b6ac788ef3e,0x0000002da48fe57e,0x000fafd087f784402,0x0000000000000000,0x0027d000000000000,0x0000000000000000,0x000fb000000000000},
+ { 0x0000000000001530,0x006ed6a4d64969454,0x0000726117cdb7e4,0x00000b4f9900e143d,0x0000000000000000,0x006ee000000000000,0x0000726000000000,0x00000b50000000000},
+ { 0x00000000000004f1,0x0000000334070fb66,0x0000000000000cb2,0x000000000000f7cdf,0x0000000000000000,0x00000003350000000,0x0000000000000c00,0x000000000000f8000},
+ { 0x0000000000000090,0x00063f1b6f37caf13,0x000000000000035a,0x00000b66d6ebc071f,0x0000000000000000,0x00064000000000000,0x0000000000000000,0x00000b68000000000},
+ { 0x0000000000002406,0x0050e0e1cb011d4eb,0x000001bcd21531e1,0x000f8e08aabd0b23a,0x0000000000000000,0x00510000000000000,0x0000000000000000,0x000f9000000000000},
+ { 0x00000000000030d6,0x00007aefffff4b3fa,0x00000000012f62f0,0x000000055cbc76861,0x0000000000000000,0x00007b00000000000,0x0000000000000000,0x000000055e0000000},
+ { 0x000000000000001a,0x05238cd17b35ad275,0x000000001b6bb6d8,0x000000e2261016b2e,0x0000000000000000,0x05240000000000000,0x0000000000000000,0x000000e2400000000},
+ { 0x0000000071717cd0,0x0000005436c472e94,0x0000003b83a2150a,0x00000003d9d0e5095,0x0000000000000000,0x00000054400000000,0x0000003b83000000,0x00000003d9e000000},
+ { 0x00000000001a43ce,0x00009596cb17ee0e3,0x00000a4baf9911fe,0x000005b4d81c9777b,0x0000000000000000,0x000095c0000000000,0x00000a4000000000,0x000005b6000000000},
+ { 0x0000000000000099,0x0001dd3e4d7f6812f,0x0000000000395ed1,0x00000001133f0d310,0x0000000000000000,0x0001dd80000000000,0x0000000000000000,0x00000001138000000},
+ { 0x00000000000003e7,0x0efe24dd1d10a7287,0x0000000000000564,0x000000000001e122f,0x0000000000000000,0x0f000000000000000,0x0000000000000000,0x000000000001e1800},
+ { 0x0000000000000003,0x000000000a68adf03,0x00000000000f79ea,0x0000000000c6ae5f6,0x0000000000000000,0x000000000a6c00000,0x00000000000c0000,0x0000000000c6c0000},
+ { 0x000000000001eb89,0x051b20e059ed8b630,0x000000000027198d,0x00001b7d80b078d58,0x0000000000000000,0x051c0000000000000,0x0000000000000000,0x00001b80000000000},
+ { 0x00000000049828e5,0x0d324e1619bcdd147,0x0000000174a80010,0x0001e431054f44091,0x0000000000000000,0x0d340000000000000,0x0000000000000000,0x0001e480000000000},
+ { 0x0000000000001716,0x000023b83c446682e,0x0000000000ab0f16,0x00000004ec1ec7b96,0x0000000000000000,0x000023c0000000000,0x0000000000000000,0x00000004ee0000000},
+ { 0x0000000000004b64,0x01428260a5f1d6b58,0x0000000000364d7e,0x00000000004dc3bff,0x0000000000000000,0x01430000000000000,0x0000000000360000,0x00000000004de0000},
+ { 0x00000000000000d0,0x000ae7943b481cf3b,0x000000000047f253,0x000019e1f92f4ab59,0x0000000000000000,0x000ae800000000000,0x0000000000000000,0x000019e8000000000},
+ { 0x000000000000001c,0x0000025842ffc1366,0x00000000000003b1,0x0000000000c73b5ae,0x0000000000000000,0x00000259000000000,0x0000000000000000,0x0000000000c740000},
+ { 0x0000000000005397,0x00000053d731c336a,0x000000000043f9f9,0x00000016ede11d196,0x0000000000000000,0x00000053e00000000,0x0000000000000000,0x00000016f00000000},
+ { 0x00010055db3e031f,0x006a86999eb0e5b2b,0x000e03fd4a08b64e,0x002ff183feecd625e,0x0000000000000000,0x006aa000000000000,0x000e000000000000,0x00300000000000000},
+ { 0x000000000000000b,0x0000261e50b56e0f4,0x0000000000000019,0x0000000001f0b2d99,0x0000000000000000,0x00002620000000000,0x0000000000000000,0x0000000001f100000},
+ { 0x000000018ec5a0f6,0x005ddbf85b3f23695,0x0000013c1cdbae75,0x00292209ec5265dda,0x0000000000000000,0x005de000000000000,0x0000000000000000,0x00293000000000000},
+ { 0x00000000000000b3,0x000006dafe17c84f6,0x000000000000ffd9,0x000000001ada25bc1,0x0000000000000000,0x000006dc000000000,0x0000000000000000,0x000000001ae000000},
+ { 0x0000000000000000,0x01082ec0ded0e33d2,0x00000007fa02595e,0x00005190dd18dfe7a,0x0000000000000000,0x01088000000000000,0x0000000000000000,0x000051a0000000000},
+ { 0x000000000000002c,0x02ea03770df3d8e89,0x000000000001dbd3,0x00000000172d0fe89,0x0000000000000000,0x02eb0000000000000,0x0000000000000000,0x00000000173000000},
+ { 0x0000000000065733,0x000000075c9d7f0c2,0x000000034a3c0090,0x00000006f46810304,0x0000000000000000,0x000000075e0000000,0x0000000340000000,0x00000006f60000000},
+ { 0x00000000000dc831,0x0028ff27fa4c07d2e,0x00000000eb7cdc66,0x00000000c0e5453f7,0x0000000000000000,0x00290000000000000,0x00000000e8000000,0x00000000c10000000},
+ { 0x00000000006ce8e0,0x000000042d8feb052,0x0000000001a58e96,0x000000000065d3aa0,0x0000000000000000,0x000000042e0000000,0x0000000001a40000,0x000000000065e0000},
+ { 0x0000000000000015,0x000000011f6776605,0x0000000000000038,0x00000000000035cd1,0x0000000000000000,0x000000011f8000000,0x0000000000000000,0x00000000000035d00},
+ { 0x0000000000003336,0x0945aa31f756d6938,0x000003c7ccfc8360,0x00abfe1bd1f1d2368,0x0000000000000000,0x09480000000000000,0x0000000000000000,0x00ac0000000000000},
+ { 0x0000000000000000,0x001500e952f9db0a3,0x00000027b2cc6701,0x0000e69d8382a4776,0x0000000000000000,0x00150800000000000,0x0000000000000000,0x0000e6c0000000000},
+ { 0x00000000000c2f00,0x0001f66dbd84e2b13,0x0000002367c3fc2d,0x00000012264ea529a,0x0000000000000000,0x0001f680000000000,0x0000002340000000,0x00000012280000000},
+ { 0x000000000dcc717b,0x00041d6bbe4a3116e,0x0000000012c625fc,0x0000000015e651092,0x0000000000000000,0x00041e00000000000,0x0000000012800000,0x0000000015e800000},
+ { 0x0000000000002c32,0x00c0fef1e8e863ef6,0x000000000000f25a,0x000000004f000900b,0x0000000000000000,0x00c10000000000000,0x0000000000000000,0x000000004f2000000},
+ { 0x000000000000003f,0x0000006e75508496a,0x00000000000070a5,0x00000000092c92749,0x0000000000000000,0x0000006e800000000,0x0000000000000000,0x00000000093000000},
+ { 0x0000000000000020,0x00007c8871220928f,0x0000000000005c9c,0x000000000000e3902,0x0000000000000000,0x00007ca0000000000,0x0000000000005c00,0x000000000000e3c00},
+ { 0x000000000000001a,0x00006428cf6a90ac4,0x0000000000005d07,0x000000000037bdbc4,0x0000000000000000,0x00006440000000000,0x0000000000000000,0x000000000037c0000},
+ { 0x000000005992e652,0x0394b6c4c3df481fb,0x000000485916e3e6,0x00066efb498e48f09,0x0000000000000000,0x03950000000000000,0x0000000000000000,0x00067000000000000},
+ { 0x0000000000000583,0x002d68fee91319586,0x000000023ece0dbd,0x0000000032b854cbd,0x0000000000000000,0x002d7000000000000,0x000000023ec00000,0x0000000032bc00000},
+ { 0x0000000000000013,0x00262342e8ebf7b74,0x000000057a2a3b31,0x000085d2a721e4a50,0x0000000000000000,0x00263000000000000,0x0000000000000000,0x00008600000000000},
+ { 0x0000000000000156,0x00000155ececc1771,0x0000000000000258,0x00000036c65ef1593,0x0000000000000000,0x00000156000000000,0x0000000000000000,0x00000036d00000000},
+ { 0x00000000000007e2,0x000ad54f728aabc4f,0x00000010ab990db5,0x0000008ad3c5a6872,0x0000000000000000,0x000ad800000000000,0x0000001000000000,0x0000008b000000000},
+ { 0x00000000000001da,0x00000023f55d3be14,0x0000000000003cc2,0x000000000002888c1,0x0000000000000000,0x00000024000000000,0x0000000000003000,0x00000000000289000},
+ { 0x0000000000008dbf,0x0000000003e5f076a,0x0000000000710328,0x0000000000597e9be,0x0000000000000000,0x0000000003e600000,0x0000000000700000,0x00000000005980000},
+ { 0x00000000000000d1,0x004148cf990dc05bd,0x00000000004a6a66,0x002fe94a290183fd3,0x0000000000000000,0x00416000000000000,0x0000000000000000,0x002ff000000000000},
+ { 0x000000000017ba54,0x000240be96262bb35,0x0000000000660b02,0x00000000004838144,0x0000000000000000,0x00024100000000000,0x0000000000660000,0x00000000004840000},
+ { 0x000000000f72e00c,0x00075a3042a3a26a3,0x000194792d15fced,0x000034b7e0dc1c327,0x0000000000000000,0x00075c00000000000,0x0001940000000000,0x000034b8000000000},
+ { 0x000000000000001c,0x00000000000c6bc5f,0x0000000000002b31,0x000000000002a69a2,0x0000000000000000,0x00000000000c6c000,0x0000000000002000,0x000000000002a7000},
+ { 0x0000000000000000,0x000064246bb1cc51d,0x00000000002b9e48,0x000000045ebaed2fe,0x0000000000000000,0x00006440000000000,0x0000000000000000,0x00000004600000000},
+ { 0x0000000000024227,0x0000020f418e0a5d2,0x00000000002b13f3,0x0000002ac961b1351,0x0000000000000000,0x00000210000000000,0x0000000000000000,0x0000002ad00000000},
+ { 0x0000000000000034,0x007edee172c1f0894,0x0000000000019cae,0x000000000008f2f04,0x0000000000000000,0x007ee000000000000,0x0000000000018000,0x000000000008f4000},
+ { 0x0000000000000036,0x000001e5ad05c4904,0x00000000001c39f9,0x000000022ef7d3939,0x0000000000000000,0x000001e6000000000,0x0000000000000000,0x000000022f0000000},
+ { 0x0000000000000000,0x000a6ebb027215ac6,0x000000001cbbc5e8,0x0000000034626edd9,0x0000000000000000,0x000a7000000000000,0x000000001c000000,0x00000000347000000},
+ { 0x00000000002712c0,0x0000001ef74b285fc,0x000000017bab56c1,0x000000002cfb7bed5,0x0000000000000000,0x0000001ef80000000,0x000000017b800000,0x000000002d0000000},
+ { 0x0000000000000ff3,0x00000186a4f4aded3,0x000000000000a615,0x00000000000310bc6,0x0000000000000000,0x00000187000000000,0x000000000000a000,0x00000000000311000},
+ { 0x00000000000bd80f,0x00000b5e2bd7b660e,0x000000577d3f1d1d,0x000006abf0ca5b69d,0x0000000000000000,0x00000b60000000000,0x0000004000000000,0x000006ac000000000},
+ { 0x000000000081354e,0x0000013ebf32ac34b,0x00000000010a095d,0x0000001c37b197eac,0x0000000000000000,0x0000013f000000000,0x0000000000000000,0x0000001c380000000},
+ { 0x00000009daf4d4c9,0x0004300263871fc51,0x00000276c33eaebf,0x00000029ae52dc7f5,0x0000000000000000,0x00043200000000000,0x00000276c0000000,0x00000029af0000000},
+ { 0x000000000005495c,0x0e9f60e079c1f3517,0x000000000e04347e,0x0000000000efee733,0x0000000000000000,0x0ea00000000000000,0x000000000e040000,0x0000000000eff0000},
+ { 0x000000000000371b,0x0048e2351386512f5,0x000000000007985f,0x0013e41561ae6002c,0x0000000000000000,0x00490000000000000,0x0000000000000000,0x0013e800000000000},
+ { 0x0000000000000015,0x000007372c6623d00,0x000000000000052f,0x0000000006342cdc1,0x0000000000000000,0x00000738000000000,0x0000000000000000,0x00000000063600000},
+ { 0x0000000000000185,0x0000000bb974f7a9c,0x0000000000001c1d,0x00000000000b483e7,0x0000000000000000,0x0000000bbc0000000,0x0000000000000000,0x00000000000b4c000},
+ { 0x0000000000000c30,0x005d997baa4b3a67a,0x00000000004d6bed,0x000000ca5a51309fc,0x0000000000000000,0x005da000000000000,0x0000000000000000,0x000000ca800000000},
+ { 0x00000000000000b9,0x000003840029b732c,0x00000000000000de,0x000000e1fca434de4,0x0000000000000000,0x00000385000000000,0x0000000000000000,0x000000e2000000000},
+ { 0x0000000000006060,0x00000b14c71d58185,0x000000003099fa8f,0x0000006d790943887,0x0000000000000000,0x00000b18000000000,0x0000000000000000,0x0000006d800000000},
+ { 0x0000000000000004,0x0000000039bd39e8a,0x00000000001abe96,0x000000000002c9578,0x0000000000000000,0x0000000039c000000,0x00000000001ab800,0x000000000002c9800},
+ { 0x000000000000002b,0x0003daa09711ed742,0x000000032d6d6b17,0x00000000b5f25eee7,0x0000000000000000,0x0003db00000000000,0x000000032c000000,0x00000000b60000000},
+ { 0x00000000000001f5,0x00000009391c87232,0x000000000000a5b3,0x000000000001f1249,0x0000000000000000,0x000000093c0000000,0x000000000000a000,0x000000000001f1800},
+ { 0x0000000000000003,0x0060d6099532644b1,0x0000000000000081,0x000000c2e108a0109,0x0000000000000000,0x0060e000000000000,0x0000000000000000,0x000000c3000000000},
+ { 0x0000000004164efe,0x00c8431b1840016f2,0x00000000cc88e7bb,0x002ede683b0658def,0x0000000000000000,0x00c88000000000000,0x0000000000000000,0x002ee000000000000},
+ { 0x00000000000b25e9,0x00015978d2b127277,0x0000000018d504c2,0x0000000002d70e930,0x0000000000000000,0x00015980000000000,0x0000000018d00000,0x0000000002d780000},
+ { 0x0000000000000bc7,0x0ddad27cfcc531d71,0x0000000009893aa0,0x000329ee8b38e9b3c,0x0000000000000000,0x0ddc0000000000000,0x0000000000000000,0x00032a00000000000},
+ { 0x00000173276b83f5,0x0000139eab2cc846d,0x000004ef05a35b22,0x00000ff11d095e16c,0x0000010000000000,0x000013a0000000000,0x000004c000000000,0x00000ff4000000000},
+ { 0x00000010f9854cf3,0x0000153470b0005d8,0x00000057e4030071,0x000004333691668b2,0x0000000000000000,0x00001538000000000,0x0000004000000000,0x00000434000000000},
+ { 0x0000007df8479982,0x00000120c80e04994,0x0000008342c26930,0x000000bcc8ba48ba9,0x0000007800000000,0x00000121000000000,0x0000008000000000,0x000000bd000000000},
+ { 0x0000000000000089,0x0172230061e9fbca3,0x00000000000011a9,0x0000002032f9e8dbe,0x0000000000000000,0x01728000000000000,0x0000000000000000,0x00000020400000000},
+ { 0x0000000000000000,0x000000014c86c5406,0x0000000000000002,0x0000000000018d432,0x0000000000000000,0x000000014d0000000,0x0000000000000000,0x0000000000018d800},
+ { 0x0000000000000051,0x000000006b70d583f,0x0000000000000f0f,0x00000000000a554e7,0x0000000000000000,0x000000006b8000000,0x0000000000000000,0x00000000000a58000},
+ { 0x000000000001e9d1,0x001f7f20bb7cf85dc,0x00000006ea7b61d8,0x000000008a4da29e5,0x0000000000000000,0x001f8000000000000,0x00000006ea000000,0x000000008a5000000},
+ { 0x000000000000003b,0x000068df21b845cac,0x000000e7a28238e1,0x000007b1128917013,0x0000000000000000,0x000068e0000000000,0x000000e000000000,0x000007b2000000000},
+ { 0x0000000000000029,0x000000000000a0a97,0x0000000000000508,0x00000000000000887,0x0000000000000000,0x000000000000a0c00,0x0000000000000508,0x00000000000000887},
+ { 0x0000000000021e33,0x002c4115a929a0fbd,0x00000000e42d6e76,0x000018b9a1dc422d3,0x0000000000000000,0x002c5000000000000,0x0000000000000000,0x000018c0000000000},
+ { 0x00000000000001b9,0x00000020d5fd355c4,0x0000000001076f77,0x000000019b61565bd,0x0000000000000000,0x00000020e00000000,0x0000000000000000,0x000000019b8000000},
+ { 0x00000000000343fb,0x0003c382831e11ea1,0x000000007cceb177,0x00000000172288643,0x0000000000000000,0x0003c400000000000,0x000000007cc00000,0x00000000172400000},
+ { 0x00000000000029aa,0x000739409b5bbeb30,0x000000000097eaa5,0x0000000250ce12f2d,0x0000000000000000,0x00073a00000000000,0x0000000000000000,0x00000002510000000},
+ { 0x0000000000faa234,0x0055c7adadacea5df,0x0000000d0ef521bd,0x0000007bf0160a9b5,0x0000000000000000,0x0055e000000000000,0x0000000c00000000,0x0000007c000000000},
+ { 0x00000000000001ec,0x0000dccb1c70e3bed,0x000000019d018dae,0x000001ef5a134d32c,0x0000000000000000,0x0000dd00000000000,0x0000000000000000,0x000001ef800000000},
+ { 0x0000000000000011,0x015d8f02e79ec43e1,0x00000000000006f0,0x00000000000034e53,0x0000000000000000,0x015e0000000000000,0x0000000000000600,0x00000000000034f00},
+ { 0x00000000000047c3,0x000d19a5333705f32,0x00000000000076be,0x000002bc155d64a9e,0x0000000000000000,0x000d1c00000000000,0x0000000000000000,0x000002bd000000000},
+ { 0x00000000011ca24f,0x00f0421d02f52efde,0x00000b01def15f6b,0x00019631780f00e4b,0x0000000000000000,0x00f08000000000000,0x0000080000000000,0x00019680000000000},
+ { 0x000000000000001d,0x000075f9e0addcf71,0x00000000000077bb,0x000000000200701d2,0x0000000000000000,0x00007600000000000,0x0000000000000000,0x00000000020100000},
+ { 0x0000000000000131,0x000308d3c8f9b1d1e,0x0000002949e97ffd,0x00000006cd8d1ad51,0x0000000000000000,0x00030900000000000,0x0000002940000000,0x00000006ce0000000},
+ { 0x00000000000003a7,0x00000da3012f8b0b1,0x000000000000d690,0x0000000000e971937,0x0000000000000000,0x00000da4000000000,0x0000000000000000,0x0000000000e980000},
+ { 0x000000000000000f,0x005bbb535707369e4,0x000000000922d8f1,0x000000000788be617,0x0000000000000000,0x005bc000000000000,0x0000000009200000,0x00000000078a00000},
+ { 0x0000000000000009,0x015815a758393a4a4,0x0000000000000bc8,0x00000022f6396ed1a,0x0000000000000000,0x01588000000000000,0x0000000000000000,0x00000023000000000},
+ { 0x00000000e13d3f63,0x001461775734a0ba3,0x0000002982d51366,0x00003f9bdf228ec89,0x0000000000000000,0x00146800000000000,0x0000000000000000,0x00003fa0000000000},
+ { 0x0000000000000000,0x02ff8e3804fa224fe,0x00000000000001aa,0x000000000010e7138,0x0000000000000000,0x03000000000000000,0x0000000000000000,0x000000000010e8000},
+ { 0x0000000000000014,0x0000000000042f456,0x0000000000000091,0x000000000000001f0,0x0000000000000000,0x00000000000430000,0x0000000000000091,0x000000000000001f0},
+ { 0x0000000000000000,0x00013c1933d759acd,0x0000000000000002,0x00002e852feff6c8e,0x0000000000000000,0x00013c80000000000,0x0000000000000000,0x00002e90000000000},
+ { 0x000000024bd5d286,0x0eec43792ec785823,0x0000c8676a008c37,0x0abf7a839d8165b81,0x0000000000000000,0x0ef00000000000000,0x0000000000000000,0x0ac00000000000000},
+ { 0x000000000005f426,0x00237a99fa2acdd74,0x0000003bcaaaacf1,0x0003234adac94235a,0x0000000000000000,0x00238000000000000,0x0000000000000000,0x00032400000000000},
+ { 0x00000000005aa297,0x065d9716de5124e50,0x0000142801dfd091,0x00416f2f2e7259734,0x0000000000000000,0x065e0000000000000,0x0000000000000000,0x00418000000000000},
+ { 0x0000000000000ec2,0x000302de76a54582e,0x000000000000ecdb,0x0000000000004d2af,0x0000000000000000,0x00030300000000000,0x000000000000ec00,0x0000000000004d300},
+ { 0x000000000119cd99,0x00c36c87b203e60e1,0x00000037a120f958,0x0000000ca85ac3c36,0x0000000000000000,0x00c38000000000000,0x0000003780000000,0x0000000cac0000000},
+ { 0x00000000000003d5,0x000b217e35f94f6c3,0x000000000007ab66,0x0000000000036696a,0x0000000000000000,0x000b2400000000000,0x000000000007a000,0x00000000000367000},
+ { 0x0000000000000003,0x000007ab908534dbc,0x000000000000050b,0x00000001cbcda5719,0x0000000000000000,0x000007ac000000000,0x0000000000000000,0x00000001cc0000000},
+ { 0x000000000000003a,0x0000036536f39bddc,0x000000000003dbbb,0x000001c641ec8b3d4,0x0000000000000000,0x00000366000000000,0x0000000000000000,0x000001c6800000000},
+ { 0x00000000000000b3,0x0000107aa5e21ab5d,0x0000000000000252,0x000000fee4cc4b514,0x0000000000000000,0x00001080000000000,0x0000000000000000,0x000000ff000000000},
+ { 0x00000000000007e4,0x0000001156069ef03,0x000000000000819c,0x000000000dc6d156a,0x0000000000000000,0x00000011580000000,0x0000000000000000,0x000000000dc800000},
+ { 0x000000f2fd4b09db,0x0267973cfa4753e3e,0x00003c062994b6dc,0x00032864df3edd2dc,0x0000000000000000,0x02680000000000000,0x0000300000000000,0x00032900000000000},
+ { 0x0000000000088222,0x01964c11769e808be,0x00000000005d12ad,0x00000000111efb4d6,0x0000000000000000,0x01968000000000000,0x0000000000000000,0x00000000112000000},
+ { 0x0000000000000287,0x0000511afd4942fef,0x00000000040d9de0,0x0000216d695e4af93,0x0000000000000000,0x00005120000000000,0x0000000000000000,0x00002170000000000},
+ { 0x0000000000000011,0x000025a8e0d7e9a1d,0x000000000004e8ea,0x000000002c7bd7c8e,0x0000000000000000,0x000025b0000000000,0x0000000000000000,0x000000002c8000000},
+ { 0x000000000000007e,0x0007fb14876089bdc,0x000000000000015c,0x0000000000a497ce2,0x0000000000000000,0x0007fc00000000000,0x0000000000000000,0x0000000000a4c0000},
+ { 0x0000000000000f1a,0x0001039d5f4a25c7f,0x0000000000793172,0x000000004529719f7,0x0000000000000000,0x00010400000000000,0x0000000000000000,0x00000000454000000},
+ { 0x00000000000000fc,0x000012410e03b13f4,0x000000000000059f,0x00000000109bd2627,0x0000000000000000,0x00001248000000000,0x0000000000000000,0x0000000010a000000},
+ { 0x0000000000004eae,0x000b300a7df571546,0x00000000ac614041,0x000000001dff6c677,0x0000000000000000,0x000b3400000000000,0x00000000ac000000,0x000000001e0000000},
+ { 0x000000000f7f9553,0x0007ab4e9e5797f17,0x000000002168229e,0x0000002d60e881440,0x0000000000000000,0x0007ac00000000000,0x0000000000000000,0x0000002d700000000},
+ { 0x000000000000001a,0x005962f2575ae938f,0x0000000000000c35,0x00000038f4499240c,0x0000000000000000,0x00598000000000000,0x0000000000000000,0x00000039000000000},
+ { 0x000000000000000e,0x0000b0c93dcc839da,0x000000000000001c,0x000000000000aff89,0x0000000000000000,0x0000b100000000000,0x0000000000000000,0x000000000000b0000},
+ { 0x0000000122e8232a,0x026d2b819d1363422,0x0000000aaf091508,0x0000002cb59d6b624,0x0000000000000000,0x026e0000000000000,0x0000000a00000000,0x0000002cc00000000},
+ { 0x00001b870a613662,0x0320c7941055d27dc,0x00002c37adfac4f9,0x00ce734fe2169a087,0x0000000000000000,0x03210000000000000,0x0000000000000000,0x00ce8000000000000},
+ { 0x0002d0c244c1b010,0x0042575b6a46d9414,0x0067e805f1a56481,0x000b32975bd752450,0x0002000000000000,0x00426000000000000,0x0067e00000000000,0x000b3400000000000},
+ { 0x0000000000000005,0x00aa5c64d5b40bbd1,0x00000000000000cc,0x00000000008f862c4,0x0000000000000000,0x00aa8000000000000,0x0000000000000000,0x00000000008fc0000},
+ { 0x0000000000000002,0x00c9d29306f861d48,0x0000000000000002,0x00000000000000009,0x0000000000000000,0x00ca0000000000000,0x0000000000000002,0x00000000000000009},
+ { 0x0000000000781974,0x00130421065873863,0x0000000076aa5831,0x0000000354f845764,0x0000000000000000,0x00130800000000000,0x0000000070000000,0x00000003550000000},
+ { 0x0000000002be237b,0x0007d3f429b5efcb1,0x000001c85044db11,0x00033545fc9f1ebc7,0x0000000000000000,0x0007d400000000000,0x0000000000000000,0x00033600000000000},
+ { 0x0000000000000003,0x0000036febc3ea8ef,0x0000000000000004,0x0000000000000000a,0x0000000000000000,0x00000370000000000,0x0000000000000004,0x0000000000000000a},
+ { 0x0000000000014d31,0x000000001dbb070e5,0x0000000000145b49,0x0000000000962c4bc,0x0000000000000000,0x000000001dc000000,0x0000000000140000,0x00000000009640000},
+ { 0x00000000004b7fbc,0x000001d12a9ee941e,0x0000000009508c70,0x00000000661b054ce,0x0000000000000000,0x000001d1800000000,0x0000000008000000,0x00000000662000000},
+ { 0x000000000000001f,0x00000000164ba44bf,0x0000000000000981,0x00000000000000fb9,0x0000000000000000,0x00000000165000000,0x0000000000000981,0x00000000000000fb9},
+ { 0x000000000000445b,0x01e7b7f08e407bc24,0x000000000059cb2b,0x000000024ab500083,0x0000000000000000,0x01e80000000000000,0x0000000000000000,0x000000024b0000000},
+ { 0x000000d3483c8148,0x0c11d21e082c57634,0x0000256f75406389,0x00013cf7a25d38c3b,0x0000000000000000,0x0c140000000000000,0x0000200000000000,0x00013d00000000000},
+ { 0x000000000d7abb5e,0x001fe0bf4aa2f9821,0x0010a93f3985324b,0x0005381ddd3ea0b87,0x0000000000000000,0x001fe800000000000,0x0010a00000000000,0x00053a00000000000},
+ { 0x0000064e53e5e8db,0x02b577af426485c5b,0x00007c9b9c2dae40,0x0165bd24372a99c05,0x0000000000000000,0x02b60000000000000,0x0000000000000000,0x01660000000000000},
+ { 0x0000000000000001,0x00000012cdad4a0c0,0x0000000000000f44,0x000000000000f7745,0x0000000000000000,0x00000012d00000000,0x0000000000000c00,0x000000000000f7800},
+ { 0x0000000000000016,0x0000002c38019b117,0x0000000000000392,0x0000000008044e5f9,0x0000000000000000,0x0000002c400000000,0x0000000000000000,0x00000000080800000},
+ { 0x000000000000aeef,0x00000000158638e6d,0x00000000000394d1,0x00000000000da5676,0x0000000000000000,0x00000000158800000,0x0000000000038000,0x00000000000da8000},
+ { 0x00000000004c20a6,0x0000c1828abd457a9,0x00000071a94a8408,0x00000020c8dafde11,0x0000000000000000,0x0000c1c0000000000,0x0000007180000000,0x00000020d00000000},
+ { 0x000000000000002a,0x002c3a2ecec5dc4b3,0x000000272122ddaa,0x0017f1f70160e842d,0x0000000000000000,0x002c4000000000000,0x0000000000000000,0x0017f800000000000},
+ { 0x000000000000000f,0x00073b6a6777e5e65,0x00000000000002ee,0x000000176d91dbf47,0x0000000000000000,0x00073c00000000000,0x0000000000000000,0x00000017700000000},
+ { 0x00000000ec6d1d4c,0x02dfdb9e836236201,0x0000049999f99d47,0x0000a5245126d6f61,0x0000000000000000,0x02e00000000000000,0x0000040000000000,0x0000a540000000000},
+ { 0x00000000000000f4,0x001631bd5a854653d,0x00007cc6d8aab11e,0x000069d2ae4b24e50,0x0000000000000000,0x00163800000000000,0x00007c0000000000,0x000069e0000000000},
+ { 0x0000000005b09c8d,0x00034ee71e38dc3d8,0x00000006ebf8c668,0x0000a96f5cc54efb0,0x0000000000000000,0x00034f00000000000,0x0000000000000000,0x0000a980000000000},
+ { 0x000000000000037e,0x0032bb8ee6953e600,0x0000000003d1ef4b,0x00000000172697ea6,0x0000000000000000,0x0032c000000000000,0x0000000003800000,0x00000000172800000},
+ { 0x0000000000000003,0x00000c6c43c5604ad,0x00000031efcceeb5,0x00000021fcc504018,0x0000000000000000,0x00000c70000000000,0x0000003180000000,0x00000022000000000},
+ { 0x0000000000185224,0x0008eeb7c16ca6a8b,0x0000000037c6ab34,0x0000001b9b1113343,0x0000000000000000,0x0008f000000000000,0x0000000000000000,0x0000001ba00000000},
+ { 0x000000000003ec78,0x000005525e14ead6c,0x0000000000068d6e,0x000000060d28c7240,0x0000000000000000,0x00000554000000000,0x0000000000000000,0x000000060e0000000},
+ { 0x0000000000000008,0x000001b489270d541,0x0000000000004785,0x00000000000196359,0x0000000000000000,0x000001b5000000000,0x0000000000004000,0x00000000000196800},
+ { 0x000000000000588d,0x0000005be644370b4,0x0000000000d24088,0x0000000000b2c975f,0x0000000000000000,0x0000005c000000000,0x0000000000d00000,0x0000000000b300000},
+ { 0x000000000000002a,0x0032785c832e5af47,0x0001054205ef10ce,0x002861bafa7f44ff5,0x0000000000000000,0x00328000000000000,0x0001000000000000,0x00287000000000000},
+ { 0x000000000001ebb2,0x04d34f9817143b4a4,0x00000000770d906d,0x0000000a63c220da9,0x0000000000000000,0x04d40000000000000,0x0000000040000000,0x0000000a640000000},
+ { 0x0000000000000002,0x0000000000dd7ab22,0x0000000000000a87,0x000000000003e2a66,0x0000000000000000,0x0000000000dd80000,0x0000000000000000,0x000000000003e3000},
+ { 0x00000000000006f3,0x000bef43b09ce1b8d,0x00000000000465aa,0x0000a60679530c4c3,0x0000000000000000,0x000bf000000000000,0x0000000000000000,0x0000a640000000000},
+ { 0x0000000000005a24,0x01f62df21ef7a4a7d,0x0000000000758f71,0x00001807c980f4c02,0x0000000000000000,0x01f68000000000000,0x0000000000000000,0x00001808000000000},
+ { 0x0000000000003e4a,0x0000004ff93dc9506,0x0000000000e95ce0,0x00000000714537577,0x0000000000000000,0x00000050000000000,0x0000000000000000,0x00000000716000000},
+ { 0x0000000000000000,0x000cd858536abe019,0x000000000003f301,0x000000002c671a7aa,0x0000000000000000,0x000cdc00000000000,0x0000000000000000,0x000000002c7000000},
+ { 0x0000000000000002,0x00ae51ed9de7c2741,0x0000000000001f7d,0x000000000a1c13957,0x0000000000000000,0x00ae8000000000000,0x0000000000000000,0x000000000a2000000},
+ { 0x00000000160fe6ee,0x007ce7bbeb590bfd5,0x00000000889441d8,0x000000e07e1709ad3,0x0000000000000000,0x007d0000000000000,0x0000000000000000,0x000000e0800000000},
+ { 0x0000000000000156,0x029df0cd39ef46297,0x0656e6b5f228d1b7,0x0299c3828f6b5473c,0x0000000000000000,0x029e0000000000000,0x0650000000000000,0x029a0000000000000},
+ { 0x000000001710ef39,0x000394aceeffe8012,0x0000000a21a36ff7,0x000000e4d3006cd4c,0x0000000000000000,0x00039500000000000,0x0000000800000000,0x000000e5000000000},
+ { 0x00000000000000ae,0x0000000000019c166,0x0000000000000ebf,0x00000000000004e2f,0x0000000000000000,0x0000000000019c800,0x0000000000000eb0,0x00000000000004e30},
+ { 0x0000000000000002,0x000000d4fd258c77c,0x0000000021fb0b2b,0x000000001aec565db,0x0000000000000000,0x000000d5000000000,0x0000000021800000,0x000000001af000000},
+ { 0x0000000000000003,0x000000000036f4b89,0x00000000000003b1,0x00000000000001153,0x0000000000000000,0x00000000003700000,0x00000000000003b1,0x00000000000001153},
+ { 0x000000000000004e,0x0001a54b7ae302e74,0x000000000724c795,0x00001c0970513cdd8,0x0000000000000000,0x0001a580000000000,0x0000000000000000,0x00001c10000000000},
+ { 0x0000000000000047,0x00000de58c3a7c388,0x00000000000000a8,0x00000000f6a855cc8,0x0000000000000000,0x00000de8000000000,0x0000000000000000,0x00000000f6c000000},
+ { 0x0000000000000000,0x00000d694b3193e72,0x000000000003d9c3,0x000000004db9247f8,0x0000000000000000,0x00000d6c000000000,0x0000000000000000,0x000000004dc000000},
+ { 0x0000000000000001,0x03198185f222538b3,0x00000000000000ba,0x00000263f9e397a75,0x0000000000000000,0x031a0000000000000,0x0000000000000000,0x00000264000000000},
+ { 0x000000000008c349,0x0688f68b21a541cff,0x00000000007cc666,0x000000025892e555a,0x0000000000000000,0x068a0000000000000,0x0000000000000000,0x00000002590000000},
+ { 0x0000000000004a7c,0x04731b963aba36991,0x000000001a848ed4,0x00000000b18d5baff,0x0000000000000000,0x04740000000000000,0x0000000018000000,0x00000000b1c000000},
+ { 0x00000000000364ba,0x0001ec93513db020e,0x00000000102482e9,0x000037affaceeebf9,0x0000000000000000,0x0001ed00000000000,0x0000000000000000,0x000037b0000000000},
+ { 0x000000007657f9a4,0x04711791cefae2c5a,0x0000000c2cc3059e,0x000093fc0b4af8672,0x0000000000000000,0x04720000000000000,0x0000000000000000,0x00009400000000000},
+ { 0x0000000000000cc3,0x0000000001d442eab,0x000000000000450b,0x00000000000151ca5,0x0000000000000000,0x0000000001d480000,0x0000000000004000,0x00000000000152000},
+ { 0x0000000001ee8166,0x000300b18276d2633,0x00000000102674b6,0x0000005555624a6f9,0x0000000000000000,0x00030100000000000,0x0000000000000000,0x00000055600000000},
+ { 0x000000000000003e,0x00000bec880bb9f00,0x00000019824683e8,0x00000001e3ca33cfd,0x0000000000000000,0x00000bf0000000000,0x0000001982000000,0x00000001e3e000000},
+ { 0x0000002449ef9c3b,0x011ec547b9a0b6db9,0x00001251262456b4,0x00000126846ec89e8,0x0000000000000000,0x011f0000000000000,0x0000125120000000,0x00000126848000000},
+ { 0x0000000000000031,0x0008f6d4a15834a50,0x0000039203820836,0x0003c926a6842aa0b,0x0000000000000000,0x0008f800000000000,0x0000000000000000,0x0003ca00000000000},
+ { 0x0000000000035f31,0x00000ff2c950a83d0,0x000000b8acba4841,0x0000003c6ca35fa94,0x0000000000000000,0x00000ff4000000000,0x000000b800000000,0x0000003c700000000},
+ { 0x0000000000000014,0x000000000071be414,0x0000000000000047,0x000000000000ff73b,0x0000000000000000,0x000000000071c0000,0x0000000000000000,0x000000000000ff800},
+ { 0x0000000000000001,0x01379122247647a6b,0x000000000003a05e,0x000000000000627de,0x0000000000000000,0x01380000000000000,0x000000000003a000,0x00000000000062800},
+ { 0x000000000000003b,0x000000038152e27a1,0x0000000000000074,0x000000000000007b8,0x0000000000000000,0x00000003820000000,0x0000000000000074,0x000000000000007b8},
+ { 0x000000000000000d,0x0000000003ebdbe6b,0x000000000000000e,0x0000000000407807c,0x0000000000000000,0x0000000003ec00000,0x0000000000000000,0x00000000004080000},
+ { 0x00000005b88f9238,0x0bd04400670906f62,0x00001fda09f88ebf,0x00005a6038832c215,0x0000000000000000,0x0bd40000000000000,0x00001e0000000000,0x00005a80000000000},
+ { 0x0000000000001c76,0x00026cddc9446cb77,0x00000e1327f21b26,0x000000ee712e16cf8,0x0000000000000000,0x00026d00000000000,0x00000e1300000000,0x000000ee740000000},
+ { 0x000000000000000d,0x000096652aba8c307,0x0000000000000058,0x0000000078157d4c1,0x0000000000000000,0x00009680000000000,0x0000000000000000,0x00000000782000000},
+ { 0x0000000058c579ca,0x000000d735acdf44f,0x0000014836ce2df9,0x00000046e416c1076,0x0000000000000000,0x000000d7400000000,0x0000014800000000,0x00000046f00000000},
+ { 0x0000000000000029,0x00a1910866371e818,0x0000001f872a1905,0x000000318e2c82d5d,0x0000000000000000,0x00a1c000000000000,0x0000001f00000000,0x00000031900000000},
+ { 0x00000000000000a9,0x017df250d0e112035,0x0000000000265d93,0x000000a7735a92fd2,0x0000000000000000,0x017e0000000000000,0x0000000000000000,0x000000a7800000000},
+ { 0x0000000000000004,0x0067437d5a49f2683,0x0000000776c38859,0x000046596a4b59d1a,0x0000000000000000,0x00676000000000000,0x0000000000000000,0x00004660000000000},
+ { 0x0000000000190c37,0x00151adfe78704ded,0x00000166fd56119f,0x000a9de56bc6b01a5,0x0000000000000000,0x00152000000000000,0x0000000000000000,0x000aa000000000000},
+ { 0x0000000000969688,0x0000001df0491e737,0x000000000196fcf1,0x00000000003073a43,0x0000000000000000,0x0000001df80000000,0x0000000001968000,0x00000000003078000},
+ { 0x000000000000001b,0x0000032e0581d5308,0x000000011fbd1ba5,0x00000001c714d1233,0x0000000000000000,0x0000032f000000000,0x0000000118000000,0x00000001c78000000},
+ { 0x00000000000000bc,0x000000000f6a43a0f,0x000000000000049c,0x00000000000001602,0x0000000000000000,0x000000000f6c00000,0x0000000000000498,0x00000000000001608},
+ { 0x000000000022c520,0x0020dbdc52640d12b,0x000000008cf757e5,0x0001aea36e3251d96,0x0000000000000000,0x0020e000000000000,0x0000000000000000,0x0001af00000000000},
+ { 0x0000000000001eea,0x01fcd08f6ce94207a,0x000000065d5721a9,0x00021fe433de0eb00,0x0000000000000000,0x01fd0000000000000,0x0000000000000000,0x00022000000000000},
+ { 0x00000000000008c5,0x00000e67136c2b50f,0x00000000c160e8ce,0x000000142367a605a,0x0000000000000000,0x00000e68000000000,0x0000000080000000,0x00000014280000000},
+ { 0x0000000000015891,0x0debed6429a515a8d,0x00000000001cec38,0x000212941b9fac8aa,0x0000000000000000,0x0dec0000000000000,0x0000000000000000,0x00021300000000000},
+ { 0x0000000000000004,0x0000283164bd8845f,0x0000000000012b94,0x0000000000003f874,0x0000000000000000,0x00002840000000000,0x0000000000012b00,0x0000000000003f900},
+ { 0x00000000000b90cd,0x000000c659129729e,0x00000000001e6b6b,0x00000000000e9de38,0x0000000000000000,0x000000c6800000000,0x00000000001e4000,0x00000000000ea0000},
+ { 0x0000000000000003,0x0f7a8e4f5b3b7b3ec,0x00000000728d476b,0x0000000e76f4f6de8,0x0000000000000000,0x0f7c0000000000000,0x0000000040000000,0x0000000e780000000},
+ { 0x0000000000003580,0x03cb3edba9c024a52,0x0000000000017ec2,0x0366faaa88e9ba725,0x0000000000000000,0x03cc0000000000000,0x0000000000000000,0x03670000000000000},
+ { 0x000000000000002f,0x0002c5253060e6933,0x00000000153d44eb,0x0000000001e20b749,0x0000000000000000,0x0002c600000000000,0x00000000153c0000,0x0000000001e240000},
+ { 0x0000000000003525,0x00053360817a4a235,0x0000000004cb68d2,0x00000022ad2c5bb2a,0x0000000000000000,0x00053400000000000,0x0000000000000000,0x00000022b00000000},
+ { 0x0000000000000002,0x000007fd7d5bb31ec,0x0000000000075821,0x000000001bde1f2f9,0x0000000000000000,0x000007fe000000000,0x0000000000000000,0x000000001be000000},
+ { 0x0000000000000009,0x01c8289d2e2dff2be,0x000000000000008e,0x0000000000a53d6d0,0x0000000000000000,0x01c88000000000000,0x0000000000000000,0x0000000000a540000},
+ { 0x0000000000000000,0x03706b98be15e5807,0x0000000000b9a569,0x003a60603338d8efb,0x0000000000000000,0x03710000000000000,0x0000000000000000,0x003a7000000000000},
+ { 0x00000000000f3281,0x0000000010d398d2e,0x00000000003bfed7,0x0000000000103facd,0x0000000000000000,0x0000000010d800000,0x00000000003bc000,0x00000000001040000},
+ { 0x0000000000a3facb,0x0000000e458bcf69c,0x000000002c77d716,0x0000000098ba9235e,0x0000000000000000,0x0000000e480000000,0x000000002c000000,0x0000000098c000000},
+ { 0x0000000000000005,0x00000008ee934a8e3,0x00000000000306ea,0x0000000193d27a847,0x0000000000000000,0x00000008f00000000,0x0000000000000000,0x00000001940000000},
+ { 0x000000010b2f14b4,0x0000c82b94faf4a9a,0x000001f94422872d,0x00000e78cb5ea4a95,0x0000000000000000,0x0000c840000000000,0x000001c000000000,0x00000e7c000000000},
+ { 0x0000000000000144,0x00000067a570b74d3,0x0000000000000206,0x00000000b29e60796,0x0000000000000000,0x00000067c00000000,0x0000000000000000,0x00000000b2c000000},
+ { 0x0000000000000002,0x000000000013b7c9d,0x0000000000000004,0x000000000000032ff,0x0000000000000000,0x000000000013b8000,0x0000000000000000,0x00000000000003300},
+ { 0x000000000000000a,0x0020fe3149c0599e9,0x000000000000007d,0x00000000005433fbf,0x0000000000000000,0x00210000000000000,0x0000000000000000,0x00000000005440000},
+ { 0x0000000000001c33,0x040970eff41b47e71,0x000000014f08035b,0x000003adf205ebe0b,0x0000000000000000,0x040a0000000000000,0x0000000000000000,0x000003ae000000000},
+ { 0x0000000f3bec5ba5,0x000071631ca99626f,0x000005a187bde15b,0x00000750dc5ec0478,0x0000000000000000,0x00007180000000000,0x000005a000000000,0x00000752000000000},
+ { 0x0000000000000158,0x00b8dc694364a92eb,0x0000000000000caa,0x00000000029833343,0x0000000000000000,0x00b90000000000000,0x0000000000000000,0x00000000029900000},
+ { 0x000000003f33818e,0x000000328b378089c,0x00000000da40c6c2,0x00000003458eb5955,0x0000000000000000,0x00000032900000000,0x00000000d0000000,0x00000003460000000},
+ { 0x0000000f6214d00e,0x0009d99b7284d4142,0x0004564d459f7fa6,0x0004d58477e1818e9,0x0000000000000000,0x0009dc00000000000,0x0004400000000000,0x0004d600000000000},
+ { 0x0000000000000000,0x0000000fc09882d6d,0x0000000000000641,0x00000000026694407,0x0000000000000000,0x0000000fc40000000,0x0000000000000000,0x00000000026700000},
+ { 0x000000000003b36e,0x000000000e612d6de,0x0000000001bf30bd,0x0000000006a63c419,0x0000000000000000,0x000000000e6400000,0x0000000001a00000,0x0000000006a800000},
+ { 0x000000000000001e,0x00000fe4d1e55430f,0x00000000000077f7,0x0000001b8f7eefe59,0x0000000000000000,0x00000fe8000000000,0x0000000000000000,0x0000001b900000000},
+ { 0x000000000000001c,0x00000000de21983b8,0x0000000000268f91,0x00000000002e9959f,0x0000000000000000,0x00000000de4000000,0x0000000000260000,0x00000000002ea0000},
+ { 0x00000000162029d1,0x0546bede5747896f2,0x000000699e83b046,0x000004fb2f140c027,0x0000000000000000,0x05480000000000000,0x0000006000000000,0x000004fc000000000},
+ { 0x000000000038effb,0x00099f955450894d3,0x000000003ae5d101,0x000000001a3b59bce,0x0000000000000000,0x0009a000000000000,0x000000003a800000,0x000000001a4000000},
+ { 0x0000000000000188,0x0000c50637db62525,0x0000005315057879,0x000007604c20e82bb,0x0000000000000000,0x0000c540000000000,0x0000004000000000,0x00000762000000000},
+ { 0x0000000000000bde,0x0000000027eaf98d1,0x000000000009f0e6,0x000000000064c71a6,0x0000000000000000,0x0000000027f000000,0x0000000000080000,0x000000000064e0000},
+ { 0x00000000000001a1,0x0000053e477522938,0x000000000000051c,0x00000255ef1435db6,0x0000000000000000,0x00000540000000000,0x0000000000000000,0x00000256000000000},
+ { 0x000000000013e5c6,0x0000561c446ed4855,0x00000000a1659358,0x000035ba40c6d92fc,0x0000000000000000,0x00005620000000000,0x0000000000000000,0x000035c0000000000},
+ { 0x0000000000000061,0x0000001b896fa8bd6,0x0000000207c38717,0x000000181ba661281,0x0000000000000000,0x0000001b900000000,0x0000000200000000,0x00000018200000000},
+ { 0x0000000000041b71,0x0059326d194da0ed8,0x00000000ab445024,0x0000003d5261e7ebe,0x0000000000000000,0x00594000000000000,0x0000000000000000,0x0000003d600000000},
+ { 0x0000000000000093,0x000073aefb73ea82f,0x0000318a28cc8fc2,0x0000670bca6604874,0x0000000000000000,0x000073c0000000000,0x0000300000000000,0x00006720000000000},
+ { 0x000000000000003d,0x0000003317ab57777,0x0000000001222b8e,0x000000001796892a3,0x0000000000000000,0x00000033200000000,0x0000000001000000,0x00000000179800000},
+ { 0x000000006dfb081a,0x02bcd8928402693fe,0x0000005fa7f48c52,0x000002012a53e90c8,0x0000000000000000,0x02bd0000000000000,0x0000005800000000,0x00000201800000000},
+ { 0x000000000002fc67,0x00001e17d68779a86,0x0000000035b9c3bb,0x00000e93eb3e3fd4f,0x0000000000000000,0x00001e18000000000,0x0000000000000000,0x00000e94000000000},
+ { 0x000000000000007f,0x0000099ee0435ab20,0x0000000000006968,0x000000000013b34c0,0x0000000000000000,0x000009a0000000000,0x0000000000000000,0x000000000013b8000},
+ { 0x00000000b1f9c698,0x0288418f0d62ded15,0x000000790bf17d36,0x0000381ae423c81ed,0x0000000000000000,0x02890000000000000,0x0000000000000000,0x00003820000000000},
+ { 0x00000000000020e7,0x00000098d4a6faaba,0x000000000000d31d,0x00000002f8fc8a6fe,0x0000000000000000,0x00000099000000000,0x0000000000000000,0x00000002f90000000},
+ { 0x0000000000000010,0x00000361cb5b662f5,0x000000000000db3a,0x000000000035a93cb,0x0000000000000000,0x00000362000000000,0x0000000000000000,0x000000000035b0000},
+ { 0x000000000000000c,0x00000000000002106,0x000000000000000e,0x0000000000000004d,0x0000000000000000,0x00000000000002110,0x000000000000000e,0x0000000000000004d},
+ { 0x0000000000002caa,0x0000000019f878e08,0x0000000000007a28,0x0000000000001d5ac,0x0000000000000000,0x000000001a0000000,0x0000000000007a00,0x0000000000001d600},
+ { 0x000000000002ff25,0x000000000ff8afa7f,0x00000000003becd0,0x00000000015c7e9df,0x0000000000000000,0x000000000ffc00000,0x0000000000380000,0x00000000015c80000},
+ { 0x0000000000000015,0x000d72f38af6dba58,0x0000000000047c0d,0x000000dfd63324fc2,0x0000000000000000,0x000d7400000000000,0x0000000000000000,0x000000e0000000000},
+ { 0x0000000000000007,0x018e868e71d0ff382,0x00b3723068e65fc7,0x017d7a1974806bfbd,0x0000000000000000,0x018f0000000000000,0x00b0000000000000,0x017d8000000000000},
+ { 0x000000000f381058,0x0001be5339dbedef3,0x00000000e807d7b9,0x00000027677a78e10,0x0000000000000000,0x0001be80000000000,0x0000000000000000,0x00000027700000000},
+ { 0x0000000000000327,0x0000000371d54f850,0x0000000000289a95,0x00000000031698560,0x0000000000000000,0x00000003720000000,0x0000000000200000,0x00000000031700000},
+ { 0x00000000000282b9,0x000016cd3855c5f1e,0x000000000006de03,0x0000008f60a7d0b1b,0x0000000000000000,0x000016d0000000000,0x0000000000000000,0x0000008f800000000},
+ { 0x0000000000000476,0x000000000006cafa2,0x000000000000052f,0x00000000000002ec1,0x0000000000000000,0x000000000006cc000,0x0000000000000520,0x00000000000002ed0},
+ { 0x00000000003336ea,0x000000150ad1d3e58,0x000000001b08c3f3,0x0000000115cf238a6,0x0000000000000000,0x00000015100000000,0x0000000018000000,0x00000001160000000},
+ { 0x0000000008827450,0x03c81a2be09a5ca24,0x000000009be561e9,0x02f7e52b8bae5a689,0x0000000000000000,0x03c90000000000000,0x0000000000000000,0x02f80000000000000},
+ { 0x00000000000000c1,0x00000067e5c05b273,0x0000000000003314,0x0000002603cc72afc,0x0000000000000000,0x00000068000000000,0x0000000000000000,0x00000026100000000},
+ { 0x00000000189842f0,0x0007693ee0d7946a2,0x0000003f6eeae514,0x0000b0311a913ee5a,0x0000000000000000,0x00076a00000000000,0x0000000000000000,0x0000b040000000000},
+ { 0x00000000000000da,0x0000007e75e16a37a,0x00000000000070bf,0x00000000000d0da11,0x0000000000000000,0x0000007e800000000,0x0000000000004000,0x00000000000d10000},
+ { 0x00000000000000ed,0x000b924e8739839b1,0x0000035ced183e4f,0x000002e9096e12dbe,0x0000000000000000,0x000b9400000000000,0x0000035000000000,0x000002ea000000000},
+ { 0x000000000000029a,0x00000346a49883e07,0x0000000000001636,0x000001ad9af4cbd0e,0x0000000000000000,0x00000347000000000,0x0000000000000000,0x000001ae000000000},
+ { 0x000000000000000f,0x0006173ab9b15e9bc,0x000000000384369d,0x0000315ba6a49c396,0x0000000000000000,0x00061800000000000,0x0000000000000000,0x00003160000000000},
+ { 0x0000000000060f54,0x0000002a2de5111e8,0x00000000000f16c7,0x0000000000018d9e5,0x0000000000000000,0x0000002a300000000,0x00000000000f1400,0x0000000000018dc00},
+ { 0x0000000000000472,0x02517213ff2de6556,0x0000000002dd56eb,0x0000003007db447a1,0x0000000000000000,0x02520000000000000,0x0000000000000000,0x00000030100000000},
+ { 0x00000000000000db,0x000000e054aaea029,0x000000001b4575ca,0x000000000a4a72239,0x0000000000000000,0x000000e0800000000,0x000000001b400000,0x000000000a4c00000},
+ { 0x0000000001acfb58,0x00000006465ba0949,0x0000000007f69103,0x0000000405af581fa,0x0000000000000000,0x00000006480000000,0x0000000000000000,0x00000004060000000},
+ { 0x0000000000000006,0x000000ece0ad1eaec,0x000000000aa74d8e,0x0000000000c3be233,0x0000000000000000,0x000000ed000000000,0x000000000aa70000,0x0000000000c3c0000},
+ { 0x0000000000000004,0x000000fe2fb1b28b8,0x0000000b82f6a84b,0x0000000eda9960885,0x0000000000000000,0x000000fe400000000,0x0000000b80000000,0x0000000edc0000000},
+ { 0x000000000001ea45,0x011bbdf5dceba53f5,0x000000000002bd2e,0x000000010918e8696,0x0000000000000000,0x011c0000000000000,0x0000000000000000,0x00000001098000000},
+ { 0x000000000000002a,0x00030de82bd35fc90,0x0000054d49058147,0x00001b157376445c8,0x0000000000000000,0x00030e00000000000,0x0000050000000000,0x00001b18000000000},
+ { 0x0000000000000009,0x00000093bdd171818,0x0000000000000277,0x000000018d26911a0,0x0000000000000000,0x00000093c00000000,0x0000000000000000,0x000000018d8000000},
+ { 0x000000055f0e005c,0x0000ae922893b60be,0x00000f44ec9a4ee5,0x0000084ce6d23b880,0x0000000000000000,0x0000aec0000000000,0x00000f4000000000,0x0000084e000000000},
+ { 0x000000000000019b,0x0000c5cf9cb153e6d,0x00000000000f946d,0x00000000000cd6327,0x0000000000000000,0x0000c600000000000,0x00000000000f8000,0x00000000000cd8000},
+ { 0x000000000000b8e3,0x00007e020497ec321,0x000000000000df15,0x00000004ce5d7689c,0x0000000000000000,0x00007e20000000000,0x0000000000000000,0x00000004d00000000},
+ { 0x000000000000063f,0x000001b3cf13f5d3f,0x00000000000012c8,0x0000000000001b683,0x0000000000000000,0x000001b4000000000,0x0000000000001280,0x0000000000001b700},
+ { 0x0000000000008241,0x00005dfb7590d4982,0x000001a7c8977b15,0x0000053e7364d8f07,0x0000000000000000,0x00005e00000000000,0x000001a000000000,0x00000540000000000},
+ { 0x0000000000001e22,0x00005da120a882d3d,0x00000002ac34ee36,0x000003b9b93bd71e8,0x0000000000000000,0x00005dc0000000000,0x0000000000000000,0x000003ba000000000},
+ { 0x000000000000001c,0x000000000076d596a,0x00000000000025cd,0x0000000000000b40a,0x0000000000000000,0x000000000076e0000,0x00000000000025c0,0x0000000000000b440},
+ { 0x0000000000000003,0x0000066fc81b2a4be,0x0000000000000007,0x00000005751eadd14,0x0000000000000000,0x00000670000000000,0x0000000000000000,0x00000005760000000},
+ { 0x000000000000000a,0x00000021c1c4ce645,0x0000000000000027,0x0000001f7c698711c,0x0000000000000000,0x00000021d00000000,0x0000000000000000,0x0000001f800000000},
+ { 0x000000003d3fd5ee,0x0020f573bf5b90717,0x000000006b982c7e,0x000000089d8142295,0x0000000000000000,0x00210000000000000,0x0000000040000000,0x00000008a00000000},
+ { 0x00000000000001be,0x000000f0901bde9c9,0x00000000002cb05c,0x0000000011f7f4abf,0x0000000000000000,0x000000f0c00000000,0x0000000000000000,0x0000000011f800000},
+ { 0x0000000000000003,0x0000019c4b1ce2e95,0x000000000000256e,0x00000000365a867d1,0x0000000000000000,0x0000019c800000000,0x0000000000000000,0x00000000366000000},
+ { 0x0000000000000000,0x05e3e24833e92f830,0x000000000000030e,0x000000416f2715d22,0x0000000000000000,0x05e40000000000000,0x0000000000000000,0x00000041800000000},
+ { 0x000000000000000e,0x0003fa0f5429e348b,0x0000003c3f2747f4,0x00001ee119dbcfeb6,0x0000000000000000,0x0003fb00000000000,0x0000000000000000,0x00001ee8000000000},
+ { 0x00000000000000af,0x000000e12313014dd,0x0000000000000539,0x0000000000001bf6e,0x0000000000000000,0x000000e1400000000,0x0000000000000500,0x0000000000001bf80},
+ { 0x000000000000000a,0x000b5e26557bffda1,0x0000000000c3e12e,0x00000050e23e0e267,0x0000000000000000,0x000b6000000000000,0x0000000000000000,0x00000051000000000},
+ { 0x000000000243026a,0x00000006c7de32681,0x0000000002a97b9f,0x00000000bfba1dbec,0x0000000000000000,0x00000006c80000000,0x0000000000000000,0x00000000bfc000000},
+ { 0x000000000000000e,0x01aae34cafb24d946,0x0000000000091a6b,0x00000000000140474,0x0000000000000000,0x01ab0000000000000,0x0000000000091800,0x00000000000140800},
+ { 0x0000000000009b69,0x0002130d51394f9c2,0x0000000000102e40,0x0000000031f766df3,0x0000000000000000,0x00021400000000000,0x0000000000000000,0x00000000320000000},
+ { 0x00000000000375b1,0x00030c1c917d2d532,0x000000003d8cc482,0x00000000a5de55f5d,0x0000000000000000,0x00030d00000000000,0x000000003c000000,0x00000000a60000000},
+ { 0x0000000000009caa,0x000b5e0a66b766d0f,0x0000010917f06196,0x0000b3b7701c107a7,0x0000000000000000,0x000b6000000000000,0x0000000000000000,0x0000b3c0000000000},
+ { 0x0000000000000328,0x003a91a98afd91a53,0x000000000000f186,0x0000000001ac31968,0x0000000000000000,0x003aa000000000000,0x0000000000000000,0x0000000001ac80000},
+ { 0x000000000000eb87,0x000008d5d5aa9fdf2,0x00000000051ee651,0x00000000cef47841a,0x0000000000000000,0x000008d8000000000,0x0000000004000000,0x00000000cf0000000},
+ { 0x0000000000000035,0x0033ebb86457d0d65,0x000000000015fd86,0x00000002f1a852e59,0x0000000000000000,0x0033f000000000000,0x0000000000000000,0x00000002f20000000},
+ { 0x000000000000c67d,0x00088ceba54f2d045,0x0000000380010d79,0x000000a7fb22070f6,0x0000000000000000,0x00089000000000000,0x0000000000000000,0x000000a8000000000},
+ { 0x0000000000000003,0x0d2206fb29cab90e6,0x0000000fc48e77dd,0x000000a3ec6cbce78,0x0000000000000000,0x0d240000000000000,0x0000000c00000000,0x000000a4000000000},
+ { 0x0000000000000007,0x00000000232d22500,0x000000000000001a,0x000000000000013f5,0x0000000000000000,0x00000000233000000,0x0000000000000018,0x000000000000013f8},
+ { 0x0000000000001255,0x0000098234093a75b,0x00000000017a6bdc,0x00000000002571b30,0x0000000000000000,0x00000984000000000,0x00000000017a4000,0x00000000002574000},
+ { 0x00000000000a17dd,0x000000027026fad20,0x0000000000142be0,0x00000000001c4ee83,0x0000000000000000,0x00000002710000000,0x0000000000140000,0x00000000001c50000},
+ { 0x00000007a9c63b14,0x00003b98ccb22fce6,0x00005278a2a1815e,0x00000c00662eb9904,0x0000000000000000,0x00003ba0000000000,0x0000526000000000,0x00000c02000000000},
+ { 0x0000000c919c044c,0x01eff5f74bf3db601,0x00000092b52e7173,0x00000012f96e27bc0,0x0000000000000000,0x01f00000000000000,0x0000009280000000,0x00000012fc0000000},
+ { 0x0000000000000003,0x00000000000ff056d,0x0000000000000079,0x000000000000006c4,0x0000000000000000,0x00000000000ff4000,0x0000000000000079,0x000000000000006c4},
+ { 0x0000000001dccaf0,0x0001553f349eb3dd0,0x00000053087b97d8,0x000014abaa0dd6f4a,0x0000000000000000,0x00015580000000000,0x0000000000000000,0x000014b0000000000},
+ { 0x000000000001d123,0x00001cc7cf617eae9,0x00000001fe03243f,0x00001346ab12e8075,0x0000000000000000,0x00001cc8000000000,0x0000000000000000,0x00001348000000000},
+ { 0x000000000000041d,0x000fc6d43a7c25397,0x0000000017fa95da,0x000000002be16c266,0x0000000000000000,0x000fc800000000000,0x0000000017000000,0x000000002bf000000},
+ { 0x0000000000000002,0x00252e9cd19c9b311,0x000d8be5ac71970a,0x00071b44ed5e01689,0x0000000000000000,0x00253000000000000,0x000d800000000000,0x00071c00000000000},
+ { 0x000000000000c568,0x0007382c175d63da7,0x000000000016feed,0x0000115ccbe9f82c2,0x0000000000000000,0x00073a00000000000,0x0000000000000000,0x00001160000000000},
+ { 0x0000000000000009,0x00353d4b3a6dc931c,0x0000000000000aaf,0x00000000046c59d81,0x0000000000000000,0x00354000000000000,0x0000000000000000,0x00000000046e00000},
+ { 0x000000000162c491,0x000000efe7dde014a,0x00000000017c9d7b,0x0000004709af36ffa,0x0000000000000000,0x000000f0000000000,0x0000000000000000,0x00000047200000000},
+ { 0x0000000000000004,0x002cdd73052077692,0x0000000074b1e71e,0x000000036b2799967,0x0000000000000000,0x002ce000000000000,0x0000000070000000,0x000000036c0000000},
+ { 0x000000000000002a,0x000daa1d545ee1272,0x0000002fc43e8111,0x000002e94f4f09a35,0x0000000000000000,0x000dac00000000000,0x0000002000000000,0x000002ea000000000},
+ { 0x00000000004f3794,0x0001bc93ff8d3f001,0x000000000c58e4b5,0x00000005d858e036a,0x0000000000000000,0x0001bd00000000000,0x0000000000000000,0x00000005da0000000},
+ { 0x0000000000000007,0x0000003f67dbb9598,0x00000000a07212f3,0x0000000df982235c6,0x0000000000000000,0x0000003f700000000,0x0000000080000000,0x0000000dfc0000000},
+ { 0x000000001874efbf,0x003bc2c4e93105628,0x00000a9d8d6e4e01,0x000001f1725555d77,0x0000000000000000,0x003bd000000000000,0x00000a9800000000,0x000001f1800000000},
+ { 0x000000000002438a,0x00000005f8b90b26a,0x0000000002f1f0c6,0x0000000000668c36c,0x0000000000000000,0x00000005fa0000000,0x0000000002f10000,0x00000000006690000},
+ { 0x0000008f266db54f,0x0003f0328607f5b57,0x000002c8fe822074,0x00000042355693ea7,0x0000000000000000,0x0003f100000000000,0x000002c880000000,0x00000042380000000},
+ { 0x000000000000000c,0x00000000000248dba,0x0000000000000129,0x000000000000001be,0x0000000000000000,0x00000000000249000,0x0000000000000129,0x000000000000001be},
+ { 0x0000000000000014,0x00000948b7aad11f3,0x0000000000000501,0x000000000004bb5da,0x0000000000000000,0x0000094c000000000,0x0000000000000000,0x000000000004bc000},
+ { 0x0000000000005cc8,0x0001f6c77eaf2c07e,0x00000000001bb005,0x0000000000204ec53,0x0000000000000000,0x0001f700000000000,0x00000000001b8000,0x00000000002050000},
+ { 0x0000000000000012,0x000217eb312cb6150,0x000000000022dd0a,0x00000078ff96344bc,0x0000000000000000,0x00021800000000000,0x0000000000000000,0x00000079000000000},
+ { 0x00000000000000cf,0x0000048e2d243a19b,0x0000000000001301,0x000000000373bdfc7,0x0000000000000000,0x00000490000000000,0x0000000000000000,0x00000000037400000},
+ { 0x0000000000000004,0x001792630b369af6c,0x000000001ffe7d91,0x000001616f39291a8,0x0000000000000000,0x00179800000000000,0x0000000000000000,0x00000161800000000},
+ { 0x0000000000077b75,0x025ca7c78ee1e7b83,0x000000000366bfcd,0x000017ffbb7dcb081,0x0000000000000000,0x025d0000000000000,0x0000000000000000,0x00001800000000000},
+ { 0x00000000000005e8,0x0033a1eef1b58e489,0x00000000c772a024,0x000000008dc8cbbcf,0x0000000000000000,0x0033b000000000000,0x00000000c4000000,0x000000008e0000000},
+ { 0x00000000003e9a40,0x007e44d78cff96e42,0x0035157b4daa062a,0x0003d96e0a5336110,0x0000000000000000,0x007e6000000000000,0x0035140000000000,0x0003d980000000000},
+ { 0x0000000000000079,0x00263fb5acbbd056d,0x000000401233a812,0x0000000626141eaf4,0x0000000000000000,0x00264000000000000,0x0000004010000000,0x00000006270000000},
+ { 0x0000000000000000,0x01272d0330c0e1f6e,0x000000000000000b,0x000000000000004e0,0x0000000000000000,0x01278000000000000,0x000000000000000b,0x000000000000004e0},
+ { 0x00000000189ddca0,0x00005f94e1122e111,0x00000000317e196d,0x00000072f3e4c4523,0x0000000000000000,0x00005fa0000000000,0x0000000000000000,0x00000073000000000},
+ { 0x0000000000000f71,0x0002d13d3683419c1,0x000000001466424b,0x0000001be447bd190,0x0000000000000000,0x0002d200000000000,0x0000000000000000,0x0000001be80000000},
+ { 0x0000000000000004,0x0000000003c664965,0x0000000000000242,0x0000000000366710b,0x0000000000000000,0x0000000003c700000,0x0000000000000000,0x00000000003670000},
+ { 0x000000000000001a,0x0000274b5f89ea8ad,0x0000000000000ae5,0x0000000000001947b,0x0000000000000000,0x00002750000000000,0x0000000000000a80,0x00000000000019480},
+ { 0x0000000019dcaac5,0x008e64e28c4cd6ccb,0x00053c8a11483045,0x0003ca26aa90c4efc,0x0000000000000000,0x008e8000000000000,0x0005300000000000,0x0003cb00000000000},
+ { 0x000000003f8b1fb3,0x003b20b6f0ee991f3,0x0000000aefbd889b,0x0000008e892fb9f32,0x0000000000000000,0x003b3000000000000,0x0000000800000000,0x0000008ec00000000},
+ { 0x0000000000e2828d,0x000377d66f8fc0127,0x000000277f0e4b31,0x00017033cc8a0f888,0x0000000000000000,0x00037800000000000,0x0000000000000000,0x00017080000000000},
+ { 0x0000000000000112,0x09c1e02428f766f82,0x0000000095d80581,0x000000005ce4be7de,0x0000000000000000,0x09c40000000000000,0x0000000094000000,0x000000005d0000000},
+ { 0x00000000000008be,0x00001168773c86b83,0x000000000001fcde,0x00000c929f01421ef,0x0000000000000000,0x00001170000000000,0x0000000000000000,0x00000c94000000000},
+ { 0x0000000000007d4b,0x009f94aea8161be36,0x00000000071e518d,0x00000000009e43010,0x0000000000000000,0x009fc000000000000,0x00000000071e0000,0x00000000009e50000},
+ { 0x00000001003d35fe,0x000cbee70d3b01be1,0x0000010a46dbd294,0x0009bb426f43b449d,0x0000000000000000,0x000cc000000000000,0x0000000000000000,0x0009bc00000000000},
+ { 0x000000000000f582,0x000e50ac65d84d2ac,0x0000000001c07043,0x0000001eb40b8cf5e,0x0000000000000000,0x000e5400000000000,0x0000000000000000,0x0000001eb80000000},
+ { 0x0000000000010b7f,0x0000000164e6679ed,0x0000000000e08651,0x0000000002ccf2a8d,0x0000000000000000,0x00000001650000000,0x0000000000e00000,0x0000000002cd00000},
+ { 0x0000000000075ee3,0x000f361117ab97ad5,0x000000e3b1f7d60e,0x00000010e7cd137f2,0x0000000000000000,0x000f3800000000000,0x000000e3b0000000,0x00000010e80000000},
+ { 0x000000017a09a1a7,0x0060b6956266c61a4,0x00000003c3803f49,0x0000007bc87ae8035,0x0000000000000000,0x0060c000000000000,0x0000000200000000,0x0000007be00000000},
+ { 0x00000000afcd2992,0x0e232d95f5a8e28d9,0x00000095e5862159,0x00003eeef6f9042dc,0x0000000000000000,0x0e240000000000000,0x0000000000000000,0x00003ef0000000000},
+ { 0x0000000000000004,0x0000010fa761823e6,0x0000000000000007,0x00000000f0c1506bf,0x0000000000000000,0x00000110000000000,0x0000000000000000,0x00000000f10000000},
+ { 0x0000000345873ee1,0x0001b05ab77b6f3e5,0x0000000df248ae17,0x0000020d7b9b3c96a,0x0000000000000000,0x0001b080000000000,0x0000000000000000,0x0000020e000000000},
+ { 0x0000000000000013,0x0000000000046d0aa,0x0000000000000068,0x0000000000004ee25,0x0000000000000000,0x0000000000046e000,0x0000000000000000,0x0000000000004f000},
+ { 0x0000000000000002,0x0000011596297b045,0x000000000419d313,0x0000000f74123c197,0x0000000000000000,0x00000116000000000,0x0000000000000000,0x0000000f780000000},
+ { 0x000000000089c17d,0x012024994919b15bf,0x0000000045e978d3,0x000003d1db33ab9da,0x0000000000000000,0x01208000000000000,0x0000000000000000,0x000003d2000000000},
+ { 0x000000000006f899,0x0000000025927a955,0x0000000002a6f444,0x000000001aaa4527c,0x0000000000000000,0x0000000025a000000,0x0000000002800000,0x000000001ab000000},
+ { 0x000000000000c771,0x0005fa7432c570fe0,0x00000000005857a0,0x00000000062f1053a,0x0000000000000000,0x0005fc00000000000,0x0000000000400000,0x00000000063000000},
+ { 0x0000000c43ba930e,0x00506c8868f07e60e,0x000002eb7ac95ee9,0x000311421e2b0356e,0x0000000000000000,0x00508000000000000,0x0000000000000000,0x00031200000000000},
+ { 0x0000000000019d38,0x0351609e1ee486d5c,0x005a1774bc3921d3,0x002ad679877750ccb,0x0000000000000000,0x03520000000000000,0x005a000000000000,0x002ae000000000000},
+ { 0x0000000000130a10,0x00000000575bdcfbe,0x000000000018a5db,0x00000000000235d63,0x0000000000000000,0x00000000576000000,0x000000000018a400,0x00000000000236000},
+ { 0x0000000000000002,0x007e3898de376c43a,0x000000000000002d,0x0000000000046a657,0x0000000000000000,0x007e4000000000000,0x0000000000000000,0x0000000000046c000},
+ { 0x0000000000000047,0x000000b52aa75e681,0x00000000000039b9,0x000000320d34a7351,0x0000000000000000,0x000000b5400000000,0x0000000000000000,0x00000032100000000},
+ { 0x0000000000000041,0x02fa5f491a1760a8c,0x0000000000748ad1,0x0000001ae190f22a9,0x0000000000000000,0x02fb0000000000000,0x0000000000000000,0x0000001ae80000000},
+ { 0x0000000000001823,0x000000385246f6230,0x00000000000061cb,0x0000000000001c313,0x0000000000000000,0x00000038600000000,0x0000000000006180,0x0000000000001c380},
+ { 0x00000000001b6a19,0x006ed2465b0212ea4,0x00000000028a1286,0x0000116a5e5dfbdf1,0x0000000000000000,0x006ee000000000000,0x0000000000000000,0x00001170000000000},
+ { 0x0000000000000044,0x00bbc5ac606f9fa37,0x00000000000067f9,0x00000000000013bae,0x0000000000000000,0x00bc0000000000000,0x00000000000067c0,0x00000000000013bc0},
+ { 0x0000000000000f56,0x0000cef9ede3e7347,0x00000002872178e9,0x00000001cd86a9ff2,0x0000000000000000,0x0000cf00000000000,0x0000000280000000,0x00000001ce0000000},
+ { 0x000000000000002c,0x0159322df2a5675d2,0x00000000488d6e60,0x00000000d204c829e,0x0000000000000000,0x01598000000000000,0x0000000048000000,0x00000000d24000000},
+ { 0x0000000000000001,0x000000cd7ca28d42a,0x00000000002df054,0x0000007da09783582,0x0000000000000000,0x000000cd800000000,0x0000000000000000,0x0000007dc00000000},
+ { 0x0000000000059cf6,0x00000165ceddd6148,0x00000000069beec3,0x000000014a2694d8b,0x0000000000000000,0x00000166000000000,0x0000000000000000,0x000000014a8000000},
+ { 0x0000000000000186,0x0000004ee28906b57,0x000000063ff85c91,0x00000006d7207092c,0x0000000000000000,0x0000004f000000000,0x0000000620000000,0x00000006d80000000},
+ { 0x00000000003a8a14,0x0006c12702593f583,0x000c1942150d2362,0x00011a7d2f3ca7573,0x0000000000000000,0x0006c200000000000,0x000c180000000000,0x00011a80000000000},
+ { 0x00000000000005f4,0x01499cce097401842,0x000009ee23f8c670,0x000020ca21068239a,0x0000000000000000,0x014a0000000000000,0x0000090000000000,0x000020d0000000000},
+ { 0x00000000000006f7,0x0000000000000d8ca,0x0000000000003830,0x000000000000038cb,0x00000000000006c0,0x0000000000000d900,0x0000000000003830,0x000000000000038cb},
+ { 0x000000000000001f,0x0010577eff43c4874,0x000007bec22d16e7,0x000007a9e87dc8043,0x0000000000000000,0x00105800000000000,0x000007a000000000,0x000007aa000000000},
+ { 0x0000000000000002,0x03bb967b452064140,0x0000000000000033,0x0000000000fc5be6a,0x0000000000000000,0x03bc0000000000000,0x0000000000000000,0x0000000000fc80000},
+ { 0x000000000000c7a4,0x043212ee8bd016f59,0x000000000001757b,0x0000000343cf41740,0x0000000000000000,0x04340000000000000,0x0000000000000000,0x00000003440000000},
+ { 0x0000000000000003,0x0118cca5bb3414d5d,0x00000000006153e2,0x000000000017ba159,0x0000000000000000,0x01190000000000000,0x0000000000610000,0x000000000017c0000},
+ { 0x0000000000000016,0x0fd4644911f74fe6f,0x0000000000aa1672,0x000002cafd5670e95,0x0000000000000000,0x0fd80000000000000,0x0000000000000000,0x000002cb000000000},
+ { 0x0000000000000011,0x00000000651023faf,0x00000000000002d5,0x00000000504c4df83,0x0000000000000000,0x00000000652000000,0x0000000000000000,0x00000000506000000},
+ { 0x0000000000000646,0x091616abf130c13ac,0x00000000061d3cd3,0x033eb51836853d535,0x0000000000000000,0x09180000000000000,0x0000000000000000,0x033f0000000000000},
+ { 0x0000000000009f64,0x01a149126c890ab8a,0x0000000000011606,0x00000000016c2ffdf,0x0000000000000000,0x01a18000000000000,0x0000000000000000,0x00000000016c80000},
+ { 0x0000000000000010,0x000eb26f7db662790,0x000000000000d165,0x00014a8c7b0e0e3e3,0x0000000000000000,0x000eb400000000000,0x0000000000000000,0x00014b00000000000},
+ { 0x000000000000010b,0x000000267d764ba8a,0x00000000000007ab,0x00000000000265515,0x0000000000000000,0x00000026800000000,0x0000000000000000,0x00000000000266000},
+ { 0x000000000000006f,0x000c4430515542f7c,0x0000000265fa5008,0x0000012c80c97f13c,0x0000000000000000,0x000c4800000000000,0x0000000000000000,0x0000012d000000000},
+ { 0x0000000000000146,0x000000280613cb82f,0x000000000003ef1e,0x00000003249553911,0x0000000000000000,0x00000028100000000,0x0000000000000000,0x00000003250000000},
+ { 0x000000000000dca6,0x000b3ee0bf17abeb4,0x00000001851d2fa6,0x00000000f332451f6,0x0000000000000000,0x000b4000000000000,0x0000000184000000,0x00000000f34000000},
+ { 0x00000000000288dd,0x0000629829ac9cfce,0x00000000002bf625,0x000000068ff0b4404,0x0000000000000000,0x000062a0000000000,0x0000000000000000,0x00000006900000000},
+ { 0x000000000001e64b,0x0003a2ea3e917e606,0x00000000983ec93c,0x0000006a1e0d58ba6,0x0000000000000000,0x0003a300000000000,0x0000000000000000,0x0000006a200000000},
+ { 0x0000000000000005,0x000001ecd2ec7b0cd,0x000000000002cac7,0x000000003a827427b,0x0000000000000000,0x000001ed000000000,0x0000000000000000,0x000000003a9000000},
+ { 0x0000000000000062,0x00013c817c4905cdb,0x0000000000004a67,0x0000000000a99f549,0x0000000000000000,0x00013d00000000000,0x0000000000000000,0x0000000000a9c0000},
+ { 0x0000000000011734,0x015f3faeb792cbbd0,0x0000000002138e87,0x0000c2270a2f4ac90,0x0000000000000000,0x015f8000000000000,0x0000000000000000,0x0000c240000000000},
+ { 0x000000000000002d,0x0000000000001388b,0x0000000000000125,0x00000000000000c81,0x0000000000000000,0x00000000000013900,0x0000000000000125,0x00000000000000c81},
+ { 0x0000000000000006,0x02e2db5d424d0ed6e,0x0000000000000060,0x000000000079a7fb7,0x0000000000000000,0x02e30000000000000,0x0000000000000000,0x000000000079c0000},
+ { 0x00000000000000c1,0x00002dd5f6d5bd217,0x000000000c572dd3,0x00000064279785c51,0x0000000000000000,0x00002de0000000000,0x0000000000000000,0x00000064400000000},
+ { 0x000000000696d25c,0x000001cb85774ee2a,0x000000002b19d9da,0x0000006e9b8893194,0x0000000000000000,0x000001cc000000000,0x0000000000000000,0x0000006ea00000000},
+ { 0x0000000000009258,0x0030ca531078bcb5b,0x00000429ec6b0641,0x0005e1f7d73ddaeea,0x0000000000000000,0x0030d000000000000,0x0000000000000000,0x0005e200000000000},
+ { 0x00000000000006c2,0x002ce30bbb01d7a38,0x00000004cf49e3d6,0x0000000ec03b16ba2,0x0000000000000000,0x002cf000000000000,0x00000004c0000000,0x0000000ec40000000},
+ { 0x0000000000000057,0x001e1004a15f4c9c1,0x000d456924dbf503,0x0004c916c1f503a2d,0x0000000000000000,0x001e1800000000000,0x000d400000000000,0x0004ca00000000000},
+ { 0x0000000000000002,0x00000000171214637,0x00000000000023de,0x00000000000009238,0x0000000000000000,0x00000000171800000,0x00000000000023c0,0x00000000000009240},
+ { 0x00000000000000f3,0x0000000ff2b9a8f71,0x000000000001a37d,0x00000000000313b30,0x0000000000000000,0x0000000ff40000000,0x000000000001a000,0x00000000000314000},
+ { 0x0000000000322171,0x000000a76985903b4,0x0000000000af374c,0x00000000005e43af7,0x0000000000000000,0x000000a7800000000,0x0000000000ae0000,0x00000000005e60000},
+ { 0x0000000000000002,0x00008205a3991993a,0x0000000002e93e6b,0x000000007bd9c9944,0x0000000000000000,0x00008240000000000,0x0000000002000000,0x000000007be000000},
+ { 0x00000000000000e1,0x000020a58d20dea66,0x0000000572e8387f,0x00000003f30ada5f4,0x0000000000000000,0x000020b0000000000,0x0000000570000000,0x00000003f40000000},
+ { 0x0000000000000001,0x0000ac382adfdea84,0x000000000000005d,0x00000000000000d41,0x0000000000000000,0x0000ac40000000000,0x000000000000005d,0x00000000000000d41},
+ { 0x00000000004b6787,0x0020ecea1115eefad,0x000017720626018f,0x000016f189e551fd6,0x0000000000000000,0x0020f000000000000,0x0000170000000000,0x000016f8000000000},
+ { 0x00000000000017ec,0x0000a1f0df2a80861,0x00000001b1afa206,0x000001ce8b720c38f,0x0000000000000000,0x0000a200000000000,0x0000000000000000,0x000001cf000000000},
+ { 0x000000000000006e,0x000035acc1374bb93,0x00000000000031bb,0x00000005f7e6dcd44,0x0000000000000000,0x000035b0000000000,0x0000000000000000,0x00000005f80000000},
+ { 0x00000000000009bd,0x0000198d831458f89,0x00000000039aa662,0x0000000037e8d8a64,0x0000000000000000,0x00001990000000000,0x0000000003000000,0x0000000037f000000},
+ { 0x000000000009900b,0x0000348828e2d379f,0x000000064b2d47c9,0x00000001a4773d4da,0x0000000000000000,0x00003490000000000,0x0000000648000000,0x00000001a48000000},
+ { 0x000000000000cb73,0x00000005bfe3102b8,0x000000000001250f,0x00000000000241747,0x0000000000000000,0x00000005c00000000,0x0000000000012000,0x00000000000242000},
+ { 0x000000000000104e,0x0000000d3597571d4,0x00000000006748f3,0x000000004e8f3411a,0x0000000000000000,0x0000000d380000000,0x0000000000000000,0x000000004ea000000},
+ { 0x0000000000002b83,0x0117ee55cfbacb00c,0x0000000004e6c2ab,0x0000704e58280e6cb,0x0000000000000000,0x01180000000000000,0x0000000000000000,0x00007060000000000},
+ { 0x000000000000296e,0x001c8f88a7f53ee72,0x00297507d5aef9b1,0x0002e2c4fe67c94bc,0x0000000000000000,0x001c9000000000000,0x0029740000000000,0x0002e2e0000000000},
+ { 0x00000000000002e0,0x0000000674643c934,0x000000000000043c,0x0000000000209079d,0x0000000000000000,0x00000006760000000,0x0000000000000000,0x000000000020a0000},
+ { 0x0000000000177225,0x00efedd2074cc1b5a,0x00003c46a1a5ec05,0x005360078e54a8e07,0x0000000000000000,0x00f00000000000000,0x0000000000000000,0x00538000000000000},
+ { 0x0000000000000008,0x0073fb3908edc9742,0x0000000000010f30,0x000000000043c934d,0x0000000000000000,0x00740000000000000,0x0000000000000000,0x000000000043e0000},
+ { 0x000000000000004e,0x00000000000b080db,0x0000000000008cb0,0x000000000004fa523,0x0000000000000000,0x00000000000b0c000,0x0000000000008000,0x000000000004fc000},
+ { 0x000000000191a61a,0x0001e7f8d79fd3ba7,0x0000000f34b68812,0x00000432942c82442,0x0000000000000000,0x0001e800000000000,0x0000000000000000,0x00000434000000000},
+ { 0x0000000000000567,0x014bc5c250264cee9,0x000000000030a907,0x0000050936c27484f,0x0000000000000000,0x014c0000000000000,0x0000000000000000,0x0000050a000000000},
+ { 0x000000000427e189,0x0000007b85bb0a6f2,0x00000001ec631756,0x0000005e9fff2d926,0x0000000000000000,0x0000007ba00000000,0x0000000000000000,0x0000005ea00000000},
+ { 0x00000000000001c2,0x0000080599b686e05,0x000000000067743f,0x0000000000bd6fed3,0x0000000000000000,0x00000808000000000,0x0000000000640000,0x0000000000bd80000},
+ { 0x00000000000004f0,0x004fab3af4b374493,0x000000003fd325d7,0x000007425a04e66dc,0x0000000000000000,0x004fc000000000000,0x0000000000000000,0x00000744000000000},
+ { 0x0000000000000291,0x0523611c4044ac522,0x000004f94865821f,0x0000294ba59432218,0x0000000000000000,0x05240000000000000,0x0000040000000000,0x00002950000000000},
+ { 0x0000000000000001,0x047e08f47d3026c21,0x0000000000003b18,0x00001b5063e915e3f,0x0000000000000000,0x04800000000000000,0x0000000000000000,0x00001b58000000000},
+ { 0x00000000db3b51f7,0x006313d06e271ca1b,0x00001e5388ed8c19,0x00003415a2ac95da1,0x0000000000000000,0x00632000000000000,0x00001e0000000000,0x00003420000000000},
+ { 0x00000000000653dc,0x06ff81344595a0a9b,0x00000000543cec65,0x0000d453f2d84750f,0x0000000000000000,0x07000000000000000,0x0000000000000000,0x0000d480000000000},
+ { 0x0000000000014ca8,0x0043155c0c499fd5e,0x000000005daef79a,0x00001e0de4107c748,0x0000000000000000,0x00432000000000000,0x0000000000000000,0x00001e10000000000},
+ { 0x00000000000004f9,0x00004f1d5cd467212,0x0000000000003447,0x00000000000067b80,0x0000000000000000,0x00004f20000000000,0x0000000000003400,0x00000000000067c00},
+ { 0x0000000002b4cc93,0x000000d1992a762eb,0x00000000cb444349,0x00000000592b5d347,0x0000000000000000,0x000000d1c00000000,0x00000000ca000000,0x00000000594000000},
+ { 0x0000000000000001,0x00000000791b72b04,0x0000000000000003,0x00000000001ed3e9b,0x0000000000000000,0x00000000792000000,0x0000000000000000,0x00000000001ed8000},
+ { 0x0000000000000026,0x000000205a6515fdc,0x000000000001136b,0x000000157152a56c9,0x0000000000000000,0x00000020600000000,0x0000000000000000,0x00000015780000000},
+ { 0x000000000000005d,0x0df6fb7eb229a97f1,0x0000000000028f0b,0x054377d71631bc032,0x0000000000000000,0x0df80000000000000,0x0000000000000000,0x05440000000000000},
+ { 0x0000000000000000,0x000005281e4c3b858,0x000000000000d791,0x0000000000b2b1b04,0x0000000000000000,0x0000052a000000000,0x0000000000000000,0x0000000000b2c0000},
+ { 0x0000000000000003,0x00015b0ed82afcd23,0x0000000037e019c3,0x00000007f4ca3c41f,0x0000000000000000,0x00015b80000000000,0x0000000020000000,0x00000007f60000000},
+ { 0x00000000000006ec,0x0189112013e796310,0x000dea76349d1582,0x00062b1848c930652,0x0000000000000000,0x01898000000000000,0x000de00000000000,0x00062c00000000000},
+ { 0x00000000000009d4,0x00000074e5ee4676c,0x000000006ae9a4d0,0x000000001f1e0aaa7,0x0000000000000000,0x00000075000000000,0x000000006a800000,0x000000001f2000000},
+ { 0x0000038b7f6ac0ae,0x0017013b8b1eacac6,0x00000f8591ae1f44,0x000002795eca0cefa,0x0000000000000000,0x00170800000000000,0x00000f8000000000,0x00000279800000000},
+ { 0x000000000000002f,0x0bfd81b58ded180c2,0x0000000000160348,0x000000149ace9c66e,0x0000000000000000,0x0c000000000000000,0x0000000000000000,0x00000014a00000000},
+ { 0x000000000003374f,0x0125dcdb033397469,0x0000000645e8ba39,0x0000429e4c3cc482a,0x0000000000000000,0x01260000000000000,0x0000000000000000,0x000042a0000000000},
+ { 0x0000000000001ac9,0x0000007b2aaad0a43,0x000000000006f6a2,0x00000000000118e0b,0x0000000000000000,0x0000007b400000000,0x000000000006f400,0x00000000000119000},
+ { 0x000000000000030c,0x000002d3b92b011b5,0x00000002dd63aed6,0x0000000429608ee45,0x0000000000000000,0x000002d4000000000,0x00000002d0000000,0x000000042a0000000},
+ { 0x0000000001f2ac0e,0x0000f53638fe08d3f,0x00000062b761f5ad,0x000000dd9d9146fd6,0x0000000000000000,0x0000f540000000000,0x0000006000000000,0x000000ddc00000000},
+ { 0x0000000000000006,0x007709c1fc7cdacc7,0x000000000004dfa7,0x000000000f2276c94,0x0000000000000000,0x00772000000000000,0x0000000000000000,0x000000000f2400000},
+ { 0x0000000000000007,0x000004407fd8bf734,0x0000000000000028,0x0000001774113d092,0x0000000000000000,0x00000442000000000,0x0000000000000000,0x00000017780000000},
+ { 0x00000000000058ba,0x0c9468ecb8af74f0d,0x03a7559cc269eff5,0x0053e81fbface4902,0x0000000000000000,0x0c980000000000000,0x03a7000000000000,0x0053f000000000000},
+ { 0x00000000004ae8cf,0x0074eb159069f0e5f,0x000000001f3f77d1,0x000c8a25d011eef52,0x0000000000000000,0x00750000000000000,0x0000000000000000,0x000c8c00000000000},
+ { 0x000000000b8ad2ee,0x000000013a754c5b9,0x000000005900e708,0x0000000036949f32a,0x0000000008000000,0x000000013a8000000,0x0000000059000000,0x0000000036a000000},
+ { 0x0000000000000002,0x05c295db4b86d71c5,0x03da24e49cda3164,0x006bdde304aba6f5b,0x0000000000000000,0x05c40000000000000,0x03da000000000000,0x006be000000000000},
+ { 0x00000000004d892d,0x000044d1f1b7c43f7,0x00000000006d136f,0x00000000005fb6466,0x0000000000000000,0x000044e0000000000,0x00000000006c0000,0x00000000005fc0000},
+ { 0x000000000002faa5,0x01c221ea8fcaf765c,0x000000000007d35d,0x000000511040d1b7b,0x0000000000000000,0x01c28000000000000,0x0000000000000000,0x00000051200000000},
+ { 0x0000000000000340,0x00c8cc5bbd07a7254,0x0000000000160a73,0x00000040c60b75211,0x0000000000000000,0x00c90000000000000,0x0000000000000000,0x00000040e00000000},
+ { 0x0000000020b8fe3a,0x00138b6198520304d,0x000007ffb395b203,0x00013640f23c5b670,0x0000000000000000,0x00139000000000000,0x0000000000000000,0x00013680000000000},
+ { 0x00000072e107e29e,0x00cf94f046d9bbffe,0x0000508986d173ab,0x005ac81ae03a1deef,0x0000000000000000,0x00cfc000000000000,0x0000000000000000,0x005ae000000000000},
+ { 0x0000000000260641,0x00000001fa6a90284,0x0000000017bf2682,0x0000000001dda1d10,0x0000000000000000,0x00000001fa8000000,0x0000000017be0000,0x0000000001ddc0000},
+ { 0x00000000034fcc5d,0x0000584f9af8dd248,0x00000079edbd297c,0x00000321078047ed7,0x0000000000000000,0x00005860000000000,0x0000007000000000,0x00000322000000000},
+ { 0x00000000032f7b41,0x000e1b3879affa03f,0x00000003d6a928d6,0x000000b8ad74aa52b,0x0000000000000000,0x000e1c00000000000,0x0000000000000000,0x000000b8c00000000},
+ { 0x00000000000000d7,0x00a239e88cfd75eab,0x001f9713a0d105cf,0x007686d6de5df4a6b,0x0000000000000000,0x00a24000000000000,0x001e000000000000,0x0076a000000000000},
+ { 0x0000000000000009,0x000582829aedbe0c9,0x0000000007306288,0x0000b577609507946,0x0000000000000000,0x00058400000000000,0x0000000000000000,0x0000b580000000000},
+ { 0x0000000000000776,0x0001b9a3fa361c037,0x000005ea5b315c47,0x000001f25a2aaa4d8,0x0000000000000000,0x0001ba00000000000,0x000005e800000000,0x000001f2800000000},
+ { 0x000000005b70b968,0x09697d4fe5258e300,0x0007de12604d0aff,0x08616edeb269bca42,0x0000000000000000,0x096c0000000000000,0x0000000000000000,0x08640000000000000},
+ { 0x000000000198fab1,0x000006679f3fca450,0x00000003ace79d19,0x00000000e84cae6f5,0x0000000000000000,0x00000668000000000,0x00000003ac000000,0x00000000e88000000},
+ { 0x0000000000000093,0x00edaf5e143981fa3,0x00000000ee62b397,0x000ad138b76d069c8,0x0000000000000000,0x00edc000000000000,0x0000000000000000,0x000ad400000000000},
+ { 0x0000000000000094,0x00000001e748360a0,0x0000000000000716,0x0000000000f64f092,0x0000000000000000,0x00000001e78000000,0x0000000000000000,0x0000000000f680000},
+ { 0x00000000000013c1,0x00000266a11b13fdd,0x00000000000164a1,0x0000000da2afd02b9,0x0000000000000000,0x00000267000000000,0x0000000000000000,0x0000000da40000000},
+ { 0x00000000000075ec,0x0000057969caace76,0x00000000002c96cb,0x000000116aadac56d,0x0000000000000000,0x0000057a000000000,0x0000000000000000,0x00000011700000000},
+ { 0x0000000000000035,0x00000000001d2120d,0x00000000000000ca,0x000000000000114ac,0x0000000000000000,0x00000000001d28000,0x0000000000000080,0x00000000000011500},
+ { 0x0000000000000000,0x000000000055ab9e4,0x0000000000000004,0x0000000000001c146,0x0000000000000000,0x000000000055c0000,0x0000000000000000,0x0000000000001c180},
+ { 0x0000000000000028,0x00027c9642dd8ff4c,0x0000000000002cfb,0x00000000001c38f66,0x0000000000000000,0x00027d00000000000,0x0000000000000000,0x00000000001c40000},
+ { 0x0000000000000008,0x005f4b227e9ef151d,0x00000007240d0562,0x0000001af6e58e309,0x0000000000000000,0x005f6000000000000,0x0000000700000000,0x0000001af80000000},
+ { 0x0000000000003b42,0x0003fcb2de0179895,0x0000000001a9466a,0x000000000174d8c70,0x0000000000000000,0x0003fd00000000000,0x0000000001a80000,0x00000000017500000},
+ { 0x0000000000000000,0x00000b5cbd44f4847,0x000000000000059d,0x000000a77ee61bcb5,0x0000000000000000,0x00000b60000000000,0x0000000000000000,0x000000a7800000000},
+ { 0x0000000000059a79,0x000000000ee7b1bf5,0x0000000000309829,0x000000000006e026f,0x0000000000000000,0x000000000ee800000,0x0000000000309000,0x000000000006e1000},
+ { 0x0000000000002007,0x0004fb7aa7a06bf72,0x0000000000024e7d,0x00000000000a5b806,0x0000000000000000,0x0004fc00000000000,0x0000000000024000,0x00000000000a5c000},
+ { 0x0000000000000000,0x0001617b36bd84b27,0x0000000000001ad9,0x0000000001de1acfa,0x0000000000000000,0x00016180000000000,0x0000000000000000,0x0000000001de80000},
+ { 0x000000000000000d,0x01458d308adeee803,0x001f5d3b6b53f0db,0x004a2a7ca71b6f99d,0x0000000000000000,0x01460000000000000,0x001e000000000000,0x004a4000000000000},
+ { 0x00000000003450af,0x0001de69453e381cf,0x0000000003ecb3b3,0x000000fd8676e4c93,0x0000000000000000,0x0001de80000000000,0x0000000000000000,0x000000fdc00000000},
+ { 0x0000000000001b79,0x0000017cf42f4876f,0x0000000000001dc1,0x000000000000c3d02,0x0000000000000000,0x0000017d000000000,0x0000000000001c00,0x000000000000c4000},
+ { 0x0000000000000069,0x0000000a69b9920d1,0x000000000000034f,0x000000000000005e9,0x0000000000000000,0x0000000a6c0000000,0x000000000000034f,0x000000000000005e9},
+ { 0x00000000000006f0,0x0001e1da01900dfd8,0x00000000001847bb,0x00000cda78790e54b,0x0000000000000000,0x0001e200000000000,0x0000000000000000,0x00000cdc000000000},
+ { 0x0000000000000002,0x000005eec9a185edf,0x000000000001f8b8,0x00000158e254475da,0x0000000000000000,0x000005f0000000000,0x0000000000000000,0x00000159000000000},
+ { 0x000000000000d1a9,0x057334f1b510eaa09,0x0000000000063494,0x0000000000ae90c7a,0x0000000000000000,0x05740000000000000,0x0000000000040000,0x0000000000aec0000},
+ { 0x000000000000028b,0x0000000b6c19c86c4,0x0000000000002915,0x0000000002bb7cb82,0x0000000000000000,0x0000000b700000000,0x0000000000000000,0x0000000002bc00000},
+ { 0x000000000000183e,0x000001c32e67052fd,0x00000000bd7496e2,0x000000056c5663e1c,0x0000000000000000,0x000001c3800000000,0x00000000a0000000,0x000000056e0000000},
+ { 0x0000000000000000,0x00185053153372613,0x00000000000091e5,0x0000000000001afb5,0x0000000000000000,0x00185800000000000,0x0000000000009180,0x0000000000001b000},
+ { 0x0000000000000003,0x0000004f13d6fb7e2,0x000000000007850e,0x00000000001452b39,0x0000000000000000,0x0000004f200000000,0x0000000000078000,0x00000000001458000},
+ { 0x0000000000000008,0x00000000000003c37,0x00000000000000b2,0x000000000000006f1,0x0000000000000000,0x00000000000003c40,0x00000000000000b2,0x000000000000006f1},
+ { 0x000000006b485647,0x000241138cf3f5226,0x00000004136d45d9,0x00000006dd9b1f28c,0x0000000000000000,0x00024200000000000,0x0000000400000000,0x00000006de0000000},
+ { 0x000000000000266f,0x0339344b33bbc6b01,0x000000000c9601e8,0x00000000077922b3b,0x0000000000000000,0x033a0000000000000,0x000000000c800000,0x00000000077a00000},
+ { 0x0000000000000be8,0x0000034b2b9ba0f5d,0x0000000000058a3f,0x0000000726f9b9249,0x0000000000000000,0x0000034c000000000,0x0000000000000000,0x00000007280000000},
+ { 0x00000000002b911d,0x000000000034dd4c7,0x0000000000ca6ca3,0x000000000011e0cee,0x00000000002b0000,0x000000000034e0000,0x0000000000ca6000,0x000000000011e2000},
+ { 0x0000000000000008,0x001838301ec2fbbb5,0x00000000269f4a32,0x000c837b43eb049cc,0x0000000000000000,0x00184000000000000,0x0000000000000000,0x000c8400000000000},
+ { 0x0000000000000033,0x0028d0e4a2442ece1,0x0000000075084e69,0x000005e318c47043a,0x0000000000000000,0x0028e000000000000,0x0000000000000000,0x000005e4000000000},
+ { 0x0000000000000004,0x00002b6927c8e5da6,0x0000000000007cb0,0x0000000001e03a24e,0x0000000000000000,0x00002b70000000000,0x0000000000000000,0x0000000001e080000},
+ { 0x0000000000000003,0x00d4d7ae3995fb3aa,0x00000000000022b1,0x0000000000c0c14e5,0x0000000000000000,0x00d50000000000000,0x0000000000000000,0x0000000000c100000},
+ { 0x0000000015670472,0x00007083f0e4a59d4,0x00001f100c1e5231,0x00000298bdf62201c,0x0000000000000000,0x000070a0000000000,0x00001f1000000000,0x00000298c00000000},
+ { 0x000000000000007d,0x00030ba030e387fae,0x00000000000063cc,0x00000000fdc3cb52b,0x0000000000000000,0x00030c00000000000,0x0000000000000000,0x00000000fe0000000},
+ { 0x0000000000003bf9,0x000000002a4e3087a,0x00000000000649c5,0x00000000165eb0b10,0x0000000000000000,0x000000002a5000000,0x0000000000000000,0x00000000166000000},
+ { 0x0000000000000381,0x0000036785a927a3e,0x00000000abc0ec16,0x00000002e2b2bac90,0x0000000000000000,0x00000368000000000,0x00000000a0000000,0x00000002e30000000},
+ { 0x0000000000000066,0x07119a7e0576f60ad,0x00000000000081e6,0x000303bff55be5064,0x0000000000000000,0x07120000000000000,0x0000000000000000,0x00030400000000000},
+ { 0x000000003a39daed,0x034f49053aa7dedc9,0x0000161f1c2fc39f,0x000026e017c166408,0x0000000000000000,0x03500000000000000,0x0000160000000000,0x000026f0000000000},
+ { 0x000000051fd449e0,0x0000337431d2b4696,0x0000038246ded583,0x000000718c3d28eda,0x0000000000000000,0x00003380000000000,0x0000038200000000,0x00000071900000000},
+ { 0x0000000000000008,0x00004dcd80bf0157b,0x0000000b2c6e5d37,0x0000000e9e095b354,0x0000000000000000,0x00004de0000000000,0x0000000b00000000,0x0000000ea00000000},
+ { 0x0000000000000018,0x0010cdbf7721e90f3,0x0000000000768449,0x0000db00f21df801c,0x0000000000000000,0x0010d000000000000,0x0000000000000000,0x0000db40000000000},
+ { 0x0000000000060551,0x0007c771cd305b4c5,0x0000000008da5b39,0x0000673268847ca53,0x0000000000000000,0x0007c800000000000,0x0000000000000000,0x00006740000000000},
+ { 0x000000000003dcac,0x01e64ca8f3d8568b0,0x000000001b256fc9,0x000002ebaed090fd5,0x0000000000000000,0x01e68000000000000,0x0000000000000000,0x000002ec000000000},
+ { 0x0000000000000144,0x00d378fe5f2ab00f1,0x000007e60a5d88cd,0x0003b8738093fe54b,0x0000000000000000,0x00d38000000000000,0x0000000000000000,0x0003b900000000000},
+ { 0x0000000000000241,0x0000018283765c366,0x00000000000005d8,0x000000000000293ba,0x0000000000000000,0x00000183000000000,0x0000000000000500,0x00000000000029400},
+ { 0x0000000000000285,0x0a5fbfd2a72aafbd4,0x00000001aa9efa66,0x0039762a867e66a70,0x0000000000000000,0x0a600000000000000,0x0000000000000000,0x00398000000000000},
+ { 0x00000000000065b4,0x03b544a79fca74402,0x0000000002524656,0x0000000001f9c7766,0x0000000000000000,0x03b60000000000000,0x0000000002500000,0x0000000001fa00000},
+ { 0x000000000a303f67,0x002bd35ce3b89e1bf,0x0000000010a6db4c,0x0000007a0ce4f4fab,0x0000000000000000,0x002be000000000000,0x0000000000000000,0x0000007a200000000},
+ { 0x00000000000a1f00,0x0000b028c69840d36,0x00000000003318f9,0x00000008b2b5feb5e,0x0000000000000000,0x0000b040000000000,0x0000000000000000,0x00000008b40000000},
+ { 0x0000000000064a49,0x000105a38072e4509,0x000000002d9cecc2,0x00000002371dfedd4,0x0000000000000000,0x00010600000000000,0x0000000020000000,0x00000002380000000},
+ { 0x00000131580dead1,0x0037fddf97ab1fd14,0x000002d1c6ac166e,0x00046bc85af25a5cc,0x0000000000000000,0x00380000000000000,0x0000000000000000,0x00046c00000000000},
+ { 0x00000000000015d3,0x0098507eb3cfa1c1b,0x0000000000133b0d,0x00014115a3cc37dd5,0x0000000000000000,0x00988000000000000,0x0000000000000000,0x00014180000000000},
+ { 0x0000000000000017,0x0036e856a7a82f99a,0x000000057e703bc2,0x000011d0d9e4d5769,0x0000000000000000,0x0036f000000000000,0x0000000000000000,0x000011d8000000000},
+ { 0x0000000000001695,0x04c14987e6febc8b2,0x0000000000002b7a,0x0000000006ede7d56,0x0000000000000000,0x04c20000000000000,0x0000000000000000,0x0000000006ee00000},
+ { 0x0000000000005ac6,0x0000000034a3223c6,0x000000000002ba82,0x00000000032d87c94,0x0000000000000000,0x0000000034b000000,0x0000000000000000,0x00000000032e00000},
+ { 0x00000000000000da,0x000001364ddb0b3b2,0x00000000000da2ec,0x0000000001aa2fc46,0x0000000000000000,0x00000136800000000,0x0000000000080000,0x0000000001aa80000},
+ { 0x000000000000000a,0x00000000120671012,0x0000000000000b92,0x0000000000036b3a5,0x0000000000000000,0x00000000120800000,0x0000000000000000,0x0000000000036c000},
+ { 0x0000000000000000,0x000000000001d77cf,0x0000000000014df6,0x0000000000006eb21,0x0000000000000000,0x000000000001d7800,0x0000000000014c00,0x0000000000006ec00},
+ { 0x000000000000004d,0x0d920d781c6c4b540,0x0000000ee158fa49,0x00edc6a98f821b7a6,0x0000000000000000,0x0d940000000000000,0x0000000000000000,0x00ee0000000000000},
+ { 0x000000000106c259,0x00007f52e3c2b04d1,0x000000002b15e7b0,0x0000000319813e342,0x0000000000000000,0x00007f60000000000,0x0000000020000000,0x000000031a0000000},
+ { 0x00000000000000d3,0x02dcd16e219bfef4c,0x000014efed82ead4,0x005d3bf69bbe39c9e,0x0000000000000000,0x02dd0000000000000,0x0000000000000000,0x005d4000000000000},
+ { 0x0000000000000001,0x00005aa173af14ec3,0x000000000001f8ec,0x0000000003604e9d7,0x0000000000000000,0x00005ac0000000000,0x0000000000000000,0x00000000036100000},
+ { 0x0000000000002f23,0x0000b1b65bd566915,0x0000026d6a4b6168,0x000032f3f94fcfaa7,0x0000000000000000,0x0000b1c0000000000,0x0000020000000000,0x00003300000000000},
+ { 0x00000000000000b4,0x0000fad83f5180c63,0x00000000000006f6,0x00000000000000e7f,0x0000000000000000,0x0000fb00000000000,0x00000000000006f6,0x00000000000000e7f},
+ { 0x000001a82debe402,0x0006276fe31c14d14,0x000001b389d6a42a,0x000017f6981b41acb,0x0000000000000000,0x00062800000000000,0x0000018000000000,0x000017f8000000000},
+ { 0x0000000000001410,0x000068c96598d3013,0x000000000034d203,0x0000000005147c017,0x0000000000000000,0x000068e0000000000,0x0000000000200000,0x00000000051600000},
+ { 0x0000000000073377,0x0d6a8af855e426902,0x0000000000178e2e,0x00000000053171a7f,0x0000000000000000,0x0d6c0000000000000,0x0000000000000000,0x00000000053200000},
+ { 0x0000000000000045,0x0000000158539a6d0,0x00000000027ac11a,0x00000000216fa4fe5,0x0000000000000000,0x00000001588000000,0x0000000002000000,0x00000000217000000},
+ { 0x0000000000000009,0x00076974fc98726e3,0x000000000007f5c9,0x000138cffe7663b23,0x0000000000000000,0x00076a00000000000,0x0000000000000000,0x00013900000000000},
+ { 0x000000000049f140,0x0001053802540f731,0x0000000083ec0f49,0x0000e9e887f8849a1,0x0000000000000000,0x00010580000000000,0x0000000000000000,0x0000ea00000000000},
+ { 0x00000000000000b3,0x000000000698e0e72,0x0000000000000179,0x00000000000005eda,0x0000000000000000,0x00000000069a00000,0x0000000000000160,0x00000000000005ee0},
+ { 0x0000003303b8ae83,0x00001493b94bf8a48,0x00001d55c27f56b8,0x000001f64b63574b5,0x0000000000000000,0x00001498000000000,0x00001d5500000000,0x000001f6500000000},
+ { 0x0000000000007515,0x0000be3f2b7a40f91,0x0000000006c66796,0x0000000006639d8ad,0x0000000000000000,0x0000be40000000000,0x0000000006c00000,0x00000000066400000},
+ { 0x0000000000000002,0x00000000077313fb7,0x0000000005ad78eb,0x000000000072399e7,0x0000000000000000,0x00000000077400000,0x0000000005ad0000,0x00000000007240000},
+ { 0x000000000000000d,0x01cd05f2a99d0ec5e,0x000000001087e8b0,0x0000667207a6aa92b,0x0000000000000000,0x01cd8000000000000,0x0000000000000000,0x00006680000000000},
+ { 0x000000000000c725,0x000eff48e1918a7a2,0x00000000000341fe,0x0000000496a27cb1a,0x0000000000000000,0x000f0000000000000,0x0000000000000000,0x00000004980000000},
+ { 0x0000000000000010,0x000321f2c030ea5d5,0x0000000b0e650f53,0x000070155e36a7865,0x0000000000000000,0x00032200000000000,0x0000000000000000,0x00007020000000000},
+ { 0x0000000000000387,0x000e996f97747707b,0x00018f662879a85e,0x00025e2a818049a7a,0x0000000000000000,0x000e9c00000000000,0x0001800000000000,0x00025f00000000000},
+ { 0x000000125b0af17c,0x0ea51d32bb512826d,0x00000023f8d13ee4,0x00044b8122e3f26b1,0x0000000000000000,0x0ea80000000000000,0x0000000000000000,0x00044c00000000000},
+ { 0x0000000000000003,0x03b73ad30fa2d0721,0x00000000020eb39c,0x000450733f96b3325,0x0000000000000000,0x03b80000000000000,0x0000000000000000,0x00045200000000000},
+ { 0x0000000000000000,0x0010c5ef0e9fd4436,0x0000000000000033,0x0000000001e679427,0x0000000000000000,0x0010c800000000000,0x0000000000000000,0x0000000001e680000},
+ { 0x00000000000008a3,0x0000001e5ea99eae3,0x0000000000000c18,0x00000000001e41063,0x0000000000000000,0x0000001e600000000,0x0000000000000000,0x00000000001e48000},
+ { 0x000000183d9ddd13,0x007fdabb61112f62d,0x00007364f507b39d,0x0007d13483beda333,0x0000000000000000,0x007fe000000000000,0x0000600000000000,0x0007d200000000000},
+ { 0x00000000001702ff,0x01e6b14ef66c7f074,0x00000000001cc520,0x00001b39ba8f03a19,0x0000000000000000,0x01e70000000000000,0x0000000000000000,0x00001b40000000000},
+ { 0x000000000039fa72,0x096b2bdb2e007c4cf,0x00000015936ab93a,0x0136cb922e085c71a,0x0000000000000000,0x096c0000000000000,0x0000000000000000,0x01370000000000000},
+ { 0x0000000000003e23,0x001a9f0a835173ae1,0x00000000000cbec2,0x0000002a1c5263578,0x0000000000000000,0x001aa000000000000,0x0000000000000000,0x0000002a200000000},
+ { 0x000000000002bbff,0x0000006f83a27d4a2,0x0000000000348c00,0x00000014b5bfeef83,0x0000000000000000,0x0000006fa00000000,0x0000000000000000,0x00000014b80000000},
+ { 0x0000000000001a6e,0x00000007db93c15a2,0x00000000002090dc,0x000000000035bb43c,0x0000000000000000,0x00000007dc0000000,0x0000000000200000,0x000000000035c0000},
+ { 0x000000000001b352,0x00548b1c040c2e27e,0x0000000014717461,0x000228a45edff260e,0x0000000000000000,0x0054a000000000000,0x0000000000000000,0x00022900000000000},
+ { 0x0000000000000010,0x009425a34a990ed37,0x0000000000c4effa,0x0000000005161e6ff,0x0000000000000000,0x00944000000000000,0x0000000000c00000,0x00000000051800000},
+ { 0x000000000002c261,0x0000015f8e63d1fdc,0x0000000018df48a9,0x00000015a19526344,0x0000000000000000,0x00000160000000000,0x0000000000000000,0x00000015a80000000},
+ { 0x0000000000006baa,0x000000dda7865488a,0x0000001ecd8d24bd,0x00000030b925332da,0x0000000000000000,0x000000ddc00000000,0x0000001e00000000,0x00000030c00000000},
+ { 0x0000000000001a57,0x00000b60b30dee12f,0x00000000000030e4,0x00000001cfb631d91,0x0000000000000000,0x00000b64000000000,0x0000000000000000,0x00000001d00000000},
+ { 0x0000000000000004,0x008fae54fd1bc7965,0x0000000000109d5e,0x0000068e36e416c2c,0x0000000000000000,0x008fc000000000000,0x0000000000000000,0x00000690000000000},
+ { 0x0000000000015aa3,0x0762d6effb97d89de,0x0000000033bb3a28,0x0000000077a0ff285,0x0000000000000000,0x07640000000000000,0x0000000032000000,0x0000000077c000000},
+ { 0x0000000000000079,0x06262a12ff8d3dd66,0x00000001fe3a05c0,0x00000002de1fc8b37,0x0000000000000000,0x06280000000000000,0x00000001f0000000,0x00000002df0000000},
+ { 0x000000000000001a,0x000000023bc257f38,0x00000003b617e625,0x00000000442560ac1,0x0000000000000000,0x000000023c0000000,0x00000003b6000000,0x00000000442800000},
+ { 0x000000000000b99a,0x0f0754f1062bb1f6b,0x00015dd4eb07144f,0x000699be1119c2ea2,0x0000000000000000,0x0f080000000000000,0x0001400000000000,0x00069a00000000000},
+ { 0x000000000000001f,0x00068f989430792b4,0x0000000000001770,0x0000006f431dfe8a1,0x0000000000000000,0x00069000000000000,0x0000000000000000,0x0000006f600000000},
+ { 0x0000000001ed625d,0x0000018576c4ee90c,0x000000051509e357,0x00000009a4ace558d,0x0000000000000000,0x00000185800000000,0x0000000500000000,0x00000009a80000000},
+ { 0x000000000079df3a,0x00000000be4374996,0x000000000310cd68,0x00000000315045d3a,0x0000000000000000,0x00000000be8000000,0x0000000003000000,0x00000000316000000},
+ { 0x0000000000004867,0x0000011ab9abee937,0x0000000005119a29,0x0000000000ab3b550,0x0000000000000000,0x0000011b000000000,0x0000000005100000,0x0000000000ab40000},
+ { 0x0000000000000008,0x00019fafe6d0bc64d,0x000000000000c58b,0x0000000006a2e3129,0x0000000000000000,0x0001a000000000000,0x0000000000000000,0x0000000006a400000},
+ { 0x0000000000000005,0x0031f6eae772daee0,0x00000000000002c4,0x000000000000f4f20,0x0000000000000000,0x00320000000000000,0x0000000000000000,0x000000000000f5000},
+ { 0x000000000cdb237d,0x01eec10fcc8835194,0x000003e6f3aba123,0x0001ca7daadce7ff7,0x0000000000000000,0x01ef0000000000000,0x0000000000000000,0x0001ca80000000000},
+ { 0x00000000000045fe,0x02cae2cff4443a88a,0x00000000004c9fea,0x00c6f6d3ea5ab1bc6,0x0000000000000000,0x02cb0000000000000,0x0000000000000000,0x00c70000000000000},
+ { 0x0000000000000014,0x013ff280a26b80f00,0x00000000000003c1,0x0000000260ee0e167,0x0000000000000000,0x01400000000000000,0x0000000000000000,0x00000002610000000},
+ { 0x00000000145f0324,0x00135961b7dba1e65,0x000000007dead924,0x00005c9fea88f1534,0x0000000000000000,0x00136000000000000,0x0000000000000000,0x00005ca0000000000},
+ { 0x0000000000033820,0x000c77054f087399f,0x00000000002f5edc,0x00000000009218f08,0x0000000000000000,0x000c7800000000000,0x00000000002c0000,0x00000000009240000},
+ { 0x000000000000007e,0x0000688241e44b52d,0x0000000000045ac5,0x0000336ab87064cb2,0x0000000000000000,0x000068a0000000000,0x0000000000000000,0x00003370000000000},
+ { 0x0000000000039b7f,0x04d96911b665cb742,0x0000001a301eaa47,0x00000003864ecf706,0x0000000000000000,0x04da0000000000000,0x0000001a30000000,0x00000003868000000},
+ { 0x000000000020286c,0x00007b69421440dde,0x0000000937d41bc4,0x00000a0e166306e8d,0x0000000000000000,0x00007b80000000000,0x0000000000000000,0x00000a10000000000},
+ { 0x0000000000031f1b,0x00297643ab18a091e,0x00000000791acdf1,0x00000665ff85a99ae,0x0000000000000000,0x00298000000000000,0x0000000000000000,0x00000666000000000},
+ { 0x0000000000000124,0x000006fd1d6f40d0a,0x00000000000ddaf9,0x000000117098a0593,0x0000000000000000,0x000006fe000000000,0x0000000000000000,0x00000011780000000},
+ { 0x00000000000000aa,0x000005eb41bec5da4,0x0000000000000102,0x000003fee04474757,0x0000000000000000,0x000005ec000000000,0x0000000000000000,0x000003ff000000000},
+ { 0x0000000000000001,0x0000002ab4bd17bdc,0x0000000000000029,0x00000000015d829c0,0x0000000000000000,0x0000002ac00000000,0x0000000000000000,0x00000000015e00000},
+ { 0x0000000000000000,0x02560f90f56960788,0x000000000004174f,0x00027168d2d114a19,0x0000000000000000,0x02570000000000000,0x0000000000000000,0x00027200000000000},
+ { 0x00000000000012d4,0x000005f54567b47e1,0x00000000000300e0,0x00000006391548718,0x0000000000000000,0x000005f6000000000,0x0000000000000000,0x000000063a0000000},
+ { 0x0000000000000008,0x0000b280905d2d405,0x000000d7a2006933,0x0000330b3e1dee683,0x0000000000000000,0x0000b2c0000000000,0x0000000000000000,0x00003310000000000},
+ { 0x0000000000000186,0x0000072d208d00a75,0x00000007155d1703,0x000000024213c1cf9,0x0000000000000000,0x0000072e000000000,0x0000000710000000,0x00000002428000000},
+ { 0x0000000000000017,0x00000010143d3fcae,0x000000000230e7b1,0x0000000005d13169b,0x0000000000000000,0x00000010180000000,0x0000000002200000,0x0000000005d200000},
+ { 0x000000000000007a,0x000000015f357e782,0x00000000014930e9,0x0000000003a85f79f,0x0000000000000000,0x000000015f8000000,0x0000000001400000,0x0000000003a900000},
+ { 0x0000000000000042,0x0a493506895e25920,0x0001f5ee4c325466,0x000acc07115fb6a73,0x0000000000000000,0x0a4c0000000000000,0x0001c00000000000,0x000ad000000000000},
+ { 0x00000000006b7f89,0x002c29af7f6ccd418,0x00000000ff71556f,0x001a43d292a962448,0x0000000000000000,0x002c3000000000000,0x0000000000000000,0x001a4800000000000},
+ { 0x000000000010ae8f,0x002a697500ee70271,0x0000007efffc91c6,0x00000b26631a24394,0x0000000000000000,0x002a7000000000000,0x0000004000000000,0x00000b28000000000},
+ { 0x00000000000027ea,0x000000000cb180fb7,0x000000000145ec26,0x000000000495f0d7c,0x0000000000000000,0x000000000cb400000,0x0000000001400000,0x00000000049600000},
+ { 0x0000000000000023,0x00000001c8f5b4cac,0x0000000000000695,0x00000000004f9c186,0x0000000000000000,0x00000001c90000000,0x0000000000000000,0x00000000004fa0000},
+ { 0x00000000000000bf,0x00000001ca6affeb8,0x0000000000092941,0x00000000057817836,0x0000000000000000,0x00000001ca8000000,0x0000000000000000,0x00000000057a00000},
+ { 0x000000000000003a,0x0000016ee62b89301,0x00000000000009c4,0x0000000009da7ea4e,0x0000000000000000,0x0000016f000000000,0x0000000000000000,0x0000000009dc00000},
+ { 0x0000000000000001,0x0460b8dbe1f1032ea,0x0000000000095c01,0x000419128f49b4a7b,0x0000000000000000,0x04620000000000000,0x0000000000000000,0x00041a00000000000},
+ { 0x0000000000000092,0x00000002ae2ead1ea,0x000000000000037b,0x00000000000031de3,0x0000000000000000,0x00000002af0000000,0x0000000000000300,0x00000000000031e00},
+ { 0x0000000000000001,0x00001c76df0ad5bc7,0x00000000000039cc,0x0000000001559d499,0x0000000000000000,0x00001c78000000000,0x0000000000000000,0x00000000015600000},
+ { 0x0000000000000007,0x000000000146cca4f,0x00000000000041cb,0x00000000000013f7f,0x0000000000000000,0x00000000014700000,0x00000000000041c0,0x00000000000013f80},
+ { 0x0000000000000002,0x00001f331f13d1dbe,0x0000000000000005,0x000000006a10bc519,0x0000000000000000,0x00001f38000000000,0x0000000000000000,0x000000006a2000000},
+ { 0x0000000000000002,0x051ed9429e65fbb1c,0x0000000000000072,0x0000000040941d6dd,0x0000000000000000,0x05200000000000000,0x0000000000000000,0x0000000040a000000},
+ { 0x000000000000005c,0x00000000016331b0b,0x00000000003e7793,0x0000000000278ec6e,0x0000000000000000,0x00000000016380000,0x00000000003e0000,0x00000000002790000},
+ { 0x0000000000000e78,0x04fa7d1cd0620baa7,0x00000000000029c9,0x000000000002e6d28,0x0000000000000000,0x04fc0000000000000,0x0000000000002000,0x000000000002e7000},
+ { 0x0000000000000001,0x00000006deb408124,0x0000000000000003,0x00000000ebfb408e8,0x0000000000000000,0x00000006e00000000,0x0000000000000000,0x00000000ec0000000},
+ { 0x000000000000001c,0x00472afd25178ce61,0x0000000000001f59,0x00000000026ebbcfa,0x0000000000000000,0x00474000000000000,0x0000000000000000,0x00000000026f00000},
+ { 0x00000001986261aa,0x0003f2f410c709b06,0x000004d894b6ee0d,0x000008b9190a01940,0x0000000000000000,0x0003f300000000000,0x000004c000000000,0x000008bc000000000},
+ { 0x0000000000000001,0x00faa557c82486865,0x000000510a2a4600,0x00000577a82267981,0x0000000000000000,0x00fac000000000000,0x0000004000000000,0x00000578000000000},
+ { 0x000000000c93b4b5,0x00000011b9790abbd,0x0000000e654b0a63,0x00000001d85221a0d,0x0000000000000000,0x00000011c00000000,0x0000000e64000000,0x00000001d88000000},
+ { 0x000000003c90c467,0x00035f2f6252df1b2,0x00000000a38b3014,0x0002c236091d2e439,0x0000000000000000,0x00036000000000000,0x0000000000000000,0x0002c300000000000},
+ { 0x000000000000e162,0x000c3c09271d3f1e2,0x0000000000920047,0x000000000010399dd,0x0000000000000000,0x000c4000000000000,0x0000000000920000,0x0000000000103a000},
+ { 0x0000000000006a2a,0x00026ddcf288b141b,0x000000000005b20f,0x000000000038f0ae7,0x0000000000000000,0x00026e00000000000,0x0000000000050000,0x00000000003900000},
+ { 0x000000000000000e,0x02face7c4ea25a094,0x000000000353ad1d,0x000b32ec32fa75f9a,0x0000000000000000,0x02fb0000000000000,0x0000000000000000,0x000b3400000000000},
+ { 0x0000000000000009,0x000000012d5730ffe,0x000000000000000f,0x00000000000132cc1,0x0000000000000000,0x000000012d8000000,0x0000000000000000,0x00000000000133000},
+ { 0x000000000000114f,0x000001bf6a5b327e2,0x000000000c6fd3d0,0x00000006e43f2b6a8,0x0000000000000000,0x000001bf800000000,0x0000000000000000,0x00000006e60000000},
+ { 0x00000000000002b3,0x00000325d50e619a1,0x00000000008f0641,0x00000000098040dcf,0x0000000000000000,0x00000326000000000,0x0000000000800000,0x00000000098400000},
+ { 0x00000000000152b8,0x0163dc61f0b702601,0x0000000003007c9c,0x000001ee987c718b3,0x0000000000000000,0x01640000000000000,0x0000000000000000,0x000001ef000000000},
+ { 0x0000000000000076,0x0000000001733a6c5,0x00000000000014ef,0x00000000008a46e2e,0x0000000000000000,0x00000000017380000,0x0000000000000000,0x00000000008a80000},
+ { 0x0000000000000162,0x002e80ff900c30f0d,0x00000000000002fd,0x000a7a6b5df7a63c1,0x0000000000000000,0x002e9000000000000,0x0000000000000000,0x000a7c00000000000},
+ { 0x0000000000000000,0x00000009d3faf6576,0x000000000000a918,0x00000002ef57240cc,0x0000000000000000,0x00000009d40000000,0x0000000000000000,0x00000002f00000000},
+ { 0x00000000000003fa,0x0000008db650f187e,0x0000000000b534c4,0x0000000f83cb87126,0x0000000000000000,0x0000008dc00000000,0x0000000000000000,0x0000000f840000000},
+ { 0x000000000000003e,0x0000066cded3e8ce3,0x0000000000c78c4b,0x0000000060913b53f,0x0000000000000000,0x0000066e000000000,0x0000000000000000,0x0000000060a000000},
+ { 0x0000000000000000,0x0164d77b3642096d3,0x00000000000b1362,0x0037262421b7bf0e7,0x0000000000000000,0x01650000000000000,0x0000000000000000,0x00373000000000000},
+ { 0x0000000000000022,0x008e7d3f1b63c4c70,0x00000000000d254e,0x000000000d46ee812,0x0000000000000000,0x008e8000000000000,0x0000000000000000,0x000000000d4800000},
+ { 0x000000000000e713,0x0006a2145636ca8ec,0x000000000016d4dd,0x000010151d424e4f1,0x0000000000000000,0x0006a400000000000,0x0000000000000000,0x00001018000000000},
+ { 0x0000000000000088,0x0000000faf8cfa6b5,0x00000000000008aa,0x00000000000469575,0x0000000000000000,0x0000000fb00000000,0x0000000000000000,0x0000000000046a000},
+ { 0x0000000000000008,0x02b16aa44e6294f39,0x00000000d85cb92e,0x0001d0bb535698b54,0x0000000000000000,0x02b20000000000000,0x0000000000000000,0x0001d100000000000},
+ { 0x0000000000000004,0x00caaeabd4f6e1a60,0x0000000000000016,0x0000d2d927e7633a4,0x0000000000000000,0x00cac000000000000,0x0000000000000000,0x0000d300000000000},
+ { 0x0000000000024687,0x0000000eac108a398,0x00000000001cacf7,0x00000001de6b27d50,0x0000000000000000,0x0000000eb00000000,0x0000000000000000,0x00000001de8000000},
+ { 0x0000000000000001,0x0001d6cae91c0f1fd,0x000000001aa6c317,0x000000006d0db5d85,0x0000000000000000,0x0001d700000000000,0x000000001a000000,0x000000006d2000000},
+ { 0x0000000000000007,0x000000002a355cdbb,0x0000000000000337,0x0000000000006bdc8,0x0000000000000000,0x000000002a4000000,0x0000000000000200,0x0000000000006be00},
+ { 0x00000000000000c4,0x00001f67ddf8e8262,0x00000000004d0a72,0x00000000003d34f6f,0x0000000000000000,0x00001f68000000000,0x00000000004d0000,0x00000000003d40000},
+ { 0x0000000000000031,0x00000cede24ee7ffc,0x000000001eaa3965,0x00000000257cea0cd,0x0000000000000000,0x00000cf0000000000,0x000000001e000000,0x00000000258000000},
+ { 0x000000000000000e,0x0000001c17332549a,0x000000000003d8a1,0x00000000761be7d8c,0x0000000000000000,0x0000001c180000000,0x0000000000000000,0x00000000762000000},
+ { 0x0000000000000006,0x02dad1c346f4e0f6a,0x000000000000001f,0x000008efcb75fbdae,0x0000000000000000,0x02db0000000000000,0x0000000000000000,0x000008f0000000000},
+ { 0x000058a79abcd154,0x0000244e7e4a85841,0x0000f2507e1eafe8,0x0000158acb06ec07b,0x0000588000000000,0x00002450000000000,0x0000f24000000000,0x0000158c000000000},
+ { 0x0000000000042317,0x000000f927ff318bf,0x000000001a089dce,0x000000006f8573d8c,0x0000000000000000,0x000000f9400000000,0x000000001a000000,0x000000006fa000000},
+ { 0x0000000000000014,0x000000000c0ca0214,0x000000000000002d,0x0000000000000936a,0x0000000000000000,0x000000000c1000000,0x0000000000000000,0x00000000000009380},
+ { 0x0000000000000822,0x00074ba06c39bf19b,0x0000056c941aecae,0x000561c6806298068,0x0000000000000000,0x00074c00000000000,0x0000000000000000,0x00056200000000000},
+ { 0x0000000000072998,0x000dacd1d712609ef,0x00000000777d3c86,0x000007d67e54193db,0x0000000000000000,0x000db000000000000,0x0000000000000000,0x000007d8000000000},
+ { 0x0000000000002700,0x0005ab9fca4f6833f,0x000000007a83eb4a,0x00000075164083520,0x0000000000000000,0x0005ac00000000000,0x0000000000000000,0x00000075200000000},
+ { 0x0000000000000055,0x0000a7e2991aef68d,0x0000000861bd4174,0x000003cb60f0b3395,0x0000000000000000,0x0000a800000000000,0x0000000000000000,0x000003cc000000000},
+ { 0x00000000004cf9e0,0x0000618d1b8a5a431,0x000000fe68abb3fe,0x000028f16b812d9e3,0x0000000000000000,0x000061a0000000000,0x0000000000000000,0x00002900000000000},
+ { 0x000000000000001e,0x000000000624595e3,0x000000000000615f,0x0000000000ee123d7,0x0000000000000000,0x00000000062600000,0x0000000000000000,0x0000000000ee40000},
+ { 0x0000000000000000,0x00000007df463bf76,0x000000000008cf92,0x0000000000053cda4,0x0000000000000000,0x00000007e00000000,0x000000000008c000,0x0000000000053e000},
+ { 0x000000000000d52d,0x000000027653fe43d,0x0000000002049256,0x00000000183c3998e,0x0000000000000000,0x00000002770000000,0x0000000002000000,0x00000000184000000},
+ { 0x0000000000000015,0x057fc4ae645d0a7ff,0x000000000000d606,0x007841a892d5a58da,0x0000000000000000,0x05800000000000000,0x0000000000000000,0x00786000000000000},
+ { 0x0000000000000000,0x0000016ba823f6b9b,0x00000000000009c5,0x0000000042d371b9d,0x0000000000000000,0x0000016c000000000,0x0000000000000000,0x0000000042e000000},
+ { 0x00000000000000b0,0x0000daba81becb510,0x0000000000114ba2,0x000001f7f20f219e2,0x0000000000000000,0x0000dac0000000000,0x0000000000000000,0x000001f8000000000},
+ { 0x000000000237218b,0x0000004b9e949ef02,0x000000182a4f59f6,0x00000035f4b49757a,0x0000000000000000,0x0000004ba00000000,0x0000001800000000,0x00000036000000000},
+ { 0x0000000001c3d2ce,0x01919d8912099e712,0x00000b71f37fb19a,0x0001e14cfdd6bc962,0x0000000000000000,0x01920000000000000,0x0000080000000000,0x0001e180000000000},
+ { 0x00000000000024b8,0x004a9810fc15cbfa0,0x0000000000091199,0x000026cdf1a5ba8e9,0x0000000000000000,0x004aa000000000000,0x0000000000000000,0x000026d0000000000},
+ { 0x0000000002ded641,0x0000bad49ad50d287,0x00000015dd2d3bd3,0x0000002f188172d48,0x0000000000000000,0x0000bb00000000000,0x0000001500000000,0x0000002f200000000},
+ { 0x0000000000000414,0x000000b33da421d23,0x0000000000001509,0x00000002adaa4288b,0x0000000000000000,0x000000b3400000000,0x0000000000000000,0x00000002ae0000000},
+ { 0x000000000000000b,0x000006458489318a1,0x000000000038a4dc,0x0000000000a84ef0b,0x0000000000000000,0x00000646000000000,0x0000000000380000,0x0000000000a880000},
+ { 0x0000000000000002,0x000000000009663be,0x0000000000000014,0x000000000001e56f9,0x0000000000000000,0x00000000000968000,0x0000000000000000,0x000000000001e5800},
+ { 0x000000000000007e,0x00001f8831a1069de,0x00000000001637e4,0x0000000003711b48c,0x0000000000000000,0x00001f90000000000,0x0000000000100000,0x00000000037200000},
+ { 0x0000000000000001,0x0782c1aeb6d2b75bf,0x0000000000000005,0x00192b1de24417e07,0x0000000000000000,0x07840000000000000,0x0000000000000000,0x00193000000000000},
+ { 0x00000000293390d1,0x04006269aad469526,0x0000632f63becc4d,0x000035faf980d6b95,0x0000000000000000,0x04020000000000000,0x0000630000000000,0x00003600000000000},
+ { 0x0000000000000000,0x00000005129535cf9,0x00000000002cf0a5,0x000000001dce85ad7,0x0000000000000000,0x00000005140000000,0x0000000000000000,0x000000001dd000000},
+ { 0x0000000000345279,0x004e2628a38556265,0x000000000198e6d8,0x0000020d83bbb3175,0x0000000000000000,0x004e4000000000000,0x0000000000000000,0x0000020e000000000},
+ { 0x0000000000000589,0x001fb1a146f210edd,0x0000000000001d24,0x0000003e2d5f4638c,0x0000000000000000,0x001fb800000000000,0x0000000000000000,0x0000003e300000000},
+ { 0x0000000000000163,0x0000339b1e3027e08,0x0000000003420703,0x00000058b635ee99f,0x0000000000000000,0x000033a0000000000,0x0000000000000000,0x00000058c00000000},
+ { 0x0000000000000019,0x012c69cf49ec756e1,0x000000000000cc1a,0x00000098ecd3f3ff6,0x0000000000000000,0x012c8000000000000,0x0000000000000000,0x00000099000000000},
+ { 0x0000000000000225,0x0000001c9141ebd2e,0x0000000004f1d3e5,0x000000001120792e4,0x0000000000000000,0x0000001c980000000,0x0000000004800000,0x00000000112800000},
+ { 0x0000000097e7df28,0x03303d165da6428c6,0x000000496426519e,0x0018469d8ea43ba2b,0x0000000000000000,0x03310000000000000,0x0000000000000000,0x00184800000000000},
+ { 0x0000000000059e00,0x00000767823c2b975,0x00000001575778c5,0x00000000e89077647,0x0000000000000000,0x00000768000000000,0x0000000154000000,0x00000000e8c000000},
+ { 0x0000000095ec7e44,0x0001e991314e9871b,0x00003c4c7e31feef,0x00000fb3b25efdc3a,0x0000000000000000,0x0001ea00000000000,0x00003c4000000000,0x00000fb4000000000},
+ { 0x0000000021c4cdff,0x0386f738dafe6393c,0x0000029388e4678e,0x00031bfd95394bb02,0x0000000000000000,0x03870000000000000,0x0000000000000000,0x00031c00000000000},
+ { 0x0000000000000028,0x0027c949685d1918a,0x0000000170bc6802,0x0000012479adf64e9,0x0000000000000000,0x0027d000000000000,0x0000000000000000,0x00000124800000000},
+ { 0x00000000014c48ae,0x0135beae2838df9e5,0x0000033d63573850,0x0000051dac997b07c,0x0000000000000000,0x01360000000000000,0x0000032000000000,0x0000051e000000000},
+ { 0x0000000000000000,0x00007f61246b76f9f,0x00000000006e4f83,0x000000073b8763388,0x0000000000000000,0x00007f80000000000,0x0000000000000000,0x000000073c0000000},
+ { 0x00000000009f4c36,0x03940bc00c318a473,0x0000000000c1713e,0x00a2e6aaecd2412d5,0x0000000000000000,0x03950000000000000,0x0000000000000000,0x00a30000000000000},
+ { 0x00000000000095d0,0x00003ad2d785f16a3,0x0000000057ace18a,0x0000000005c42b214,0x0000000000000000,0x00003ae0000000000,0x0000000057ac0000,0x0000000005c440000},
+ { 0x000000000203a91a,0x00356b635fdc9afff,0x00000037ee585221,0x0005cc3640ee13740,0x0000000000000000,0x00357000000000000,0x0000000000000000,0x0005ce00000000000},
+ { 0x000000000000b3dc,0x00000d27e2ebaf2c4,0x000000001a5ff718,0x0000000002da71926,0x0000000000000000,0x00000d28000000000,0x000000001a580000,0x0000000002da80000},
+ { 0x000000000000000c,0x0000095080f985ecf,0x000000000000273f,0x0000000001f303484,0x0000000000000000,0x00000954000000000,0x0000000000000000,0x0000000001f380000},
+ { 0x000000044b66c018,0x000b0964f84629de4,0x0000003697a0e0d7,0x0000003542f267283,0x0000000000000000,0x000b0c00000000000,0x0000003600000000,0x00000035500000000},
+ { 0x000000000000006b,0x000018a7cf378c133,0x0000000000000278,0x0000000000334a91e,0x0000000000000000,0x000018a8000000000,0x0000000000000000,0x00000000003350000},
+ { 0x000000000000151e,0x00000144f88a3e37e,0x0000000000007099,0x000000000003461fa,0x0000000000000000,0x00000145000000000,0x0000000000007000,0x00000000000347000},
+ { 0x00000000000000dd,0x00000043e30953453,0x00000000002687fe,0x00000000d3cb7afa6,0x0000000000000000,0x00000044000000000,0x0000000000000000,0x00000000d40000000},
+ { 0x0000000000000172,0x0000025b67d76a1c5,0x000000001781e9d4,0x00000000197ed96b6,0x0000000000000000,0x0000025c000000000,0x0000000017800000,0x00000000198000000},
+ { 0x0000000000000055,0x0015099542212f868,0x0000000001a46383,0x0000289124b1c44e2,0x0000000000000000,0x00151000000000000,0x0000000000000000,0x000028a0000000000},
+ { 0x000000000003ea87,0x00600c4305cc33de3,0x00000000082790ac,0x000000000a632c8d1,0x0000000000000000,0x00602000000000000,0x0000000008000000,0x000000000a6400000},
+ { 0x0000000000000020,0x000004b2ab44ccb45,0x0000002de21ed016,0x00000107a2242496e,0x0000000000000000,0x000004b4000000000,0x0000002800000000,0x00000108000000000},
+ { 0x000000000001a135,0x0000a79959d5676d0,0x0000000001bc42fc,0x0000003f3e8c10dd8,0x0000000000000000,0x0000a7c0000000000,0x0000000000000000,0x0000003f400000000},
+ { 0x0000000000000034,0x0098b2f045155e65a,0x0000000fb919b51e,0x00009f4e45f1c145c,0x0000000000000000,0x0098c000000000000,0x0000000000000000,0x00009f80000000000},
+ { 0x000000000049fbb0,0x0000000189a2339e6,0x000000006074293e,0x000000015f0ed37c1,0x0000000000000000,0x000000018a0000000,0x0000000060000000,0x000000015f8000000},
+ { 0x0000000000000118,0x000854867ca38159f,0x00000dd1eae2e2ce,0x000000fb563561fab,0x0000000000000000,0x00085800000000000,0x00000dd180000000,0x000000fb580000000},
+ { 0x0000000000000048,0x003175b35d94f66d2,0x00000000027c295e,0x0000001e033c14f62,0x0000000000000000,0x00318000000000000,0x0000000000000000,0x0000001e080000000},
+ { 0x000000000000000b,0x03cd31b8714bc85e8,0x00000000000636e5,0x00002c2a59a36e2a9,0x0000000000000000,0x03ce0000000000000,0x0000000000000000,0x00002c30000000000},
+ { 0x0000000000000006,0x0000000003711b9a2,0x0000000000000a00,0x00000000003cdf83f,0x0000000000000000,0x00000000037200000,0x0000000000000000,0x00000000003ce0000},
+ { 0x00000000000080da,0x00000000124b99049,0x00000000000323fa,0x0000000000a80611e,0x0000000000000000,0x00000000125000000,0x0000000000000000,0x0000000000a840000},
+ { 0x0000000000081ed2,0x0007530c8a5886ac6,0x000000000375bbd2,0x00000000c89d7e794,0x0000000000000000,0x00075400000000000,0x0000000000000000,0x00000000c8c000000},
+ { 0x0000005169ef169a,0x0158124a0ed628d54,0x000007c4eb79f767,0x00280eb0dfe3a62a7,0x0000000000000000,0x01588000000000000,0x0000000000000000,0x00281000000000000},
+ { 0x0000000000004ae7,0x0002967853ac48241,0x000000000c60a14c,0x0000000006df51e07,0x0000000000000000,0x00029700000000000,0x000000000c600000,0x0000000006e000000},
+ { 0x00000000000000c6,0x000000254942bb3d6,0x00000000000007c9,0x000000000071a93d5,0x0000000000000000,0x00000025500000000,0x0000000000000000,0x000000000071c0000},
+ { 0x000000006df29946,0x069f9a8995c40b995,0x0000000078b2609f,0x0011a12ab13f7e5e6,0x0000000000000000,0x06a00000000000000,0x0000000000000000,0x0011a800000000000},
+ { 0x000000002dbc065f,0x00000087af9499315,0x00000000d265e87b,0x00000037d430f6302,0x0000000000000000,0x00000087c00000000,0x0000000000000000,0x00000037e00000000},
+ { 0x0000000000000046,0x0007b85f4111c118a,0x0000001b990a1ad5,0x0000010c18d770e6c,0x0000000000000000,0x0007ba00000000000,0x0000001800000000,0x0000010c800000000},
+ { 0x0000000000000000,0x00a21903358136da5,0x000000000000008c,0x00000003ed7b53cce,0x0000000000000000,0x00a24000000000000,0x0000000000000000,0x00000003ee0000000},
+ { 0x0000000000000003,0x00005d62f2304d42a,0x0000000000000298,0x0000000000005ec33,0x0000000000000000,0x00005d80000000000,0x0000000000000200,0x0000000000005ee00},
+ { 0x00000000000021c7,0x00000037028840906,0x0000000001805a26,0x000000007a32d0a72,0x0000000000000000,0x00000037100000000,0x0000000000000000,0x000000007a4000000},
+ { 0x0000000000000003,0x0000000d92dfec5a3,0x00000000000002ff,0x0000000000191109e,0x0000000000000000,0x0000000d940000000,0x0000000000000000,0x00000000001918000},
+ { 0x0000000000000293,0x004e25326421337a0,0x0000000002eac007,0x00000191cd0f0eed8,0x0000000000000000,0x004e4000000000000,0x0000000000000000,0x00000192000000000},
+ { 0x0000000000000007,0x00000011d92e85df9,0x0000000052870045,0x000000055f8f12110,0x0000000000000000,0x00000011e00000000,0x0000000040000000,0x00000005600000000},
+ { 0x000000000000004b,0x0057712208cf34b01,0x00000000004ea372,0x00000000002cdb2e5,0x0000000000000000,0x00578000000000000,0x00000000004e0000,0x00000000002ce0000},
+ { 0x0000000000000003,0x00000048b920616f2,0x0000000000052ecb,0x000000000003476ad,0x0000000000000000,0x00000048c00000000,0x0000000000052000,0x00000000000348000},
+ { 0x00000000000000ec,0x0523eb8e5d2a65adb,0x000000000000f142,0x000000e4cf7c7f7fd,0x0000000000000000,0x05240000000000000,0x0000000000000000,0x000000e5000000000},
+ { 0x0000000000000007,0x0000000000050092f,0x000000000000002f,0x0000000000000007b,0x0000000000000000,0x00000000000502000,0x000000000000002f,0x0000000000000007b},
+ { 0x0000000000000008,0x0000000001d466a1d,0x0000000000003744,0x00000000000665058,0x0000000000000000,0x0000000001d480000,0x0000000000002000,0x00000000000666000},
+ { 0x00000000e26dba9d,0x00744ce7980982a2a,0x000068bcc593c21e,0x001bed87b03b1d1db,0x0000000000000000,0x00746000000000000,0x0000000000000000,0x001bf000000000000},
+ { 0x000000000000004a,0x00000225d47434d61,0x000000000017256e,0x00000109720b9f36f,0x0000000000000000,0x00000226000000000,0x0000000000000000,0x00000109800000000},
+ { 0x0000000000000003,0x0000fb289538dc6ed,0x0000000000000012,0x00000001f37116fba,0x0000000000000000,0x0000fb40000000000,0x0000000000000000,0x00000001f38000000},
+ { 0x0000000003a01baa,0x036c95f10c3e79412,0x000000000551dbb7,0x000000006cec24e64,0x0000000000000000,0x036d0000000000000,0x0000000004000000,0x000000006d0000000},
+ { 0x00000005d063dd98,0x00164c7a9c3e3af7e,0x0000000e3757ec79,0x0000000380c717d68,0x0000000000000000,0x00165000000000000,0x0000000e30000000,0x00000003810000000},
+ { 0x000000000042a420,0x000338add6c24abe3,0x00000000005fb02c,0x0000001a2e7157ab2,0x0000000000000000,0x00033900000000000,0x0000000000000000,0x0000001a300000000},
+ { 0x0000000000000005,0x009d1134881b7155c,0x0000000189e06023,0x0000001605fc3de7c,0x0000000000000000,0x009d4000000000000,0x0000000180000000,0x00000016080000000},
+ { 0x0000000000000002,0x000000e8d7b23cbe8,0x000000000000009c,0x0000000001e114ffc,0x0000000000000000,0x000000e9000000000,0x0000000000000000,0x0000000001e180000},
+ { 0x000000000000004c,0x0000010c1744475bf,0x000000001161196c,0x0000000640c5fedff,0x0000000000000000,0x0000010c800000000,0x0000000000000000,0x00000006420000000},
+ { 0x0000000000000147,0x00008b936812d0d33,0x00000ada4c86b76a,0x00000f3c100e5f3c4,0x0000000000000000,0x00008bc0000000000,0x00000ac000000000,0x00000f40000000000},
+ { 0x000000000000004c,0x000000fbb87531d86,0x00000001a361a6a6,0x000000020b92020d7,0x0000000000000000,0x000000fbc00000000,0x00000001a0000000,0x000000020c0000000},
+ { 0x00000000000fbdec,0x000b6ef140697fab7,0x000007568a0ff045,0x000000e655a8b63e2,0x0000000000000000,0x000b7000000000000,0x0000075600000000,0x000000e6600000000},
+ { 0x000000000470f6a9,0x0000018655ac8aa37,0x0000000004da6fb0,0x000000008b4c0dfee,0x0000000000000000,0x00000186800000000,0x0000000004000000,0x000000008b8000000},
+ { 0x0000000000000001,0x004ec84c5fc719db8,0x000000000000008d,0x000000000000003b8,0x0000000000000000,0x004ee000000000000,0x000000000000008d,0x000000000000003b8},
+ { 0x0000000000002ff4,0x0000098dc41d0e203,0x000000000025ebb7,0x0000000022450bd26,0x0000000000000000,0x00000990000000000,0x0000000000000000,0x00000000225000000},
+ { 0x00000000000001a2,0x0007c5fdd54a4e786,0x000000000000fa29,0x0000010da78a1c105,0x0000000000000000,0x0007c600000000000,0x0000000000000000,0x0000010e000000000},
+ { 0x0000000000000020,0x001a9fd2f94922295,0x0000000024a511da,0x0000003e544baeb86,0x0000000000000000,0x001aa000000000000,0x0000000000000000,0x0000003e600000000},
+ { 0x00000000000000d9,0x00000f489c37f9ee7,0x00000000000d9efc,0x000006753ab34c4b2,0x0000000000000000,0x00000f4c000000000,0x0000000000000000,0x00000676000000000},
+ { 0x0000000000019a6e,0x000031ee7274f1ebb,0x00000000d557e18b,0x00000038e39b2780f,0x0000000000000000,0x000031f0000000000,0x0000000000000000,0x00000038f00000000},
+ { 0x000000000000000a,0x000000000000054f5,0x0000000000000010,0x0000000000000036b,0x0000000000000000,0x00000000000005500,0x0000000000000010,0x0000000000000036b},
+ { 0x0000000000000000,0x0008a51fe7ab5d425,0x0000000000001b4f,0x00000000000001efb,0x0000000000000000,0x0008a800000000000,0x0000000000001b4f,0x00000000000001efb},
+ { 0x00000000000001e7,0x000002b766d23703c,0x0000000000000bd1,0x0000000000000278a,0x0000000000000000,0x000002b8000000000,0x0000000000000bd0,0x00000000000002790},
+ { 0x000000000001925b,0x00134ab19996f6d88,0x0001df25a6a53f32,0x0000ef806b35e5b30,0x0000000000000000,0x00135000000000000,0x0001dc0000000000,0x0000efc0000000000},
+ { 0x00000000000000b3,0x073a4e7e2e7ca21ba,0x00000000047a52d6,0x00175a4600ff5d470,0x0000000000000000,0x073c0000000000000,0x0000000000000000,0x00176000000000000},
+ { 0x00000298f488bc49,0x001a21fb2f12e7bce,0x0000999d69729c2e,0x0000201446cf5aba0,0x0000000000000000,0x001a2800000000000,0x0000998000000000,0x00002018000000000},
+ { 0x0000000000000001,0x0002e717ba543be6e,0x0000000000000847,0x000000000000dce5e,0x0000000000000000,0x0002e800000000000,0x0000000000000800,0x000000000000dd000},
+ { 0x000000000000088b,0x00000000000bfeecc,0x00000000001f71cf,0x0000000000025b996,0x0000000000000000,0x00000000000c00000,0x00000000001f7000,0x0000000000025ba00},
+ { 0x00000000002a838d,0x001c3790ccb0348f1,0x000000000181d1c6,0x000002d5d2bc29b3d,0x0000000000000000,0x001c3800000000000,0x0000000000000000,0x000002d6000000000},
+ { 0x0000000000000000,0x00000fc94c0e81ecc,0x0000000000000299,0x0000000000000de05,0x0000000000000000,0x00000fcc000000000,0x0000000000000280,0x0000000000000de40},
+ { 0x0000000000000002,0x01ff5b3b45f3e9ef9,0x0000000000000029,0x0000000000000b96d,0x0000000000000000,0x01ff8000000000000,0x0000000000000000,0x0000000000000b980},
+ { 0x000000000000092a,0x000003e04cc506963,0x0000000000011a49,0x000000ab7aec0bbb0,0x0000000000000000,0x000003e1000000000,0x0000000000000000,0x000000ab800000000},
+ { 0x000000000000607d,0x0000c022824cf60e0,0x000000000000a94c,0x0000007d80465aa62,0x0000000000000000,0x0000c040000000000,0x0000000000000000,0x0000007da00000000},
+ { 0x000000000000003d,0x00015c2a9f32f52f7,0x0000000c6e10468a,0x00000004f0e66c569,0x0000000000000000,0x00015c80000000000,0x0000000c60000000,0x00000004f20000000},
+ { 0x00000000000073dc,0x000000aa886ee1e42,0x00000008fd5aa167,0x0000000657712a497,0x0000000000000000,0x000000aac00000000,0x00000008e0000000,0x00000006580000000},
+ { 0x00000000000000b9,0x0000000003a6769ff,0x00000000000012fd,0x000000000000b293e,0x0000000000000000,0x0000000003a700000,0x0000000000001000,0x000000000000b2c00},
+ { 0x0000000000000018,0x000001dda8eee579d,0x0000000000e06148,0x00000000000fbb7bb,0x0000000000000000,0x000001de000000000,0x0000000000e06000,0x00000000000fbb800},
+ { 0x000000000000fe22,0x00000000005432379,0x00000000000100fa,0x00000000002a61cf6,0x0000000000000000,0x00000000005440000,0x0000000000010000,0x00000000002a70000},
+ { 0x0000000000000013,0x00d304c02dab30feb,0x000000000009a76f,0x00000815aaf991044,0x0000000000000000,0x00d34000000000000,0x0000000000000000,0x00000818000000000},
+ { 0x0000000001a22fd7,0x0000000bfb5fe05b5,0x00000000881c50ae,0x00000001d4383a31f,0x0000000000000000,0x0000000bfc0000000,0x0000000088000000,0x00000001d48000000},
+ { 0x0000000000ad5ff1,0x0034636635ebca826,0x0000002cad80529d,0x0024ba1f268d73b9c,0x0000000000000000,0x00347000000000000,0x0000000000000000,0x0024c000000000000},
+ { 0x000000000000000b,0x0000056f2ec7e1bdf,0x000000000000003d,0x00000000000605227,0x0000000000000000,0x00000570000000000,0x0000000000000000,0x00000000000606000},
+ { 0x0000000000000072,0x00000008172add83d,0x0000000000016331,0x00000000088868f77,0x0000000000000000,0x00000008180000000,0x0000000000000000,0x00000000088c00000},
+ { 0x000000000000006e,0x000001df69f8deadb,0x000000000015fac4,0x000000000038ffa78,0x0000000000000000,0x000001df800000000,0x0000000000150000,0x00000000003900000},
+ { 0x0000000000000346,0x000948f6f58a7859c,0x0000000000000d51,0x0000000001275757a,0x0000000000000000,0x00094c00000000000,0x0000000000000000,0x00000000012780000},
+ { 0x0000000000000000,0x00000530118b49b81,0x000000004aab1125,0x000000553d33f3f3e,0x0000000000000000,0x00000532000000000,0x0000000000000000,0x00000055400000000},
+ { 0x00000000000000f9,0x000000762ef107a69,0x000000002f2cae2c,0x00000000f42ea34b4,0x0000000000000000,0x00000076400000000,0x000000002c000000,0x00000000f44000000},
+ { 0x0000000000000082,0x02aa4d695380e5e47,0x0000000000add088,0x00673552894925918,0x0000000000000000,0x02ab0000000000000,0x0000000000000000,0x00674000000000000},
+ { 0x0000000000000036,0x0000917d4b6a9309f,0x0000000000000716,0x00000000383d27da3,0x0000000000000000,0x00009180000000000,0x0000000000000000,0x00000000384000000},
+ { 0x000000001ed4f302,0x00010dedeb0bc3985,0x0000000a42e2a822,0x0000a3f6a78c3215d,0x0000000000000000,0x00010e00000000000,0x0000000000000000,0x0000a400000000000},
+ { 0x000000000e51badc,0x0026433d1a6a9d362,0x0002e5ccf5501b9e,0x00002e6c59c9a0415,0x0000000000000000,0x00265000000000000,0x0002e5ccc0000000,0x00002e6c5c0000000},
+ { 0x000000000000002d,0x00000000549c69703,0x00000000000030c8,0x00000000021e47da1,0x0000000000000000,0x0000000054a000000,0x0000000000000000,0x00000000021f00000},
+ { 0x0000000000000216,0x0000065c64ab75e58,0x0000000000000e53,0x00000000016d3d794,0x0000000000000000,0x0000065e000000000,0x0000000000000000,0x00000000016d80000},
+ { 0x0000001d93517408,0x044ab9c53bb0cca8d,0x00eea2a17f5c8e35,0x00b70615678c0b5d1,0x0000000000000000,0x044c0000000000000,0x00ec000000000000,0x00b74000000000000},
+ { 0x00000000000000e1,0x00071f3a6ecd41d1b,0x00000000001a39eb,0x0000000000030c1a8,0x0000000000000000,0x00072000000000000,0x00000000001a3800,0x0000000000030c800},
+ { 0x000000000009b077,0x01509c5514f798b49,0x000000000b0d060b,0x00168960987c8c4d7,0x0000000000000000,0x01510000000000000,0x0000000000000000,0x00169000000000000},
+ { 0x0000000000000268,0x000046d7b346e6030,0x0000000018e2cc7e,0x00000000032f0c5fd,0x0000000000000000,0x000046e0000000000,0x0000000018e00000,0x00000000032f80000},
+ { 0x0000000000e78978,0x00000ed2a6cd4d220,0x00000005dfda1dcc,0x0000000330c2494d2,0x0000000000000000,0x00000ed4000000000,0x00000005d0000000,0x00000003310000000},
+ { 0x0000000000000001,0x000000000c35cb34c,0x0000000000000215,0x00000000000004e69,0x0000000000000000,0x000000000c3800000,0x0000000000000200,0x00000000000004e80},
+ { 0x0000000000000052,0x00000000ac6f21ace,0x00000000000006b3,0x0000000007bc3229d,0x0000000000000000,0x00000000ac8000000,0x0000000000000000,0x0000000007be00000},
+ { 0x0000000000000741,0x000002ab540422b8e,0x000000000000f88a,0x000000007f6910e76,0x0000000000000000,0x000002ac000000000,0x0000000000000000,0x000000007f8000000},
+ { 0x000000000001595e,0x000b58a7d0fd77463,0x0000000001e3d912,0x000001024190b840c,0x0000000000000000,0x000b5c00000000000,0x0000000000000000,0x00000102800000000},
+ { 0x0000000000000003,0x000000055e64ba67b,0x0000000001cdef23,0x000000000836bb6e6,0x0000000000000000,0x00000005600000000,0x0000000001c00000,0x00000000083800000},
+ { 0x00000000000000b0,0x000000b60649a44e9,0x00000000000012a3,0x0000000000234418e,0x0000000000000000,0x000000b6400000000,0x0000000000000000,0x00000000002350000},
+ { 0x0000000000000063,0x00000006e263f8974,0x00000001a17ba1c5,0x000000013e0adc748,0x0000000000000000,0x00000006e40000000,0x00000001a0000000,0x000000013e8000000},
+ { 0x0000000000000013,0x0000056ea8c6e9a3a,0x00000000000085d2,0x000001b20e19f8c82,0x0000000000000000,0x00000570000000000,0x0000000000000000,0x000001b2800000000},
+ { 0x000000000000000d,0x00000006985a12f82,0x00000000000003f7,0x0000000000000af31,0x0000000000000000,0x000000069a0000000,0x00000000000003c0,0x0000000000000af40},
+ { 0x0000000000019f4e,0x0000000028b789139,0x0000000002562de2,0x0000000000376ea6b,0x0000000000000000,0x0000000028c000000,0x0000000002560000,0x00000000003770000},
+ { 0x0000000000000002,0x0000001d8feae3490,0x0000000000000016,0x0000000000000005f,0x0000000000000000,0x0000001d900000000,0x0000000000000016,0x0000000000000005f},
+ { 0x0000000000000001,0x00000000188b133e2,0x0000000000000001,0x0000000000000080e,0x0000000000000000,0x00000000189000000,0x0000000000000001,0x0000000000000080e},
+ { 0x000000000000010a,0x00000001244830df1,0x000000000003eec4,0x00000000001b9e7d6,0x0000000000000000,0x00000001248000000,0x0000000000038000,0x00000000001ba0000},
+ { 0x00000000000013e8,0x002006ab95d60509a,0x0000004d2ba114e0,0x0000316e64b6359c5,0x0000000000000000,0x00201000000000000,0x0000000000000000,0x00003170000000000},
+ { 0x000000000001db76,0x000000075a0448fff,0x0000002927b5da1f,0x0000000348793110e,0x0000000000000000,0x000000075c0000000,0x0000002924000000,0x00000003488000000},
+ { 0x00000000000de352,0x00000000274bd64ef,0x00000000000e6bd0,0x0000000000055e7c2,0x0000000000000000,0x00000000275000000,0x00000000000e6000,0x00000000000560000},
+ { 0x0000027c2f0381d1,0x0004a14db1ac4668b,0x00003f738b56e8c9,0x0000f0345b50ca92c,0x0000000000000000,0x0004a200000000000,0x00003c0000000000,0x0000f040000000000},
+ { 0x0000000000edca7e,0x00357874ce555840f,0x000000001053040f,0x00067d9b061cb6900,0x0000000000000000,0x00358000000000000,0x0000000000000000,0x00067e00000000000},
+ { 0x00000000039b6f1a,0x023c53dbdb48b5788,0x000000001f838d8c,0x0000000009f46318f,0x0000000000000000,0x023d0000000000000,0x000000001f800000,0x0000000009f600000},
+ { 0x0000000000d9a68f,0x0004bfac02d5d390a,0x0000000000f94fcc,0x0000000021d1e3c2e,0x0000000000000000,0x0004c000000000000,0x0000000000000000,0x0000000021e000000},
+ { 0x0000000000001be9,0x002b8fca4656159ce,0x000002924bdeceb7,0x000398e47afb17b17,0x0000000000000000,0x002b9000000000000,0x0000000000000000,0x00039900000000000},
+ { 0x0000000000000003,0x017c700f37e13fb7a,0x0000000000028c56,0x000006469c19467fa,0x0000000000000000,0x017c8000000000000,0x0000000000000000,0x00000648000000000},
+ { 0x000000000002bd10,0x00000002e8ce07c6c,0x0000000000782d12,0x00000000006abeb29,0x0000000000000000,0x00000002e90000000,0x0000000000780000,0x00000000006ac0000},
+ { 0x000000000000002c,0x00ca372e97ba3defb,0x0000001fc4ea5fda,0x001bdd592787b6e65,0x0000000000000000,0x00ca4000000000000,0x0000000000000000,0x001be000000000000},
+ { 0x0000000000001fb0,0x0000011aaaa9a2c95,0x00000000062a9492,0x0000000023d9c71b6,0x0000000000000000,0x0000011b000000000,0x0000000006000000,0x0000000023e000000},
+ { 0x00000000000004cc,0x07564b40c238bc6c1,0x00000000006bdf96,0x000000000049c96ac,0x0000000000000000,0x07580000000000000,0x00000000006a0000,0x000000000049e0000},
+ { 0x0000000000000076,0x00c8855456204f424,0x0000000025cd8e86,0x00000078f3dd3c376,0x0000000000000000,0x00c8c000000000000,0x0000000000000000,0x00000079000000000},
+ { 0x000000000002c822,0x00000c9f9dab4f560,0x00000000048ebb4a,0x00000000049154bda,0x0000000000000000,0x00000ca0000000000,0x0000000004800000,0x00000000049200000},
+ { 0x0000000000000000,0x0000001a794faf595,0x0000000000000005,0x000000000075807fb,0x0000000000000000,0x0000001a800000000,0x0000000000000000,0x000000000075a0000},
+ { 0x0000000000000007,0x0000129daaed73cf3,0x000000000000003d,0x000000000000cf5fa,0x0000000000000000,0x000012a0000000000,0x0000000000000000,0x000000000000cf800},
+ { 0x0000b45cbf21c910,0x00013a13d89d78c72,0x0003320e7afbba5f,0x0000976c9cbff4669,0x0000b00000000000,0x00013a80000000000,0x0003320000000000,0x00009780000000000},
+ { 0x0000000079eb93ff,0x040e5b60c6e45a0dd,0x00001c774b1e2b12,0x00003808ba8dfb4c3,0x0000000000000000,0x04100000000000000,0x00001c0000000000,0x00003810000000000},
+ { 0x0000000000000057,0x0000071e73aee5b4d,0x0000000000e2cbcb,0x0000000005aa67bc0,0x0000000000000000,0x00000720000000000,0x0000000000e00000,0x0000000005ac00000},
+ { 0x00000000000b1e03,0x0001b7889e48504df,0x000000003890b068,0x00000888f08c17b08,0x0000000000000000,0x0001b800000000000,0x0000000000000000,0x0000088c000000000},
+ { 0x0000000795bf0f7e,0x00e6cf84cb5a9e54d,0x0000000c956288be,0x00000007243fc0732,0x0000000000000000,0x00e70000000000000,0x0000000c80000000,0x00000007260000000},
+ { 0x000000001129a3e3,0x000001cfbcd582dbc,0x0000000027165367,0x0000000003685935c,0x0000000000000000,0x000001d0000000000,0x0000000027140000,0x00000000036880000},
+ { 0x0000000000005825,0x0000000013a5f12b5,0x00000000000077d7,0x000000000133fbf21,0x0000000000000000,0x0000000013a800000,0x0000000000000000,0x00000000013400000},
+ { 0x0000000000000002,0x00820139d75686fd3,0x0000000000005736,0x000000000288167d5,0x0000000000000000,0x00824000000000000,0x0000000000000000,0x00000000028900000},
+ { 0x0000000000000003,0x00000093639ec7652,0x0000000000000024,0x0000000000008e4a2,0x0000000000000000,0x00000093800000000,0x0000000000000000,0x0000000000008e800},
+ { 0x000000000000001c,0x00000000004174245,0x000000000002ccb4,0x000000000000ce0a0,0x0000000000000000,0x00000000004180000,0x000000000002cc00,0x000000000000ce400},
+ { 0x0000000000000001,0x00000000000000fa3,0x0000000000000019,0x000000000000005fb,0x0000000000000001,0x00000000000000fa3,0x0000000000000019,0x000000000000005fb},
+ { 0x000000000000003b,0x0001873acdb485962,0x0000000000000054,0x000000000047a2fb2,0x0000000000000000,0x00018780000000000,0x0000000000000000,0x000000000047c0000},
+ { 0x0000000000000001,0x000091ccfe25ccd5c,0x000000000000009a,0x000000000b02e0f05,0x0000000000000000,0x00009200000000000,0x0000000000000000,0x000000000b0400000},
+ { 0x0000000000000002,0x0024911c4dc6a5bb5,0x000006ef16f0bdb7,0x000012c323f4d89ab,0x0000000000000000,0x0024a000000000000,0x0000068000000000,0x000012c8000000000},
+ { 0x0000000000000016,0x0000000001095d525,0x0000000001665c35,0x000000000054b0417,0x0000000000000000,0x00000000010980000,0x0000000001660000,0x000000000054c0000},
+ { 0x000000000000003e,0x009b5235f38a7b11d,0x000000d7c2b949b0,0x007b76a87a1bbb81b,0x0000000000000000,0x009b8000000000000,0x0000000000000000,0x007b8000000000000},
+ { 0x00000000015ce90e,0x0498360f5da4d788c,0x00000006cbe9fa7f,0x00001a04303cbd4a9,0x0000000000000000,0x049a0000000000000,0x0000000000000000,0x00001a08000000000},
+ { 0x000000000000002e,0x0000003b987a04b35,0x00000000000001d9,0x00000000000063465,0x0000000000000000,0x0000003ba00000000,0x0000000000000000,0x00000000000063600},
+ { 0x0000000000000000,0x000000344f3a7335d,0x0000000000009656,0x000000000001fb0a8,0x0000000000000000,0x00000034500000000,0x0000000000009000,0x000000000001fb800},
+ { 0x0000000000000228,0x0011db504036cb10a,0x000000000033afaa,0x00000000000ee5546,0x0000000000000000,0x0011e000000000000,0x0000000000338000,0x00000000000ee8000},
+ { 0x00000000000036bc,0x01f9a3a5700948134,0x00000000046b0221,0x0000000926b6aca25,0x0000000000000000,0x01fa0000000000000,0x0000000000000000,0x00000009280000000},
+ { 0x0000000000004cbc,0x00000827b63485dfd,0x000000000006bf38,0x0000000017dda346b,0x0000000000000000,0x00000828000000000,0x0000000000000000,0x0000000017e000000},
+ { 0x000000000000cf50,0x0035e0457393de6b5,0x000000350d85c765,0x0004cd85a09aa4bdf,0x0000000000000000,0x0035f000000000000,0x0000000000000000,0x0004ce00000000000},
+ { 0x0000000000000001,0x0000000555a41ceac,0x0000000000003806,0x00000000000029bb7,0x0000000000000000,0x00000005560000000,0x0000000000003800,0x00000000000029c00},
+ { 0x0000000000000000,0x000ec78f6475db4e5,0x000000002190cf87,0x0000000018da96da1,0x0000000000000000,0x000ec800000000000,0x0000000021800000,0x0000000018e000000},
+ { 0x0000000000000000,0x000000000090815a1,0x0000000000000066,0x0000000000001619f,0x0000000000000000,0x000000000090c0000,0x0000000000000000,0x00000000000016200},
+ { 0x0000000000000149,0x00192f46db0f96b66,0x000000000045135d,0x0000119d8e374aa33,0x0000000000000000,0x00193000000000000,0x0000000000000000,0x000011a0000000000},
+ { 0x0000000000001a6b,0x0007a1f8666320aa7,0x003e0e0e8a742748,0x0007733b0fe45780b,0x0000000000000000,0x0007a200000000000,0x003e000000000000,0x00077400000000000},
+ { 0x0000000000000003,0x00157beacddb541dd,0x0000000038ff2881,0x0000015141076a66e,0x0000000000000000,0x00158000000000000,0x0000000000000000,0x00000151800000000},
+ { 0x0000000000000003,0x00017894fc0daf676,0x0000000000000113,0x0000007499edc1790,0x0000000000000000,0x00017900000000000,0x0000000000000000,0x00000074a00000000},
+ { 0x0000000000000ef6,0x00000000000fb2542,0x0000000000079224,0x000000000001724a8,0x0000000000000000,0x00000000000fb4000,0x0000000000079000,0x00000000000172800},
+ { 0x0000000000000023,0x000000000bf0914f4,0x0000000000005dab,0x0000000000000e217,0x0000000000000000,0x000000000bf400000,0x0000000000005d80,0x0000000000000e240},
+ { 0x00000000000005f2,0x00d60719f844cc2e1,0x00000000000056de,0x00000000005adf7b5,0x0000000000000000,0x00d64000000000000,0x0000000000000000,0x00000000005ae0000},
+ { 0x0000000000076732,0x000d171495f745d50,0x000002be6ed69f5c,0x0002938ebf1486318,0x0000000000000000,0x000d1800000000000,0x0000000000000000,0x00029400000000000},
+ { 0x0000000000000006,0x00000003991e0fd81,0x0000000004536037,0x000000002f576dadd,0x0000000000000000,0x000000039a0000000,0x0000000004000000,0x000000002f6000000},
+ { 0x0000000000000000,0x0000000000023bf94,0x0000000000004c10,0x000000000000701be,0x0000000000000000,0x0000000000023c000,0x0000000000004c00,0x00000000000070200},
+ { 0x0000000000000000,0x0000000035b34dab7,0x000000000000001c,0x00000000000b8aa38,0x0000000000000000,0x0000000035c000000,0x0000000000000000,0x00000000000b8c000},
+ { 0x0000000000000042,0x000000000000707e0,0x0000000000000e2e,0x00000000000002d61,0x0000000000000000,0x00000000000070800,0x0000000000000e28,0x00000000000002d68},
+ { 0x0000000000000d2b,0x002e7916bbca82a51,0x0000000028c50c8c,0x0000002bbac8bfdc4,0x0000000000000000,0x002e8000000000000,0x0000000000000000,0x0000002bc00000000},
+ { 0x0000000000000001,0x00f6edf900e19bd33,0x000000002eb8486c,0x000002bc5198b53ed,0x0000000000000000,0x00f70000000000000,0x0000000000000000,0x000002bd000000000},
+ { 0x0000000000000003,0x00015e7ada3867b80,0x0000000000001863,0x000000002c4250109,0x0000000000000000,0x00015e80000000000,0x0000000000000000,0x000000002c5000000},
+ { 0x000000000006169e,0x000002a3bfa6641f4,0x000000087eafb0a3,0x0000015a1f23c3ed3,0x0000000000000000,0x000002a4000000000,0x0000000800000000,0x0000015a800000000},
+ { 0x000000000000001e,0x006e12bc92c5f3aed,0x00000000003ae55d,0x000187a07705c65f0,0x0000000000000000,0x006e2000000000000,0x0000000000000000,0x00018800000000000},
+ { 0x000000001f8230ee,0x0022ed5dd78a5218e,0x00000000a0c4550e,0x0000000041f1db1fe,0x0000000000000000,0x0022f000000000000,0x00000000a0000000,0x00000000420000000},
+ { 0x000000000003854b,0x0001b8900f55bcf6a,0x000000010837c2a4,0x0000e75fbf34c17a4,0x0000000000000000,0x0001b900000000000,0x0000000000000000,0x0000e780000000000},
+ { 0x0000003c3d3f1ad7,0x002f3180d3c30428e,0x00005fb096c456ad,0x00001b287282c2fc9,0x0000000000000000,0x002f4000000000000,0x00005f8000000000,0x00001b30000000000},
+ { 0x0000000000000001,0x0000ff8e657bf1b8b,0x000000000001bb7b,0x0000000016b39bd04,0x0000000000000000,0x0000ffc0000000000,0x0000000000000000,0x0000000016b800000},
+ { 0x000000001fbc3f96,0x000662469689e4107,0x0000000d3946a0d5,0x0000b6640a959bca2,0x0000000000000000,0x00066400000000000,0x0000000000000000,0x0000b680000000000},
+ { 0x000000e118d888ca,0x0007af265f5aea7fc,0x00001dee56285a6c,0x0005f2b5265c98012,0x0000000000000000,0x0007b000000000000,0x0000000000000000,0x0005f400000000000},
+ { 0x0000000006804862,0x01d36e178e59f190f,0x000001ee3a06e5da,0x0000037f85228e4a8,0x0000000000000000,0x01d38000000000000,0x000001e000000000,0x00000380000000000},
+ { 0x00000000001e633b,0x0000e9d9682ed2122,0x00000000335ee3ab,0x0000008f749ae5e61,0x0000000000000000,0x0000ea00000000000,0x0000000000000000,0x0000008f800000000},
+ { 0x0000000000000035,0x005ab56885248394a,0x00000000000000b0,0x001393d2839289208,0x0000000000000000,0x005ac000000000000,0x0000000000000000,0x00139800000000000},
+ { 0x00000000000000ef,0x00000002d56ec9a43,0x0000000000004ba9,0x000000000016f02e1,0x0000000000000000,0x00000002d60000000,0x0000000000000000,0x000000000016f8000},
+ { 0x000000000000002b,0x000000000007ff4bb,0x0000000000000ca7,0x0000000000003f4fb,0x0000000000000000,0x00000000000800000,0x0000000000000c00,0x0000000000003f500},
+ { 0x0000000000000000,0x01b291fb49a162a55,0x0000000000413d4b,0x000006e1b30e7ba6b,0x0000000000000000,0x01b30000000000000,0x0000000000000000,0x000006e2000000000},
+ { 0x0000000000000008,0x000000001ad8b31b1,0x0000000000000144,0x00000000000038600,0x0000000000000000,0x000000001ae000000,0x0000000000000100,0x00000000000038600},
+ { 0x000000000000f136,0x003f1a5cf82dd165d,0x000000000003a1d2,0x00107c8810d9a994a,0x0000000000000000,0x003f2000000000000,0x0000000000000000,0x00108000000000000},
+ { 0x00000000001da998,0x03844c3176acf4dc9,0x0000088e01460803,0x00019b7afd94a5c1f,0x0000000000000000,0x03850000000000000,0x0000080000000000,0x00019b80000000000},
+ { 0x0000000000000353,0x0001b6d27c419b834,0x000000000df4d34e,0x0000000001006d94a,0x0000000000000000,0x0001b700000000000,0x000000000df40000,0x00000000010070000},
+ { 0x000000000017445f,0x0002d3597e2366706,0x000000001988149a,0x00000078002cef316,0x0000000000000000,0x0002d400000000000,0x0000000000000000,0x00000078200000000},
+ { 0x0000000000000570,0x000000000e759b013,0x0000000000007446,0x000000000005eef74,0x0000000000000000,0x000000000e7800000,0x0000000000006000,0x000000000005f0000},
+ { 0x0000000000000006,0x0031fa3772cb6a1f2,0x00000000004c2e30,0x0000000058e2213ab,0x0000000000000000,0x00320000000000000,0x0000000000000000,0x00000000590000000},
+ { 0x0000000000146d32,0x0000240f92f88b607,0x000000009e86343b,0x00000000496fbb574,0x0000000000000000,0x00002410000000000,0x000000009e000000,0x00000000497000000},
+ { 0x0000000000e152c4,0x00007c2f9bcc3e8d6,0x0000000854360cfc,0x00000019aca2bb84f,0x0000000000000000,0x00007c40000000000,0x0000000800000000,0x00000019b00000000},
+ { 0x0000000000000001,0x00000000019fb950c,0x0000000000000007,0x00000000000000175,0x0000000000000000,0x0000000001a000000,0x0000000000000007,0x00000000000000175},
+ { 0x0000000000001131,0x00002a612104f10f7,0x0000000000e5ac62,0x00000000009b95e06,0x0000000000000000,0x00002a70000000000,0x0000000000e40000,0x00000000009bc0000},
+ { 0x0000000000000bff,0x00000000368f100d7,0x0000000013673a54,0x00000000020b02f58,0x0000000000000000,0x00000000369000000,0x0000000013640000,0x00000000020b40000},
+ { 0x0000000000000009,0x0000d62075c54fb07,0x00000000000057f8,0x0000005f5a8989619,0x0000000000000000,0x0000d640000000000,0x0000000000000000,0x0000005f600000000},
+ { 0x0000000000000f98,0x019e39a36e82bf236,0x00000000000052a4,0x00006cc1064cd1afd,0x0000000000000000,0x019e8000000000000,0x0000000000000000,0x00006ce0000000000},
+ { 0x000000000000016c,0x001acbd6a88f6a52e,0x0000000069910c1e,0x00000001731de3bd3,0x0000000000000000,0x001ad000000000000,0x0000000068000000,0x00000001738000000},
+ { 0x00000000000000f6,0x031e963aad373df4a,0x0000000000087eb1,0x00000000cc10211be,0x0000000000000000,0x031f0000000000000,0x0000000000000000,0x00000000cc4000000},
+ { 0x0000000000015aad,0x00000000015cf3bc9,0x00000000007cb512,0x0000000000649e119,0x0000000000000000,0x00000000015d00000,0x00000000007c0000,0x000000000064a0000},
+ { 0x0000000000000021,0x01607bc3fb0497c31,0x0000000000095936,0x00e3bf23010a50507,0x0000000000000000,0x01608000000000000,0x0000000000000000,0x00e3c000000000000},
+ { 0x0000000000000508,0x0167c5ac953e2c778,0x0000000000f1ba8b,0x00000000025254476,0x0000000000000000,0x01680000000000000,0x0000000000f00000,0x00000000025300000},
+ { 0x00000000000f9a0f,0x03ffac152fbb26a33,0x00109a915716d4b9,0x000334597136171cb,0x0000000000000000,0x04000000000000000,0x0010900000000000,0x00033500000000000},
+ { 0x0000000000000172,0x0007bd1c6b190aa5b,0x0000000007266be7,0x000000006a318f148,0x0000000000000000,0x0007be00000000000,0x0000000006000000,0x000000006a4000000},
+ { 0x0000000000295347,0x00000d5481d31aad4,0x0000000093fb78ae,0x000000156f692ad3f,0x0000000000000000,0x00000d58000000000,0x0000000080000000,0x00000015700000000},
+ { 0x0000000002d2ee88,0x0fa98743a4c753c06,0x000009d4a47da5a3,0x01811ed6ac55ccd0c,0x0000000000000000,0x0fac0000000000000,0x0000000000000000,0x01818000000000000},
+ { 0x00000000000000d7,0x0acfd209097eb6ce4,0x00000000000877e0,0x000000000000ec572,0x0000000000000000,0x0ad00000000000000,0x0000000000087600,0x000000000000ec600},
+ { 0x000000000001d047,0x0034e459782748a5c,0x000000000176018f,0x0002a2a4a8508327f,0x0000000000000000,0x0034f000000000000,0x0000000000000000,0x0002a300000000000},
+ { 0x000000000000001b,0x000000000f167b3b3,0x00000000029881a2,0x0000000000b90ecd8,0x0000000000000000,0x000000000f1800000,0x0000000002980000,0x0000000000b940000},
+ { 0x0000000064de060c,0x0120a84a3b37d271b,0x000ab6ee6ba3bbe3,0x000900905925a35ac,0x0000000000000000,0x01210000000000000,0x000a800000000000,0x00090400000000000},
+ { 0x000000000000720b,0x000000718dc3267e8,0x000004acfcd1b79e,0x0000005fcbdea74af,0x0000000000000000,0x00000071a00000000,0x000004ac80000000,0x0000005fd00000000},
+ { 0x0000000000000011,0x006e8e06f228c366f,0x0000000000000035,0x00000000000000c45,0x0000000000000000,0x006ea000000000000,0x0000000000000035,0x00000000000000c45},
+ { 0x000000036db92c0c,0x01c3fc7863eab9ef5,0x000002ccfb986a05,0x0000337647794d32d,0x0000000000000000,0x01c40000000000000,0x0000020000000000,0x00003380000000000},
+ { 0x0000000000000002,0x00000f2c628ffa432,0x00000000003ee8a9,0x00000000002576ca4,0x0000000000000000,0x00000f30000000000,0x00000000003e0000,0x00000000002580000},
+ { 0x0000000000000032,0x00000008e513295c3,0x0000000004bb6cb1,0x0000000167aed7c1d,0x0000000000000000,0x00000008e80000000,0x0000000000000000,0x00000001680000000},
+ { 0x0000000001efc1c7,0x000004251d2da9f02,0x000000001cb67ab3,0x00000029348d8f612,0x0000000000000000,0x00000426000000000,0x0000000000000000,0x00000029400000000},
+ { 0x0000000000000af9,0x00090f008be8903f2,0x000000000001652e,0x000000000e52ca93d,0x0000000000000000,0x00091000000000000,0x0000000000000000,0x000000000e5400000},
+ { 0x0000000000000002,0x0000005bf3c7070f2,0x0000000000001f99,0x000000009a5ca365e,0x0000000000000000,0x0000005c000000000,0x0000000000000000,0x000000009a8000000},
+ { 0x000000000000bbe8,0x0013837dd24f1568e,0x0000000000c67890,0x000e05daa08b42b60,0x0000000000000000,0x00138800000000000,0x0000000000000000,0x000e0800000000000},
+ { 0x000000000000000a,0x02ed0ec815e3a661b,0x0000000000000016,0x00003fad68e7e338f,0x0000000000000000,0x02ee0000000000000,0x0000000000000000,0x00003fb0000000000},
+ { 0x0000000000000fa8,0x0001a35e22a51bcb2,0x0000000000235054,0x0000002a6f8615dfa,0x0000000000000000,0x0001a380000000000,0x0000000000000000,0x0000002a700000000},
+ { 0x000000000000a94b,0x000000e5b63b8d82c,0x00000000000a370f,0x000000000c978e900,0x0000000000000000,0x000000e5c00000000,0x0000000000000000,0x000000000c9800000},
+ { 0x00000000000000a3,0x04913ed632c7c4e3e,0x00000000000e2749,0x00000001b647e687e,0x0000000000000000,0x04920000000000000,0x0000000000000000,0x00000001b68000000},
+ { 0x00000000000000d7,0x0000007a6209b0bb1,0x0000001372c66cc7,0x00000055a488a6133,0x0000000000000000,0x0000007a800000000,0x0000001200000000,0x00000055c00000000},
+ { 0x00000000000006e4,0x0049c27cbc060de10,0x001f7f6482eb3097,0x0012228d29e495750,0x0000000000000000,0x0049e000000000000,0x001f000000000000,0x00122800000000000},
+ { 0x00000000000000ac,0x00001819bc2ee8abb,0x00000000051ca30a,0x000000036d20fe1f3,0x0000000000000000,0x00001820000000000,0x0000000000000000,0x000000036e0000000},
+ { 0x000000000000004f,0x00000000776268347,0x0000000000001d5e,0x0000000006cc5b105,0x0000000000000000,0x00000000778000000,0x0000000000000000,0x0000000006ce00000},
+ { 0x0000000000000002,0x000190611e7f34226,0x000000000000008e,0x000000000000002f1,0x0000000000000000,0x00019080000000000,0x000000000000008e,0x000000000000002f1},
+ { 0x00000000042778a6,0x004d34374c7062833,0x000036390fcad01d,0x0003ccd0594ad539e,0x0000000000000000,0x004d4000000000000,0x0000300000000000,0x0003cd00000000000},
+ { 0x0000000000000072,0x01eb14c9d44610b2c,0x000000013fb398a1,0x000003c6a40c249d1,0x0000000000000000,0x01eb8000000000000,0x0000000000000000,0x000003c7000000000},
+ { 0x000000000000001c,0x000000cbaea3b5535,0x000000000000002d,0x00000000fa2ea6c79,0x0000000000000000,0x000000cbc00000000,0x0000000000000000,0x00000000fa4000000},
+ { 0x0000000000002d15,0x0000f80a62600676e,0x0000000711b41860,0x000024f5d31811706,0x0000000000000000,0x0000f840000000000,0x0000000000000000,0x00002500000000000},
+ { 0x0000000000000077,0x01c3aa08a68bdd81b,0x000000000006aeeb,0x0000033eca874d2e9,0x0000000000000000,0x01c40000000000000,0x0000000000000000,0x0000033f000000000},
+ { 0x0000000000000072,0x05591c677316bd24a,0x000000000000007f,0x000000000003e381a,0x0000000000000000,0x055a0000000000000,0x0000000000000000,0x000000000003e4000},
+ { 0x00000000000e4ede,0x012dfd97b398426a3,0x0000000000251df3,0x000001d06576c3da8,0x0000000000000000,0x012e0000000000000,0x0000000000000000,0x000001d0800000000},
+ { 0x0000000000000123,0x00011054d37b42220,0x0000000000000852,0x0000000001e7dbb30,0x0000000000000000,0x00011080000000000,0x0000000000000000,0x0000000001e800000},
+ { 0x0000000000009c13,0x034c95a69fecab90c,0x00000000000dc4cf,0x00000000002b7e69a,0x0000000000000000,0x034d0000000000000,0x00000000000d0000,0x00000000002b80000},
+ { 0x0000000002f786f3,0x00000317f43e7d97a,0x00000020dcba173f,0x00000036548659242,0x0000000000000000,0x00000318000000000,0x0000002000000000,0x00000036600000000},
+ { 0x0000000000000290,0x0000009bde86ee05c,0x000000000023bb66,0x000000000003ffda2,0x0000000000000000,0x0000009c000000000,0x000000000023b800,0x00000000000400000},
+ { 0x000000028a7c7873,0x0071458d0cadbcc1b,0x000000219361eae9,0x00003551e3995b791,0x0000000000000000,0x00716000000000000,0x0000000000000000,0x00003560000000000},
+ { 0x0000000000000032,0x000000002d03e8ba1,0x0000000000052451,0x000000000a46298c5,0x0000000000000000,0x000000002d1000000,0x0000000000000000,0x000000000a4800000},
+ { 0x000000000160fb88,0x0d959c4bce71ed2c2,0x0000000012ec7426,0x003ffad5ca30731cb,0x0000000000000000,0x0d980000000000000,0x0000000000000000,0x00400000000000000},
+ { 0x0000000000000008,0x00000000024470d49,0x0000000000003334,0x000000000003832e4,0x0000000000000000,0x00000000024500000,0x0000000000003000,0x00000000000384000},
+ { 0x00000000026a1fab,0x00008506f5f49d612,0x000001ed8308662e,0x00000124e09010fd5,0x0000000000000000,0x00008540000000000,0x000001e800000000,0x00000125000000000},
+ { 0x00000000105ac584,0x019bd3bfd63b8101d,0x03a090ec8d2e8255,0x008f8b77ef3f81195,0x0000000000000000,0x019c0000000000000,0x03a0000000000000,0x008fa000000000000},
+ { 0x00000000000a7299,0x000280ce4a673774d,0x00000000000dbd40,0x000004c28c9f04a8a,0x0000000000000000,0x00028100000000000,0x0000000000000000,0x000004c4000000000},
+ { 0x000000093491845c,0x000985915e2566d2c,0x00002535fd6647e7,0x0003962d8703ac08c,0x0000000000000000,0x00098800000000000,0x0000200000000000,0x00039700000000000},
+ { 0x0000000000000007,0x000003cf29d2ff1f6,0x0000000000006174,0x0000001da910fad7a,0x0000000000000000,0x000003d0000000000,0x0000000000000000,0x0000001db00000000},
+ { 0x000000000000908d,0x03bd87f75e3a686fb,0x00000c39dfbcd6cd,0x00062478768b90a97,0x0000000000000000,0x03be0000000000000,0x0000000000000000,0x00062600000000000},
+ { 0x000000000001529c,0x00000d24047faad25,0x00000003a97dfcde,0x000001ca8961dc374,0x0000000000000000,0x00000d28000000000,0x0000000000000000,0x000001cb000000000},
+ { 0x0000000000000017,0x0000000001dc32713,0x000000000001b7dc,0x000000000015b4f65,0x0000000000000000,0x0000000001dc80000,0x0000000000018000,0x000000000015b8000},
+ { 0x0000000000000000,0x016f00590b51fa8b1,0x0000000000002309,0x00000685a2056ffb2,0x0000000000000000,0x016f8000000000000,0x0000000000000000,0x00000686000000000},
+ { 0x0000000000000000,0x000001b8f8faa69a2,0x000000000001c9b6,0x00000026a7c2ee2af,0x0000000000000000,0x000001b9000000000,0x0000000000000000,0x00000026b00000000},
+ { 0x0000000000000010,0x01704c861f5e3df3b,0x000000000000211c,0x00000000000075288,0x0000000000000000,0x01708000000000000,0x0000000000002000,0x00000000000075400},
+ { 0x00000000000022c9,0x00000244bbde5ece0,0x0000000000390722,0x00000012befe136c7,0x0000000000000000,0x00000245000000000,0x0000000000000000,0x00000012c00000000},
+ { 0x000000000000000c,0x097c5c0c36c04e9e2,0x000000000377e623,0x00000000134a4cc94,0x0000000000000000,0x09800000000000000,0x0000000003000000,0x00000000135000000},
+ { 0x0000000000000009,0x000000000cf6b4514,0x0000000000002019,0x0000000000001ce5f,0x0000000000000000,0x000000000cf800000,0x0000000000002000,0x0000000000001ce80},
+ { 0x000000000000001a,0x0000000615eae39d0,0x000000000000002d,0x0000000000005dbbc,0x0000000000000000,0x00000006160000000,0x0000000000000000,0x0000000000005dc00},
+ { 0x00000000001b10b4,0x0000e4283b065fef8,0x0000000000559936,0x00000006388c7dc72,0x0000000000000000,0x0000e440000000000,0x0000000000000000,0x000000063a0000000},
+ { 0x00000003cc54c605,0x09542865c62a30b2e,0x00000009a25564f5,0x00000580d7c576946,0x0000000000000000,0x09580000000000000,0x0000000000000000,0x00000582000000000},
+ { 0x0000000000000004,0x000e100ebbef0dfcf,0x0000000000000078,0x00000000000031ae6,0x0000000000000000,0x000e1400000000000,0x0000000000000000,0x00000000000031b00},
+ { 0x0000000000000007,0x005e4d0b2d7e62eed,0x0000000000d56708,0x00000002b60b76582,0x0000000000000000,0x005e6000000000000,0x0000000000000000,0x00000002b70000000},
+ { 0x0000000000137fd5,0x0000001e35a83dba6,0x000000002059ccee,0x0000000006a88f32f,0x0000000000000000,0x0000001e380000000,0x0000000020400000,0x0000000006aa00000},
+ { 0x0000000000000035,0x0000000e1ec02f6ab,0x0000000000008170,0x0000000002c36909d,0x0000000000000000,0x0000000e200000000,0x0000000000000000,0x0000000002c400000},
+ { 0x00000000000000a7,0x00001c463ea71f390,0x0000000000041527,0x00000000002b54809,0x0000000000000000,0x00001c48000000000,0x0000000000040000,0x00000000002b60000},
+ { 0x00000000000147fb,0x0000001944415fd47,0x00000000e56e8aad,0x000000001ecc3ba5b,0x0000000000000000,0x00000019480000000,0x00000000e5000000,0x000000001ed000000},
+ { 0x00000000000005bd,0x03d8a17c064c82d82,0x0001c143d632c1ad,0x00022a4f84d19cf95,0x0000000000000000,0x03d90000000000000,0x0001c00000000000,0x00022b00000000000},
+ { 0x0000000000003e05,0x000094bfcda138754,0x000000000000b9c7,0x00000000003a7293b,0x0000000000000000,0x000094c0000000000,0x0000000000000000,0x00000000003a80000},
+ { 0x0000000000000039,0x000001f73800cc97c,0x00000000000012ac,0x0000000000b6fafd4,0x0000000000000000,0x000001f7800000000,0x0000000000000000,0x0000000000b700000},
+ { 0x00000001351e9334,0x0000e8ecb12fd5a3d,0x0000000dc370a86b,0x00000bd94bb2cec35,0x0000000000000000,0x0000e900000000000,0x0000000000000000,0x00000bdc000000000},
+ { 0x000000000000000a,0x00000341ee3f930cc,0x0000000000d51b67,0x0000000012f79335c,0x0000000000000000,0x00000342000000000,0x0000000000800000,0x0000000012f800000},
+ { 0x000000000000000b,0x00018f2e98d0b4c7e,0x0000000000000112,0x00000000cebc2346a,0x0000000000000000,0x00018f80000000000,0x0000000000000000,0x00000000cec000000},
+ { 0x0000000000000170,0x000000011ed10e2d7,0x0000000002320f17,0x00000000b7143931c,0x0000000000000000,0x000000011f0000000,0x0000000000000000,0x00000000b74000000},
+ { 0x0000000000000148,0x0127666e1c950d146,0x00000013f992e559,0x000422c31946ed0f0,0x0000000000000000,0x01278000000000000,0x0000000000000000,0x00042400000000000},
+ { 0x00000001060d92b6,0x00ec67724b1dc0d10,0x00012ed8c5be78fa,0x007990f5b48bf0259,0x0000000000000000,0x00ec8000000000000,0x0000000000000000,0x0079a000000000000},
+ { 0x00000013b58e3438,0x0359ae6a07509a916,0x0000315682195045,0x00dc77378b8f3e534,0x0000000000000000,0x035a0000000000000,0x0000000000000000,0x00dc8000000000000},
+ { 0x0000000000000611,0x0000000dd04a80d05,0x0000000044925146,0x00000006934351bb6,0x0000000000000000,0x0000000dd40000000,0x0000000040000000,0x00000006940000000},
+ { 0x00000000000000ce,0x039e831c0d9a52b67,0x000000864f8b4ef7,0x0000174a426dc0d2e,0x0000000000000000,0x039f0000000000000,0x0000008000000000,0x00001750000000000},
+ { 0x00000001379c8c6f,0x0087bd03e4d12ec17,0x00000f0298bbced7,0x0000b9f2175e848d3,0x0000000000000000,0x0087c000000000000,0x00000c0000000000,0x0000ba00000000000},
+ { 0x0000000000000003,0x0000ba82f33b77c7a,0x0000000000000013,0x00000000007a5e63d,0x0000000000000000,0x0000bac0000000000,0x0000000000000000,0x00000000007a60000},
+ { 0x0000000000000444,0x00ba850f01587e323,0x0000000000041ad2,0x00000000000245226,0x0000000000000000,0x00bac000000000000,0x0000000000041000,0x00000000000246000},
+ { 0x0000000000000199,0x051eebd0142ae731d,0x0000000000000bf5,0x00000000002cf54ed,0x0000000000000000,0x05200000000000000,0x0000000000000000,0x00000000002d00000},
+ { 0x000000000002b4eb,0x00005db9093b0b45e,0x0000001d7e23e38e,0x0000004b7a074f477,0x0000000000000000,0x00005dc0000000000,0x0000001c00000000,0x0000004b800000000},
+ { 0x0000000000000003,0x0017dc79633daa5f0,0x0000000728c32948,0x000001da3a9c2ed58,0x0000000000000000,0x0017e000000000000,0x0000000000000000,0x000001da800000000},
+ { 0x0000000000000132,0x000bb306ef1879aee,0x00000000000611d5,0x00000000001b4cc06,0x0000000000000000,0x000bb400000000000,0x0000000000060000,0x00000000001b50000},
+ { 0x0000000000b3ebb1,0x00000781443034a32,0x000000ee612be217,0x000001612301d37dd,0x0000000000000000,0x00000782000000000,0x000000e800000000,0x00000161800000000},
+ { 0x0000000000000000,0x00000e0e9b3bcdee8,0x0000000000000053,0x00000000000000239,0x0000000000000000,0x00000e10000000000,0x0000000000000053,0x00000000000000239},
+ { 0x00000000003dc82e,0x000000002cf86494c,0x000000000f20cc62,0x0000000001cfe6a94,0x0000000000000000,0x000000002d0000000,0x000000000f200000,0x0000000001d000000},
+ { 0x0000000000002aeb,0x045e8ab97fabf7dfc,0x00001db63ae1617b,0x01e57e41de4335611,0x0000000000000000,0x04600000000000000,0x0000000000000000,0x01e58000000000000},
+ { 0x0000000000000187,0x001adfdf4abbfff79,0x0000000000e9494e,0x00002da7c5eb3a566,0x0000000000000000,0x001ae000000000000,0x0000000000000000,0x00002db0000000000},
+ { 0x000000001292d6a1,0x0ea8e0322ae497d6f,0x00043403fc6e185a,0x0023eeb8b01203336,0x0000000000000000,0x0eac0000000000000,0x0004000000000000,0x0023f000000000000},
+ { 0x000000000000001f,0x00588877e53f1a094,0x0000000a7476aec4,0x0030e834e9054bb70,0x0000000000000000,0x0058a000000000000,0x0000000000000000,0x0030f000000000000},
+ { 0x0000000000000009,0x00004c3af8dd4aff1,0x00000000000f9786,0x0000002135946733d,0x0000000000000000,0x00004c40000000000,0x0000000000000000,0x00000021400000000},
+ { 0x0000000000051842,0x000276eb425d6c13b,0x0000000188802b63,0x00000001084222c1b,0x0000000000000000,0x00027700000000000,0x0000000188000000,0x00000001088000000},
+ { 0x000000000000015e,0x000000356fbcebe7b,0x00000000000c9824,0x0000000049a7fdacb,0x0000000000000000,0x00000035700000000,0x0000000000000000,0x0000000049c000000},
+ { 0x0000000000000005,0x00000beacf88b3463,0x000000000b155d7c,0x00000000157740f1e,0x0000000000000000,0x00000bec000000000,0x000000000b000000,0x00000000157800000},
+ { 0x00000000000000fe,0x0024e4a94b7c5f56d,0x0045c3cb93a2e801,0x001bfc76ec74e8f20,0x0000000000000000,0x0024f000000000000,0x0045800000000000,0x001c0000000000000},
+ { 0x0000000000011bf5,0x000000328659e98aa,0x00000000001d1283,0x000000000deb79d8f,0x0000000000000000,0x00000032900000000,0x0000000000000000,0x000000000dec00000},
+ { 0x00000000000110fd,0x0030d9afae5a994dc,0x000000001249d500,0x0000000010f012a32,0x0000000000000000,0x0030e000000000000,0x0000000012400000,0x0000000010f400000},
+ { 0x0000000000000009,0x001a2dd6a0f31c066,0x000000000000001c,0x000003428d283c244,0x0000000000000000,0x001a3000000000000,0x0000000000000000,0x00000343000000000},
+ { 0x0000000000000005,0x0552d4cf94e902428,0x0000000018ee96a9,0x014927cbc4e175db2,0x0000000000000000,0x05540000000000000,0x0000000000000000,0x01498000000000000},
+ { 0x000000000000053c,0x0000003cab5d83165,0x0000000000005939,0x000000000310aa610,0x0000000000000000,0x0000003cb00000000,0x0000000000000000,0x00000000031100000},
+ { 0x0000000000056f16,0x0001d60fc4f871edb,0x0000000000898996,0x000000005dd039cb1,0x0000000000000000,0x0001d680000000000,0x0000000000000000,0x000000005de000000},
+ { 0x0000000000000051,0x0000017bc28940b31,0x00000000000001e5,0x00000000038f2da6f,0x0000000000000000,0x0000017c000000000,0x0000000000000000,0x00000000039000000},
+ { 0x0000000000000003,0x003843253afd7463e,0x000000000006dc7d,0x000000018c7129520,0x0000000000000000,0x00385000000000000,0x0000000000000000,0x000000018c8000000},
+ { 0x000000000000141e,0x00095191edadb2671,0x00002b31f79faff8,0x000003f81653405cc,0x0000000000000000,0x00095400000000000,0x00002b3000000000,0x000003f8800000000},
+ { 0x00000000000004eb,0x028dec70cb595ba3f,0x0000001ebe179daa,0x0002084e811bcdd56,0x0000000000000000,0x028e0000000000000,0x0000000000000000,0x00020900000000000},
+ { 0x000000000001b7ed,0x0025662ab5234029f,0x000000006f85ed85,0x000000001578e7403,0x0000000000000000,0x00257000000000000,0x000000006f800000,0x00000000157c00000},
+ { 0x000000000000fc7a,0x001f24f931165e012,0x000009efaa2b66a9,0x00001d2fb2600793a,0x0000000000000000,0x001f2800000000000,0x0000098000000000,0x00001d30000000000},
+ { 0x0000000000000003,0x00007dee5c86bde74,0x000043c1e6baf164,0x0000144456a5b1aec,0x0000000000000000,0x00007e00000000000,0x0000438000000000,0x00001448000000000},
+ { 0x0000000342ee637f,0x0000f36bd1cf315d3,0x000000064bfb9897,0x00001f7a34a16c8f6,0x0000000000000000,0x0000f380000000000,0x0000000000000000,0x00001f80000000000},
+ { 0x000000180a03610e,0x00067054c3d2d5bcd,0x000001d4c7c81092,0x0000277c6852ef016,0x0000000000000000,0x00067200000000000,0x0000010000000000,0x00002780000000000},
+ { 0x00000000000bcd31,0x000000420ec9ce674,0x00000000508fbb1b,0x000000003e6a296b8,0x0000000000000000,0x00000042200000000,0x0000000050000000,0x000000003e7000000},
+ { 0x00000000032578ba,0x00159a15a7d163bee,0x000000dd1d75550b,0x00001a22a4835cf0a,0x0000000000000000,0x0015a000000000000,0x0000008000000000,0x00001a28000000000},
+ { 0x0000000000ea99e5,0x03e8d86b376c38ed4,0x00000000915bdf72,0x00000001c012fd8a6,0x0000000000000000,0x03e90000000000000,0x0000000090000000,0x00000001c08000000},
+ { 0x000000000003b56a,0x00000687eb8d46d87,0x000000000d2fb07a,0x000000009bf26c6f6,0x0000000000000000,0x00000688000000000,0x000000000c000000,0x000000009c0000000},
+ { 0x00000000002154ef,0x0000035c0b3ac39a0,0x0000000000e9d338,0x000000033aa0947e3,0x0000000000000000,0x0000035d000000000,0x0000000000000000,0x000000033b0000000},
+ { 0x000000000000046d,0x000000001864512c8,0x0000000000001909,0x00000000005d23ee2,0x0000000000000000,0x00000000186800000,0x0000000000000000,0x00000000005d40000},
+ { 0x0000000000000002,0x0001288fb1eb73866,0x00000000000002ff,0x0000000000018c916,0x0000000000000000,0x00012900000000000,0x0000000000000000,0x0000000000018d000},
+ { 0x0000000000000002,0x0039a593c932b1fb5,0x0000000000000d42,0x000007fd704145a23,0x0000000000000000,0x0039b000000000000,0x0000000000000000,0x000007fe000000000},
+ { 0x000000000001e2c3,0x000307021818fb5ab,0x00000000001dd7eb,0x0000008d6c62cfe74,0x0000000000000000,0x00030800000000000,0x0000000000000000,0x0000008d800000000},
+ { 0x0000000000000007,0x0000c3b7c7e206a97,0x0000000000000007,0x000000000014613d0,0x0000000000000000,0x0000c3c0000000000,0x0000000000000000,0x00000000001468000},
+ { 0x000000000000066c,0x00000003dc0394a35,0x0000000000001ee7,0x000000000000fdc8b,0x0000000000000000,0x00000003dd0000000,0x0000000000001c00,0x000000000000fe000},
+ { 0x0000000000000133,0x001041975425bc7d6,0x0000000000002423,0x0000000000005362d,0x0000000000000000,0x00104800000000000,0x0000000000002400,0x00000000000053800},
+ { 0x0000000000b3f01c,0x000007123ccd6bc17,0x0000000001901ee9,0x000000018574fc45d,0x0000000000000000,0x00000714000000000,0x0000000000000000,0x00000001858000000},
+ { 0x000000000000005b,0x01922b68f8335cf98,0x000000000159a36e,0x0000000000766f873,0x0000000000000000,0x01928000000000000,0x0000000001580000,0x00000000007680000},
+ { 0x000000000001addc,0x000019c6c2236456a,0x0000000000049e43,0x0000000002218ff72,0x0000000000000000,0x000019c8000000000,0x0000000000000000,0x00000000022200000},
+ { 0x0000000000000000,0x004fd36f3fc4df606,0x0000000000000933,0x000000000003010ec,0x0000000000000000,0x004fe000000000000,0x0000000000000000,0x00000000000302000},
+ { 0x0000000000000dc1,0x000000fc932f0d805,0x0000000000000eb8,0x00000000000001ddd,0x0000000000000000,0x000000fcc00000000,0x0000000000000eb8,0x00000000000001ddd},
+ { 0x0000000000000003,0x000000645f50588f0,0x00000018cf130ec0,0x00000023d50dbda6c,0x0000000000000000,0x00000064600000000,0x0000001800000000,0x00000023e00000000},
+ { 0x0000000000007d21,0x0000b56e6ef82a47a,0x000000000e17f728,0x0000000016b021035,0x0000000000000000,0x0000b580000000000,0x000000000e000000,0x0000000016b800000},
+ { 0x00000000000013f7,0x00027e98034293410,0x00000000fa7b3879,0x00000000343ac9a1e,0x0000000000000000,0x00027f00000000000,0x00000000fa000000,0x00000000344000000},
+ { 0x000000000001a489,0x00d6554463aacec15,0x000000000001f628,0x0000000001676176b,0x0000000000000000,0x00d68000000000000,0x0000000000000000,0x00000000016780000},
+ { 0x0000000000000153,0x0003f96b3c202bf97,0x0000003f9aaab823,0x00013b3a522a62109,0x0000000000000000,0x0003fa00000000000,0x0000000000000000,0x00013b80000000000},
+ { 0x000000000020a25c,0x00f0fdaf0020adf6c,0x00000186a3f359e0,0x0000005984b34fcca,0x0000000000000000,0x00f10000000000000,0x0000018600000000,0x00000059a00000000},
+ { 0x0000000000000008,0x00000021835acbe8f,0x000000000000000c,0x00000000aff52ef0a,0x0000000000000000,0x00000021900000000,0x0000000000000000,0x00000000b00000000},
+ { 0x00000000029f0021,0x0000a59cea75fc8f6,0x00000000032ba753,0x0000000004f31372d,0x0000000000000000,0x0000a5c0000000000,0x0000000003200000,0x0000000004f400000},
+ { 0x000000000000000d,0x0006f843013c04471,0x00000000207ee2ed,0x00000060e4bc8a320,0x0000000000000000,0x0006fa00000000000,0x0000000000000000,0x00000061000000000},
+ { 0x0000000000000001,0x000a7ce8f452737a1,0x0000000001d17707,0x000000000090e5757,0x0000000000000000,0x000a8000000000000,0x0000000001d00000,0x00000000009100000},
+ { 0x0000000002bc58df,0x000ab57ea3285614d,0x000000224d46c4f9,0x00000017816a3b973,0x0000000000000000,0x000ab800000000000,0x0000002200000000,0x00000017880000000},
+ { 0x000000000000002d,0x000095a10a0564fe7,0x0000000000000231,0x0000003941d953ffd,0x0000000000000000,0x000095c0000000000,0x0000000000000000,0x00000039500000000},
+ { 0x0000000000000000,0x00000000000000005,0x0000000000000001,0x00000000000000001,0x0000000000000000,0x00000000000000005,0x0000000000000001,0x00000000000000001},
+ { 0x0000000000003bc7,0x00000552d131d3616,0x0000000000084b93,0x0000000000d93c117,0x0000000000000000,0x00000554000000000,0x0000000000080000,0x0000000000d940000},
+ { 0x000000000000003c,0x000002494d17dfbfd,0x000000007be43298,0x000000030dc0b2c20,0x0000000000000000,0x0000024a000000000,0x0000000070000000,0x000000030e0000000},
+ { 0x0000000000000208,0x000000be5fe9ae296,0x00000000001478a6,0x000000184e4d95a7d,0x0000000000000000,0x000000be800000000,0x0000000000000000,0x00000018500000000},
+ { 0x0000000001482996,0x000000009e6f6881e,0x00000000215e3699,0x00000000024688042,0x0000000000000000,0x000000009e8000000,0x00000000215e0000,0x00000000024690000},
+ { 0x000000000001ba58,0x000030df8cb0840d4,0x000000621ea63e64,0x000000f708b33d77c,0x0000000000000000,0x000030e0000000000,0x0000006000000000,0x000000f7400000000},
+ { 0x0000000000000007,0x06c16665e347c40af,0x000000000108daf3,0x0000000069c4dc16c,0x0000000000000000,0x06c20000000000000,0x0000000000000000,0x0000000069e000000},
+ { 0x000000000000000f,0x000000013c1b23cda,0x0000000001156b0b,0x00000000009e4a4d3,0x0000000000000000,0x000000013c8000000,0x0000000001140000,0x00000000009e80000},
+ { 0x000000000000000a,0x00000ad033450352b,0x000000000002500c,0x000000000001837d0,0x0000000000000000,0x00000ad4000000000,0x0000000000025000,0x00000000000183800},
+ { 0x000000000000000c,0x00000000014471740,0x000000000001f25c,0x0000000000425c671,0x0000000000000000,0x00000000014480000,0x0000000000000000,0x00000000004260000},
+ { 0x0000000000000257,0x00014295773a58d9d,0x000003795aa763ea,0x00000b08c0a30cef5,0x0000000000000000,0x00014300000000000,0x0000034000000000,0x00000b0c000000000},
+ { 0x000000000001aa7a,0x00031737f50195cae,0x0000000000065674,0x000000000001352a8,0x0000000000000000,0x00031800000000000,0x0000000000065400,0x00000000000135400},
+ { 0x000000000000007e,0x02449c0bc1cf09237,0x0000000005c91d1d,0x000000e4f267b1efc,0x0000000000000000,0x02450000000000000,0x0000000000000000,0x000000e5000000000},
+ { 0x0000000000000001,0x000000fb2e26e1f5e,0x00000000000003dd,0x0000002e3733d7bdb,0x0000000000000000,0x000000fb400000000,0x0000000000000000,0x0000002e400000000},
+ { 0x0000000000000035,0x00d7ffd06383b69ff,0x0000002713d9e724,0x00000007177c0d9ad,0x0000000000000000,0x00d80000000000000,0x0000002700000000,0x00000007180000000},
+ { 0x0000000000000065,0x018991b3b79b8dca9,0x000000086ae59c74,0x00017a812fe85ecbb,0x0000000000000000,0x018a0000000000000,0x0000000000000000,0x00017b00000000000},
+ { 0x0000000000000171,0x079e555823cffdd12,0x000000001816f42a,0x0000e36a7d20eda6c,0x0000000000000000,0x07a00000000000000,0x0000000000000000,0x0000e380000000000},
+ { 0x0000000000037b7f,0x0013a76316d734e4c,0x000000000e2fd388,0x0000000b834996da4,0x0000000000000000,0x0013a800000000000,0x0000000000000000,0x0000000b840000000},
+ { 0x0000000000d55870,0x006164eaffc9b2053,0x0000000003cba87a,0x00000000008811eeb,0x0000000000000000,0x00618000000000000,0x0000000003ca0000,0x00000000008820000},
+ { 0x0000000000001bf5,0x00000ac265828e200,0x00000000006ed34d,0x00000000334f37986,0x0000000000000000,0x00000ac4000000000,0x0000000000000000,0x00000000335000000},
+ { 0x00000000000295cc,0x000000015c9c1d7bd,0x000000000166562a,0x000000000d81b7a4d,0x0000000000000000,0x000000015d0000000,0x0000000001400000,0x000000000d8400000},
+ { 0x0000000000000002,0x00348bc0b717b7dba,0x000000003ca7842d,0x001659e0f0796ec26,0x0000000000000000,0x00349000000000000,0x0000000000000000,0x00166000000000000},
+ { 0x0000000000000734,0x0000000003e60534a,0x00000000001aa2a1,0x00000000007320584,0x0000000000000000,0x0000000003e700000,0x00000000001a0000,0x00000000007340000},
+ { 0x0000000000055970,0x013571e94af5df3e6,0x000000000dc7aa82,0x000032f62cbeaa577,0x0000000000000000,0x01358000000000000,0x0000000000000000,0x00003300000000000},
+ { 0x0000000000000069,0x00042f925ba6507ae,0x00000000000120c2,0x00000000011e89e84,0x0000000000000000,0x00043000000000000,0x0000000000000000,0x00000000011f00000},
+ { 0x0000000000000ca2,0x001f7817e4990a241,0x00000000000069e0,0x0000058b2f3a141bc,0x0000000000000000,0x001f8000000000000,0x0000000000000000,0x0000058c000000000},
+ { 0x0000000000000004,0x00186ea0c2ffdd198,0x000000000000000e,0x00006a362dc36779c,0x0000000000000000,0x00187000000000000,0x0000000000000000,0x00006a40000000000},
+ { 0x0000000000000025,0x000220f2b8fdee811,0x00000000000115e7,0x00003ab6ca63abbfd,0x0000000000000000,0x00022100000000000,0x0000000000000000,0x00003ac0000000000},
+ { 0x000000000000002b,0x0000000003c733c24,0x0000000000d2c358,0x00000000003488a9f,0x0000000000000000,0x0000000003c800000,0x0000000000d20000,0x00000000003490000},
+ { 0x0000000000000614,0x0000c3ad073fbca39,0x0000000000001db3,0x00000160b061856d2,0x0000000000000000,0x0000c3c0000000000,0x0000000000000000,0x00000161000000000},
+ { 0x0000000000000002,0x00000004a6a73ac24,0x0000000000001076,0x0000000260d22e384,0x0000000000000000,0x00000004a80000000,0x0000000000000000,0x00000002610000000},
+ { 0x0000000000292092,0x001ec34e82554ad9c,0x0000000017e48216,0x000000d7b38ea506a,0x0000000000000000,0x001ec800000000000,0x0000000000000000,0x000000d7c00000000},
+ { 0x000000001fc9bfa2,0x00079b1da7ff7decd,0x000944152c1eb135,0x00041b866a3821c78,0x0000000000000000,0x00079c00000000000,0x0009400000000000,0x00041c00000000000},
+ { 0x00000036a6357aec,0x04bc8222cc9458ede,0x0000acf84f57510c,0x0000132814e32ed4e,0x0000000000000000,0x04be0000000000000,0x0000acc000000000,0x0000132c000000000},
+ { 0x00000000000000ba,0x0001251e1998b512f,0x0000000040b2f040,0x0000000005dc533c9,0x0000000000000000,0x00012580000000000,0x0000000040b00000,0x0000000005dc80000},
+ { 0x00000000000002a8,0x02d6ce3cc2f9cf235,0x0000000000009140,0x0000015309f3a58eb,0x0000000000000000,0x02d70000000000000,0x0000000000000000,0x00000153800000000},
+ { 0x0000000000000063,0x002454afe5744a83a,0x00000000000000c5,0x0000a02bc4caa1cd6,0x0000000000000000,0x00246000000000000,0x0000000000000000,0x0000a040000000000},
+ { 0x00000000002fc729,0x000072080be2ac741,0x00000000007341a6,0x000000001513360c9,0x0000000000000000,0x00007220000000000,0x0000000000000000,0x00000000151800000},
+ { 0x000000045fd7f157,0x0000033211c327899,0x000000063a9e5f91,0x0000000cb40b1c384,0x0000000000000000,0x00000333000000000,0x0000000600000000,0x0000000cb80000000},
+ { 0x0000000000000f89,0x000003cc8cf094100,0x000000000000172a,0x00000000000003042,0x0000000000000000,0x000003cd000000000,0x0000000000001728,0x00000000000003048},
+ { 0x0000000000000008,0x000000000313db0a9,0x0000000000000b5c,0x00000000003ea7ab9,0x0000000000000000,0x00000000031400000,0x0000000000000000,0x00000000003eb0000},
+ { 0x000000000000000d,0x0000000173534ebfb,0x0000000000049a6a,0x000000000159bc762,0x0000000000000000,0x00000001738000000,0x0000000000000000,0x00000000015a00000},
+ { 0x0000000005cee5f3,0x006ce450ef890c4bb,0x000000003226e36a,0x000000028e158569a,0x0000000000000000,0x006d0000000000000,0x0000000030000000,0x000000028f0000000},
+ { 0x0000000000000007,0x0000005ce3dd7e99f,0x000000004dc0079b,0x000000001608417aa,0x0000000000000000,0x0000005d000000000,0x000000004d800000,0x00000000161000000},
+ { 0x000000000000000b,0x0017d8ac503f7317c,0x0000000000000011,0x0000000000007b7ea,0x0000000000000000,0x0017e000000000000,0x0000000000000000,0x0000000000007b800},
+ { 0x00000000001f3888,0x008d74f9fd56eb162,0x003d0585234e712d,0x000de9dae02c44d67,0x0000000000000000,0x008d8000000000000,0x003d000000000000,0x000dec00000000000},
+ { 0x0000000000000cab,0x000b33639db049a65,0x000000000002858e,0x00000000001ca283d,0x0000000000000000,0x000b3400000000000,0x0000000000028000,0x00000000001ca8000},
+ { 0x0000000000002fde,0x0093c001ed0349d39,0x0000000020b9d88f,0x00000000077d074b1,0x0000000000000000,0x00940000000000000,0x0000000020a00000,0x00000000077e00000},
+ { 0x00000000696232c8,0x001c3dd1df0a6fe5c,0x000000019c1b8afc,0x000000359d49b80c4,0x0000000000000000,0x001c4000000000000,0x0000000100000000,0x00000035a00000000},
+ { 0x0000000004c2b0cb,0x000a16d96b2f8f5e6,0x0000000140d19571,0x000000e2e2ac36773,0x0000000000000000,0x000a1800000000000,0x0000000000000000,0x000000e3000000000},
+ { 0x0000000000009388,0x05603b105009446bf,0x000000000710cdde,0x004f4742318db7a08,0x0000000000000000,0x05620000000000000,0x0000000000000000,0x004f6000000000000},
+ { 0x000000114532e0ea,0x00002d1be9d333c7d,0x0000001cbf4d1534,0x00000336564ab2099,0x0000000000000000,0x00002d20000000000,0x0000001000000000,0x00000337000000000},
+ { 0x0000000000e40f64,0x077d0b69f01181d6f,0x0000000068a4320d,0x014375613c2f72334,0x0000000000000000,0x077e0000000000000,0x0000000000000000,0x01438000000000000},
+ { 0x0000000000003a51,0x0001ea9904bece503,0x000000000003429f,0x0000001b34d2f8f5f,0x0000000000000000,0x0001eb00000000000,0x0000000000000000,0x0000001b380000000},
+ { 0x0000000000000010,0x00000576dcff728e3,0x00000000006a58a2,0x00000001a86a319dc,0x0000000000000000,0x00000578000000000,0x0000000000000000,0x00000001a88000000},
+ { 0x000000000000055a,0x03597eecd99773ac2,0x00001f3afd8476aa,0x002b50fcb0fd04373,0x0000000000000000,0x035a0000000000000,0x0000000000000000,0x002b6000000000000},
+ { 0x0000000000007949,0x00332c51af2ea5a21,0x000000000000cbef,0x0003561ab4713c55f,0x0000000000000000,0x00333000000000000,0x0000000000000000,0x00035700000000000},
+ { 0x0000000000000006,0x000001e6d2d5b857b,0x0000000000002544,0x00000000005e203e5,0x0000000000000000,0x000001e7000000000,0x0000000000000000,0x00000000005e40000},
+ { 0x0000000000000003,0x0028f9794738aa19f,0x000000000001b40b,0x00000000325f70834,0x0000000000000000,0x00290000000000000,0x0000000000000000,0x00000000326000000},
+ { 0x0000000000170b9b,0x01cec28deab59cf13,0x00000000019716a1,0x000000000074f874b,0x0000000000000000,0x01cf0000000000000,0x0000000001960000,0x00000000007500000},
+ { 0x00000000000c9c24,0x07b2b3afbeaed29f0,0x00000000401d6b31,0x0000025353c3a1428,0x0000000000000000,0x07b40000000000000,0x0000000000000000,0x00000254000000000},
+ { 0x0000000000000088,0x0000001edee937410,0x00000000000002c0,0x0000000000039222a,0x0000000000000000,0x0000001ee00000000,0x0000000000000000,0x00000000000393000},
+ { 0x0000000000483479,0x00007b1a27d54658f,0x0000000032c4020d,0x000004c20b8204e1f,0x0000000000000000,0x00007b20000000000,0x0000000000000000,0x000004c4000000000},
+ { 0x000000000000015f,0x0000000434ccf5f5a,0x00000000000005eb,0x000000000000208c3,0x0000000000000000,0x00000004360000000,0x0000000000000500,0x00000000000020900},
+ { 0x0000000000000001,0x00be51729d7f8dbcb,0x000000000005e33f,0x0000005f7fb057945,0x0000000000000000,0x00be8000000000000,0x0000000000000000,0x0000005f800000000},
+ { 0x0000000000dfd529,0x02cd4f11f70a2acf5,0x000000b865abd597,0x000007409b7125a3e,0x0000000000000000,0x02ce0000000000000,0x000000a000000000,0x00000742000000000},
+ { 0x00000000000037d4,0x00000008af8daac7e,0x0000000000e2376c,0x000000046206166cf,0x0000000000000000,0x00000008b00000000,0x0000000000000000,0x00000004640000000},
+ { 0x0000000000000003,0x000ee72d166af07d9,0x00000029fd797f5d,0x000071e59ab3f5948,0x0000000000000000,0x000ee800000000000,0x0000000000000000,0x00007200000000000},
+ { 0x00000000000011fd,0x000001f8d2320dd32,0x000000fad88a94f1,0x00000044950d3cbd2,0x0000000000000000,0x000001f9000000000,0x000000fa00000000,0x00000044a00000000},
+ { 0x00000000060fdb62,0x00000001f85e72d18,0x0000000019b29db3,0x000000008a4b15a78,0x0000000000000000,0x00000001f88000000,0x0000000018000000,0x000000008a8000000},
+ { 0x000000002edfa526,0x0005e5d1485d2054d,0x0000024ba160618b,0x00000cb7e42a4ade3,0x0000000000000000,0x0005e600000000000,0x0000024000000000,0x00000cb8000000000},
+ { 0x000000000000001c,0x00000013ab445cb2a,0x00000000000270f4,0x00000000036df387a,0x0000000000000000,0x00000013b00000000,0x0000000000000000,0x00000000036e00000},
+ { 0x0000000000000087,0x017da1013eb72bb35,0x00001be09b763e2d,0x00028fb1564be9c3e,0x0000000000000000,0x017e0000000000000,0x0000100000000000,0x00029000000000000},
+ { 0x0000000000000001,0x0000000ad44c87f21,0x0000000000005466,0x0000000000592ba73,0x0000000000000000,0x0000000ad80000000,0x0000000000000000,0x00000000005940000},
+ { 0x00000000000008f6,0x00000007c82b6a416,0x0000000000002c0e,0x0000000003486d313,0x0000000000000000,0x00000007ca0000000,0x0000000000000000,0x00000000034900000},
+ { 0x000000001ad4750a,0x00000046b6d8364ed,0x000000019d177d61,0x00000000c33752487,0x0000000000000000,0x00000046c00000000,0x000000019c000000,0x00000000c34000000},
+ { 0x0000000000002ff5,0x0000237d72560fbee,0x000000003e00a340,0x00000640154faeee6,0x0000000000000000,0x00002380000000000,0x0000000000000000,0x00000642000000000},
+ { 0x0000000022f55846,0x0012597684f52c4b2,0x00000000aff1807e,0x00000000a78eddc67,0x0000000000000000,0x00126000000000000,0x00000000ac000000,0x00000000a7c000000},
+ { 0x0000000000000017,0x00001f53b57d40edd,0x00000000000000d1,0x00000000487e4cd11,0x0000000000000000,0x00001f58000000000,0x0000000000000000,0x00000000488000000},
+ { 0x0000000000000e7c,0x0000a3920d2e7ac8a,0x000000000000a39f,0x000000000033cec85,0x0000000000000000,0x0000a3c0000000000,0x0000000000000000,0x000000000033d0000},
+ { 0x00000000003d7e15,0x006f30260501864a1,0x00000004163021aa,0x0000c79eb9eb3d640,0x0000000000000000,0x006f4000000000000,0x0000000000000000,0x0000c7c0000000000},
+ { 0x000000000000070c,0x000651abe869e7386,0x000000000076909c,0x0000000023236bc60,0x0000000000000000,0x00065200000000000,0x0000000000000000,0x00000000233000000},
+ { 0x000000000000000e,0x0000000003bda7834,0x0000000000000392,0x00000000004de54bc,0x0000000000000000,0x0000000003be00000,0x0000000000000000,0x00000000004e00000},
+ { 0x0000000001722a3c,0x00003490053113e52,0x000000693e483d34,0x000002a9c5f8bebfb,0x0000000000000000,0x000034a0000000000,0x0000006000000000,0x000002aa000000000},
+ { 0x00000000000000e1,0x002deafdb78e17bd6,0x00000000067fe140,0x0001fd91db4e93738,0x0000000000000000,0x002df000000000000,0x0000000000000000,0x0001fe00000000000},
+ { 0x0000000000003d9b,0x00000003f5bbedfe0,0x000000000137f036,0x000000000b3e7c2c1,0x0000000000000000,0x00000003f60000000,0x0000000001000000,0x000000000b4000000},
+ { 0x0000000000006579,0x0000024fcaabbf329,0x00000000c29959f3,0x00000006ac82b670b,0x0000000000000000,0x00000250000000000,0x00000000c0000000,0x00000006ae0000000},
+ { 0x0000000000000000,0x000000000003c28ef,0x0000000000005f5b,0x000000000002357e4,0x0000000000000000,0x000000000003c3000,0x0000000000005000,0x00000000000236000},
+ { 0x00000000000001dc,0x000000e18bce6f3fe,0x0000000000086172,0x0000000001e120148,0x0000000000000000,0x000000e1c00000000,0x0000000000080000,0x0000000001e180000},
+ { 0x000000000000009d,0x00000001fb3115201,0x000000000000c95f,0x0000000002380bd86,0x0000000000000000,0x00000001fb8000000,0x0000000000000000,0x00000000023900000},
+ { 0x000000000005cd6e,0x0009ed47239b1de56,0x0000000000ab78c5,0x00000cc554b623d52,0x0000000000000000,0x0009f000000000000,0x0000000000000000,0x00000cc8000000000},
+ { 0x000001b7aba1a2ab,0x0c06789a45e8f6f6b,0x0000066af2cf49a7,0x06b386b96e23c5a1e,0x0000000000000000,0x0c080000000000000,0x0000000000000000,0x06b40000000000000},
+ { 0x000000000000004a,0x007eae8e8b59dd95e,0x0000000000000089,0x0000000000000d292,0x0000000000000000,0x007ec000000000000,0x0000000000000080,0x0000000000000d2c0},
+ { 0x0000000000001dbf,0x0000008f8fe60bd71,0x0000000000273b95,0x0000000003347e06b,0x0000000000000000,0x0000008fc00000000,0x0000000000200000,0x00000000033500000},
+ { 0x000000000008847c,0x00000000697903915,0x000000000d94d164,0x00000000049df5710,0x0000000000000000,0x00000000698000000,0x000000000d900000,0x00000000049e00000},
+ { 0x000000000000005a,0x0004d50edfa427806,0x0000000000004760,0x000000026e0cb677a,0x0000000000000000,0x0004d600000000000,0x0000000000000000,0x000000026f0000000},
+ { 0x0000000000000000,0x0000001c53ddcdd14,0x000000000548a28c,0x00000006b16c9a39e,0x0000000000000000,0x0000001c580000000,0x0000000000000000,0x00000006b20000000},
+ { 0x0000000000000002,0x000000039fd587bbd,0x0000000000073ce7,0x0000000163023afb7,0x0000000000000000,0x00000003a00000000,0x0000000000000000,0x00000001638000000},
+ { 0x00000000000005dd,0x0016f4dd8a9d589f9,0x00003165bcbdec55,0x00000510ca24704ce,0x0000000000000000,0x0016f800000000000,0x0000316000000000,0x00000511000000000},
+ { 0x00000000001d32ec,0x00587c569ba0cce1e,0x000228a6c1ec58db,0x0019b1350580fcf96,0x0000000000000000,0x00588000000000000,0x0002000000000000,0x0019b800000000000},
+ { 0x000000000000000b,0x000000000d068ebe5,0x00000000000036f1,0x00000000001d6f17d,0x0000000000000000,0x000000000d0800000,0x0000000000000000,0x00000000001d70000},
+ { 0x0000000000000005,0x003195a428e0bd07a,0x0000000000480c66,0x000096177bb155c4d,0x0000000000000000,0x0031a000000000000,0x0000000000000000,0x00009640000000000},
+ { 0x00000000000000d1,0x007cdafab44e9e4d7,0x0000000bb4681920,0x0000001bde8a15463,0x0000000000000000,0x007ce000000000000,0x0000000b80000000,0x0000001be00000000},
+ { 0x000000000000001f,0x00000e1130574d9a4,0x0000000e2a31df13,0x0000000e088d6ab78,0x0000000000000000,0x00000e14000000000,0x0000000e00000000,0x0000000e0c0000000},
+ { 0x000000000000051a,0x04a29df2f880c4886,0x00000000291e8152,0x000000005b286694f,0x0000000000000000,0x04a40000000000000,0x0000000028000000,0x000000005b4000000},
+ { 0x000000000164e438,0x0dafc216fe583e48a,0x00000014ec69d9bc,0x00c18ea077624993e,0x0000000000000000,0x0db00000000000000,0x0000000000000000,0x00c1c000000000000},
+ { 0x00000000000445b2,0x00b592e8a266b0d93,0x00000111f7024f6f,0x000000112b5a8c9d9,0x0000000000000000,0x00b5c000000000000,0x00000111f7000000,0x000000112b5c00000},
+ { 0x000000000000006f,0x00a2574ad6ed90256,0x00000000006d2720,0x0000025a918e38453,0x0000000000000000,0x00a28000000000000,0x0000000000000000,0x0000025b000000000},
+ { 0x000000000000005e,0x00000906bcfc200e5,0x0000000000000069,0x00000008b3eeb3fea,0x0000000000000000,0x00000908000000000,0x0000000000000000,0x00000008b40000000},
+ { 0x00000000000000da,0x000000005bd38e5ee,0x000000000001f47e,0x0000000005965980a,0x0000000000000000,0x000000005be000000,0x0000000000000000,0x00000000059800000},
+ { 0x00000000000a854c,0x000001ca75c14e9b5,0x000000000060e828,0x00000006a5c223868,0x0000000000000000,0x000001ca800000000,0x0000000000000000,0x00000006a60000000},
+ { 0x00000000000001ef,0x000011078cf50fc44,0x000000000002f181,0x0000003ac3de508e7,0x0000000000000000,0x00001108000000000,0x0000000000000000,0x0000003ad00000000},
+ { 0x0000000000000001,0x0cec9d398b8ee541c,0x037b03fd76cdbf19,0x0039f377e2a02cc2d,0x0000000000000000,0x0cf00000000000000,0x037b000000000000,0x0039f400000000000},
+ { 0x000000000000000a,0x000000041c636da23,0x00000000000086b6,0x00000000a05a004f4,0x0000000000000000,0x000000041e0000000,0x0000000000000000,0x00000000a08000000},
+ { 0x00000000000174b8,0x0002a3dd23e296f90,0x00000f7055186376,0x0000a9a407455b21a,0x0000000000000000,0x0002a400000000000,0x00000c0000000000,0x0000a9c0000000000},
+ { 0x0000000000000002,0x0398bd3253f5442d5,0x000000bc622a37ec,0x00013b0870722dc64,0x0000000000000000,0x03990000000000000,0x0000000000000000,0x00013b80000000000},
+ { 0x000000000000cb12,0x000000111207b504d,0x000000000001ebfb,0x000000000001e9bec,0x0000000000000000,0x00000011180000000,0x000000000001e800,0x000000000001ea000},
+ { 0x00000008955c2d12,0x0034bbb7f93072ed2,0x0000000f8a093e41,0x0000001ae89561b46,0x0000000000000000,0x0034c000000000000,0x0000000f80000000,0x0000001af00000000},
+ { 0x0000000000000015,0x0000002869180984f,0x00000000000001f6,0x0000000005c1d2c2a,0x0000000000000000,0x00000028700000000,0x0000000000000000,0x0000000005c200000},
+ { 0x0000000000000b83,0x00512a1727bedfa0e,0x000000000d377bed,0x0029eace885a5248b,0x0000000000000000,0x00514000000000000,0x0000000000000000,0x0029f000000000000},
+ { 0x000000000000266a,0x000924fc49a511bea,0x000001729206c273,0x0001d172112febfd0,0x0000000000000000,0x00092800000000000,0x0000000000000000,0x0001d180000000000},
+ { 0x0000000000001f8a,0x000002b8d0a49537c,0x000000000001ffa1,0x000001154721b298f,0x0000000000000000,0x000002b9000000000,0x0000000000000000,0x00000115800000000},
+ { 0x0000000000000067,0x00000000022c4fe90,0x00000000000d0327,0x0000000000016ac47,0x0000000000000000,0x00000000022d00000,0x00000000000d0000,0x0000000000016b000},
+ { 0x0000000000048fde,0x000b7dca2492a5864,0x0000210b454dc0c5,0x00000c203f1599899,0x0000000000000000,0x000b8000000000000,0x0000210000000000,0x00000c24000000000},
+ { 0x0000000000000752,0x00145c4f83e76688f,0x000000000001ea5d,0x000316f4faaea8faf,0x0000000000000000,0x00146000000000000,0x0000000000000000,0x00031700000000000},
+ { 0x0000000000000077,0x000000000024e3090,0x0000000000000107,0x00000000000001402,0x0000000000000000,0x000000000024f0000,0x0000000000000100,0x00000000000001408},
+ { 0x0000000000006a94,0x01beebdb4f3de6d0d,0x00000000143cad6f,0x0000000009cb1b1aa,0x0000000000000000,0x01bf0000000000000,0x0000000014000000,0x0000000009cc00000},
+ { 0x00000000000031c9,0x0000ad226d8f1fc82,0x000001dee70d3365,0x0000254017e108a6f,0x0000000000000000,0x0000ad40000000000,0x0000010000000000,0x00002550000000000},
+ { 0x0000000000000029,0x001a1244c3541e863,0x0000000dd79bb88a,0x0000106284b2f4693,0x0000000000000000,0x001a1800000000000,0x0000000000000000,0x00001068000000000},
+ { 0x0000000000000002,0x00018ddfe3b3f2f23,0x0000000000f6ed35,0x0000163c1dd83939e,0x0000000000000000,0x00018e00000000000,0x0000000000000000,0x00001640000000000},
+ { 0x0000000000000072,0x0000000486a8117d6,0x00000000000fa108,0x00000000077e4052d,0x0000000000000000,0x00000004880000000,0x0000000000000000,0x00000000078000000},
+ { 0x0000000000be4ad0,0x0004bacee4aeaca98,0x000000000e21a999,0x00000000041ca9328,0x0000000000000000,0x0004bc00000000000,0x000000000e200000,0x00000000041d00000},
+ { 0x0000000000000009,0x0014fde25d5a4a3fb,0x0000001ff3fe3aea,0x00000425ce2f0eeab,0x0000000000000000,0x00150000000000000,0x0000000000000000,0x00000426000000000},
+ { 0x0000000000000b36,0x0000000000e82fe93,0x00000000000399b8,0x0000000000003e982,0x0000000000000000,0x0000000000e840000,0x00000000000399a0,0x0000000000003e9a0},
+ { 0x0000000000000003,0x0000000a7e9261fc8,0x0000000000000007,0x0000000000000ab46,0x0000000000000000,0x0000000a800000000,0x0000000000000000,0x0000000000000ab80},
+ { 0x0000000000000048,0x00011b1952ceb8f40,0x0000000000000054,0x000000000000001e3,0x0000000000000000,0x00011b80000000000,0x0000000000000054,0x000000000000001e3},
+ { 0x000000029ecc689f,0x0000cc37114eb0f47,0x0000007622d15e75,0x0000a1abf13c9dfe5,0x0000000000000000,0x0000cc40000000000,0x0000000000000000,0x0000a1c0000000000},
+ { 0x00000000052268e6,0x00000c7a2bde6658e,0x00000001a7154dbe,0x00000096a752ded59,0x0000000000000000,0x00000c7c000000000,0x0000000000000000,0x00000096c00000000},
+ { 0x0000000000000005,0x000032ce5062db609,0x0000000000001a49,0x000003a0f6f74be58,0x0000000000000000,0x000032d0000000000,0x0000000000000000,0x000003a1000000000},
+ { 0x000000004fb58799,0x000d51a3462817282,0x0000a7b83b622cd6,0x0000a52df26810eb7,0x0000000000000000,0x000d5400000000000,0x0000a40000000000,0x0000a540000000000},
+ { 0x000000000000001b,0x000002376bb1a7ca2,0x000000004aea9a1c,0x0000000125312660e,0x0000000000000000,0x00000238000000000,0x0000000048000000,0x00000001258000000},
+ { 0x000002d2d710a3d0,0x0dc594fdfeabf334a,0x0000068515f9e25c,0x00000f57eff54a150,0x0000000000000000,0x0dc80000000000000,0x0000068000000000,0x00000f58000000000},
+ { 0x000000000000003f,0x02bd2ec59684b38b0,0x000019cb6d9c909c,0x000003dc753a5373e,0x0000000000000000,0x02be0000000000000,0x000019c000000000,0x000003dd000000000},
+ { 0x000000000000002d,0x00000822594288f56,0x0000000000043b0c,0x00000312bfb147295,0x0000000000000000,0x00000824000000000,0x0000000000000000,0x00000313000000000},
+ { 0x000000000000b8ee,0x0019a6b4d5af119e9,0x000000002fddb1e1,0x00000003f55d075a9,0x0000000000000000,0x0019a800000000000,0x0000000020000000,0x00000003f60000000},
+ { 0x0000000000033b07,0x01099eed0b1f65c73,0x000003334570f207,0x00003d4554040cf44,0x0000000000000000,0x010a0000000000000,0x0000030000000000,0x00003d50000000000},
+ { 0x000000000001f50c,0x00380c7a5962cddf5,0x000f5372199196af,0x0023b963eae4df960,0x0000000000000000,0x00381000000000000,0x000f000000000000,0x0023c000000000000},
+ { 0x0000000000000016,0x00000000094156054,0x000000000000003d,0x0000000000000289f,0x0000000000000000,0x00000000094400000,0x0000000000000030,0x000000000000028a0},
+ { 0x00000018727fc861,0x0ce37839dda3d27be,0x00384f0a6259ef59,0x00a48c98f71c67bc7,0x0000000000000000,0x0ce40000000000000,0x0038000000000000,0x00a4c000000000000},
+ { 0x00000000000594b6,0x0000005c976be5854,0x00000000010b761c,0x000000000016e6264,0x0000000000000000,0x0000005ca00000000,0x00000000010b6000,0x000000000016e8000},
+ { 0x0000000000000002,0x000f9be56e8766a33,0x0000000000000006,0x000a126d418144a8b,0x0000000000000000,0x000f9c00000000000,0x0000000000000000,0x000a1400000000000},
+ { 0x0000000000093c70,0x000000004433551e2,0x00000000000a41bd,0x0000000000336499e,0x0000000000000000,0x00000000444000000,0x00000000000a0000,0x00000000003370000},
+ { 0x000000000000019b,0x0000000001ded75f6,0x0000000000000e6f,0x00000000000002f81,0x0000000000000000,0x0000000001df00000,0x0000000000000e60,0x00000000000002f90},
+ { 0x0000000000a0a047,0x02b0271546f03c7c8,0x00000003a4ea1519,0x000000009271d4c99,0x0000000000000000,0x02b10000000000000,0x00000003a4000000,0x00000000928000000},
+ { 0x000000000000000e,0x0001bc874e4edd858,0x000000001108083c,0x00000001e0e6e11f6,0x0000000000000000,0x0001bd00000000000,0x0000000010000000,0x00000001e10000000},
+ { 0x0000000000000002,0x00000bac9c6e36549,0x0000000000000237,0x0000000000000051f,0x0000000000000000,0x00000bb0000000000,0x0000000000000237,0x0000000000000051f},
+ { 0x0000000000078a1d,0x07059b5888c2776ba,0x0000000031fd3214,0x000000081718f8ccd,0x0000000000000000,0x07060000000000000,0x0000000000000000,0x00000008180000000},
+ { 0x00000000000000b6,0x0000040d92290c4c3,0x0000000000214c06,0x00000000009381008,0x0000000000000000,0x0000040e000000000,0x0000000000200000,0x000000000093c0000},
+ { 0x0000000000000002,0x0006a098cb287c77e,0x000000000d9c323b,0x00000013da23fb9fe,0x0000000000000000,0x0006a200000000000,0x0000000000000000,0x00000013e00000000},
+ { 0x0000000000000194,0x0045dbeb3b395672b,0x00000000314ccb3c,0x00001c0b9b35e87b2,0x0000000000000000,0x0045e000000000000,0x0000000000000000,0x00001c10000000000},
+ { 0x0000000000003ea9,0x07804e6de56a36579,0x0000000000173b47,0x00000000003aaab5f,0x0000000000000000,0x07820000000000000,0x0000000000170000,0x00000000003ab0000},
+ { 0x00000000000001d8,0x01251ef941c1f29af,0x0000000000074fd4,0x00004b3494242434b,0x0000000000000000,0x01258000000000000,0x0000000000000000,0x00004b40000000000},
+ { 0x000000000000003c,0x03fe9aa66d0fa335f,0x000000000016d6cb,0x000000473994d97e8,0x0000000000000000,0x03ff0000000000000,0x0000000000000000,0x00000047400000000},
+ { 0x00000000000003cb,0x00039370f02bcd7bc,0x000000000023269c,0x000007711efa8ff25,0x0000000000000000,0x00039400000000000,0x0000000000000000,0x00000772000000000},
+ { 0x0000000000000002,0x0f4c111a8f6807638,0x000000000000007f,0x0000000000000090e,0x0000000000000000,0x0f500000000000000,0x000000000000007f,0x0000000000000090e},
+ { 0x0000000000000031,0x00000000000649427,0x0000000000000502,0x0000000000000106b,0x0000000000000000,0x0000000000064a000,0x0000000000000502,0x0000000000000106b},
+ { 0x0000006904c32df9,0x0011633155c22cf14,0x00000099de8ed647,0x00000027e7f520fd3,0x0000000000000000,0x00116800000000000,0x0000009980000000,0x00000027e80000000},
+ { 0x000000000000d69b,0x00002b00a3b4b184e,0x00000021b6dab768,0x00000007d32aeab63,0x0000000000000000,0x00002b10000000000,0x00000021a0000000,0x00000007d40000000},
+ { 0x0000000000000303,0x00005f12c5f6c7dfd,0x00000000071d4d16,0x0000000317b765923,0x0000000000000000,0x00005f20000000000,0x0000000000000000,0x00000003180000000},
+ { 0x000000000000073b,0x000033896b3ee4a54,0x0000000015933173,0x0000000019ddc0d7a,0x0000000000000000,0x00003390000000000,0x0000000015800000,0x0000000019e000000},
+ { 0x0000000000f5f766,0x00ca723b88f064e2f,0x000000013684d8b6,0x007a88e70010668b9,0x0000000000000000,0x00ca8000000000000,0x0000000000000000,0x007aa000000000000},
+ { 0x0000000000000002,0x0000d35ae8a784e63,0x0000000000000006,0x000000105f4b3f80f,0x0000000000000000,0x0000d380000000000,0x0000000000000000,0x00000010600000000},
+ { 0x000000000000096f,0x0004058e01a22f1ac,0x000002d0e82aeae8,0x000007bc55dae077b,0x0000000000000000,0x00040600000000000,0x000002c000000000,0x000007be000000000},
+ { 0x000000000047c1c4,0x00fd6b344cb697955,0x000000037ecf4404,0x000000029e834447e,0x0000000000000000,0x00fd8000000000000,0x0000000370000000,0x000000029f0000000},
+ { 0x000000000209b7cc,0x0f0a2b76de4e648b5,0x0000008bdd9fc6c2,0x00b5134b081c08987,0x0000000000000000,0x0f0c0000000000000,0x0000000000000000,0x00b54000000000000},
+ { 0x0000000000218ff4,0x01c0cffdbca454a90,0x00000000007d780b,0x009289555db16fcbd,0x0000000000000000,0x01c10000000000000,0x0000000000000000,0x0092c000000000000},
+ { 0x0000000000000001,0x000000032a52eafc8,0x0000000000004ee3,0x00000000099bc8ae7,0x0000000000000000,0x000000032b0000000,0x0000000000000000,0x00000000099c00000},
+ { 0x0000000000000003,0x00665c2973dba7d3b,0x00000000012cda13,0x000000000022034cb,0x0000000000000000,0x00666000000000000,0x00000000012cc000,0x00000000002204000},
+ { 0x0000000000034c58,0x000080a0f9c9fe5d7,0x00000000000fa2c3,0x00000000003abf180,0x0000000000000000,0x000080c0000000000,0x00000000000f0000,0x00000000003ac0000},
+ { 0x000000000000155a,0x00000016a1c3052e3,0x00000000004110b3,0x00000000018dc5390,0x0000000000000000,0x00000016a80000000,0x0000000000400000,0x00000000018e00000},
+ { 0x0000000000000003,0x0dc6bf3beb30fdb23,0x00000001d41635a9,0x00000ca65e9311abe,0x0000000000000000,0x0dc80000000000000,0x0000000000000000,0x00000ca8000000000},
+ { 0x000000000000000a,0x000c73d82d15bc794,0x0000000000000037,0x000000034e8331756,0x0000000000000000,0x000c7400000000000,0x0000000000000000,0x000000034f0000000},
+ { 0x0000000000273c18,0x000000659499aad05,0x00000001e46749b9,0x0000000b9eb09bf32,0x0000000000000000,0x00000065a00000000,0x00000001c0000000,0x0000000ba00000000},
+ { 0x0000000000000298,0x000003682ed9a842e,0x00000066b905ca07,0x0000000ae651dd525,0x0000000000000000,0x00000369000000000,0x00000066a0000000,0x0000000ae80000000},
+ { 0x000000000007e0b2,0x0094b0aabd4e3e214,0x000351f6e6588c62,0x00076fbb69a7504e5,0x0000000000000000,0x0094c000000000000,0x0003400000000000,0x00077000000000000},
+ { 0x00000000012b3d74,0x00000067154c79eaf,0x0000000097ce9692,0x00000003548f9d31b,0x0000000000000000,0x00000067200000000,0x0000000090000000,0x00000003550000000},
+ { 0x0000000000002b52,0x0003dedfbe85f5944,0x00016fea6430637f,0x000109a383840bc1f,0x0000000000000000,0x0003df00000000000,0x00016c0000000000,0x000109c0000000000},
+ { 0x0000000000013de3,0x00000000077735c11,0x0000000000ceaecb,0x000000000085e22fa,0x0000000000000000,0x00000000077800000,0x0000000000ce0000,0x00000000008600000},
+ { 0x0000000000000219,0x00001506bf49faa59,0x000000000006821e,0x00000ae99af417a50,0x0000000000000000,0x00001508000000000,0x0000000000000000,0x00000aec000000000},
+ { 0x00000000003ceedf,0x00000b0cd6ec4f1f9,0x0000000005a5ec43,0x0000000006674b24a,0x0000000000000000,0x00000b10000000000,0x0000000005a00000,0x00000000066800000},
+ { 0x000000006d429da2,0x00000e936a6f11594,0x000000055e9a6a4d,0x0000046411c2992df,0x0000000000000000,0x00000e94000000000,0x0000000000000000,0x00000466000000000},
+ { 0x000000000000000d,0x000000114e93a946b,0x000000000004aa31,0x0000000000779bee6,0x0000000000000000,0x00000011500000000,0x0000000000040000,0x000000000077a0000},
+ { 0x000000000050c21a,0x001150a38d5e5d62c,0x0000000001fca15f,0x000002dd77cf8d25d,0x0000000000000000,0x00115800000000000,0x0000000000000000,0x000002de000000000},
+ { 0x0000000000000001,0x0000d174555f21762,0x000000000044d19c,0x000001203b3298e73,0x0000000000000000,0x0000d180000000000,0x0000000000000000,0x00000120800000000},
+ { 0x0000000000000028,0x0000010aa4e46ce00,0x000000000030763e,0x0000000009e461e61,0x0000000000000000,0x0000010b000000000,0x0000000000000000,0x0000000009e800000},
+ { 0x0000000000000017,0x007e036476035ca2a,0x000000000000001a,0x000000002d4d21141,0x0000000000000000,0x007e2000000000000,0x0000000000000000,0x000000002d5000000},
+ { 0x0000000000000009,0x0000000372f07ed4c,0x0000000000071e06,0x0000000000042400c,0x0000000000000000,0x00000003730000000,0x0000000000071000,0x00000000000425000},
+ { 0x0000000000000000,0x0007c0e6bde2151fe,0x00000000000031b7,0x0000000000084be34,0x0000000000000000,0x0007c200000000000,0x0000000000000000,0x0000000000084c000},
+ { 0x00000007290fb0dc,0x00018c465855075f5,0x0000dbc98cb116ba,0x00000dea47bbf81de,0x0000000000000000,0x00018c80000000000,0x0000dbc900000000,0x00000dea500000000},
+ { 0x0000000000000094,0x0079f974e722d260d,0x00000000010ff5fb,0x00000198d239ec525,0x0000000000000000,0x007a0000000000000,0x0000000000000000,0x00000199000000000},
+ { 0x0000000000000011,0x000129ecdb763f817,0x000000000059c4d4,0x0000000007120a9ca,0x0000000000000000,0x00012a00000000000,0x0000000000400000,0x00000000071400000},
+ { 0x0000000000000002,0x002037c1a998d9bfd,0x0000000000050567,0x00000000003148633,0x0000000000000000,0x00204000000000000,0x0000000000050000,0x00000000003150000},
+ { 0x0000000000000003,0x0000000000000004e,0x0000000000000007,0x0000000000000003c,0x0000000000000003,0x0000000000000004e,0x0000000000000007,0x0000000000000003c},
+ { 0x0000000000000015,0x0c3670588238d9edb,0x000000000000004d,0x0000000000455783e,0x0000000000000000,0x0c380000000000000,0x0000000000000000,0x00000000004560000},
+ { 0x0000000000000003,0x0000040fab95e886e,0x000000000000547f,0x00000000001b6c3c7,0x0000000000000000,0x00000410000000000,0x0000000000000000,0x00000000001b70000},
+ { 0x00000000e8f52e18,0x00173315f0f17cf85,0x0000000a5bc8f595,0x00000009124e37648,0x0000000000000000,0x00173800000000000,0x0000000a40000000,0x00000009140000000},
+ { 0x0000000000000044,0x0013714979b7d8304,0x0000000029089aae,0x0000000007a4fe224,0x0000000000000000,0x00137800000000000,0x0000000029000000,0x0000000007a600000},
+ { 0x0000000000005380,0x00000018c98c2cc99,0x0000000014a11d51,0x000000008c2648214,0x0000000000000000,0x00000018d00000000,0x0000000014000000,0x000000008c4000000},
+ { 0x0000000000000005,0x00100ade54a2eed38,0x0000000000e0c135,0x0001abd43779ae62a,0x0000000000000000,0x00101000000000000,0x0000000000000000,0x0001ac00000000000},
+ { 0x000000000097dc22,0x00025557d228d444b,0x0000000000e92160,0x000000000b6a6f5c0,0x0000000000000000,0x00025600000000000,0x0000000000c00000,0x000000000b6c00000},
+ { 0x000000000005c75c,0x002a14bbfc8b42600,0x0000000007062688,0x000000017948e1fc1,0x0000000000000000,0x002a2000000000000,0x0000000000000000,0x00000001798000000},
+ { 0x0000000000000008,0x0000000024821bc8e,0x00000000000259f3,0x00000000064d042d1,0x0000000000000000,0x00000000249000000,0x0000000000000000,0x00000000064e00000},
+ { 0x000000000049917e,0x00186a2bf1ec4cec6,0x000000001a3152ff,0x000000082b2584a4f,0x0000000000000000,0x00187000000000000,0x0000000000000000,0x000000082c0000000},
+ { 0x0000041a700651b2,0x0056aa9cab0cdfe11,0x0000096d3c2e67c2,0x0000fc4a6082e060b,0x0000000000000000,0x0056c000000000000,0x0000080000000000,0x0000fc80000000000},
+ { 0x0000001612340a4c,0x007ac64a27a7e5bb3,0x0013053c76a23cff,0x00018637b71288903,0x0000000000000000,0x007ae000000000000,0x0013040000000000,0x00018640000000000},
+ { 0x0000000000000021,0x0000000015b09abcc,0x00000000000675e7,0x000000000039df696,0x0000000000000000,0x0000000015b800000,0x0000000000060000,0x000000000039e0000},
+ { 0x000000000000000a,0x00000841a2687f32a,0x0000000000000073,0x000000002f520bc77,0x0000000000000000,0x00000844000000000,0x0000000000000000,0x000000002f6000000},
+ { 0x0000000000bf44e6,0x00001097bc5a535e9,0x000001337e459abe,0x000000356840537a5,0x0000000000000000,0x00001098000000000,0x0000013300000000,0x00000035700000000},
+ { 0x0000000754a7b7fe,0x053ee66b61d4d4f03,0x000bf8fc1217ff71,0x002a69ee18486244c,0x0000000000000000,0x05400000000000000,0x000b000000000000,0x002a7000000000000},
+ { 0x00000000000002ee,0x05e260f7eda4ab42d,0x0000000031ede70b,0x0000000afa9e0072d,0x0000000000000000,0x05e40000000000000,0x0000000000000000,0x0000000afc0000000},
+ { 0x00000000dce5e428,0x0dade0618a22267cb,0x0000072279382e6d,0x0000df58cb8e24da3,0x0000000000000000,0x0db00000000000000,0x0000040000000000,0x0000df80000000000},
+ { 0x0000000000000005,0x0000f51dde3c16b0d,0x000000a9e6ba9e8c,0x000000625d8af546a,0x0000000000000000,0x0000f540000000000,0x000000a800000000,0x00000062600000000},
+ { 0x000000000000003a,0x01997cea1238a0058,0x0000000015a02318,0x0000000644b385283,0x0000000000000000,0x01998000000000000,0x0000000000000000,0x00000006460000000},
+ { 0x0000000000000277,0x0000002eb1902c3f8,0x0000000002e28ba3,0x00000026c838fd895,0x0000000000000000,0x0000002ec00000000,0x0000000000000000,0x00000026d00000000},
+ { 0x00000001fc6bee60,0x002d4e6bcb95634ec,0x00000b427ce1fa70,0x000013216806b53bb,0x0000000000000000,0x002d5000000000000,0x00000b0000000000,0x00001328000000000},
+ { 0x0000000000000018,0x0007639e1c6b1fb86,0x000000000000002a,0x0002c6ffbf0a864de,0x0000000000000000,0x00076400000000000,0x0000000000000000,0x0002c700000000000},
+ { 0x00000000000017df,0x0a9b0a31019c454ad,0x0000000002f8c4f7,0x00931fd73e33c7cff,0x0000000000000000,0x0a9c0000000000000,0x0000000000000000,0x00934000000000000},
+ { 0x000000000000000b,0x00000626634b8f622,0x0000000bddd478e7,0x00000003a46e3bcac,0x0000000000000000,0x00000628000000000,0x0000000bd0000000,0x00000003a50000000},
+ { 0x00000000000c531d,0x01738932c2fbf698d,0x0000000007f15430,0x0000002a9f2093a37,0x0000000000000000,0x01740000000000000,0x0000000000000000,0x0000002aa00000000},
+ { 0x0000000000000002,0x0000000109f93e958,0x000000000000001f,0x0000000000000050e,0x0000000000000000,0x000000010a0000000,0x000000000000001f,0x0000000000000050e},
+ { 0x0000000000005541,0x000000e839e54da72,0x0000000000030c2e,0x000000000010f4b5e,0x0000000000000000,0x000000e8400000000,0x0000000000030000,0x000000000010f8000},
+ { 0x00000000000002fd,0x00054bb784635222a,0x000000004f84f0ad,0x00000003eda6ebd6a,0x0000000000000000,0x00054c00000000000,0x0000000040000000,0x00000003ee0000000},
+ { 0x0000000000000009,0x000136bda1e136070,0x000000000000295c,0x00000001ad5c23289,0x0000000000000000,0x00013700000000000,0x0000000000000000,0x00000001ad8000000},
+ { 0x0000000000000029,0x002095a690e6a778c,0x0000000000000781,0x0000000001fd52ab3,0x0000000000000000,0x0020a000000000000,0x0000000000000000,0x0000000001fd80000},
+ { 0x00000000000005f5,0x01b2d53fa826a60bd,0x0000000000e1356f,0x0000024f760da65a5,0x0000000000000000,0x01b30000000000000,0x0000000000000000,0x00000250000000000},
+ { 0x0000000c4fba3dbb,0x000000cc27dc5331d,0x0000001bc1f4d113,0x00000003837ecde70,0x0000000c00000000,0x000000cc400000000,0x0000001bc0000000,0x00000003838000000},
+ { 0x0000000000003ea6,0x07796b49319e1ea7e,0x0000000008135683,0x00000015499cbe616,0x0000000000000000,0x077a0000000000000,0x0000000000000000,0x00000015500000000},
+ { 0x000000000001ea66,0x007b08a6b14072f28,0x0000000c4e2f8171,0x000000ac9a4e7fa1a,0x0000000000000000,0x007b2000000000000,0x0000000c00000000,0x000000acc00000000},
+ { 0x00000000000035f8,0x00003898b06c6091b,0x0000000000182e90,0x0000000029b0478fc,0x0000000000000000,0x000038a0000000000,0x0000000000000000,0x0000000029c000000},
+ { 0x0000000000004b61,0x000000008192bc042,0x000000000000e351,0x00000000267217d7b,0x0000000000000000,0x0000000081c000000,0x0000000000000000,0x00000000268000000},
+ { 0x000000000000009a,0x00000044e31b4bc87,0x00000000001d46b8,0x0000000000292821f,0x0000000000000000,0x00000045000000000,0x00000000001d0000,0x00000000002930000},
+ { 0x0000000000000014,0x00024cdd8b9e43f9c,0x0000000000000563,0x0000000628f9b019c,0x0000000000000000,0x00024d00000000000,0x0000000000000000,0x000000062a0000000},
+ { 0x0000000000000426,0x00000005105fd66bd,0x000000000001a0ed,0x000000000004807cc,0x0000000000000000,0x00000005120000000,0x000000000001a000,0x00000000000482000},
+ { 0x00000000000c88d1,0x00009196b2d7c71e1,0x0000e4a9c2dd7451,0x0000316fd366d4ae0,0x0000000000000000,0x000091c0000000000,0x0000e40000000000,0x00003170000000000},
+ { 0x000000000000000b,0x000243be963e01886,0x000000000000018e,0x0000000b6b83cd116,0x0000000000000000,0x00024400000000000,0x0000000000000000,0x0000000b6c0000000},
+ { 0x00000000000003e6,0x00e915c0b15ee6d95,0x00503ae8e59e3ab3,0x005e2d60253473c42,0x0000000000000000,0x00e94000000000000,0x0050000000000000,0x005e4000000000000},
+ { 0x0000000000005ca6,0x0000b4e113f9bd954,0x000000000000d2df,0x0000000000010c456,0x0000000000000000,0x0000b500000000000,0x000000000000d000,0x0000000000010c800},
+ { 0x000000000000001c,0x0126672ca447e8b05,0x00000000000023f4,0x0000000000000d18d,0x0000000000000000,0x01268000000000000,0x00000000000023c0,0x0000000000000d1c0},
+ { 0x000000000005937c,0x00005c8039aa5d641,0x00000004ebfc2b49,0x0000000181c775dde,0x0000000000000000,0x00005ca0000000000,0x00000004e8000000,0x00000001820000000},
+ { 0x00000000006ce306,0x000317230339c3967,0x00000000042e2867,0x0000000016f0f6099,0x0000000000000000,0x00031800000000000,0x0000000004000000,0x0000000016f800000},
+ { 0x0000000000000008,0x068f132b878c514f5,0x000b13f6065f6bb0,0x007bfb04acb92044c,0x0000000000000000,0x06900000000000000,0x000a000000000000,0x007c0000000000000},
+ { 0x000000000000000b,0x058bc227d6fad8967,0x0000000000019317,0x00000079b649fd9e4,0x0000000000000000,0x058c0000000000000,0x0000000000000000,0x00000079c00000000},
+ { 0x00000000000001e2,0x000afad59ab745c4e,0x000000000003375b,0x000000000400333a7,0x0000000000000000,0x000afc00000000000,0x0000000000000000,0x00000000040200000},
+ { 0x0000000000004d49,0x00000cabf57d8cddb,0x0000000ca7f2bfe2,0x0000006e54d27c828,0x0000000000000000,0x00000cac000000000,0x0000000c00000000,0x0000006e600000000},
+ { 0x00000000000008a0,0x0048cbf9b015ed9a7,0x00000001f02bd5ad,0x00000001ff5ac3e46,0x0000000000000000,0x0048e000000000000,0x00000001f0000000,0x00000001ff8000000},
+ { 0x0000000000000002,0x000000003b851b380,0x0000000000000273,0x00000000000007812,0x0000000000000000,0x000000003b9000000,0x0000000000000260,0x00000000000007820},
+ { 0x00001f140311ba17,0x0f95dc8508d701fee,0x00949057b0e48c0a,0x006f98c344a4949b1,0x0000000000000000,0x0f980000000000000,0x0094000000000000,0x006fa000000000000},
+ { 0x0000000000000002,0x0000018851da4162d,0x0000000000004b33,0x000000000e7cfd5cf,0x0000000000000000,0x00000188800000000,0x0000000000000000,0x000000000e8000000},
+ { 0x00000000003bfdd1,0x0095efe055dccc65e,0x0000000001c9f53a,0x0000000005b5c2a02,0x0000000000000000,0x00960000000000000,0x0000000001c00000,0x0000000005b600000},
+ { 0x00000000eec837d8,0x0002c44dff703188c,0x00018d5ae2407367,0x000189e8ae4bc88ee,0x0000000000000000,0x0002c500000000000,0x0001880000000000,0x00018a00000000000},
+ { 0x0000000000000011,0x0009218f167b99c45,0x0000001c2a30a554,0x00032f4fc61f16dc2,0x0000000000000000,0x00092400000000000,0x0000000000000000,0x00033000000000000},
+ { 0x0000000000006c10,0x00000004a3fe18384,0x000000000001f65e,0x000000001d34bb4d0,0x0000000000000000,0x00000004a40000000,0x0000000000000000,0x000000001d3800000},
+ { 0x0000000000000003,0x00058789db91109de,0x00000000000110cf,0x000000000102157ca,0x0000000000000000,0x00058800000000000,0x0000000000000000,0x00000000010280000},
+ { 0x00000000000001f4,0x0442f08bc85b47411,0x0000000000003e34,0x000000b9ea8779369,0x0000000000000000,0x04440000000000000,0x0000000000000000,0x000000ba000000000},
+ { 0x0000000000065b7e,0x0000792c2acb23446,0x00000000cd730eeb,0x000000375b2e0dfa9,0x0000000000000000,0x00007940000000000,0x0000000000000000,0x00000037600000000},
+ { 0x0000000000008d60,0x00c3506424255b1cd,0x000000001d0a896f,0x0000000bee5d37146,0x0000000000000000,0x00c38000000000000,0x0000000000000000,0x0000000bf00000000},
+ { 0x0000000000000005,0x0180f91d4ff339852,0x00000000001c0c06,0x000485d8200981f59,0x0000000000000000,0x01810000000000000,0x0000000000000000,0x00048600000000000},
+ { 0x00000000000002d1,0x0030283cf101a3f01,0x000000000000662b,0x00000bae58cba5607,0x0000000000000000,0x00303000000000000,0x0000000000000000,0x00000bb0000000000},
+ { 0x00000000003252c6,0x003aa02643e7417fe,0x0000000001903845,0x000000000105a9521,0x0000000000000000,0x003ab000000000000,0x0000000001900000,0x000000000105c0000},
+ { 0x0000000000000d5a,0x008491d87a9bcdeec,0x000c44faccc474fc,0x00344c96dfd8ea3cd,0x0000000000000000,0x0084c000000000000,0x000c000000000000,0x00345000000000000},
+ { 0x0000000000000000,0x000000566fbd61cb5,0x00000000000004fc,0x0000000000046e002,0x0000000000000000,0x00000056800000000,0x0000000000000000,0x00000000000470000},
+ { 0x0000000000000035,0x0124ab32347581e23,0x000000006b023d7a,0x0002cea94585c8fdc,0x0000000000000000,0x01250000000000000,0x0000000000000000,0x0002cf00000000000},
+ { 0x00000000000161f8,0x06a08fdd970581678,0x0000000004cfa659,0x000f87b01b9261328,0x0000000000000000,0x06a20000000000000,0x0000000000000000,0x000f8800000000000},
+ { 0x000000000000000b,0x00006e624b14b024d,0x000000024994165f,0x00000cbb817110251,0x0000000000000000,0x00006e80000000000,0x0000000000000000,0x00000cbc000000000},
+ { 0x000000000000003e,0x000001ef8cea8a73b,0x0000000000000100,0x0000000000004c795,0x0000000000000000,0x000001f0000000000,0x0000000000000000,0x0000000000004c800},
+ { 0x0000000000000081,0x00000064f9e3ccc89,0x00000000003393b7,0x0000003fd0cfe42f0,0x0000000000000000,0x00000065000000000,0x0000000000000000,0x0000003fe00000000},
+ { 0x000000000000227a,0x0000005a72d45c279,0x00000000003bb373,0x000000122d79fd5b5,0x0000000000000000,0x0000005a800000000,0x0000000000000000,0x00000012300000000},
+ { 0x0000000000000c8e,0x00003b42e60b9ce29,0x0000000000006a72,0x000000000002ad33b,0x0000000000000000,0x00003b50000000000,0x0000000000006000,0x000000000002ae000},
+ { 0x0000000000000e55,0x0002e6daccb19c0e6,0x0000000000003fc2,0x000025e58ad66d31f,0x0000000000000000,0x0002e700000000000,0x0000000000000000,0x000025f0000000000},
+ { 0x00000000000000ad,0x000211d1562b18955,0x000000000012d64d,0x00000000006527528,0x0000000000000000,0x00021200000000000,0x0000000000120000,0x00000000006540000},
+ { 0x00000003943b9e2a,0x004200e47ee88b934,0x0000006519af4b24,0x0000010da679b667a,0x0000000000000000,0x00422000000000000,0x0000006000000000,0x0000010e000000000},
+ { 0x00000006ddbf4543,0x007edcb4de106d230,0x00000ce6591ef348,0x003fc0b41ac42e837,0x0000000000000000,0x007ee000000000000,0x0000000000000000,0x003fd000000000000},
+ { 0x0000000000000005,0x00cebdc55050c6a20,0x0000008cea14e1f4,0x00002540e346d0a3d,0x0000000000000000,0x00cec000000000000,0x0000000000000000,0x00002550000000000},
+ { 0x0000000000000436,0x00000000add0ba7e7,0x000000000007afe9,0x0000000049d72194f,0x0000000000000000,0x00000000ae0000000,0x0000000000000000,0x0000000049e000000},
+ { 0x0000000000000639,0x007f510bf5c584a09,0x0000000000031732,0x000000e153929ecc0,0x0000000000000000,0x007f6000000000000,0x0000000000000000,0x000000e1800000000},
+ { 0x000000000000f5e7,0x00000000e9527db66,0x00000000088c9af2,0x00000000c2b69ada3,0x0000000000000000,0x00000000e98000000,0x0000000008000000,0x00000000c2c000000},
+ { 0x0000000000000d13,0x000d56c394d9bba29,0x0000000135abfa82,0x0000000135a296894,0x0000000000000000,0x000d5800000000000,0x0000000130000000,0x00000001360000000},
+ { 0x00000000000023e9,0x0229464093aa892ec,0x0000000001a869aa,0x0000000363b861271,0x0000000000000000,0x022a0000000000000,0x0000000000000000,0x00000003640000000},
+ { 0x00000000000000aa,0x00052e6b551c7aba0,0x00000000000031d1,0x00000007ee11db66b,0x0000000000000000,0x00053000000000000,0x0000000000000000,0x00000007f00000000},
+ { 0x0000e52e56cd330d,0x000327e52c075a67f,0x0007ef4e2c9caef4,0x0000cfb59cd10ad9a,0x0000e00000000000,0x00032800000000000,0x0007ee0000000000,0x0000cfc0000000000},
+ { 0x00000000000001e8,0x0002930cc9b61a9ae,0x0000000003e7307d,0x0000001589c66bfc8,0x0000000000000000,0x00029400000000000,0x0000000000000000,0x00000015900000000},
+ { 0x0000000000000002,0x000007ea4435984ea,0x00000000000000e6,0x00000000188b6bda4,0x0000000000000000,0x000007ec000000000,0x0000000000000000,0x00000000189000000},
+ { 0x000000009bb2ddba,0x002f7bc32fb229077,0x00000000a838b4c5,0x00000003ef8635c0f,0x0000000000000000,0x002f8000000000000,0x00000000a0000000,0x00000003f00000000},
+ { 0x000000000000001e,0x000b960eb527fad98,0x000000000073a805,0x000000000d15452fd,0x0000000000000000,0x000b9800000000000,0x0000000000400000,0x000000000d1800000},
+ { 0x000000000003459a,0x0000721416cf2494d,0x000000042f5a69ed,0x0000012dce0cc7ee3,0x0000000000000000,0x00007220000000000,0x0000000000000000,0x0000012e000000000},
+ { 0x000000000000007e,0x000000cd6963ae715,0x000000000000012e,0x00000000e5a442dfc,0x0000000000000000,0x000000cd800000000,0x0000000000000000,0x00000000e5c000000},
+ { 0x000000000001fa5c,0x008ad77f21fcc5cc8,0x0000000766d0cd99,0x0000054163bb3e338,0x0000000000000000,0x008b0000000000000,0x0000000000000000,0x00000542000000000},
+ { 0x0000000000000002,0x008a57686ffffa006,0x0000000000002d4e,0x00000000007aebf1e,0x0000000000000000,0x008a8000000000000,0x0000000000000000,0x00000000007b00000},
+ { 0x0000000000000002,0x0057f141e4965b1ce,0x0000000000005f44,0x000000061a3fae07f,0x0000000000000000,0x00580000000000000,0x0000000000000000,0x000000061c0000000},
+ { 0x000000000000006b,0x00da6068fe29526b1,0x00000000000001fd,0x000000f0a183f749f,0x0000000000000000,0x00da8000000000000,0x0000000000000000,0x000000f0c00000000},
+ { 0x00000000e41ff98e,0x00044a3e3bc2cc616,0x000000eb01d38a14,0x000000114db4a79f8,0x0000000000000000,0x00044c00000000000,0x000000eb00000000,0x000000114e0000000},
+ { 0x0000000000000003,0x04a39498572f369cd,0x0000000015901302,0x00000000018c3f4d4,0x0000000000000000,0x04a40000000000000,0x0000000015900000,0x00000000018c40000},
+ { 0x000000000001775c,0x00019b24f617ec90d,0x0000b9fecdf451f2,0x0000151af1301c17b,0x0000000000000000,0x00019b80000000000,0x0000b9c000000000,0x0000151c000000000},
+ { 0x0000000157ec4c60,0x0003ca24656fc10a0,0x0000000ea07e59f2,0x0000018d0e7eee9da,0x0000000000000000,0x0003cb00000000000,0x0000000800000000,0x0000018d800000000},
+ { 0x0000000000009580,0x00000024641ba8fc8,0x0000000000029649,0x0000000000090f2ca,0x0000000000000000,0x00000024700000000,0x0000000000028000,0x00000000000910000},
+ { 0x0000000000000023,0x00050d7bb69d62ac5,0x000000087a6de3b0,0x00000316da0107b47,0x0000000000000000,0x00050e00000000000,0x0000000000000000,0x00000317000000000},
+ { 0x0000000000015dbb,0x0036ad9a9f37a291b,0x0000001101326258,0x0000000121fdc54b5,0x0000000000000000,0x0036b000000000000,0x0000001101000000,0x00000001220000000},
+ { 0x0000000000000000,0x00000000000a76135,0x0000000000000b90,0x0000000000000d236,0x0000000000000000,0x00000000000a78000,0x0000000000000b80,0x0000000000000d240},
+ { 0x000000000000846a,0x001f34604f62ab805,0x00000001365ffa54,0x0000000017ed748fa,0x0000000000000000,0x001f3800000000000,0x0000000136400000,0x0000000017ee00000},
+ { 0x000000000000639d,0x000000133abd6a6f0,0x000000000000a3ad,0x0000000003c03e692,0x0000000000000000,0x00000013400000000,0x0000000000000000,0x0000000003c100000},
+ { 0x0000000000009214,0x04c0183ce8723b699,0x0004bb6477a4faa0,0x003f7bb7694968774,0x0000000000000000,0x04c20000000000000,0x0004000000000000,0x003f8000000000000},
+ { 0x00000000134a88f1,0x007dcccf42f339e96,0x00000004a5ac9452,0x00002b6d13f19b4dd,0x0000000000000000,0x007de000000000000,0x0000000000000000,0x00002b70000000000},
+ { 0x00000000000d1118,0x033147be48f0c0faf,0x00000000107e321e,0x000aae32a92dd0221,0x0000000000000000,0x03320000000000000,0x0000000000000000,0x000ab000000000000},
+ { 0x00000004f8592256,0x02b12134672f40aa8,0x00006d6e61009c89,0x000f41545a99a5cde,0x0000000000000000,0x02b20000000000000,0x0000400000000000,0x000f4400000000000},
+ { 0x000000000001522f,0x0007256fa7a48da42,0x000000000076d5a1,0x000000000d39ed17d,0x0000000000000000,0x00072600000000000,0x0000000000400000,0x000000000d3c00000},
+ { 0x000000000051b7fc,0x00000000d07eba1ea,0x0000000009de0b79,0x000000000bf791568,0x0000000000000000,0x00000000d08000000,0x0000000009c00000,0x000000000bf800000},
+ { 0x00000000000002c6,0x00580691a4ab03133,0x0001c41eea6d7bfc,0x00006941ae146f7bd,0x0000000000000000,0x00582000000000000,0x0001c40000000000,0x00006960000000000},
+ { 0x00000000000000e1,0x004416034998158ab,0x00000000008e856b,0x000000076f467210d,0x0000000000000000,0x00442000000000000,0x0000000000000000,0x00000007700000000},
+ { 0x0000000000000002,0x0121f347f052de8cd,0x0000000006d81511,0x000296cc34bbd975a,0x0000000000000000,0x01220000000000000,0x0000000000000000,0x00029700000000000},
+ { 0x0000000000000001,0x003ae77fcc13a6193,0x00000000000368fd,0x00000000024149c97,0x0000000000000000,0x003af000000000000,0x0000000000000000,0x00000000024200000},
+ { 0x00000000000bea71,0x000000008fb1a1fea,0x0000000005722fd8,0x000000000067c8ad1,0x0000000000000000,0x000000008fc000000,0x0000000005720000,0x000000000067d0000},
+ { 0x0000000000000172,0x03243e71bce6315b4,0x0000000000005f81,0x0032179f69a15c3c6,0x0000000000000000,0x03250000000000000,0x0000000000000000,0x00322000000000000},
+ { 0x0000000000000f54,0x00008506af27a6791,0x00000000f323f385,0x00000023b66cba55e,0x0000000000000000,0x00008540000000000,0x0000000000000000,0x00000023c00000000},
+ { 0x0000000000007581,0x00002ab2d52ac4461,0x0000003461e47eec,0x0000003611327b4cd,0x0000000000000000,0x00002ac0000000000,0x0000003400000000,0x00000036200000000},
+ { 0x0000000000000058,0x000000001fd6c4968,0x000000000026e2f3,0x000000000068162bd,0x0000000000000000,0x000000001fd800000,0x0000000000260000,0x00000000006820000},
+ { 0x0000000000000174,0x0000000935b7d24fd,0x00000000000001b5,0x000000000000306dd,0x0000000000000000,0x00000009380000000,0x0000000000000100,0x00000000000030700},
+ { 0x000000000000053b,0x000044337c83e7e22,0x000000000000372d,0x000000000884533e9,0x0000000000000000,0x00004440000000000,0x0000000000000000,0x00000000088800000},
+ { 0x00000000000039a5,0x0028f1002cfa4e823,0x00000000001d4990,0x000092a2df52c0fea,0x0000000000000000,0x00290000000000000,0x0000000000000000,0x000092c0000000000},
+ { 0x0000000001eba654,0x003fc41f757051db6,0x0000000007d07818,0x00017ad9d455d3340,0x0000000000000000,0x003fd000000000000,0x0000000000000000,0x00017b00000000000},
+ { 0x0000000000000001,0x00000000005bb9411,0x0000000000000395,0x000000000000005a2,0x0000000000000000,0x00000000005bc0000,0x0000000000000395,0x000000000000005a2},
+ { 0x000000000000084a,0x000050093c64d32c1,0x000000332d3cd9e3,0x0000001a80de695c8,0x0000000000000000,0x00005020000000000,0x0000003300000000,0x0000001a880000000},
+ { 0x000000000000002a,0x02acc2e54cdb9b154,0x0000000000007cd3,0x000000000003ee2f0,0x0000000000000000,0x02ad0000000000000,0x0000000000007000,0x000000000003ef000},
+ { 0x0000000000000491,0x000f103ecead019d5,0x000000000002698c,0x00000035a50c21090,0x0000000000000000,0x000f1400000000000,0x0000000000000000,0x00000035b00000000},
+ { 0x00000000000000ea,0x00002f1334ec1e8f8,0x000000000000cfb0,0x00000030e2c2e38b4,0x0000000000000000,0x00002f20000000000,0x0000000000000000,0x00000030f00000000},
+ { 0x000000000f0a1a54,0x0000c7a9f37cb0879,0x000000001f51c773,0x00000001228f60db6,0x0000000000000000,0x0000c7c0000000000,0x0000000018000000,0x00000001230000000},
+ { 0x00000e8d6dcdf207,0x06df35ad1b1316c8b,0x000a6e5f4815beb2,0x00d5daff190ffc8c4,0x0000000000000000,0x06e00000000000000,0x0008000000000000,0x00d60000000000000},
+ { 0x0000000000000238,0x000019fa2d6e86275,0x00000000bfbbff0c,0x000001fff590bd54f,0x0000000000000000,0x00001a00000000000,0x0000000000000000,0x00000200000000000},
+ { 0x000000000003b887,0x0000063e0763eda55,0x0000000045be8304,0x000000014b64112e6,0x0000000000000000,0x00000640000000000,0x0000000040000000,0x000000014b8000000},
+ { 0x000000000000067e,0x00000002007e4ee24,0x0000000000003371,0x000000000001c73e4,0x0000000000000000,0x00000002010000000,0x0000000000003000,0x000000000001c7800},
+ { 0x00000000000002fd,0x000000004576f3771,0x0000000000003511,0x000000001d3a1eb47,0x0000000000000000,0x00000000458000000,0x0000000000000000,0x000000001d4000000},
+ { 0x0000000000000019,0x000bac3de72a16fcb,0x000000dbe16b9649,0x000003d60233d6a3b,0x0000000000000000,0x000bb000000000000,0x000000d000000000,0x000003d7000000000},
+ { 0x0000000000000005,0x0000d5e998ad328fa,0x00000000000d2d41,0x0000004ee98a1d582,0x0000000000000000,0x0000d600000000000,0x0000000000000000,0x0000004f000000000},
+ { 0x000000000000146e,0x003b34382553029c5,0x00000000005546e2,0x0000034f5225b6e77,0x0000000000000000,0x003b4000000000000,0x0000000000000000,0x00000350000000000},
+ { 0x0000000000003b34,0x0000000038909b5af,0x000000000001377a,0x000000000024baa22,0x0000000000000000,0x0000000038a000000,0x0000000000010000,0x000000000024c0000},
+ { 0x00000000000096e2,0x0000005917e302114,0x0000000000079bcc,0x0000000000039d4f0,0x0000000000000000,0x00000059200000000,0x0000000000079000,0x0000000000039e000},
+ { 0x00000000000003a4,0x02f38cf4198b48a46,0x000000000015e995,0x0002e7dd0ef1452fb,0x0000000000000000,0x02f40000000000000,0x0000000000000000,0x0002e800000000000},
+ { 0x0000000000954937,0x016a6ec7187376f67,0x00001b140574d69a,0x00000abb5c373ee31,0x0000000000000000,0x016a8000000000000,0x00001b0000000000,0x00000abc000000000},
+ { 0x000000000000059f,0x000167e2031a1ead7,0x00000000e56ad1d9,0x000000000e5ad7ecf,0x0000000000000000,0x00016800000000000,0x00000000e56ac000,0x000000000e5ad8000},
+ { 0x0000000000000000,0x000012630f311ed65,0x000000000000038b,0x00000000000001009,0x0000000000000000,0x00001268000000000,0x000000000000038b,0x00000000000001009},
+ { 0x000000000000000f,0x000001d386a07b076,0x00000000010e7557,0x000000077bf7f4474,0x0000000000000000,0x000001d4000000000,0x0000000000000000,0x000000077c0000000},
+ { 0x00000000000001c4,0x000000000065a137f,0x0000000000709bdd,0x00000000005c33e81,0x0000000000000000,0x000000000065c0000,0x0000000000700000,0x00000000005c40000},
+ { 0x0000000000032903,0x00000007430254014,0x000000000c90f24b,0x0000000002d9e3b4e,0x0000000000000000,0x00000007440000000,0x000000000c900000,0x0000000002da00000},
+ { 0x0000000000000019,0x03f2cebc506ebc63f,0x0000000000000ef3,0x00000000000533002,0x0000000000000000,0x03f30000000000000,0x0000000000000000,0x00000000000534000},
+ { 0x00000000000e87dc,0x0000074c1f1e9ac3e,0x000000000011c470,0x000000000001e8768,0x0000000000000000,0x0000074e000000000,0x000000000011c400,0x000000000001e8800},
+ { 0x0000000000005f3c,0x003f902c1a59c3b1f,0x00098cfe279df932,0x0003c33599f027b36,0x0000000000000000,0x003fa000000000000,0x0009800000000000,0x0003c400000000000},
+ { 0x000000000001c096,0x0000336f47547b122,0x00000000003c7be6,0x0000009f5c3c27260,0x0000000000000000,0x00003370000000000,0x0000000000000000,0x0000009f800000000},
+ { 0x00000000000001be,0x0165a65ba6a2a0ff3,0x0000aa13f8f11efb,0x001eb885ccf4bc071,0x0000000000000000,0x01660000000000000,0x0000800000000000,0x001ec000000000000},
+ { 0x0000000000000001,0x0015f23dcaf64e729,0x000000000000c7c2,0x000000036c8ec7940,0x0000000000000000,0x0015f800000000000,0x0000000000000000,0x000000036d0000000},
+ { 0x0000000000000151,0x00fcbdceb31328fcf,0x00000000ffe2bba0,0x000000002bacf8023,0x0000000000000000,0x00fcc000000000000,0x00000000ff800000,0x000000002bb000000},
+ { 0x000000000a2a8c9e,0x000000b9709a1b78e,0x000000059b17028d,0x00000019f1fac795a,0x0000000000000000,0x000000b9800000000,0x0000000580000000,0x00000019f80000000},
+ { 0x0000000003520baa,0x0022f5f0f6f06bc36,0x0000000c92a90a31,0x00000004646086410,0x0000000000000000,0x00230000000000000,0x0000000c90000000,0x00000004650000000},
+ { 0x0000000000000002,0x0000007723b733c82,0x0000000000037352,0x00000000000039d64,0x0000000000000000,0x00000077400000000,0x0000000000037350,0x00000000000039d70},
+ { 0x0000000000002584,0x0001d2bfe2612e50c,0x00000000028ee8ba,0x000019e329bbe7aea,0x0000000000000000,0x0001d300000000000,0x0000000000000000,0x000019e8000000000},
+ { 0x000000000000000b,0x0031010683e8a756a,0x0000000171641221,0x00001e579fb7604a6,0x0000000000000000,0x00311000000000000,0x0000000000000000,0x00001e58000000000},
+ { 0x000000000006221e,0x0458472cddf1f95cb,0x0000283a6177f8ec,0x0000880a97aa7deac,0x0000000000000000,0x045a0000000000000,0x0000280000000000,0x00008840000000000},
+ { 0x0000000000000004,0x00000483e3d319313,0x00000000002456a5,0x000000e323d52b5f6,0x0000000000000000,0x00000484000000000,0x0000000000000000,0x000000e3400000000},
+ { 0x0000000000003e98,0x00000000000a5c269,0x0000000000006461,0x00000000000413454,0x0000000000000000,0x00000000000a60000,0x0000000000006000,0x00000000000414000},
+ { 0x0000000c138f1935,0x002f17966dd11a9f7,0x00a2ad4541b07528,0x000c4c348aaaa3b84,0x0000000000000000,0x002f2000000000000,0x00a2a00000000000,0x000c4d00000000000},
+ { 0x0000000000000036,0x000136d5505fa1a48,0x0000000004747f30,0x000000b9df3d6554b,0x0000000000000000,0x00013700000000000,0x0000000000000000,0x000000ba000000000},
+ { 0x000001b7171341b9,0x00005eb3a74a291f3,0x000048568da236a6,0x0000389bef0edadbb,0x0000000000000000,0x00005ec0000000000,0x0000480000000000,0x000038a0000000000},
+ { 0x000000000000001f,0x047790a472ea78150,0x000000000009db08,0x000000000017ec527,0x0000000000000000,0x04780000000000000,0x0000000000098000,0x000000000017f0000},
+ { 0x0000000000000009,0x000000061451baaf5,0x00000000000000ac,0x000000000000274cb,0x0000000000000000,0x00000006160000000,0x0000000000000000,0x00000000000027500},
+ { 0x000000002aa57867,0x0188bfe7917ede6b3,0x0002c5c3fff29919,0x0056bfe37ddb1acec,0x0000000000000000,0x01890000000000000,0x0002000000000000,0x0056c000000000000},
+ { 0x0000000001b593ed,0x000000054c3cbdc09,0x000000000240850f,0x00000002c4a1c1102,0x0000000000000000,0x000000054e0000000,0x0000000000000000,0x00000002c50000000},
+ { 0x0000000000000004,0x036e8e0f93762723d,0x000000000000000d,0x00000000000084cbd,0x0000000000000000,0x036f0000000000000,0x0000000000000000,0x00000000000085000},
+ { 0x0000000000000091,0x0002dfb76773ee5f3,0x00000000001ec721,0x000001c055ac5cee0,0x0000000000000000,0x0002e000000000000,0x0000000000000000,0x000001c0800000000},
+ { 0x000000000c83532d,0x0022c697c08032de1,0x0000d47aee1ef4ac,0x001e277460fba5c50,0x0000000000000000,0x0022d000000000000,0x0000800000000000,0x001e2800000000000},
+ { 0x0000000000000276,0x000007e4e9b6b7d58,0x0000000000080b4e,0x00000000000082943,0x0000000000000000,0x000007e6000000000,0x0000000000080b48,0x00000000000082948},
+ { 0x0000000000000004,0x078b9123f3087a02b,0x000000088f132c89,0x00005b286b69c973e,0x0000000000000000,0x078c0000000000000,0x0000000000000000,0x00005b40000000000},
+ { 0x0000000000000000,0x0015874b71d71cad4,0x00000003fa1da6cf,0x000000197f7026f39,0x0000000000000000,0x00158800000000000,0x0000000380000000,0x00000019800000000},
+ { 0x000000000000007a,0x000002a6f9187303b,0x00000000000018b5,0x000000443b1a43277,0x0000000000000000,0x000002a7000000000,0x0000000000000000,0x00000044400000000},
+ { 0x00000000000063c0,0x000033587691222bc,0x000000000000dd1c,0x00000000ff5e0fff3,0x0000000000000000,0x00003360000000000,0x0000000000000000,0x00000000ff8000000},
+ { 0x000000000000000d,0x0000044d28284037e,0x0000000000000146,0x000000000000226fc,0x0000000000000000,0x0000044e000000000,0x0000000000000100,0x00000000000022700},
+ { 0x0000000000017297,0x000312d2eafecd5aa,0x000000066843dc08,0x0000000093d91cf6a,0x0000000000000000,0x00031300000000000,0x0000000668000000,0x0000000093e000000},
+ { 0x00000000000007b2,0x042b3db16123c4775,0x0000000048b82725,0x0000000066803bf9a,0x0000000000000000,0x042c0000000000000,0x0000000048000000,0x0000000066a000000},
+ { 0x000000000000001b,0x00030e63fa23e0d85,0x0000000000433bf9,0x00000326027d6ed27,0x0000000000000000,0x00030f00000000000,0x0000000000000000,0x00000327000000000},
+ { 0x0000000000000000,0x00000ddd14ab083ae,0x0000000000000096,0x000000000000011dd,0x0000000000000000,0x00000de0000000000,0x0000000000000090,0x000000000000011e0},
+ { 0x000000000001814e,0x0396e961db5c898b2,0x00000000147b5521,0x0001d31c8dccb12cf,0x0000000000000000,0x03970000000000000,0x0000000000000000,0x0001d380000000000},
+ { 0x00000000000174de,0x000000000788ff1a2,0x000000000052938b,0x00000000004b1a17b,0x0000000000000000,0x00000000078a00000,0x0000000000520000,0x00000000004b20000},
+ { 0x000000000028e47c,0x01d4d005d3498ded5,0x000002978b455aa4,0x0000007598eda4d95,0x0000000000000000,0x01d50000000000000,0x0000029600000000,0x00000075a00000000},
+ { 0x0000000000000ca2,0x04e5220040d6e2dc4,0x0000000000047871,0x0000120d546f9c3a4,0x0000000000000000,0x04e60000000000000,0x0000000000000000,0x00001210000000000},
+ { 0x000000000000a56a,0x000000017388dda70,0x00000000000685eb,0x000000000001a3daf,0x0000000000000000,0x00000001740000000,0x0000000000068000,0x000000000001a4000},
+ { 0x0000000000000003,0x000020b25ee39c0fb,0x0000000000000669,0x00000000051db0069,0x0000000000000000,0x000020c0000000000,0x0000000000000000,0x00000000051e00000},
+ { 0x0000000000000019,0x000000071b6d489e3,0x00000000000001ea,0x00000000644ba7d5a,0x0000000000000000,0x000000071c0000000,0x0000000000000000,0x00000000646000000},
+ { 0x0000000574ee3e74,0x001f48b5033c01bcd,0x00000008dce5b507,0x00001c1a56697dfde,0x0000000000000000,0x001f5000000000000,0x0000000000000000,0x00001c20000000000},
+ { 0x0000000000000843,0x00000048f555ed5d2,0x00000002d5634c20,0x00000000600c9fa64,0x0000000000000000,0x00000049000000000,0x00000002d5000000,0x00000000601000000},
+ { 0x0000000000003db6,0x03987aba59a39f19e,0x0000000000043805,0x000000000b012fb99,0x0000000000000000,0x03990000000000000,0x0000000000000000,0x000000000b0400000},
+ { 0x0000000000058350,0x00176b488bbe0517f,0x000001c2cff5738f,0x00078644803d026f4,0x0000000000000000,0x00177000000000000,0x0000000000000000,0x00078800000000000},
+ { 0x0000000000000001,0x000000cec5ad6da75,0x0000000000000654,0x00000000000028c13,0x0000000000000000,0x000000cf000000000,0x0000000000000600,0x00000000000028d00},
+ { 0x0000000000004d15,0x07cdf205873a16d69,0x0000000293dcea0e,0x00000029ff6128fcb,0x0000000000000000,0x07ce0000000000000,0x0000000200000000,0x0000002a000000000},
+ { 0x0000000000000001,0x00000000001dcc30a,0x0000000000000001,0x0000000000000006e,0x0000000000000000,0x00000000001dd0000,0x0000000000000001,0x0000000000000006e},
+ { 0x0000000000000e9e,0x03cc84ff606a43cd5,0x000000000d3cfa5b,0x000001f1afc0e9650,0x0000000000000000,0x03cd0000000000000,0x0000000000000000,0x000001f2000000000},
+ { 0x00000000000002b4,0x0000001a569ed303f,0x0000000000519519,0x00000009ae4e6f045,0x0000000000000000,0x0000001a580000000,0x0000000000000000,0x00000009b00000000},
+ { 0x0000000000000002,0x0001c4c8114bd0944,0x0000000000001e81,0x000000003d42c13df,0x0000000000000000,0x0001c500000000000,0x0000000000000000,0x000000003d5000000},
+ { 0x00000000000003d2,0x00479421649b086b5,0x00000000007cfc7d,0x00000c1f86d2e5f6a,0x0000000000000000,0x0047a000000000000,0x0000000000000000,0x00000c20000000000},
+ { 0x000000000000f372,0x001bb7d2e4b895a41,0x00000000015a4dee,0x000000153f3679536,0x0000000000000000,0x001bb800000000000,0x0000000000000000,0x00000015400000000},
+ { 0x00000000028d650c,0x00004ca8a5096ef5d,0x0000001a5d07b2ed,0x000000041848cdf91,0x0000000000000000,0x00004cc0000000000,0x0000001a50000000,0x00000004190000000},
+ { 0x0000000000000dbe,0x00000029b253a0aee,0x0000000000064059,0x00000000003dfc8ee,0x0000000000000000,0x00000029c00000000,0x0000000000060000,0x00000000003e00000},
+ { 0x000000000000000c,0x001548345fed2a988,0x0000000000007623,0x0000000000001d8da,0x0000000000000000,0x00155000000000000,0x0000000000007600,0x0000000000001d900},
+ { 0x00000000327ce32f,0x006505a8bd2dc1866,0x01beaf12d81f87e8,0x0055f892d3df1b5d1,0x0000000000000000,0x00652000000000000,0x01be000000000000,0x00560000000000000},
+ { 0x000000000000020b,0x0000000002756346f,0x000000000000050a,0x00000000000038f40,0x0000000000000000,0x00000000027600000,0x0000000000000500,0x00000000000039000},
+ { 0x000000000000006d,0x0000001a5f552482f,0x000000000002ee3d,0x000000000000c6053,0x0000000000000000,0x0000001a600000000,0x000000000002ec00,0x000000000000c6400},
+ { 0x0000000484c60580,0x01f4c7d8bd059c616,0x0000012bcf8bf26a,0x009e22dc06f538fcd,0x0000000000000000,0x01f50000000000000,0x0000000000000000,0x009e4000000000000},
+ { 0x000000000000000e,0x00000065322bca7e1,0x0000000000000b61,0x000000000017dc5cc,0x0000000000000000,0x00000065400000000,0x0000000000000000,0x000000000017e0000},
+ { 0x0000000000f9db26,0x020ef40bdde02ecad,0x0000606b9fe0a7f2,0x0000b97654a350170,0x0000000000000000,0x020f0000000000000,0x0000600000000000,0x0000b980000000000},
+ { 0x0000000000000002,0x0000000f725f47e84,0x0000000000000006,0x0000000000006fa42,0x0000000000000000,0x0000000f740000000,0x0000000000000000,0x0000000000006fc00},
+ { 0x00000000000019da,0x0000324d46c18bfc4,0x000000006a5b1e36,0x00000004d7948e876,0x0000000000000000,0x00003250000000000,0x0000000060000000,0x00000004d80000000},
+ { 0x000000000000bfcd,0x00d7ba60fc9588585,0x002ee41db2d2e523,0x00033a3942565afe5,0x0000000000000000,0x00d7c000000000000,0x002ee40000000000,0x00033a40000000000},
+ { 0x00000000000161be,0x03cd7c08e06ad3d86,0x00000000000e4e20,0x0000000001de93bc5,0x0000000000000000,0x03ce0000000000000,0x0000000000080000,0x0000000001df00000},
+ { 0x000000000b089213,0x0000a8c983268c10c,0x000003a492ca1ae3,0x000018de2d3b13cc5,0x0000000000000000,0x0000a900000000000,0x0000038000000000,0x000018e0000000000},
+ { 0x0000000000000000,0x000053f81a16e8174,0x0000000004b94e1d,0x00001233c87b2d495,0x0000000000000000,0x00005400000000000,0x0000000000000000,0x00001238000000000},
+ { 0x00000000000000e4,0x00012d560d7a8d6de,0x00000000000057d7,0x000000037233013f8,0x0000000000000000,0x00012d80000000000,0x0000000000000000,0x00000003730000000},
+ { 0x0000000000000031,0x002ec3463537719d8,0x000025df7948c9b5,0x00000d30f48f1bc3f,0x0000000000000000,0x002ed000000000000,0x000025c000000000,0x00000d34000000000},
+ { 0x0000000000003125,0x00f8d4c0b566202bf,0x0001027fc4283f5c,0x0003e910f2ef42e28,0x0000000000000000,0x00f90000000000000,0x0001000000000000,0x0003ea00000000000},
+ { 0x00000000000000fb,0x0002c63697928695c,0x0000010a39106854,0x0000ebde2fb5f47bb,0x0000000000000000,0x0002c700000000000,0x0000000000000000,0x0000ec00000000000},
+ { 0x0000000000000010,0x00d438c0364d62570,0x000000000004d978,0x000004666624e0886,0x0000000000000000,0x00d44000000000000,0x0000000000000000,0x00000468000000000},
+ { 0x000000012c28a7f1,0x0003db47c163ce593,0x000071d2578ab5a1,0x00032eb32976e825f,0x0000000000000000,0x0003dc00000000000,0x0000700000000000,0x00032f00000000000},
+ { 0x000000000000010c,0x00000000015f138cc,0x000000000000038b,0x000000000000027b0,0x0000000000000000,0x00000000015f80000,0x0000000000000380,0x000000000000027b0},
+ { 0x000000000000030a,0x06ca7299d0b35b214,0x000000000001019b,0x00000000543cd7e64,0x0000000000000000,0x06cc0000000000000,0x0000000000000000,0x00000000544000000},
+ { 0x000000005de7c6e9,0x017f636b189bda909,0x00000019583ae34a,0x0000305738087c0c6,0x0000000000000000,0x017f8000000000000,0x0000000000000000,0x00003060000000000},
+ { 0x0000000000000003,0x010fe76d4cc719679,0x000000000000011f,0x000001e604aa40d07,0x0000000000000000,0x01100000000000000,0x0000000000000000,0x000001e6800000000},
+ { 0x0000000000000001,0x0003d2bd5e3ba1d28,0x0000001071a79e59,0x000062bdfb49e61dc,0x0000000000000000,0x0003d300000000000,0x0000000000000000,0x000062c0000000000},
+ { 0x0000000000000791,0x0004a74139f983c0a,0x00000000000010b3,0x000000000095ed3cf,0x0000000000000000,0x0004a800000000000,0x0000000000000000,0x00000000009600000},
+ { 0x000000000000001d,0x000004f46655d1e5a,0x0000000000884313,0x00000000003e81e43,0x0000000000000000,0x000004f6000000000,0x0000000000880000,0x00000000003e90000},
+ { 0x0000000000abb351,0x0004737e1b787a844,0x000000002663f920,0x00000000044845ce2,0x0000000000000000,0x00047400000000000,0x0000000026600000,0x00000000044880000},
+ { 0x000000000001def6,0x00000007d65fff985,0x00000000034381e4,0x0000000008fc75592,0x0000000000000000,0x00000007d80000000,0x0000000003400000,0x00000000090000000},
+ { 0x0000000000000027,0x00031c87e2b90a0d6,0x0000002b9c0e40ec,0x000000b6b9a32591a,0x0000000000000000,0x00031d00000000000,0x0000002800000000,0x000000b6c00000000},
+ { 0x0000000000000006,0x00007ec7f025c11f7,0x0000000000005382,0x00000000009e29a13,0x0000000000000000,0x00007ee0000000000,0x0000000000000000,0x00000000009e40000},
+ { 0x0000000000000000,0x00009e15032dcebd4,0x0000000000000038,0x0000000002b8fd05f,0x0000000000000000,0x00009e40000000000,0x0000000000000000,0x0000000002b900000},
+ { 0x0000000000002fdc,0x00003dc7769143380,0x0000000000071d60,0x0000000026d9a87e6,0x0000000000000000,0x00003dd0000000000,0x0000000000000000,0x0000000026e000000},
+ { 0x0000000000000001,0x0000000000027459e,0x00000000000039ec,0x00000000000005be3,0x0000000000000000,0x00000000000275000,0x00000000000039e0,0x00000000000005bf0},
+ { 0x000000000ec7f166,0x0007562815ef72337,0x00000003161ed9a2,0x0000000cff5c6f427,0x0000000000000000,0x00075800000000000,0x0000000300000000,0x0000000d000000000},
+ { 0x0000000000013510,0x08119d115479f2b2f,0x00000000000e0d3e,0x00001b34139a2384e,0x0000000000000000,0x08140000000000000,0x0000000000000000,0x00001b38000000000},
+ { 0x0000000000000022,0x001a65ddce5be0ebb,0x00014ebaa11456a3,0x000046d6bc3ec6de7,0x0000000000000000,0x001a6800000000000,0x00014e0000000000,0x000046e0000000000},
+ { 0x000000000000007e,0x0000003f665d9339c,0x000000012e146118,0x0000000cb5050372a,0x0000000000000000,0x0000003f700000000,0x0000000100000000,0x0000000cb80000000},
+ { 0x000000000000004b,0x00000000006e26e3a,0x000000000021db35,0x000000000062eff91,0x0000000000000000,0x00000000006e40000,0x0000000000200000,0x00000000006300000},
+ { 0x0000000000000001,0x0000000001b927f87,0x000000000000000d,0x00000000000002703,0x0000000000000000,0x0000000001b980000,0x0000000000000000,0x00000000000002710},
+ { 0x0000007e22f4a96b,0x069c269cd7febe99a,0x000003cce99b4abb,0x000001b480a6c030b,0x0000000000000000,0x069e0000000000000,0x000003c800000000,0x000001b5000000000},
+ { 0x0000000000000003,0x09ea75006e032cea6,0x000000000000029a,0x0000000000153179c,0x0000000000000000,0x09ec0000000000000,0x0000000000000000,0x00000000001538000},
+ { 0x0000000000000126,0x000005896cc19e3f9,0x00000000000009b3,0x00000000009b50a02,0x0000000000000000,0x0000058a000000000,0x0000000000000000,0x00000000009b80000},
+ { 0x00000000000000db,0x00000015277dc2581,0x00000000000003e0,0x000000000004c2b9b,0x0000000000000000,0x00000015280000000,0x0000000000000000,0x000000000004c4000},
+ { 0x0000000000fa6ef5,0x00000d235c10b98e9,0x000000d75e403e5c,0x0000003f6409910f4,0x0000000000000000,0x00000d24000000000,0x000000d700000000,0x0000003f700000000},
+ { 0x0000000000000680,0x00022edf6b11cf601,0x0000000000002258,0x00000000042ceddcd,0x0000000000000000,0x00022f00000000000,0x0000000000000000,0x00000000042e00000},
+ { 0x0000000000000e44,0x0037d8a3fa9d5828e,0x000000000022c3fc,0x00004cf6e34e3f280,0x0000000000000000,0x0037e000000000000,0x0000000000000000,0x00004d00000000000},
+ { 0x0000000000d847c1,0x0000e071a8d763d51,0x0000000f338e082f,0x0000000120dc98364,0x0000000000000000,0x0000e080000000000,0x0000000f33000000,0x0000000120e000000},
+ { 0x0000000000000355,0x001f5680a93634473,0x000000001aba7a5d,0x000000016487098d4,0x0000000000000000,0x001f5800000000000,0x0000000018000000,0x00000001650000000},
+ { 0x0000000000004c8f,0x0000032b7a2ae92b2,0x0000000001da7850,0x00000000002387a6a,0x0000000000000000,0x0000032c000000000,0x0000000001da6000,0x00000000002388000},
+ { 0x0000000000030308,0x0009c46d250f6d697,0x0000000000036be0,0x0001591a3f5541b05,0x0000000000000000,0x0009c800000000000,0x0000000000000000,0x00015980000000000},
+ { 0x000000000000016e,0x0000003c54cb3c0b6,0x00000000055f6930,0x0000000125b14f3d1,0x0000000000000000,0x0000003c600000000,0x0000000000000000,0x00000001260000000},
+ { 0x0000000000000007,0x0516873e3b5312514,0x00000000c61739e2,0x008afcec16b320c66,0x0000000000000000,0x05180000000000000,0x0000000000000000,0x008b0000000000000},
+ { 0x0000000000000351,0x011289e792e61637f,0x00000000008fc229,0x0000000b57e3a75cf,0x0000000000000000,0x01130000000000000,0x0000000000000000,0x0000000b580000000},
+ { 0x000000000000003e,0x0000000001934cf23,0x00000000000579fa,0x000000000002c8ff5,0x0000000000000000,0x00000000019380000,0x0000000000057000,0x000000000002c9000},
+ { 0x0000000000000036,0x000252619a7f8188c,0x000000000000003c,0x000000000000004f8,0x0000000000000000,0x00025300000000000,0x000000000000003c,0x000000000000004f8},
+ { 0x000000000000000f,0x0000ba0e18cb6d5ce,0x0000000000000547,0x00000000158b1c929,0x0000000000000000,0x0000ba40000000000,0x0000000000000000,0x00000000159000000},
+ { 0x0000000000000005,0x005de93d370b13854,0x0000000000234646,0x0000000000a0a58c5,0x0000000000000000,0x005e0000000000000,0x0000000000200000,0x0000000000a0c0000},
+ { 0x0000000000000002,0x0005fc3d93c988bc6,0x000006ab41ae462c,0x000000c0fb718af50,0x0000000000000000,0x0005fe00000000000,0x000006aa00000000,0x000000c1000000000},
+ { 0x000000000000001b,0x003c7c24d81a9f598,0x000000000000002a,0x00001710c8d295e26,0x0000000000000000,0x003c8000000000000,0x0000000000000000,0x00001718000000000},
+ { 0x0000000000000001,0x00000027f94d08e0c,0x000000000128e2f7,0x0000002548c7f7037,0x0000000000000000,0x00000028000000000,0x0000000000000000,0x00000025500000000},
+ { 0x0000000000000016,0x02ffb16b2b4bad5b1,0x00002560033507a8,0x000038a4e9aac0a19,0x0000000000000000,0x03000000000000000,0x0000250000000000,0x000038b0000000000},
+ { 0x0000000000000000,0x006d9107c98f6e28e,0x000000000000000c,0x00000f7dcf8868306,0x0000000000000000,0x006da000000000000,0x0000000000000000,0x00000f80000000000},
+ { 0x0000000000000018,0x0000000076d9d0a22,0x000000000000074a,0x0000000000005b3a5,0x0000000000000000,0x0000000076e000000,0x0000000000000600,0x0000000000005b400},
+ { 0x0000000000007dd6,0x0015d6e7ed7ec1ae9,0x000f1e2ed53a3af0,0x00107ad4715e1e44f,0x0000000000000000,0x0015d800000000000,0x000f000000000000,0x00107c00000000000},
+ { 0x000000000000c5f7,0x04505b96217b3bd77,0x005e2bf10860097b,0x001177a1e4edf6985,0x0000000000000000,0x04520000000000000,0x005e000000000000,0x00117800000000000},
+ { 0x00000000000000e9,0x000000000000c9b0a,0x000000000000050e,0x000000000000347d6,0x0000000000000000,0x000000000000c9c00,0x0000000000000500,0x00000000000034800},
+ { 0x0000000000000002,0x00000af1b2eb15538,0x000000000001a984,0x00000003553bd24f8,0x0000000000000000,0x00000af4000000000,0x0000000000000000,0x00000003560000000},
+ { 0x0000000000000005,0x0a8e16f9ecf3ef373,0x000000000000019b,0x0000040a127bb6831,0x0000000000000000,0x0a900000000000000,0x0000000000000000,0x0000040c000000000},
+ { 0x00000000009e2de1,0x000021ff49545e038,0x00000000047c7b7a,0x0000000000daffd86,0x0000000000000000,0x00002200000000000,0x00000000047c0000,0x0000000000db00000},
+ { 0x0000000000000041,0x0deb30f4647fc5030,0x0000000007e7fbcb,0x0000000f99f98da99,0x0000000000000000,0x0dec0000000000000,0x0000000000000000,0x0000000f9c0000000},
+ { 0x0000000000000004,0x000000001c2dfd41e,0x0000000000000036,0x0000000018fe39f75,0x0000000000000000,0x000000001c3000000,0x0000000000000000,0x00000000190000000},
+ { 0x0000000000000b4b,0x0000001af54c953af,0x000000000001f9a1,0x00000000006511513,0x0000000000000000,0x0000001af80000000,0x0000000000000000,0x00000000006520000},
+ { 0x00000000000001dd,0x00020410448a6bccc,0x0000000010e5a1ed,0x000006aa3affd261c,0x0000000000000000,0x00020500000000000,0x0000000000000000,0x000006ac000000000},
+ { 0x000000000000003f,0x000a75b553c436d1b,0x000000000000773a,0x0000003be90edecb8,0x0000000000000000,0x000a7800000000000,0x0000000000000000,0x0000003bf00000000},
+ { 0x0000000000042dbf,0x000067104a6c5d496,0x000000008f6d4286,0x0000000bc5fc6b084,0x0000000000000000,0x00006720000000000,0x0000000080000000,0x0000000bc80000000},
+ { 0x0000000000001445,0x000f51548e7772d49,0x00000000007a750a,0x000000000fe870d5a,0x0000000000000000,0x000f5400000000000,0x0000000000400000,0x000000000fec00000},
+ { 0x00000000000047db,0x00a69ca77403c55a1,0x00027f6222328be7,0x001f64f8c3dcb3b9a,0x0000000000000000,0x00a6c000000000000,0x0002000000000000,0x001f6800000000000},
+ { 0x000000000000002b,0x000000010cd6ebd20,0x00000000000001d1,0x0000000000006cf92,0x0000000000000000,0x000000010d0000000,0x0000000000000000,0x0000000000006d000},
+ { 0x0000000000000001,0x00000001ca7d44ad1,0x000000000000001e,0x0000000001c1ee7d2,0x0000000000000000,0x00000001ca8000000,0x0000000000000000,0x0000000001c200000},
+ { 0x0000000000000002,0x0000000000000238d,0x0000000000000608,0x0000000000000114a,0x0000000000000000,0x00000000000002390,0x0000000000000608,0x0000000000000114a},
+ { 0x00000000000029c1,0x000005bd5819bd3b9,0x00000001152dbbb6,0x000000002ed4420b6,0x0000000000000000,0x000005be000000000,0x0000000115000000,0x000000002ed800000},
+ { 0x0000000000002922,0x00000472162bbc582,0x000000000002ce24,0x0000000d83cddda07,0x0000000000000000,0x00000474000000000,0x0000000000000000,0x0000000d840000000},
+ { 0x0000000000000018,0x0000048962b7086d5,0x0000000000048402,0x0000004da28b3108a,0x0000000000000000,0x0000048a000000000,0x0000000000000000,0x0000004dc00000000},
+ { 0x00000000005bd70a,0x000159106232212f4,0x0000000837c35121,0x0000003547928ef1a,0x0000000000000000,0x00015980000000000,0x0000000800000000,0x00000035500000000},
+ { 0x000000000000085d,0x003a9b03a18de4346,0x0000000000193dac,0x00000003c7524f88c,0x0000000000000000,0x003aa000000000000,0x0000000000000000,0x00000003c80000000},
+ { 0x0000000000000001,0x0000000af00f6b88f,0x0000000000000005,0x000000003076f7132,0x0000000000000000,0x0000000af40000000,0x0000000000000000,0x00000000308000000},
+ { 0x00000000000f9fd4,0x00000000000dd6f17,0x00000000001aaf37,0x000000000005840ef,0x00000000000f8000,0x00000000000dd8000,0x00000000001aa000,0x00000000000585000},
+ { 0x000000000064c6f6,0x00000006482c846ca,0x00000000ef49f21b,0x00000000333de6c2f,0x0000000000000000,0x000000064a0000000,0x00000000ef000000,0x00000000334000000},
+ { 0x000000000000001e,0x06d46fa221e82bcd9,0x0000000006293bd7,0x00000000010a53cae,0x0000000000000000,0x06d60000000000000,0x0000000006280000,0x00000000010a80000},
+ { 0x0000000000007450,0x0003e08592a6d3b9d,0x00000000031167f5,0x00000000009aa5e74,0x0000000000000000,0x0003e100000000000,0x0000000003100000,0x00000000009ac0000},
+ { 0x0000000000000011,0x006c2e33ab8556bbf,0x0000000000000093,0x0000000001c418745,0x0000000000000000,0x006c4000000000000,0x0000000000000000,0x0000000001c480000},
+ { 0x0000000000000004,0x0002ee783da2018f1,0x0000000000000360,0x0000000bf86f855b5,0x0000000000000000,0x0002ef00000000000,0x0000000000000000,0x0000000bfc0000000},
+ { 0x0000000379f7c598,0x001560d07a78dd0c7,0x00000c5a55943aef,0x0000c093523ac3367,0x0000000000000000,0x00156800000000000,0x00000c0000000000,0x0000c0c0000000000},
+ { 0x000000065393882e,0x002b3046f5a924f33,0x000224f9fd1e202a,0x0000271a0927552f9,0x0000000000000000,0x002b4000000000000,0x000224e000000000,0x0000271c000000000},
+ { 0x00000000000003a8,0x043bec3a91c0bbafc,0x000000220dde7564,0x0023e09315929c746,0x0000000000000000,0x043c0000000000000,0x0000000000000000,0x0023f000000000000},
+ { 0x0000000000000012,0x00000001019da9612,0x000000000001bc04,0x0000000001317d172,0x0000000000000000,0x00000001020000000,0x0000000000000000,0x00000000013180000},
+ { 0x0000000000000008,0x002d01a2ac05def2e,0x00000158da118de5,0x00060817d4c38c40e,0x0000000000000000,0x002d1000000000000,0x0000000000000000,0x00060a00000000000},
+ { 0x00000000000000d0,0x000001ccc281bda1d,0x000000000000063b,0x0000000000bfbde1f,0x0000000000000000,0x000001cd000000000,0x0000000000000000,0x0000000000bfc0000},
+ { 0x00000000001355f5,0x00000b9e9dd3f19df,0x000027dda95fe0a7,0x0000036dc6aa04176,0x0000000000000000,0x00000ba0000000000,0x000027dc00000000,0x0000036e000000000},
+ { 0x0000000025f01817,0x0a348aa4e57761bcd,0x000000002e1dc55e,0x000dd290d51ce969d,0x0000000000000000,0x0a380000000000000,0x0000000000000000,0x000dd400000000000},
+ { 0x00000000003e2be3,0x0000dbbcdbf982c5a,0x000000003b2f62af,0x000001f32f118137a,0x0000000000000000,0x0000dbc0000000000,0x0000000000000000,0x000001f3800000000},
+ { 0x0000000000000001,0x000aac69e8bfe757a,0x000000000351328a,0x00000ca4578f9c4a6,0x0000000000000000,0x000ab000000000000,0x0000000000000000,0x00000ca8000000000},
+ { 0x000000000000fd9f,0x011dda917c94c7987,0x00000000032e0f84,0x0019f932d38f48def,0x0000000000000000,0x011e0000000000000,0x0000000000000000,0x001a0000000000000},
+ { 0x0000000209de774b,0x0000000563264aa3d,0x000000023da330ba,0x00000000699c3fdaa,0x0000000200000000,0x00000005640000000,0x000000023c000000,0x0000000069a000000},
+ { 0x000000000000bbc2,0x001abe9efc8b8fbc2,0x000000e09d88938d,0x0000002d76589acf5,0x0000000000000000,0x001ac000000000000,0x000000e080000000,0x0000002d780000000},
+ { 0x000000000000003f,0x033c7731dbee3d218,0x00000472dd148dd2,0x000f60bd3dce15467,0x0000000000000000,0x033d0000000000000,0x0000000000000000,0x000f6400000000000},
+ { 0x0000000000000ecc,0x01bc3dec44c9f421f,0x00001a9d37a84b66,0x018d584013ad68bf4,0x0000000000000000,0x01bc8000000000000,0x0000000000000000,0x018d8000000000000},
+ { 0x0000000000d10e66,0x0003b82d8c3803578,0x0000002d3b0a516d,0x00000079c146ecd84,0x0000000000000000,0x0003b900000000000,0x0000002c00000000,0x00000079e00000000},
+ { 0x0000000000000021,0x00005518c35461a25,0x0000000000000036,0x00000000000002c2a,0x0000000000000000,0x00005520000000000,0x0000000000000030,0x00000000000002c30},
+ { 0x000000000000dadf,0x053a95f88f55f5c77,0x000000000001eb27,0x0000000000008119c,0x0000000000000000,0x053c0000000000000,0x000000000001ea00,0x00000000000081200},
+ { 0x000000000002eb8a,0x00560b974935c7ed9,0x00005ff023c4d091,0x0000e64131fc12901,0x0000000000000000,0x00562000000000000,0x00005c0000000000,0x0000e680000000000},
+ { 0x0000000000000027,0x000087af080c55f68,0x0000000000000514,0x0000000000002d692,0x0000000000000000,0x000087c0000000000,0x0000000000000500,0x0000000000002d700},
+ { 0x0000000000000007,0x00004ce2b2000811b,0x00000000001bd584,0x000005390b6fc9d2a,0x0000000000000000,0x00004d00000000000,0x0000000000000000,0x0000053a000000000},
+ { 0x0000000000030099,0x00000a3878ee3d7d8,0x0000000000158c73,0x0000000fed8d4a42b,0x0000000000000000,0x00000a3c000000000,0x0000000000000000,0x0000000ff00000000},
+ { 0x000000000000003e,0x00000144180e3074b,0x000000001e375ec2,0x00000001063467172,0x0000000000000000,0x00000144800000000,0x0000000018000000,0x00000001068000000},
+ { 0x000000000000000f,0x00865b8f44b2df30c,0x0000000000000025,0x00000001720d51949,0x0000000000000000,0x00868000000000000,0x0000000000000000,0x00000001728000000},
+ { 0x0000000000148e90,0x0000054b82bc3280e,0x000000000e7e1edf,0x0000000641e311cab,0x0000000000000000,0x0000054c000000000,0x0000000000000000,0x00000006420000000},
+ { 0x0000000000b4a72e,0x00f23b116e8928dcc,0x0000000000fe2f55,0x0000c60e6cbe2a38a,0x0000000000000000,0x00f24000000000000,0x0000000000000000,0x0000c640000000000},
+ { 0x0000000000005c5b,0x000393e75c92a8b4e,0x00000000026df869,0x00006ae8eb4c66d55,0x0000000000000000,0x00039400000000000,0x0000000000000000,0x00006b00000000000},
+ { 0x0000000019effd0a,0x000f97b7cea1a360c,0x000000006c5e88be,0x00036a1e47c454d06,0x0000000000000000,0x000f9800000000000,0x0000000000000000,0x00036b00000000000},
+ { 0x000000000060cd12,0x005207b75a4467f00,0x00000000701e95b1,0x000000000af67af91,0x0000000000000000,0x00522000000000000,0x0000000070100000,0x000000000af700000},
+ { 0x000000000002d7d5,0x0e1f88b25cd046afa,0x00000000005c9881,0x00693827c9d6f1147,0x0000000000000000,0x0e200000000000000,0x0000000000000000,0x00694000000000000},
+ { 0x0000000000029dde,0x0000000035f43f0d2,0x00000000001cca7a,0x00000000007185a75,0x0000000000000000,0x00000000360000000,0x00000000001c0000,0x000000000071a0000},
+ { 0x000000006f1d6b51,0x000fdcb471605d5f5,0x0001e4535d266033,0x0000f38f599ac860d,0x0000000000000000,0x000fe000000000000,0x0001e40000000000,0x0000f3c0000000000},
+ { 0x0000000000005b6c,0x0000ad088521b3316,0x000000d1d910fe91,0x000011f8bc9b9e62b,0x0000000000000000,0x0000ad40000000000,0x0000008000000000,0x00001200000000000},
+ { 0x0000000000000002,0x00135ef85013f464f,0x00082c0857380800,0x00008e63100196b48,0x0000000000000000,0x00136000000000000,0x00082c0000000000,0x00008e64000000000},
+ { 0x0000000000000250,0x0242e89de9e160a91,0x0000000005dd3c86,0x00000784565b46f66,0x0000000000000000,0x02430000000000000,0x0000000000000000,0x00000786000000000},
+ { 0x00000000000017a2,0x0000000000007a91f,0x0000000000003215,0x00000000000008aa7,0x0000000000001600,0x0000000000007aa00,0x0000000000003200,0x00000000000008ac0},
+ { 0x000000003410eb80,0x0003a9077bf476309,0x000000376b2d10da,0x0000cd072e868fe36,0x0000000000000000,0x0003aa00000000000,0x0000000000000000,0x0000cd40000000000},
+ { 0x000000000000001a,0x0000000ea5772ad42,0x0000000000001f0e,0x0000000000004d461,0x0000000000000000,0x0000000ea80000000,0x0000000000001e00,0x0000000000004d600},
+ { 0x00000000002571f3,0x0007229e18902b3ff,0x00000d7d11d92938,0x0000ff76e464798e1,0x0000000000000000,0x00072400000000000,0x00000c0000000000,0x0000ff80000000000},
+ { 0x0000000000000001,0x01a51383363d2d75b,0x000000000000a7a6,0x0000000000006d8c1,0x0000000000000000,0x01a58000000000000,0x000000000000a600,0x0000000000006da00},
+ { 0x0000000000000056,0x00000a46596944cbb,0x000000000000019a,0x0000000000015d5cb,0x0000000000000000,0x00000a48000000000,0x0000000000000000,0x0000000000015d800},
+ { 0x0000000000000015,0x00000057e0be21ce1,0x000000000085a1a9,0x000000000bd65275f,0x0000000000000000,0x00000058000000000,0x0000000000800000,0x000000000bd800000},
+ { 0x0000000000d285bf,0x03b06c32069028765,0x0000004c5d3de968,0x00026658ecca9cc4b,0x0000000000000000,0x03b10000000000000,0x0000000000000000,0x00026700000000000},
+ { 0x000000000000000c,0x0000005cb3a22a310,0x00000000002f6a32,0x000000000005fa467,0x0000000000000000,0x0000005cc00000000,0x00000000002f6000,0x000000000005fb000},
+ { 0x00000000000002fa,0x0034cc3045d313fd4,0x000001a655c4306b,0x000092b628711949f,0x0000000000000000,0x0034d000000000000,0x0000000000000000,0x000092c0000000000},
+ { 0x0000000000000005,0x006b4bb0cee5fc1f8,0x00000000000000a4,0x000000000000003f3,0x0000000000000000,0x006b6000000000000,0x00000000000000a4,0x000000000000003f3},
+ { 0x000000003619072b,0x00001f99d99e75604,0x00000000f26bfd33,0x00000077138c0fe86,0x0000000000000000,0x00001fa0000000000,0x0000000000000000,0x00000077200000000},
+ { 0x000000000000f2c0,0x0001e49c6d7305a92,0x00000c6833ef3c90,0x00000e93ba7bfd174,0x0000000000000000,0x0001e500000000000,0x00000c4000000000,0x00000e94000000000},
+ { 0x0000000014659be8,0x000e78b2053f5bfc7,0x0000000050a90c7c,0x0000005118f91c6d5,0x0000000000000000,0x000e7c00000000000,0x0000000000000000,0x00000051200000000},
+ { 0x000000000000002d,0x000df93552f854ee0,0x0000000000061013,0x000000000001bc513,0x0000000000000000,0x000dfc00000000000,0x0000000000061000,0x000000000001bc800},
+ { 0x0000000001c3bcfd,0x003846be8ab449d1d,0x00001e03065702ca,0x00001751f00ac84e7,0x0000000000000000,0x00385000000000000,0x00001e0000000000,0x00001758000000000},
+ { 0x000000000000001a,0x00000000c0562fc1a,0x00000000037dcada,0x000000000051d4c71,0x0000000000000000,0x00000000c08000000,0x00000000037d8000,0x000000000051d8000},
+ { 0x0000000000006ae2,0x001259a5c1e7d339a,0x0000000011023e6f,0x00013777ebe56019f,0x0000000000000000,0x00126000000000000,0x0000000000000000,0x00013780000000000},
+ { 0x0000000000029ed4,0x0000037ad4b898942,0x000000e4f9621aeb,0x000002d986fe7fa50,0x0000000000000000,0x0000037b000000000,0x000000e000000000,0x000002da000000000},
+ { 0x0000000000000007,0x00001be9fe33bb503,0x00000000000005c7,0x00000000000002c27,0x0000000000000000,0x00001bf0000000000,0x00000000000005c0,0x00000000000002c30},
+ { 0x0000000002b1f7e4,0x009704b599eb04652,0x0000000054775ad8,0x00000024287488f96,0x0000000000000000,0x00974000000000000,0x0000000000000000,0x00000024300000000},
+ { 0x000000000000000a,0x00002ac42c9440b70,0x000000000000d034,0x0000083ae386a0840,0x0000000000000000,0x00002ad0000000000,0x0000000000000000,0x0000083c000000000},
+ { 0x0000000000000d24,0x000006016be15003b,0x000000000003efea,0x000000000d574ac33,0x0000000000000000,0x00000602000000000,0x0000000000000000,0x000000000d5800000},
+ { 0x00000000000006d2,0x000001d7f0982b3b6,0x0000000000019192,0x000000157d0bd88e9,0x0000000000000000,0x000001d8000000000,0x0000000000000000,0x00000015800000000},
+ { 0x000000000000001f,0x00022fbe53ba1ec75,0x000000004ccc8188,0x00000a9d2db2b4a35,0x0000000000000000,0x00023000000000000,0x0000000000000000,0x00000aa0000000000},
+ { 0x000000000000000f,0x00046615ff49ae736,0x000000000006ed1f,0x000006d21588daf4f,0x0000000000000000,0x00046800000000000,0x0000000000000000,0x000006d4000000000},
+ { 0x000001ec123adfc0,0x00000835e42c6fc92,0x00000316e1e9c74c,0x0000049d0177e1836,0x000001c000000000,0x00000838000000000,0x0000030000000000,0x0000049e000000000},
+ { 0x00000000000346f8,0x00009a43ce39a680f,0x000000000003a3b7,0x000000000114a1979,0x0000000000000000,0x00009a80000000000,0x0000000000000000,0x00000000011500000},
+ { 0x000000000000002a,0x000008e9b5696ffca,0x0000000000000843,0x00000000045df1666,0x0000000000000000,0x000008ec000000000,0x0000000000000000,0x00000000045e00000},
+ { 0x0000000000000001,0x0000168c2762f7f23,0x000000000000002f,0x000000000002b9666,0x0000000000000000,0x00001690000000000,0x0000000000000000,0x000000000002ba000},
+ { 0x000000000006410c,0x005f4e019191564b2,0x000000000022e9ea,0x000000000007fa76b,0x0000000000000000,0x005f6000000000000,0x000000000022e000,0x000000000007fc000},
+ { 0x0000000034ae0467,0x0291aec034dbcb3e4,0x0000001aaff5eeab,0x00007666b164c1627,0x0000000000000000,0x02920000000000000,0x0000000000000000,0x00007680000000000},
+ { 0x00000000000000e7,0x00000322e9ed9d7e0,0x000000000000017f,0x000000d1b021755a1,0x0000000000000000,0x00000323000000000,0x0000000000000000,0x000000d1c00000000},
+ { 0x0000000000000002,0x000b824304bdafce4,0x0000000000189102,0x000000001326226e8,0x0000000000000000,0x000b8400000000000,0x0000000000000000,0x00000000132800000},
+ { 0x000000000b66aab9,0x0006908282226b3e4,0x0000003b8e5f410f,0x000182e114d06636f,0x0000000000000000,0x00069200000000000,0x0000000000000000,0x00018300000000000},
+ { 0x0000000000000000,0x00010227d6a5df67f,0x0000000001c6646e,0x000000001623c5807,0x0000000000000000,0x00010280000000000,0x0000000001800000,0x00000000162800000},
+ { 0x000000000025408a,0x0000381d211ebe962,0x0000000006af4632,0x00000000823bc75f3,0x0000000000000000,0x00003820000000000,0x0000000004000000,0x00000000824000000},
+ { 0x00000000002bd7c0,0x00f6775b051113d40,0x00000005969e5ac0,0x00000726cca7ec453,0x0000000000000000,0x00f68000000000000,0x0000000000000000,0x00000728000000000},
+ { 0x0000000000000044,0x02686875be0d7ace4,0x00000000000024ba,0x00000000000005731,0x0000000000000000,0x02690000000000000,0x00000000000024b0,0x00000000000005740},
+ { 0x00000000000007df,0x00161be1020c5912f,0x0000000052cf206c,0x0000036df1d070341,0x0000000000000000,0x00162000000000000,0x0000000000000000,0x0000036e000000000},
+ { 0x00000000197ab750,0x0005e2088586dc799,0x00000dc32a8ba3fd,0x00000329ffbdfbe56,0x0000000000000000,0x0005e400000000000,0x00000dc000000000,0x0000032a000000000},
+ { 0x0000000000000008,0x00f76769a57b5a7c6,0x0000000000000021,0x000000000000046ad,0x0000000000000000,0x00f78000000000000,0x0000000000000020,0x000000000000046c0},
+ { 0x0000000000172c14,0x00016c8de1050d464,0x000000000025349a,0x000000000fbe247bc,0x0000000000000000,0x00016d00000000000,0x0000000000000000,0x000000000fc000000},
+ { 0x00000000000effdb,0x0000000945daac180,0x0000000000a1fe32,0x0000000000173cefc,0x0000000000000000,0x00000009480000000,0x0000000000a1c000,0x00000000001740000},
+ { 0x00000000000005c0,0x0000007853b329db9,0x000000000e573926,0x00000000186aaf515,0x0000000000000000,0x00000078600000000,0x000000000e000000,0x00000000187000000},
+ { 0x000001b6a862fa5c,0x004bc477fa09b751a,0x000958340694909d,0x0000baf408ef9d5a1,0x0000000000000000,0x004be000000000000,0x0009580000000000,0x0000bb00000000000},
+ { 0x0000000000007290,0x0004e65aa8cfa6c81,0x0000000005c32e18,0x00000045ff2293620,0x0000000000000000,0x0004e800000000000,0x0000000000000000,0x00000046000000000},
+ { 0x0000000000000003,0x0002c74d5d73d0252,0x0000000000000006,0x0000007b99ca64710,0x0000000000000000,0x0002c800000000000,0x0000000000000000,0x0000007ba00000000},
+ { 0x000000000000000c,0x00004be346247ab14,0x0000000000000026,0x00000000000000238,0x0000000000000000,0x00004c00000000000,0x0000000000000026,0x00000000000000238},
+ { 0x0000000000000000,0x00000001550a93092,0x0000000000000006,0x00000000c59e257e3,0x0000000000000000,0x00000001558000000,0x0000000000000000,0x00000000c5c000000},
+ { 0x000000000000705e,0x051c2f7acd4deab10,0x0000000000009a12,0x000034d60e12199ef,0x0000000000000000,0x051e0000000000000,0x0000000000000000,0x000034e0000000000},
+ { 0x0000000000000003,0x0000003b34aceb5bb,0x0000002eb0b1268a,0x00000008ad2d4e971,0x0000000000000000,0x0000003b400000000,0x0000002ea0000000,0x00000008ae0000000},
+ { 0x0000000000002d03,0x00d6b9bdcb9ae547a,0x0000000000007a59,0x0005ecf4fac0a588d,0x0000000000000000,0x00d6c000000000000,0x0000000000000000,0x0005ee00000000000},
+ { 0x0000000000000053,0x001d93ad0c4bab5fa,0x0000000000000300,0x000000006e67a5f84,0x0000000000000000,0x001d9800000000000,0x0000000000000000,0x000000006e8000000},
+ { 0x00000000000000eb,0x0000210ebe829b127,0x00000000000543f0,0x00000000009423364,0x0000000000000000,0x00002110000000000,0x0000000000040000,0x00000000009440000},
+ { 0x0000000000000119,0x00fed722999bc5607,0x00000000000003e4,0x0000000000000149a,0x0000000000000000,0x00ff0000000000000,0x00000000000003e0,0x000000000000014a0},
+ { 0x0000000000026178,0x0385561e17ffdcdac,0x000260994c5461e0,0x0004a56fd7d4ffac0,0x0000000000000000,0x03860000000000000,0x0002600000000000,0x0004a600000000000},
+ { 0x0000000000000006,0x00761622f726a4185,0x00000000011e5f2a,0x00000000006a5555d,0x0000000000000000,0x00762000000000000,0x00000000011e0000,0x00000000006a60000},
+ { 0x0000000000e69d1a,0x0000008a65175c9cd,0x00000003442f3b2f,0x00000020addf94732,0x0000000000000000,0x0000008a800000000,0x0000000300000000,0x00000020b00000000},
+ { 0x0000000000000007,0x00cacdae03dbf1267,0x0214eef0b93aef26,0x00913aff9aeb43571,0x0000000000000000,0x00cb0000000000000,0x0214000000000000,0x00914000000000000},
+ { 0x0000000000000008,0x0000036231440b6d0,0x000000000001841b,0x00000000001ce9b6d,0x0000000000000000,0x00000363000000000,0x0000000000018000,0x00000000001cf0000},
+ { 0x0000000000000001,0x03dbf52074fd902f8,0x000000000003aa89,0x000000c5172bbd7b7,0x0000000000000000,0x03dc0000000000000,0x0000000000000000,0x000000c5400000000},
+ { 0x000000000000060c,0x00028c1f0f15ad78b,0x000062298a2ada1a,0x00001e735508d17ad,0x0000000000000000,0x00028d00000000000,0x0000620000000000,0x00001e78000000000},
+ { 0x000000000000001f,0x0001436fc109f6a06,0x000000000000008f,0x0000048e66d1a1628,0x0000000000000000,0x00014380000000000,0x0000000000000000,0x00000490000000000},
+ { 0x0000000000000ad4,0x07f83acbba866af6d,0x0000000000000c43,0x00000000000026ffa,0x0000000000000000,0x07fa0000000000000,0x0000000000000c00,0x00000000000027000},
+ { 0x0000000000017553,0x0000c241b726223af,0x0000000000032344,0x00000000000066d34,0x0000000000000000,0x0000c280000000000,0x0000000000032300,0x00000000000066e00},
+ { 0x0000000000000005,0x00000080ccb062e6c,0x0000000408a88e43,0x0000006ac65f3ac62,0x0000000000000000,0x00000081000000000,0x0000000400000000,0x0000006ae00000000},
+ { 0x000000000020da7c,0x00476e80b02662e83,0x00001a9c159487e6,0x0002d796fa80a540c,0x0000000000000000,0x00478000000000000,0x0000100000000000,0x0002d800000000000},
+ { 0x00000000000002fc,0x0005d5133301577ee,0x000000000ddbe3d9,0x00000001f85baf44f,0x0000000000000000,0x0005d600000000000,0x0000000008000000,0x00000001f88000000},
+ { 0x0000000000000007,0x000c00de2231415f9,0x00001919e26504b1,0x000005645471d436e,0x0000000000000000,0x000c0400000000000,0x0000191000000000,0x00000565000000000},
+ { 0x0000000000001579,0x00004ac3c3f360d1f,0x00000000000038ba,0x0000000feeb564105,0x0000000000000000,0x00004ae0000000000,0x0000000000000000,0x0000000ff00000000},
+ { 0x0000000000000036,0x000000063d34307c2,0x00000000000003c8,0x00000000b89b26ff1,0x0000000000000000,0x000000063e0000000,0x0000000000000000,0x00000000b8c000000},
+ { 0x0000000000000006,0x0001dd4e020931b38,0x000000000472a7cb,0x000010c31dad2193b,0x0000000000000000,0x0001dd80000000000,0x0000000000000000,0x000010c8000000000},
+ { 0x0000000000000001,0x0000000007b488555,0x0000000000021b00,0x0000000001c8dd172,0x0000000000000000,0x0000000007b600000,0x0000000000000000,0x0000000001c900000},
+ { 0x00000000010346a0,0x00001712d5cd65b9e,0x000000000b979e40,0x0000000038d299dd2,0x0000000000000000,0x00001718000000000,0x000000000b000000,0x0000000038e000000},
+ { 0x0000005a1a5a6641,0x010e534634b36963b,0x00000b1292849e40,0x0001cec3df72acf76,0x0000000000000000,0x010e8000000000000,0x0000080000000000,0x0001cf00000000000},
+ { 0x000000000009d638,0x006ebede29e27952b,0x00000000002f4450,0x000c8c2db77d8bbd6,0x0000000000000000,0x006ec000000000000,0x0000000000000000,0x000c9000000000000},
+ { 0x0000000000000003,0x0054aa215e4ac63db,0x000000032c122cee,0x0002ffe62372f3f4d,0x0000000000000000,0x0054c000000000000,0x0000000000000000,0x00030000000000000},
+ { 0x0000000000000700,0x01e1ffcbc5e9f1e8d,0x0000d85d6ff3dcf7,0x0006ce380073fdaaa,0x0000000000000000,0x01e20000000000000,0x0000c00000000000,0x0006d000000000000},
+ { 0x0000000000000015,0x0001141f8520580d6,0x000000000000009d,0x000000010175f5a81,0x0000000000000000,0x00011480000000000,0x0000000000000000,0x00000001018000000},
+ { 0x0000000000000000,0x0000fcb9af7f3ab99,0x000000000000000b,0x0000000000000000e,0x0000000000000000,0x0000fcc0000000000,0x000000000000000b,0x0000000000000000e},
+ { 0x0000000000000003,0x000a1a0b90af453b0,0x000000000018651c,0x000000e7df99c4137,0x0000000000000000,0x000a1c00000000000,0x0000000000000000,0x000000e8000000000},
+ { 0x000000003127fc25,0x00003e6271596b36a,0x000000345008df3f,0x0000001fb9d1cf5bb,0x0000000000000000,0x00003e70000000000,0x0000003400000000,0x0000001fc00000000},
+ { 0x000000000000006a,0x00d1be5d2f20ffe21,0x000000000000015a,0x000063fcfb04ce9ea,0x0000000000000000,0x00d1c000000000000,0x0000000000000000,0x00006400000000000},
+ { 0x000000000000064d,0x00000015f0d3ff13e,0x000000000046c88d,0x000000000007e1e82,0x0000000000000000,0x00000015f80000000,0x000000000046c000,0x000000000007e2000},
+ { 0x0000000000000036,0x0000325962e1e072e,0x0000000000000725,0x0000000000a8d9f65,0x0000000000000000,0x00003260000000000,0x0000000000000000,0x0000000000a900000},
+ { 0x0000000000000002,0x00000001ea0546360,0x00000000000017e4,0x0000000000591327a,0x0000000000000000,0x00000001ea8000000,0x0000000000000000,0x00000000005920000},
+ { 0x0000000000000002,0x001b368e6da4c89da,0x0000000000000f4a,0x00000000000001aff,0x0000000000000000,0x001b3800000000000,0x0000000000000f4a,0x00000000000001aff},
+ { 0x0000000000000000,0x0399ab42305f3db49,0x0000060c2b171b4a,0x000015f5e1ec66a54,0x0000000000000000,0x039a0000000000000,0x0000060000000000,0x000015f8000000000},
+ { 0x0000000000000098,0x0058ea37c04cd1379,0x0000001c9b5d5f03,0x00063134b1c3fbb22,0x0000000000000000,0x00590000000000000,0x0000000000000000,0x00063200000000000},
+ { 0x000000000000004d,0x034f721c0a06788b7,0x00000000005b9203,0x000000000018f36a1,0x0000000000000000,0x03500000000000000,0x00000000005b8000,0x000000000018f8000},
+ { 0x0000000000000029,0x0047d9f3884dd568f,0x0000000000000254,0x000000052dc2136cd,0x0000000000000000,0x0047e000000000000,0x0000000000000000,0x000000052e0000000},
+ { 0x00000000000dabe0,0x0000526e2d0a3a4f2,0x00000000468a1054,0x00000000155920633,0x0000000000000000,0x00005280000000000,0x0000000046800000,0x00000000156000000},
+ { 0x0000000000000003,0x024e1b64b2e3d17e2,0x00000000000003e4,0x0000063fce8fe8bad,0x0000000000000000,0x024f0000000000000,0x0000000000000000,0x00000640000000000},
+ { 0x000000000000007a,0x05ae12a40f7149eec,0x0000000101f8fb17,0x00000029813244608,0x0000000000000000,0x05b00000000000000,0x0000000100000000,0x00000029900000000},
+ { 0x000000000001619d,0x0000d3979ed2086b4,0x00000000e585b578,0x000000010d99be6a2,0x0000000000000000,0x0000d3c0000000000,0x00000000e4000000,0x000000010dc000000},
+ { 0x000000000012a212,0x0000000000657daff,0x0000000000580918,0x00000000003abe676,0x0000000000120000,0x00000000006580000,0x0000000000580000,0x00000000003ac0000},
+ { 0x000000000001dcdb,0x00008c04c113a6077,0x0000001c6fbe9767,0x00003d8773aa86820,0x0000000000000000,0x00008c40000000000,0x0000000000000000,0x00003d90000000000},
+ { 0x0000000000000063,0x00000000f2d5ea8d1,0x0000000000053f0a,0x0000000040ee5bb80,0x0000000000000000,0x00000000f30000000,0x0000000000000000,0x00000000410000000},
+ { 0x0000000000000468,0x0200f01b8ee12ef50,0x00000004fdf2add0,0x0000009b7cfdd0a9a,0x0000000000000000,0x02010000000000000,0x0000000400000000,0x0000009b800000000},
+ { 0x000000000054249a,0x0000982534c07bb49,0x000000000186547f,0x00000000027830207,0x0000000000000000,0x00009840000000000,0x0000000001800000,0x00000000027900000},
+ { 0x00000003f2e17047,0x00309b2d1c4aa556f,0x000004ced97d8e41,0x00001182944711c2d,0x0000000000000000,0x0030a000000000000,0x0000048000000000,0x00001188000000000},
+ { 0x0000000000001b42,0x00005cc416ef10025,0x00000000000b8d31,0x00000001760502871,0x0000000000000000,0x00005ce0000000000,0x0000000000000000,0x00000001768000000},
+ { 0x00000000000003ea,0x00002ac36815f4753,0x0000000000febf1e,0x0000000017c9fb001,0x0000000000000000,0x00002ad0000000000,0x0000000000800000,0x0000000017d000000},
+ { 0x0000000000000006,0x00002350f906601fd,0x000000000001d9e1,0x00000000000046bf3,0x0000000000000000,0x00002360000000000,0x000000000001d900,0x00000000000046c00},
+};
diff --git a/gdb/cheri-compressed-cap/test/setbounds_test_128.cpp b/gdb/cheri-compressed-cap/test/setbounds_test_128.cpp
new file mode 100644
index 00000000000..50eb736da3f
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/setbounds_test_128.cpp
@@ -0,0 +1,63 @@
+#define TEST_CC_FORMAT_LOWER 128
+#define TEST_CC_FORMAT_UPPER 128
+
+#define HAVE_SAIL_SETBOUNDS_TEST_CASES
+#include "setbounds_inputs_128.cpp"
+
+#include "setbounds_test_common.cpp"
+
+TEST_CASE("regression from cheritest", "[bounds]") {
+ // The length of 0x0000000000ffffff should not be representable since it uses more than 14/23 bits
+ // Therefore it should be rounded up but we were was not doing it correctly.
+ // sail log:
+ // 1 <- t:1 s:0 perms:0x00078FFF type:0xFFFFFFFFFFFFFFFF offset:0xFFFFFFFFFF000000 base:0x0000000000000000
+ // length:0x10000000000000000
+ // PC: 0x900000004000114C op:0x48010848 (csetbounds)
+ // 1 <- t:1 s:0 perms:0x00078FFF type:0xFFFFFFFFFFFFFFFF offset:0x0000000000000000 base:0xFFFFFFFFFF000000
+ // length:0x00000000001000000
+ // qemu log:
+ // 0x9000000040001148: csetoffset c1,c1,t0
+ // Write C01|v:1 s:0 p:00078fff b:0000000000000000 l:ffffffffffffffff
+ // |o:ffffffffff000000 t:3ffff
+ // 0x900000004000114c: csetbounds c1,c1,at
+ // Write C01|v:1 s:0 p:00078fff b:ffffffffff000000 l:0000000000ffffff
+ // |o:0000000000000000 t:3ffff
+
+ cc128_cap_t initial = make_max_perms_cap(0, 0xFFFFFFFFFF000000, CC128_MAX_LENGTH);
+ cc128_cap_t with_bounds = check_bounds_exact<TestAPI128>(initial, 0xffffff, false);
+ CHECK(with_bounds.cr_base == 0xFFFFFFFFFF000000);
+ CHECK(with_bounds.offset() == 0x0000000000000000);
+ CHECK(with_bounds.length() == 0x00000000001000000);
+}
+
+TEST_CASE("Old format setbounds regression with new format", "[old]") {
+ // 0x9000000040000fdc: cincoffsetimm c3,c1,7
+ // Write C03|v:1 s:0 p:00078fff b:0000000000000000 l:ffffffffffffffff
+ // |o:0000000000000007 t:ffffff
+ // 0x9000000040000fe0: lui a0,0x1000
+ // Write a0 = 0000000010000000
+ // 0x9000000040000fe4: csetbounds c3,c3,a0
+ // -> crash
+ auto cap = make_max_perms_cap(0, 7, CC128_MAX_LENGTH);
+ uint64_t requested_length = 0x0000000010000000;
+ cc128_cap_t with_bounds = check_bounds_exact<TestAPI128>(cap, requested_length, false);
+ CHECK(with_bounds.cr_base == 0x0000000000000000);
+ CHECK(with_bounds.offset() == 0x0000000000000007);
+ // Higher precision in old format -> more exact bounds
+ uint64_t expected_length = TESTING_OLD_FORMAT ? 0x0000000010000400 : 0x00000000010080000;
+ CHECK(with_bounds.length() == expected_length);
+}
+
+TEST_CASE("Cheritest regression case", "[regression]") {
+ // dli $t0, 0x160600000
+ // cgetdefault $c1
+ // csetoffset $c1, $c1, $t0
+ // dli $t1, 0x300000
+ // csetbounds $c1, $c1, $t1
+ auto cap = make_max_perms_cap(0, 0x160600000, CC128_MAX_LENGTH);
+ cc128_cap_t with_bounds = check_bounds_exact<TestAPI128>(cap, 0x300000, true);
+ CHECK(with_bounds.cr_base == 0x160600000);
+ CHECK(with_bounds.offset() == 0);
+ CHECK(with_bounds.length() == 0x300000);
+ CHECK(with_bounds.address() == cap.address());
+}
diff --git a/gdb/cheri-compressed-cap/test/setbounds_test_128m.cpp b/gdb/cheri-compressed-cap/test/setbounds_test_128m.cpp
new file mode 100644
index 00000000000..dea57314df9
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/setbounds_test_128m.cpp
@@ -0,0 +1,7 @@
+#define TEST_CC_FORMAT_LOWER 128m
+#define TEST_CC_FORMAT_UPPER 128M
+#define TEST_CC_IS_MORELLO
+
+// TODO: Generate test cases from sail
+
+#include "setbounds_test_common.cpp"
diff --git a/gdb/cheri-compressed-cap/test/setbounds_test_64.cpp b/gdb/cheri-compressed-cap/test/setbounds_test_64.cpp
new file mode 100644
index 00000000000..07fea5fb094
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/setbounds_test_64.cpp
@@ -0,0 +1,6 @@
+#define TEST_CC_FORMAT_LOWER 64
+#define TEST_CC_FORMAT_UPPER 64
+
+// TODO: Generate test cases from sail
+
+#include "setbounds_test_common.cpp"
diff --git a/gdb/cheri-compressed-cap/test/setbounds_test_common.cpp b/gdb/cheri-compressed-cap/test/setbounds_test_common.cpp
new file mode 100644
index 00000000000..9ad07b612bf
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/setbounds_test_common.cpp
@@ -0,0 +1,181 @@
+#include <cinttypes>
+#include <cstdint>
+#include <cstdlib>
+#include <cstring>
+
+#include "test_common.cpp"
+
+#if 0
+struct setbounds_regressions {
+ uint64_t base1;
+ uint64_t base2;
+ uint64_t top2;
+ uint64_t top1;
+} regression_inputs[] = {
+ {0x000000000086D6A0, 0x000000000000004B, 0x000000007CF18F9B, 0x000000000006D6A8},
+ {0x00000712B609C5B0, 0x00000000032DC20F, 0x00000008032D1C77, 0x0000000000000007},
+ {0x0B87DF010D7254BB, 0x00000800085F0270, 0x000000000900A7CA, 0x00000000000049FE},
+ {0x0080018A6ACD2D6C, 0x0000BEDAF8F73C0F, 0x000001991A6FD045, 0x004D37033A19B295},
+ {0x0000003FFFF8EDC8, 0x0000000000032796, 0x000000902DCEEE9C, 0x0000000000003D0E},
+ {0x000000000006cdf7, 0x0000000000214459, 0x0000000000086940, 0x1fffff5b88378ec7},
+ {0x0010D700C6318A88, 0x383264C38950ADB7, 0x00000D5EBA967A84, 0x0000000002FFFFCE},
+};
+#endif
+
+template <typename Handler>
+static inline void check_csetbounds_invariants(const typename Handler::cap_t& initial_cap,
+ const typename Handler::cap_t& with_bounds, bool was_exact,
+ _cc_addr_t requested_base, typename Handler::length_t requested_top) {
+ CAPTURE(initial_cap, with_bounds, was_exact);
+ // Address should be the same!
+ REQUIRE(with_bounds.address() == initial_cap.address());
+ if (was_exact) {
+ REQUIRE(with_bounds.base() == requested_base);
+ REQUIRE(with_bounds.top() == requested_top);
+ } else {
+ REQUIRE(with_bounds.base() <= requested_base); // base must not be greater than what we asked for
+ REQUIRE(with_bounds.top() >= requested_top); // top must not be less than what we asked for
+ // At least one must be different otherwise was_exact is not correct
+ REQUIRE((with_bounds.top() != requested_top || with_bounds.base() != requested_base));
+ }
+ REQUIRE(with_bounds.base() >= initial_cap.base()); // monotonicity broken
+ REQUIRE(with_bounds.top() <= initial_cap.top()); // monotonicity broken
+ REQUIRE(Handler::is_representable_cap_exact(&with_bounds)); // result of csetbounds must be representable
+}
+
+template <typename Handler>
+static typename Handler::cap_t do_csetbounds(const typename Handler::cap_t& initial_cap,
+ typename Handler::length_t requested_top, bool* was_exact) {
+ typename Handler::cap_t with_bounds = initial_cap;
+ typename Handler::addr_t requested_base = initial_cap.address();
+ CAPTURE(initial_cap, requested_top, requested_base);
+ bool exact = Handler::setbounds(&with_bounds, requested_base, requested_top);
+ CAPTURE(with_bounds, exact);
+
+ typename Handler::cap_t sail_with_bounds = initial_cap;
+ bool sail_exact = Handler::sail_setbounds(&sail_with_bounds, requested_base, requested_top);
+ CAPTURE(sail_with_bounds, sail_exact);
+
+ CHECK(sail_with_bounds == with_bounds);
+ CHECK(sail_exact == exact);
+ check_csetbounds_invariants<Handler>(initial_cap, with_bounds, exact, requested_base, requested_top);
+
+ // Check that the cr_pesbt is updated correctly and matches sail
+ CHECK(with_bounds.cr_pesbt == Handler::compress_raw(&with_bounds));
+ CHECK(with_bounds.cr_pesbt == Handler::sail_compress_raw(&with_bounds));
+ // Re-create the bounded capability and assert that the current pesbt values matches that one.
+ auto new_cap = Handler::make_max_perms_cap(with_bounds.base(), with_bounds.address(), with_bounds.top());
+ CHECK(new_cap == with_bounds);
+ CHECK(new_cap.cr_pesbt == with_bounds.cr_pesbt);
+ CHECK(new_cap.cr_pesbt == Handler::compress_raw(&with_bounds));
+ CHECK(new_cap.cr_pesbt == Handler::sail_compress_raw(&with_bounds));
+
+ if (was_exact)
+ *was_exact = exact;
+ return with_bounds;
+}
+
+template <typename Handler>
+static _cc_cap_t check_bounds_exact(const typename Handler::cap_t& initial_cap,
+ typename Handler::length_t requested_length, bool should_be_exact) {
+ typename Handler::length_t req_top = initial_cap.address() + (typename Handler::length_t)requested_length;
+ bool exact = false;
+ _cc_cap_t with_bounds = do_csetbounds<Handler>(initial_cap, req_top, &exact);
+ CHECK(exact == should_be_exact);
+ return with_bounds;
+}
+
+// check_monotonic
+
+static inline _cc_length_t round_up_with_cram_mask(_cc_length_t value, _cc_length_t round_down_mask) {
+ // mask has all ones in the top
+ REQUIRE(_cc_N(idx_MSNZ)((_cc_addr_t)round_down_mask) == sizeof(_cc_addr_t) * 8 - 1);
+ // Round up using by adding ~mask to go over boundary and then round down with & mask
+ return (value + ~round_down_mask) & (round_down_mask);
+}
+
+static inline void check_cram_matches_setbounds(_cc_length_t req_top, const _cc_cap_t& cap_to_bound,
+ const _cc_cap_t& setbounds_result) {
+ // Check that rounding with cram is equivalent to setbounds rounding:
+ _cc_addr_t cram_value = _cc_N(get_alignment_mask)((_cc_addr_t)(req_top - cap_to_bound.address()));
+ CAPTURE(cram_value);
+ CAPTURE(cap_to_bound);
+ CAPTURE(setbounds_result);
+ CHECK((cap_to_bound.address() & cram_value) == setbounds_result.base());
+ CHECK(round_up_with_cram_mask(req_top, cram_value) == setbounds_result.top());
+}
+
+template <typename Handler>
+void test_zero_length_one_past_end() { // Create an out-of-bounds capability and set length to one
+ constexpr unsigned base = 12345;
+ constexpr unsigned base_plus_one = base + 1;
+ auto one_past_end = Handler::make_max_perms_cap(base, base_plus_one, base_plus_one);
+ bool exact;
+ auto result = do_csetbounds<Handler>(one_past_end, base_plus_one, &exact);
+ CHECK(result.base() == base_plus_one);
+ CHECK(result.top() == base_plus_one);
+ CHECK(result.address() == base_plus_one);
+ CHECK(result.cr_tag == 1);
+ CHECK(exact);
+ // Check that calling setbounds with the same target top yields the same result
+ bool same_again_exact = false;
+ auto same_again = do_csetbounds<Handler>(result, base_plus_one, &same_again_exact);
+ CHECK(result == same_again);
+}
+
+TEST_CASE("setbounds with req_top == top", "[bounds]") { test_zero_length_one_past_end<TestAPICC>(); }
+
+#ifdef HAVE_SAIL_SETBOUNDS_TEST_CASES
+TEST_CASE("setbounds test cases from sail", "[bounds]") {
+ using Handler = TestAPICC;
+ for (size_t index = 0; index < array_lengthof(setbounds_inputs); index++) {
+ CAPTURE(index);
+ const setbounds_input& input = setbounds_inputs[index];
+ auto first_input = make_max_perms_cap(0, input.base1, _CC_N(MAX_LENGTH));
+ REQUIRE(first_input.address() == input.base1);
+ REQUIRE(first_input.base() == 0);
+ REQUIRE(first_input.top() == _CC_N(MAX_LENGTH));
+ bool first_exact = false;
+ const _cc_cap_t first_bounds = do_csetbounds<Handler>(first_input, input.top1, &first_exact);
+ CHECK(first_bounds.base() == input.sail_cc_base1);
+ CHECK(first_bounds.top() == input.sail_cc_top1);
+ // Check CRAP/CRAM:
+ check_cram_matches_setbounds(input.top1, first_input, first_bounds);
+
+ // Check that calling setbounds with the same target top yields the same result
+ bool first_again_exact = false;
+ const _cc_cap_t first_bounds_again = do_csetbounds<Handler>(first_bounds, input.top1, &first_again_exact);
+ CHECK(first_again_exact == first_exact);
+ CHECK(first_bounds.base() == first_bounds_again.base());
+ CHECK(first_bounds.top() == first_bounds_again.top());
+ CHECK(first_bounds.address() == first_bounds_again.address());
+ // Check CRAM still works:
+ check_cram_matches_setbounds(input.top1, first_bounds, first_bounds_again);
+
+ // Check the second csetbounds:
+ _cc_cap_t second_input = first_bounds;
+ second_input._cr_cursor += input.base2 - second_input.address();
+ REQUIRE(second_input.address() == input.base2);
+ bool second_exact = false;
+ const _cc_cap_t second_bounds = do_csetbounds<Handler>(second_input, input.top2, &second_exact);
+ CHECK(second_bounds.base() == input.sail_cc_base2);
+ CHECK(second_bounds.top() == input.sail_cc_top2);
+ // Check CRAP/CRAM:
+ check_cram_matches_setbounds(input.top2, second_input, second_bounds);
+
+ if (second_bounds.cr_base >= second_bounds.top()) {
+ INFO("Cannot set bounds on capability that is not in-bounds");
+ continue;
+ }
+ // Check that calling setbounds with the same target top yields the same result
+ bool second_again_exact = false;
+ const _cc_cap_t second_bounds_again =
+ do_csetbounds<Handler>(second_bounds, input.top2, &second_again_exact);
+ CHECK(second_again_exact == second_exact);
+ CHECK(second_bounds.base() == second_bounds_again.base());
+ CHECK(second_bounds.top() == second_bounds_again.top());
+ CHECK(second_bounds.address() == second_bounds_again.address());
+ check_cram_matches_setbounds(input.top2, second_bounds, second_bounds_again);
+ }
+}
+#endif
diff --git a/gdb/cheri-compressed-cap/test/simple_test_128.cpp b/gdb/cheri-compressed-cap/test/simple_test_128.cpp
new file mode 100644
index 00000000000..9943bcf3a64
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/simple_test_128.cpp
@@ -0,0 +1,16 @@
+#define TEST_CC_FORMAT_LOWER 128
+#define TEST_CC_FORMAT_UPPER 128
+
+#include "simple_test_common.cpp"
+
+TEST_CASE("QEMU representability regression tests", "[representable]") {
+ // regression test from QEMU broken cincoffset
+ CHECK(check_repr(false, 0x00000000000b7fcc, 0x00000000000000e1, 52));
+ check_representable(0x00000000000b7fcc, 0x00000000000000e1, 52, true, "regression");
+ // $c17: v:1 s:0 p:0007817d b:00000000401cf020 l:0000000000001800 o:0 t:-1 + 0x1800
+ check_representable(0x00000000401cf020, 0x0000000000001800, 0x1800, true, "regression");
+ CHECK(check_repr(false, 0x00000000401cf020, 0x0000000000001800, 0x1800));
+ // $c18: v:1 s:0 p:0007817d b:00000000401ffff8 l:0000000000000008 o:0 t:-1 + 0x8
+ check_representable(0x00000000401ffff8, 0x0000000000000008, 0x8, true, "regression");
+ CHECK(check_repr(false, 0x00000000401ffff8, 0x0000000000000008, 0x8));
+}
diff --git a/gdb/cheri-compressed-cap/test/simple_test_128m.cpp b/gdb/cheri-compressed-cap/test/simple_test_128m.cpp
new file mode 100644
index 00000000000..3a67dc7ad13
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/simple_test_128m.cpp
@@ -0,0 +1,5 @@
+#define TEST_CC_FORMAT_LOWER 128m
+#define TEST_CC_FORMAT_UPPER 128M
+#define TEST_CC_IS_MORELLO
+
+#include "simple_test_common.cpp"
diff --git a/gdb/cheri-compressed-cap/test/simple_test_256.cpp b/gdb/cheri-compressed-cap/test/simple_test_256.cpp
new file mode 100644
index 00000000000..12ede5edfd7
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/simple_test_256.cpp
@@ -0,0 +1,48 @@
+#define TEST_CC_FORMAT_LOWER 256
+#define TEST_CC_FORMAT_UPPER 256
+#define TEST_CC_IS_CHERI256
+
+#include "test_common.cpp"
+
+TEST_CASE("Compressed NULL cap encodes to zeroes", "[nullcap]") {
+ cc256_cap_t null_cap;
+ memset(&null_cap, 0, sizeof(null_cap));
+ null_cap.cr_otype = CC256_OTYPE_UNSEALED;
+ null_cap.cr_length = CC256_NULL_LENGTH;
+ inmemory_chericap256 buffer;
+ compress_256cap(&buffer, &null_cap);
+ check(buffer.u64s[0], (uint64_t)0, "compressing NULL should result in zero[0]");
+ check(buffer.u64s[1], (uint64_t)0, "compressing NULL should result in zero[1]");
+ check(buffer.u64s[2], (uint64_t)0, "compressing NULL should result in zero[2]");
+ check(buffer.u64s[3], (uint64_t)0, "compressing NULL should result in zero[3]");
+
+ // compressing this result should give 0 again
+ cc256_cap_t decompressed;
+ memset(&decompressed, 'b', sizeof(decompressed));
+ decompress_256cap(buffer, &decompressed, false);
+ CHECK_FIELD(decompressed, base, 0);
+ CHECK_FIELD(decompressed, offset, 0);
+ CHECK_FIELD(decompressed, software_permissions, 0);
+ CHECK_FIELD(decompressed, permissions, 0);
+ CHECK_FIELD_RAW(decompressed.length(), CC256_NULL_LENGTH);
+ CHECK_FIELD(decompressed, type, CC256_OTYPE_UNSEALED);
+}
+
+TEST_CASE("Zeroes decode to NULL cap", "[nullcap]") {
+ inmemory_chericap256 buffer;
+ cc256_cap_t result;
+ memset(&buffer.bytes, 0, sizeof(buffer));
+ memset(&result, 'a', sizeof(result));
+ decompress_256cap(buffer, &result, false);
+ fprintf(stderr, "Decompressed 256-bit NULL cap:\n");
+ dump_cap_fields(result);
+ fprintf(stderr, "\n");
+ CHECK_FIELD(result, base, 0);
+ CHECK_FIELD(result, offset, 0);
+ CHECK_FIELD(result, software_permissions, 0);
+ CHECK_FIELD(result, permissions, 0);
+ CHECK_FIELD(result, flags, 0);
+ CHECK_FIELD(result, reserved_bits, 0);
+ CHECK_FIELD_RAW(result.length(), CC256_NULL_LENGTH);
+ CHECK_FIELD(result, type, CC256_OTYPE_UNSEALED);
+}
diff --git a/gdb/cheri-compressed-cap/test/simple_test_64.cpp b/gdb/cheri-compressed-cap/test/simple_test_64.cpp
new file mode 100644
index 00000000000..5181f1955a2
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/simple_test_64.cpp
@@ -0,0 +1,4 @@
+#define TEST_CC_FORMAT_LOWER 64
+#define TEST_CC_FORMAT_UPPER 64
+
+#include "simple_test_common.cpp"
diff --git a/gdb/cheri-compressed-cap/test/simple_test_common.cpp b/gdb/cheri-compressed-cap/test/simple_test_common.cpp
new file mode 100644
index 00000000000..1f4e5299458
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/simple_test_common.cpp
@@ -0,0 +1,137 @@
+#include "test_common.cpp"
+
+// Due to magic constant XOR aversion (i.e. fields are either entirely
+// inverted or not at all, rather than select bits within them like in
+// normal CHERI Concentrate), NULL is special in Morello, with bounds
+// using the maximum encodable exponent, not the minimum necessary one
+// like is used for the reset capability.
+#ifndef TEST_CC_IS_MORELLO
+TEST_CASE("Compressed NULL cap has canonical bounds", "[nullcap]") {
+ _cc_cap_t null_cap;
+ memset(&null_cap, 0, sizeof(null_cap));
+ _cc_N(update_otype)(&null_cap, _CC_N(OTYPE_UNSEALED));
+ null_cap._cr_top = _CC_N(NULL_TOP);
+ null_cap.cr_pesbt = _CC_N(NULL_PESBT);
+ bool ebt_exact = true;
+ uint32_t computed_ebt = _cc_N(compute_ebt)(null_cap.cr_base, null_cap._cr_top, NULL, &ebt_exact);
+ REQUIRE((computed_ebt & _CC_N(FIELD_EBT_MASK64)) == (null_cap.cr_pesbt & _CC_N(FIELD_EBT_MASK64)));
+ REQUIRE(ebt_exact);
+}
+#endif
+
+// TODO: Implement non-stub sail_compress_common_mem/raw for Morello
+#ifndef TEST_CC_IS_MORELLO
+TEST_CASE("Compressed NULL cap encodes to zeroes", "[nullcap]") {
+ _cc_cap_t null_cap;
+ memset(&null_cap, 0, sizeof(null_cap));
+ _cc_N(update_otype)(&null_cap, _CC_N(OTYPE_UNSEALED));
+ null_cap._cr_top = _CC_N(NULL_TOP);
+ null_cap.cr_pesbt = _CC_N(NULL_PESBT);
+ auto pesbt = _cc_N(compress_mem)(&null_cap);
+ auto pesbt_from_sail = _cc_sail_compress_mem(&null_cap);
+ CHECK(pesbt == pesbt_from_sail);
+ auto pesbt_without_xor = _cc_N(compress_raw)(&null_cap);
+ auto pesbt_from_sail_without_xor = _cc_sail_compress_raw(&null_cap);
+ CHECK(pesbt_without_xor == pesbt_from_sail_without_xor);
+ fprintf(stderr, "NULL ENCODED: 0x%llx\n", (long long)pesbt_without_xor);
+ CHECK(pesbt_without_xor == _CC_N(NULL_XOR_MASK));
+ check(pesbt, (_cc_addr_t)0, "compressing NULL should result in zero pesbt");
+ _cc_cap_t decompressed;
+ memset(&decompressed, 'b', sizeof(decompressed));
+ _cc_N(decompress_mem)(pesbt, 0, false, &decompressed);
+ CHECK_FIELD(decompressed, base, 0);
+ CHECK(decompressed.address() == 0);
+ CHECK_FIELD(decompressed, software_permissions, 0);
+ CHECK_FIELD(decompressed, permissions, 0);
+ CHECK((decompressed.cr_pesbt & _CC_N(FIELD_EBT_MASK64)) == (_CC_N(NULL_PESBT) & _CC_N(FIELD_EBT_MASK64)));
+ CHECK(_cc_N(get_reserved)(&decompressed) == 0); // reserved bits
+ CHECK(decompressed.length() == _CC_N(NULL_LENGTH));
+ CHECK(decompressed.top() == _CC_N(NULL_TOP));
+ CHECK_FIELD(decompressed, type, _CC_N(OTYPE_UNSEALED));
+}
+#endif
+
+TEST_CASE("Zeroes decode to NULL cap", "[nullcap]") {
+ _cc_cap_t result;
+ memset(&result, 'a', sizeof(result));
+ CompressedCapCC::decompress_mem(0, 0, false, &result);
+ fprintf(stderr, "Decompressed NULL cap:\n");
+ dump_cap_fields(result);
+ fprintf(stderr, "\n");
+ CHECK_FIELD(result, base, 0);
+ CHECK_FIELD(result, offset, 0);
+ CHECK_FIELD(result, software_permissions, 0);
+ CHECK_FIELD(result, permissions, 0);
+ CHECK_FIELD(result, flags, 0);
+ CHECK_FIELD(result, reserved_bits, 0);
+ CHECK((result.cr_pesbt & _CC_N(FIELD_EBT_MASK64)) == (_CC_N(NULL_PESBT) & _CC_N(FIELD_EBT_MASK64)));
+ CHECK_FIELD_RAW(result.length(), _CC_N(NULL_LENGTH));
+ CHECK_FIELD(result, type, _CC_N(OTYPE_UNSEALED));
+}
+
+static void check_representable(_cc_addr_t base, _cc_length_t length, _cc_addr_t offset, bool should_work,
+ const std::string& ctx) {
+ // INFO("Checking representability for " << ctx);
+ // INFO("Base = " << base);
+ // INFO("Length = " << length);
+ // INFO("Expected to work = " << should_work);
+ CAPTURE(base, length, should_work, ctx);
+ _cc_cap_t cap;
+ memset(&cap, 0, sizeof(cap));
+ cap.cr_base = base;
+ cap._cr_cursor = base + offset;
+ cap._cr_top = base + length;
+ cap.cr_tag = true;
+ bool exact_input = false;
+ cap.cr_pesbt = _cc_N(compute_ebt)(cap.cr_base, cap._cr_top, NULL, &exact_input);
+ _cc_N(update_otype)(&cap, _CC_N(OTYPE_UNSEALED));
+ REQUIRE(exact_input == should_work);
+ _cc_addr_t compressed = _cc_N(compress_mem)(&cap);
+ _cc_cap_t decompressed;
+ memset(&decompressed, 0, sizeof(decompressed));
+
+ _cc_N(decompress_mem)(compressed, cap.cr_base + cap.offset(), cap.cr_tag, &decompressed);
+ CAPTURE(cap);
+ CAPTURE(decompressed);
+ bool unsealed_roundtrip = cap.cr_base == decompressed.cr_base && cap.length() == decompressed.length() &&
+ cap.offset() == decompressed.offset();
+ bool unsealed_representable = _cc_N(is_representable_cap_exact)(&cap);
+ CHECK(unsealed_representable == should_work);
+ CHECK(unsealed_roundtrip == unsealed_representable);
+ // TODO: CHECK(fast_representable == unsealed_representable);
+ auto cap_sealed = cap;
+ _cc_N(update_otype)(&cap_sealed, 5);
+ bool sealed_representable = _cc_N(is_representable_cap_exact)(&cap_sealed);
+ _cc_N(decompress_mem)(compressed, cap.cr_base + cap.offset(), cap.cr_tag, &decompressed);
+ bool sealed_roundtrip = cap.cr_base == decompressed.cr_base && cap.length() == decompressed.length() &&
+ cap.offset() == decompressed.offset();
+ CHECK(sealed_representable == should_work);
+ CHECK(sealed_roundtrip == unsealed_representable);
+ // fprintf(stderr, "Base 0x%" PRIx64 " Len 0x%" PRIx64 "%016" PRIx64 ": roundtrip: sealed=%d, unsealed=%d -- Fast:
+ // sealed=%d, unsealed=%d\n",
+ // base, (uint64_t)(length >> 64), (uint64_t)length, sealed_roundtrip, unsealed_roundtrip,
+ // sealed_representable, unsealed_representable);
+}
+
+static inline bool check_repr(bool sealed, _cc_addr_t base, _cc_addr_t length, _cc_addr_t offset) {
+ (void)sealed;
+ auto cap = make_max_perms_cap(base, base + offset, base + length);
+ return _cc_N(is_representable_cap_exact)(&cap);
+}
+
+TEST_CASE("Check max size cap representable", "[representable]") {
+ // 0000000d b:0000000000000000 l:ffffffffffffffff |o:0000000000000000 t:ffffff
+ check_representable(0, _CC_N(MAX_ADDRESS_PLUS_ONE), 0, true, "MAX_ADDRESS_PLUS_ONE length");
+ check_representable(0, 0, 0, true, "zero length");
+ check_representable(0, _CC_N(MAX_ADDR), 0, false, "MAX_ADDR length");
+
+ check_representable((_cc_addr_t)0xffffffffff000000, 0x00000000000ffffff, 0, false, "length with too many bits");
+}
+
+// TODO: Implement sail_null_pesbt_128
+#ifndef TEST_CC_IS_MORELLO
+TEST_CASE("Check NULL mask matches sail", "[sail]") {
+ CHECK(_cc_sail_null_pesbt() == _CC_N(NULL_PESBT));
+ CHECK(_cc_sail_null_pesbt() == _CC_N(NULL_XOR_MASK));
+}
+#endif
diff --git a/gdb/cheri-compressed-cap/test/test_common.cpp b/gdb/cheri-compressed-cap/test/test_common.cpp
new file mode 100644
index 00000000000..a959249151d
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/test_common.cpp
@@ -0,0 +1,6 @@
+#include "../cheri_compressed_cap.h"
+#include <unistd.h>
+
+#define CATCH_CONFIG_MAIN // This tells Catch to provide a main() - only do this in one cpp file
+#include "sail_wrapper.h"
+#include "test_util.h"
diff --git a/gdb/cheri-compressed-cap/test/test_util.h b/gdb/cheri-compressed-cap/test/test_util.h
new file mode 100644
index 00000000000..2130509e0a3
--- /dev/null
+++ b/gdb/cheri-compressed-cap/test/test_util.h
@@ -0,0 +1,95 @@
+#include <cinttypes>
+#include <iostream>
+#include <ostream>
+#include <string>
+
+#define CC_FORMAT_LOWER TEST_CC_FORMAT_LOWER
+#define CC_FORMAT_UPPER TEST_CC_FORMAT_UPPER
+
+#define DO_STRINGIFY2(x) #x
+#define DO_STRINGIFY1(x) DO_STRINGIFY2(x)
+#define STRINGIFY(x) DO_STRINGIFY1(x)
+
+static const char* otype_suffix(uint32_t otype) {
+ switch (otype) {
+#define OTYPE_CASE(Name, ...) \
+ case _CC_N(Name): return " (" STRINGIFY(_CC_N(Name)) ")";
+ _CC_N(LS_SPECIAL_OTYPES)(OTYPE_CASE, )
+ default: return "";
+ }
+}
+
+#ifndef TEST_CC_IS_CHERI256
+std::ostream& operator<<(std::ostream& os, const _cc_N(bounds_bits)& value);
+std::ostream& operator<<(std::ostream& os, const _cc_N(bounds_bits)& value) {
+ os << "{ B: " << (unsigned)value.B << " T: " << (unsigned)value.T << " E: " << (unsigned)value.E
+ << " IE: " << (unsigned)value.IE << " }";
+ return os;
+}
+
+static inline bool operator==(const _cc_N(bounds_bits)& a, const _cc_N(bounds_bits)& b) {
+ return a.B == b.B && a.E == b.E && a.T == b.T && a.IE == b.IE;
+}
+#endif
+
+#include "catch.hpp"
+
+static bool failed = false;
+
+template <typename T> static inline bool check(T expected, T actual, const std::string& msg) {
+ if (expected == actual)
+ return true;
+ std::cerr << "ERROR: " << msg << ": expected 0x" << std::hex << expected << " != 0x" << actual << "\n";
+ failed = true;
+ return false;
+}
+
+template <class T, std::size_t N> constexpr inline size_t array_lengthof(T (&)[N]) { return N; }
+
+template <class Cap> static void dump_cap_fields(const Cap& result) {
+ fprintf(stderr, "Permissions: 0x%" PRIx32 "\n", result.permissions()); // TODO: decode perms
+ fprintf(stderr, "User Perms: 0x%" PRIx32 "\n", result.software_permissions());
+ fprintf(stderr, "Base: 0x%016" PRIx64 "\n", (uint64_t)result.base());
+ fprintf(stderr, "Offset: 0x%016" PRIx64 "\n", (uint64_t)result.offset());
+ fprintf(stderr, "Cursor: 0x%016" PRIx64 "\n", (uint64_t)result.address());
+ unsigned __int128 len_full = result.length();
+ fprintf(stderr, "Length: 0x%" PRIx64 "%016" PRIx64 " %s\n", (uint64_t)(len_full >> 64), (uint64_t)len_full,
+ len_full > UINT64_MAX ? " (greater than UINT64_MAX)" : "");
+ unsigned __int128 top_full = result.top();
+ fprintf(stderr, "Top: 0x%" PRIx64 "%016" PRIx64 " %s\n", (uint64_t)(top_full >> 64), (uint64_t)top_full,
+ top_full > UINT64_MAX ? " (greater than UINT64_MAX)" : "");
+ fprintf(stderr, "Flags: %d\n", (int)result.flags());
+ fprintf(stderr, "Reserved: %d\n", (int)result.reserved_bits());
+ fprintf(stderr, "Sealed: %d\n", (int)result.is_sealed());
+ fprintf(stderr, "OType: 0x%" PRIx32 "%s\n", result.type(), otype_suffix(result.type()));
+ fprintf(stderr, "\n");
+}
+
+#ifndef TEST_CC_IS_CHERI256
+__attribute__((used)) static _cc_cap_t decompress_representable(_cc_addr_t pesbt_already_xored, _cc_addr_t cursor) {
+ _cc_cap_t result;
+ printf("Decompressing pesbt = %016" PRIx64 ", cursor = %016" PRIx64 "\n", (uint64_t)pesbt_already_xored, (uint64_t)cursor);
+ _cc_N(decompress_raw)(pesbt_already_xored, cursor, false, &result);
+ dump_cap_fields(result);
+ // Check that the result is the same again when compressed
+ _cc_addr_t new_pesbt_already_xored = _cc_N(compress_raw)(&result);
+ CHECK(pesbt_already_xored == new_pesbt_already_xored);
+ CHECK(cursor == result.address());
+ return result;
+}
+
+inline _cc_cap_t make_max_perms_cap(_cc_addr_t base, _cc_addr_t offset, _cc_length_t length) {
+ return _cc_N(make_max_perms_cap)(base, offset, length);
+}
+#endif
+
+#define CHECK_FIELD_RAW(value, expected) CHECK(value == expected)
+#define CHECK_FIELD(cap, field, expected) CHECK((uint64_t)expected == cap.field())
+
+enum {
+#ifdef CC128_OLD_FORMAT
+ TESTING_OLD_FORMAT = 1
+#else
+ TESTING_OLD_FORMAT = 0
+#endif
+};